{
  "version": 3,
  "sources": ["../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/index.js", "../../../node_modules/core-js/internals/global.js", "../../../node_modules/core-js/internals/fails.js", "../../../node_modules/core-js/internals/descriptors.js", "../../../node_modules/core-js/internals/function-bind-native.js", "../../../node_modules/core-js/internals/function-call.js", "../../../node_modules/core-js/internals/object-property-is-enumerable.js", "../../../node_modules/core-js/internals/create-property-descriptor.js", "../../../node_modules/core-js/internals/function-uncurry-this.js", "../../../node_modules/core-js/internals/classof-raw.js", "../../../node_modules/core-js/internals/indexed-object.js", "../../../node_modules/core-js/internals/require-object-coercible.js", "../../../node_modules/core-js/internals/to-indexed-object.js", "../../../node_modules/core-js/internals/is-callable.js", "../../../node_modules/core-js/internals/is-object.js", "../../../node_modules/core-js/internals/get-built-in.js", "../../../node_modules/core-js/internals/object-is-prototype-of.js", "../../../node_modules/core-js/internals/engine-user-agent.js", "../../../node_modules/core-js/internals/engine-v8-version.js", "../../../node_modules/core-js/internals/native-symbol.js", "../../../node_modules/core-js/internals/use-symbol-as-uid.js", "../../../node_modules/core-js/internals/is-symbol.js", "../../../node_modules/core-js/internals/try-to-string.js", "../../../node_modules/core-js/internals/a-callable.js", "../../../node_modules/core-js/internals/get-method.js", "../../../node_modules/core-js/internals/ordinary-to-primitive.js", "../../../node_modules/core-js/internals/is-pure.js", "../../../node_modules/core-js/internals/set-global.js", "../../../node_modules/core-js/internals/shared-store.js", "../../../node_modules/core-js/internals/shared.js", "../../../node_modules/core-js/internals/to-object.js", "../../../node_modules/core-js/internals/has-own-property.js", "../../../node_modules/core-js/internals/uid.js", "../../../node_modules/core-js/internals/well-known-symbol.js", "../../../node_modules/core-js/internals/to-primitive.js", "../../../node_modules/core-js/internals/to-property-key.js", "../../../node_modules/core-js/internals/document-create-element.js", "../../../node_modules/core-js/internals/ie8-dom-define.js", "../../../node_modules/core-js/internals/object-get-own-property-descriptor.js", "../../../node_modules/core-js/internals/v8-prototype-define-bug.js", "../../../node_modules/core-js/internals/an-object.js", "../../../node_modules/core-js/internals/object-define-property.js", "../../../node_modules/core-js/internals/create-non-enumerable-property.js", "../../../node_modules/core-js/internals/inspect-source.js", "../../../node_modules/core-js/internals/native-weak-map.js", "../../../node_modules/core-js/internals/shared-key.js", "../../../node_modules/core-js/internals/hidden-keys.js", "../../../node_modules/core-js/internals/internal-state.js", "../../../node_modules/core-js/internals/function-name.js", "../../../node_modules/core-js/internals/redefine.js", "../../../node_modules/core-js/internals/to-integer-or-infinity.js", "../../../node_modules/core-js/internals/to-absolute-index.js", "../../../node_modules/core-js/internals/to-length.js", "../../../node_modules/core-js/internals/length-of-array-like.js", "../../../node_modules/core-js/internals/array-includes.js", "../../../node_modules/core-js/internals/object-keys-internal.js", "../../../node_modules/core-js/internals/enum-bug-keys.js", "../../../node_modules/core-js/internals/object-get-own-property-names.js", "../../../node_modules/core-js/internals/object-get-own-property-symbols.js", "../../../node_modules/core-js/internals/own-keys.js", "../../../node_modules/core-js/internals/copy-constructor-properties.js", "../../../node_modules/core-js/internals/is-forced.js", "../../../node_modules/core-js/internals/export.js", "../../../node_modules/core-js/internals/create-property.js", "../../../node_modules/core-js/internals/array-slice-simple.js", "../../../node_modules/core-js/internals/object-get-own-property-names-external.js", "../../../node_modules/core-js/internals/to-string-tag-support.js", "../../../node_modules/core-js/internals/classof.js", "../../../node_modules/core-js/internals/to-string.js", "../../../node_modules/core-js/internals/array-sort.js", "../../../node_modules/core-js/internals/array-method-is-strict.js", "../../../node_modules/core-js/internals/engine-ff-version.js", "../../../node_modules/core-js/internals/engine-is-ie-or-edge.js", "../../../node_modules/core-js/internals/engine-webkit-version.js", "../../../node_modules/core-js/internals/is-array.js", "../../../node_modules/core-js/internals/is-constructor.js", "../../../node_modules/core-js/internals/array-species-constructor.js", "../../../node_modules/core-js/internals/array-species-create.js", "../../../node_modules/core-js/internals/array-method-has-species-support.js", "../../../node_modules/core-js/internals/is-integral-number.js", "../../../node_modules/core-js/internals/a-possible-prototype.js", "../../../node_modules/core-js/internals/object-set-prototype-of.js", "../../../node_modules/core-js/internals/inherit-if-required.js", "../../../node_modules/core-js/internals/this-number-value.js", "../../../node_modules/core-js/internals/whitespaces.js", "../../../node_modules/core-js/internals/string-trim.js", "../../../node_modules/core-js/internals/array-slice.js", "../../../node_modules/core-js/internals/array-fill.js", "../../../node_modules/core-js/internals/object-keys.js", "../../../node_modules/core-js/internals/object-define-properties.js", "../../../node_modules/core-js/internals/html.js", "../../../node_modules/core-js/internals/object-create.js", "../../../node_modules/core-js/internals/add-to-unscopables.js", "../../../node_modules/core-js/internals/function-bind-context.js", "../../../node_modules/core-js/internals/array-iteration.js", "../../../node_modules/core-js/internals/regexp-flags.js", "../../../node_modules/core-js/internals/regexp-sticky-helpers.js", "../../../node_modules/core-js/internals/regexp-unsupported-dot-all.js", "../../../node_modules/core-js/internals/regexp-unsupported-ncg.js", "../../../node_modules/core-js/internals/regexp-exec.js", "../../../node_modules/core-js/modules/es.regexp.exec.js", "../../../node_modules/core-js/internals/function-apply.js", "../../../node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js", "../../../node_modules/core-js/internals/string-multibyte.js", "../../../node_modules/core-js/internals/advance-string-index.js", "../../../node_modules/core-js/internals/get-substitution.js", "../../../node_modules/core-js/internals/regexp-exec-abstract.js", "../../../node_modules/core-js/internals/iterator-close.js", "../../../node_modules/core-js/internals/call-with-safe-iteration-closing.js", "../../../node_modules/core-js/internals/iterators.js", "../../../node_modules/core-js/internals/is-array-iterator-method.js", "../../../node_modules/core-js/internals/get-iterator-method.js", "../../../node_modules/core-js/internals/get-iterator.js", "../../../node_modules/core-js/internals/array-from.js", "../../../node_modules/core-js/internals/check-correctness-of-iteration.js", "../../../node_modules/core-js/internals/correct-prototype-getter.js", "../../../node_modules/core-js/internals/object-get-prototype-of.js", "../../../node_modules/core-js/internals/iterators-core.js", "../../../node_modules/core-js/internals/set-to-string-tag.js", "../../../node_modules/core-js/internals/create-iterator-constructor.js", "../../../node_modules/core-js/internals/define-iterator.js", "../../../node_modules/core-js/internals/object-to-string.js", "../../../node_modules/core-js/internals/dom-iterables.js", "../../../node_modules/core-js/internals/dom-token-list-prototype.js", "../../../node_modules/core-js/internals/array-for-each.js", "../../../node_modules/core-js/internals/validate-arguments-length.js", "../../../node_modules/core-js/internals/engine-is-ios.js", "../../../node_modules/core-js/internals/engine-is-node.js", "../../../node_modules/core-js/internals/task.js", "../../../node_modules/core-js/internals/well-known-symbol-wrapped.js", "../../../node_modules/core-js/internals/path.js", "../../../node_modules/core-js/internals/define-well-known-symbol.js", "../../../node_modules/core-js/modules/es.array.iterator.js", "../../../node_modules/core-js/internals/is-regexp.js", "../../../node_modules/core-js/internals/not-a-regexp.js", "../../../node_modules/core-js/internals/correct-is-regexp-logic.js", "../../../node_modules/core-js/internals/a-constructor.js", "../../../node_modules/core-js/internals/species-constructor.js", "../../../node_modules/core-js/internals/set-species.js", "../../../node_modules/core-js/internals/string-trim-forced.js", "../../../node_modules/core-js/internals/array-buffer-non-extensible.js", "../../../node_modules/core-js/internals/object-is-extensible.js", "../../../node_modules/core-js/internals/freezing.js", "../../../node_modules/core-js/internals/internal-metadata.js", "../../../node_modules/core-js/internals/iterate.js", "../../../node_modules/core-js/internals/an-instance.js", "../../../node_modules/core-js/internals/collection.js", "../../../node_modules/core-js/internals/redefine-all.js", "../../../node_modules/core-js/internals/collection-strong.js", "../../../node_modules/dompurify/src/utils.js", "../../../node_modules/dompurify/src/tags.js", "../../../node_modules/dompurify/src/attrs.js", "../../../node_modules/dompurify/src/regexp.js", "../../../node_modules/dompurify/src/purify.js", "../../../node_modules/core-js/internals/string-repeat.js", "../../../node_modules/core-js/internals/string-pad.js", "../../../node_modules/core-js/internals/string-pad-webkit-bug.js", "../../../node_modules/moment/moment.js", "../../../node_modules/core-js/internals/collection-weak.js", "../../../node_modules/core-js/internals/function-bind.js", "../../../node_modules/core-js/internals/object-to-array.js", "../../../node_modules/core-js/internals/array-last-index-of.js", "../../../node_modules/core-js/internals/array-reduce.js", "../../../node_modules/core-js/internals/is-data-descriptor.js", "../../../node_modules/core-js/internals/object-assign.js", "../../../node_modules/pikaday/pikaday.js", "../../../node_modules/numbro/dist/node_modules/browser-pack/_prelude.js", "../../../node_modules/numbro/dist/node_modules/bignumber.js/bignumber.js", "../../../node_modules/numbro/dist/src/en-US.js", "../../../node_modules/numbro/dist/src/formatting.js", "../../../node_modules/numbro/dist/src/globalState.js", "../../../node_modules/numbro/dist/src/loading.js", "../../../node_modules/numbro/dist/src/manipulating.js", "../../../node_modules/numbro/dist/src/numbro.js", "../../../node_modules/numbro/dist/src/parsing.js", "../../../node_modules/numbro/dist/src/unformatting.js", "../../../node_modules/numbro/dist/src/validating.js", "../../../node_modules/core-js/internals/same-value.js", "../../../node_modules/core-js/internals/create-html.js", "../../../node_modules/core-js/internals/string-html-forced.js", "../../../node_modules/jquery/dist/jquery.js", "../../../node_modules/bignumber.js/bignumber.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/front_controllers/application.js", "../../javascript/common_controllers/common_controller.js", "../../../node_modules/@rails/activestorage/app/assets/javascripts/activestorage.esm.js", "../../javascript/common_controllers/direct_upload_controller.js", "../../../node_modules/core-js/modules/es.object.get-own-property-names.js", "../../../node_modules/core-js/modules/es.array.sort.js", "../../../node_modules/core-js/modules/es.array.splice.js", "../../../node_modules/core-js/modules/es.number.is-integer.js", "../../../node_modules/core-js/modules/es.number.constructor.js", "../../../node_modules/core-js/modules/es.array.slice.js", "../../../node_modules/core-js/modules/es.array.concat.js", "../../../node_modules/core-js/modules/es.array.fill.js", "../../../node_modules/core-js/modules/es.array.map.js", "../../../node_modules/handsontable/core.mjs", "../../../node_modules/core-js/modules/es.string.replace.js", "../../../node_modules/core-js/modules/es.array.from.js", "../../../node_modules/core-js/modules/es.string.iterator.js", "../../../node_modules/core-js/modules/es.array.index-of.js", "../../../node_modules/core-js/modules/es.array.reverse.js", "../../../node_modules/core-js/modules/es.object.to-string.js", "../../../node_modules/core-js/modules/web.dom-collections.for-each.js", "../../../node_modules/core-js/modules/web.timers.js", "../../../node_modules/core-js/modules/web.immediate.js", "../../../node_modules/core-js/modules/es.symbol.js", "../../../node_modules/core-js/modules/es.symbol.description.js", "../../../node_modules/core-js/modules/es.symbol.iterator.js", "../../../node_modules/core-js/modules/web.dom-collections.iterator.js", "../../../node_modules/core-js/modules/es.function.name.js", "../../../node_modules/handsontable/helpers/dom/element.mjs", "../../../node_modules/core-js/modules/es.object.get-prototype-of.js", "../../../node_modules/core-js/modules/es.array.includes.js", "../../../node_modules/core-js/modules/es.string.includes.js", "../../../node_modules/core-js/modules/es.array.filter.js", "../../../node_modules/core-js/modules/es.string.split.js", "../../../node_modules/core-js/modules/es.regexp.constructor.js", "../../../node_modules/core-js/modules/es.regexp.to-string.js", "../../../node_modules/core-js/modules/es.array.join.js", "../../../node_modules/core-js/modules/es.string.trim.js", "../../../node_modules/handsontable/helpers/feature.mjs", "../../../node_modules/handsontable/helpers/browser.mjs", "../../../node_modules/handsontable/helpers/object.mjs", "../../../node_modules/handsontable/helpers/array.mjs", "../../../node_modules/core-js/modules/es.set.js", "../../../node_modules/handsontable/helpers/string.mjs", "../../../node_modules/handsontable/helpers/mixed.mjs", "../../../node_modules/core-js/modules/es.object.freeze.js", "../../../node_modules/core-js/modules/es.string.code-point-at.js", "../../../node_modules/core-js/modules/es.string.pad-start.js", "../../../node_modules/handsontable/helpers/templateLiteralTag.mjs", "../../../node_modules/handsontable/helpers/function.mjs", "../../../node_modules/handsontable/editorManager.mjs", "../../../node_modules/core-js/modules/es.weak-map.js", "../../../node_modules/handsontable/3rdparty/walkontable/src/calculator/viewportColumns.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/calculator/constants.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/calculator/viewportRows.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/cell/coords.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/cell/range.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/filter/column.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/filter/row.mjs", "../../../node_modules/core-js/modules/es.object.set-prototype-of.js", "../../../node_modules/core-js/modules/es.reflect.construct.js", "../../../node_modules/handsontable/3rdparty/walkontable/src/table/master.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/table.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/renderer/rowHeaders.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/utils/orderView/constants.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/utils/orderView/viewSize.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/utils/orderView/viewSizeSet.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/utils/orderView/view.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/utils/orderView/sharedView.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/utils/nodesPool.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/renderer/_base.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/renderer/columnHeaders.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/renderer/colGroup.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/renderer/rows.mjs", "../../../node_modules/handsontable/helpers/console.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/renderer/cells.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/renderer/table.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/renderer/index.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/utils/column.mjs", "../../../node_modules/core-js/modules/es.map.js", "../../../node_modules/handsontable/3rdparty/walkontable/src/utils/row.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/overlay/constants.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/overlay/registerer.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/overlay/bottomLeftCorner.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/table/bottomLeftCorner.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/table/mixin/stickyColumnsLeft.mjs", "../../../node_modules/handsontable/helpers/dom/event.mjs", "../../../node_modules/handsontable/eventManager.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/overlay/_base.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/overlay/bottom.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/table/bottom.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/overlay/left.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/table/left.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/overlay/topLeftCorner.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/table/topLeftCorner.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/overlay/top.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/table/top.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/border.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/event.mjs", "../../../node_modules/handsontable/helpers/unicode.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/overlays.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/scroll.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/settings.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/viewport.mjs", "../../../node_modules/handsontable/3rdparty/walkontable/src/core.mjs", "../../../node_modules/core-js/modules/es.object.values.js", "../../../node_modules/handsontable/3rdparty/walkontable/src/selection.mjs", "../../../node_modules/handsontable/editors/registry.mjs", "../../../node_modules/handsontable/pluginHooks.mjs", "../../../node_modules/handsontable/utils/staticRegister.mjs", "../../../node_modules/handsontable/editors/baseEditor/baseEditor.mjs", "../../../node_modules/handsontable/mixins/hooksRefRegisterer.mjs", "../../../node_modules/handsontable/utils/parseTable.mjs", "../../../node_modules/core-js/modules/es.object.keys.js", "../../../node_modules/core-js/modules/es.string.match.js", "../../../node_modules/core-js/modules/es.array.last-index-of.js", "../../../node_modules/core-js/modules/es.array.reduce.js", "../../../node_modules/core-js/modules/es.array.find-index.js", "../../../node_modules/handsontable/plugins/registry.mjs", "../../../node_modules/handsontable/utils/dataStructures/priorityMap.mjs", "../../../node_modules/handsontable/helpers/number.mjs", "../../../node_modules/handsontable/utils/dataStructures/uniqueMap.mjs", "../../../node_modules/core-js/modules/es.array.find.js", "../../../node_modules/handsontable/utils/dataStructures/uniqueSet.mjs", "../../../node_modules/handsontable/renderers/registry.mjs", "../../../node_modules/handsontable/validators/registry.mjs", "../../../node_modules/handsontable/tableView.mjs", "../../../node_modules/handsontable/selection/mouseEventHandler.mjs", "../../../node_modules/handsontable/utils/rootInstance.mjs", "../../../node_modules/handsontable/helpers/data.mjs", "../../../node_modules/handsontable/cellTypes/registry.mjs", "../../../node_modules/handsontable/dataSource.mjs", "../../../node_modules/handsontable/translations/indexMapper.mjs", "../../../node_modules/handsontable/translations/maps/index.mjs", "../../../node_modules/handsontable/translations/maps/hidingMap.mjs", "../../../node_modules/core-js/modules/es.reflect.get.js", "../../../node_modules/core-js/modules/es.object.get-own-property-descriptor.js", "../../../node_modules/handsontable/translations/maps/physicalIndexToValueMap.mjs", "../../../node_modules/handsontable/mixins/localHooks.mjs", "../../../node_modules/handsontable/translations/maps/indexMap.mjs", "../../../node_modules/handsontable/translations/maps/utils/physicallyIndexed.mjs", "../../../node_modules/handsontable/translations/maps/linkedPhysicalIndexToValueMap.mjs", "../../../node_modules/handsontable/translations/maps/utils/indexesSequence.mjs", "../../../node_modules/handsontable/translations/maps/utils/actionsOnIndexes.mjs", "../../../node_modules/handsontable/translations/maps/trimmingMap.mjs", "../../../node_modules/handsontable/translations/maps/indexesSequence.mjs", "../../../node_modules/handsontable/translations/maps/utils/index.mjs", "../../../node_modules/handsontable/translations/mapCollections/aggregatedCollection.mjs", "../../../node_modules/handsontable/translations/mapCollections/mapCollection.mjs", "../../../node_modules/handsontable/translations/changesObservable/observable.mjs", "../../../node_modules/handsontable/translations/changesObservable/observer.mjs", "../../../node_modules/handsontable/translations/changesObservable/utils.mjs", "../../../node_modules/handsontable/i18n/utils.mjs", "../../../node_modules/handsontable/i18n/phraseFormatters/pluralize.mjs", "../../../node_modules/handsontable/i18n/phraseFormatters/index.mjs", "../../../node_modules/handsontable/i18n/constants.mjs", "../../../node_modules/handsontable/i18n/languages/en-US.mjs", "../../../node_modules/handsontable/i18n/registry.mjs", "../../../node_modules/handsontable/utils/keyStateObserver.mjs", "../../../node_modules/handsontable/selection/highlight/highlight.mjs", "../../../node_modules/core-js/modules/es.object.get-own-property-descriptors.js", "../../../node_modules/handsontable/selection/highlight/constants.mjs", "../../../node_modules/handsontable/selection/highlight/visualSelection.mjs", "../../../node_modules/handsontable/selection/highlight/types/activeHeader.mjs", "../../../node_modules/handsontable/selection/highlight/types/area.mjs", "../../../node_modules/handsontable/selection/highlight/types/cell.mjs", "../../../node_modules/handsontable/selection/highlight/types/customSelection.mjs", "../../../node_modules/core-js/modules/es.object.assign.js", "../../../node_modules/handsontable/selection/highlight/types/fill.mjs", "../../../node_modules/handsontable/selection/highlight/types/header.mjs", "../../../node_modules/handsontable/selection/highlight/types/index.mjs", "../../../node_modules/handsontable/selection/selection.mjs", "../../../node_modules/handsontable/selection/range.mjs", "../../../node_modules/handsontable/selection/transformation.mjs", "../../../node_modules/handsontable/selection/utils.mjs", "../../../node_modules/handsontable/dataMap/dataMap.mjs", "../../../node_modules/handsontable/3rdparty/SheetClip/SheetClip.mjs", "../../../node_modules/core-js/modules/es.string.starts-with.js", "../../../node_modules/handsontable/dataMap/metaManager/utils.mjs", "../../../node_modules/handsontable/dataMap/metaManager/metaSchema.mjs", "../../../node_modules/handsontable/dataMap/metaManager/metaLayers/globalMeta.mjs", "../../../node_modules/handsontable/dataMap/metaManager/metaLayers/tableMeta.mjs", "../../../node_modules/handsontable/dataMap/metaManager/lazyFactoryMap.mjs", "../../../node_modules/handsontable/dataMap/metaManager/metaLayers/columnMeta.mjs", "../../../node_modules/handsontable/dataMap/metaManager/metaLayers/cellMeta.mjs", "../../../node_modules/handsontable/dataMap/metaManager/index.mjs", "../../../node_modules/handsontable/dataMap/replaceData.mjs", "../../../node_modules/handsontable/dataMap/metaManager/mods/dynamicCellMeta.mjs", "../../../node_modules/handsontable/editors/textEditor/textEditor.mjs", "../../../node_modules/handsontable/3rdparty/autoResize/autoResize.mjs", "../../../node_modules/handsontable/renderers/baseRenderer/baseRenderer.mjs", "../../../node_modules/handsontable/renderers/textRenderer/textRenderer.mjs", "../../../node_modules/handsontable/cellTypes/textType/textType.mjs", "../../../node_modules/handsontable/base.mjs", "../../../node_modules/handsontable/editors/autocompleteEditor/autocompleteEditor.mjs", "../../../node_modules/handsontable/editors/handsontableEditor/handsontableEditor.mjs", "../../../node_modules/handsontable/editors/checkboxEditor/checkboxEditor.mjs", "../../../node_modules/handsontable/editors/dateEditor/dateEditor.mjs", "../../../node_modules/handsontable/editors/dropdownEditor/dropdownEditor.mjs", "../../../node_modules/handsontable/editors/numericEditor/numericEditor.mjs", "../../../node_modules/handsontable/editors/passwordEditor/passwordEditor.mjs", "../../../node_modules/handsontable/editors/selectEditor/selectEditor.mjs", "../../../node_modules/handsontable/editors/index.mjs", "../../../node_modules/handsontable/renderers/htmlRenderer/htmlRenderer.mjs", "../../../node_modules/handsontable/renderers/autocompleteRenderer/autocompleteRenderer.mjs", "../../../node_modules/handsontable/renderers/checkboxRenderer/checkboxRenderer.mjs", "../../../node_modules/handsontable/renderers/numericRenderer/numericRenderer.mjs", "../../../node_modules/handsontable/renderers/passwordRenderer/passwordRenderer.mjs", "../../../node_modules/handsontable/renderers/index.mjs", "../../../node_modules/handsontable/validators/autocompleteValidator/autocompleteValidator.mjs", "../../../node_modules/handsontable/validators/dateValidator/dateValidator.mjs", "../../../node_modules/core-js/modules/es.string.search.js", "../../../node_modules/handsontable/helpers/date.mjs", "../../../node_modules/handsontable/validators/numericValidator/numericValidator.mjs", "../../../node_modules/handsontable/validators/timeValidator/timeValidator.mjs", "../../../node_modules/handsontable/validators/index.mjs", "../../../node_modules/handsontable/cellTypes/autocompleteType/autocompleteType.mjs", "../../../node_modules/handsontable/cellTypes/checkboxType/checkboxType.mjs", "../../../node_modules/handsontable/cellTypes/dateType/dateType.mjs", "../../../node_modules/handsontable/cellTypes/dropdownType/dropdownType.mjs", "../../../node_modules/handsontable/cellTypes/handsontableType/handsontableType.mjs", "../../../node_modules/handsontable/cellTypes/numericType/numericType.mjs", "../../../node_modules/handsontable/cellTypes/passwordType/passwordType.mjs", "../../../node_modules/handsontable/cellTypes/timeType/timeType.mjs", "../../../node_modules/handsontable/cellTypes/index.mjs", "../../../node_modules/handsontable/plugins/autoColumnSize/autoColumnSize.mjs", "../../../node_modules/handsontable/plugins/base/base.mjs", "../../../node_modules/handsontable/utils/ghostTable.mjs", "../../../node_modules/handsontable/utils/samplesGenerator.mjs", "../../../node_modules/handsontable/plugins/autofill/autofill.mjs", "../../../node_modules/handsontable/plugins/autofill/utils.mjs", "../../../node_modules/handsontable/plugins/autoRowSize/autoRowSize.mjs", "../../../node_modules/handsontable/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs", "../../../node_modules/handsontable/plugins/bindRowsWithHeaders/maps/looseBindsMap.mjs", "../../../node_modules/handsontable/plugins/bindRowsWithHeaders/maps/strictBindsMap.mjs", "../../../node_modules/handsontable/plugins/collapsibleColumns/collapsibleColumns.mjs", "../../../node_modules/handsontable/plugins/columnSorting/columnSorting.mjs", "../../../node_modules/handsontable/plugins/columnSorting/columnStatesManager.mjs", "../../../node_modules/handsontable/plugins/columnSorting/utils.mjs", "../../../node_modules/handsontable/plugins/columnSorting/domHelpers.mjs", "../../../node_modules/handsontable/plugins/columnSorting/rootComparator.mjs", "../../../node_modules/handsontable/plugins/columnSorting/sortFunction/default.mjs", "../../../node_modules/handsontable/plugins/columnSorting/sortFunction/numeric.mjs", "../../../node_modules/handsontable/plugins/columnSorting/sortFunction/checkbox.mjs", "../../../node_modules/handsontable/plugins/columnSorting/sortFunction/date.mjs", "../../../node_modules/handsontable/plugins/columnSorting/sortService/registry.mjs", "../../../node_modules/handsontable/utils/dataStructures/linkedList.mjs", "../../../node_modules/handsontable/utils/sortingAlgorithms/mergeSort.mjs", "../../../node_modules/handsontable/plugins/columnSorting/sortService/engine.mjs", "../../../node_modules/handsontable/plugins/columnSummary/columnSummary.mjs", "../../../node_modules/core-js/modules/es.number.to-fixed.js", "../../../node_modules/handsontable/plugins/columnSummary/endpoints.mjs", "../../../node_modules/handsontable/plugins/comments/comments.mjs", "../../../node_modules/handsontable/plugins/comments/commentEditor.mjs", "../../../node_modules/handsontable/plugins/contextMenu/utils.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems/separator.mjs", "../../../node_modules/handsontable/plugins/comments/displaySwitch.mjs", "../../../node_modules/handsontable/plugins/contextMenu/contextMenu.mjs", "../../../node_modules/handsontable/plugins/contextMenu/commandExecutor.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems/alignment.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems/clearColumn.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems/columnLeft.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems/columnRight.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems/readOnly.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems/redo.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems/removeColumn.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems/removeRow.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems/rowAbove.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems/rowBelow.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems/noItems.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems/undo.mjs", "../../../node_modules/handsontable/plugins/contextMenu/predefinedItems.mjs", "../../../node_modules/handsontable/plugins/contextMenu/itemsFactory.mjs", "../../../node_modules/handsontable/plugins/contextMenu/menu.mjs", "../../../node_modules/handsontable/plugins/contextMenu/cursor.mjs", "../../../node_modules/handsontable/plugins/copyPaste/copyPaste.mjs", "../../../node_modules/handsontable/plugins/copyPaste/contextMenuItem/copy.mjs", "../../../node_modules/handsontable/plugins/copyPaste/contextMenuItem/cut.mjs", "../../../node_modules/handsontable/plugins/copyPaste/clipboardData.mjs", "../../../node_modules/handsontable/plugins/copyPaste/pasteEvent.mjs", "../../../node_modules/handsontable/plugins/copyPaste/focusableElement.mjs", "../../../node_modules/core-js/modules/es.weak-set.js", "../../../node_modules/handsontable/plugins/customBorders/customBorders.mjs", "../../../node_modules/handsontable/plugins/customBorders/utils.mjs", "../../../node_modules/handsontable/plugins/customBorders/contextMenuItem/bottom.mjs", "../../../node_modules/handsontable/plugins/customBorders/contextMenuItem/left.mjs", "../../../node_modules/handsontable/plugins/customBorders/contextMenuItem/noBorders.mjs", "../../../node_modules/handsontable/plugins/customBorders/contextMenuItem/right.mjs", "../../../node_modules/handsontable/plugins/customBorders/contextMenuItem/top.mjs", "../../../node_modules/handsontable/plugins/dragToScroll/dragToScroll.mjs", "../../../node_modules/handsontable/plugins/dropdownMenu/dropdownMenu.mjs", "../../../node_modules/handsontable/plugins/exportFile/exportFile.mjs", "../../../node_modules/handsontable/plugins/exportFile/dataProvider.mjs", "../../../node_modules/handsontable/plugins/exportFile/types/csv.mjs", "../../../node_modules/handsontable/plugins/exportFile/types/_base.mjs", "../../../node_modules/handsontable/plugins/exportFile/typeFactory.mjs", "../../../node_modules/handsontable/plugins/filters/filters.mjs", "../../../node_modules/handsontable/plugins/filters/component/condition.mjs", "../../../node_modules/handsontable/plugins/filters/component/_base.mjs", "../../../node_modules/handsontable/plugins/filters/conditionRegisterer.mjs", "../../../node_modules/handsontable/plugins/filters/condition/none.mjs", "../../../node_modules/handsontable/plugins/filters/condition/empty.mjs", "../../../node_modules/handsontable/plugins/filters/condition/notEmpty.mjs", "../../../node_modules/handsontable/plugins/filters/condition/equal.mjs", "../../../node_modules/handsontable/plugins/filters/condition/notEqual.mjs", "../../../node_modules/handsontable/plugins/filters/condition/greaterThan.mjs", "../../../node_modules/handsontable/plugins/filters/condition/greaterThanOrEqual.mjs", "../../../node_modules/handsontable/plugins/filters/condition/lessThan.mjs", "../../../node_modules/handsontable/plugins/filters/condition/lessThanOrEqual.mjs", "../../../node_modules/handsontable/plugins/filters/condition/between.mjs", "../../../node_modules/handsontable/plugins/filters/condition/date/after.mjs", "../../../node_modules/handsontable/plugins/filters/condition/date/before.mjs", "../../../node_modules/handsontable/plugins/filters/condition/notBetween.mjs", "../../../node_modules/handsontable/plugins/filters/condition/beginsWith.mjs", "../../../node_modules/core-js/modules/es.string.ends-with.js", "../../../node_modules/handsontable/plugins/filters/condition/endsWith.mjs", "../../../node_modules/handsontable/plugins/filters/condition/contains.mjs", "../../../node_modules/handsontable/plugins/filters/condition/notContains.mjs", "../../../node_modules/handsontable/plugins/filters/condition/date/tomorrow.mjs", "../../../node_modules/handsontable/plugins/filters/condition/date/today.mjs", "../../../node_modules/handsontable/plugins/filters/condition/date/yesterday.mjs", "../../../node_modules/handsontable/plugins/filters/condition/byValue.mjs", "../../../node_modules/handsontable/plugins/filters/utils.mjs", "../../../node_modules/handsontable/plugins/filters/logicalOperationRegisterer.mjs", "../../../node_modules/handsontable/plugins/filters/logicalOperations/conjunction.mjs", "../../../node_modules/handsontable/plugins/filters/logicalOperations/disjunction.mjs", "../../../node_modules/handsontable/plugins/filters/logicalOperations/disjunctionWithExtraCondition.mjs", "../../../node_modules/handsontable/plugins/filters/constants.mjs", "../../../node_modules/handsontable/plugins/filters/ui/input.mjs", "../../../node_modules/handsontable/plugins/filters/ui/_base.mjs", "../../../node_modules/handsontable/plugins/filters/ui/select.mjs", "../../../node_modules/handsontable/plugins/filters/component/operators.mjs", "../../../node_modules/handsontable/plugins/filters/ui/radioInput.mjs", "../../../node_modules/handsontable/plugins/filters/component/value.mjs", "../../../node_modules/handsontable/plugins/filters/ui/multipleSelect.mjs", "../../../node_modules/handsontable/plugins/filters/ui/link.mjs", "../../../node_modules/core-js/modules/es.string.link.js", "../../../node_modules/handsontable/plugins/filters/component/actionBar.mjs", "../../../node_modules/handsontable/plugins/filters/conditionCollection.mjs", "../../../node_modules/handsontable/plugins/filters/dataFilter.mjs", "../../../node_modules/handsontable/plugins/filters/conditionUpdateObserver.mjs", "../../../node_modules/handsontable/plugins/formulas/formulas.mjs", "../../../node_modules/handsontable/plugins/formulas/engine/register.mjs", "../../../node_modules/handsontable/plugins/formulas/engine/settings.mjs", "../../../node_modules/handsontable/plugins/formulas/utils.mjs", "../../../node_modules/handsontable/plugins/hiddenColumns/hiddenColumns.mjs", "../../../node_modules/handsontable/plugins/hiddenColumns/contextMenuItem/hideColumn.mjs", "../../../node_modules/handsontable/plugins/hiddenColumns/contextMenuItem/showColumn.mjs", "../../../node_modules/handsontable/plugins/hiddenRows/hiddenRows.mjs", "../../../node_modules/handsontable/plugins/hiddenRows/contextMenuItem/hideRow.mjs", "../../../node_modules/handsontable/plugins/hiddenRows/contextMenuItem/showRow.mjs", "../../../node_modules/handsontable/plugins/manualColumnFreeze/manualColumnFreeze.mjs", "../../../node_modules/handsontable/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs", "../../../node_modules/handsontable/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs", "../../../node_modules/handsontable/plugins/manualColumnMove/manualColumnMove.mjs", "../../../node_modules/handsontable/plugins/manualColumnMove/ui/backlight.mjs", "../../../node_modules/handsontable/plugins/manualColumnMove/ui/_base.mjs", "../../../node_modules/handsontable/plugins/manualColumnMove/ui/guideline.mjs", "../../../node_modules/handsontable/plugins/manualColumnResize/manualColumnResize.mjs", "../../../node_modules/handsontable/plugins/manualRowMove/manualRowMove.mjs", "../../../node_modules/handsontable/plugins/manualRowMove/ui/backlight.mjs", "../../../node_modules/handsontable/plugins/manualRowMove/ui/_base.mjs", "../../../node_modules/handsontable/plugins/manualRowMove/ui/guideline.mjs", "../../../node_modules/handsontable/plugins/manualRowResize/manualRowResize.mjs", "../../../node_modules/handsontable/plugins/mergeCells/mergeCells.mjs", "../../../node_modules/handsontable/plugins/mergeCells/cellsCollection.mjs", "../../../node_modules/handsontable/plugins/mergeCells/cellCoords.mjs", "../../../node_modules/handsontable/plugins/mergeCells/utils.mjs", "../../../node_modules/handsontable/plugins/mergeCells/calculations/autofill.mjs", "../../../node_modules/handsontable/plugins/mergeCells/calculations/selection.mjs", "../../../node_modules/handsontable/plugins/mergeCells/contextMenuItem/toggleMerge.mjs", "../../../node_modules/handsontable/plugins/multiColumnSorting/multiColumnSorting.mjs", "../../../node_modules/handsontable/plugins/multiColumnSorting/rootComparator.mjs", "../../../node_modules/handsontable/plugins/multiColumnSorting/utils.mjs", "../../../node_modules/handsontable/plugins/multiColumnSorting/domHelpers.mjs", "../../../node_modules/handsontable/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/nestedHeaders.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/stateManager/index.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/stateManager/sourceSettings.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/stateManager/settingsNormalizer.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/stateManager/utils.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/stateManager/headersTree.mjs", "../../../node_modules/handsontable/utils/dataStructures/tree.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/stateManager/nodeModifiers/index.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/stateManager/nodeModifiers/collapse.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/stateManager/nodeModifiers/expand.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/stateManager/nodeModifiers/utils/tree.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/stateManager/nodeModifiers/hideColumn.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/stateManager/nodeModifiers/showColumn.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/stateManager/matrixGenerator.mjs", "../../../node_modules/handsontable/plugins/nestedHeaders/utils/ghostTable.mjs", "../../../node_modules/handsontable/plugins/nestedRows/nestedRows.mjs", "../../../node_modules/handsontable/plugins/nestedRows/data/dataManager.mjs", "../../../node_modules/handsontable/plugins/nestedRows/ui/collapsing.mjs", "../../../node_modules/handsontable/plugins/nestedRows/ui/_base.mjs", "../../../node_modules/handsontable/plugins/nestedRows/ui/headers.mjs", "../../../node_modules/handsontable/plugins/nestedRows/ui/contextMenu.mjs", "../../../node_modules/handsontable/plugins/nestedRows/utils/rowMoveController.mjs", "../../../node_modules/handsontable/plugins/persistentState/persistentState.mjs", "../../../node_modules/handsontable/plugins/persistentState/storage.mjs", "../../../node_modules/handsontable/plugins/search/search.mjs", "../../../node_modules/handsontable/plugins/touchScroll/touchScroll.mjs", "../../../node_modules/handsontable/plugins/trimRows/trimRows.mjs", "../../../node_modules/handsontable/plugins/undoRedo/undoRedo.mjs", "../../../node_modules/handsontable/plugins/index.mjs", "../../../node_modules/handsontable/registry.mjs", "../../../node_modules/handsontable/helpers/wrappers/jquery.mjs", "../../../node_modules/handsontable/index.mjs", "../../javascript/front_controllers/bulk_product_shippable_controller.js", "../../javascript/front_controllers/product_shippable_controller.js", "../../javascript/front/handson_table_helper.js", "../../javascript/front_controllers/bulk_ship_schedule_controller.js", "../../javascript/front_controllers/product_shippables/card_content_controller.js", "../../javascript/front_controllers/order_controller.js", "../../javascript/front_controllers/orders/content_controller.js", "../../javascript/front_controllers/notification_controller.js", "../../javascript/front_controllers/supply_dashboard_controller.js", "../../javascript/front_controllers/flash_message_controller.js", "../../javascript/front_controllers/index.js", "../../javascript/common/jquery.js", "../../../node_modules/@popperjs/core/lib/index.js", "../../../node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/@popperjs/core/lib/utils/format.js", "../../../node_modules/@popperjs/core/lib/utils/validateModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/uniqueBy.js", "../../../node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/@popperjs/core/lib/popper-lite.js", "../../../node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/bootstrap/js/src/util/index.js", "../../../node_modules/bootstrap/js/src/dom/event-handler.js", "../../../node_modules/bootstrap/js/src/dom/data.js", "../../../node_modules/bootstrap/js/src/base-component.js", "../../../node_modules/bootstrap/js/src/util/component-functions.js", "../../../node_modules/bootstrap/js/src/alert.js", "../../../node_modules/bootstrap/js/src/button.js", "../../../node_modules/bootstrap/js/src/dom/manipulator.js", "../../../node_modules/bootstrap/js/src/dom/selector-engine.js", "../../../node_modules/bootstrap/js/src/carousel.js", "../../../node_modules/bootstrap/js/src/collapse.js", "../../../node_modules/bootstrap/js/src/dropdown.js", "../../../node_modules/bootstrap/js/src/util/scrollbar.js", "../../../node_modules/bootstrap/js/src/util/backdrop.js", "../../../node_modules/bootstrap/js/src/util/focustrap.js", "../../../node_modules/bootstrap/js/src/modal.js", "../../../node_modules/bootstrap/js/src/offcanvas.js", "../../../node_modules/bootstrap/js/src/util/sanitizer.js", "../../../node_modules/bootstrap/js/src/tooltip.js", "../../../node_modules/bootstrap/js/src/popover.js", "../../../node_modules/bootstrap/js/src/scrollspy.js", "../../../node_modules/bootstrap/js/src/tab.js", "../../../node_modules/bootstrap/js/src/toast.js", "../../javascript/front.js", "../../javascript/front/flash_message.js"],
  "sourcesContent": ["export default {\n  logger: self.console,\n  WebSocket: self.WebSocket\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nconst clamp = (number, min, max) => Math.max(min, Math.min(max, number))\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. pollInterval = ${this.getPollInterval()} ms`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordPing() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    this.recordPing()\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const {min, max, multiplier} = this.constructor.pollInterval\n    const interval = multiplier * Math.log(this.reconnectAttempts + 1)\n    return Math.round(clamp(interval, min, max) * 1000)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, pollInterval = ${this.getPollInterval()} ms, time disconnected = ${secondsSince(this.disconnectedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(\"ConnectionMonitor skipping reopening recent disconnect\")\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.pingedAt ? this.pingedAt : this.startedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.pollInterval = {\n  min: 3,\n  max: 30,\n  multiplier: 5\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\n\nexport default ConnectionMonitor\n", "export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, protocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    if (this.isActive()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    switch (type) {\n      case message_types.welcome:\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return this.monitor.recordPing()\n      case message_types.confirmation:\n        return this.subscriptions.notify(identifier, \"connected\")\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n", "import Subscription from \"./subscription\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.sendCommand(subscription, \"subscribe\")\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.sendCommand(subscription, \"subscribe\"))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n", "var check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n", "module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n", "var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n", "var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  var test = (function () { /* empty */ }).bind();\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n", "var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n  return call.apply(call, arguments);\n};\n", "'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n", "module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n", "var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar uncurryThis = NATIVE_BIND && bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? function (fn) {\n  return fn && uncurryThis(fn);\n} : function (fn) {\n  return fn && function () {\n    return call.apply(fn, arguments);\n  };\n};\n", "var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n  return stringSlice(toString(it), 8, -1);\n};\n", "var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n", "var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n  return it;\n};\n", "// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n", "// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n  return typeof argument == 'function';\n};\n", "var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it);\n};\n", "var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n  return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n", "var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n", "var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n", "var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n  // but their correct versions are not interesting for us\n  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = +match[1];\n  }\n}\n\nmodule.exports = version;\n", "/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol();\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n  return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n", "/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n  && !Symbol.sham\n  && typeof Symbol.iterator == 'symbol';\n", "var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  var $Symbol = getBuiltIn('Symbol');\n  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n", "var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n  try {\n    return String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n", "var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n  if (isCallable(argument)) return argument;\n  throw TypeError(tryToString(argument) + ' is not a function');\n};\n", "var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n  var func = V[P];\n  return func == null ? undefined : aCallable(func);\n};\n", "var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n  var fn, val;\n  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n", "module.exports = false;\n", "var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n  try {\n    defineProperty(global, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n", "var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n", "var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.21.1',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '\u00A9 2014-2022 Denis Pushkarev (zloirock.ru)',\n  license: 'https://github.com/zloirock/core-js/blob/v3.21.1/LICENSE',\n  source: 'https://github.com/zloirock/core-js'\n});\n", "var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n", "var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n  return hasOwnProperty(toObject(it), key);\n};\n", "var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n", "var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n    var description = 'Symbol.' + name;\n    if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n      WellKnownSymbolsStore[name] = Symbol[name];\n    } else if (USE_SYMBOL_AS_UID && symbolFor) {\n      WellKnownSymbolsStore[name] = symbolFor(description);\n    } else {\n      WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n    }\n  } return WellKnownSymbolsStore[name];\n};\n", "var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n  if (!isObject(input) || isSymbol(input)) return input;\n  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n  var result;\n  if (exoticToPrim) {\n    if (pref === undefined) pref = 'default';\n    result = call(exoticToPrim, input, pref);\n    if (!isObject(result) || isSymbol(result)) return result;\n    throw TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n", "var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n  var key = toPrimitive(argument, 'string');\n  return isSymbol(key) ? key : key + '';\n};\n", "var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n", "var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n", "var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPropertyKey(P);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n", "var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n    value: 42,\n    writable: false\n  }).prototype != 42;\n});\n", "var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n  if (isObject(argument)) return argument;\n  throw TypeError(String(argument) + ' is not an object');\n};\n", "var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n    var current = $getOwnPropertyDescriptor(O, P);\n    if (current && current[WRITABLE]) {\n      O[P] = Attributes.value;\n      Attributes = {\n        configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n        enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n        writable: false\n      };\n    }\n  } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return $defineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n", "var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n", "var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n  store.inspectSource = function (it) {\n    return functionToString(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n", "var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n", "var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n", "module.exports = {};\n", "var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n  var store = shared.state || (shared.state = new WeakMap());\n  var wmget = uncurryThis(store.get);\n  var wmhas = uncurryThis(store.has);\n  var wmset = uncurryThis(store.set);\n  set = function (it, metadata) {\n    if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    wmset(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return hasOwn(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return hasOwn(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n", "var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n  EXISTS: EXISTS,\n  PROPER: PROPER,\n  CONFIGURABLE: CONFIGURABLE\n};\n", "var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n  var unsafe = options ? !!options.unsafe : false;\n  var simple = options ? !!options.enumerable : false;\n  var noTargetGet = options ? !!options.noTargetGet : false;\n  var name = options && options.name !== undefined ? options.name : key;\n  var state;\n  if (isCallable(value)) {\n    if (String(name).slice(0, 7) === 'Symbol(') {\n      name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n    }\n    if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n      createNonEnumerableProperty(value, 'name', name);\n    }\n    state = enforceInternalState(value);\n    if (!state.source) {\n      state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n    }\n  }\n  if (O === global) {\n    if (simple) O[key] = value;\n    else setGlobal(key, value);\n    return;\n  } else if (!unsafe) {\n    delete O[key];\n  } else if (!noTargetGet && O[key]) {\n    simple = true;\n  }\n  if (simple) O[key] = value;\n  else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n  return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n", "var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n  var number = +argument;\n  // eslint-disable-next-line no-self-compare -- safe\n  return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n", "var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toIntegerOrInfinity(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n", "var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n", "var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n  return toLength(obj.length);\n};\n", "var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = lengthOfArrayLike(O);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n", "var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n    ~indexOf(result, key) || push(result, key);\n  }\n  return result;\n};\n", "// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n", "var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n", "// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n", "var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n", "var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n      defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n    }\n  }\n};\n", "var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : isCallable(detection) ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n", "var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target      - name of the target object\n  options.global      - target is the global object\n  options.stat        - export as static methods of target\n  options.proto       - export as prototype methods of target\n  options.real        - real prototype method for the `pure` version\n  options.forced      - export even if the native feature is available\n  options.bind        - bind methods to the target, required for the `pure` version\n  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe      - use the simple assignment of property instead of delete + defineProperty\n  options.sham        - add a flag to not completely full polyfills\n  options.enumerable  - export as enumerable property\n  options.noTargetGet - prevent calling a getter on target\n  options.name        - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = global;\n  } else if (STATIC) {\n    target = global[TARGET] || setGlobal(TARGET, {});\n  } else {\n    target = (global[TARGET] || {}).prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.noTargetGet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty == typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    // extend global\n    redefine(target, key, sourceProperty, options);\n  }\n};\n", "'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  var propertyKey = toPropertyKey(key);\n  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n  else object[propertyKey] = value;\n};\n", "var global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar Array = global.Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n  var length = lengthOfArrayLike(O);\n  var k = toAbsoluteIndex(start, length);\n  var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n  var result = Array(max(fin - k, 0));\n  for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n  result.length = n;\n  return result;\n};\n", "/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return $getOwnPropertyNames(it);\n  } catch (error) {\n    return arraySlice(windowNames);\n  }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && classof(it) == 'Window'\n    ? getWindowNames(it)\n    : $getOwnPropertyNames(toIndexedObject(it));\n};\n", "var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n", "var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n", "var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n  return String(argument);\n};\n", "var arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n  var length = array.length;\n  var middle = floor(length / 2);\n  return length < 8 ? insertionSort(array, comparefn) : merge(\n    array,\n    mergeSort(arraySlice(array, 0, middle), comparefn),\n    mergeSort(arraySlice(array, middle), comparefn),\n    comparefn\n  );\n};\n\nvar insertionSort = function (array, comparefn) {\n  var length = array.length;\n  var i = 1;\n  var element, j;\n\n  while (i < length) {\n    j = i;\n    element = array[i];\n    while (j && comparefn(array[j - 1], element) > 0) {\n      array[j] = array[--j];\n    }\n    if (j !== i++) array[j] = element;\n  } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n  var llength = left.length;\n  var rlength = right.length;\n  var lindex = 0;\n  var rindex = 0;\n\n  while (lindex < llength || rindex < rlength) {\n    array[lindex + rindex] = (lindex < llength && rindex < rlength)\n      ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n      : lindex < llength ? left[lindex++] : right[rindex++];\n  } return array;\n};\n\nmodule.exports = mergeSort;\n", "'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n  var method = [][METHOD_NAME];\n  return !!method && fails(function () {\n    // eslint-disable-next-line no-useless-call -- required for testing\n    method.call(null, argument || function () { return 1; }, 1);\n  });\n};\n", "var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n", "var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n", "var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n", "var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n  return classof(argument) == 'Array';\n};\n", "var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function isConstructor(argument) {\n  if (!isCallable(argument)) return false;\n  try {\n    construct(noop, empty, argument);\n    return true;\n  } catch (error) {\n    return false;\n  }\n};\n\nvar isConstructorLegacy = function isConstructor(argument) {\n  if (!isCallable(argument)) return false;\n  switch (classof(argument)) {\n    case 'AsyncFunction':\n    case 'GeneratorFunction':\n    case 'AsyncGeneratorFunction': return false;\n  }\n  try {\n    // we can't check .prototype since constructors produced by .bind haven't it\n    // `Function#toString` throws on some built-it function in some legacy engines\n    // (for example, `DOMQuad` and similar in FF41-)\n    return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n  } catch (error) {\n    return true;\n  }\n};\n\nisConstructorLegacy.sham = true;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n  var called;\n  return isConstructorModern(isConstructorModern.call)\n    || !isConstructorModern(Object)\n    || !isConstructorModern(function () { called = true; })\n    || called;\n}) ? isConstructorLegacy : isConstructorModern;\n", "var global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n  var C;\n  if (isArray(originalArray)) {\n    C = originalArray.constructor;\n    // cross-realm fallback\n    if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n    else if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n", "var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n  return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n", "var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n  // We can't use this feature detection in V8 since it causes\n  // deoptimization and serious performance degradation\n  // https://github.com/zloirock/core-js/issues/677\n  return V8_VERSION >= 51 || !fails(function () {\n    var array = [];\n    var constructor = array.constructor = {};\n    constructor[SPECIES] = function () {\n      return { foo: 1 };\n    };\n    return array[METHOD_NAME](Boolean).foo !== 1;\n  });\n};\n", "var isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `IsIntegralNumber` abstract operation\n// https://tc39.es/ecma262/#sec-isintegralnumber\n// eslint-disable-next-line es/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n", "var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n  if (typeof argument == 'object' || isCallable(argument)) return argument;\n  throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n", "/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n    setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n    setter(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    anObject(O);\n    aPossiblePrototype(proto);\n    if (CORRECT_SETTER) setter(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n", "var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n  var NewTarget, NewTargetPrototype;\n  if (\n    // it can work only with native `setPrototypeOf`\n    setPrototypeOf &&\n    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n    isCallable(NewTarget = dummy.constructor) &&\n    NewTarget !== Wrapper &&\n    isObject(NewTargetPrototype = NewTarget.prototype) &&\n    NewTargetPrototype !== Wrapper.prototype\n  ) setPrototypeOf($this, NewTargetPrototype);\n  return $this;\n};\n", "var uncurryThis = require('../internals/function-uncurry-this');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n", "// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n  '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n", "var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n  return function ($this) {\n    var string = toString(requireObjectCoercible($this));\n    if (TYPE & 1) string = replace(string, ltrim, '');\n    if (TYPE & 2) string = replace(string, rtrim, '');\n    return string;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.{ trimLeft, trimStart }` methods\n  // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n  start: createMethod(1),\n  // `String.prototype.{ trimRight, trimEnd }` methods\n  // https://tc39.es/ecma262/#sec-string.prototype.trimend\n  end: createMethod(2),\n  // `String.prototype.trim` method\n  // https://tc39.es/ecma262/#sec-string.prototype.trim\n  trim: createMethod(3)\n};\n", "var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n", "'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n  var O = toObject(this);\n  var length = lengthOfArrayLike(O);\n  var argumentsLength = arguments.length;\n  var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n  var end = argumentsLength > 2 ? arguments[2] : undefined;\n  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n  while (endPos > index) O[index++] = value;\n  return O;\n};\n", "var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n", "var DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var props = toIndexedObject(Properties);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n  return O;\n};\n", "var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n", "/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  activeXDocument = null; // avoid memory leak\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    activeXDocument = new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = typeof document != 'undefined'\n    ? document.domain && activeXDocument\n      ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n      : NullProtoObjectViaIFrame()\n    : NullProtoObjectViaActiveX(activeXDocument); // WSH\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n", "var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n  definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n    configurable: true,\n    value: create(null)\n  });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n", "var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n  aCallable(fn);\n  return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n", "var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var IS_FILTER_REJECT = TYPE == 7;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  return function ($this, callbackfn, that, specificCreate) {\n    var O = toObject($this);\n    var self = IndexedObject(O);\n    var boundFunction = bind(callbackfn, that);\n    var length = lengthOfArrayLike(self);\n    var index = 0;\n    var create = specificCreate || arraySpeciesCreate;\n    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n    var value, result;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      value = self[index];\n      result = boundFunction(value, index, O);\n      if (TYPE) {\n        if (IS_MAP) target[index] = result; // map\n        else if (result) switch (TYPE) {\n          case 3: return true;              // some\n          case 5: return value;             // find\n          case 6: return index;             // findIndex\n          case 2: push(target, value);      // filter\n        } else switch (TYPE) {\n          case 4: return false;             // every\n          case 7: push(target, value);      // filterReject\n        }\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.forEach` method\n  // https://tc39.es/ecma262/#sec-array.prototype.foreach\n  forEach: createMethod(0),\n  // `Array.prototype.map` method\n  // https://tc39.es/ecma262/#sec-array.prototype.map\n  map: createMethod(1),\n  // `Array.prototype.filter` method\n  // https://tc39.es/ecma262/#sec-array.prototype.filter\n  filter: createMethod(2),\n  // `Array.prototype.some` method\n  // https://tc39.es/ecma262/#sec-array.prototype.some\n  some: createMethod(3),\n  // `Array.prototype.every` method\n  // https://tc39.es/ecma262/#sec-array.prototype.every\n  every: createMethod(4),\n  // `Array.prototype.find` method\n  // https://tc39.es/ecma262/#sec-array.prototype.find\n  find: createMethod(5),\n  // `Array.prototype.findIndex` method\n  // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n  findIndex: createMethod(6),\n  // `Array.prototype.filterReject` method\n  // https://github.com/tc39/proposal-array-filtering\n  filterReject: createMethod(7)\n};\n", "'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.dotAll) result += 's';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n", "var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nvar UNSUPPORTED_Y = fails(function () {\n  var re = $RegExp('a', 'y');\n  re.lastIndex = 2;\n  return re.exec('abcd') != null;\n});\n\n// UC Browser bug\n// https://github.com/zloirock/core-js/issues/1008\nvar MISSED_STICKY = UNSUPPORTED_Y || fails(function () {\n  return !$RegExp('a', 'y').sticky;\n});\n\nvar BROKEN_CARET = UNSUPPORTED_Y || fails(function () {\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n  var re = $RegExp('^r', 'gy');\n  re.lastIndex = 2;\n  return re.exec('str') != null;\n});\n\nmodule.exports = {\n  BROKEN_CARET: BROKEN_CARET,\n  MISSED_STICKY: MISSED_STICKY,\n  UNSUPPORTED_Y: UNSUPPORTED_Y\n};\n", "var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n  var re = $RegExp('.', 's');\n  return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n", "var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n  var re = $RegExp('(?<a>b)', 'g');\n  return re.exec('b').groups.a !== 'b' ||\n    'b'.replace(re, '$<a>c') !== 'bc';\n});\n", "'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/;\n  var re2 = /b*/g;\n  call(nativeExec, re1, 'a');\n  call(nativeExec, re2, 'a');\n  return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n  patchedExec = function exec(string) {\n    var re = this;\n    var state = getInternalState(re);\n    var str = toString(string);\n    var raw = state.raw;\n    var result, reCopy, lastIndex, match, i, object, group;\n\n    if (raw) {\n      raw.lastIndex = re.lastIndex;\n      result = call(patchedExec, raw, str);\n      re.lastIndex = raw.lastIndex;\n      return result;\n    }\n\n    var groups = state.groups;\n    var sticky = UNSUPPORTED_Y && re.sticky;\n    var flags = call(regexpFlags, re);\n    var source = re.source;\n    var charsAdded = 0;\n    var strCopy = str;\n\n    if (sticky) {\n      flags = replace(flags, 'y', '');\n      if (indexOf(flags, 'g') === -1) {\n        flags += 'g';\n      }\n\n      strCopy = stringSlice(str, re.lastIndex);\n      // Support anchored sticky behavior.\n      if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n        source = '(?: ' + source + ')';\n        strCopy = ' ' + strCopy;\n        charsAdded++;\n      }\n      // ^(? + rx + ) is needed, in combination with some str slicing, to\n      // simulate the 'y' flag.\n      reCopy = new RegExp('^(?:' + source + ')', flags);\n    }\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n    match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n    if (sticky) {\n      if (match) {\n        match.input = stringSlice(match.input, charsAdded);\n        match[0] = stringSlice(match[0], charsAdded);\n        match.index = re.lastIndex;\n        re.lastIndex += match[0].length;\n      } else re.lastIndex = 0;\n    } else if (UPDATES_LAST_INDEX_WRONG && match) {\n      re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      call(nativeReplace, match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    if (match && groups) {\n      match.groups = object = create(null);\n      for (i = 0; i < groups.length; i++) {\n        group = groups[i];\n        object[group[0]] = match[group[1]];\n      }\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n", "'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n  exec: exec\n});\n", "var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n  return call.apply(apply, arguments);\n});\n", "'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar redefine = require('../internals/redefine');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n  var SYMBOL = wellKnownSymbol(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n\n    if (KEY === 'split') {\n      // We can't use real regex here since it causes deoptimization\n      // and serious performance degradation in V8\n      // https://github.com/zloirock/core-js/issues/306\n      re = {};\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n      re.flags = '';\n      re[SYMBOL] = /./[SYMBOL];\n    }\n\n    re.exec = function () { execCalled = true; return null; };\n\n    re[SYMBOL]('');\n    return !execCalled;\n  });\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    FORCED\n  ) {\n    var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);\n    var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n      var uncurriedNativeMethod = uncurryThis(nativeMethod);\n      var $exec = regexp.exec;\n      if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n        if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n          // The native String method already delegates to @@method (this\n          // polyfilled function), leasing to infinite recursion.\n          // We avoid it by directly calling the native @@method method.\n          return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };\n        }\n        return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };\n      }\n      return { done: false };\n    });\n\n    redefine(String.prototype, KEY, methods[0]);\n    redefine(RegExpPrototype, SYMBOL, methods[1]);\n  }\n\n  if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n", "var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n  return function ($this, pos) {\n    var S = toString(requireObjectCoercible($this));\n    var position = toIntegerOrInfinity(pos);\n    var size = S.length;\n    var first, second;\n    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n    first = charCodeAt(S, position);\n    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n      || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n        ? CONVERT_TO_STRING\n          ? charAt(S, position)\n          : first\n        : CONVERT_TO_STRING\n          ? stringSlice(S, position, position + 2)\n          : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.codePointAt` method\n  // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n  codeAt: createMethod(false),\n  // `String.prototype.at` method\n  // https://github.com/mathiasbynens/String.prototype.at\n  charAt: createMethod(true)\n};\n", "'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? charAt(S, index).length : 1);\n};\n", "var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n  var tailPos = position + matched.length;\n  var m = captures.length;\n  var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n  if (namedCaptures !== undefined) {\n    namedCaptures = toObject(namedCaptures);\n    symbols = SUBSTITUTION_SYMBOLS;\n  }\n  return replace(replacement, symbols, function (match, ch) {\n    var capture;\n    switch (charAt(ch, 0)) {\n      case '$': return '$';\n      case '&': return matched;\n      case '`': return stringSlice(str, 0, position);\n      case \"'\": return stringSlice(str, tailPos);\n      case '<':\n        capture = namedCaptures[stringSlice(ch, 1, -1)];\n        break;\n      default: // \\d\\d?\n        var n = +ch;\n        if (n === 0) return match;\n        if (n > m) {\n          var f = floor(n / 10);\n          if (f === 0) return match;\n          if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n          return match;\n        }\n        capture = captures[n - 1];\n    }\n    return capture === undefined ? '' : capture;\n  });\n};\n", "var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar TypeError = global.TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (isCallable(exec)) {\n    var result = call(exec, R, S);\n    if (result !== null) anObject(result);\n    return result;\n  }\n  if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n  throw TypeError('RegExp#exec called on incompatible receiver');\n};\n", "var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n  var innerResult, innerError;\n  anObject(iterator);\n  try {\n    innerResult = getMethod(iterator, 'return');\n    if (!innerResult) {\n      if (kind === 'throw') throw value;\n      return value;\n    }\n    innerResult = call(innerResult, iterator);\n  } catch (error) {\n    innerError = true;\n    innerResult = error;\n  }\n  if (kind === 'throw') throw value;\n  if (innerError) throw innerResult;\n  anObject(innerResult);\n  return value;\n};\n", "var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n  try {\n    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n  } catch (error) {\n    iteratorClose(iterator, 'throw', error);\n  }\n};\n", "module.exports = {};\n", "var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n", "var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (it != undefined) return getMethod(it, ITERATOR)\n    || getMethod(it, '@@iterator')\n    || Iterators[classof(it)];\n};\n", "var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n  throw TypeError(tryToString(argument) + ' is not iterable');\n};\n", "'use strict';\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar Array = global.Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n  var O = toObject(arrayLike);\n  var IS_CONSTRUCTOR = isConstructor(this);\n  var argumentsLength = arguments.length;\n  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n  var mapping = mapfn !== undefined;\n  if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n  var iteratorMethod = getIteratorMethod(O);\n  var index = 0;\n  var length, result, step, iterator, next, value;\n  // if the target is not iterable or it's an array with the default iterator - use a simple case\n  if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n    iterator = getIterator(O, iteratorMethod);\n    next = iterator.next;\n    result = IS_CONSTRUCTOR ? new this() : [];\n    for (;!(step = call(next, iterator)).done; index++) {\n      value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n      createProperty(result, index, value);\n    }\n  } else {\n    length = lengthOfArrayLike(O);\n    result = IS_CONSTRUCTOR ? new this(length) : Array(length);\n    for (;length > index; index++) {\n      value = mapping ? mapfn(O[index], index) : O[index];\n      createProperty(result, index, value);\n    }\n  }\n  result.length = index;\n  return result;\n};\n", "var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var called = 0;\n  var iteratorWithReturn = {\n    next: function () {\n      return { done: !!called++ };\n    },\n    'return': function () {\n      SAFE_CLOSING = true;\n    }\n  };\n  iteratorWithReturn[ITERATOR] = function () {\n    return this;\n  };\n  // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n  Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n  if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n  var ITERATION_SUPPORT = false;\n  try {\n    var object = {};\n    object[ITERATOR] = function () {\n      return {\n        next: function () {\n          return { done: ITERATION_SUPPORT = true };\n        }\n      };\n    };\n    exec(object);\n  } catch (error) { /* empty */ }\n  return ITERATION_SUPPORT;\n};\n", "var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n", "var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n  var object = toObject(O);\n  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n  var constructor = object.constructor;\n  if (isCallable(constructor) && object instanceof constructor) {\n    return constructor.prototype;\n  } return object instanceof Object ? ObjectPrototype : null;\n};\n", "'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n  var test = {};\n  // FF44- legacy iterators case\n  return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n  redefine(IteratorPrototype, ITERATOR, function () {\n    return this;\n  });\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n", "var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (target, TAG, STATIC) {\n  if (target && !STATIC) target = target.prototype;\n  if (target && !hasOwn(target, TO_STRING_TAG)) {\n    defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n  }\n};\n", "'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n  createIteratorConstructor(IteratorConstructor, NAME, next);\n\n  var getIterationMethod = function (KIND) {\n    if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n    switch (KIND) {\n      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n    } return function () { return new IteratorConstructor(this); };\n  };\n\n  var TO_STRING_TAG = NAME + ' Iterator';\n  var INCORRECT_VALUES_NAME = false;\n  var IterablePrototype = Iterable.prototype;\n  var nativeIterator = IterablePrototype[ITERATOR]\n    || IterablePrototype['@@iterator']\n    || DEFAULT && IterablePrototype[DEFAULT];\n  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n  var CurrentIteratorPrototype, methods, KEY;\n\n  // fix native\n  if (anyNativeIterator) {\n    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n    if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n          redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n        }\n      }\n      // Set @@toStringTag to native iterators\n      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n    }\n  }\n\n  // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n  if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n      createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n    } else {\n      INCORRECT_VALUES_NAME = true;\n      defaultIterator = function values() { return call(nativeIterator, this); };\n    }\n  }\n\n  // export additional methods\n  if (DEFAULT) {\n    methods = {\n      values: getIterationMethod(VALUES),\n      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n      entries: getIterationMethod(ENTRIES)\n    };\n    if (FORCED) for (KEY in methods) {\n      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n        redefine(IterablePrototype, KEY, methods[KEY]);\n      }\n    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n  }\n  Iterators[NAME] = defaultIterator;\n\n  return methods;\n};\n", "'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n  return '[object ' + classof(this) + ']';\n};\n", "// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n  CSSRuleList: 0,\n  CSSStyleDeclaration: 0,\n  CSSValueList: 0,\n  ClientRectList: 0,\n  DOMRectList: 0,\n  DOMStringList: 0,\n  DOMTokenList: 1,\n  DataTransferItemList: 0,\n  FileList: 0,\n  HTMLAllCollection: 0,\n  HTMLCollection: 0,\n  HTMLFormElement: 0,\n  HTMLSelectElement: 0,\n  MediaList: 0,\n  MimeTypeArray: 0,\n  NamedNodeMap: 0,\n  NodeList: 1,\n  PaintRequestList: 0,\n  Plugin: 0,\n  PluginArray: 0,\n  SVGLengthList: 0,\n  SVGNumberList: 0,\n  SVGPathSegList: 0,\n  SVGPointList: 0,\n  SVGStringList: 0,\n  SVGTransformList: 0,\n  SourceBufferList: 0,\n  StyleSheetList: 0,\n  TextTrackCueList: 0,\n  TextTrackList: 0,\n  TouchList: 0\n};\n", "// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n", "'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n", "var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (passed, required) {\n  if (passed < required) throw TypeError('Not enough arguments');\n  return passed;\n};\n", "var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n", "var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n", "var global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n  // Deno throws a ReferenceError on `location` access without `--location` flag\n  location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n  if (hasOwn(queue, id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\n\nvar runner = function (id) {\n  return function () {\n    run(id);\n  };\n};\n\nvar listener = function (event) {\n  run(event.data);\n};\n\nvar post = function (id) {\n  // old engines have not location.origin\n  global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n  set = function setImmediate(handler) {\n    validateArgumentsLength(arguments.length, 1);\n    var fn = isCallable(handler) ? handler : Function(handler);\n    var args = arraySlice(arguments, 1);\n    queue[++counter] = function () {\n      apply(fn, undefined, args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clear = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (IS_NODE) {\n    defer = function (id) {\n      process.nextTick(runner(id));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(runner(id));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  // except iOS - https://github.com/zloirock/core-js/issues/624\n  } else if (MessageChannel && !IS_IOS) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = bind(port.postMessage, port);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (\n    global.addEventListener &&\n    isCallable(global.postMessage) &&\n    !global.importScripts &&\n    location && location.protocol !== 'file:' &&\n    !fails(post)\n  ) {\n    defer = post;\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in createElement('script')) {\n    defer = function (id) {\n      html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(runner(id), 0);\n    };\n  }\n}\n\nmodule.exports = {\n  set: set,\n  clear: clear\n};\n", "var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n", "var global = require('../internals/global');\n\nmodule.exports = global;\n", "var path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n  var Symbol = path.Symbol || (path.Symbol = {});\n  if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n    value: wrappedWellKnownSymbolModule.f(NAME)\n  });\n};\n", "'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/define-iterator');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return { value: undefined, done: true };\n  }\n  if (kind == 'keys') return { value: index, done: false };\n  if (kind == 'values') return { value: target[index], done: false };\n  return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n  defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n", "var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n", "var global = require('../internals/global');\nvar isRegExp = require('../internals/is-regexp');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it) {\n  if (isRegExp(it)) {\n    throw TypeError(\"The method doesn't accept regular expressions\");\n  } return it;\n};\n", "var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n  var regexp = /./;\n  try {\n    '/./'[METHOD_NAME](regexp);\n  } catch (error1) {\n    try {\n      regexp[MATCH] = false;\n      return '/./'[METHOD_NAME](regexp);\n    } catch (error2) { /* empty */ }\n  } return false;\n};\n", "var global = require('../internals/global');\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n  if (isConstructor(argument)) return argument;\n  throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n", "var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n  var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n  var defineProperty = definePropertyModule.f;\n\n  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n    defineProperty(Constructor, SPECIES, {\n      configurable: true,\n      get: function () { return this; }\n    });\n  }\n};\n", "var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n  return fails(function () {\n    return !!whitespaces[METHOD_NAME]()\n      || non[METHOD_NAME]() !== non\n      || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n  });\n};\n", "// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it\nvar fails = require('../internals/fails');\n\nmodule.exports = fails(function () {\n  if (typeof ArrayBuffer == 'function') {\n    var buffer = new ArrayBuffer(8);\n    // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe\n    if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });\n  }\n});\n", "var fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar ARRAY_BUFFER_NON_EXTENSIBLE = require('../internals/array-buffer-non-extensible');\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar $isExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\nmodule.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\n  if (!isObject(it)) return false;\n  if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return false;\n  return $isExtensible ? $isExtensible(it) : true;\n} : $isExtensible;\n", "var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n  return Object.isExtensible(Object.preventExtensions({}));\n});\n", "var $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar isExtensible = require('../internals/object-is-extensible');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar setMetadata = function (it) {\n  defineProperty(it, METADATA, { value: {\n    objectID: 'O' + id++, // object ID\n    weakData: {}          // weak collections IDs\n  } });\n};\n\nvar fastKey = function (it, create) {\n  // return a primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!hasOwn(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMetadata(it);\n  // return object ID\n  } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n  if (!hasOwn(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMetadata(it);\n  // return the store of weak collections IDs\n  } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n  return it;\n};\n\nvar enable = function () {\n  meta.enable = function () { /* empty */ };\n  REQUIRED = true;\n  var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n  var splice = uncurryThis([].splice);\n  var test = {};\n  test[METADATA] = 1;\n\n  // prevent exposing of metadata key\n  if (getOwnPropertyNames(test).length) {\n    getOwnPropertyNamesModule.f = function (it) {\n      var result = getOwnPropertyNames(it);\n      for (var i = 0, length = result.length; i < length; i++) {\n        if (result[i] === METADATA) {\n          splice(result, i, 1);\n          break;\n        }\n      } return result;\n    };\n\n    $({ target: 'Object', stat: true, forced: true }, {\n      getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n    });\n  }\n};\n\nvar meta = module.exports = {\n  enable: enable,\n  fastKey: fastKey,\n  getWeakData: getWeakData,\n  onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n", "var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n  var that = options && options.that;\n  var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n  var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n  var INTERRUPTED = !!(options && options.INTERRUPTED);\n  var fn = bind(unboundFunction, that);\n  var iterator, iterFn, index, length, result, next, step;\n\n  var stop = function (condition) {\n    if (iterator) iteratorClose(iterator, 'normal', condition);\n    return new Result(true, condition);\n  };\n\n  var callFn = function (value) {\n    if (AS_ENTRIES) {\n      anObject(value);\n      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n    } return INTERRUPTED ? fn(value, stop) : fn(value);\n  };\n\n  if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n        result = callFn(iterable[index]);\n        if (result && isPrototypeOf(ResultPrototype, result)) return result;\n      } return new Result(false);\n    }\n    iterator = getIterator(iterable, iterFn);\n  }\n\n  next = iterator.next;\n  while (!(step = call(next, iterator)).done) {\n    try {\n      result = callFn(step.value);\n    } catch (error) {\n      iteratorClose(iterator, 'throw', error);\n    }\n    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n  } return new Result(false);\n};\n", "var global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n  if (isPrototypeOf(Prototype, it)) return it;\n  throw TypeError('Incorrect invocation');\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n  var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n  var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var NativeConstructor = global[CONSTRUCTOR_NAME];\n  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n  var Constructor = NativeConstructor;\n  var exported = {};\n\n  var fixMethod = function (KEY) {\n    var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n    redefine(NativePrototype, KEY,\n      KEY == 'add' ? function add(value) {\n        uncurriedNativeMethod(this, value === 0 ? 0 : value);\n        return this;\n      } : KEY == 'delete' ? function (key) {\n        return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n      } : KEY == 'get' ? function get(key) {\n        return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n      } : KEY == 'has' ? function has(key) {\n        return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n      } : function set(key, value) {\n        uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n        return this;\n      }\n    );\n  };\n\n  var REPLACE = isForced(\n    CONSTRUCTOR_NAME,\n    !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n      new NativeConstructor().entries().next();\n    }))\n  );\n\n  if (REPLACE) {\n    // create collection constructor\n    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n    InternalMetadataModule.enable();\n  } else if (isForced(CONSTRUCTOR_NAME, true)) {\n    var instance = new Constructor();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    // eslint-disable-next-line no-new -- required for testing\n    var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new NativeConstructor();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n\n    if (!ACCEPT_ITERABLES) {\n      Constructor = wrapper(function (dummy, iterable) {\n        anInstance(dummy, NativePrototype);\n        var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n        if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n        return that;\n      });\n      Constructor.prototype = NativePrototype;\n      NativePrototype.constructor = Constructor;\n    }\n\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n    // weak collections should not contains .clear method\n    if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n  }\n\n  exported[CONSTRUCTOR_NAME] = Constructor;\n  $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n  setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n  return Constructor;\n};\n", "var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) redefine(target, key, src[key], options);\n  return target;\n};\n", "'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var Constructor = wrapper(function (that, iterable) {\n      anInstance(that, Prototype);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        index: create(null),\n        first: undefined,\n        last: undefined,\n        size: 0\n      });\n      if (!DESCRIPTORS) that.size = 0;\n      if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n    });\n\n    var Prototype = Constructor.prototype;\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var entry = getEntry(that, key);\n      var previous, index;\n      // change existing entry\n      if (entry) {\n        entry.value = value;\n      // create new entry\n      } else {\n        state.last = entry = {\n          index: index = fastKey(key, true),\n          key: key,\n          value: value,\n          previous: previous = state.last,\n          next: undefined,\n          removed: false\n        };\n        if (!state.first) state.first = entry;\n        if (previous) previous.next = entry;\n        if (DESCRIPTORS) state.size++;\n        else that.size++;\n        // add to index\n        if (index !== 'F') state.index[index] = entry;\n      } return that;\n    };\n\n    var getEntry = function (that, key) {\n      var state = getInternalState(that);\n      // fast case\n      var index = fastKey(key);\n      var entry;\n      if (index !== 'F') return state.index[index];\n      // frozen object case\n      for (entry = state.first; entry; entry = entry.next) {\n        if (entry.key == key) return entry;\n      }\n    };\n\n    redefineAll(Prototype, {\n      // `{ Map, Set }.prototype.clear()` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.clear\n      // https://tc39.es/ecma262/#sec-set.prototype.clear\n      clear: function clear() {\n        var that = this;\n        var state = getInternalState(that);\n        var data = state.index;\n        var entry = state.first;\n        while (entry) {\n          entry.removed = true;\n          if (entry.previous) entry.previous = entry.previous.next = undefined;\n          delete data[entry.index];\n          entry = entry.next;\n        }\n        state.first = state.last = undefined;\n        if (DESCRIPTORS) state.size = 0;\n        else that.size = 0;\n      },\n      // `{ Map, Set }.prototype.delete(key)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.delete\n      // https://tc39.es/ecma262/#sec-set.prototype.delete\n      'delete': function (key) {\n        var that = this;\n        var state = getInternalState(that);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.next;\n          var prev = entry.previous;\n          delete state.index[entry.index];\n          entry.removed = true;\n          if (prev) prev.next = next;\n          if (next) next.previous = prev;\n          if (state.first == entry) state.first = next;\n          if (state.last == entry) state.last = prev;\n          if (DESCRIPTORS) state.size--;\n          else that.size--;\n        } return !!entry;\n      },\n      // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.foreach\n      // https://tc39.es/ecma262/#sec-set.prototype.foreach\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        var state = getInternalState(this);\n        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n        var entry;\n        while (entry = entry ? entry.next : state.first) {\n          boundFunction(entry.value, entry.key, this);\n          // revert to the last existing entry\n          while (entry && entry.removed) entry = entry.previous;\n        }\n      },\n      // `{ Map, Set}.prototype.has(key)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.has\n      // https://tc39.es/ecma262/#sec-set.prototype.has\n      has: function has(key) {\n        return !!getEntry(this, key);\n      }\n    });\n\n    redefineAll(Prototype, IS_MAP ? {\n      // `Map.prototype.get(key)` method\n      // https://tc39.es/ecma262/#sec-map.prototype.get\n      get: function get(key) {\n        var entry = getEntry(this, key);\n        return entry && entry.value;\n      },\n      // `Map.prototype.set(key, value)` method\n      // https://tc39.es/ecma262/#sec-map.prototype.set\n      set: function set(key, value) {\n        return define(this, key === 0 ? 0 : key, value);\n      }\n    } : {\n      // `Set.prototype.add(value)` method\n      // https://tc39.es/ecma262/#sec-set.prototype.add\n      add: function add(value) {\n        return define(this, value = value === 0 ? 0 : value, value);\n      }\n    });\n    if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n      get: function () {\n        return getInternalState(this).size;\n      }\n    });\n    return Constructor;\n  },\n  setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n    // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n    // https://tc39.es/ecma262/#sec-map.prototype.entries\n    // https://tc39.es/ecma262/#sec-map.prototype.keys\n    // https://tc39.es/ecma262/#sec-map.prototype.values\n    // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n    // https://tc39.es/ecma262/#sec-set.prototype.entries\n    // https://tc39.es/ecma262/#sec-set.prototype.keys\n    // https://tc39.es/ecma262/#sec-set.prototype.values\n    // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n    defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n      setInternalState(this, {\n        type: ITERATOR_NAME,\n        target: iterated,\n        state: getInternalCollectionState(iterated),\n        kind: kind,\n        last: undefined\n      });\n    }, function () {\n      var state = getInternalIteratorState(this);\n      var kind = state.kind;\n      var entry = state.last;\n      // revert to the last existing entry\n      while (entry && entry.removed) entry = entry.previous;\n      // get next entry\n      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n        // or finish the iteration\n        state.target = undefined;\n        return { value: undefined, done: true };\n      }\n      // return step by kind\n      if (kind == 'keys') return { value: entry.key, done: false };\n      if (kind == 'values') return { value: entry.value, done: false };\n      return { value: [entry.key, entry.value], done: false };\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // `{ Map, Set }.prototype[@@species]` accessors\n    // https://tc39.es/ecma262/#sec-get-map-@@species\n    // https://tc39.es/ecma262/#sec-get-set-@@species\n    setSpecies(CONSTRUCTOR_NAME);\n  }\n};\n", "const {\n  hasOwnProperty,\n  setPrototypeOf,\n  isFrozen,\n  getPrototypeOf,\n  getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!apply) {\n  apply = function (fun, thisValue, args) {\n    return fun.apply(thisValue, args);\n  };\n}\n\nif (!freeze) {\n  freeze = function (x) {\n    return x;\n  };\n}\n\nif (!seal) {\n  seal = function (x) {\n    return x;\n  };\n}\n\nif (!construct) {\n  construct = function (Func, args) {\n    return new Func(...args);\n  };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\nexport function unapply(func) {\n  return (thisArg, ...args) => apply(func, thisArg, args);\n}\n\nexport function unconstruct(func) {\n  return (...args) => construct(func, args);\n}\n\n/* Add properties to a lookup table */\nexport function addToSet(set, array) {\n  if (setPrototypeOf) {\n    // Make 'in' and truthy checks like Boolean(set.constructor)\n    // independent of any properties defined on Object.prototype.\n    // Prevent prototype setters from intercepting set as a this value.\n    setPrototypeOf(set, null);\n  }\n\n  let l = array.length;\n  while (l--) {\n    let element = array[l];\n    if (typeof element === 'string') {\n      const lcElement = stringToLowerCase(element);\n      if (lcElement !== element) {\n        // Config presets (e.g. tags.js, attrs.js) are immutable.\n        if (!isFrozen(array)) {\n          array[l] = lcElement;\n        }\n\n        element = lcElement;\n      }\n    }\n\n    set[element] = true;\n  }\n\n  return set;\n}\n\n/* Shallow clone an object */\nexport function clone(object) {\n  const newObject = create(null);\n\n  let property;\n  for (property in object) {\n    if (apply(hasOwnProperty, object, [property])) {\n      newObject[property] = object[property];\n    }\n  }\n\n  return newObject;\n}\n\n/* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\nfunction lookupGetter(object, prop) {\n  while (object !== null) {\n    const desc = getOwnPropertyDescriptor(object, prop);\n    if (desc) {\n      if (desc.get) {\n        return unapply(desc.get);\n      }\n\n      if (typeof desc.value === 'function') {\n        return unapply(desc.value);\n      }\n    }\n\n    object = getPrototypeOf(object);\n  }\n\n  function fallbackValue(element) {\n    console.warn('fallback value for', element);\n    return null;\n  }\n\n  return fallbackValue;\n}\n\nexport {\n  // Array\n  arrayForEach,\n  arrayIndexOf,\n  arrayPop,\n  arrayPush,\n  arraySlice,\n  // Object\n  freeze,\n  getPrototypeOf,\n  getOwnPropertyDescriptor,\n  hasOwnProperty,\n  isFrozen,\n  setPrototypeOf,\n  seal,\n  // RegExp\n  regExpTest,\n  // String\n  stringIndexOf,\n  stringMatch,\n  stringReplace,\n  stringToLowerCase,\n  stringTrim,\n  // Errors\n  typeErrorCreate,\n  // Other\n  lookupGetter,\n};\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n  'a',\n  'abbr',\n  'acronym',\n  'address',\n  'area',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'bdi',\n  'bdo',\n  'big',\n  'blink',\n  'blockquote',\n  'body',\n  'br',\n  'button',\n  'canvas',\n  'caption',\n  'center',\n  'cite',\n  'code',\n  'col',\n  'colgroup',\n  'content',\n  'data',\n  'datalist',\n  'dd',\n  'decorator',\n  'del',\n  'details',\n  'dfn',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'element',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'font',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hgroup',\n  'hr',\n  'html',\n  'i',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'map',\n  'mark',\n  'marquee',\n  'menu',\n  'menuitem',\n  'meter',\n  'nav',\n  'nobr',\n  'ol',\n  'optgroup',\n  'option',\n  'output',\n  'p',\n  'picture',\n  'pre',\n  'progress',\n  'q',\n  'rp',\n  'rt',\n  'ruby',\n  's',\n  'samp',\n  'section',\n  'select',\n  'shadow',\n  'small',\n  'source',\n  'spacer',\n  'span',\n  'strike',\n  'strong',\n  'style',\n  'sub',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'template',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'track',\n  'tt',\n  'u',\n  'ul',\n  'var',\n  'video',\n  'wbr',\n]);\n\n// SVG\nexport const svg = freeze([\n  'svg',\n  'a',\n  'altglyph',\n  'altglyphdef',\n  'altglyphitem',\n  'animatecolor',\n  'animatemotion',\n  'animatetransform',\n  'circle',\n  'clippath',\n  'defs',\n  'desc',\n  'ellipse',\n  'filter',\n  'font',\n  'g',\n  'glyph',\n  'glyphref',\n  'hkern',\n  'image',\n  'line',\n  'lineargradient',\n  'marker',\n  'mask',\n  'metadata',\n  'mpath',\n  'path',\n  'pattern',\n  'polygon',\n  'polyline',\n  'radialgradient',\n  'rect',\n  'stop',\n  'style',\n  'switch',\n  'symbol',\n  'text',\n  'textpath',\n  'title',\n  'tref',\n  'tspan',\n  'view',\n  'vkern',\n]);\n\nexport const svgFilters = freeze([\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feDistantLight',\n  'feFlood',\n  'feFuncA',\n  'feFuncB',\n  'feFuncG',\n  'feFuncR',\n  'feGaussianBlur',\n  'feImage',\n  'feMerge',\n  'feMergeNode',\n  'feMorphology',\n  'feOffset',\n  'fePointLight',\n  'feSpecularLighting',\n  'feSpotLight',\n  'feTile',\n  'feTurbulence',\n]);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n  'animate',\n  'color-profile',\n  'cursor',\n  'discard',\n  'fedropshadow',\n  'font-face',\n  'font-face-format',\n  'font-face-name',\n  'font-face-src',\n  'font-face-uri',\n  'foreignobject',\n  'hatch',\n  'hatchpath',\n  'mesh',\n  'meshgradient',\n  'meshpatch',\n  'meshrow',\n  'missing-glyph',\n  'script',\n  'set',\n  'solidcolor',\n  'unknown',\n  'use',\n]);\n\nexport const mathMl = freeze([\n  'math',\n  'menclose',\n  'merror',\n  'mfenced',\n  'mfrac',\n  'mglyph',\n  'mi',\n  'mlabeledtr',\n  'mmultiscripts',\n  'mn',\n  'mo',\n  'mover',\n  'mpadded',\n  'mphantom',\n  'mroot',\n  'mrow',\n  'ms',\n  'mspace',\n  'msqrt',\n  'mstyle',\n  'msub',\n  'msup',\n  'msubsup',\n  'mtable',\n  'mtd',\n  'mtext',\n  'mtr',\n  'munder',\n  'munderover',\n]);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n  'maction',\n  'maligngroup',\n  'malignmark',\n  'mlongdiv',\n  'mscarries',\n  'mscarry',\n  'msgroup',\n  'mstack',\n  'msline',\n  'msrow',\n  'semantics',\n  'annotation',\n  'annotation-xml',\n  'mprescripts',\n  'none',\n]);\n\nexport const text = freeze(['#text']);\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n  'accept',\n  'action',\n  'align',\n  'alt',\n  'autocapitalize',\n  'autocomplete',\n  'autopictureinpicture',\n  'autoplay',\n  'background',\n  'bgcolor',\n  'border',\n  'capture',\n  'cellpadding',\n  'cellspacing',\n  'checked',\n  'cite',\n  'class',\n  'clear',\n  'color',\n  'cols',\n  'colspan',\n  'controls',\n  'controlslist',\n  'coords',\n  'crossorigin',\n  'datetime',\n  'decoding',\n  'default',\n  'dir',\n  'disabled',\n  'disablepictureinpicture',\n  'disableremoteplayback',\n  'download',\n  'draggable',\n  'enctype',\n  'enterkeyhint',\n  'face',\n  'for',\n  'headers',\n  'height',\n  'hidden',\n  'high',\n  'href',\n  'hreflang',\n  'id',\n  'inputmode',\n  'integrity',\n  'ismap',\n  'kind',\n  'label',\n  'lang',\n  'list',\n  'loading',\n  'loop',\n  'low',\n  'max',\n  'maxlength',\n  'media',\n  'method',\n  'min',\n  'minlength',\n  'multiple',\n  'muted',\n  'name',\n  'nonce',\n  'noshade',\n  'novalidate',\n  'nowrap',\n  'open',\n  'optimum',\n  'pattern',\n  'placeholder',\n  'playsinline',\n  'poster',\n  'preload',\n  'pubdate',\n  'radiogroup',\n  'readonly',\n  'rel',\n  'required',\n  'rev',\n  'reversed',\n  'role',\n  'rows',\n  'rowspan',\n  'spellcheck',\n  'scope',\n  'selected',\n  'shape',\n  'size',\n  'sizes',\n  'span',\n  'srclang',\n  'start',\n  'src',\n  'srcset',\n  'step',\n  'style',\n  'summary',\n  'tabindex',\n  'title',\n  'translate',\n  'type',\n  'usemap',\n  'valign',\n  'value',\n  'width',\n  'xmlns',\n  'slot',\n]);\n\nexport const svg = freeze([\n  'accent-height',\n  'accumulate',\n  'additive',\n  'alignment-baseline',\n  'ascent',\n  'attributename',\n  'attributetype',\n  'azimuth',\n  'basefrequency',\n  'baseline-shift',\n  'begin',\n  'bias',\n  'by',\n  'class',\n  'clip',\n  'clippathunits',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'color-interpolation',\n  'color-interpolation-filters',\n  'color-profile',\n  'color-rendering',\n  'cx',\n  'cy',\n  'd',\n  'dx',\n  'dy',\n  'diffuseconstant',\n  'direction',\n  'display',\n  'divisor',\n  'dur',\n  'edgemode',\n  'elevation',\n  'end',\n  'fill',\n  'fill-opacity',\n  'fill-rule',\n  'filter',\n  'filterunits',\n  'flood-color',\n  'flood-opacity',\n  'font-family',\n  'font-size',\n  'font-size-adjust',\n  'font-stretch',\n  'font-style',\n  'font-variant',\n  'font-weight',\n  'fx',\n  'fy',\n  'g1',\n  'g2',\n  'glyph-name',\n  'glyphref',\n  'gradientunits',\n  'gradienttransform',\n  'height',\n  'href',\n  'id',\n  'image-rendering',\n  'in',\n  'in2',\n  'k',\n  'k1',\n  'k2',\n  'k3',\n  'k4',\n  'kerning',\n  'keypoints',\n  'keysplines',\n  'keytimes',\n  'lang',\n  'lengthadjust',\n  'letter-spacing',\n  'kernelmatrix',\n  'kernelunitlength',\n  'lighting-color',\n  'local',\n  'marker-end',\n  'marker-mid',\n  'marker-start',\n  'markerheight',\n  'markerunits',\n  'markerwidth',\n  'maskcontentunits',\n  'maskunits',\n  'max',\n  'mask',\n  'media',\n  'method',\n  'mode',\n  'min',\n  'name',\n  'numoctaves',\n  'offset',\n  'operator',\n  'opacity',\n  'order',\n  'orient',\n  'orientation',\n  'origin',\n  'overflow',\n  'paint-order',\n  'path',\n  'pathlength',\n  'patterncontentunits',\n  'patterntransform',\n  'patternunits',\n  'points',\n  'preservealpha',\n  'preserveaspectratio',\n  'primitiveunits',\n  'r',\n  'rx',\n  'ry',\n  'radius',\n  'refx',\n  'refy',\n  'repeatcount',\n  'repeatdur',\n  'restart',\n  'result',\n  'rotate',\n  'scale',\n  'seed',\n  'shape-rendering',\n  'specularconstant',\n  'specularexponent',\n  'spreadmethod',\n  'startoffset',\n  'stddeviation',\n  'stitchtiles',\n  'stop-color',\n  'stop-opacity',\n  'stroke-dasharray',\n  'stroke-dashoffset',\n  'stroke-linecap',\n  'stroke-linejoin',\n  'stroke-miterlimit',\n  'stroke-opacity',\n  'stroke',\n  'stroke-width',\n  'style',\n  'surfacescale',\n  'systemlanguage',\n  'tabindex',\n  'targetx',\n  'targety',\n  'transform',\n  'transform-origin',\n  'text-anchor',\n  'text-decoration',\n  'text-rendering',\n  'textlength',\n  'type',\n  'u1',\n  'u2',\n  'unicode',\n  'values',\n  'viewbox',\n  'visibility',\n  'version',\n  'vert-adv-y',\n  'vert-origin-x',\n  'vert-origin-y',\n  'width',\n  'word-spacing',\n  'wrap',\n  'writing-mode',\n  'xchannelselector',\n  'ychannelselector',\n  'x',\n  'x1',\n  'x2',\n  'xmlns',\n  'y',\n  'y1',\n  'y2',\n  'z',\n  'zoomandpan',\n]);\n\nexport const mathMl = freeze([\n  'accent',\n  'accentunder',\n  'align',\n  'bevelled',\n  'close',\n  'columnsalign',\n  'columnlines',\n  'columnspan',\n  'denomalign',\n  'depth',\n  'dir',\n  'display',\n  'displaystyle',\n  'encoding',\n  'fence',\n  'frame',\n  'height',\n  'href',\n  'id',\n  'largeop',\n  'length',\n  'linethickness',\n  'lspace',\n  'lquote',\n  'mathbackground',\n  'mathcolor',\n  'mathsize',\n  'mathvariant',\n  'maxsize',\n  'minsize',\n  'movablelimits',\n  'notation',\n  'numalign',\n  'open',\n  'rowalign',\n  'rowlines',\n  'rowspacing',\n  'rowspan',\n  'rspace',\n  'rquote',\n  'scriptlevel',\n  'scriptminsize',\n  'scriptsizemultiplier',\n  'selection',\n  'separator',\n  'separators',\n  'stretchy',\n  'subscriptshift',\n  'supscriptshift',\n  'symmetric',\n  'voffset',\n  'width',\n  'xmlns',\n]);\n\nexport const xml = freeze([\n  'xlink:href',\n  'xml:id',\n  'xlink:title',\n  'xml:space',\n  'xmlns:xlink',\n]);\n", "import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\s\\S]*|[\\s\\S]*%>/gm);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n  /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n  /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\n", "import * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n  addToSet,\n  clone,\n  freeze,\n  arrayForEach,\n  arrayPop,\n  arrayPush,\n  stringMatch,\n  stringReplace,\n  stringToLowerCase,\n  stringIndexOf,\n  stringTrim,\n  regExpTest,\n  typeErrorCreate,\n  lookupGetter,\n} from './utils.js';\n\nconst getGlobal = () => (typeof window === 'undefined' ? null : window);\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\nconst _createTrustedTypesPolicy = function (trustedTypes, document) {\n  if (\n    typeof trustedTypes !== 'object' ||\n    typeof trustedTypes.createPolicy !== 'function'\n  ) {\n    return null;\n  }\n\n  // Allow the callers to control the unique policy name\n  // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n  // Policy creation with duplicate names throws in Trusted Types.\n  let suffix = null;\n  const ATTR_NAME = 'data-tt-policy-suffix';\n  if (\n    document.currentScript &&\n    document.currentScript.hasAttribute(ATTR_NAME)\n  ) {\n    suffix = document.currentScript.getAttribute(ATTR_NAME);\n  }\n\n  const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n  try {\n    return trustedTypes.createPolicy(policyName, {\n      createHTML(html) {\n        return html;\n      },\n    });\n  } catch (_) {\n    // Policy creation failed (most likely another DOMPurify script has\n    // already run). Skip creating the policy, as this will only cause errors\n    // if TT are enforced.\n    console.warn(\n      'TrustedTypes policy ' + policyName + ' could not be created.'\n    );\n    return null;\n  }\n};\n\nfunction createDOMPurify(window = getGlobal()) {\n  const DOMPurify = (root) => createDOMPurify(root);\n\n  /**\n   * Version label, exposed for easier checks\n   * if DOMPurify is up to date or not\n   */\n  DOMPurify.version = VERSION;\n\n  /**\n   * Array of elements that DOMPurify removed during sanitation.\n   * Empty if nothing was removed.\n   */\n  DOMPurify.removed = [];\n\n  if (!window || !window.document || window.document.nodeType !== 9) {\n    // Not running in a browser, provide a factory function\n    // so that you can pass your own Window\n    DOMPurify.isSupported = false;\n\n    return DOMPurify;\n  }\n\n  const originalDocument = window.document;\n\n  let { document } = window;\n  const {\n    DocumentFragment,\n    HTMLTemplateElement,\n    Node,\n    Element,\n    NodeFilter,\n    NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n    HTMLFormElement,\n    DOMParser,\n    trustedTypes,\n  } = window;\n\n  const ElementPrototype = Element.prototype;\n\n  const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n  const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n  const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n  const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n  // As per issue #47, the web-components registry is inherited by a\n  // new document created via createHTMLDocument. As per the spec\n  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n  // a new empty registry is used when creating a template contents owner\n  // document, so we use that as our parent document to ensure nothing\n  // is inherited.\n  if (typeof HTMLTemplateElement === 'function') {\n    const template = document.createElement('template');\n    if (template.content && template.content.ownerDocument) {\n      document = template.content.ownerDocument;\n    }\n  }\n\n  const trustedTypesPolicy = _createTrustedTypesPolicy(\n    trustedTypes,\n    originalDocument\n  );\n  const emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n\n  const {\n    implementation,\n    createNodeIterator,\n    createDocumentFragment,\n    getElementsByTagName,\n  } = document;\n  const { importNode } = originalDocument;\n\n  let documentMode = {};\n  try {\n    documentMode = clone(document).documentMode ? document.documentMode : {};\n  } catch (_) {}\n\n  let hooks = {};\n\n  /**\n   * Expose whether this browser supports running the full DOMPurify.\n   */\n  DOMPurify.isSupported =\n    typeof getParentNode === 'function' &&\n    implementation &&\n    typeof implementation.createHTMLDocument !== 'undefined' &&\n    documentMode !== 9;\n\n  const {\n    MUSTACHE_EXPR,\n    ERB_EXPR,\n    DATA_ATTR,\n    ARIA_ATTR,\n    IS_SCRIPT_OR_DATA,\n    ATTR_WHITESPACE,\n  } = EXPRESSIONS;\n\n  let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n  /**\n   * We consider the elements and attributes below to be safe. Ideally\n   * don't add any new ones but feel free to remove unwanted ones.\n   */\n\n  /* allowed element names */\n  let ALLOWED_TAGS = null;\n  const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n    ...TAGS.html,\n    ...TAGS.svg,\n    ...TAGS.svgFilters,\n    ...TAGS.mathMl,\n    ...TAGS.text,\n  ]);\n\n  /* Allowed attribute names */\n  let ALLOWED_ATTR = null;\n  const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n    ...ATTRS.html,\n    ...ATTRS.svg,\n    ...ATTRS.mathMl,\n    ...ATTRS.xml,\n  ]);\n\n  /*\n   * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n   * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n   * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n   * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n   */\n  const CUSTOM_ELEMENT_HANDLING = Object.seal(\n    Object.create(null, {\n      tagNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null,\n      },\n      attributeNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null,\n      },\n      allowCustomizedBuiltInElements: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: false,\n      },\n    })\n  );\n\n  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n  let FORBID_TAGS = null;\n\n  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n  let FORBID_ATTR = null;\n\n  /* Decide if ARIA attributes are okay */\n  let ALLOW_ARIA_ATTR = true;\n\n  /* Decide if custom data attributes are okay */\n  let ALLOW_DATA_ATTR = true;\n\n  /* Decide if unknown protocols are okay */\n  let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n  /* Output should be safe for common template engines.\n   * This means, DOMPurify removes data attributes, mustaches and ERB\n   */\n  let SAFE_FOR_TEMPLATES = false;\n\n  /* Decide if document with <html>... should be returned */\n  let WHOLE_DOCUMENT = false;\n\n  /* Track whether config is already set on this instance of DOMPurify. */\n  let SET_CONFIG = false;\n\n  /* Decide if all elements (e.g. style, script) must be children of\n   * document.body. By default, browsers might move them to document.head */\n  let FORCE_BODY = false;\n\n  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n   * string (or a TrustedHTML object if Trusted Types are supported).\n   * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n   */\n  let RETURN_DOM = false;\n\n  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n   * string  (or a TrustedHTML object if Trusted Types are supported) */\n  let RETURN_DOM_FRAGMENT = false;\n\n  /* Try to return a Trusted Type object instead of a string, return a string in\n   * case Trusted Types are not supported  */\n  let RETURN_TRUSTED_TYPE = false;\n\n  /* Output should be free from DOM clobbering attacks? */\n  let SANITIZE_DOM = true;\n\n  /* Keep element content when removing element? */\n  let KEEP_CONTENT = true;\n\n  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n   * of importing it into a new Document and returning a sanitized copy */\n  let IN_PLACE = false;\n\n  /* Allow usage of profiles like html, svg and mathMl */\n  let USE_PROFILES = {};\n\n  /* Tags to ignore content of when KEEP_CONTENT is true */\n  let FORBID_CONTENTS = null;\n  const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n    'annotation-xml',\n    'audio',\n    'colgroup',\n    'desc',\n    'foreignobject',\n    'head',\n    'iframe',\n    'math',\n    'mi',\n    'mn',\n    'mo',\n    'ms',\n    'mtext',\n    'noembed',\n    'noframes',\n    'noscript',\n    'plaintext',\n    'script',\n    'style',\n    'svg',\n    'template',\n    'thead',\n    'title',\n    'video',\n    'xmp',\n  ]);\n\n  /* Tags that are safe for data: URIs */\n  let DATA_URI_TAGS = null;\n  const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n    'audio',\n    'video',\n    'img',\n    'source',\n    'image',\n    'track',\n  ]);\n\n  /* Attributes safe for values like \"javascript:\" */\n  let URI_SAFE_ATTRIBUTES = null;\n  const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n    'alt',\n    'class',\n    'for',\n    'id',\n    'label',\n    'name',\n    'pattern',\n    'placeholder',\n    'role',\n    'summary',\n    'title',\n    'value',\n    'style',\n    'xmlns',\n  ]);\n\n  const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n  const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n  const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n  /* Document namespace */\n  let NAMESPACE = HTML_NAMESPACE;\n  let IS_EMPTY_INPUT = false;\n\n  /* Parsing of strict XHTML documents */\n  let PARSER_MEDIA_TYPE;\n  const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n  const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n  let transformCaseFunc;\n\n  /* Keep a reference to config to pass to hooks */\n  let CONFIG = null;\n\n  /* Ideally, do not touch anything below this line */\n  /* ______________________________________________ */\n\n  const formElement = document.createElement('form');\n\n  const isRegexOrFunction = function (testValue) {\n    return testValue instanceof RegExp || testValue instanceof Function;\n  };\n\n  /**\n   * _parseConfig\n   *\n   * @param  {Object} cfg optional config literal\n   */\n  // eslint-disable-next-line complexity\n  const _parseConfig = function (cfg) {\n    if (CONFIG && CONFIG === cfg) {\n      return;\n    }\n\n    /* Shield configuration object from tampering */\n    if (!cfg || typeof cfg !== 'object') {\n      cfg = {};\n    }\n\n    /* Shield configuration object from prototype pollution */\n    cfg = clone(cfg);\n\n    /* Set configuration parameters */\n    ALLOWED_TAGS =\n      'ALLOWED_TAGS' in cfg\n        ? addToSet({}, cfg.ALLOWED_TAGS)\n        : DEFAULT_ALLOWED_TAGS;\n    ALLOWED_ATTR =\n      'ALLOWED_ATTR' in cfg\n        ? addToSet({}, cfg.ALLOWED_ATTR)\n        : DEFAULT_ALLOWED_ATTR;\n    URI_SAFE_ATTRIBUTES =\n      'ADD_URI_SAFE_ATTR' in cfg\n        ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR)\n        : DEFAULT_URI_SAFE_ATTRIBUTES;\n    DATA_URI_TAGS =\n      'ADD_DATA_URI_TAGS' in cfg\n        ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS)\n        : DEFAULT_DATA_URI_TAGS;\n    FORBID_CONTENTS =\n      'FORBID_CONTENTS' in cfg\n        ? addToSet({}, cfg.FORBID_CONTENTS)\n        : DEFAULT_FORBID_CONTENTS;\n    FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n    FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n    USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n    ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n    ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n    ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n    SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n    WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n    RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n    RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n    RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n    FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n    SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n    KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n    IN_PLACE = cfg.IN_PLACE || false; // Default false\n    IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n    NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)\n    ) {\n      CUSTOM_ELEMENT_HANDLING.tagNameCheck =\n        cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n    }\n\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)\n    ) {\n      CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n        cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n    }\n\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements ===\n        'boolean'\n    ) {\n      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n        cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n    }\n\n    PARSER_MEDIA_TYPE =\n      // eslint-disable-next-line unicorn/prefer-includes\n      SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n        ? (PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE)\n        : (PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE);\n\n    // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n    transformCaseFunc =\n      PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n        ? (x) => x\n        : stringToLowerCase;\n\n    if (SAFE_FOR_TEMPLATES) {\n      ALLOW_DATA_ATTR = false;\n    }\n\n    if (RETURN_DOM_FRAGMENT) {\n      RETURN_DOM = true;\n    }\n\n    /* Parse profile info */\n    if (USE_PROFILES) {\n      ALLOWED_TAGS = addToSet({}, [...TAGS.text]);\n      ALLOWED_ATTR = [];\n      if (USE_PROFILES.html === true) {\n        addToSet(ALLOWED_TAGS, TAGS.html);\n        addToSet(ALLOWED_ATTR, ATTRS.html);\n      }\n\n      if (USE_PROFILES.svg === true) {\n        addToSet(ALLOWED_TAGS, TAGS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n\n      if (USE_PROFILES.svgFilters === true) {\n        addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n        addToSet(ALLOWED_ATTR, ATTRS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n\n      if (USE_PROFILES.mathMl === true) {\n        addToSet(ALLOWED_TAGS, TAGS.mathMl);\n        addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n    }\n\n    /* Merge configuration parameters */\n    if (cfg.ADD_TAGS) {\n      if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n        ALLOWED_TAGS = clone(ALLOWED_TAGS);\n      }\n\n      addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n    }\n\n    if (cfg.ADD_ATTR) {\n      if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n        ALLOWED_ATTR = clone(ALLOWED_ATTR);\n      }\n\n      addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n    }\n\n    if (cfg.ADD_URI_SAFE_ATTR) {\n      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n    }\n\n    if (cfg.FORBID_CONTENTS) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n\n      addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS);\n    }\n\n    /* Add #text in case KEEP_CONTENT is set to true */\n    if (KEEP_CONTENT) {\n      ALLOWED_TAGS['#text'] = true;\n    }\n\n    /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n    if (WHOLE_DOCUMENT) {\n      addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n    }\n\n    /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n    if (ALLOWED_TAGS.table) {\n      addToSet(ALLOWED_TAGS, ['tbody']);\n      delete FORBID_TAGS.tbody;\n    }\n\n    // Prevent further manipulation of configuration.\n    // Not available in IE8, Safari 5, etc.\n    if (freeze) {\n      freeze(cfg);\n    }\n\n    CONFIG = cfg;\n  };\n\n  const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n    'mi',\n    'mo',\n    'mn',\n    'ms',\n    'mtext',\n  ]);\n\n  const HTML_INTEGRATION_POINTS = addToSet({}, [\n    'foreignobject',\n    'desc',\n    'title',\n    'annotation-xml',\n  ]);\n\n  /* Keep track of all possible SVG and MathML tags\n   * so that we can perform the namespace checks\n   * correctly. */\n  const ALL_SVG_TAGS = addToSet({}, TAGS.svg);\n  addToSet(ALL_SVG_TAGS, TAGS.svgFilters);\n  addToSet(ALL_SVG_TAGS, TAGS.svgDisallowed);\n\n  const ALL_MATHML_TAGS = addToSet({}, TAGS.mathMl);\n  addToSet(ALL_MATHML_TAGS, TAGS.mathMlDisallowed);\n\n  /**\n   *\n   *\n   * @param  {Element} element a DOM element whose namespace is being checked\n   * @returns {boolean} Return false if the element has a\n   *  namespace that a spec-compliant parser would never\n   *  return. Return true otherwise.\n   */\n  const _checkValidNamespace = function (element) {\n    let parent = getParentNode(element);\n\n    // In JSDOM, if we're inside shadow DOM, then parentNode\n    // can be null. We just simulate parent in this case.\n    if (!parent || !parent.tagName) {\n      parent = {\n        namespaceURI: HTML_NAMESPACE,\n        tagName: 'template',\n      };\n    }\n\n    const tagName = stringToLowerCase(element.tagName);\n    const parentTagName = stringToLowerCase(parent.tagName);\n\n    if (element.namespaceURI === SVG_NAMESPACE) {\n      // The only way to switch from HTML namespace to SVG\n      // is via <svg>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'svg';\n      }\n\n      // The only way to switch from MathML to SVG is via\n      // svg if parent is either <annotation-xml> or MathML\n      // text integration points.\n      if (parent.namespaceURI === MATHML_NAMESPACE) {\n        return (\n          tagName === 'svg' &&\n          (parentTagName === 'annotation-xml' ||\n            MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n        );\n      }\n\n      // We only allow elements that are defined in SVG\n      // spec. All others are disallowed in SVG namespace.\n      return Boolean(ALL_SVG_TAGS[tagName]);\n    }\n\n    if (element.namespaceURI === MATHML_NAMESPACE) {\n      // The only way to switch from HTML namespace to MathML\n      // is via <math>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'math';\n      }\n\n      // The only way to switch from SVG to MathML is via\n      // <math> and HTML integration points\n      if (parent.namespaceURI === SVG_NAMESPACE) {\n        return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n      }\n\n      // We only allow elements that are defined in MathML\n      // spec. All others are disallowed in MathML namespace.\n      return Boolean(ALL_MATHML_TAGS[tagName]);\n    }\n\n    if (element.namespaceURI === HTML_NAMESPACE) {\n      // The only way to switch from SVG to HTML is via\n      // HTML integration points, and from MathML to HTML\n      // is via MathML text integration points\n      if (\n        parent.namespaceURI === SVG_NAMESPACE &&\n        !HTML_INTEGRATION_POINTS[parentTagName]\n      ) {\n        return false;\n      }\n\n      if (\n        parent.namespaceURI === MATHML_NAMESPACE &&\n        !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n      ) {\n        return false;\n      }\n\n      // Certain elements are allowed in both SVG and HTML\n      // namespace. We need to specify them explicitly\n      // so that they don't get erronously deleted from\n      // HTML namespace.\n      const commonSvgAndHTMLElements = addToSet({}, [\n        'title',\n        'style',\n        'font',\n        'a',\n        'script',\n      ]);\n\n      // We disallow tags that are specific for MathML\n      // or SVG and should never appear in HTML namespace\n      return (\n        !ALL_MATHML_TAGS[tagName] &&\n        (commonSvgAndHTMLElements[tagName] || !ALL_SVG_TAGS[tagName])\n      );\n    }\n\n    // The code should never reach this place (this means\n    // that the element somehow got namespace that is not\n    // HTML, SVG or MathML). Return false just in case.\n    return false;\n  };\n\n  /**\n   * _forceRemove\n   *\n   * @param  {Node} node a DOM node\n   */\n  const _forceRemove = function (node) {\n    arrayPush(DOMPurify.removed, { element: node });\n    try {\n      // eslint-disable-next-line unicorn/prefer-dom-node-remove\n      node.parentNode.removeChild(node);\n    } catch (_) {\n      try {\n        node.outerHTML = emptyHTML;\n      } catch (_) {\n        node.remove();\n      }\n    }\n  };\n\n  /**\n   * _removeAttribute\n   *\n   * @param  {String} name an Attribute name\n   * @param  {Node} node a DOM node\n   */\n  const _removeAttribute = function (name, node) {\n    try {\n      arrayPush(DOMPurify.removed, {\n        attribute: node.getAttributeNode(name),\n        from: node,\n      });\n    } catch (_) {\n      arrayPush(DOMPurify.removed, {\n        attribute: null,\n        from: node,\n      });\n    }\n\n    node.removeAttribute(name);\n\n    // We void attribute values for unremovable \"is\"\" attributes\n    if (name === 'is' && !ALLOWED_ATTR[name]) {\n      if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n        try {\n          _forceRemove(node);\n        } catch (_) {}\n      } else {\n        try {\n          node.setAttribute(name, '');\n        } catch (_) {}\n      }\n    }\n  };\n\n  /**\n   * _initDocument\n   *\n   * @param  {String} dirty a string of dirty markup\n   * @return {Document} a DOM, filled with the dirty markup\n   */\n  const _initDocument = function (dirty) {\n    /* Create a HTML document */\n    let doc;\n    let leadingWhitespace;\n\n    if (FORCE_BODY) {\n      dirty = '<remove></remove>' + dirty;\n    } else {\n      /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n      const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n      leadingWhitespace = matches && matches[0];\n    }\n\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml') {\n      // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n      dirty =\n        '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' +\n        dirty +\n        '</body></html>';\n    }\n\n    const dirtyPayload = trustedTypesPolicy\n      ? trustedTypesPolicy.createHTML(dirty)\n      : dirty;\n    /*\n     * Use the DOMParser API by default, fallback later if needs be\n     * DOMParser not work for svg when has multiple root element.\n     */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      try {\n        doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n      } catch (_) {}\n    }\n\n    /* Use createHTMLDocument in case DOMParser is not available */\n    if (!doc || !doc.documentElement) {\n      doc = implementation.createDocument(NAMESPACE, 'template', null);\n      try {\n        doc.documentElement.innerHTML = IS_EMPTY_INPUT ? '' : dirtyPayload;\n      } catch (_) {\n        // Syntax error if dirtyPayload is invalid xml\n      }\n    }\n\n    const body = doc.body || doc.documentElement;\n\n    if (dirty && leadingWhitespace) {\n      body.insertBefore(\n        document.createTextNode(leadingWhitespace),\n        body.childNodes[0] || null\n      );\n    }\n\n    /* Work on whole document or just its body */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      return getElementsByTagName.call(\n        doc,\n        WHOLE_DOCUMENT ? 'html' : 'body'\n      )[0];\n    }\n\n    return WHOLE_DOCUMENT ? doc.documentElement : body;\n  };\n\n  /**\n   * _createIterator\n   *\n   * @param  {Document} root document/fragment to create iterator for\n   * @return {Iterator} iterator instance\n   */\n  const _createIterator = function (root) {\n    return createNodeIterator.call(\n      root.ownerDocument || root,\n      root,\n      // eslint-disable-next-line no-bitwise\n      NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT,\n      null,\n      false\n    );\n  };\n\n  /**\n   * _isClobbered\n   *\n   * @param  {Node} elm element to check for clobbering attacks\n   * @return {Boolean} true if clobbered, false if safe\n   */\n  const _isClobbered = function (elm) {\n    return (\n      elm instanceof HTMLFormElement &&\n      (typeof elm.nodeName !== 'string' ||\n        typeof elm.textContent !== 'string' ||\n        typeof elm.removeChild !== 'function' ||\n        !(elm.attributes instanceof NamedNodeMap) ||\n        typeof elm.removeAttribute !== 'function' ||\n        typeof elm.setAttribute !== 'function' ||\n        typeof elm.namespaceURI !== 'string' ||\n        typeof elm.insertBefore !== 'function')\n    );\n  };\n\n  /**\n   * _isNode\n   *\n   * @param  {Node} obj object to check whether it's a DOM node\n   * @return {Boolean} true is object is a DOM node\n   */\n  const _isNode = function (object) {\n    return typeof Node === 'object'\n      ? object instanceof Node\n      : object &&\n          typeof object === 'object' &&\n          typeof object.nodeType === 'number' &&\n          typeof object.nodeName === 'string';\n  };\n\n  /**\n   * _executeHook\n   * Execute user configurable hooks\n   *\n   * @param  {String} entryPoint  Name of the hook's entry point\n   * @param  {Node} currentNode node to work on with the hook\n   * @param  {Object} data additional hook parameters\n   */\n  const _executeHook = function (entryPoint, currentNode, data) {\n    if (!hooks[entryPoint]) {\n      return;\n    }\n\n    arrayForEach(hooks[entryPoint], (hook) => {\n      hook.call(DOMPurify, currentNode, data, CONFIG);\n    });\n  };\n\n  /**\n   * _sanitizeElements\n   *\n   * @protect nodeName\n   * @protect textContent\n   * @protect removeChild\n   *\n   * @param   {Node} currentNode to check for permission to exist\n   * @return  {Boolean} true if node was killed, false if left alive\n   */\n  const _sanitizeElements = function (currentNode) {\n    let content;\n\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeElements', currentNode, null);\n\n    /* Check if element is clobbered or can clobber */\n    if (_isClobbered(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Check if tagname contains Unicode */\n    if (stringMatch(currentNode.nodeName, /[\\u0080-\\uFFFF]/)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Now let's check the element's type and name */\n    const tagName = transformCaseFunc(currentNode.nodeName);\n\n    /* Execute a hook if present */\n    _executeHook('uponSanitizeElement', currentNode, {\n      tagName,\n      allowedTags: ALLOWED_TAGS,\n    });\n\n    /* Detect mXSS attempts abusing namespace confusion */\n    if (\n      !_isNode(currentNode.firstElementChild) &&\n      (!_isNode(currentNode.content) ||\n        !_isNode(currentNode.content.firstElementChild)) &&\n      regExpTest(/<[/\\w]/g, currentNode.innerHTML) &&\n      regExpTest(/<[/\\w]/g, currentNode.textContent)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Mitigate a problem with templates inside select */\n    if (\n      tagName === 'select' &&\n      regExpTest(/<template/i, currentNode.innerHTML)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove element if anything forbids its presence */\n    if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n      /* Check if we have a custom element to handle */\n      if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n        if (\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n          regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)\n        )\n          return false;\n        if (\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)\n        )\n          return false;\n      }\n\n      /* Keep content except for bad-listed elements */\n      if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n        const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n        const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n        if (childNodes && parentNode) {\n          const childCount = childNodes.length;\n\n          for (let i = childCount - 1; i >= 0; --i) {\n            parentNode.insertBefore(\n              cloneNode(childNodes[i], true),\n              getNextSibling(currentNode)\n            );\n          }\n        }\n      }\n\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Check whether element has a valid namespace */\n    if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    if (\n      (tagName === 'noscript' || tagName === 'noembed') &&\n      regExpTest(/<\\/no(script|embed)/i, currentNode.innerHTML)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Sanitize element content to be template-safe */\n    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n      /* Get the element's text content */\n      content = currentNode.textContent;\n      content = stringReplace(content, MUSTACHE_EXPR, ' ');\n      content = stringReplace(content, ERB_EXPR, ' ');\n      if (currentNode.textContent !== content) {\n        arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n        currentNode.textContent = content;\n      }\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeElements', currentNode, null);\n\n    return false;\n  };\n\n  /**\n   * _isValidAttribute\n   *\n   * @param  {string} lcTag Lowercase tag name of containing element.\n   * @param  {string} lcName Lowercase attribute name.\n   * @param  {string} value Attribute value.\n   * @return {Boolean} Returns true if `value` is valid, otherwise false.\n   */\n  // eslint-disable-next-line complexity\n  const _isValidAttribute = function (lcTag, lcName, value) {\n    /* Make sure attribute cannot clobber */\n    if (\n      SANITIZE_DOM &&\n      (lcName === 'id' || lcName === 'name') &&\n      (value in document || value in formElement)\n    ) {\n      return false;\n    }\n\n    /* Allow valid data-* attributes: At least one character after \"-\"\n        (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n        XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n        We don't need to check the value; it's always URI safe. */\n    if (\n      ALLOW_DATA_ATTR &&\n      !FORBID_ATTR[lcName] &&\n      regExpTest(DATA_ATTR, lcName)\n    ) {\n      // This attribute is safe\n    } else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) {\n      // This attribute is safe\n      /* Otherwise, check the name is permitted */\n    } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n      if (\n        // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n        // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n        (_basicCustomElementTest(lcTag) &&\n          ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag)) ||\n            (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag))) &&\n          ((CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName)) ||\n            (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)))) ||\n        // Alternative, second condition checks if it's an `is`-attribute, AND\n        // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        (lcName === 'is' &&\n          CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements &&\n          ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)) ||\n            (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))))\n      ) {\n        // If user has supplied a regexp or function in CUSTOM_ELEMENT_HANDLING.tagNameCheck, we need to also allow derived custom elements using the same tagName test.\n        // Additionally, we need to allow attributes passing the CUSTOM_ELEMENT_HANDLING.attributeNameCheck user has configured, as custom elements can define these at their own discretion.\n      } else {\n        return false;\n      }\n      /* Check value is safe. First, is attr inert? If so, is safe */\n    } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n      // This attribute is safe\n      /* Check no script, data or unknown possibly unsafe URI\n        unless we know URI values are safe for that attribute */\n    } else if (\n      regExpTest(IS_ALLOWED_URI, stringReplace(value, ATTR_WHITESPACE, ''))\n    ) {\n      // This attribute is safe\n      /* Keep image data URIs alive if src/xlink:href is allowed */\n      /* Further prevent gadget XSS for dynamically built script tags */\n    } else if (\n      (lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') &&\n      lcTag !== 'script' &&\n      stringIndexOf(value, 'data:') === 0 &&\n      DATA_URI_TAGS[lcTag]\n    ) {\n      // This attribute is safe\n      /* Allow unknown protocols: This provides support for links that\n        are handled by protocol handlers which may be unknown ahead of\n        time, e.g. fb:, spotify: */\n    } else if (\n      ALLOW_UNKNOWN_PROTOCOLS &&\n      !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))\n    ) {\n      // This attribute is safe\n      /* Check for binary attributes */\n      // eslint-disable-next-line no-negated-condition\n    } else if (!value) {\n      // Binary attributes are safe at this point\n      /* Anything else, presume unsafe, do not add it back */\n    } else {\n      return false;\n    }\n\n    return true;\n  };\n\n  /**\n   * _basicCustomElementCheck\n   * checks if at least one dash is included in tagName, and it's not the first char\n   * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n   * @param {string} tagName name of the tag of the node to sanitize\n   */\n  const _basicCustomElementTest = function (tagName) {\n    return tagName.indexOf('-') > 0;\n  };\n\n  /**\n   * _sanitizeAttributes\n   *\n   * @protect attributes\n   * @protect nodeName\n   * @protect removeAttribute\n   * @protect setAttribute\n   *\n   * @param  {Node} currentNode to sanitize\n   */\n  const _sanitizeAttributes = function (currentNode) {\n    let attr;\n    let value;\n    let lcName;\n    let l;\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n    const { attributes } = currentNode;\n\n    /* Check if we have attributes; if not we might have a text node */\n    if (!attributes) {\n      return;\n    }\n\n    const hookEvent = {\n      attrName: '',\n      attrValue: '',\n      keepAttr: true,\n      allowedAttributes: ALLOWED_ATTR,\n    };\n    l = attributes.length;\n\n    /* Go backwards over all attributes; safely remove bad ones */\n    while (l--) {\n      attr = attributes[l];\n      const { name, namespaceURI } = attr;\n      value = stringTrim(attr.value);\n      lcName = transformCaseFunc(name);\n\n      /* Execute a hook if present */\n      hookEvent.attrName = lcName;\n      hookEvent.attrValue = value;\n      hookEvent.keepAttr = true;\n      hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n      _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n      value = hookEvent.attrValue;\n      /* Did the hooks approve of the attribute? */\n      if (hookEvent.forceKeepAttr) {\n        continue;\n      }\n\n      /* Remove attribute */\n      _removeAttribute(name, currentNode);\n\n      /* Did the hooks approve of the attribute? */\n      if (!hookEvent.keepAttr) {\n        continue;\n      }\n\n      /* Work around a security issue in jQuery 3.0 */\n      if (regExpTest(/\\/>/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n\n      /* Sanitize attribute content to be template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        value = stringReplace(value, MUSTACHE_EXPR, ' ');\n        value = stringReplace(value, ERB_EXPR, ' ');\n      }\n\n      /* Is `value` valid for this attribute? */\n      const lcTag = transformCaseFunc(currentNode.nodeName);\n      if (!_isValidAttribute(lcTag, lcName, value)) {\n        continue;\n      }\n\n      /* Handle invalid data-* attribute set by try-catching it */\n      try {\n        if (namespaceURI) {\n          currentNode.setAttributeNS(namespaceURI, name, value);\n        } else {\n          /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n          currentNode.setAttribute(name, value);\n        }\n\n        arrayPop(DOMPurify.removed);\n      } catch (_) {}\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeAttributes', currentNode, null);\n  };\n\n  /**\n   * _sanitizeShadowDOM\n   *\n   * @param  {DocumentFragment} fragment to iterate over recursively\n   */\n  const _sanitizeShadowDOM = function (fragment) {\n    let shadowNode;\n    const shadowIterator = _createIterator(fragment);\n\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n    while ((shadowNode = shadowIterator.nextNode())) {\n      /* Execute a hook if present */\n      _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n      /* Sanitize tags and elements */\n      if (_sanitizeElements(shadowNode)) {\n        continue;\n      }\n\n      /* Deep shadow DOM detected */\n      if (shadowNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(shadowNode.content);\n      }\n\n      /* Check attributes, sanitize if necessary */\n      _sanitizeAttributes(shadowNode);\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeShadowDOM', fragment, null);\n  };\n\n  /**\n   * Sanitize\n   * Public method providing core sanitation functionality\n   *\n   * @param {String|Node} dirty string or DOM node\n   * @param {Object} configuration object\n   */\n  // eslint-disable-next-line complexity\n  DOMPurify.sanitize = function (dirty, cfg) {\n    let body;\n    let importedNode;\n    let currentNode;\n    let oldNode;\n    let returnNode;\n    /* Make sure we have a string to sanitize.\n      DO NOT return early, as this will return the wrong type if\n      the user has requested a DOM object rather than a string */\n    IS_EMPTY_INPUT = !dirty;\n    if (IS_EMPTY_INPUT) {\n      dirty = '<!-->';\n    }\n\n    /* Stringify, in case dirty is an object */\n    if (typeof dirty !== 'string' && !_isNode(dirty)) {\n      // eslint-disable-next-line no-negated-condition\n      if (typeof dirty.toString !== 'function') {\n        throw typeErrorCreate('toString is not a function');\n      } else {\n        dirty = dirty.toString();\n        if (typeof dirty !== 'string') {\n          throw typeErrorCreate('dirty is not a string, aborting');\n        }\n      }\n    }\n\n    /* Check we can run. Otherwise fall back or ignore */\n    if (!DOMPurify.isSupported) {\n      if (\n        typeof window.toStaticHTML === 'object' ||\n        typeof window.toStaticHTML === 'function'\n      ) {\n        if (typeof dirty === 'string') {\n          return window.toStaticHTML(dirty);\n        }\n\n        if (_isNode(dirty)) {\n          return window.toStaticHTML(dirty.outerHTML);\n        }\n      }\n\n      return dirty;\n    }\n\n    /* Assign config vars */\n    if (!SET_CONFIG) {\n      _parseConfig(cfg);\n    }\n\n    /* Clean up removed elements */\n    DOMPurify.removed = [];\n\n    /* Check if dirty is correctly typed for IN_PLACE */\n    if (typeof dirty === 'string') {\n      IN_PLACE = false;\n    }\n\n    if (IN_PLACE) {\n      /* Do some early pre-sanitization to avoid unsafe root nodes */\n      if (dirty.nodeName) {\n        const tagName = transformCaseFunc(dirty.nodeName);\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          throw typeErrorCreate(\n            'root node is forbidden and cannot be sanitized in-place'\n          );\n        }\n      }\n    } else if (dirty instanceof Node) {\n      /* If dirty is a DOM element, append to an empty document to avoid\n         elements being stripped by the parser */\n      body = _initDocument('<!---->');\n      importedNode = body.ownerDocument.importNode(dirty, true);\n      if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n        /* Node is already a body, use as is */\n        body = importedNode;\n      } else if (importedNode.nodeName === 'HTML') {\n        body = importedNode;\n      } else {\n        // eslint-disable-next-line unicorn/prefer-dom-node-append\n        body.appendChild(importedNode);\n      }\n    } else {\n      /* Exit directly if we have nothing to do */\n      if (\n        !RETURN_DOM &&\n        !SAFE_FOR_TEMPLATES &&\n        !WHOLE_DOCUMENT &&\n        // eslint-disable-next-line unicorn/prefer-includes\n        dirty.indexOf('<') === -1\n      ) {\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n          ? trustedTypesPolicy.createHTML(dirty)\n          : dirty;\n      }\n\n      /* Initialize the document to work on */\n      body = _initDocument(dirty);\n\n      /* Check we have a DOM node from the data */\n      if (!body) {\n        return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n      }\n    }\n\n    /* Remove first element node (ours) if FORCE_BODY is set */\n    if (body && FORCE_BODY) {\n      _forceRemove(body.firstChild);\n    }\n\n    /* Get node iterator */\n    const nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n    /* Now start iterating over the created document */\n    while ((currentNode = nodeIterator.nextNode())) {\n      /* Fix IE's strange behavior with manipulated textNodes #89 */\n      if (currentNode.nodeType === 3 && currentNode === oldNode) {\n        continue;\n      }\n\n      /* Sanitize tags and elements */\n      if (_sanitizeElements(currentNode)) {\n        continue;\n      }\n\n      /* Shadow DOM detected, sanitize it */\n      if (currentNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(currentNode.content);\n      }\n\n      /* Check attributes, sanitize if necessary */\n      _sanitizeAttributes(currentNode);\n\n      oldNode = currentNode;\n    }\n\n    oldNode = null;\n\n    /* If we sanitized `dirty` in-place, return it. */\n    if (IN_PLACE) {\n      return dirty;\n    }\n\n    /* Return sanitized string or DOM */\n    if (RETURN_DOM) {\n      if (RETURN_DOM_FRAGMENT) {\n        returnNode = createDocumentFragment.call(body.ownerDocument);\n\n        while (body.firstChild) {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          returnNode.appendChild(body.firstChild);\n        }\n      } else {\n        returnNode = body;\n      }\n\n      if (ALLOWED_ATTR.shadowroot) {\n        /*\n          AdoptNode() is not used because internal state is not reset\n          (e.g. the past names map of a HTMLFormElement), this is safe\n          in theory but we would rather not risk another attack vector.\n          The state that is cloned by importNode() is explicitly defined\n          by the specs.\n        */\n        returnNode = importNode.call(originalDocument, returnNode, true);\n      }\n\n      return returnNode;\n    }\n\n    let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n    /* Serialize doctype if allowed */\n    if (\n      WHOLE_DOCUMENT &&\n      ALLOWED_TAGS['!doctype'] &&\n      body.ownerDocument &&\n      body.ownerDocument.doctype &&\n      body.ownerDocument.doctype.name &&\n      regExpTest(EXPRESSIONS.DOCTYPE_NAME, body.ownerDocument.doctype.name)\n    ) {\n      serializedHTML =\n        '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n    }\n\n    /* Sanitize final string template-safe */\n    if (SAFE_FOR_TEMPLATES) {\n      serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR, ' ');\n      serializedHTML = stringReplace(serializedHTML, ERB_EXPR, ' ');\n    }\n\n    return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n      ? trustedTypesPolicy.createHTML(serializedHTML)\n      : serializedHTML;\n  };\n\n  /**\n   * Public method to set the configuration once\n   * setConfig\n   *\n   * @param {Object} cfg configuration object\n   */\n  DOMPurify.setConfig = function (cfg) {\n    _parseConfig(cfg);\n    SET_CONFIG = true;\n  };\n\n  /**\n   * Public method to remove the configuration\n   * clearConfig\n   *\n   */\n  DOMPurify.clearConfig = function () {\n    CONFIG = null;\n    SET_CONFIG = false;\n  };\n\n  /**\n   * Public method to check if an attribute value is valid.\n   * Uses last set config, if any. Otherwise, uses config defaults.\n   * isValidAttribute\n   *\n   * @param  {string} tag Tag name of containing element.\n   * @param  {string} attr Attribute name.\n   * @param  {string} value Attribute value.\n   * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n   */\n  DOMPurify.isValidAttribute = function (tag, attr, value) {\n    /* Initialize shared config vars if necessary. */\n    if (!CONFIG) {\n      _parseConfig({});\n    }\n\n    const lcTag = transformCaseFunc(tag);\n    const lcName = transformCaseFunc(attr);\n    return _isValidAttribute(lcTag, lcName, value);\n  };\n\n  /**\n   * AddHook\n   * Public method to add DOMPurify hooks\n   *\n   * @param {String} entryPoint entry point for the hook to add\n   * @param {Function} hookFunction function to execute\n   */\n  DOMPurify.addHook = function (entryPoint, hookFunction) {\n    if (typeof hookFunction !== 'function') {\n      return;\n    }\n\n    hooks[entryPoint] = hooks[entryPoint] || [];\n    arrayPush(hooks[entryPoint], hookFunction);\n  };\n\n  /**\n   * RemoveHook\n   * Public method to remove a DOMPurify hook at a given entryPoint\n   * (pops it from the stack of hooks if more are present)\n   *\n   * @param {String} entryPoint entry point for the hook to remove\n   */\n  DOMPurify.removeHook = function (entryPoint) {\n    if (hooks[entryPoint]) {\n      arrayPop(hooks[entryPoint]);\n    }\n  };\n\n  /**\n   * RemoveHooks\n   * Public method to remove all DOMPurify hooks at a given entryPoint\n   *\n   * @param  {String} entryPoint entry point for the hooks to remove\n   */\n  DOMPurify.removeHooks = function (entryPoint) {\n    if (hooks[entryPoint]) {\n      hooks[entryPoint] = [];\n    }\n  };\n\n  /**\n   * RemoveAllHooks\n   * Public method to remove all DOMPurify hooks\n   *\n   */\n  DOMPurify.removeAllHooks = function () {\n    hooks = {};\n  };\n\n  return DOMPurify;\n}\n\nexport default createDOMPurify();\n", "'use strict';\nvar global = require('../internals/global');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar RangeError = global.RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n  var str = toString(requireObjectCoercible(this));\n  var result = '';\n  var n = toIntegerOrInfinity(count);\n  if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n  return result;\n};\n", "// https://github.com/tc39/proposal-string-pad-start-end\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar $repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n  return function ($this, maxLength, fillString) {\n    var S = toString(requireObjectCoercible($this));\n    var intMaxLength = toLength(maxLength);\n    var stringLength = S.length;\n    var fillStr = fillString === undefined ? ' ' : toString(fillString);\n    var fillLen, stringFiller;\n    if (intMaxLength <= stringLength || fillStr == '') return S;\n    fillLen = intMaxLength - stringLength;\n    stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length));\n    if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen);\n    return IS_END ? S + stringFiller : stringFiller + S;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.padStart` method\n  // https://tc39.es/ecma262/#sec-string.prototype.padstart\n  start: createMethod(false),\n  // `String.prototype.padEnd` method\n  // https://tc39.es/ecma262/#sec-string.prototype.padend\n  end: createMethod(true)\n};\n", "// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /Version\\/10(?:\\.\\d+){1,2}(?: [\\w./]+)?(?: Mobile\\/\\w+)? Safari\\//.test(userAgent);\n", "//! moment.js\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.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks () {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback (callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return input != null && Object.prototype.toString.call(input) === '[object Object]';\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return (Object.getOwnPropertyNames(obj).length === 0);\n        } else {\n            var k;\n            for (k in obj) {\n                if (obj.hasOwnProperty(k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n    }\n\n    function isDate(input) {\n        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n    }\n\n    function map(arr, fn) {\n        var res = [], i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty           : false,\n            unusedTokens    : [],\n            unusedInput     : [],\n            overflow        : -2,\n            charsLeftOver   : 0,\n            nullInput       : false,\n            invalidMonth    : null,\n            invalidFormat   : false,\n            userInvalidated : false,\n            iso             : false,\n            parsedDateParts : [],\n            meridiem        : null,\n            rfc2822         : false,\n            weekdayMismatch : false\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this);\n            var len = t.length >>> 0;\n\n            for (var i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m);\n            var parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            var isNowValid = !isNaN(m._d.getTime()) &&\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid = isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            }\n            else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid (flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        }\n        else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = hooks.momentProperties = [];\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i = 0; i < momentProperties.length; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    var updateInProgress = false;\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment (obj) {\n        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n    }\n\n    function absFloor (number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if ((dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    function warn(msg) {\n        if (hooks.suppressDeprecationWarnings === false &&\n                (typeof console !==  'undefined') && console.warn) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [];\n                var arg;\n                for (var i = 0; i < arguments.length; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (var key in arguments[0]) {\n                            arg += key + ': ' + arguments[0][key] + ', ';\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n    function set (config) {\n        var prop, i;\n        for (i in config) {\n            prop = config[i];\n            if (isFunction(prop)) {\n                this[i] = prop;\n            } else {\n                this['_' + i] = prop;\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' + (/\\d{1,2}/).source);\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig), prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (hasOwnProp(parentConfig, prop) &&\n                    !hasOwnProp(childConfig, prop) &&\n                    isObject(parentConfig[prop])) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i, res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    };\n\n    function calendar (key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    var defaultLongDateFormat = {\n        LTS  : 'h:mm:ss A',\n        LT   : 'h:mm A',\n        L    : 'MM/DD/YYYY',\n        LL   : 'MMMM D, YYYY',\n        LLL  : 'MMMM D, YYYY h:mm A',\n        LLLL : 'dddd, MMMM D, YYYY h:mm A'\n    };\n\n    function longDateFormat (key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n            return val.slice(1);\n        });\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate () {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d';\n    var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal (number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future : 'in %s',\n        past   : '%s ago',\n        s  : 'a few seconds',\n        ss : '%d seconds',\n        m  : 'a minute',\n        mm : '%d minutes',\n        h  : 'an hour',\n        hh : '%d hours',\n        d  : 'a day',\n        dd : '%d days',\n        M  : 'a month',\n        MM : '%d months',\n        y  : 'a year',\n        yy : '%d years'\n    };\n\n    function relativeTime (number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return (isFunction(output)) ?\n            output(number, withoutSuffix, string, isFuture) :\n            output.replace(/%d/i, number);\n    }\n\n    function pastFuture (diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias (unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [];\n        for (var u in unitsObj) {\n            units.push({unit: u, priority: priorities[u]});\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n    var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n    var formatFunctions = {};\n\n    var formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken (token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(func.apply(this, arguments), token);\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens), i, length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '', i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var match1         = /\\d/;            //       0 - 9\n    var match2         = /\\d\\d/;          //      00 - 99\n    var match3         = /\\d{3}/;         //     000 - 999\n    var match4         = /\\d{4}/;         //    0000 - 9999\n    var match6         = /[+-]?\\d{6}/;    // -999999 - 999999\n    var match1to2      = /\\d\\d?/;         //       0 - 99\n    var match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\n    var match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\n    var match1to3      = /\\d{1,3}/;       //       0 - 999\n    var match1to4      = /\\d{1,4}/;       //       0 - 9999\n    var match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\n    var matchUnsigned  = /\\d+/;           //       0 - inf\n    var matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\n    var matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n    var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n    var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n    // any word (or two) characters or numbers including two/three word month in arabic.\n    // includes scottish gaelic two word and hyphenated months\n    var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n    var regexes = {};\n\n    function addRegexToken (token, regex, strictRegex) {\n        regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n            return (isStrict && strictRegex) ? strictRegex : regex;\n        };\n    }\n\n    function getParseRegexForToken (token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n            return p1 || p2 || p3 || p4;\n        }));\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken (token, callback) {\n        var i, func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken (token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0;\n    var MONTH = 1;\n    var DATE = 2;\n    var HOUR = 3;\n    var MINUTE = 4;\n    var SECOND = 5;\n    var MILLISECOND = 6;\n    var WEEK = 7;\n    var WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? '' + y : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY',   4],       0, 'year');\n    addFormatToken(0, ['YYYYY',  5],       0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y',      matchSigned);\n    addRegexToken('YY',     match1to2, match2);\n    addRegexToken('YYYY',   match1to4, match4);\n    addRegexToken('YYYYY',  match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear () {\n        return isLeapYear(this.year());\n    }\n\n    function makeGetSet (unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get (mom, unit) {\n        return mom.isValid() ?\n            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n    }\n\n    function set$1 (mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n            }\n            else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet (units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n\n    function stringSet (units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units);\n            for (var i = 0; i < prioritized.length; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M',    match1to2);\n    addRegexToken('MM',   match1to2, match2);\n    addRegexToken('MMM',  function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n    function localeMonths (m, format) {\n        if (!m) {\n            return isArray(this._months) ? this._months :\n                this._months['standalone'];\n        }\n        return isArray(this._months) ? this._months[m.month()] :\n            this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n    function localeMonthsShort (m, format) {\n        if (!m) {\n            return isArray(this._monthsShort) ? this._monthsShort :\n                this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n            this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i, ii, mom, llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse (monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth (mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth (value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth () {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    var defaultMonthsShortRegex = matchWord;\n    function monthsShortRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict ?\n                this._monthsShortStrictRegex : this._monthsShortRegex;\n        }\n    }\n\n    var defaultMonthsRegex = matchWord;\n    function monthsRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict ?\n                this._monthsStrictRegex : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    }\n\n    function createDate (y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate (y) {\n        var date;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            var args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear, resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek, resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w',  match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W',  match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek (mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek () {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear () {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek (input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek (input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d',    match1to2);\n    addRegexToken('e',    match1to2);\n    addRegexToken('E',    match1to2);\n    addRegexToken('dd',   function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd',   function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd',   function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays (ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n    function localeWeekdays (m, format) {\n        var weekdays = isArray(this._weekdays) ? this._weekdays :\n            this._weekdays[(m && m !== true && this._weekdays.isFormat.test(format)) ? 'format' : 'standalone'];\n        return (m === true) ? shiftWeekdays(weekdays, this._week.dow)\n            : (m) ? weekdays[m.day()] : weekdays;\n    }\n\n    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n    function localeWeekdaysShort (m) {\n        return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n    }\n\n    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n    function localeWeekdaysMin (m) {\n        return (m === true) ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse (weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n            }\n            if (!this._weekdaysParse[i]) {\n                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    var defaultWeekdaysRegex = matchWord;\n    function weekdaysRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict ?\n                this._weekdaysStrictRegex : this._weekdaysRegex;\n        }\n    }\n\n    var defaultWeekdaysShortRegex = matchWord;\n    function weekdaysShortRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict ?\n                this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n        }\n    }\n\n    var defaultWeekdaysMinRegex = matchWord;\n    function weekdaysMinRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict ?\n                this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n        }\n    }\n\n\n    function computeWeekdaysParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom, minp, shortp, longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = this.weekdaysMin(mom, '');\n            shortp = this.weekdaysShort(mom, '');\n            longp = this.weekdays(mom, '');\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 7; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n        this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    function meridiem (token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem (isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a',  matchMeridiem);\n    addRegexToken('A',  matchMeridiem);\n    addRegexToken('H',  match1to2);\n    addRegexToken('h',  match1to2);\n    addRegexToken('k',  match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM (input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return ((input + '').toLowerCase().charAt(0) === 'p');\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n    function localeMeridiem (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n\n    // MOMENTS\n\n    // Setting the hour should keep the time, because the user explicitly\n    // specified which hour they want. So trying to maintain the same hour (in\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\n    // this rule.\n    var getSetHour = makeGetSet('Hours', true);\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse\n    };\n\n    // internal storage for locale config files\n    var locales = {};\n    var localeFamilies = {};\n    var globalLocale;\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0, j, next, locale, split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (!locales[name] && (typeof module !== 'undefined') &&\n                module && module.exports) {\n            try {\n                oldLocale = globalLocale._abbr;\n                var aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {}\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale (key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            }\n            else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            }\n            else {\n                if ((typeof console !==  'undefined') && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn('Locale ' + key +  ' not found. Did you forget to load it?');\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale (name, config) {\n        if (config !== null) {\n            var locale, parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple('defineLocaleOverride',\n                        'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale, tmpLocale, parentConfig = baseConfig;\n            // MERGE\n            tmpLocale = loadLocale(name);\n            if (tmpLocale != null) {\n                parentConfig = tmpLocale._config;\n            }\n            config = mergeConfigs(parentConfig, config);\n            locale = new Locale(config);\n            locale.parentLocale = locales[name];\n            locales[name] = locale;\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale (key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow (m) {\n        var overflow;\n        var a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n                -1;\n\n            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray (config) {\n        var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (config._a[HOUR] === 24 &&\n                config._a[MINUTE] === 0 &&\n                config._a[SECOND] === 0 &&\n                config._a[MILLISECOND] === 0) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            var curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n    var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n    var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n    var isoDates = [\n        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n        ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n        ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n        ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n        ['YYYY-DDD', /\\d{4}-\\d{3}/],\n        ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n        ['YYYYYYMMDD', /[+-]\\d{10}/],\n        ['YYYYMMDD', /\\d{8}/],\n        // YYYYMM is NOT allowed by the standard\n        ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n        ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n        ['YYYYDDD', /\\d{7}/]\n    ];\n\n    // iso time formats and regexes\n    var isoTimes = [\n        ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n        ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n        ['HH:mm', /\\d\\d:\\d\\d/],\n        ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n        ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n        ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n        ['HHmm', /\\d\\d\\d\\d/],\n        ['HH', /\\d\\d/]\n    ];\n\n    var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n    // date from iso format\n    function configFromISO(config) {\n        var i, l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime, dateFormat, timeFormat, tzFormat;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimes.length; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n    var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n    function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10)\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    var obsOffsets = {\n        UT: 0,\n        GMT: 0,\n        EDT: -4 * 60,\n        EST: -5 * 60,\n        CDT: -5 * 60,\n        CST: -6 * 60,\n        MDT: -6 * 60,\n        MST: -7 * 60,\n        PDT: -7 * 60,\n        PST: -8 * 60\n    };\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10);\n            var m = hm % 100, h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i));\n        if (match) {\n            var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from iso format or fallback\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        // Final attempt, use Input Fallback\n        hooks.createFromInputFallback(config);\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n        'discouraged and will be removed in an upcoming major release. Please refer to ' +\n        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i, parsedInput, tokens, token, skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0;\n\n        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n            // console.log('token', token, 'parsedInput', parsedInput,\n            //         'regex', getParseRegexForToken(token, config));\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                }\n                else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            }\n            else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n\n    function meridiemFixWrap (locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n\n            scoreToBeat,\n            i,\n            currentScore;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (!isValid(tempConfig)) {\n                continue;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (scoreToBeat == null || currentScore < scoreToBeat) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i);\n        config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n            return obj && parseInt(obj, 10);\n        });\n\n        configFromArray(config);\n    }\n\n    function createFromConfig (config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig (config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({nullInput: true});\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        }  else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC (input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if ((isObject(input) && isObjectEmpty(input)) ||\n                (isArray(input) && input.length === 0)) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other < this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    var prototypeMax = deprecate(\n        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other > this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +(new Date());\n    };\n\n    var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n    function isDurationValid(m) {\n        for (var key in m) {\n            if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n                return false;\n            }\n        }\n\n        var unitHasDecimal = false;\n        for (var i = 0; i < ordering.length; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration (duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds = +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days +\n            weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months +\n            quarters * 3 +\n            years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration (obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound (number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // FORMATTING\n\n    function offset (token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset();\n            var sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z',  matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher);\n\n        if (matches === null) {\n            return null;\n        }\n\n        var chunk   = matches[matches.length - 1] || [];\n        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ?\n          0 :\n          parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset (m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset (input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone (input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC (keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal (keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset () {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            }\n            else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset (input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime () {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted () {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {};\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted = this.isValid() &&\n                compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal () {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset () {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc () {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n    // and further modified to allow for strings containing both week and day\n    var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration (input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms : input._milliseconds,\n                d  : input._days,\n                M  : input._months\n            };\n        } else if (isNumber(input)) {\n            duration = {};\n            if (key) {\n                duration[key] = input;\n            } else {\n                duration.milliseconds = input;\n            }\n        } else if (!!(match = aspNetRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y  : 0,\n                d  : toInt(match[DATE])                         * sign,\n                h  : toInt(match[HOUR])                         * sign,\n                m  : toInt(match[MINUTE])                       * sign,\n                s  : toInt(match[SECOND])                       * sign,\n                ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n            };\n        } else if (!!(match = isoRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y : parseIso(match[2], sign),\n                M : parseIso(match[3], sign),\n                w : parseIso(match[4], sign),\n                d : parseIso(match[5], sign),\n                h : parseIso(match[6], sign),\n                m : parseIso(match[7], sign),\n                s : parseIso(match[8], sign)\n            };\n        } else if (duration == null) {// checks for null or undefined\n            duration = {};\n        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n            diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso (inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months = other.month() - base.month() +\n            (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return {milliseconds: 0, months: 0};\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n                'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n                tmp = val; val = period; period = tmp;\n            }\n\n            val = typeof val === 'string' ? +val : val;\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract (mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add      = createAdder(1, 'add');\n    var subtract = createAdder(-1, 'subtract');\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6 ? 'sameElse' :\n                diff < -1 ? 'lastWeek' :\n                diff < 0 ? 'lastDay' :\n                diff < 1 ? 'sameDay' :\n                diff < 2 ? 'nextDay' :\n                diff < 7 ? 'nextWeek' : 'sameElse';\n    }\n\n    function calendar$1 (time, formats) {\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n        var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n        return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n    }\n\n    function clone () {\n        return new Moment(this);\n    }\n\n    function isAfter (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween (from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n    }\n\n    function isSame (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n        }\n    }\n\n    function isSameOrAfter (input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore (input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff (input, units, asFloat) {\n        var that,\n            zoneDelta,\n            output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year': output = monthDiff(this, that) / 12; break;\n            case 'month': output = monthDiff(this, that); break;\n            case 'quarter': output = monthDiff(this, that) / 3; break;\n            case 'second': output = (this - that) / 1e3; break; // 1000\n            case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n            case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n            case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default: output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff (a, b) {\n        // difference in months\n        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2, adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString () {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true;\n        var m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect () {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment';\n        var zone = '';\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        var prefix = '[' + func + '(\"]';\n        var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n        var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        var suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format (inputString) {\n        if (!inputString) {\n            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow (withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow (withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale (key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData () {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000;\n    var MS_PER_MINUTE = 60 * MS_PER_SECOND;\n    var MS_PER_HOUR = 60 * MS_PER_MINUTE;\n    var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return (dividend % divisor + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf (units) {\n        var time;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n                break;\n            case 'isoWeek':\n                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf (units) {\n        var time;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n                break;\n            case 'isoWeek':\n                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf () {\n        return this._d.valueOf() - ((this._offset || 0) * 60000);\n    }\n\n    function unix () {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate () {\n        return new Date(this.valueOf());\n    }\n\n    function toArray () {\n        var m = this;\n        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n    }\n\n    function toObject () {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds()\n        };\n    }\n\n    function toJSON () {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2 () {\n        return isValid(this);\n    }\n\n    function parsingFlags () {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt () {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict\n        };\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken (token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg',     'weekYear');\n    addWeekYearFormatToken('ggggg',    'weekYear');\n    addWeekYearFormatToken('GGGG',  'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n\n    // PARSING\n\n    addRegexToken('G',      matchSigned);\n    addRegexToken('g',      matchSigned);\n    addRegexToken('GG',     match1to2, match2);\n    addRegexToken('gg',     match1to2, match2);\n    addRegexToken('GGGG',   match1to4, match4);\n    addRegexToken('gggg',   match1to4, match4);\n    addRegexToken('GGGGG',  match1to6, match6);\n    addRegexToken('ggggg',  match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input,\n                this.week(),\n                this.weekday(),\n                this.localeData()._week.dow,\n                this.localeData()._week.doy);\n    }\n\n    function getSetISOWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input, this.isoWeek(), this.isoWeekday(), 1, 4);\n    }\n\n    function getISOWeeksInYear () {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getWeeksInYear () {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter (input) {\n        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D',  match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict ?\n          (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n          locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD',  match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear (input) {\n        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m',  match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s',  match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S',    match1to3, match1);\n    addRegexToken('SS',   match1to3, match2);\n    addRegexToken('SSS',  match1to3, match3);\n\n    var token;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n    // MOMENTS\n\n    var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z',  0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr () {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName () {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add               = add;\n    proto.calendar          = calendar$1;\n    proto.clone             = clone;\n    proto.diff              = diff;\n    proto.endOf             = endOf;\n    proto.format            = format;\n    proto.from              = from;\n    proto.fromNow           = fromNow;\n    proto.to                = to;\n    proto.toNow             = toNow;\n    proto.get               = stringGet;\n    proto.invalidAt         = invalidAt;\n    proto.isAfter           = isAfter;\n    proto.isBefore          = isBefore;\n    proto.isBetween         = isBetween;\n    proto.isSame            = isSame;\n    proto.isSameOrAfter     = isSameOrAfter;\n    proto.isSameOrBefore    = isSameOrBefore;\n    proto.isValid           = isValid$2;\n    proto.lang              = lang;\n    proto.locale            = locale;\n    proto.localeData        = localeData;\n    proto.max               = prototypeMax;\n    proto.min               = prototypeMin;\n    proto.parsingFlags      = parsingFlags;\n    proto.set               = stringSet;\n    proto.startOf           = startOf;\n    proto.subtract          = subtract;\n    proto.toArray           = toArray;\n    proto.toObject          = toObject;\n    proto.toDate            = toDate;\n    proto.toISOString       = toISOString;\n    proto.inspect           = inspect;\n    proto.toJSON            = toJSON;\n    proto.toString          = toString;\n    proto.unix              = unix;\n    proto.valueOf           = valueOf;\n    proto.creationData      = creationData;\n    proto.year       = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear    = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month       = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week           = proto.weeks        = getSetWeek;\n    proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\n    proto.weeksInYear    = getWeeksInYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.date       = getSetDayOfMonth;\n    proto.day        = proto.days             = getSetDayOfWeek;\n    proto.weekday    = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear  = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset            = getSetOffset;\n    proto.utc                  = setOffsetToUTC;\n    proto.local                = setOffsetToLocal;\n    proto.parseZone            = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST                = isDaylightSavingTime;\n    proto.isLocal              = isLocal;\n    proto.isUtcOffset          = isUtcOffset;\n    proto.isUtc                = isUtc;\n    proto.isUTC                = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n    proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n    proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n    proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n    proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n    function createUnix (input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone () {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat (string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar        = calendar;\n    proto$1.longDateFormat  = longDateFormat;\n    proto$1.invalidDate     = invalidDate;\n    proto$1.ordinal         = ordinal;\n    proto$1.preparse        = preParsePostFormat;\n    proto$1.postformat      = preParsePostFormat;\n    proto$1.relativeTime    = relativeTime;\n    proto$1.pastFuture      = pastFuture;\n    proto$1.set             = set;\n\n    proto$1.months            =        localeMonths;\n    proto$1.monthsShort       =        localeMonthsShort;\n    proto$1.monthsParse       =        localeMonthsParse;\n    proto$1.monthsRegex       = monthsRegex;\n    proto$1.monthsShortRegex  = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays       =        localeWeekdays;\n    proto$1.weekdaysMin    =        localeWeekdaysMin;\n    proto$1.weekdaysShort  =        localeWeekdaysShort;\n    proto$1.weekdaysParse  =        localeWeekdaysParse;\n\n    proto$1.weekdaysRegex       =        weekdaysRegex;\n    proto$1.weekdaysShortRegex  =        weekdaysShortRegex;\n    proto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1 (format, index, field, setter) {\n        var locale = getLocale();\n        var utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl (format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl (localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0;\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths (format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort (format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (toInt(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n    hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n    var mathAbs = Math.abs;\n\n    function abs () {\n        var data           = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days         = mathAbs(this._days);\n        this._months       = mathAbs(this._months);\n\n        data.milliseconds  = mathAbs(data.milliseconds);\n        data.seconds       = mathAbs(data.seconds);\n        data.minutes       = mathAbs(data.minutes);\n        data.hours         = mathAbs(data.hours);\n        data.months        = mathAbs(data.months);\n        data.years         = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1 (duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days         += direction * other._days;\n        duration._months       += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1 (input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1 (input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil (number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble () {\n        var milliseconds = this._milliseconds;\n        var days         = this._days;\n        var months       = this._months;\n        var data         = this._data;\n        var seconds, minutes, hours, years, monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0))) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds           = absFloor(milliseconds / 1000);\n        data.seconds      = seconds % 60;\n\n        minutes           = absFloor(seconds / 60);\n        data.minutes      = minutes % 60;\n\n        hours             = absFloor(minutes / 60);\n        data.hours        = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days   = days;\n        data.months = months;\n        data.years  = years;\n\n        return this;\n    }\n\n    function daysToMonths (days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return days * 4800 / 146097;\n    }\n\n    function monthsToDays (months) {\n        // the reverse of daysToMonths\n        return months * 146097 / 4800;\n    }\n\n    function as (units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days;\n        var months;\n        var milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':   return months;\n                case 'quarter': return months / 3;\n                case 'year':    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week'   : return days / 7     + milliseconds / 6048e5;\n                case 'day'    : return days         + milliseconds / 864e5;\n                case 'hour'   : return days * 24    + milliseconds / 36e5;\n                case 'minute' : return days * 1440  + milliseconds / 6e4;\n                case 'second' : return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n                default: throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1 () {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs (alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms');\n    var asSeconds      = makeAs('s');\n    var asMinutes      = makeAs('m');\n    var asHours        = makeAs('h');\n    var asDays         = makeAs('d');\n    var asWeeks        = makeAs('w');\n    var asMonths       = makeAs('M');\n    var asQuarters     = makeAs('Q');\n    var asYears        = makeAs('y');\n\n    function clone$1 () {\n        return createDuration(this);\n    }\n\n    function get$2 (units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds');\n    var seconds      = makeGetter('seconds');\n    var minutes      = makeGetter('minutes');\n    var hours        = makeGetter('hours');\n    var days         = makeGetter('days');\n    var months       = makeGetter('months');\n    var years        = makeGetter('years');\n\n    function weeks () {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round;\n    var thresholds = {\n        ss: 44,         // a few seconds to seconds\n        s : 45,         // seconds to minute\n        m : 45,         // minutes to hour\n        h : 22,         // hours to day\n        d : 26,         // days to month\n        M : 11          // months to year\n    };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n        var duration = createDuration(posNegDuration).abs();\n        var seconds  = round(duration.as('s'));\n        var minutes  = round(duration.as('m'));\n        var hours    = round(duration.as('h'));\n        var days     = round(duration.as('d'));\n        var months   = round(duration.as('M'));\n        var years    = round(duration.as('y'));\n\n        var a = seconds <= thresholds.ss && ['s', seconds]  ||\n                seconds < thresholds.s   && ['ss', seconds] ||\n                minutes <= 1             && ['m']           ||\n                minutes < thresholds.m   && ['mm', minutes] ||\n                hours   <= 1             && ['h']           ||\n                hours   < thresholds.h   && ['hh', hours]   ||\n                days    <= 1             && ['d']           ||\n                days    < thresholds.d   && ['dd', days]    ||\n                months  <= 1             && ['M']           ||\n                months  < thresholds.M   && ['MM', months]  ||\n                years   <= 1             && ['y']           || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding (roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof(roundingFunction) === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold (threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize (withSuffix) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var locale = this.localeData();\n        var output = relativeTime$1(this, !withSuffix, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return ((x > 0) - (x < 0)) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000;\n        var days         = abs$1(this._days);\n        var months       = abs$1(this._months);\n        var minutes, hours, years;\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes           = absFloor(seconds / 60);\n        hours             = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years  = absFloor(months / 12);\n        months %= 12;\n\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        var Y = years;\n        var M = months;\n        var D = days;\n        var h = hours;\n        var m = minutes;\n        var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n        var total = this.asSeconds();\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        var totalSign = total < 0 ? '-' : '';\n        var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return totalSign + 'P' +\n            (Y ? ymSign + Y + 'Y' : '') +\n            (M ? ymSign + M + 'M' : '') +\n            (D ? daysSign + D + 'D' : '') +\n            ((h || m || s) ? 'T' : '') +\n            (h ? hmsSign + h + 'H' : '') +\n            (m ? hmsSign + m + 'M' : '') +\n            (s ? hmsSign + s + 'S' : '');\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid        = isValid$1;\n    proto$2.abs            = abs;\n    proto$2.add            = add$1;\n    proto$2.subtract       = subtract$1;\n    proto$2.as             = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds      = asSeconds;\n    proto$2.asMinutes      = asMinutes;\n    proto$2.asHours        = asHours;\n    proto$2.asDays         = asDays;\n    proto$2.asWeeks        = asWeeks;\n    proto$2.asMonths       = asMonths;\n    proto$2.asQuarters     = asQuarters;\n    proto$2.asYears        = asYears;\n    proto$2.valueOf        = valueOf$1;\n    proto$2._bubble        = bubble;\n    proto$2.clone          = clone$1;\n    proto$2.get            = get$2;\n    proto$2.milliseconds   = milliseconds;\n    proto$2.seconds        = seconds;\n    proto$2.minutes        = minutes;\n    proto$2.hours          = hours;\n    proto$2.days           = days;\n    proto$2.weeks          = weeks;\n    proto$2.months         = months;\n    proto$2.years          = years;\n    proto$2.humanize       = humanize;\n    proto$2.toISOString    = toISOString$1;\n    proto$2.toString       = toISOString$1;\n    proto$2.toJSON         = toISOString$1;\n    proto$2.locale         = locale;\n    proto$2.localeData     = localeData;\n\n    proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n    proto$2.lang = lang;\n\n    // Side effect imports\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input, 10) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    // Side effect imports\n\n\n    hooks.version = '2.24.0';\n\n    setHookCallback(createLocal);\n\n    hooks.fn                    = proto;\n    hooks.min                   = min;\n    hooks.max                   = max;\n    hooks.now                   = now;\n    hooks.utc                   = createUTC;\n    hooks.unix                  = createUnix;\n    hooks.months                = listMonths;\n    hooks.isDate                = isDate;\n    hooks.locale                = getSetGlobalLocale;\n    hooks.invalid               = createInvalid;\n    hooks.duration              = createDuration;\n    hooks.isMoment              = isMoment;\n    hooks.weekdays              = listWeekdays;\n    hooks.parseZone             = createInZone;\n    hooks.localeData            = getLocale;\n    hooks.isDuration            = isDuration;\n    hooks.monthsShort           = listMonthsShort;\n    hooks.weekdaysMin           = listWeekdaysMin;\n    hooks.defineLocale          = defineLocale;\n    hooks.updateLocale          = updateLocale;\n    hooks.locales               = listLocales;\n    hooks.weekdaysShort         = listWeekdaysShort;\n    hooks.normalizeUnits        = normalizeUnits;\n    hooks.relativeTimeRounding  = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat        = getCalendarFormat;\n    hooks.prototype             = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',             // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',  // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',   // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD',                             // <input type=\"date\" />\n        TIME: 'HH:mm',                                  // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss',                       // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS',                        // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW',                             // <input type=\"week\" />\n        MONTH: 'YYYY-MM'                                // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar redefineAll = require('../internals/redefine-all');\nvar getWeakData = require('../internals/internal-metadata').getWeakData;\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar ArrayIterationModule = require('../internals/array-iteration');\nvar hasOwn = require('../internals/has-own-property');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar splice = uncurryThis([].splice);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (store) {\n  return store.frozen || (store.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n  this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n  return find(store.entries, function (it) {\n    return it[0] === key;\n  });\n};\n\nUncaughtFrozenStore.prototype = {\n  get: function (key) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) return entry[1];\n  },\n  has: function (key) {\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function (key, value) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) entry[1] = value;\n    else this.entries.push([key, value]);\n  },\n  'delete': function (key) {\n    var index = findIndex(this.entries, function (it) {\n      return it[0] === key;\n    });\n    if (~index) splice(this.entries, index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var Constructor = wrapper(function (that, iterable) {\n      anInstance(that, Prototype);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        id: id++,\n        frozen: undefined\n      });\n      if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n    });\n\n    var Prototype = Constructor.prototype;\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var data = getWeakData(anObject(key), true);\n      if (data === true) uncaughtFrozenStore(state).set(key, value);\n      else data[state.id] = value;\n      return that;\n    };\n\n    redefineAll(Prototype, {\n      // `{ WeakMap, WeakSet }.prototype.delete(key)` methods\n      // https://tc39.es/ecma262/#sec-weakmap.prototype.delete\n      // https://tc39.es/ecma262/#sec-weakset.prototype.delete\n      'delete': function (key) {\n        var state = getInternalState(this);\n        if (!isObject(key)) return false;\n        var data = getWeakData(key);\n        if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n        return data && hasOwn(data, state.id) && delete data[state.id];\n      },\n      // `{ WeakMap, WeakSet }.prototype.has(key)` methods\n      // https://tc39.es/ecma262/#sec-weakmap.prototype.has\n      // https://tc39.es/ecma262/#sec-weakset.prototype.has\n      has: function has(key) {\n        var state = getInternalState(this);\n        if (!isObject(key)) return false;\n        var data = getWeakData(key);\n        if (data === true) return uncaughtFrozenStore(state).has(key);\n        return data && hasOwn(data, state.id);\n      }\n    });\n\n    redefineAll(Prototype, IS_MAP ? {\n      // `WeakMap.prototype.get(key)` method\n      // https://tc39.es/ecma262/#sec-weakmap.prototype.get\n      get: function get(key) {\n        var state = getInternalState(this);\n        if (isObject(key)) {\n          var data = getWeakData(key);\n          if (data === true) return uncaughtFrozenStore(state).get(key);\n          return data ? data[state.id] : undefined;\n        }\n      },\n      // `WeakMap.prototype.set(key, value)` method\n      // https://tc39.es/ecma262/#sec-weakmap.prototype.set\n      set: function set(key, value) {\n        return define(this, key, value);\n      }\n    } : {\n      // `WeakSet.prototype.add(value)` method\n      // https://tc39.es/ecma262/#sec-weakset.prototype.add\n      add: function add(value) {\n        return define(this, value, true);\n      }\n    });\n\n    return Constructor;\n  }\n};\n", "'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar arraySlice = require('../internals/array-slice');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar Function = global.Function;\nvar concat = uncurryThis([].concat);\nvar join = uncurryThis([].join);\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n  if (!hasOwn(factories, argsLength)) {\n    for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n    factories[argsLength] = Function('C,a', 'return new C(' + join(list, ',') + ')');\n  } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = NATIVE_BIND ? Function.bind : function bind(that /* , ...args */) {\n  var F = aCallable(this);\n  var Prototype = F.prototype;\n  var partArgs = arraySlice(arguments, 1);\n  var boundFunction = function bound(/* args... */) {\n    var args = concat(partArgs, arraySlice(arguments));\n    return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);\n  };\n  if (isObject(Prototype)) boundFunction.prototype = Prototype;\n  return boundFunction;\n};\n", "var DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n  return function (it) {\n    var O = toIndexedObject(it);\n    var keys = objectKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) {\n      key = keys[i++];\n      if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n        push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n      }\n    }\n    return result;\n  };\n};\n\nmodule.exports = {\n  // `Object.entries` method\n  // https://tc39.es/ecma262/#sec-object.entries\n  entries: createMethod(true),\n  // `Object.values` method\n  // https://tc39.es/ecma262/#sec-object.values\n  values: createMethod(false)\n};\n", "'use strict';\n/* eslint-disable es/no-array-prototype-lastindexof -- safe */\nvar apply = require('../internals/function-apply');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar min = Math.min;\nvar $lastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$lastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n  // convert -0 to +0\n  if (NEGATIVE_ZERO) return apply($lastIndexOf, this, arguments) || 0;\n  var O = toIndexedObject(this);\n  var length = lengthOfArrayLike(O);\n  var index = length - 1;\n  if (arguments.length > 1) index = min(index, toIntegerOrInfinity(arguments[1]));\n  if (index < 0) index = length + index;\n  for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n  return -1;\n} : $lastIndexOf;\n", "var global = require('../internals/global');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar TypeError = global.TypeError;\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n  return function (that, callbackfn, argumentsLength, memo) {\n    aCallable(callbackfn);\n    var O = toObject(that);\n    var self = IndexedObject(O);\n    var length = lengthOfArrayLike(O);\n    var index = IS_RIGHT ? length - 1 : 0;\n    var i = IS_RIGHT ? -1 : 1;\n    if (argumentsLength < 2) while (true) {\n      if (index in self) {\n        memo = self[index];\n        index += i;\n        break;\n      }\n      index += i;\n      if (IS_RIGHT ? index < 0 : length <= index) {\n        throw TypeError('Reduce of empty array with no initial value');\n      }\n    }\n    for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n      memo = callbackfn(memo, self[index], index, O);\n    }\n    return memo;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.reduce` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduce\n  left: createMethod(false),\n  // `Array.prototype.reduceRight` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n  right: createMethod(true)\n};\n", "var hasOwn = require('../internals/has-own-property');\n\nmodule.exports = function (descriptor) {\n  return descriptor !== undefined && (hasOwn(descriptor, 'value') || hasOwn(descriptor, 'writable'));\n};\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n  // should have correct order of operations (Edge bug)\n  if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n    enumerable: true,\n    get: function () {\n      defineProperty(this, 'b', {\n        value: 3,\n        enumerable: false\n      });\n    }\n  }), { b: 2 })).b !== 1) return true;\n  // should work with symbols and should have deterministic property order (V8 bug)\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line es/no-symbol -- safe\n  var symbol = Symbol();\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n  return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n  var T = toObject(target);\n  var argumentsLength = arguments.length;\n  var index = 1;\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  var propertyIsEnumerable = propertyIsEnumerableModule.f;\n  while (argumentsLength > index) {\n    var S = IndexedObject(arguments[index++]);\n    var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n", "/*!\n * Pikaday\n *\n * Copyright \u00A9 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday\n */\n\n(function (root, factory)\n{\n    'use strict';\n\n    var moment;\n    if (typeof exports === 'object') {\n        // CommonJS module\n        // Load moment.js as an optional dependency\n        try { moment = require('moment'); } catch (e) {}\n        module.exports = factory(moment);\n    } else if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(function (req)\n        {\n            // Load moment.js as an optional dependency\n            var id = 'moment';\n            try { moment = req(id); } catch (e) {}\n            return factory(moment);\n        });\n    } else {\n        root.Pikaday = factory(root.moment);\n    }\n}(this, function (moment)\n{\n    'use strict';\n\n    /**\n     * feature detection and helper functions\n     */\n    var hasMoment = typeof moment === 'function',\n\n    hasEventListeners = !!window.addEventListener,\n\n    document = window.document,\n\n    sto = window.setTimeout,\n\n    addEvent = function(el, e, callback, capture)\n    {\n        if (hasEventListeners) {\n            el.addEventListener(e, callback, !!capture);\n        } else {\n            el.attachEvent('on' + e, callback);\n        }\n    },\n\n    removeEvent = function(el, e, callback, capture)\n    {\n        if (hasEventListeners) {\n            el.removeEventListener(e, callback, !!capture);\n        } else {\n            el.detachEvent('on' + e, callback);\n        }\n    },\n\n    trim = function(str)\n    {\n        return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n    },\n\n    hasClass = function(el, cn)\n    {\n        return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n    },\n\n    addClass = function(el, cn)\n    {\n        if (!hasClass(el, cn)) {\n            el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n        }\n    },\n\n    removeClass = function(el, cn)\n    {\n        el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n    },\n\n    isArray = function(obj)\n    {\n        return (/Array/).test(Object.prototype.toString.call(obj));\n    },\n\n    isDate = function(obj)\n    {\n        return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n    },\n\n    isWeekend = function(date)\n    {\n        var day = date.getDay();\n        return day === 0 || day === 6;\n    },\n\n    isLeapYear = function(year)\n    {\n        // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951\n        return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n    },\n\n    getDaysInMonth = function(year, month)\n    {\n        return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n    },\n\n    setToStartOfDay = function(date)\n    {\n        if (isDate(date)) date.setHours(0,0,0,0);\n    },\n\n    compareDates = function(a,b)\n    {\n        // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n        return a.getTime() === b.getTime();\n    },\n\n    extend = function(to, from, overwrite)\n    {\n        var prop, hasProp;\n        for (prop in from) {\n            hasProp = to[prop] !== undefined;\n            if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n                if (isDate(from[prop])) {\n                    if (overwrite) {\n                        to[prop] = new Date(from[prop].getTime());\n                    }\n                }\n                else if (isArray(from[prop])) {\n                    if (overwrite) {\n                        to[prop] = from[prop].slice(0);\n                    }\n                } else {\n                    to[prop] = extend({}, from[prop], overwrite);\n                }\n            } else if (overwrite || !hasProp) {\n                to[prop] = from[prop];\n            }\n        }\n        return to;\n    },\n\n    fireEvent = function(el, eventName, data)\n    {\n        var ev;\n\n        if (document.createEvent) {\n            ev = document.createEvent('HTMLEvents');\n            ev.initEvent(eventName, true, false);\n            ev = extend(ev, data);\n            el.dispatchEvent(ev);\n        } else if (document.createEventObject) {\n            ev = document.createEventObject();\n            ev = extend(ev, data);\n            el.fireEvent('on' + eventName, ev);\n        }\n    },\n\n    adjustCalendar = function(calendar) {\n        if (calendar.month < 0) {\n            calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n            calendar.month += 12;\n        }\n        if (calendar.month > 11) {\n            calendar.year += Math.floor(Math.abs(calendar.month)/12);\n            calendar.month -= 12;\n        }\n        return calendar;\n    },\n\n    /**\n     * defaults and localisation\n     */\n    defaults = {\n\n        // bind the picker to a form field\n        field: null,\n\n        // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n        bound: undefined,\n\n        // data-attribute on the input field with an aria assistance tekst (only applied when `bound` is set)\n        ariaLabel: 'Use the arrow keys to pick a date',\n\n        // position of the datepicker, relative to the field (default to bottom & left)\n        // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n        position: 'bottom left',\n\n        // automatically fit in the viewport even if it means repositioning from the position option\n        reposition: true,\n\n        // the default output format for `.toString()` and `field` value\n        format: 'YYYY-MM-DD',\n\n        // the toString function which gets passed a current date object and format\n        // and returns a string\n        toString: null,\n\n        // used to create date object from current input string\n        parse: null,\n\n        // the initial date to view when first opened\n        defaultDate: null,\n\n        // make the `defaultDate` the initial selected value\n        setDefaultDate: false,\n\n        // first day of week (0: Sunday, 1: Monday etc)\n        firstDay: 0,\n\n        // the default flag for moment's strict date parsing\n        formatStrict: false,\n\n        // the minimum/earliest date that can be selected\n        minDate: null,\n        // the maximum/latest date that can be selected\n        maxDate: null,\n\n        // number of years either side, or array of upper/lower range\n        yearRange: 10,\n\n        // show week numbers at head of row\n        showWeekNumber: false,\n\n        // Week picker mode\n        pickWholeWeek: false,\n\n        // used internally (don't config outside)\n        minYear: 0,\n        maxYear: 9999,\n        minMonth: undefined,\n        maxMonth: undefined,\n\n        startRange: null,\n        endRange: null,\n\n        isRTL: false,\n\n        // Additional text to append to the year in the calendar title\n        yearSuffix: '',\n\n        // Render the month after year in the calendar title\n        showMonthAfterYear: false,\n\n        // Render days of the calendar grid that fall in the next or previous month\n        showDaysInNextAndPreviousMonths: false,\n\n        // Allows user to select days that fall in the next or previous month\n        enableSelectionDaysInNextAndPreviousMonths: false,\n\n        // how many months are visible\n        numberOfMonths: 1,\n\n        // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n        // only used for the first display or when a selected date is not visible\n        mainCalendar: 'left',\n\n        // Specify a DOM element to render the calendar in\n        container: undefined,\n\n        // Blur field when date is selected\n        blurFieldOnSelect : true,\n\n        // internationalization\n        i18n: {\n            previousMonth : 'Previous Month',\n            nextMonth     : 'Next Month',\n            months        : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n            weekdays      : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n            weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n        },\n\n        // Theme Classname\n        theme: null,\n\n        // events array\n        events: [],\n\n        // callback function\n        onSelect: null,\n        onOpen: null,\n        onClose: null,\n        onDraw: null,\n\n        // Enable keyboard input\n        keyboardInput: true\n    },\n\n\n    /**\n     * templating functions to abstract HTML rendering\n     */\n    renderDayName = function(opts, day, abbr)\n    {\n        day += opts.firstDay;\n        while (day >= 7) {\n            day -= 7;\n        }\n        return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n    },\n\n    renderDay = function(opts)\n    {\n        var arr = [];\n        var ariaSelected = 'false';\n        if (opts.isEmpty) {\n            if (opts.showDaysInNextAndPreviousMonths) {\n                arr.push('is-outside-current-month');\n\n                if(!opts.enableSelectionDaysInNextAndPreviousMonths) {\n                    arr.push('is-selection-disabled');\n                }\n\n            } else {\n                return '<td class=\"is-empty\"></td>';\n            }\n        }\n        if (opts.isDisabled) {\n            arr.push('is-disabled');\n        }\n        if (opts.isToday) {\n            arr.push('is-today');\n        }\n        if (opts.isSelected) {\n            arr.push('is-selected');\n            ariaSelected = 'true';\n        }\n        if (opts.hasEvent) {\n            arr.push('has-event');\n        }\n        if (opts.isInRange) {\n            arr.push('is-inrange');\n        }\n        if (opts.isStartRange) {\n            arr.push('is-startrange');\n        }\n        if (opts.isEndRange) {\n            arr.push('is-endrange');\n        }\n        return '<td data-day=\"' + opts.day + '\" class=\"' + arr.join(' ') + '\" aria-selected=\"' + ariaSelected + '\">' +\n                 '<button class=\"pika-button pika-day\" type=\"button\" ' +\n                    'data-pika-year=\"' + opts.year + '\" data-pika-month=\"' + opts.month + '\" data-pika-day=\"' + opts.day + '\">' +\n                        opts.day +\n                 '</button>' +\n               '</td>';\n    },\n\n    renderWeek = function (d, m, y) {\n        // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified.\n        var onejan = new Date(y, 0, 1),\n            weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7);\n        return '<td class=\"pika-week\">' + weekNum + '</td>';\n    },\n\n    renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)\n    {\n        return '<tr class=\"pika-row' + (pickWholeWeek ? ' pick-whole-week' : '') + (isRowSelected ? ' is-selected' : '') + '\">' + (isRTL ? days.reverse() : days).join('') + '</tr>';\n    },\n\n    renderBody = function(rows)\n    {\n        return '<tbody>' + rows.join('') + '</tbody>';\n    },\n\n    renderHead = function(opts)\n    {\n        var i, arr = [];\n        if (opts.showWeekNumber) {\n            arr.push('<th></th>');\n        }\n        for (i = 0; i < 7; i++) {\n            arr.push('<th scope=\"col\"><abbr title=\"' + renderDayName(opts, i) + '\">' + renderDayName(opts, i, true) + '</abbr></th>');\n        }\n        return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';\n    },\n\n    renderTitle = function(instance, c, year, month, refYear, randId)\n    {\n        var i, j, arr,\n            opts = instance._o,\n            isMinYear = year === opts.minYear,\n            isMaxYear = year === opts.maxYear,\n            html = '<div id=\"' + randId + '\" class=\"pika-title\" role=\"heading\" aria-live=\"assertive\">',\n            monthHtml,\n            yearHtml,\n            prev = true,\n            next = true;\n\n        for (arr = [], i = 0; i < 12; i++) {\n            arr.push('<option value=\"' + (year === refYear ? i - c : 12 + i - c) + '\"' +\n                (i === month ? ' selected=\"selected\"': '') +\n                ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? 'disabled=\"disabled\"' : '') + '>' +\n                opts.i18n.months[i] + '</option>');\n        }\n\n        monthHtml = '<div class=\"pika-label\">' + opts.i18n.months[month] + '<select class=\"pika-select pika-select-month\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n        if (isArray(opts.yearRange)) {\n            i = opts.yearRange[0];\n            j = opts.yearRange[1] + 1;\n        } else {\n            i = year - opts.yearRange;\n            j = 1 + year + opts.yearRange;\n        }\n\n        for (arr = []; i < j && i <= opts.maxYear; i++) {\n            if (i >= opts.minYear) {\n                arr.push('<option value=\"' + i + '\"' + (i === year ? ' selected=\"selected\"': '') + '>' + (i) + '</option>');\n            }\n        }\n        yearHtml = '<div class=\"pika-label\">' + year + opts.yearSuffix + '<select class=\"pika-select pika-select-year\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n        if (opts.showMonthAfterYear) {\n            html += yearHtml + monthHtml;\n        } else {\n            html += monthHtml + yearHtml;\n        }\n\n        if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n            prev = false;\n        }\n\n        if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n            next = false;\n        }\n\n        if (c === 0) {\n            html += '<button class=\"pika-prev' + (prev ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.previousMonth + '</button>';\n        }\n        if (c === (instance._o.numberOfMonths - 1) ) {\n            html += '<button class=\"pika-next' + (next ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.nextMonth + '</button>';\n        }\n\n        return html += '</div>';\n    },\n\n    renderTable = function(opts, data, randId)\n    {\n        return '<table cellpadding=\"0\" cellspacing=\"0\" class=\"pika-table\" role=\"grid\" aria-labelledby=\"' + randId + '\">' + renderHead(opts) + renderBody(data) + '</table>';\n    },\n\n\n    /**\n     * Pikaday constructor\n     */\n    Pikaday = function(options)\n    {\n        var self = this,\n            opts = self.config(options);\n\n        self._onMouseDown = function(e)\n        {\n            if (!self._v) {\n                return;\n            }\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n\n            if (!hasClass(target, 'is-disabled')) {\n                if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {\n                    self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n                    if (opts.bound) {\n                        sto(function() {\n                            self.hide();\n                            if (opts.blurFieldOnSelect && opts.field) {\n                                opts.field.blur();\n                            }\n                        }, 100);\n                    }\n                }\n                else if (hasClass(target, 'pika-prev')) {\n                    self.prevMonth();\n                }\n                else if (hasClass(target, 'pika-next')) {\n                    self.nextMonth();\n                }\n            }\n            if (!hasClass(target, 'pika-select')) {\n                // if this is touch event prevent mouse events emulation\n                if (e.preventDefault) {\n                    e.preventDefault();\n                } else {\n                    e.returnValue = false;\n                    return false;\n                }\n            } else {\n                self._c = true;\n            }\n        };\n\n        self._onChange = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n            if (hasClass(target, 'pika-select-month')) {\n                self.gotoMonth(target.value);\n            }\n            else if (hasClass(target, 'pika-select-year')) {\n                self.gotoYear(target.value);\n            }\n        };\n\n        self._onKeyChange = function(e)\n        {\n            e = e || window.event;\n\n            if (self.isVisible()) {\n\n                switch(e.keyCode){\n                    case 13:\n                    case 27:\n                        if (opts.field) {\n                            opts.field.blur();\n                        }\n                        break;\n                    case 37:\n                        e.preventDefault();\n                        self.adjustDate('subtract', 1);\n                        break;\n                    case 38:\n                        self.adjustDate('subtract', 7);\n                        break;\n                    case 39:\n                        self.adjustDate('add', 1);\n                        break;\n                    case 40:\n                        self.adjustDate('add', 7);\n                        break;\n                }\n            }\n        };\n\n        self._onInputChange = function(e)\n        {\n            var date;\n\n            if (e.firedBy === self) {\n                return;\n            }\n            if (opts.parse) {\n                date = opts.parse(opts.field.value, opts.format);\n            } else if (hasMoment) {\n                date = moment(opts.field.value, opts.format, opts.formatStrict);\n                date = (date && date.isValid()) ? date.toDate() : null;\n            }\n            else {\n                date = new Date(Date.parse(opts.field.value));\n            }\n            if (isDate(date)) {\n              self.setDate(date);\n            }\n            if (!self._v) {\n                self.show();\n            }\n        };\n\n        self._onInputFocus = function()\n        {\n            self.show();\n        };\n\n        self._onInputClick = function()\n        {\n            self.show();\n        };\n\n        self._onInputBlur = function()\n        {\n            // IE allows pika div to gain focus; catch blur the input field\n            var pEl = document.activeElement;\n            do {\n                if (hasClass(pEl, 'pika-single')) {\n                    return;\n                }\n            }\n            while ((pEl = pEl.parentNode));\n\n            if (!self._c) {\n                self._b = sto(function() {\n                    self.hide();\n                }, 50);\n            }\n            self._c = false;\n        };\n\n        self._onClick = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement,\n                pEl = target;\n            if (!target) {\n                return;\n            }\n            if (!hasEventListeners && hasClass(target, 'pika-select')) {\n                if (!target.onchange) {\n                    target.setAttribute('onchange', 'return;');\n                    addEvent(target, 'change', self._onChange);\n                }\n            }\n            do {\n                if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n                    return;\n                }\n            }\n            while ((pEl = pEl.parentNode));\n            if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n                self.hide();\n            }\n        };\n\n        self.el = document.createElement('div');\n        self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n        addEvent(self.el, 'mousedown', self._onMouseDown, true);\n        addEvent(self.el, 'touchend', self._onMouseDown, true);\n        addEvent(self.el, 'change', self._onChange);\n\n        if (opts.keyboardInput) {\n            addEvent(document, 'keydown', self._onKeyChange);\n        }\n\n        if (opts.field) {\n            if (opts.container) {\n                opts.container.appendChild(self.el);\n            } else if (opts.bound) {\n                document.body.appendChild(self.el);\n            } else {\n                opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n            }\n            addEvent(opts.field, 'change', self._onInputChange);\n\n            if (!opts.defaultDate) {\n                if (hasMoment && opts.field.value) {\n                    opts.defaultDate = moment(opts.field.value, opts.format).toDate();\n                } else {\n                    opts.defaultDate = new Date(Date.parse(opts.field.value));\n                }\n                opts.setDefaultDate = true;\n            }\n        }\n\n        var defDate = opts.defaultDate;\n\n        if (isDate(defDate)) {\n            if (opts.setDefaultDate) {\n                self.setDate(defDate, true);\n            } else {\n                self.gotoDate(defDate);\n            }\n        } else {\n            self.gotoDate(new Date());\n        }\n\n        if (opts.bound) {\n            this.hide();\n            self.el.className += ' is-bound';\n            addEvent(opts.trigger, 'click', self._onInputClick);\n            addEvent(opts.trigger, 'focus', self._onInputFocus);\n            addEvent(opts.trigger, 'blur', self._onInputBlur);\n        } else {\n            this.show();\n        }\n    };\n\n\n    /**\n     * public Pikaday API\n     */\n    Pikaday.prototype = {\n\n\n        /**\n         * configure functionality\n         */\n        config: function(options)\n        {\n            if (!this._o) {\n                this._o = extend({}, defaults, true);\n            }\n\n            var opts = extend(this._o, options, true);\n\n            opts.isRTL = !!opts.isRTL;\n\n            opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n            opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n            opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n            opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n            opts.disableWeekends = !!opts.disableWeekends;\n\n            opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n            var nom = parseInt(opts.numberOfMonths, 10) || 1;\n            opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n            if (!isDate(opts.minDate)) {\n                opts.minDate = false;\n            }\n            if (!isDate(opts.maxDate)) {\n                opts.maxDate = false;\n            }\n            if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n                opts.maxDate = opts.minDate = false;\n            }\n            if (opts.minDate) {\n                this.setMinDate(opts.minDate);\n            }\n            if (opts.maxDate) {\n                this.setMaxDate(opts.maxDate);\n            }\n\n            if (isArray(opts.yearRange)) {\n                var fallback = new Date().getFullYear() - 10;\n                opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n                opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n            } else {\n                opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n                if (opts.yearRange > 100) {\n                    opts.yearRange = 100;\n                }\n            }\n\n            return opts;\n        },\n\n        /**\n         * return a formatted string of the current selection (using Moment.js if available)\n         */\n        toString: function(format)\n        {\n            format = format || this._o.format;\n            if (!isDate(this._d)) {\n                return '';\n            }\n            if (this._o.toString) {\n              return this._o.toString(this._d, format);\n            }\n            if (hasMoment) {\n              return moment(this._d).format(format);\n            }\n            return this._d.toDateString();\n        },\n\n        /**\n         * return a Moment.js object of the current selection (if available)\n         */\n        getMoment: function()\n        {\n            return hasMoment ? moment(this._d) : null;\n        },\n\n        /**\n         * set the current selection from a Moment.js object (if available)\n         */\n        setMoment: function(date, preventOnSelect)\n        {\n            if (hasMoment && moment.isMoment(date)) {\n                this.setDate(date.toDate(), preventOnSelect);\n            }\n        },\n\n        /**\n         * return a Date object of the current selection\n         */\n        getDate: function()\n        {\n            return isDate(this._d) ? new Date(this._d.getTime()) : null;\n        },\n\n        /**\n         * set the current selection\n         */\n        setDate: function(date, preventOnSelect)\n        {\n            if (!date) {\n                this._d = null;\n\n                if (this._o.field) {\n                    this._o.field.value = '';\n                    fireEvent(this._o.field, 'change', { firedBy: this });\n                }\n\n                return this.draw();\n            }\n            if (typeof date === 'string') {\n                date = new Date(Date.parse(date));\n            }\n            if (!isDate(date)) {\n                return;\n            }\n\n            var min = this._o.minDate,\n                max = this._o.maxDate;\n\n            if (isDate(min) && date < min) {\n                date = min;\n            } else if (isDate(max) && date > max) {\n                date = max;\n            }\n\n            this._d = new Date(date.getTime());\n            setToStartOfDay(this._d);\n            this.gotoDate(this._d);\n\n            if (this._o.field) {\n                this._o.field.value = this.toString();\n                fireEvent(this._o.field, 'change', { firedBy: this });\n            }\n            if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n                this._o.onSelect.call(this, this.getDate());\n            }\n        },\n\n        /**\n         * change view to a specific date\n         */\n        gotoDate: function(date)\n        {\n            var newCalendar = true;\n\n            if (!isDate(date)) {\n                return;\n            }\n\n            if (this.calendars) {\n                var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n                    lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n                    visibleDate = date.getTime();\n                // get the end of the month\n                lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n                lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n                newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n            }\n\n            if (newCalendar) {\n                this.calendars = [{\n                    month: date.getMonth(),\n                    year: date.getFullYear()\n                }];\n                if (this._o.mainCalendar === 'right') {\n                    this.calendars[0].month += 1 - this._o.numberOfMonths;\n                }\n            }\n\n            this.adjustCalendars();\n        },\n\n        adjustDate: function(sign, days) {\n\n            var day = this.getDate() || new Date();\n            var difference = parseInt(days)*24*60*60*1000;\n\n            var newDay;\n\n            if (sign === 'add') {\n                newDay = new Date(day.valueOf() + difference);\n            } else if (sign === 'subtract') {\n                newDay = new Date(day.valueOf() - difference);\n            }\n\n            this.setDate(newDay);\n        },\n\n        adjustCalendars: function() {\n            this.calendars[0] = adjustCalendar(this.calendars[0]);\n            for (var c = 1; c < this._o.numberOfMonths; c++) {\n                this.calendars[c] = adjustCalendar({\n                    month: this.calendars[0].month + c,\n                    year: this.calendars[0].year\n                });\n            }\n            this.draw();\n        },\n\n        gotoToday: function()\n        {\n            this.gotoDate(new Date());\n        },\n\n        /**\n         * change view to a specific month (zero-index, e.g. 0: January)\n         */\n        gotoMonth: function(month)\n        {\n            if (!isNaN(month)) {\n                this.calendars[0].month = parseInt(month, 10);\n                this.adjustCalendars();\n            }\n        },\n\n        nextMonth: function()\n        {\n            this.calendars[0].month++;\n            this.adjustCalendars();\n        },\n\n        prevMonth: function()\n        {\n            this.calendars[0].month--;\n            this.adjustCalendars();\n        },\n\n        /**\n         * change view to a specific full year (e.g. \"2012\")\n         */\n        gotoYear: function(year)\n        {\n            if (!isNaN(year)) {\n                this.calendars[0].year = parseInt(year, 10);\n                this.adjustCalendars();\n            }\n        },\n\n        /**\n         * change the minDate\n         */\n        setMinDate: function(value)\n        {\n            if(value instanceof Date) {\n                setToStartOfDay(value);\n                this._o.minDate = value;\n                this._o.minYear  = value.getFullYear();\n                this._o.minMonth = value.getMonth();\n            } else {\n                this._o.minDate = defaults.minDate;\n                this._o.minYear  = defaults.minYear;\n                this._o.minMonth = defaults.minMonth;\n                this._o.startRange = defaults.startRange;\n            }\n\n            this.draw();\n        },\n\n        /**\n         * change the maxDate\n         */\n        setMaxDate: function(value)\n        {\n            if(value instanceof Date) {\n                setToStartOfDay(value);\n                this._o.maxDate = value;\n                this._o.maxYear = value.getFullYear();\n                this._o.maxMonth = value.getMonth();\n            } else {\n                this._o.maxDate = defaults.maxDate;\n                this._o.maxYear = defaults.maxYear;\n                this._o.maxMonth = defaults.maxMonth;\n                this._o.endRange = defaults.endRange;\n            }\n\n            this.draw();\n        },\n\n        setStartRange: function(value)\n        {\n            this._o.startRange = value;\n        },\n\n        setEndRange: function(value)\n        {\n            this._o.endRange = value;\n        },\n\n        /**\n         * refresh the HTML\n         */\n        draw: function(force)\n        {\n            if (!this._v && !force) {\n                return;\n            }\n            var opts = this._o,\n                minYear = opts.minYear,\n                maxYear = opts.maxYear,\n                minMonth = opts.minMonth,\n                maxMonth = opts.maxMonth,\n                html = '',\n                randId;\n\n            if (this._y <= minYear) {\n                this._y = minYear;\n                if (!isNaN(minMonth) && this._m < minMonth) {\n                    this._m = minMonth;\n                }\n            }\n            if (this._y >= maxYear) {\n                this._y = maxYear;\n                if (!isNaN(maxMonth) && this._m > maxMonth) {\n                    this._m = maxMonth;\n                }\n            }\n\n            randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);\n\n            for (var c = 0; c < opts.numberOfMonths; c++) {\n                html += '<div class=\"pika-lendar\">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '</div>';\n            }\n\n            this.el.innerHTML = html;\n\n            if (opts.bound) {\n                if(opts.field.type !== 'hidden') {\n                    sto(function() {\n                        opts.trigger.focus();\n                    }, 1);\n                }\n            }\n\n            if (typeof this._o.onDraw === 'function') {\n                this._o.onDraw(this);\n            }\n\n            if (opts.bound) {\n                // let the screen reader user know to use arrow keys\n                opts.field.setAttribute('aria-label', opts.ariaLabel);\n            }\n        },\n\n        adjustPosition: function()\n        {\n            var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect, leftAligned, bottomAligned;\n\n            if (this._o.container) return;\n\n            this.el.style.position = 'absolute';\n\n            field = this._o.trigger;\n            pEl = field;\n            width = this.el.offsetWidth;\n            height = this.el.offsetHeight;\n            viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n            viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n            scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n            leftAligned = true;\n            bottomAligned = true;\n\n            if (typeof field.getBoundingClientRect === 'function') {\n                clientRect = field.getBoundingClientRect();\n                left = clientRect.left + window.pageXOffset;\n                top = clientRect.bottom + window.pageYOffset;\n            } else {\n                left = pEl.offsetLeft;\n                top  = pEl.offsetTop + pEl.offsetHeight;\n                while((pEl = pEl.offsetParent)) {\n                    left += pEl.offsetLeft;\n                    top  += pEl.offsetTop;\n                }\n            }\n\n            // default position is bottom & left\n            if ((this._o.reposition && left + width > viewportWidth) ||\n                (\n                    this._o.position.indexOf('right') > -1 &&\n                    left - width + field.offsetWidth > 0\n                )\n            ) {\n                left = left - width + field.offsetWidth;\n                leftAligned = false;\n            }\n            if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n                (\n                    this._o.position.indexOf('top') > -1 &&\n                    top - height - field.offsetHeight > 0\n                )\n            ) {\n                top = top - height - field.offsetHeight;\n                bottomAligned = false;\n            }\n\n            this.el.style.left = left + 'px';\n            this.el.style.top = top + 'px';\n\n            addClass(this.el, leftAligned ? 'left-aligned' : 'right-aligned');\n            addClass(this.el, bottomAligned ? 'bottom-aligned' : 'top-aligned');\n            removeClass(this.el, !leftAligned ? 'left-aligned' : 'right-aligned');\n            removeClass(this.el, !bottomAligned ? 'bottom-aligned' : 'top-aligned');\n        },\n\n        /**\n         * render HTML for a particular month\n         */\n        render: function(year, month, randId)\n        {\n            var opts   = this._o,\n                now    = new Date(),\n                days   = getDaysInMonth(year, month),\n                before = new Date(year, month, 1).getDay(),\n                data   = [],\n                row    = [];\n            setToStartOfDay(now);\n            if (opts.firstDay > 0) {\n                before -= opts.firstDay;\n                if (before < 0) {\n                    before += 7;\n                }\n            }\n            var previousMonth = month === 0 ? 11 : month - 1,\n                nextMonth = month === 11 ? 0 : month + 1,\n                yearOfPreviousMonth = month === 0 ? year - 1 : year,\n                yearOfNextMonth = month === 11 ? year + 1 : year,\n                daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n            var cells = days + before,\n                after = cells;\n            while(after > 7) {\n                after -= 7;\n            }\n            cells += 7 - after;\n            var isWeekSelected = false;\n            for (var i = 0, r = 0; i < cells; i++)\n            {\n                var day = new Date(year, month, 1 + (i - before)),\n                    isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n                    isToday = compareDates(day, now),\n                    hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n                    isEmpty = i < before || i >= (days + before),\n                    dayNumber = 1 + (i - before),\n                    monthNumber = month,\n                    yearNumber = year,\n                    isStartRange = opts.startRange && compareDates(opts.startRange, day),\n                    isEndRange = opts.endRange && compareDates(opts.endRange, day),\n                    isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n                    isDisabled = (opts.minDate && day < opts.minDate) ||\n                                 (opts.maxDate && day > opts.maxDate) ||\n                                 (opts.disableWeekends && isWeekend(day)) ||\n                                 (opts.disableDayFn && opts.disableDayFn(day));\n\n                if (isEmpty) {\n                    if (i < before) {\n                        dayNumber = daysInPreviousMonth + dayNumber;\n                        monthNumber = previousMonth;\n                        yearNumber = yearOfPreviousMonth;\n                    } else {\n                        dayNumber = dayNumber - days;\n                        monthNumber = nextMonth;\n                        yearNumber = yearOfNextMonth;\n                    }\n                }\n\n                var dayConfig = {\n                        day: dayNumber,\n                        month: monthNumber,\n                        year: yearNumber,\n                        hasEvent: hasEvent,\n                        isSelected: isSelected,\n                        isToday: isToday,\n                        isDisabled: isDisabled,\n                        isEmpty: isEmpty,\n                        isStartRange: isStartRange,\n                        isEndRange: isEndRange,\n                        isInRange: isInRange,\n                        showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,\n                        enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths\n                    };\n\n                if (opts.pickWholeWeek && isSelected) {\n                    isWeekSelected = true;\n                }\n\n                row.push(renderDay(dayConfig));\n\n                if (++r === 7) {\n                    if (opts.showWeekNumber) {\n                        row.unshift(renderWeek(i - before, month, year));\n                    }\n                    data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));\n                    row = [];\n                    r = 0;\n                    isWeekSelected = false;\n                }\n            }\n            return renderTable(opts, data, randId);\n        },\n\n        isVisible: function()\n        {\n            return this._v;\n        },\n\n        show: function()\n        {\n            if (!this.isVisible()) {\n                this._v = true;\n                this.draw();\n                removeClass(this.el, 'is-hidden');\n                if (this._o.bound) {\n                    addEvent(document, 'click', this._onClick);\n                    this.adjustPosition();\n                }\n                if (typeof this._o.onOpen === 'function') {\n                    this._o.onOpen.call(this);\n                }\n            }\n        },\n\n        hide: function()\n        {\n            var v = this._v;\n            if (v !== false) {\n                if (this._o.bound) {\n                    removeEvent(document, 'click', this._onClick);\n                }\n                this.el.style.position = 'static'; // reset\n                this.el.style.left = 'auto';\n                this.el.style.top = 'auto';\n                addClass(this.el, 'is-hidden');\n                this._v = false;\n                if (v !== undefined && typeof this._o.onClose === 'function') {\n                    this._o.onClose.call(this);\n                }\n            }\n        },\n\n        /**\n         * GAME OVER\n         */\n        destroy: function()\n        {\n            var opts = this._o;\n\n            this.hide();\n            removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n            removeEvent(this.el, 'touchend', this._onMouseDown, true);\n            removeEvent(this.el, 'change', this._onChange);\n            if (opts.keyboardInput) {\n                removeEvent(document, 'keydown', this._onKeyChange);\n            }\n            if (opts.field) {\n                removeEvent(opts.field, 'change', this._onInputChange);\n                if (opts.bound) {\n                    removeEvent(opts.trigger, 'click', this._onInputClick);\n                    removeEvent(opts.trigger, 'focus', this._onInputFocus);\n                    removeEvent(opts.trigger, 'blur', this._onInputBlur);\n                }\n            }\n            if (this.el.parentNode) {\n                this.el.parentNode.removeChild(this.el);\n            }\n        }\n\n    };\n\n    return Pikaday;\n}));\n", "(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()", ";(function (globalObject) {\r\n  'use strict';\r\n\r\n/*\r\n *      bignumber.js v8.0.2\r\n *      A JavaScript library for arbitrary-precision arithmetic.\r\n *      https://github.com/MikeMcl/bignumber.js\r\n *      Copyright (c) 2019 Michael Mclaughlin <M8ch88l@gmail.com>\r\n *      MIT Licensed.\r\n *\r\n *      BigNumber.prototype methods     |  BigNumber methods\r\n *                                      |\r\n *      absoluteValue            abs    |  clone\r\n *      comparedTo                      |  config               set\r\n *      decimalPlaces            dp     |      DECIMAL_PLACES\r\n *      dividedBy                div    |      ROUNDING_MODE\r\n *      dividedToIntegerBy       idiv   |      EXPONENTIAL_AT\r\n *      exponentiatedBy          pow    |      RANGE\r\n *      integerValue                    |      CRYPTO\r\n *      isEqualTo                eq     |      MODULO_MODE\r\n *      isFinite                        |      POW_PRECISION\r\n *      isGreaterThan            gt     |      FORMAT\r\n *      isGreaterThanOrEqualTo   gte    |      ALPHABET\r\n *      isInteger                       |  isBigNumber\r\n *      isLessThan               lt     |  maximum              max\r\n *      isLessThanOrEqualTo      lte    |  minimum              min\r\n *      isNaN                           |  random\r\n *      isNegative                      |  sum\r\n *      isPositive                      |\r\n *      isZero                          |\r\n *      minus                           |\r\n *      modulo                   mod    |\r\n *      multipliedBy             times  |\r\n *      negated                         |\r\n *      plus                            |\r\n *      precision                sd     |\r\n *      shiftedBy                       |\r\n *      squareRoot               sqrt   |\r\n *      toExponential                   |\r\n *      toFixed                         |\r\n *      toFormat                        |\r\n *      toFraction                      |\r\n *      toJSON                          |\r\n *      toNumber                        |\r\n *      toPrecision                     |\r\n *      toString                        |\r\n *      valueOf                         |\r\n *\r\n */\r\n\r\n\r\n  var BigNumber,\r\n    isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n\r\n    mathceil = Math.ceil,\r\n    mathfloor = Math.floor,\r\n\r\n    bignumberError = '[BigNumber Error] ',\r\n    tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n    BASE = 1e14,\r\n    LOG_BASE = 14,\r\n    MAX_SAFE_INTEGER = 0x1fffffffffffff,         // 2^53 - 1\r\n    // MAX_INT32 = 0x7fffffff,                   // 2^31 - 1\r\n    POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n    SQRT_BASE = 1e7,\r\n\r\n    // EDITABLE\r\n    // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n    // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n    MAX = 1E9;                                   // 0 to MAX_INT32\r\n\r\n\r\n  /*\r\n   * Create and return a BigNumber constructor.\r\n   */\r\n  function clone(configObject) {\r\n    var div, convertBase, parseNumeric,\r\n      P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n      ONE = new BigNumber(1),\r\n\r\n\r\n      //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n      // The default values below must be integers within the inclusive ranges stated.\r\n      // The values can also be changed at run-time using BigNumber.set.\r\n\r\n      // The maximum number of decimal places for operations involving division.\r\n      DECIMAL_PLACES = 20,                     // 0 to MAX\r\n\r\n      // The rounding mode used when rounding to the above decimal places, and when using\r\n      // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n      // UP         0 Away from zero.\r\n      // DOWN       1 Towards zero.\r\n      // CEIL       2 Towards +Infinity.\r\n      // FLOOR      3 Towards -Infinity.\r\n      // HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n      // HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n      // HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n      // HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n      // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n      ROUNDING_MODE = 4,                       // 0 to 8\r\n\r\n      // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n      // The exponent value at and beneath which toString returns exponential notation.\r\n      // Number type: -7\r\n      TO_EXP_NEG = -7,                         // 0 to -MAX\r\n\r\n      // The exponent value at and above which toString returns exponential notation.\r\n      // Number type: 21\r\n      TO_EXP_POS = 21,                         // 0 to MAX\r\n\r\n      // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n      // The minimum exponent value, beneath which underflow to zero occurs.\r\n      // Number type: -324  (5e-324)\r\n      MIN_EXP = -1e7,                          // -1 to -MAX\r\n\r\n      // The maximum exponent value, above which overflow to Infinity occurs.\r\n      // Number type:  308  (1.7976931348623157e+308)\r\n      // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n      MAX_EXP = 1e7,                           // 1 to MAX\r\n\r\n      // Whether to use cryptographically-secure random number generation, if available.\r\n      CRYPTO = false,                          // true or false\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.\r\n      //             This modulo mode is commonly known as 'truncated division' and is\r\n      //             equivalent to (a % n) in JavaScript.\r\n      // FLOOR     3 The remainder has the same sign as the divisor (Python %).\r\n      // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n      // EUCLID    9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n      //             The remainder is always positive.\r\n      //\r\n      // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n      // modes are commonly used for the modulus operation.\r\n      // Although the other rounding modes can also be used, they may not give useful results.\r\n      MODULO_MODE = 1,                         // 0 to 9\r\n\r\n      // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n      // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n      POW_PRECISION = 0,                    // 0 to MAX\r\n\r\n      // The format specification used by the BigNumber.prototype.toFormat method.\r\n      FORMAT = {\r\n        prefix: '',\r\n        groupSize: 3,\r\n        secondaryGroupSize: 0,\r\n        groupSeparator: ',',\r\n        decimalSeparator: '.',\r\n        fractionGroupSize: 0,\r\n        fractionGroupSeparator: '\\xA0',      // non-breaking space\r\n        suffix: ''\r\n      },\r\n\r\n      // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n      // '-', '.', whitespace, or repeated character.\r\n      // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n      ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz';\r\n\r\n\r\n    //------------------------------------------------------------------------------------------\r\n\r\n\r\n    // CONSTRUCTOR\r\n\r\n\r\n    /*\r\n     * The BigNumber constructor and exported function.\r\n     * Create and return a new instance of a BigNumber object.\r\n     *\r\n     * n {number|string|BigNumber} A numeric value.\r\n     * [b] {number} The base of n. Integer, 2 to ALPHABET.length inclusive.\r\n     */\r\n    function BigNumber(n, b) {\r\n      var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n        x = this;\r\n\r\n      // Enable constructor usage without new.\r\n      if (!(x instanceof BigNumber)) {\r\n\r\n        // Don't throw on constructor call without new (#81).\r\n        // '[BigNumber Error] Constructor call without new: {n}'\r\n        //throw Error(bignumberError + ' Constructor call without new: ' + n);\r\n        return new BigNumber(n, b);\r\n      }\r\n\r\n      if (b == null) {\r\n\r\n        // Duplicate.\r\n        if (n instanceof BigNumber) {\r\n          x.s = n.s;\r\n          x.e = n.e;\r\n          x.c = (n = n.c) ? n.slice() : n;\r\n          return;\r\n        }\r\n\r\n        isNum = typeof n == 'number';\r\n\r\n        if (isNum && n * 0 == 0) {\r\n\r\n          // Use `1 / n` to handle minus zero also.\r\n          x.s = 1 / n < 0 ? (n = -n, -1) : 1;\r\n\r\n          // Faster path for integers.\r\n          if (n === ~~n) {\r\n            for (e = 0, i = n; i >= 10; i /= 10, e++);\r\n            x.e = e;\r\n            x.c = [n];\r\n            return;\r\n          }\r\n\r\n          str = String(n);\r\n        } else {\r\n          str = String(n);\r\n          if (!isNumeric.test(str)) return parseNumeric(x, str, isNum);\r\n          x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n        }\r\n\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      } else {\r\n\r\n        // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n        intCheck(b, 2, ALPHABET.length, 'Base');\r\n        str = String(n);\r\n\r\n        // Allow exponential notation to be used with base 10 argument, while\r\n        // also rounding to DECIMAL_PLACES as with other bases.\r\n        if (b == 10) {\r\n          x = new BigNumber(n instanceof BigNumber ? n : str);\r\n          return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n        }\r\n\r\n        isNum = typeof n == 'number';\r\n\r\n        if (isNum) {\r\n\r\n          // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n          if (n * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n          x.s = 1 / n < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n          // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n          if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n            throw Error\r\n             (tooManyDigits + n);\r\n          }\r\n\r\n          // Prevent later check for length on converted number.\r\n          isNum = false;\r\n        } else {\r\n          x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n        }\r\n\r\n        alphabet = ALPHABET.slice(0, b);\r\n        e = i = 0;\r\n\r\n        // Check that str is a valid base b number.\r\n        // Don't use RegExp so alphabet can contain special characters.\r\n        for (len = str.length; i < len; i++) {\r\n          if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n            if (c == '.') {\r\n\r\n              // If '.' is not the first character and it has not be found before.\r\n              if (i > e) {\r\n                e = len;\r\n                continue;\r\n              }\r\n            } else if (!caseChanged) {\r\n\r\n              // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n              if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n                  str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n                caseChanged = true;\r\n                i = -1;\r\n                e = 0;\r\n                continue;\r\n              }\r\n            }\r\n\r\n            return parseNumeric(x, String(n), isNum, b);\r\n          }\r\n        }\r\n\r\n        str = convertBase(str, b, 10, x.s);\r\n\r\n        // Decimal point?\r\n        if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n        else 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) === 48;);\r\n\r\n      str = str.slice(i, ++len);\r\n\r\n      if (str) {\r\n        len -= i;\r\n\r\n        // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n        if (isNum && BigNumber.DEBUG &&\r\n          len > 15 && (n > MAX_SAFE_INTEGER || n !== mathfloor(n))) {\r\n            throw Error\r\n             (tooManyDigits + (x.s * n));\r\n        }\r\n\r\n        e = e - i - 1;\r\n\r\n         // Overflow?\r\n        if (e > MAX_EXP) {\r\n\r\n          // Infinity.\r\n          x.c = x.e = null;\r\n\r\n        // Underflow?\r\n        } else if (e < MIN_EXP) {\r\n\r\n          // Zero.\r\n          x.c = [x.e = 0];\r\n        } else {\r\n          x.e = e;\r\n          x.c = [];\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 element of the coefficient 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.c.push(+str.slice(0, i));\r\n\r\n            for (len -= LOG_BASE; i < len;) {\r\n              x.c.push(+str.slice(i, i += LOG_BASE));\r\n            }\r\n\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.c.push(+str);\r\n        }\r\n      } else {\r\n\r\n        // Zero.\r\n        x.c = [x.e = 0];\r\n      }\r\n    }\r\n\r\n\r\n    // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n    BigNumber.clone = clone;\r\n\r\n    BigNumber.ROUND_UP = 0;\r\n    BigNumber.ROUND_DOWN = 1;\r\n    BigNumber.ROUND_CEIL = 2;\r\n    BigNumber.ROUND_FLOOR = 3;\r\n    BigNumber.ROUND_HALF_UP = 4;\r\n    BigNumber.ROUND_HALF_DOWN = 5;\r\n    BigNumber.ROUND_HALF_EVEN = 6;\r\n    BigNumber.ROUND_HALF_CEIL = 7;\r\n    BigNumber.ROUND_HALF_FLOOR = 8;\r\n    BigNumber.EUCLID = 9;\r\n\r\n\r\n    /*\r\n     * Configure infrequently-changing library-wide settings.\r\n     *\r\n     * Accept an object with the following optional properties (if the value of a property is\r\n     * a number, it must be an integer within the inclusive range stated):\r\n     *\r\n     *   DECIMAL_PLACES   {number}           0 to MAX\r\n     *   ROUNDING_MODE    {number}           0 to 8\r\n     *   EXPONENTIAL_AT   {number|number[]}  -MAX to MAX  or  [-MAX to 0, 0 to MAX]\r\n     *   RANGE            {number|number[]}  -MAX to MAX (not zero)  or  [-MAX to -1, 1 to MAX]\r\n     *   CRYPTO           {boolean}          true or false\r\n     *   MODULO_MODE      {number}           0 to 9\r\n     *   POW_PRECISION       {number}           0 to MAX\r\n     *   ALPHABET         {string}           A string of two or more unique characters which does\r\n     *                                       not contain '.'.\r\n     *   FORMAT           {object}           An object with some of the following properties:\r\n     *     prefix                 {string}\r\n     *     groupSize              {number}\r\n     *     secondaryGroupSize     {number}\r\n     *     groupSeparator         {string}\r\n     *     decimalSeparator       {string}\r\n     *     fractionGroupSize      {number}\r\n     *     fractionGroupSeparator {string}\r\n     *     suffix                 {string}\r\n     *\r\n     * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n     *\r\n     * E.g.\r\n     * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n     *\r\n     * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n     *\r\n     * Return an object with the properties current values.\r\n     */\r\n    BigNumber.config = BigNumber.set = function (obj) {\r\n      var p, v;\r\n\r\n      if (obj != null) {\r\n\r\n        if (typeof obj == 'object') {\r\n\r\n          // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n          // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n          if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n            v = obj[p];\r\n            intCheck(v, 0, MAX, p);\r\n            DECIMAL_PLACES = v;\r\n          }\r\n\r\n          // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n          // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n          if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n            v = obj[p];\r\n            intCheck(v, 0, 8, p);\r\n            ROUNDING_MODE = v;\r\n          }\r\n\r\n          // EXPONENTIAL_AT {number|number[]}\r\n          // Integer, -MAX to MAX inclusive or\r\n          // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n          // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n          if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n            v = obj[p];\r\n            if (v && v.pop) {\r\n              intCheck(v[0], -MAX, 0, p);\r\n              intCheck(v[1], 0, MAX, p);\r\n              TO_EXP_NEG = v[0];\r\n              TO_EXP_POS = v[1];\r\n            } else {\r\n              intCheck(v, -MAX, MAX, p);\r\n              TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n            }\r\n          }\r\n\r\n          // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n          // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n          // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n          if (obj.hasOwnProperty(p = 'RANGE')) {\r\n            v = obj[p];\r\n            if (v && v.pop) {\r\n              intCheck(v[0], -MAX, -1, p);\r\n              intCheck(v[1], 1, MAX, p);\r\n              MIN_EXP = v[0];\r\n              MAX_EXP = v[1];\r\n            } else {\r\n              intCheck(v, -MAX, MAX, p);\r\n              if (v) {\r\n                MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n              } else {\r\n                throw Error\r\n                 (bignumberError + p + ' cannot be zero: ' + v);\r\n              }\r\n            }\r\n          }\r\n\r\n          // CRYPTO {boolean} true or false.\r\n          // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n          // '[BigNumber Error] crypto unavailable'\r\n          if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n            v = obj[p];\r\n            if (v === !!v) {\r\n              if (v) {\r\n                if (typeof crypto != 'undefined' && crypto &&\r\n                 (crypto.getRandomValues || crypto.randomBytes)) {\r\n                  CRYPTO = v;\r\n                } else {\r\n                  CRYPTO = !v;\r\n                  throw Error\r\n                   (bignumberError + 'crypto unavailable');\r\n                }\r\n              } else {\r\n                CRYPTO = v;\r\n              }\r\n            } else {\r\n              throw Error\r\n               (bignumberError + p + ' not true or false: ' + v);\r\n            }\r\n          }\r\n\r\n          // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n          // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n          if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n            v = obj[p];\r\n            intCheck(v, 0, 9, p);\r\n            MODULO_MODE = v;\r\n          }\r\n\r\n          // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n          // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n          if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n            v = obj[p];\r\n            intCheck(v, 0, MAX, p);\r\n            POW_PRECISION = v;\r\n          }\r\n\r\n          // FORMAT {object}\r\n          // '[BigNumber Error] FORMAT not an object: {v}'\r\n          if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n            v = obj[p];\r\n            if (typeof v == 'object') FORMAT = v;\r\n            else throw Error\r\n             (bignumberError + p + ' not an object: ' + v);\r\n          }\r\n\r\n          // ALPHABET {string}\r\n          // '[BigNumber Error] ALPHABET invalid: {v}'\r\n          if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n            v = obj[p];\r\n\r\n            // Disallow if only one character,\r\n            // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n            if (typeof v == 'string' && !/^.$|[+-.\\s]|(.).*\\1/.test(v)) {\r\n              ALPHABET = v;\r\n            } else {\r\n              throw Error\r\n               (bignumberError + p + ' invalid: ' + v);\r\n            }\r\n          }\r\n\r\n        } else {\r\n\r\n          // '[BigNumber Error] Object expected: {v}'\r\n          throw Error\r\n           (bignumberError + 'Object expected: ' + obj);\r\n        }\r\n      }\r\n\r\n      return {\r\n        DECIMAL_PLACES: DECIMAL_PLACES,\r\n        ROUNDING_MODE: ROUNDING_MODE,\r\n        EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n        RANGE: [MIN_EXP, MAX_EXP],\r\n        CRYPTO: CRYPTO,\r\n        MODULO_MODE: MODULO_MODE,\r\n        POW_PRECISION: POW_PRECISION,\r\n        FORMAT: FORMAT,\r\n        ALPHABET: ALPHABET\r\n      };\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if v is a BigNumber instance, otherwise return false.\r\n     *\r\n     * v {any}\r\n     */\r\n    BigNumber.isBigNumber = function (v) {\r\n      return v instanceof BigNumber || v && v._isBigNumber === true || false;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the maximum of the arguments.\r\n     *\r\n     * arguments {number|string|BigNumber}\r\n     */\r\n    BigNumber.maximum = BigNumber.max = function () {\r\n      return maxOrMin(arguments, P.lt);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the minimum of the arguments.\r\n     *\r\n     * arguments {number|string|BigNumber}\r\n     */\r\n    BigNumber.minimum = BigNumber.min = function () {\r\n      return maxOrMin(arguments, P.gt);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n     * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n     * zeros are produced).\r\n     *\r\n     * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n     * '[BigNumber Error] crypto unavailable'\r\n     */\r\n    BigNumber.random = (function () {\r\n      var pow2_53 = 0x20000000000000;\r\n\r\n      // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n      // Check if Math.random() produces more than 32 bits of randomness.\r\n      // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n      // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n      var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n       ? function () { return mathfloor(Math.random() * pow2_53); }\r\n       : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n         (Math.random() * 0x800000 | 0); };\r\n\r\n      return function (dp) {\r\n        var a, b, e, k, v,\r\n          i = 0,\r\n          c = [],\r\n          rand = new BigNumber(ONE);\r\n\r\n        if (dp == null) dp = DECIMAL_PLACES;\r\n        else intCheck(dp, 0, MAX);\r\n\r\n        k = mathceil(dp / LOG_BASE);\r\n\r\n        if (CRYPTO) {\r\n\r\n          // Browsers supporting crypto.getRandomValues.\r\n          if (crypto.getRandomValues) {\r\n\r\n            a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n            for (; i < k;) {\r\n\r\n              // 53 bits:\r\n              // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n              // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n              // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n              //                                     11111 11111111 11111111\r\n              // 0x20000 is 2^21.\r\n              v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n              // Rejection sampling:\r\n              // 0 <= v < 9007199254740992\r\n              // Probability that v >= 9e15, is\r\n              // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n              if (v >= 9e15) {\r\n                b = crypto.getRandomValues(new Uint32Array(2));\r\n                a[i] = b[0];\r\n                a[i + 1] = b[1];\r\n              } else {\r\n\r\n                // 0 <= v <= 8999999999999999\r\n                // 0 <= (v % 1e14) <= 99999999999999\r\n                c.push(v % 1e14);\r\n                i += 2;\r\n              }\r\n            }\r\n            i = k / 2;\r\n\r\n          // Node.js supporting crypto.randomBytes.\r\n          } else if (crypto.randomBytes) {\r\n\r\n            // buffer\r\n            a = crypto.randomBytes(k *= 7);\r\n\r\n            for (; i < k;) {\r\n\r\n              // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n              // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n              // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n              // 0 <= v < 9007199254740992\r\n              v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n                 (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n                 (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n              if (v >= 9e15) {\r\n                crypto.randomBytes(7).copy(a, i);\r\n              } else {\r\n\r\n                // 0 <= (v % 1e14) <= 99999999999999\r\n                c.push(v % 1e14);\r\n                i += 7;\r\n              }\r\n            }\r\n            i = k / 7;\r\n          } else {\r\n            CRYPTO = false;\r\n            throw Error\r\n             (bignumberError + 'crypto unavailable');\r\n          }\r\n        }\r\n\r\n        // Use Math.random.\r\n        if (!CRYPTO) {\r\n\r\n          for (; i < k;) {\r\n            v = random53bitInt();\r\n            if (v < 9e15) c[i++] = v % 1e14;\r\n          }\r\n        }\r\n\r\n        k = c[--i];\r\n        dp %= LOG_BASE;\r\n\r\n        // Convert trailing digits to zeros according to dp.\r\n        if (k && dp) {\r\n          v = POWS_TEN[LOG_BASE - dp];\r\n          c[i] = mathfloor(k / v) * v;\r\n        }\r\n\r\n        // Remove trailing elements which are zero.\r\n        for (; c[i] === 0; c.pop(), i--);\r\n\r\n        // Zero?\r\n        if (i < 0) {\r\n          c = [e = 0];\r\n        } else {\r\n\r\n          // Remove leading elements which are zero and adjust exponent accordingly.\r\n          for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n          // Count the digits of the first element of c to determine leading zeros, and...\r\n          for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n          // adjust the exponent accordingly.\r\n          if (i < LOG_BASE) e -= LOG_BASE - i;\r\n        }\r\n\r\n        rand.e = e;\r\n        rand.c = c;\r\n        return rand;\r\n      };\r\n    })();\r\n\r\n\r\n    /*\r\n     * Return a BigNumber whose value is the sum of the arguments.\r\n     *\r\n     * arguments {number|string|BigNumber}\r\n     */\r\n    BigNumber.sum = function () {\r\n      var i = 1,\r\n        args = arguments,\r\n        sum = new BigNumber(args[0]);\r\n      for (; i < args.length;) sum = sum.plus(args[i++]);\r\n      return sum;\r\n    };\r\n\r\n\r\n    // PRIVATE FUNCTIONS\r\n\r\n\r\n    // Called by BigNumber and BigNumber.prototype.toString.\r\n    convertBase = (function () {\r\n      var decimal = '0123456789';\r\n\r\n      /*\r\n       * Convert string of baseIn to an array of numbers of baseOut.\r\n       * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n       * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n       */\r\n      function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n        var j,\r\n          arr = [0],\r\n          arrL,\r\n          i = 0,\r\n          len = str.length;\r\n\r\n        for (; i < len;) {\r\n          for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n          arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n          for (j = 0; j < arr.length; j++) {\r\n\r\n            if (arr[j] > baseOut - 1) {\r\n              if (arr[j + 1] == null) 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      // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n      // If the caller is toString, we are converting from base 10 to baseOut.\r\n      // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n      return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n        var alphabet, d, e, k, r, x, xc, y,\r\n          i = str.indexOf('.'),\r\n          dp = DECIMAL_PLACES,\r\n          rm = ROUNDING_MODE;\r\n\r\n        // Non-integer.\r\n        if (i >= 0) {\r\n          k = POW_PRECISION;\r\n\r\n          // Unlimited precision.\r\n          POW_PRECISION = 0;\r\n          str = str.replace('.', '');\r\n          y = new BigNumber(baseIn);\r\n          x = y.pow(str.length - i);\r\n          POW_PRECISION = k;\r\n\r\n          // Convert str as if an integer, then restore the fraction part by dividing the\r\n          // result by its base raised to a power.\r\n\r\n          y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n           10, baseOut, decimal);\r\n          y.e = y.c.length;\r\n        }\r\n\r\n        // Convert the number as integer.\r\n\r\n        xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n         ? (alphabet = ALPHABET, decimal)\r\n         : (alphabet = decimal, ALPHABET));\r\n\r\n        // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n        e = k = xc.length;\r\n\r\n        // Remove trailing zeros.\r\n        for (; xc[--k] == 0; xc.pop());\r\n\r\n        // Zero?\r\n        if (!xc[0]) return alphabet.charAt(0);\r\n\r\n        // Does str represent an integer? If so, no need for the division.\r\n        if (i < 0) {\r\n          --e;\r\n        } else {\r\n          x.c = xc;\r\n          x.e = e;\r\n\r\n          // The sign is needed for correct rounding.\r\n          x.s = sign;\r\n          x = div(x, y, dp, rm, baseOut);\r\n          xc = x.c;\r\n          r = x.r;\r\n          e = x.e;\r\n        }\r\n\r\n        // xc now represents str converted to baseOut.\r\n\r\n        // THe index of the rounding digit.\r\n        d = e + dp + 1;\r\n\r\n        // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n        i = xc[d];\r\n\r\n        // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n        k = baseOut / 2;\r\n        r = r || d < 0 || xc[d + 1] != null;\r\n\r\n        r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n              : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n               rm == (x.s < 0 ? 8 : 7));\r\n\r\n        // If the index of the rounding digit is not greater than zero, or xc represents\r\n        // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n        // such as 0.00001.\r\n        if (d < 1 || !xc[0]) {\r\n\r\n          // 1^-dp or 0\r\n          str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n        } else {\r\n\r\n          // Truncate xc to the required number of decimal places.\r\n          xc.length = d;\r\n\r\n          // Round up?\r\n          if (r) {\r\n\r\n            // Rounding up may mean the previous digit has to be rounded up and so on.\r\n            for (--baseOut; ++xc[--d] > baseOut;) {\r\n              xc[d] = 0;\r\n\r\n              if (!d) {\r\n                ++e;\r\n                xc = [1].concat(xc);\r\n              }\r\n            }\r\n          }\r\n\r\n          // Determine trailing zeros.\r\n          for (k = xc.length; !xc[--k];);\r\n\r\n          // E.g. [4, 11, 15] becomes 4bf.\r\n          for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n          // Add leading zeros, decimal point and trailing zeros as required.\r\n          str = toFixedPoint(str, e, alphabet.charAt(0));\r\n        }\r\n\r\n        // The caller will add the sign.\r\n        return str;\r\n      };\r\n    })();\r\n\r\n\r\n    // Perform division in the specified base. Called by div and convertBase.\r\n    div = (function () {\r\n\r\n      // Assume non-zero x and k.\r\n      function multiply(x, k, base) {\r\n        var m, temp, xlo, xhi,\r\n          carry = 0,\r\n          i = x.length,\r\n          klo = k % SQRT_BASE,\r\n          khi = k / SQRT_BASE | 0;\r\n\r\n        for (x = x.slice(); i--;) {\r\n          xlo = x[i] % SQRT_BASE;\r\n          xhi = x[i] / SQRT_BASE | 0;\r\n          m = khi * xlo + xhi * klo;\r\n          temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n          carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n          x[i] = temp % base;\r\n        }\r\n\r\n        if (carry) x = [carry].concat(x);\r\n\r\n        return x;\r\n      }\r\n\r\n      function compare(a, b, aL, bL) {\r\n        var i, cmp;\r\n\r\n        if (aL != bL) {\r\n          cmp = aL > bL ? 1 : -1;\r\n        } else {\r\n\r\n          for (i = cmp = 0; i < aL; i++) {\r\n\r\n            if (a[i] != b[i]) {\r\n              cmp = a[i] > b[i] ? 1 : -1;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n\r\n        return cmp;\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.splice(0, 1));\r\n      }\r\n\r\n      // x: dividend, y: divisor.\r\n      return function (x, y, dp, rm, base) {\r\n        var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n          yL, yz,\r\n          s = x.s == y.s ? 1 : -1,\r\n          xc = x.c,\r\n          yc = y.c;\r\n\r\n        // Either NaN, Infinity or 0?\r\n        if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n          return new BigNumber(\r\n\r\n           // Return NaN if either NaN, or both Infinity or 0.\r\n           !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n            // Return \u00B10 if x is \u00B10 or y is \u00B1Infinity, or return \u00B1Infinity as y is \u00B10.\r\n            xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n         );\r\n        }\r\n\r\n        q = new BigNumber(s);\r\n        qc = q.c = [];\r\n        e = x.e - y.e;\r\n        s = dp + e + 1;\r\n\r\n        if (!base) {\r\n          base = BASE;\r\n          e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n          s = s / LOG_BASE | 0;\r\n        }\r\n\r\n        // Result exponent may be one less then the current value of e.\r\n        // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n        for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n        if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n        if (s < 0) {\r\n          qc.push(1);\r\n          more = true;\r\n        } else {\r\n          xL = xc.length;\r\n          yL = yc.length;\r\n          i = 0;\r\n          s += 2;\r\n\r\n          // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n          n = mathfloor(base / (yc[0] + 1));\r\n\r\n          // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n          // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n          if (n > 1) {\r\n            yc = multiply(yc, n, base);\r\n            xc = multiply(xc, n, base);\r\n            yL = yc.length;\r\n            xL = xc.length;\r\n          }\r\n\r\n          xi = yL;\r\n          rem = xc.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          yz = yc.slice();\r\n          yz = [0].concat(yz);\r\n          yc0 = yc[0];\r\n          if (yc[1] >= base / 2) yc0++;\r\n          // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n          // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n          do {\r\n            n = 0;\r\n\r\n            // Compare divisor and remainder.\r\n            cmp = compare(yc, rem, yL, remL);\r\n\r\n            // If divisor < remainder.\r\n            if (cmp < 0) {\r\n\r\n              // Calculate trial digit, n.\r\n\r\n              rem0 = rem[0];\r\n              if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n              // n is how many times the divisor goes into the current remainder.\r\n              n = mathfloor(rem0 / yc0);\r\n\r\n              //  Algorithm:\r\n              //  product = divisor multiplied by trial digit (n).\r\n              //  Compare product and remainder.\r\n              //  If product is greater than remainder:\r\n              //    Subtract divisor from product, decrement trial digit.\r\n              //  Subtract product from remainder.\r\n              //  If product was less than remainder at the last compare:\r\n              //    Compare new remainder and divisor.\r\n              //    If remainder is greater than divisor:\r\n              //      Subtract divisor from remainder, increment trial digit.\r\n\r\n              if (n > 1) {\r\n\r\n                // n may be > base only when base is 3.\r\n                if (n >= base) n = base - 1;\r\n\r\n                // product = divisor * trial digit.\r\n                prod = multiply(yc, n, base);\r\n                prodL = prod.length;\r\n                remL = rem.length;\r\n\r\n                // Compare product and remainder.\r\n                // If product > remainder then trial digit n too high.\r\n                // n is 1 too high about 5% of the time, and is not known to have\r\n                // ever been more than 1 too high.\r\n                while (compare(prod, rem, prodL, remL) == 1) {\r\n                  n--;\r\n\r\n                  // Subtract divisor from product.\r\n                  subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n                  prodL = prod.length;\r\n                  cmp = 1;\r\n                }\r\n              } else {\r\n\r\n                // n is 0 or 1, cmp is -1.\r\n                // If n is 0, there is no need to compare yc and rem again below,\r\n                // so change cmp to 1 to avoid it.\r\n                // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n                if (n == 0) {\r\n\r\n                  // divisor < remainder, so n must be at least 1.\r\n                  cmp = n = 1;\r\n                }\r\n\r\n                // product = divisor\r\n                prod = yc.slice();\r\n                prodL = prod.length;\r\n              }\r\n\r\n              if (prodL < remL) prod = [0].concat(prod);\r\n\r\n              // Subtract product from remainder.\r\n              subtract(rem, prod, remL, base);\r\n              remL = rem.length;\r\n\r\n               // If product was < remainder.\r\n              if (cmp == -1) {\r\n\r\n                // Compare divisor and new remainder.\r\n                // If divisor < new remainder, subtract divisor from remainder.\r\n                // Trial digit n too low.\r\n                // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n                while (compare(yc, rem, yL, remL) < 1) {\r\n                  n++;\r\n\r\n                  // Subtract divisor from remainder.\r\n                  subtract(rem, yL < remL ? yz : yc, remL, base);\r\n                  remL = rem.length;\r\n                }\r\n              }\r\n            } else if (cmp === 0) {\r\n              n++;\r\n              rem = [0];\r\n            } // else cmp === 1 and n will be 0\r\n\r\n            // Add the next digit, n, to the result array.\r\n            qc[i++] = n;\r\n\r\n            // Update the remainder.\r\n            if (rem[0]) {\r\n              rem[remL++] = xc[xi] || 0;\r\n            } else {\r\n              rem = [xc[xi]];\r\n              remL = 1;\r\n            }\r\n          } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n          more = rem[0] != null;\r\n\r\n          // Leading zero?\r\n          if (!qc[0]) qc.splice(0, 1);\r\n        }\r\n\r\n        if (base == BASE) {\r\n\r\n          // To calculate q.e, first get the number of digits of qc[0].\r\n          for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n          round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n        // Caller is convertBase.\r\n        } else {\r\n          q.e = e;\r\n          q.r = +more;\r\n        }\r\n\r\n        return q;\r\n      };\r\n    })();\r\n\r\n\r\n    /*\r\n     * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n     * notation rounded to the specified decimal places or significant digits.\r\n     *\r\n     * n: a BigNumber.\r\n     * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n     * rm: the rounding mode.\r\n     * id: 1 (toExponential) or 2 (toPrecision).\r\n     */\r\n    function format(n, i, rm, id) {\r\n      var c0, e, ne, len, str;\r\n\r\n      if (rm == null) rm = ROUNDING_MODE;\r\n      else intCheck(rm, 0, 8);\r\n\r\n      if (!n.c) return n.toString();\r\n\r\n      c0 = n.c[0];\r\n      ne = n.e;\r\n\r\n      if (i == null) {\r\n        str = coeffToString(n.c);\r\n        str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n         ? toExponential(str, ne)\r\n         : toFixedPoint(str, ne, '0');\r\n      } else {\r\n        n = round(new BigNumber(n), i, rm);\r\n\r\n        // n.e may have changed if the value was rounded up.\r\n        e = n.e;\r\n\r\n        str = coeffToString(n.c);\r\n        len = str.length;\r\n\r\n        // toPrecision returns exponential notation if the number of significant digits\r\n        // specified is less than the number of digits necessary to represent the integer\r\n        // part of the value in fixed-point notation.\r\n\r\n        // Exponential notation.\r\n        if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n          // Append zeros?\r\n          for (; len < i; str += '0', len++);\r\n          str = toExponential(str, e);\r\n\r\n        // Fixed-point notation.\r\n        } else {\r\n          i -= ne;\r\n          str = toFixedPoint(str, e, '0');\r\n\r\n          // Append zeros?\r\n          if (e + 1 > len) {\r\n            if (--i > 0) for (str += '.'; i--; str += '0');\r\n          } else {\r\n            i += e - len;\r\n            if (i > 0) {\r\n              if (e + 1 == len) str += '.';\r\n              for (; i--; str += '0');\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      return n.s < 0 && c0 ? '-' + str : str;\r\n    }\r\n\r\n\r\n    // Handle BigNumber.max and BigNumber.min.\r\n    function maxOrMin(args, method) {\r\n      var n,\r\n        i = 1,\r\n        m = new BigNumber(args[0]);\r\n\r\n      for (; i < args.length; i++) {\r\n        n = new BigNumber(args[i]);\r\n\r\n        // If any number is NaN, return NaN.\r\n        if (!n.s) {\r\n          m = n;\r\n          break;\r\n        } else if (method.call(m, n)) {\r\n          m = n;\r\n        }\r\n      }\r\n\r\n      return m;\r\n    }\r\n\r\n\r\n    /*\r\n     * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n     * Called by minus, plus and times.\r\n     */\r\n    function normalise(n, c, e) {\r\n      var i = 1,\r\n        j = c.length;\r\n\r\n       // Remove trailing zeros.\r\n      for (; !c[--j]; c.pop());\r\n\r\n      // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n      for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n      // Overflow?\r\n      if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n        // Infinity.\r\n        n.c = n.e = null;\r\n\r\n      // Underflow?\r\n      } else if (e < MIN_EXP) {\r\n\r\n        // Zero.\r\n        n.c = [n.e = 0];\r\n      } else {\r\n        n.e = e;\r\n        n.c = c;\r\n      }\r\n\r\n      return n;\r\n    }\r\n\r\n\r\n    // Handle values that fail the validity test in BigNumber.\r\n    parseNumeric = (function () {\r\n      var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n        dotAfter = /^([^.]+)\\.$/,\r\n        dotBefore = /^\\.([^.]+)$/,\r\n        isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n        whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n      return function (x, str, isNum, b) {\r\n        var base,\r\n          s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n        // No exception on \u00B1Infinity or NaN.\r\n        if (isInfinityOrNaN.test(s)) {\r\n          x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n          x.c = x.e = null;\r\n        } else {\r\n          if (!isNum) {\r\n\r\n            // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n            s = s.replace(basePrefix, function (m, p1, p2) {\r\n              base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n              return !b || b == base ? p1 : m;\r\n            });\r\n\r\n            if (b) {\r\n              base = b;\r\n\r\n              // E.g. '1.' to '1', '.1' to '0.1'\r\n              s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n            }\r\n\r\n            if (str != s) return new BigNumber(s, base);\r\n          }\r\n\r\n          // '[BigNumber Error] Not a number: {n}'\r\n          // '[BigNumber Error] Not a base {b} number: {n}'\r\n          if (BigNumber.DEBUG) {\r\n            throw Error\r\n              (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n          }\r\n\r\n          // NaN\r\n          x.c = x.e = x.s = null;\r\n        }\r\n      }\r\n    })();\r\n\r\n\r\n    /*\r\n     * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n     * If r is truthy, it is known that there are more digits after the rounding digit.\r\n     */\r\n    function round(x, sd, rm, r) {\r\n      var d, i, j, k, n, ni, rd,\r\n        xc = x.c,\r\n        pows10 = POWS_TEN;\r\n\r\n      // if x is not Infinity or NaN...\r\n      if (xc) {\r\n\r\n        // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n        // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n        // ni is the index of n within x.c.\r\n        // d is the number of digits of n.\r\n        // i is the index of rd within n including leading zeros.\r\n        // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n        out: {\r\n\r\n          // Get the number of digits of the first element of xc.\r\n          for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n          i = sd - d;\r\n\r\n          // If the rounding digit is in the first element of xc...\r\n          if (i < 0) {\r\n            i += LOG_BASE;\r\n            j = sd;\r\n            n = xc[ni = 0];\r\n\r\n            // Get the rounding digit at index j of n.\r\n            rd = n / pows10[d - j - 1] % 10 | 0;\r\n          } else {\r\n            ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n            if (ni >= xc.length) {\r\n\r\n              if (r) {\r\n\r\n                // Needed by sqrt.\r\n                for (; xc.length <= ni; xc.push(0));\r\n                n = rd = 0;\r\n                d = 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              n = k = xc[ni];\r\n\r\n              // Get the number of digits of n.\r\n              for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n              // Get the index of rd within n.\r\n              i %= LOG_BASE;\r\n\r\n              // Get the index of rd within n, adjusted for leading zeros.\r\n              // The number of leading zeros of n is given by LOG_BASE - d.\r\n              j = i - LOG_BASE + d;\r\n\r\n              // Get the rounding digit at index j of n.\r\n              rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;\r\n            }\r\n          }\r\n\r\n          r = r || sd < 0 ||\r\n\r\n          // Are there any non-zero digits after the rounding digit?\r\n          // The expression  n % pows10[d - j - 1]  returns all digits of n to the right\r\n          // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n           xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n          r = rm < 4\r\n           ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n           : rd > 5 || rd == 5 && (rm == 4 || r || 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 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n             rm == (x.s < 0 ? 8 : 7));\r\n\r\n          if (sd < 1 || !xc[0]) {\r\n            xc.length = 0;\r\n\r\n            if (r) {\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              xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n              x.e = -sd || 0;\r\n            } else {\r\n\r\n              // Zero.\r\n              xc[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            xc.length = ni;\r\n            k = 1;\r\n            ni--;\r\n          } else {\r\n            xc.length = ni + 1;\r\n            k = pows10[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 n.\r\n            xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n          }\r\n\r\n          // Round up?\r\n          if (r) {\r\n\r\n            for (; ;) {\r\n\r\n              // If the digit to be rounded up is in the first element of xc...\r\n              if (ni == 0) {\r\n\r\n                // i will be the length of xc[0] before k is added.\r\n                for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n                j = xc[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 (xc[0] == BASE) xc[0] = 1;\r\n                }\r\n\r\n                break;\r\n              } else {\r\n                xc[ni] += k;\r\n                if (xc[ni] != BASE) break;\r\n                xc[ni--] = 0;\r\n                k = 1;\r\n              }\r\n            }\r\n          }\r\n\r\n          // Remove trailing zeros.\r\n          for (i = xc.length; xc[--i] === 0; xc.pop());\r\n        }\r\n\r\n        // Overflow? Infinity.\r\n        if (x.e > MAX_EXP) {\r\n          x.c = x.e = null;\r\n\r\n        // Underflow? Zero.\r\n        } else if (x.e < MIN_EXP) {\r\n          x.c = [x.e = 0];\r\n        }\r\n      }\r\n\r\n      return x;\r\n    }\r\n\r\n\r\n    function valueOf(n) {\r\n      var str,\r\n        e = n.e;\r\n\r\n      if (e === null) return n.toString();\r\n\r\n      str = coeffToString(n.c);\r\n\r\n      str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n        ? toExponential(str, e)\r\n        : toFixedPoint(str, e, '0');\r\n\r\n      return n.s < 0 ? '-' + str : str;\r\n    }\r\n\r\n\r\n    // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n     */\r\n    P.absoluteValue = P.abs = function () {\r\n      var x = new BigNumber(this);\r\n      if (x.s < 0) x.s = 1;\r\n      return x;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return\r\n     *   1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n     *   -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n     *   0 if they have the same value,\r\n     *   or null if the value of either is NaN.\r\n     */\r\n    P.comparedTo = function (y, b) {\r\n      return compare(this, new BigNumber(y, b));\r\n    };\r\n\r\n\r\n    /*\r\n     * If dp is undefined or null or true or false, return the number of decimal places of the\r\n     * value of this BigNumber, or null if the value of this BigNumber is \u00B1Infinity or NaN.\r\n     *\r\n     * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n     * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n     * ROUNDING_MODE if rm is omitted.\r\n     *\r\n     * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n     */\r\n    P.decimalPlaces = P.dp = function (dp, rm) {\r\n      var c, n, v,\r\n        x = this;\r\n\r\n      if (dp != null) {\r\n        intCheck(dp, 0, MAX);\r\n        if (rm == null) rm = ROUNDING_MODE;\r\n        else intCheck(rm, 0, 8);\r\n\r\n        return round(new BigNumber(x), dp + x.e + 1, rm);\r\n      }\r\n\r\n      if (!(c = x.c)) return null;\r\n      n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n      // Subtract the number of trailing zeros of the last number.\r\n      if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n      if (n < 0) n = 0;\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 BigNumber whose value is the value of this BigNumber divided by the value of\r\n     * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n     */\r\n    P.dividedBy = P.div = function (y, b) {\r\n      return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n     * BigNumber by the value of BigNumber(y, b).\r\n     */\r\n    P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n      return div(this, new BigNumber(y, b), 0, 1);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n     *\r\n     * If m is present, return the result modulo m.\r\n     * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n     * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n     *\r\n     * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n     * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n     *\r\n     * n {number|string|BigNumber} The exponent. An integer.\r\n     * [m] {number|string|BigNumber} The modulus.\r\n     *\r\n     * '[BigNumber Error] Exponent not an integer: {n}'\r\n     */\r\n    P.exponentiatedBy = P.pow = function (n, m) {\r\n      var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n        x = this;\r\n\r\n      n = new BigNumber(n);\r\n\r\n      // Allow NaN and \u00B1Infinity, but not other non-integers.\r\n      if (n.c && !n.isInteger()) {\r\n        throw Error\r\n          (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n      }\r\n\r\n      if (m != null) m = new BigNumber(m);\r\n\r\n      // Exponent of MAX_SAFE_INTEGER is 15.\r\n      nIsBig = n.e > 14;\r\n\r\n      // If x is NaN, \u00B1Infinity, \u00B10 or \u00B11, or n is \u00B1Infinity, NaN or \u00B10.\r\n      if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n        // The sign of the result of pow when x is negative depends on the evenness of n.\r\n        // If +n overflows to \u00B1Infinity, the evenness of n would be not be known.\r\n        y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n)));\r\n        return m ? y.mod(m) : y;\r\n      }\r\n\r\n      nIsNeg = n.s < 0;\r\n\r\n      if (m) {\r\n\r\n        // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n        if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n        isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n        if (isModExp) x = x.mod(m);\r\n\r\n      // Overflow to \u00B1Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n      // Underflow to \u00B10: <=0.79**1e10 or <=0.9999975**1e15.\r\n      } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n        // [1, 240000000]\r\n        ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n        // [80000000000000]  [99999750000000]\r\n        : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n        // If x is negative and n is odd, k = -0, else k = 0.\r\n        k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n        // If x >= 1, k = \u00B1Infinity.\r\n        if (x.e > -1) k = 1 / k;\r\n\r\n        // If n is negative return \u00B10, else return \u00B1Infinity.\r\n        return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n      } else if (POW_PRECISION) {\r\n\r\n        // Truncating each coefficient array to a length of k after each multiplication\r\n        // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n        // i.e. there will be a minimum of 28 guard digits retained.\r\n        k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n      }\r\n\r\n      if (nIsBig) {\r\n        half = new BigNumber(0.5);\r\n        if (nIsNeg) n.s = 1;\r\n        nIsOdd = isOdd(n);\r\n      } else {\r\n        i = Math.abs(+valueOf(n));\r\n        nIsOdd = i % 2;\r\n      }\r\n\r\n      y = new BigNumber(ONE);\r\n\r\n      // Performs 54 loop iterations for n of 9007199254740991.\r\n      for (; ;) {\r\n\r\n        if (nIsOdd) {\r\n          y = y.times(x);\r\n          if (!y.c) break;\r\n\r\n          if (k) {\r\n            if (y.c.length > k) y.c.length = k;\r\n          } else if (isModExp) {\r\n            y = y.mod(m);    //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n          }\r\n        }\r\n\r\n        if (i) {\r\n          i = mathfloor(i / 2);\r\n          if (i === 0) break;\r\n          nIsOdd = i % 2;\r\n        } else {\r\n          n = n.times(half);\r\n          round(n, n.e + 1, 1);\r\n\r\n          if (n.e > 14) {\r\n            nIsOdd = isOdd(n);\r\n          } else {\r\n            i = +valueOf(n);\r\n            if (i === 0) break;\r\n            nIsOdd = i % 2;\r\n          }\r\n        }\r\n\r\n        x = x.times(x);\r\n\r\n        if (k) {\r\n          if (x.c && x.c.length > k) x.c.length = k;\r\n        } else if (isModExp) {\r\n          x = x.mod(m);    //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n        }\r\n      }\r\n\r\n      if (isModExp) return y;\r\n      if (nIsNeg) y = ONE.div(y);\r\n\r\n      return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n     * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n     *\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n     */\r\n    P.integerValue = function (rm) {\r\n      var n = new BigNumber(this);\r\n      if (rm == null) rm = ROUNDING_MODE;\r\n      else intCheck(rm, 0, 8);\r\n      return round(n, n.e + 1, rm);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n     * otherwise return false.\r\n     */\r\n    P.isEqualTo = P.eq = function (y, b) {\r\n      return compare(this, new BigNumber(y, b)) === 0;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n     */\r\n    P.isFinite = function () {\r\n      return !!this.c;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n     * otherwise return false.\r\n     */\r\n    P.isGreaterThan = P.gt = function (y, b) {\r\n      return compare(this, new BigNumber(y, b)) > 0;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is greater than or equal to the value of\r\n     * BigNumber(y, b), otherwise return false.\r\n     */\r\n    P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n      return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n     */\r\n    P.isInteger = function () {\r\n      return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n     * otherwise return false.\r\n     */\r\n    P.isLessThan = P.lt = function (y, b) {\r\n      return compare(this, new BigNumber(y, b)) < 0;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is less than or equal to the value of\r\n     * BigNumber(y, b), otherwise return false.\r\n     */\r\n    P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n      return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n     */\r\n    P.isNaN = function () {\r\n      return !this.s;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is negative, otherwise return false.\r\n     */\r\n    P.isNegative = function () {\r\n      return this.s < 0;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is positive, otherwise return false.\r\n     */\r\n    P.isPositive = function () {\r\n      return this.s > 0;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n     */\r\n    P.isZero = function () {\r\n      return !!this.c && this.c[0] == 0;\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 BigNumber whose value is the value of this BigNumber minus the value of\r\n     * BigNumber(y, b).\r\n     */\r\n    P.minus = function (y, b) {\r\n      var i, j, t, xLTy,\r\n        x = this,\r\n        a = x.s;\r\n\r\n      y = new BigNumber(y, b);\r\n      b = y.s;\r\n\r\n      // Either NaN?\r\n      if (!a || !b) return new BigNumber(NaN);\r\n\r\n      // Signs differ?\r\n      if (a != b) {\r\n        y.s = -b;\r\n        return x.plus(y);\r\n      }\r\n\r\n      var xe = x.e / LOG_BASE,\r\n        ye = y.e / LOG_BASE,\r\n        xc = x.c,\r\n        yc = y.c;\r\n\r\n      if (!xe || !ye) {\r\n\r\n        // Either Infinity?\r\n        if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n        // Either zero?\r\n        if (!xc[0] || !yc[0]) {\r\n\r\n          // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n          return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n           // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n           ROUNDING_MODE == 3 ? -0 : 0);\r\n        }\r\n      }\r\n\r\n      xe = bitFloor(xe);\r\n      ye = bitFloor(ye);\r\n      xc = xc.slice();\r\n\r\n      // Determine which is the bigger number.\r\n      if (a = xe - ye) {\r\n\r\n        if (xLTy = a < 0) {\r\n          a = -a;\r\n          t = xc;\r\n        } else {\r\n          ye = xe;\r\n          t = yc;\r\n        }\r\n\r\n        t.reverse();\r\n\r\n        // Prepend zeros to equalise exponents.\r\n        for (b = a; b--; t.push(0));\r\n        t.reverse();\r\n      } else {\r\n\r\n        // Exponents equal. Check digit by digit.\r\n        j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n        for (a = b = 0; b < j; b++) {\r\n\r\n          if (xc[b] != yc[b]) {\r\n            xLTy = xc[b] < yc[b];\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      // x < y? Point xc to the array of the bigger number.\r\n      if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;\r\n\r\n      b = (j = yc.length) - (i = xc.length);\r\n\r\n      // Append zeros to xc if shorter.\r\n      // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n      if (b > 0) for (; b--; xc[i++] = 0);\r\n      b = BASE - 1;\r\n\r\n      // Subtract yc from xc.\r\n      for (; j > a;) {\r\n\r\n        if (xc[--j] < yc[j]) {\r\n          for (i = j; i && !xc[--i]; xc[i] = b);\r\n          --xc[i];\r\n          xc[j] += BASE;\r\n        }\r\n\r\n        xc[j] -= yc[j];\r\n      }\r\n\r\n      // Remove leading zeros and adjust exponent accordingly.\r\n      for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n      // Zero?\r\n      if (!xc[0]) {\r\n\r\n        // Following IEEE 754 (2008) 6.3,\r\n        // n - n = +0  but  n - n = -0  when rounding towards -Infinity.\r\n        y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n        y.c = [y.e = 0];\r\n        return y;\r\n      }\r\n\r\n      // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n      // for finite x and y.\r\n      return normalise(y, xc, ye);\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 BigNumber whose value is the value of this BigNumber modulo the value of\r\n     * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n     */\r\n    P.modulo = P.mod = function (y, b) {\r\n      var q, s,\r\n        x = this;\r\n\r\n      y = new BigNumber(y, b);\r\n\r\n      // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n      if (!x.c || !y.s || y.c && !y.c[0]) {\r\n        return new BigNumber(NaN);\r\n\r\n      // Return x if y is Infinity or x is zero.\r\n      } else if (!y.c || x.c && !x.c[0]) {\r\n        return new BigNumber(x);\r\n      }\r\n\r\n      if (MODULO_MODE == 9) {\r\n\r\n        // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n        // r = x - qy    where  0 <= r < abs(y)\r\n        s = y.s;\r\n        y.s = 1;\r\n        q = div(x, y, 0, 3);\r\n        y.s = s;\r\n        q.s *= s;\r\n      } else {\r\n        q = div(x, y, 0, MODULO_MODE);\r\n      }\r\n\r\n      y = x.minus(q.times(y));\r\n\r\n      // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n      if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n      return y;\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 BigNumber whose value is the value of this BigNumber multiplied by the value\r\n     * of BigNumber(y, b).\r\n     */\r\n    P.multipliedBy = P.times = function (y, b) {\r\n      var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n        base, sqrtBase,\r\n        x = this,\r\n        xc = x.c,\r\n        yc = (y = new BigNumber(y, b)).c;\r\n\r\n      // Either NaN, \u00B1Infinity or \u00B10?\r\n      if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n        // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n        if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n          y.c = y.e = y.s = null;\r\n        } else {\r\n          y.s *= x.s;\r\n\r\n          // Return \u00B1Infinity if either is \u00B1Infinity.\r\n          if (!xc || !yc) {\r\n            y.c = y.e = null;\r\n\r\n          // Return \u00B10 if either is \u00B10.\r\n          } else {\r\n            y.c = [0];\r\n            y.e = 0;\r\n          }\r\n        }\r\n\r\n        return y;\r\n      }\r\n\r\n      e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n      y.s *= x.s;\r\n      xcL = xc.length;\r\n      ycL = yc.length;\r\n\r\n      // Ensure xc points to longer array and xcL to its length.\r\n      if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;\r\n\r\n      // Initialise the result array with zeros.\r\n      for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n      base = BASE;\r\n      sqrtBase = SQRT_BASE;\r\n\r\n      for (i = ycL; --i >= 0;) {\r\n        c = 0;\r\n        ylo = yc[i] % sqrtBase;\r\n        yhi = yc[i] / sqrtBase | 0;\r\n\r\n        for (k = xcL, j = i + k; j > i;) {\r\n          xlo = xc[--k] % sqrtBase;\r\n          xhi = xc[k] / sqrtBase | 0;\r\n          m = yhi * xlo + xhi * ylo;\r\n          xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n          c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n          zc[j--] = xlo % base;\r\n        }\r\n\r\n        zc[j] = c;\r\n      }\r\n\r\n      if (c) {\r\n        ++e;\r\n      } else {\r\n        zc.splice(0, 1);\r\n      }\r\n\r\n      return normalise(y, zc, e);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n     * i.e. multiplied by -1.\r\n     */\r\n    P.negated = function () {\r\n      var x = new BigNumber(this);\r\n      x.s = -x.s || null;\r\n      return 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 BigNumber whose value is the value of this BigNumber plus the value of\r\n     * BigNumber(y, b).\r\n     */\r\n    P.plus = function (y, b) {\r\n      var t,\r\n        x = this,\r\n        a = x.s;\r\n\r\n      y = new BigNumber(y, b);\r\n      b = y.s;\r\n\r\n      // Either NaN?\r\n      if (!a || !b) return new BigNumber(NaN);\r\n\r\n      // Signs differ?\r\n       if (a != b) {\r\n        y.s = -b;\r\n        return x.minus(y);\r\n      }\r\n\r\n      var xe = x.e / LOG_BASE,\r\n        ye = y.e / LOG_BASE,\r\n        xc = x.c,\r\n        yc = y.c;\r\n\r\n      if (!xe || !ye) {\r\n\r\n        // Return \u00B1Infinity if either \u00B1Infinity.\r\n        if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n        // Either zero?\r\n        // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n        if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n      }\r\n\r\n      xe = bitFloor(xe);\r\n      ye = bitFloor(ye);\r\n      xc = xc.slice();\r\n\r\n      // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n      if (a = xe - ye) {\r\n        if (a > 0) {\r\n          ye = xe;\r\n          t = yc;\r\n        } else {\r\n          a = -a;\r\n          t = xc;\r\n        }\r\n\r\n        t.reverse();\r\n        for (; a--; t.push(0));\r\n        t.reverse();\r\n      }\r\n\r\n      a = xc.length;\r\n      b = yc.length;\r\n\r\n      // Point xc to the longer array, and b to the shorter length.\r\n      if (a - b < 0) t = yc, yc = xc, xc = t, b = a;\r\n\r\n      // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n      for (a = 0; b;) {\r\n        a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n        xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n      }\r\n\r\n      if (a) {\r\n        xc = [a].concat(xc);\r\n        ++ye;\r\n      }\r\n\r\n      // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n      // ye = MAX_EXP + 1 possible\r\n      return normalise(y, xc, ye);\r\n    };\r\n\r\n\r\n    /*\r\n     * If sd is undefined or null or true or false, return the number of significant digits of\r\n     * the value of this BigNumber, or null if the value of this BigNumber is \u00B1Infinity or NaN.\r\n     * If sd is true include integer-part trailing zeros in the count.\r\n     *\r\n     * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n     * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n     * ROUNDING_MODE if rm is omitted.\r\n     *\r\n     * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n     *                     boolean: whether to count integer-part trailing zeros: true or false.\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n     */\r\n    P.precision = P.sd = function (sd, rm) {\r\n      var c, n, v,\r\n        x = this;\r\n\r\n      if (sd != null && sd !== !!sd) {\r\n        intCheck(sd, 1, MAX);\r\n        if (rm == null) rm = ROUNDING_MODE;\r\n        else intCheck(rm, 0, 8);\r\n\r\n        return round(new BigNumber(x), sd, rm);\r\n      }\r\n\r\n      if (!(c = x.c)) return null;\r\n      v = c.length - 1;\r\n      n = v * LOG_BASE + 1;\r\n\r\n      if (v = c[v]) {\r\n\r\n        // Subtract the number of trailing zeros of the last element.\r\n        for (; v % 10 == 0; v /= 10, n--);\r\n\r\n        // Add the number of digits of the first element.\r\n        for (v = c[0]; v >= 10; v /= 10, n++);\r\n      }\r\n\r\n      if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n      return n;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n     * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n     *\r\n     * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n     */\r\n    P.shiftedBy = function (k) {\r\n      intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n      return this.times('1e' + k);\r\n    };\r\n\r\n\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     * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n     * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n     */\r\n    P.squareRoot = P.sqrt = function () {\r\n      var m, n, r, rep, t,\r\n        x = this,\r\n        c = x.c,\r\n        s = x.s,\r\n        e = x.e,\r\n        dp = DECIMAL_PLACES + 4,\r\n        half = new BigNumber('0.5');\r\n\r\n      // Negative/NaN/Infinity/zero?\r\n      if (s !== 1 || !c || !c[0]) {\r\n        return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n      }\r\n\r\n      // Initial estimate.\r\n      s = Math.sqrt(+valueOf(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 = coeffToString(c);\r\n        if ((n.length + e) % 2 == 0) n += '0';\r\n        s = Math.sqrt(+n);\r\n        e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n        if (s == 1 / 0) {\r\n          n = '1e' + 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 BigNumber(n);\r\n      } else {\r\n        r = new BigNumber(s + '');\r\n      }\r\n\r\n      // Check for zero.\r\n      // r could be zero if MIN_EXP is changed after the this value was created.\r\n      // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n      // coeffToString to throw.\r\n      if (r.c[0]) {\r\n        e = r.e;\r\n        s = e + dp;\r\n        if (s < 3) s = 0;\r\n\r\n        // Newton-Raphson iteration.\r\n        for (; ;) {\r\n          t = r;\r\n          r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n          if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n            // The exponent of r may here be one less than the final result exponent,\r\n            // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n            // are indexed correctly.\r\n            if (r.e < e) --s;\r\n            n = n.slice(s - 3, s + 1);\r\n\r\n            // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n            // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n            // 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\r\n              // exact result as the nines may infinitely repeat.\r\n              if (!rep) {\r\n                round(t, t.e + DECIMAL_PLACES + 2, 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              dp += 4;\r\n              s += 4;\r\n              rep = 1;\r\n            } else {\r\n\r\n              // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n              // result. 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                round(r, r.e + DECIMAL_PLACES + 2, 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\r\n      return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a string representing the value of this BigNumber in exponential notation and\r\n     * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n     *\r\n     * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n     */\r\n    P.toExponential = function (dp, rm) {\r\n      if (dp != null) {\r\n        intCheck(dp, 0, MAX);\r\n        dp++;\r\n      }\r\n      return format(this, dp, rm, 1);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n     * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n     *\r\n     * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n     * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n     *\r\n     * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n     */\r\n    P.toFixed = function (dp, rm) {\r\n      if (dp != null) {\r\n        intCheck(dp, 0, MAX);\r\n        dp = dp + this.e + 1;\r\n      }\r\n      return format(this, dp, rm);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n     * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n     * of the format or FORMAT object (see BigNumber.set).\r\n     *\r\n     * The formatting object may contain some or all of the properties shown below.\r\n     *\r\n     * FORMAT = {\r\n     *   prefix: '',\r\n     *   groupSize: 3,\r\n     *   secondaryGroupSize: 0,\r\n     *   groupSeparator: ',',\r\n     *   decimalSeparator: '.',\r\n     *   fractionGroupSize: 0,\r\n     *   fractionGroupSeparator: '\\xA0',      // non-breaking space\r\n     *   suffix: ''\r\n     * };\r\n     *\r\n     * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     * [format] {object} Formatting options. See FORMAT pbject above.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n     * '[BigNumber Error] Argument not an object: {format}'\r\n     */\r\n    P.toFormat = function (dp, rm, format) {\r\n      var str,\r\n        x = this;\r\n\r\n      if (format == null) {\r\n        if (dp != null && rm && typeof rm == 'object') {\r\n          format = rm;\r\n          rm = null;\r\n        } else if (dp && typeof dp == 'object') {\r\n          format = dp;\r\n          dp = rm = null;\r\n        } else {\r\n          format = FORMAT;\r\n        }\r\n      } else if (typeof format != 'object') {\r\n        throw Error\r\n          (bignumberError + 'Argument not an object: ' + format);\r\n      }\r\n\r\n      str = x.toFixed(dp, rm);\r\n\r\n      if (x.c) {\r\n        var i,\r\n          arr = str.split('.'),\r\n          g1 = +format.groupSize,\r\n          g2 = +format.secondaryGroupSize,\r\n          groupSeparator = format.groupSeparator || '',\r\n          intPart = arr[0],\r\n          fractionPart = arr[1],\r\n          isNeg = x.s < 0,\r\n          intDigits = isNeg ? intPart.slice(1) : intPart,\r\n          len = intDigits.length;\r\n\r\n        if (g2) i = g1, g1 = g2, g2 = i, len -= i;\r\n\r\n        if (g1 > 0 && len > 0) {\r\n          i = len % g1 || g1;\r\n          intPart = intDigits.substr(0, i);\r\n          for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n          if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n          if (isNeg) intPart = '-' + intPart;\r\n        }\r\n\r\n        str = fractionPart\r\n         ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n          ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n           '$&' + (format.fractionGroupSeparator || ''))\r\n          : fractionPart)\r\n         : intPart;\r\n      }\r\n\r\n      return (format.prefix || '') + str + (format.suffix || '');\r\n    };\r\n\r\n\r\n    /*\r\n     * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n     * fraction with an integer numerator and an integer denominator.\r\n     * The denominator will be a positive non-zero value less than or equal to the specified\r\n     * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n     * the lowest value necessary to represent the number exactly.\r\n     *\r\n     * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n     *\r\n     * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n     */\r\n    P.toFraction = function (md) {\r\n      var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n        x = this,\r\n        xc = x.c;\r\n\r\n      if (md != null) {\r\n        n = new BigNumber(md);\r\n\r\n        // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n        if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n          throw Error\r\n            (bignumberError + 'Argument ' +\r\n              (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n        }\r\n      }\r\n\r\n      if (!xc) return new BigNumber(x);\r\n\r\n      d = new BigNumber(ONE);\r\n      n1 = d0 = new BigNumber(ONE);\r\n      d1 = n0 = new BigNumber(ONE);\r\n      s = coeffToString(xc);\r\n\r\n      // Determine initial denominator.\r\n      // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n      e = d.e = s.length - x.e - 1;\r\n      d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n      md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n      exp = MAX_EXP;\r\n      MAX_EXP = 1 / 0;\r\n      n = new BigNumber(s);\r\n\r\n      // n0 = d1 = 0\r\n      n0.c[0] = 0;\r\n\r\n      for (; ;)  {\r\n        q = div(n, d, 0, 1);\r\n        d2 = d0.plus(q.times(d1));\r\n        if (d2.comparedTo(md) == 1) break;\r\n        d0 = d1;\r\n        d1 = d2;\r\n        n1 = n0.plus(q.times(d2 = n1));\r\n        n0 = d2;\r\n        d = n.minus(q.times(d2 = d));\r\n        n = d2;\r\n      }\r\n\r\n      d2 = div(md.minus(d0), d1, 0, 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      e = e * 2;\r\n\r\n      // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n      r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n          div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n      MAX_EXP = exp;\r\n\r\n      return r;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return the value of this BigNumber converted to a number primitive.\r\n     */\r\n    P.toNumber = function () {\r\n      return +valueOf(this);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n     * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n     * necessary to represent the integer part of the value in fixed-point notation, then use\r\n     * exponential notation.\r\n     *\r\n     * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n     */\r\n    P.toPrecision = function (sd, rm) {\r\n      if (sd != null) intCheck(sd, 1, MAX);\r\n      return format(this, sd, rm, 2);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n     * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n     * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n     * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n     * TO_EXP_NEG, return exponential notation.\r\n     *\r\n     * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n     *\r\n     * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n     */\r\n    P.toString = function (b) {\r\n      var str,\r\n        n = this,\r\n        s = n.s,\r\n        e = n.e;\r\n\r\n      // Infinity or NaN?\r\n      if (e === null) {\r\n        if (s) {\r\n          str = 'Infinity';\r\n          if (s < 0) str = '-' + str;\r\n        } else {\r\n          str = 'NaN';\r\n        }\r\n      } else {\r\n        if (b == null) {\r\n          str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n           ? toExponential(coeffToString(n.c), e)\r\n           : toFixedPoint(coeffToString(n.c), e, '0');\r\n        } else if (b === 10) {\r\n          n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n          str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n        } else {\r\n          intCheck(b, 2, ALPHABET.length, 'Base');\r\n          str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n        }\r\n\r\n        if (s < 0 && n.c[0]) str = '-' + str;\r\n      }\r\n\r\n      return str;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return as toString, but do not accept a base argument, and include the minus sign for\r\n     * negative zero.\r\n     */\r\n    P.valueOf = P.toJSON = function () {\r\n      return valueOf(this);\r\n    };\r\n\r\n\r\n    P._isBigNumber = true;\r\n\r\n    if (typeof Symbol == 'function' && typeof Symbol.iterator == 'symbol') {\r\n      P[Symbol.toStringTag] = 'BigNumber';\r\n      // Node.js v10.12.0+\r\n      P[Symbol.for('nodejs.util.inspect.custom')] = P.valueOf;\r\n    }\r\n\r\n    if (configObject != null) BigNumber.set(configObject);\r\n\r\n    return BigNumber;\r\n  }\r\n\r\n\r\n  // PRIVATE HELPER FUNCTIONS\r\n\r\n\r\n  function bitFloor(n) {\r\n    var i = n | 0;\r\n    return n > 0 || n === i ? i : i - 1;\r\n  }\r\n\r\n\r\n  // Return a coefficient array as a string of base 10 digits.\r\n  function coeffToString(a) {\r\n    var s, z,\r\n      i = 1,\r\n      j = a.length,\r\n      r = a[0] + '';\r\n\r\n    for (; i < j;) {\r\n      s = a[i++] + '';\r\n      z = LOG_BASE - s.length;\r\n      for (; z--; s = '0' + s);\r\n      r += s;\r\n    }\r\n\r\n    // Determine trailing zeros.\r\n    for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n    return r.slice(0, j + 1 || 1);\r\n  }\r\n\r\n\r\n  // Compare the value of BigNumbers x and y.\r\n  function compare(x, y) {\r\n    var a, b,\r\n      xc = x.c,\r\n      yc = y.c,\r\n      i = x.s,\r\n      j = y.s,\r\n      k = x.e,\r\n      l = y.e;\r\n\r\n    // Either NaN?\r\n    if (!i || !j) return null;\r\n\r\n    a = xc && !xc[0];\r\n    b = yc && !yc[0];\r\n\r\n    // Either zero?\r\n    if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n    // Signs differ?\r\n    if (i != j) return i;\r\n\r\n    a = i < 0;\r\n    b = k == l;\r\n\r\n    // Either Infinity?\r\n    if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n    // Compare exponents.\r\n    if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n    j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n    // Compare digit by digit.\r\n    for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n    // Compare lengths.\r\n    return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n  }\r\n\r\n\r\n  /*\r\n   * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n   */\r\n  function intCheck(n, min, max, name) {\r\n    if (n < min || n > max || n !== (n < 0 ? mathceil(n) : mathfloor(n))) {\r\n      throw Error\r\n       (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n         ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n         : ' not a primitive number: ') + String(n));\r\n    }\r\n  }\r\n\r\n\r\n  // Assumes finite n.\r\n  function isOdd(n) {\r\n    var k = n.c.length - 1;\r\n    return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n  }\r\n\r\n\r\n  function toExponential(str, e) {\r\n    return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n     (e < 0 ? 'e' : 'e+') + e;\r\n  }\r\n\r\n\r\n  function toFixedPoint(str, e, z) {\r\n    var len, zs;\r\n\r\n    // Negative exponent?\r\n    if (e < 0) {\r\n\r\n      // Prepend zeros.\r\n      for (zs = z + '.'; ++e; zs += z);\r\n      str = zs + str;\r\n\r\n    // Positive exponent\r\n    } else {\r\n      len = str.length;\r\n\r\n      // Append zeros.\r\n      if (++e > len) {\r\n        for (zs = z, e -= len; --e; zs += z);\r\n        str += zs;\r\n      } else if (e < len) {\r\n        str = str.slice(0, e) + '.' + str.slice(e);\r\n      }\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n\r\n  // EXPORT\r\n\r\n\r\n  BigNumber = clone();\r\n  BigNumber['default'] = BigNumber.BigNumber = BigNumber;\r\n\r\n  // AMD.\r\n  if (typeof define == 'function' && define.amd) {\r\n    define(function () { return BigNumber; });\r\n\r\n  // Node.js and other environments that support module.exports.\r\n  } else if (typeof module != 'undefined' && module.exports) {\r\n    module.exports = BigNumber;\r\n\r\n  // Browser.\r\n  } else {\r\n    if (!globalObject) {\r\n      globalObject = typeof self != 'undefined' && self ? self : window;\r\n    }\r\n\r\n    globalObject.BigNumber = BigNumber;\r\n  }\r\n})(this);\r\n", "/*!\n * Copyright (c) 2017 Benjamin Van Ryseghem<benjamin@vanryseghem.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nmodule.exports = {\n    languageTag: \"en-US\",\n    delimiters: {\n        thousands: \",\",\n        decimal: \".\"\n    },\n    abbreviations: {\n        thousand: \"k\",\n        million: \"m\",\n        billion: \"b\",\n        trillion: \"t\"\n    },\n    spaceSeparated: false,\n    ordinal: function(number) {\n        let b = number % 10;\n        return (~~(number % 100 / 10) === 1) ? \"th\" : (b === 1) ? \"st\" : (b === 2) ? \"nd\" : (b === 3) ? \"rd\" : \"th\";\n    },\n    currency: {\n        symbol: \"$\",\n        position: \"prefix\",\n        code: \"USD\"\n    },\n    currencyFormat: {\n        thousandSeparated: true,\n        totalLength: 4,\n        spaceSeparated: true\n    },\n    formats: {\n        fourDigits: {\n            totalLength: 4,\n            spaceSeparated: true\n        },\n        fullWithTwoDecimals: {\n            output: \"currency\",\n            thousandSeparated: true,\n            mantissa: 2\n        },\n        fullWithTwoDecimalsNoCurrency: {\n            thousandSeparated: true,\n            mantissa: 2\n        },\n        fullWithNoDecimals: {\n            output: \"currency\",\n            thousandSeparated: true,\n            mantissa: 0\n        }\n    }\n};\n", "/*!\n * Copyright (c) 2017 Benjamin Van Ryseghem<benjamin@vanryseghem.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nconst globalState = require(\"./globalState\");\nconst validating = require(\"./validating\");\nconst parsing = require(\"./parsing\");\n\nconst binarySuffixes = [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\", \"EiB\", \"ZiB\", \"YiB\"];\nconst decimalSuffixes = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\nconst bytes = {\n    general: {scale: 1024, suffixes: decimalSuffixes, marker: \"bd\"},\n    binary: {scale: 1024, suffixes: binarySuffixes, marker: \"b\"},\n    decimal: {scale: 1000, suffixes: decimalSuffixes, marker: \"d\"}\n};\n\nconst defaultOptions = {\n    totalLength: 0,\n    characteristic: 0,\n    forceAverage: false,\n    average: false,\n    mantissa: -1,\n    optionalMantissa: true,\n    thousandSeparated: false,\n    spaceSeparated: false,\n    negative: \"sign\",\n    forceSign: false\n};\n\n/**\n * Entry point. Format the provided INSTANCE according to the PROVIDEDFORMAT.\n * This method ensure the prefix and postfix are added as the last step.\n *\n * @param {Numbro} instance - numbro instance to format\n * @param {NumbroFormat|string} [providedFormat] - specification for formatting\n * @param numbro - the numbro singleton\n * @return {string}\n */\nfunction format(instance, providedFormat = {}, numbro) {\n    if (typeof providedFormat === \"string\") {\n        providedFormat = parsing.parseFormat(providedFormat);\n    }\n\n    let valid = validating.validateFormat(providedFormat);\n\n    if (!valid) {\n        return \"ERROR: invalid format\";\n    }\n\n    let prefix = providedFormat.prefix || \"\";\n    let postfix = providedFormat.postfix || \"\";\n\n    let output = formatNumbro(instance, providedFormat, numbro);\n    output = insertPrefix(output, prefix);\n    output = insertPostfix(output, postfix);\n    return output;\n}\n\n/**\n * Format the provided INSTANCE according to the PROVIDEDFORMAT.\n *\n * @param {Numbro} instance - numbro instance to format\n * @param {{}} providedFormat - specification for formatting\n * @param numbro - the numbro singleton\n * @return {string}\n */\nfunction formatNumbro(instance, providedFormat, numbro) {\n    switch (providedFormat.output) {\n        case \"currency\": {\n            providedFormat = formatOrDefault(providedFormat, globalState.currentCurrencyDefaultFormat());\n            return formatCurrency(instance, providedFormat, globalState, numbro);\n        }\n        case \"percent\": {\n            providedFormat = formatOrDefault(providedFormat, globalState.currentPercentageDefaultFormat());\n            return formatPercentage(instance, providedFormat, globalState, numbro);\n        }\n        case \"byte\":\n            providedFormat = formatOrDefault(providedFormat, globalState.currentByteDefaultFormat());\n            return formatByte(instance, providedFormat, globalState, numbro);\n        case \"time\":\n            providedFormat = formatOrDefault(providedFormat, globalState.currentTimeDefaultFormat());\n            return formatTime(instance, providedFormat, globalState, numbro);\n        case \"ordinal\":\n            providedFormat = formatOrDefault(providedFormat, globalState.currentOrdinalDefaultFormat());\n            return formatOrdinal(instance, providedFormat, globalState, numbro);\n        case \"number\":\n        default:\n            return formatNumber({\n                instance,\n                providedFormat,\n                numbro\n            });\n    }\n}\n\n/**\n * Get the decimal byte unit (MB) for the provided numbro INSTANCE.\n * We go from one unit to another using the decimal system (1000).\n *\n * @param {Numbro} instance - numbro instance to compute\n * @return {String}\n */\nfunction getDecimalByteUnit(instance) {\n    let data = bytes.decimal;\n    return getFormatByteUnits(instance._value, data.suffixes, data.scale).suffix;\n}\n\n/**\n * Get the binary byte unit (MiB) for the provided numbro INSTANCE.\n * We go from one unit to another using the decimal system (1024).\n *\n * @param {Numbro} instance - numbro instance to compute\n * @return {String}\n */\nfunction getBinaryByteUnit(instance) {\n    let data = bytes.binary;\n    return getFormatByteUnits(instance._value, data.suffixes, data.scale).suffix;\n}\n\n/**\n * Get the decimal byte unit (MB) for the provided numbro INSTANCE.\n * We go from one unit to another using the decimal system (1024).\n *\n * @param {Numbro} instance - numbro instance to compute\n * @return {String}\n */\nfunction getByteUnit(instance) {\n    let data = bytes.general;\n    return getFormatByteUnits(instance._value, data.suffixes, data.scale).suffix;\n}\n\n/**\n * Return the value and the suffix computed in byte.\n * It uses the SUFFIXES and the SCALE provided.\n *\n * @param {number} value - Number to format\n * @param {[String]} suffixes - List of suffixes\n * @param {number} scale - Number in-between two units\n * @return {{value: Number, suffix: String}}\n */\nfunction getFormatByteUnits(value, suffixes, scale) {\n    let suffix = suffixes[0];\n    let abs = Math.abs(value);\n\n    if (abs >= scale) {\n        for (let power = 1; power < suffixes.length; ++power) {\n            let min = Math.pow(scale, power);\n            let max = Math.pow(scale, power + 1);\n\n            if (abs >= min && abs < max) {\n                suffix = suffixes[power];\n                value = value / min;\n                break;\n            }\n        }\n\n        // values greater than or equal to [scale] YB never set the suffix\n        if (suffix === suffixes[0]) {\n            value = value / Math.pow(scale, suffixes.length - 1);\n            suffix = suffixes[suffixes.length - 1];\n        }\n    }\n\n    return {value, suffix};\n}\n\n/**\n * Format the provided INSTANCE as bytes using the PROVIDEDFORMAT, and STATE.\n *\n * @param {Numbro} instance - numbro instance to format\n * @param {{}} providedFormat - specification for formatting\n * @param {globalState} state - shared state of the library\n * @param numbro - the numbro singleton\n * @return {string}\n */\nfunction formatByte(instance, providedFormat, state, numbro) {\n    let base = providedFormat.base || \"binary\";\n    let baseInfo = bytes[base];\n\n    let {value, suffix} = getFormatByteUnits(instance._value, baseInfo.suffixes, baseInfo.scale);\n    let output = formatNumber({\n        instance: numbro(value),\n        providedFormat,\n        state,\n        defaults: state.currentByteDefaultFormat()\n    });\n    let abbreviations = state.currentAbbreviations();\n    return `${output}${abbreviations.spaced ? \" \" : \"\"}${suffix}`;\n}\n\n/**\n * Format the provided INSTANCE as an ordinal using the PROVIDEDFORMAT,\n * and the STATE.\n *\n * @param {Numbro} instance - numbro instance to format\n * @param {{}} providedFormat - specification for formatting\n * @param {globalState} state - shared state of the library\n * @return {string}\n */\nfunction formatOrdinal(instance, providedFormat, state) {\n    let ordinalFn = state.currentOrdinal();\n    let options = Object.assign({}, defaultOptions, providedFormat);\n\n    let output = formatNumber({\n        instance,\n        providedFormat,\n        state\n    });\n    let ordinal = ordinalFn(instance._value);\n\n    return `${output}${options.spaceSeparated ? \" \" : \"\"}${ordinal}`;\n}\n\n/**\n * Format the provided INSTANCE as a time HH:MM:SS.\n *\n * @param {Numbro} instance - numbro instance to format\n * @return {string}\n */\nfunction formatTime(instance) {\n    let hours = Math.floor(instance._value / 60 / 60);\n    let minutes = Math.floor((instance._value - (hours * 60 * 60)) / 60);\n    let seconds = Math.round(instance._value - (hours * 60 * 60) - (minutes * 60));\n    return `${hours}:${(minutes < 10) ? \"0\" : \"\"}${minutes}:${(seconds < 10) ? \"0\" : \"\"}${seconds}`;\n}\n\n/**\n * Format the provided INSTANCE as a percentage using the PROVIDEDFORMAT,\n * and the STATE.\n *\n * @param {Numbro} instance - numbro instance to format\n * @param {{}} providedFormat - specification for formatting\n * @param {globalState} state - shared state of the library\n * @param numbro - the numbro singleton\n * @return {string}\n */\nfunction formatPercentage(instance, providedFormat, state, numbro) {\n    let prefixSymbol = providedFormat.prefixSymbol;\n\n    let output = formatNumber({\n        instance: numbro(instance._value * 100),\n        providedFormat,\n        state\n    });\n    let options = Object.assign({}, defaultOptions, providedFormat);\n\n    if (prefixSymbol) {\n        return `%${options.spaceSeparated ? \" \" : \"\"}${output}`;\n    }\n\n    return `${output}${options.spaceSeparated ? \" \" : \"\"}%`;\n}\n\n/**\n * Format the provided INSTANCE as a percentage using the PROVIDEDFORMAT,\n * and the STATE.\n *\n * @param {Numbro} instance - numbro instance to format\n * @param {{}} providedFormat - specification for formatting\n * @param {globalState} state - shared state of the library\n * @return {string}\n */\nfunction formatCurrency(instance, providedFormat, state) {\n    const currentCurrency = state.currentCurrency();\n    let options = Object.assign({}, defaultOptions, providedFormat);\n    let decimalSeparator = undefined;\n    let space = \"\";\n    let average = !!options.totalLength || !!options.forceAverage || options.average;\n    let position = providedFormat.currencyPosition || currentCurrency.position;\n    let symbol = providedFormat.currencySymbol || currentCurrency.symbol;\n\n    if (options.spaceSeparated) {\n        space = \" \";\n    }\n\n    if (position === \"infix\") {\n        decimalSeparator = space + symbol + space;\n    }\n\n    let output = formatNumber({\n        instance,\n        providedFormat,\n        state,\n        decimalSeparator\n    });\n\n    if (position === \"prefix\") {\n        if (instance._value < 0 && options.negative === \"sign\") {\n            output = `-${space}${symbol}${output.slice(1)}`;\n        } else {\n            output = symbol + space + output;\n        }\n    }\n\n    if (!position || position === \"postfix\") {\n        space = average ? \"\" : space;\n        output = output + space + symbol;\n    }\n\n    return output;\n}\n\n/**\n * Compute the average value out of VALUE.\n * The other parameters are computation options.\n *\n * @param {number} value - value to compute\n * @param {string} [forceAverage] - forced unit used to compute\n * @param {{}} abbreviations - part of the language specification\n * @param {boolean} spaceSeparated - `true` if a space must be inserted between the value and the abbreviation\n * @param {number} [totalLength] - total length of the output including the characteristic and the mantissa\n * @return {{value: number, abbreviation: string, mantissaPrecision: number}}\n */\nfunction computeAverage({value, forceAverage, abbreviations, spaceSeparated = false, totalLength = 0}) {\n    let abbreviation = \"\";\n    let abs = Math.abs(value);\n    let mantissaPrecision = -1;\n\n    if ((abs >= Math.pow(10, 12) && !forceAverage) || (forceAverage === \"trillion\")) {\n        // trillion\n        abbreviation = abbreviations.trillion;\n        value = value / Math.pow(10, 12);\n    } else if ((abs < Math.pow(10, 12) && abs >= Math.pow(10, 9) && !forceAverage) || (forceAverage === \"billion\")) {\n        // billion\n        abbreviation = abbreviations.billion;\n        value = value / Math.pow(10, 9);\n    } else if ((abs < Math.pow(10, 9) && abs >= Math.pow(10, 6) && !forceAverage) || (forceAverage === \"million\")) {\n        // million\n        abbreviation = abbreviations.million;\n        value = value / Math.pow(10, 6);\n    } else if ((abs < Math.pow(10, 6) && abs >= Math.pow(10, 3) && !forceAverage) || (forceAverage === \"thousand\")) {\n        // thousand\n        abbreviation = abbreviations.thousand;\n        value = value / Math.pow(10, 3);\n    }\n\n    let optionalSpace = spaceSeparated ? \" \" : \"\";\n\n    if (abbreviation) {\n        abbreviation = optionalSpace + abbreviation;\n    }\n\n    if (totalLength) {\n        let characteristic = value.toString().split(\".\")[0];\n        mantissaPrecision = Math.max(totalLength - characteristic.length, 0);\n    }\n\n    return {value, abbreviation, mantissaPrecision};\n}\n\n/**\n * Compute an exponential form for VALUE, taking into account CHARACTERISTIC\n * if provided.\n * @param {number} value - value to compute\n * @param {number} [characteristicPrecision] - optional characteristic length\n * @return {{value: number, abbreviation: string}}\n */\nfunction computeExponential({value, characteristicPrecision = 0}) {\n    let [numberString, exponential] = value.toExponential().split(\"e\");\n    let number = +numberString;\n\n    if (!characteristicPrecision) {\n        return {\n            value: number,\n            abbreviation: `e${exponential}`\n        };\n    }\n\n    let characteristicLength = 1; // see `toExponential`\n\n    if (characteristicLength < characteristicPrecision) {\n        number = number * Math.pow(10, characteristicPrecision - characteristicLength);\n        exponential = +exponential - (characteristicPrecision - characteristicLength);\n        exponential = exponential >= 0 ? `+${exponential}` : exponential;\n    }\n\n    return {\n        value: number,\n        abbreviation: `e${exponential}`\n    };\n}\n\n/**\n * Return a string of NUMBER zero.\n *\n * @param {number} number - Length of the output\n * @return {string}\n */\nfunction zeroes(number) {\n    let result = \"\";\n    for (let i = 0; i < number; i++) {\n        result += \"0\";\n    }\n\n    return result;\n}\n\n/**\n * Return a string representing VALUE with a PRECISION-long mantissa.\n * This method is for large/small numbers only (a.k.a. including a \"e\").\n *\n * @param {number} value - number to precise\n * @param {number} precision - desired length for the mantissa\n * @return {string}\n */\nfunction toFixedLarge(value, precision) {\n    let result = value.toString();\n\n    let [base, exp] = result.split(\"e\");\n\n    let [characteristic, mantissa = \"\"] = base.split(\".\");\n\n    if (+exp > 0) {\n        result = characteristic + mantissa + zeroes(exp - mantissa.length);\n    } else {\n        let prefix = \".\";\n\n        if (+characteristic < 0) {\n            prefix = `-0${prefix}`;\n        } else {\n            prefix = `0${prefix}`;\n        }\n\n        let suffix = (zeroes(-exp - 1) + Math.abs(characteristic) + mantissa).substr(0, precision);\n        if (suffix.length < precision) {\n            suffix += zeroes(precision - suffix.length);\n        }\n        result = prefix + suffix;\n    }\n\n    if (+exp > 0 && precision > 0) {\n        result += `.${zeroes(precision)}`;\n    }\n\n    return result;\n}\n\n/**\n * Return a string representing VALUE with a PRECISION-long mantissa.\n *\n * @param {number} value - number to precise\n * @param {number} precision - desired length for the mantissa\n * @return {string}\n */\nfunction toFixed(value, precision) {\n    if (value.toString().indexOf(\"e\") !== -1) {\n        return toFixedLarge(value, precision);\n    }\n\n    return (Math.round(+`${value}e+${precision}`) / (Math.pow(10, precision))).toFixed(precision);\n}\n\n/**\n * Return the current OUTPUT with a mantissa precision of PRECISION.\n *\n * @param {string} output - output being build in the process of formatting\n * @param {number} value - number being currently formatted\n * @param {boolean} optionalMantissa - if `true`, the mantissa is omitted when it's only zeroes\n * @param {number} precision - desired precision of the mantissa\n * @param {boolean} trim - if `true`, trailing zeroes are removed from the mantissa\n * @return {string}\n */\nfunction setMantissaPrecision(output, value, optionalMantissa, precision, trim) {\n    if (precision === -1) {\n        return output;\n    }\n\n    let result = toFixed(value, precision);\n    let [currentCharacteristic, currentMantissa = \"\"] = result.toString().split(\".\");\n\n    if (currentMantissa.match(/^0+$/) && (optionalMantissa || trim)) {\n        return currentCharacteristic;\n    }\n\n    let hasTrailingZeroes = currentMantissa.match(/0+$/);\n    if (trim && hasTrailingZeroes) {\n        return `${currentCharacteristic}.${currentMantissa.toString().slice(0, hasTrailingZeroes.index)}`;\n    }\n\n    return result.toString();\n}\n\n/**\n * Return the current OUTPUT with a characteristic precision of PRECISION.\n *\n * @param {string} output - output being build in the process of formatting\n * @param {number} value - number being currently formatted\n * @param {boolean} optionalCharacteristic - `true` if the characteristic is omitted when it's only zeroes\n * @param {number} precision - desired precision of the characteristic\n * @return {string}\n */\nfunction setCharacteristicPrecision(output, value, optionalCharacteristic, precision) {\n    let result = output;\n    let [currentCharacteristic, currentMantissa] = result.toString().split(\".\");\n\n    if (currentCharacteristic.match(/^-?0$/) && optionalCharacteristic) {\n        if (!currentMantissa) {\n            return currentCharacteristic.replace(\"0\", \"\");\n        }\n\n        return `${currentCharacteristic.replace(\"0\", \"\")}.${currentMantissa}`;\n    }\n\n    if (currentCharacteristic.length < precision) {\n        let missingZeros = precision - currentCharacteristic.length;\n        for (let i = 0; i < missingZeros; i++) {\n            result = `0${result}`;\n        }\n    }\n\n    return result.toString();\n}\n\n/**\n * Return the indexes where are the group separations after splitting\n * `totalLength` in group of `groupSize` size.\n * Important: we start grouping from the right hand side.\n *\n * @param {number} totalLength - total length of the characteristic to split\n * @param {number} groupSize - length of each group\n * @return {[number]}\n */\nfunction indexesOfGroupSpaces(totalLength, groupSize) {\n    let result = [];\n    let counter = 0;\n    for (let i = totalLength; i > 0; i--) {\n        if (counter === groupSize) {\n            result.unshift(i);\n            counter = 0;\n        }\n        counter++;\n    }\n\n    return result;\n}\n\n/**\n * Replace the decimal separator with DECIMALSEPARATOR and insert thousand\n * separators.\n *\n * @param {string} output - output being build in the process of formatting\n * @param {number} value - number being currently formatted\n * @param {boolean} thousandSeparated - `true` if the characteristic must be separated\n * @param {globalState} state - shared state of the library\n * @param {string} decimalSeparator - string to use as decimal separator\n * @return {string}\n */\nfunction replaceDelimiters(output, value, thousandSeparated, state, decimalSeparator) {\n    let delimiters = state.currentDelimiters();\n    let thousandSeparator = delimiters.thousands;\n    decimalSeparator = decimalSeparator || delimiters.decimal;\n    let thousandsSize = delimiters.thousandsSize || 3;\n\n    let result = output.toString();\n    let characteristic = result.split(\".\")[0];\n    let mantissa = result.split(\".\")[1];\n\n    if (thousandSeparated) {\n        if (value < 0) {\n            // Remove the minus sign\n            characteristic = characteristic.slice(1);\n        }\n\n        let indexesToInsertThousandDelimiters = indexesOfGroupSpaces(characteristic.length, thousandsSize);\n        indexesToInsertThousandDelimiters.forEach((position, index) => {\n            characteristic = characteristic.slice(0, position + index) + thousandSeparator + characteristic.slice(position + index);\n        });\n\n        if (value < 0) {\n            // Add back the minus sign\n            characteristic = `-${characteristic}`;\n        }\n    }\n\n    if (!mantissa) {\n        result = characteristic;\n    } else {\n        result = characteristic + decimalSeparator + mantissa;\n    }\n    return result;\n}\n\n/**\n * Insert the provided ABBREVIATION at the end of OUTPUT.\n *\n * @param {string} output - output being build in the process of formatting\n * @param {string} abbreviation - abbreviation to append\n * @return {*}\n */\nfunction insertAbbreviation(output, abbreviation) {\n    return output + abbreviation;\n}\n\n/**\n * Insert the positive/negative sign according to the NEGATIVE flag.\n * If the value is negative but still output as 0, the negative sign is removed.\n *\n * @param {string} output - output being build in the process of formatting\n * @param {number} value - number being currently formatted\n * @param {string} negative - flag for the negative form (\"sign\" or \"parenthesis\")\n * @return {*}\n */\nfunction insertSign(output, value, negative) {\n    if (value === 0) {\n        return output;\n    }\n\n    if (+output === 0) {\n        return output.replace(\"-\", \"\");\n    }\n\n    if (value > 0) {\n        return `+${output}`;\n    }\n\n    if (negative === \"sign\") {\n        return output;\n    }\n\n    return `(${output.replace(\"-\", \"\")})`;\n}\n\n/**\n * Insert the provided PREFIX at the start of OUTPUT.\n *\n * @param {string} output - output being build in the process of formatting\n * @param {string} prefix - abbreviation to prepend\n * @return {*}\n */\nfunction insertPrefix(output, prefix) {\n    return prefix + output;\n}\n\n/**\n * Insert the provided POSTFIX at the end of OUTPUT.\n *\n * @param {string} output - output being build in the process of formatting\n * @param {string} postfix - abbreviation to append\n * @return {*}\n */\nfunction insertPostfix(output, postfix) {\n    return output + postfix;\n}\n\n/**\n * Format the provided INSTANCE as a number using the PROVIDEDFORMAT,\n * and the STATE.\n * This is the key method of the framework!\n *\n * @param {Numbro} instance - numbro instance to format\n * @param {{}} [providedFormat] - specification for formatting\n * @param {globalState} state - shared state of the library\n * @param {string} decimalSeparator - string to use as decimal separator\n * @param {{}} defaults - Set of default values used for formatting\n * @return {string}\n */\nfunction formatNumber({instance, providedFormat, state = globalState, decimalSeparator, defaults = state.currentDefaults()}) {\n    let value = instance._value;\n\n    if (value === 0 && state.hasZeroFormat()) {\n        return state.getZeroFormat();\n    }\n\n    if (!isFinite(value)) {\n        return value.toString();\n    }\n\n    let options = Object.assign({}, defaultOptions, defaults, providedFormat);\n\n    let totalLength = options.totalLength;\n    let characteristicPrecision = totalLength ? 0 : options.characteristic;\n    let optionalCharacteristic = options.optionalCharacteristic;\n    let forceAverage = options.forceAverage;\n    let average = !!totalLength || !!forceAverage || options.average;\n\n    // default when averaging is to chop off decimals\n    let mantissaPrecision = totalLength ? -1 : (average && providedFormat.mantissa === undefined ? 0 : options.mantissa);\n    let optionalMantissa = totalLength ? false : (providedFormat.optionalMantissa === undefined ? mantissaPrecision === -1 : options.optionalMantissa);\n    let trimMantissa = options.trimMantissa;\n    let thousandSeparated = options.thousandSeparated;\n    let spaceSeparated = options.spaceSeparated;\n    let negative = options.negative;\n    let forceSign = options.forceSign;\n    let exponential = options.exponential;\n\n    let abbreviation = \"\";\n\n    if (average) {\n        let data = computeAverage({\n            value,\n            forceAverage,\n            abbreviations: state.currentAbbreviations(),\n            spaceSeparated: spaceSeparated,\n            totalLength\n        });\n\n        value = data.value;\n        abbreviation += data.abbreviation;\n\n        if (totalLength) {\n            mantissaPrecision = data.mantissaPrecision;\n        }\n    }\n\n    if (exponential) {\n        let data = computeExponential({\n            value,\n            characteristicPrecision\n        });\n\n        value = data.value;\n        abbreviation = data.abbreviation + abbreviation;\n    }\n\n    let output = setMantissaPrecision(value.toString(), value, optionalMantissa, mantissaPrecision, trimMantissa);\n    output = setCharacteristicPrecision(output, value, optionalCharacteristic, characteristicPrecision);\n    output = replaceDelimiters(output, value, thousandSeparated, state, decimalSeparator);\n\n    if (average || exponential) {\n        output = insertAbbreviation(output, abbreviation);\n    }\n\n    if (forceSign || value < 0) {\n        output = insertSign(output, value, negative);\n    }\n\n    return output;\n}\n\n/**\n * If FORMAT is non-null and not just an output, return FORMAT.\n * Return DEFAULTFORMAT otherwise.\n *\n * @param providedFormat\n * @param defaultFormat\n */\nfunction formatOrDefault(providedFormat, defaultFormat) {\n    if (!providedFormat) {\n        return defaultFormat;\n    }\n\n    let keys = Object.keys(providedFormat);\n    if (keys.length === 1 && keys[0] === \"output\") {\n        return defaultFormat;\n    }\n\n    return providedFormat;\n}\n\nmodule.exports = (numbro) => ({\n    format: (...args) => format(...args, numbro),\n    getByteUnit: (...args) => getByteUnit(...args, numbro),\n    getBinaryByteUnit: (...args) => getBinaryByteUnit(...args, numbro),\n    getDecimalByteUnit: (...args) => getDecimalByteUnit(...args, numbro),\n    formatOrDefault\n});\n", "/*!\n * Copyright (c) 2017 Benjamin Van Ryseghem<benjamin@vanryseghem.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nconst enUS = require(\"./en-US\");\nconst validating = require(\"./validating\");\nconst parsing = require(\"./parsing\");\n\nlet state = {};\n\nlet currentLanguageTag = undefined;\nlet languages = {};\n\nlet zeroFormat = null;\n\nlet globalDefaults = {};\n\nfunction chooseLanguage(tag) { currentLanguageTag = tag; }\n\nfunction currentLanguageData() { return languages[currentLanguageTag]; }\n\n/**\n * Return all the register languages\n *\n * @return {{}}\n */\nstate.languages = () => Object.assign({}, languages);\n\n//\n// Current language accessors\n//\n\n/**\n * Return the current language tag\n *\n * @return {string}\n */\nstate.currentLanguage = () => currentLanguageTag;\n\n/**\n * Return the current language currency data\n *\n * @return {{}}\n */\nstate.currentCurrency = () => currentLanguageData().currency;\n\n/**\n * Return the current language abbreviations data\n *\n * @return {{}}\n */\nstate.currentAbbreviations = () => currentLanguageData().abbreviations;\n\n/**\n * Return the current language delimiters data\n *\n * @return {{}}\n */\nstate.currentDelimiters = () => currentLanguageData().delimiters;\n\n/**\n * Return the current language ordinal function\n *\n * @return {function}\n */\nstate.currentOrdinal = () => currentLanguageData().ordinal;\n\n//\n// Defaults\n//\n\n/**\n * Return the current formatting defaults.\n * Use first uses the current language default, then fallback to the globally defined defaults.\n *\n * @return {{}}\n */\nstate.currentDefaults = () => Object.assign({}, currentLanguageData().defaults, globalDefaults);\n\n/**\n * Return the ordinal default-format.\n * Use first uses the current language ordinal default, then fallback to the regular defaults.\n *\n * @return {{}}\n */\nstate.currentOrdinalDefaultFormat = () => Object.assign({}, state.currentDefaults(), currentLanguageData().ordinalFormat);\n\n/**\n * Return the byte default-format.\n * Use first uses the current language byte default, then fallback to the regular defaults.\n *\n * @return {{}}\n */\nstate.currentByteDefaultFormat = () => Object.assign({}, state.currentDefaults(), currentLanguageData().byteFormat);\n\n/**\n * Return the percentage default-format.\n * Use first uses the current language percentage default, then fallback to the regular defaults.\n *\n * @return {{}}\n */\nstate.currentPercentageDefaultFormat = () => Object.assign({}, state.currentDefaults(), currentLanguageData().percentageFormat);\n\n/**\n * Return the currency default-format.\n * Use first uses the current language currency default, then fallback to the regular defaults.\n *\n * @return {{}}\n */\nstate.currentCurrencyDefaultFormat = () => Object.assign({}, state.currentDefaults(), currentLanguageData().currencyFormat);\n\n/**\n * Return the time default-format.\n * Use first uses the current language currency default, then fallback to the regular defaults.\n *\n * @return {{}}\n */\nstate.currentTimeDefaultFormat = () => Object.assign({}, state.currentDefaults(), currentLanguageData().timeFormat);\n\n/**\n * Set the global formatting defaults.\n *\n * @param {{}|string} format - formatting options to use as defaults\n */\nstate.setDefaults = (format) => {\n    format = parsing.parseFormat(format);\n    if (validating.validateFormat(format)) {\n        globalDefaults = format;\n    }\n};\n\n//\n// Zero format\n//\n\n/**\n * Return the format string for 0.\n *\n * @return {string}\n */\nstate.getZeroFormat = () => zeroFormat;\n\n/**\n * Set a STRING to output when the value is 0.\n *\n * @param {{}|string} string - string to set\n */\nstate.setZeroFormat = (string) => zeroFormat = typeof(string) === \"string\" ? string : null;\n\n/**\n * Return true if a format for 0 has been set already.\n *\n * @return {boolean}\n */\nstate.hasZeroFormat = () => zeroFormat !== null;\n\n//\n// Getters/Setters\n//\n\n/**\n * Return the language data for the provided TAG.\n * Return the current language data if no tag is provided.\n *\n * Throw an error if the tag doesn't match any registered language.\n *\n * @param {string} [tag] - language tag of a registered language\n * @return {{}}\n */\nstate.languageData = (tag) => {\n    if (tag) {\n        if (languages[tag]) {\n            return languages[tag];\n        }\n        throw new Error(`Unknown tag \"${tag}\"`);\n    }\n\n    return currentLanguageData();\n};\n\n/**\n * Register the provided DATA as a language if and only if the data is valid.\n * If the data is not valid, an error is thrown.\n *\n * When USELANGUAGE is true, the registered language is then used.\n *\n * @param {{}} data - language data to register\n * @param {boolean} [useLanguage] - `true` if the provided data should become the current language\n */\nstate.registerLanguage = (data, useLanguage = false) => {\n    if (!validating.validateLanguage(data)) {\n        throw new Error(\"Invalid language data\");\n    }\n\n    languages[data.languageTag] = data;\n\n    if (useLanguage) {\n        chooseLanguage(data.languageTag);\n    }\n};\n\n/**\n * Set the current language according to TAG.\n * If TAG doesn't match a registered language, another language matching\n * the \"language\" part of the tag (according to BCP47: https://tools.ietf.org/rfc/bcp/bcp47.txt).\n * If none, the FALLBACKTAG is used. If the FALLBACKTAG doesn't match a register language,\n * `en-US` is finally used.\n *\n * @param tag\n * @param fallbackTag\n */\nstate.setLanguage = (tag, fallbackTag = enUS.languageTag) => {\n    if (!languages[tag]) {\n        let suffix = tag.split(\"-\")[0];\n\n        let matchingLanguageTag = Object.keys(languages).find(each => {\n            return each.split(\"-\")[0] === suffix;\n        });\n\n        if (!languages[matchingLanguageTag]) {\n            chooseLanguage(fallbackTag);\n            return;\n        }\n\n        chooseLanguage(matchingLanguageTag);\n        return;\n    }\n\n    chooseLanguage(tag);\n};\n\nstate.registerLanguage(enUS);\ncurrentLanguageTag = enUS.languageTag;\n\nmodule.exports = state;\n", "/*!\n * Copyright (c) 2017 Benjamin Van Ryseghem<benjamin@vanryseghem.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/**\n * Load languages matching TAGS. Silently pass over the failing load.\n *\n * We assume here that we are in a node environment, so we don't check for it.\n * @param {[String]} tags - list of tags to load\n * @param {Numbro} numbro - the numbro singleton\n */\nfunction loadLanguagesInNode(tags, numbro) {\n    tags.forEach((tag) => {\n        let data = undefined;\n        try {\n            data = require(`../languages/${tag}`);\n        } catch (e) {\n            console.error(`Unable to load \"${tag}\". No matching language file found.`); // eslint-disable-line no-console\n        }\n\n        if (data) {\n            numbro.registerLanguage(data);\n        }\n    });\n}\n\nmodule.exports = (numbro) => ({\n    loadLanguagesInNode: (tags) => loadLanguagesInNode(tags, numbro)\n});\n", "/*!\n * Copyright (c) 2017 Benjamin Van Ryseghem<benjamin@vanryseghem.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nconst BigNumber = require(\"bignumber.js\");\n\n/**\n * Add a number or a numbro to N.\n *\n * @param {Numbro} n - augend\n * @param {number|Numbro} other - addend\n * @param {numbro} numbro - numbro singleton\n * @return {Numbro} n\n */\nfunction add(n, other, numbro) {\n    let value = new BigNumber(n._value);\n    let otherValue = other;\n\n    if (numbro.isNumbro(other)) {\n        otherValue = other._value;\n    }\n\n    otherValue = new BigNumber(otherValue);\n\n    n._value = value.plus(otherValue).toNumber();\n    return n;\n}\n\n/**\n * Subtract a number or a numbro from N.\n *\n * @param {Numbro} n - minuend\n * @param {number|Numbro} other - subtrahend\n * @param {numbro} numbro - numbro singleton\n * @return {Numbro} n\n */\nfunction subtract(n, other, numbro) {\n    let value = new BigNumber(n._value);\n    let otherValue = other;\n\n    if (numbro.isNumbro(other)) {\n        otherValue = other._value;\n    }\n\n    otherValue = new BigNumber(otherValue);\n\n    n._value = value.minus(otherValue).toNumber();\n    return n;\n}\n\n/**\n * Multiply N by a number or a numbro.\n *\n * @param {Numbro} n - multiplicand\n * @param {number|Numbro} other - multiplier\n * @param {numbro} numbro - numbro singleton\n * @return {Numbro} n\n */\nfunction multiply(n, other, numbro) {\n    let value = new BigNumber(n._value);\n    let otherValue = other;\n\n    if (numbro.isNumbro(other)) {\n        otherValue = other._value;\n    }\n\n    otherValue = new BigNumber(otherValue);\n\n    n._value = value.times(otherValue).toNumber();\n    return n;\n}\n\n/**\n * Divide N by a number or a numbro.\n *\n * @param {Numbro} n - dividend\n * @param {number|Numbro} other - divisor\n * @param {numbro} numbro - numbro singleton\n * @return {Numbro} n\n */\nfunction divide(n, other, numbro) {\n    let value = new BigNumber(n._value);\n    let otherValue = other;\n\n    if (numbro.isNumbro(other)) {\n        otherValue = other._value;\n    }\n\n    otherValue = new BigNumber(otherValue);\n\n    n._value = value.dividedBy(otherValue).toNumber();\n    return n;\n}\n\n/**\n * Set N to the OTHER (or the value of OTHER when it's a numbro instance).\n *\n * @param {Numbro} n - numbro instance to mutate\n * @param {number|Numbro} other - new value to assign to N\n * @param {numbro} numbro - numbro singleton\n * @return {Numbro} n\n */\nfunction set (n, other, numbro) {\n    let value = other;\n\n    if (numbro.isNumbro(other)) {\n        value = other._value;\n    }\n\n    n._value = value;\n    return n;\n}\n\n/**\n * Return the distance between N and OTHER.\n *\n * @param {Numbro} n\n * @param {number|Numbro} other\n * @param {numbro} numbro - numbro singleton\n * @return {number}\n */\nfunction difference(n, other, numbro) {\n    let clone = numbro(n._value);\n    subtract(clone, other, numbro);\n\n    return Math.abs(clone._value);\n}\n\nmodule.exports = numbro => ({\n    add: (n, other) => add(n, other, numbro),\n    subtract: (n, other) => subtract(n, other, numbro),\n    multiply: (n, other) => multiply(n, other, numbro),\n    divide: (n, other) => divide(n, other, numbro),\n    set: (n, other) => set(n, other, numbro),\n    difference: (n, other) => difference(n, other, numbro)\n});\n", "/*!\n * Copyright (c) 2017 Benjamin Van Ryseghem<benjamin@vanryseghem.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nconst VERSION = \"2.1.2\";\n\nconst globalState = require(\"./globalState\");\nconst validator = require(\"./validating\");\nconst loader = require(\"./loading\")(numbro);\nconst unformatter = require(\"./unformatting\");\nlet formatter = require(\"./formatting\")(numbro);\nlet manipulate = require(\"./manipulating\")(numbro);\nconst parsing = require(\"./parsing\");\n\nclass Numbro {\n    constructor(number) {\n        this._value = number;\n    }\n\n    clone() { return numbro(this._value); }\n\n    format(format = {}) { return formatter.format(this, format); }\n\n    formatCurrency(format) {\n        if (typeof format === \"string\") {\n            format = parsing.parseFormat(format);\n        }\n        format = formatter.formatOrDefault(format, globalState.currentCurrencyDefaultFormat());\n        format.output = \"currency\";\n        return formatter.format(this, format);\n    }\n\n    formatTime(format = {}) {\n        format.output = \"time\";\n        return formatter.format(this, format);\n    }\n\n    binaryByteUnits() { return formatter.getBinaryByteUnit(this);}\n\n    decimalByteUnits() { return formatter.getDecimalByteUnit(this);}\n\n    byteUnits() { return formatter.getByteUnit(this);}\n\n    difference(other) { return manipulate.difference(this, other); }\n\n    add(other) { return manipulate.add(this, other); }\n\n    subtract(other) { return manipulate.subtract(this, other); }\n\n    multiply(other) { return manipulate.multiply(this, other); }\n\n    divide(other) { return manipulate.divide(this, other); }\n\n    set(input) { return manipulate.set(this, normalizeInput(input)); }\n\n    value() { return this._value; }\n\n    valueOf() { return this._value; }\n}\n\n/**\n * Make its best to convert input into a number.\n *\n * @param {numbro|string|number} input - Input to convert\n * @return {number}\n */\nfunction normalizeInput(input) {\n    let result = input;\n    if (numbro.isNumbro(input)) {\n        result = input._value;\n    } else if (typeof input === \"string\") {\n        result = numbro.unformat(input);\n    } else if (isNaN(input)) {\n        result = NaN;\n    }\n\n    return result;\n}\n\nfunction numbro(input) {\n    return new Numbro(normalizeInput(input));\n}\n\nnumbro.version = VERSION;\n\nnumbro.isNumbro = function(object) {\n    return object instanceof Numbro;\n};\n\n//\n// `numbro` static methods\n//\n\nnumbro.language = globalState.currentLanguage;\nnumbro.registerLanguage = globalState.registerLanguage;\nnumbro.setLanguage = globalState.setLanguage;\nnumbro.languages = globalState.languages;\nnumbro.languageData = globalState.languageData;\nnumbro.zeroFormat = globalState.setZeroFormat;\nnumbro.defaultFormat = globalState.currentDefaults;\nnumbro.setDefaults = globalState.setDefaults;\nnumbro.defaultCurrencyFormat = globalState.currentCurrencyDefaultFormat;\nnumbro.validate = validator.validate;\nnumbro.loadLanguagesInNode = loader.loadLanguagesInNode;\nnumbro.unformat = unformatter.unformat;\n\nmodule.exports = numbro;\n", "/*!\n * Copyright (c) 2017 Benjamin Van Ryseghem<benjamin@vanryseghem.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/**\n * Parse the format STRING looking for a prefix. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n * @return {string} - format\n */\nfunction parsePrefix(string, result) {\n    let match = string.match(/^{([^}]*)}/);\n    if (match) {\n        result.prefix = match[1];\n        return string.slice(match[0].length);\n    }\n\n    return string;\n}\n\n/**\n * Parse the format STRING looking for a postfix. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n * @return {string} - format\n */\nfunction parsePostfix(string, result) {\n    let match = string.match(/{([^}]*)}$/);\n    if (match) {\n        result.postfix = match[1];\n\n        return string.slice(0, -match[0].length);\n    }\n\n    return string;\n}\n\n/**\n * Parse the format STRING looking for the output value. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n */\nfunction parseOutput(string, result) {\n    if (string.indexOf(\"$\") !== -1) {\n        result.output = \"currency\";\n        return;\n    }\n\n    if (string.indexOf(\"%\") !== -1) {\n        result.output = \"percent\";\n        return;\n    }\n\n    if (string.indexOf(\"bd\") !== -1) {\n        result.output = \"byte\";\n        result.base = \"general\";\n        return;\n    }\n\n    if (string.indexOf(\"b\") !== -1) {\n        result.output = \"byte\";\n        result.base = \"binary\";\n        return;\n\n    }\n\n    if (string.indexOf(\"d\") !== -1) {\n        result.output = \"byte\";\n        result.base = \"decimal\";\n        return;\n\n    }\n\n    if (string.indexOf(\":\") !== -1) {\n        result.output = \"time\";\n        return;\n    }\n\n    if (string.indexOf(\"o\") !== -1) {\n        result.output = \"ordinal\";\n    }\n}\n\n/**\n * Parse the format STRING looking for the thousand separated value. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n * @return {string} - format\n */\nfunction parseThousandSeparated(string, result) {\n    if (string.indexOf(\",\") !== -1) {\n        result.thousandSeparated = true;\n    }\n}\n\n/**\n * Parse the format STRING looking for the space separated value. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n * @return {string} - format\n */\nfunction parseSpaceSeparated(string, result) {\n    if (string.indexOf(\" \") !== -1) {\n        result.spaceSeparated = true;\n    }\n}\n\n/**\n * Parse the format STRING looking for the total length. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n * @return {string} - format\n */\nfunction parseTotalLength(string, result) {\n    let match = string.match(/[1-9]+[0-9]*/);\n\n    if (match) {\n        result.totalLength = +match[0];\n    }\n}\n\n/**\n * Parse the format STRING looking for the characteristic length. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n * @return {string} - format\n */\nfunction parseCharacteristic(string, result) {\n    let characteristic = string.split(\".\")[0];\n    let match = characteristic.match(/0+/);\n    if (match) {\n        result.characteristic = match[0].length;\n    }\n}\n\n/**\n * Parse the format STRING looking for the mantissa length. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n * @return {string} - format\n */\nfunction parseMantissa(string, result) {\n    let mantissa = string.split(\".\")[1];\n    if (mantissa) {\n        let match = mantissa.match(/0+/);\n        if (match) {\n            result.mantissa = match[0].length;\n        }\n    }\n}\n\n/**\n * Parse the format STRING looking for the average value. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n * @return {string} - format\n */\nfunction parseAverage(string, result) {\n    if (string.indexOf(\"a\") !== -1) {\n        result.average = true;\n    }\n}\n\n/**\n * Parse the format STRING looking for a forced average precision. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n * @return {string} - format\n */\nfunction parseForceAverage(string, result) {\n    if (string.indexOf(\"K\") !== -1) {\n        result.forceAverage = \"thousand\";\n    } else if (string.indexOf(\"M\") !== -1) {\n        result.forceAverage = \"million\";\n    } else if (string.indexOf(\"B\") !== -1) {\n        result.forceAverage = \"billion\";\n    } else if (string.indexOf(\"T\") !== -1) {\n        result.forceAverage = \"trillion\";\n    }\n}\n\n/**\n * Parse the format STRING finding if the mantissa is optional. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n * @return {string} - format\n */\nfunction parseOptionalMantissa(string, result) {\n    if (string.match(/\\[\\.]/)) {\n        result.optionalMantissa = true;\n    } else if (string.match(/\\./)) {\n        result.optionalMantissa = false;\n    }\n}\n\n/**\n * Parse the format STRING finding if the characteristic is optional. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n * @return {string} - format\n */\nfunction parseOptionalCharacteristic(string, result) {\n    if (string.indexOf(\".\") !== -1) {\n        let characteristic = string.split(\".\")[0];\n        result.optionalCharacteristic = characteristic.indexOf(\"0\") === -1;\n    }\n}\n\n/**\n * Parse the format STRING looking for the negative format. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n * @return {string} - format\n */\nfunction parseNegative(string, result) {\n    if (string.match(/^\\+?\\([^)]*\\)$/)) {\n        result.negative = \"parenthesis\";\n    }\n    if (string.match(/^\\+?-/)) {\n        result.negative = \"sign\";\n    }\n}\n\n/**\n * Parse the format STRING finding if the sign is mandatory. Append it to RESULT when found.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n */\nfunction parseForceSign(string, result) {\n    if (string.match(/^\\+/)) {\n        result.forceSign = true;\n    }\n}\n\n/**\n * Parse the format STRING and accumulating the values ie RESULT.\n *\n * @param {string} string - format\n * @param {NumbroFormat} result - Result accumulator\n * @return {NumbroFormat} - format\n */\nfunction parseFormat(string, result = {}) {\n    if (typeof string !== \"string\") {\n        return string;\n    }\n\n    string = parsePrefix(string, result);\n    string = parsePostfix(string, result);\n    parseOutput(string, result);\n    parseTotalLength(string, result);\n    parseCharacteristic(string, result);\n    parseOptionalCharacteristic(string, result);\n    parseAverage(string, result);\n    parseForceAverage(string, result);\n    parseMantissa(string, result);\n    parseOptionalMantissa(string, result);\n    parseThousandSeparated(string, result);\n    parseSpaceSeparated(string, result);\n    parseNegative(string, result);\n    parseForceSign(string, result);\n\n    return result;\n}\n\nmodule.exports = {\n    parseFormat\n};\n", "/*!\n * Copyright (c) 2017 Benjamin Van Ryseghem<benjamin@vanryseghem.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nconst allSuffixes = [\n    {key: \"ZiB\", factor: Math.pow(1024, 7)},\n    {key: \"ZB\", factor: Math.pow(1000, 7)},\n    {key: \"YiB\", factor: Math.pow(1024, 8)},\n    {key: \"YB\", factor: Math.pow(1000, 8)},\n    {key: \"TiB\", factor: Math.pow(1024, 4)},\n    {key: \"TB\", factor: Math.pow(1000, 4)},\n    {key: \"PiB\", factor: Math.pow(1024, 5)},\n    {key: \"PB\", factor: Math.pow(1000, 5)},\n    {key: \"MiB\", factor: Math.pow(1024, 2)},\n    {key: \"MB\", factor: Math.pow(1000, 2)},\n    {key: \"KiB\", factor: Math.pow(1024, 1)},\n    {key: \"KB\", factor: Math.pow(1000, 1)},\n    {key: \"GiB\", factor: Math.pow(1024, 3)},\n    {key: \"GB\", factor: Math.pow(1000, 3)},\n    {key: \"EiB\", factor: Math.pow(1024, 6)},\n    {key: \"EB\", factor: Math.pow(1000, 6)},\n    {key: \"B\", factor: 1}\n];\n\n/**\n * Generate a RegExp where S get all RegExp specific characters escaped.\n *\n * @param {string} s - string representing a RegExp\n * @return {string}\n */\nfunction escapeRegExp(s) {\n    return s.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n}\n\n/**\n * Recursively compute the unformatted value.\n *\n * @param {string} inputString - string to unformat\n * @param {*} delimiters - Delimiters used to generate the inputString\n * @param {string} [currencySymbol] - symbol used for currency while generating the inputString\n * @param {function} ordinal - function used to generate an ordinal out of a number\n * @param {string} zeroFormat - string representing zero\n * @param {*} abbreviations - abbreviations used while generating the inputString\n * @param {NumbroFormat} format - format used while generating the inputString\n * @return {number|undefined}\n */\nfunction computeUnformattedValue(inputString, delimiters, currencySymbol = \"\", ordinal, zeroFormat, abbreviations, format) {\n    if (!isNaN(+inputString)) {\n        return +inputString;\n    }\n\n    let stripped = \"\";\n    // Negative\n\n    let newInput = inputString.replace(/(^[^(]*)\\((.*)\\)([^)]*$)/, \"$1$2$3\");\n\n    if (newInput !== inputString) {\n        return -1 * computeUnformattedValue(newInput, delimiters, currencySymbol, ordinal, zeroFormat, abbreviations, format);\n    }\n\n    // Byte\n\n    for (let i = 0; i < allSuffixes.length; i++) {\n        let suffix = allSuffixes[i];\n        stripped = inputString.replace(suffix.key, \"\");\n\n        if (stripped !== inputString) {\n            return computeUnformattedValue(stripped, delimiters, currencySymbol, ordinal, zeroFormat, abbreviations, format) * suffix.factor;\n        }\n    }\n\n    // Percent\n\n    stripped = inputString.replace(\"%\", \"\");\n\n    if (stripped !== inputString) {\n        return computeUnformattedValue(stripped, delimiters, currencySymbol, ordinal, zeroFormat, abbreviations, format) / 100;\n    }\n\n    // Ordinal\n\n    let possibleOrdinalValue = parseFloat(inputString);\n\n    if (isNaN(possibleOrdinalValue)) {\n        return undefined;\n    }\n\n    let ordinalString = ordinal(possibleOrdinalValue);\n    if (ordinalString && ordinalString !== \".\") { // if ordinal is \".\" it will be caught next round in the +inputString\n        stripped = inputString.replace(new RegExp(`${escapeRegExp(ordinalString)}$`), \"\");\n\n        if (stripped !== inputString) {\n            return computeUnformattedValue(stripped, delimiters, currencySymbol, ordinal, zeroFormat, abbreviations, format);\n        }\n    }\n\n    // Average\n\n    let inversedAbbreviations = {};\n    Object.keys(abbreviations).forEach((key) => {\n        inversedAbbreviations[abbreviations[key]] = key;\n    });\n\n    let abbreviationValues = Object.keys(inversedAbbreviations).sort().reverse();\n    let numberOfAbbreviations = abbreviationValues.length;\n\n    for (let i = 0; i < numberOfAbbreviations; i++) {\n        let value = abbreviationValues[i];\n        let key = inversedAbbreviations[value];\n\n        stripped = inputString.replace(value, \"\");\n        if (stripped !== inputString) {\n            let factor = undefined;\n            switch (key) { // eslint-disable-line default-case\n                case \"thousand\":\n                    factor = Math.pow(10, 3);\n                    break;\n                case \"million\":\n                    factor = Math.pow(10, 6);\n                    break;\n                case \"billion\":\n                    factor = Math.pow(10, 9);\n                    break;\n                case \"trillion\":\n                    factor = Math.pow(10, 12);\n                    break;\n            }\n            return computeUnformattedValue(stripped, delimiters, currencySymbol, ordinal, zeroFormat, abbreviations, format) * factor;\n        }\n    }\n\n    return undefined;\n}\n\n/**\n * Removes in one pass all formatting symbols.\n *\n * @param {string} inputString - string to unformat\n * @param {*} delimiters - Delimiters used to generate the inputString\n * @param {string} [currencySymbol] - symbol used for currency while generating the inputString\n * @return {string}\n */\nfunction removeFormattingSymbols(inputString, delimiters, currencySymbol = \"\") {\n    // Currency\n\n    let stripped = inputString.replace(currencySymbol, \"\");\n\n    // Thousand separators\n\n    stripped = stripped.replace(new RegExp(`([0-9])${escapeRegExp(delimiters.thousands)}([0-9])`, \"g\"), \"$1$2\");\n\n    // Decimal\n\n    stripped = stripped.replace(delimiters.decimal, \".\");\n\n    return stripped;\n}\n\n/**\n * Unformat a numbro-generated string to retrieve the original value.\n *\n * @param {string} inputString - string to unformat\n * @param {*} delimiters - Delimiters used to generate the inputString\n * @param {string} [currencySymbol] - symbol used for currency while generating the inputString\n * @param {function} ordinal - function used to generate an ordinal out of a number\n * @param {string} zeroFormat - string representing zero\n * @param {*} abbreviations - abbreviations used while generating the inputString\n * @param {NumbroFormat} format - format used while generating the inputString\n * @return {number|undefined}\n */\nfunction unformatValue(inputString, delimiters, currencySymbol = \"\", ordinal, zeroFormat, abbreviations, format) {\n    if (inputString === \"\") {\n        return undefined;\n    }\n\n    // Zero Format\n\n    if (inputString === zeroFormat) {\n        return 0;\n    }\n\n    let value = removeFormattingSymbols(inputString, delimiters, currencySymbol);\n    return computeUnformattedValue(value, delimiters, currencySymbol, ordinal, zeroFormat, abbreviations, format);\n}\n\n/**\n * Check if the INPUTSTRING represents a time.\n *\n * @param {string} inputString - string to check\n * @param {*} delimiters - Delimiters used while generating the inputString\n * @return {boolean}\n */\nfunction matchesTime(inputString, delimiters) {\n    let separators = inputString.indexOf(\":\") && delimiters.thousands !== \":\";\n\n    if (!separators) {\n        return false;\n    }\n\n    let segments = inputString.split(\":\");\n    if (segments.length !== 3) {\n        return false;\n    }\n\n    let hours = +segments[0];\n    let minutes = +segments[1];\n    let seconds = +segments[2];\n\n    return !isNaN(hours) && !isNaN(minutes) && !isNaN(seconds);\n}\n\n/**\n * Unformat a numbro-generated string representing a time to retrieve the original value.\n *\n * @param {string} inputString - string to unformat\n * @return {number}\n */\nfunction unformatTime(inputString) {\n    let segments = inputString.split(\":\");\n\n    let hours = +segments[0];\n    let minutes = +segments[1];\n    let seconds = +segments[2];\n\n    return seconds + 60 * minutes + 3600 * hours;\n}\n\n/**\n * Unformat a numbro-generated string to retrieve the original value.\n *\n * @param {string} inputString - string to unformat\n * @param {NumbroFormat} format - format used  while generating the inputString\n * @return {number}\n */\nfunction unformat(inputString, format) {\n    // Avoid circular references\n    const globalState = require(\"./globalState\");\n\n    let delimiters = globalState.currentDelimiters();\n    let currencySymbol = globalState.currentCurrency().symbol;\n    let ordinal = globalState.currentOrdinal();\n    let zeroFormat = globalState.getZeroFormat();\n    let abbreviations = globalState.currentAbbreviations();\n\n    let value = undefined;\n\n    if (typeof inputString === \"string\") {\n        if (matchesTime(inputString, delimiters)) {\n            value = unformatTime(inputString);\n        } else {\n            value = unformatValue(inputString, delimiters, currencySymbol, ordinal, zeroFormat, abbreviations, format);\n        }\n    } else if (typeof inputString === \"number\") {\n        value = inputString;\n    } else {\n        return undefined;\n    }\n\n    if (value === undefined) {\n        return undefined;\n    }\n\n    return value;\n}\n\nmodule.exports = {\n    unformat\n};\n", "/*!\n * Copyright (c) 2017 Benjamin Van Ryseghem<benjamin@vanryseghem.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nlet unformatter = require(\"./unformatting\");\n\n// Simplified regexp supporting only `language`, `script`, and `region`\nconst bcp47RegExp = /^[a-z]{2,3}(-[a-zA-Z]{4})?(-([A-Z]{2}|[0-9]{3}))?$/;\n\nconst validOutputValues = [\n    \"currency\",\n    \"percent\",\n    \"byte\",\n    \"time\",\n    \"ordinal\",\n    \"number\"\n];\n\nconst validForceAverageValues = [\n    \"trillion\",\n    \"billion\",\n    \"million\",\n    \"thousand\"\n];\n\nconst validCurrencyPosition = [\n    \"prefix\",\n    \"infix\",\n    \"postfix\"\n];\n\nconst validNegativeValues = [\n    \"sign\",\n    \"parenthesis\"\n];\n\nconst validMandatoryAbbreviations = {\n    type: \"object\",\n    children: {\n        thousand: {\n            type: \"string\",\n            mandatory: true\n        },\n        million: {\n            type: \"string\",\n            mandatory: true\n        },\n        billion: {\n            type: \"string\",\n            mandatory: true\n        },\n        trillion: {\n            type: \"string\",\n            mandatory: true\n        }\n    },\n    mandatory: true\n};\n\nconst validAbbreviations = {\n    type: \"object\",\n    children: {\n        thousand: \"string\",\n        million: \"string\",\n        billion: \"string\",\n        trillion: \"string\"\n    }\n};\n\nconst validBaseValues = [\n    \"decimal\",\n    \"binary\",\n    \"general\"\n];\n\nconst validFormat = {\n    output: {\n        type: \"string\",\n        validValues: validOutputValues\n    },\n    base: {\n        type: \"string\",\n        validValues: validBaseValues,\n        restriction: (number, format) => format.output === \"byte\",\n        message: \"`base` must be provided only when the output is `byte`\",\n        mandatory: (format) => format.output === \"byte\"\n    },\n    characteristic: {\n        type: \"number\",\n        restriction: (number) => number >= 0,\n        message: \"value must be positive\"\n    },\n    prefix: \"string\",\n    postfix: \"string\",\n    forceAverage: {\n        type: \"string\",\n        validValues: validForceAverageValues\n    },\n    average: \"boolean\",\n    currencyPosition: {\n        type: \"string\",\n        validValues: validCurrencyPosition\n    },\n    currencySymbol: \"string\",\n    totalLength: {\n        type: \"number\",\n        restrictions: [\n            {\n                restriction: (number) => number >= 0,\n                message: \"value must be positive\"\n            },\n            {\n                restriction: (number, format) => !format.exponential,\n                message: \"`totalLength` is incompatible with `exponential`\"\n            }\n        ]\n    },\n    mantissa: {\n        type: \"number\",\n        restriction: (number) => number >= 0,\n        message: \"value must be positive\"\n    },\n    optionalMantissa: \"boolean\",\n    trimMantissa: \"boolean\",\n    optionalCharacteristic: \"boolean\",\n    thousandSeparated: \"boolean\",\n    spaceSeparated: \"boolean\",\n    abbreviations: validAbbreviations,\n    negative: {\n        type: \"string\",\n        validValues: validNegativeValues\n    },\n    forceSign: \"boolean\",\n    exponential: {\n        type: \"boolean\"\n    },\n    prefixSymbol: {\n        type: \"boolean\",\n        restriction: (number, format) => format.output === \"percent\",\n        message: \"`prefixSymbol` can be provided only when the output is `percent`\"\n    }\n};\n\nconst validLanguage = {\n    languageTag: {\n        type: \"string\",\n        mandatory: true,\n        restriction: (tag) => {\n            return tag.match(bcp47RegExp);\n        },\n        message: \"the language tag must follow the BCP 47 specification (see https://tools.ieft.org/html/bcp47)\"\n    },\n    delimiters: {\n        type: \"object\",\n        children: {\n            thousands: \"string\",\n            decimal: \"string\",\n            thousandsSize: \"number\"\n        },\n        mandatory: true\n    },\n    abbreviations: validMandatoryAbbreviations,\n    spaceSeparated: \"boolean\",\n    ordinal: {\n        type: \"function\",\n        mandatory: true\n    },\n    currency: {\n        type: \"object\",\n        children: {\n            symbol: \"string\",\n            position: \"string\",\n            code: \"string\"\n        },\n        mandatory: true\n    },\n    defaults: \"format\",\n    ordinalFormat: \"format\",\n    byteFormat: \"format\",\n    percentageFormat: \"format\",\n    currencyFormat: \"format\",\n    timeDefaults: \"format\",\n    formats: {\n        type: \"object\",\n        children: {\n            fourDigits: {\n                type: \"format\",\n                mandatory: true\n            },\n            fullWithTwoDecimals: {\n                type: \"format\",\n                mandatory: true\n            },\n            fullWithTwoDecimalsNoCurrency: {\n                type: \"format\",\n                mandatory: true\n            },\n            fullWithNoDecimals: {\n                type: \"format\",\n                mandatory: true\n            }\n        }\n    }\n};\n\n/**\n * Check the validity of the provided input and format.\n * The check is NOT lazy.\n *\n * @param {string|number|Numbro} input - input to check\n * @param {NumbroFormat} format - format to check\n * @return {boolean} True when everything is correct\n */\nfunction validate(input, format) {\n    let validInput = validateInput(input);\n    let isFormatValid = validateFormat(format);\n\n    return validInput && isFormatValid;\n}\n\n/**\n * Check the validity of the numbro input.\n *\n * @param {string|number|Numbro} input - input to check\n * @return {boolean} True when everything is correct\n */\nfunction validateInput(input) {\n    let value = unformatter.unformat(input);\n\n    return !!value;\n}\n\n/**\n * Check the validity of the provided format TOVALIDATE against SPEC.\n *\n * @param {NumbroFormat} toValidate - format to check\n * @param {*} spec - specification against which to check\n * @param {string} prefix - prefix use for error messages\n * @param {boolean} skipMandatoryCheck - `true` when the check for mandatory key must be skipped\n * @return {boolean} True when everything is correct\n */\nfunction validateSpec(toValidate, spec, prefix, skipMandatoryCheck = false) {\n    let results = Object.keys(toValidate).map((key) => {\n        if (!spec[key]) {\n            console.error(`${prefix} Invalid key: ${key}`); // eslint-disable-line no-console\n            return false;\n        }\n\n        let value = toValidate[key];\n        let data = spec[key];\n\n        if (typeof data === \"string\") {\n            data = {type: data};\n        }\n\n        if (data.type === \"format\") { // all formats are partial (a.k.a will be merged with some default values) thus no need to check mandatory values\n            let valid = validateSpec(value, validFormat, `[Validate ${key}]`, true);\n\n            if (!valid) {\n                return false;\n            }\n        } else if (typeof value !== data.type) {\n            console.error(`${prefix} ${key} type mismatched: \"${data.type}\" expected, \"${typeof value}\" provided`); // eslint-disable-line no-console\n            return false;\n        }\n\n        if (data.restrictions && data.restrictions.length) {\n            let length = data.restrictions.length;\n            for (let i = 0; i < length; i++) {\n                let {restriction, message} = data.restrictions[i];\n                if (!restriction(value, toValidate)) {\n                    console.error(`${prefix} ${key} invalid value: ${message}`); // eslint-disable-line no-console\n                    return false;\n                }\n            }\n        }\n\n        if (data.restriction && !data.restriction(value, toValidate)) {\n            console.error(`${prefix} ${key} invalid value: ${data.message}`); // eslint-disable-line no-console\n            return false;\n        }\n\n        if (data.validValues && data.validValues.indexOf(value) === -1) {\n            console.error(`${prefix} ${key} invalid value: must be among ${JSON.stringify(data.validValues)}, \"${value}\" provided`); // eslint-disable-line no-console\n            return false;\n        }\n\n        if (data.children) {\n            let valid = validateSpec(value, data.children, `[Validate ${key}]`);\n\n            if (!valid) {\n                return false;\n            }\n        }\n\n        return true;\n    });\n\n    if (!skipMandatoryCheck) {\n        results.push(...Object.keys(spec).map((key) => {\n            let data = spec[key];\n            if (typeof data === \"string\") {\n                data = {type: data};\n            }\n\n            if (data.mandatory) {\n                let mandatory = data.mandatory;\n                if (typeof mandatory === \"function\") {\n                    mandatory = mandatory(toValidate);\n                }\n\n                if (mandatory && toValidate[key] === undefined) {\n                    console.error(`${prefix} Missing mandatory key \"${key}\"`); // eslint-disable-line no-console\n                    return false;\n                }\n            }\n\n            return true;\n        }));\n    }\n\n    return results.reduce((acc, current) => {\n        return acc && current;\n    }, true);\n}\n\n/**\n * Check the provided FORMAT.\n *\n * @param {NumbroFormat} format - format to check\n * @return {boolean}\n */\nfunction validateFormat(format) {\n    return validateSpec(format, validFormat, \"[Validate format]\");\n}\n\n/**\n * Check the provided LANGUAGE.\n *\n * @param {NumbroLanguage} language - language to check\n * @return {boolean}\n */\nfunction validateLanguage(language) {\n    return validateSpec(language, validLanguage, \"[Validate language]\");\n}\n\nmodule.exports = {\n    validate,\n    validateFormat,\n    validateInput,\n    validateLanguage\n};\n", "// `SameValue` abstract operation\n// https://tc39.es/ecma262/#sec-samevalue\n// eslint-disable-next-line es/no-object-is -- safe\nmodule.exports = Object.is || function is(x, y) {\n  // eslint-disable-next-line no-self-compare -- NaN check\n  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n", "var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\n\nvar quot = /\"/g;\nvar replace = uncurryThis(''.replace);\n\n// `CreateHTML` abstract operation\n// https://tc39.es/ecma262/#sec-createhtml\nmodule.exports = function (string, tag, attribute, value) {\n  var S = toString(requireObjectCoercible(string));\n  var p1 = '<' + tag;\n  if (attribute !== '') p1 += ' ' + attribute + '=\"' + replace(toString(value), quot, '&quot;') + '\"';\n  return p1 + '>' + S + '</' + tag + '>';\n};\n", "var fails = require('../internals/fails');\n\n// check the existence of a method, lowercase\n// of a tag and escaping quotes in arguments\nmodule.exports = function (METHOD_NAME) {\n  return fails(function () {\n    var test = ''[METHOD_NAME]('\"');\n    return test !== test.toLowerCase() || test.split('\"').length > 3;\n  });\n};\n", "/*!\n * jQuery JavaScript Library v3.6.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-03-02T17:08Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.6.0\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\t// Suppress native focus or blur as it's already being fired\n\t\t// in leverageNative.\n\t\t_default: function() {\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n", ";(function (globalObject) {\r\n  'use strict';\r\n\r\n/*\r\n *      bignumber.js v9.0.2\r\n *      A JavaScript library for arbitrary-precision arithmetic.\r\n *      https://github.com/MikeMcl/bignumber.js\r\n *      Copyright (c) 2021 Michael Mclaughlin <M8ch88l@gmail.com>\r\n *      MIT Licensed.\r\n *\r\n *      BigNumber.prototype methods     |  BigNumber methods\r\n *                                      |\r\n *      absoluteValue            abs    |  clone\r\n *      comparedTo                      |  config               set\r\n *      decimalPlaces            dp     |      DECIMAL_PLACES\r\n *      dividedBy                div    |      ROUNDING_MODE\r\n *      dividedToIntegerBy       idiv   |      EXPONENTIAL_AT\r\n *      exponentiatedBy          pow    |      RANGE\r\n *      integerValue                    |      CRYPTO\r\n *      isEqualTo                eq     |      MODULO_MODE\r\n *      isFinite                        |      POW_PRECISION\r\n *      isGreaterThan            gt     |      FORMAT\r\n *      isGreaterThanOrEqualTo   gte    |      ALPHABET\r\n *      isInteger                       |  isBigNumber\r\n *      isLessThan               lt     |  maximum              max\r\n *      isLessThanOrEqualTo      lte    |  minimum              min\r\n *      isNaN                           |  random\r\n *      isNegative                      |  sum\r\n *      isPositive                      |\r\n *      isZero                          |\r\n *      minus                           |\r\n *      modulo                   mod    |\r\n *      multipliedBy             times  |\r\n *      negated                         |\r\n *      plus                            |\r\n *      precision                sd     |\r\n *      shiftedBy                       |\r\n *      squareRoot               sqrt   |\r\n *      toExponential                   |\r\n *      toFixed                         |\r\n *      toFormat                        |\r\n *      toFraction                      |\r\n *      toJSON                          |\r\n *      toNumber                        |\r\n *      toPrecision                     |\r\n *      toString                        |\r\n *      valueOf                         |\r\n *\r\n */\r\n\r\n\r\n  var BigNumber,\r\n    isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n    mathceil = Math.ceil,\r\n    mathfloor = Math.floor,\r\n\r\n    bignumberError = '[BigNumber Error] ',\r\n    tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n    BASE = 1e14,\r\n    LOG_BASE = 14,\r\n    MAX_SAFE_INTEGER = 0x1fffffffffffff,         // 2^53 - 1\r\n    // MAX_INT32 = 0x7fffffff,                   // 2^31 - 1\r\n    POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n    SQRT_BASE = 1e7,\r\n\r\n    // EDITABLE\r\n    // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n    // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n    MAX = 1E9;                                   // 0 to MAX_INT32\r\n\r\n\r\n  /*\r\n   * Create and return a BigNumber constructor.\r\n   */\r\n  function clone(configObject) {\r\n    var div, convertBase, parseNumeric,\r\n      P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n      ONE = new BigNumber(1),\r\n\r\n\r\n      //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n      // The default values below must be integers within the inclusive ranges stated.\r\n      // The values can also be changed at run-time using BigNumber.set.\r\n\r\n      // The maximum number of decimal places for operations involving division.\r\n      DECIMAL_PLACES = 20,                     // 0 to MAX\r\n\r\n      // The rounding mode used when rounding to the above decimal places, and when using\r\n      // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n      // UP         0 Away from zero.\r\n      // DOWN       1 Towards zero.\r\n      // CEIL       2 Towards +Infinity.\r\n      // FLOOR      3 Towards -Infinity.\r\n      // HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n      // HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n      // HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n      // HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n      // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n      ROUNDING_MODE = 4,                       // 0 to 8\r\n\r\n      // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n      // The exponent value at and beneath which toString returns exponential notation.\r\n      // Number type: -7\r\n      TO_EXP_NEG = -7,                         // 0 to -MAX\r\n\r\n      // The exponent value at and above which toString returns exponential notation.\r\n      // Number type: 21\r\n      TO_EXP_POS = 21,                         // 0 to MAX\r\n\r\n      // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n      // The minimum exponent value, beneath which underflow to zero occurs.\r\n      // Number type: -324  (5e-324)\r\n      MIN_EXP = -1e7,                          // -1 to -MAX\r\n\r\n      // The maximum exponent value, above which overflow to Infinity occurs.\r\n      // Number type:  308  (1.7976931348623157e+308)\r\n      // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n      MAX_EXP = 1e7,                           // 1 to MAX\r\n\r\n      // Whether to use cryptographically-secure random number generation, if available.\r\n      CRYPTO = false,                          // true or false\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.\r\n      //             This modulo mode is commonly known as 'truncated division' and is\r\n      //             equivalent to (a % n) in JavaScript.\r\n      // FLOOR     3 The remainder has the same sign as the divisor (Python %).\r\n      // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n      // EUCLID    9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n      //             The remainder is always positive.\r\n      //\r\n      // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n      // modes are commonly used for the modulus operation.\r\n      // Although the other rounding modes can also be used, they may not give useful results.\r\n      MODULO_MODE = 1,                         // 0 to 9\r\n\r\n      // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n      // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n      POW_PRECISION = 0,                       // 0 to MAX\r\n\r\n      // The format specification used by the BigNumber.prototype.toFormat method.\r\n      FORMAT = {\r\n        prefix: '',\r\n        groupSize: 3,\r\n        secondaryGroupSize: 0,\r\n        groupSeparator: ',',\r\n        decimalSeparator: '.',\r\n        fractionGroupSize: 0,\r\n        fractionGroupSeparator: '\\xA0',        // non-breaking space\r\n        suffix: ''\r\n      },\r\n\r\n      // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n      // '-', '.', whitespace, or repeated character.\r\n      // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n      ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz',\r\n      alphabetHasNormalDecimalDigits = true;\r\n\r\n\r\n    //------------------------------------------------------------------------------------------\r\n\r\n\r\n    // CONSTRUCTOR\r\n\r\n\r\n    /*\r\n     * The BigNumber constructor and exported function.\r\n     * Create and return a new instance of a BigNumber object.\r\n     *\r\n     * v {number|string|BigNumber} A numeric value.\r\n     * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n     */\r\n    function BigNumber(v, b) {\r\n      var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n        x = this;\r\n\r\n      // Enable constructor call without `new`.\r\n      if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n      if (b == null) {\r\n\r\n        if (v && v._isBigNumber === true) {\r\n          x.s = v.s;\r\n\r\n          if (!v.c || v.e > MAX_EXP) {\r\n            x.c = x.e = null;\r\n          } else if (v.e < MIN_EXP) {\r\n            x.c = [x.e = 0];\r\n          } else {\r\n            x.e = v.e;\r\n            x.c = v.c.slice();\r\n          }\r\n\r\n          return;\r\n        }\r\n\r\n        if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n          // Use `1 / n` to handle minus zero also.\r\n          x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n          // Fast path for integers, where n < 2147483648 (2**31).\r\n          if (v === ~~v) {\r\n            for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n            if (e > MAX_EXP) {\r\n              x.c = x.e = null;\r\n            } else {\r\n              x.e = e;\r\n              x.c = [v];\r\n            }\r\n\r\n            return;\r\n          }\r\n\r\n          str = String(v);\r\n        } else {\r\n\r\n          if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n          x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n        }\r\n\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      } else {\r\n\r\n        // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n        intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n        // Allow exponential notation to be used with base 10 argument, while\r\n        // also rounding to DECIMAL_PLACES as with other bases.\r\n        if (b == 10 && alphabetHasNormalDecimalDigits) {\r\n          x = new BigNumber(v);\r\n          return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n        }\r\n\r\n        str = String(v);\r\n\r\n        if (isNum = typeof v == 'number') {\r\n\r\n          // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n          if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n          x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n          // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n          if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n            throw Error\r\n             (tooManyDigits + v);\r\n          }\r\n        } else {\r\n          x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n        }\r\n\r\n        alphabet = ALPHABET.slice(0, b);\r\n        e = i = 0;\r\n\r\n        // Check that str is a valid base b number.\r\n        // Don't use RegExp, so alphabet can contain special characters.\r\n        for (len = str.length; i < len; i++) {\r\n          if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n            if (c == '.') {\r\n\r\n              // If '.' is not the first character and it has not be found before.\r\n              if (i > e) {\r\n                e = len;\r\n                continue;\r\n              }\r\n            } else if (!caseChanged) {\r\n\r\n              // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n              if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n                  str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n                caseChanged = true;\r\n                i = -1;\r\n                e = 0;\r\n                continue;\r\n              }\r\n            }\r\n\r\n            return parseNumeric(x, String(v), isNum, b);\r\n          }\r\n        }\r\n\r\n        // Prevent later check for length on converted number.\r\n        isNum = false;\r\n        str = convertBase(str, b, 10, x.s);\r\n\r\n        // Decimal point?\r\n        if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n        else 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) === 48;);\r\n\r\n      if (str = str.slice(i, ++len)) {\r\n        len -= i;\r\n\r\n        // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n        if (isNum && BigNumber.DEBUG &&\r\n          len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n            throw Error\r\n             (tooManyDigits + (x.s * v));\r\n        }\r\n\r\n         // Overflow?\r\n        if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n          // Infinity.\r\n          x.c = x.e = null;\r\n\r\n        // Underflow?\r\n        } else if (e < MIN_EXP) {\r\n\r\n          // Zero.\r\n          x.c = [x.e = 0];\r\n        } else {\r\n          x.e = e;\r\n          x.c = [];\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 element of the coefficient array.\r\n          i = (e + 1) % LOG_BASE;\r\n          if (e < 0) i += LOG_BASE;  // i < 1\r\n\r\n          if (i < len) {\r\n            if (i) x.c.push(+str.slice(0, i));\r\n\r\n            for (len -= LOG_BASE; i < len;) {\r\n              x.c.push(+str.slice(i, i += LOG_BASE));\r\n            }\r\n\r\n            i = LOG_BASE - (str = str.slice(i)).length;\r\n          } else {\r\n            i -= len;\r\n          }\r\n\r\n          for (; i--; str += '0');\r\n          x.c.push(+str);\r\n        }\r\n      } else {\r\n\r\n        // Zero.\r\n        x.c = [x.e = 0];\r\n      }\r\n    }\r\n\r\n\r\n    // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n    BigNumber.clone = clone;\r\n\r\n    BigNumber.ROUND_UP = 0;\r\n    BigNumber.ROUND_DOWN = 1;\r\n    BigNumber.ROUND_CEIL = 2;\r\n    BigNumber.ROUND_FLOOR = 3;\r\n    BigNumber.ROUND_HALF_UP = 4;\r\n    BigNumber.ROUND_HALF_DOWN = 5;\r\n    BigNumber.ROUND_HALF_EVEN = 6;\r\n    BigNumber.ROUND_HALF_CEIL = 7;\r\n    BigNumber.ROUND_HALF_FLOOR = 8;\r\n    BigNumber.EUCLID = 9;\r\n\r\n\r\n    /*\r\n     * Configure infrequently-changing library-wide settings.\r\n     *\r\n     * Accept an object with the following optional properties (if the value of a property is\r\n     * a number, it must be an integer within the inclusive range stated):\r\n     *\r\n     *   DECIMAL_PLACES   {number}           0 to MAX\r\n     *   ROUNDING_MODE    {number}           0 to 8\r\n     *   EXPONENTIAL_AT   {number|number[]}  -MAX to MAX  or  [-MAX to 0, 0 to MAX]\r\n     *   RANGE            {number|number[]}  -MAX to MAX (not zero)  or  [-MAX to -1, 1 to MAX]\r\n     *   CRYPTO           {boolean}          true or false\r\n     *   MODULO_MODE      {number}           0 to 9\r\n     *   POW_PRECISION       {number}           0 to MAX\r\n     *   ALPHABET         {string}           A string of two or more unique characters which does\r\n     *                                       not contain '.'.\r\n     *   FORMAT           {object}           An object with some of the following properties:\r\n     *     prefix                 {string}\r\n     *     groupSize              {number}\r\n     *     secondaryGroupSize     {number}\r\n     *     groupSeparator         {string}\r\n     *     decimalSeparator       {string}\r\n     *     fractionGroupSize      {number}\r\n     *     fractionGroupSeparator {string}\r\n     *     suffix                 {string}\r\n     *\r\n     * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n     *\r\n     * E.g.\r\n     * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n     *\r\n     * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n     *\r\n     * Return an object with the properties current values.\r\n     */\r\n    BigNumber.config = BigNumber.set = function (obj) {\r\n      var p, v;\r\n\r\n      if (obj != null) {\r\n\r\n        if (typeof obj == 'object') {\r\n\r\n          // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n          // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n          if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n            v = obj[p];\r\n            intCheck(v, 0, MAX, p);\r\n            DECIMAL_PLACES = v;\r\n          }\r\n\r\n          // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n          // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n          if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n            v = obj[p];\r\n            intCheck(v, 0, 8, p);\r\n            ROUNDING_MODE = v;\r\n          }\r\n\r\n          // EXPONENTIAL_AT {number|number[]}\r\n          // Integer, -MAX to MAX inclusive or\r\n          // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n          // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n          if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n            v = obj[p];\r\n            if (v && v.pop) {\r\n              intCheck(v[0], -MAX, 0, p);\r\n              intCheck(v[1], 0, MAX, p);\r\n              TO_EXP_NEG = v[0];\r\n              TO_EXP_POS = v[1];\r\n            } else {\r\n              intCheck(v, -MAX, MAX, p);\r\n              TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n            }\r\n          }\r\n\r\n          // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n          // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n          // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n          if (obj.hasOwnProperty(p = 'RANGE')) {\r\n            v = obj[p];\r\n            if (v && v.pop) {\r\n              intCheck(v[0], -MAX, -1, p);\r\n              intCheck(v[1], 1, MAX, p);\r\n              MIN_EXP = v[0];\r\n              MAX_EXP = v[1];\r\n            } else {\r\n              intCheck(v, -MAX, MAX, p);\r\n              if (v) {\r\n                MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n              } else {\r\n                throw Error\r\n                 (bignumberError + p + ' cannot be zero: ' + v);\r\n              }\r\n            }\r\n          }\r\n\r\n          // CRYPTO {boolean} true or false.\r\n          // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n          // '[BigNumber Error] crypto unavailable'\r\n          if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n            v = obj[p];\r\n            if (v === !!v) {\r\n              if (v) {\r\n                if (typeof crypto != 'undefined' && crypto &&\r\n                 (crypto.getRandomValues || crypto.randomBytes)) {\r\n                  CRYPTO = v;\r\n                } else {\r\n                  CRYPTO = !v;\r\n                  throw Error\r\n                   (bignumberError + 'crypto unavailable');\r\n                }\r\n              } else {\r\n                CRYPTO = v;\r\n              }\r\n            } else {\r\n              throw Error\r\n               (bignumberError + p + ' not true or false: ' + v);\r\n            }\r\n          }\r\n\r\n          // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n          // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n          if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n            v = obj[p];\r\n            intCheck(v, 0, 9, p);\r\n            MODULO_MODE = v;\r\n          }\r\n\r\n          // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n          // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n          if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n            v = obj[p];\r\n            intCheck(v, 0, MAX, p);\r\n            POW_PRECISION = v;\r\n          }\r\n\r\n          // FORMAT {object}\r\n          // '[BigNumber Error] FORMAT not an object: {v}'\r\n          if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n            v = obj[p];\r\n            if (typeof v == 'object') FORMAT = v;\r\n            else throw Error\r\n             (bignumberError + p + ' not an object: ' + v);\r\n          }\r\n\r\n          // ALPHABET {string}\r\n          // '[BigNumber Error] ALPHABET invalid: {v}'\r\n          if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n            v = obj[p];\r\n\r\n            // Disallow if less than two characters,\r\n            // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n            if (typeof v == 'string' && !/^.?$|[+\\-.\\s]|(.).*\\1/.test(v)) {\r\n              alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789';\r\n              ALPHABET = v;\r\n            } else {\r\n              throw Error\r\n               (bignumberError + p + ' invalid: ' + v);\r\n            }\r\n          }\r\n\r\n        } else {\r\n\r\n          // '[BigNumber Error] Object expected: {v}'\r\n          throw Error\r\n           (bignumberError + 'Object expected: ' + obj);\r\n        }\r\n      }\r\n\r\n      return {\r\n        DECIMAL_PLACES: DECIMAL_PLACES,\r\n        ROUNDING_MODE: ROUNDING_MODE,\r\n        EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n        RANGE: [MIN_EXP, MAX_EXP],\r\n        CRYPTO: CRYPTO,\r\n        MODULO_MODE: MODULO_MODE,\r\n        POW_PRECISION: POW_PRECISION,\r\n        FORMAT: FORMAT,\r\n        ALPHABET: ALPHABET\r\n      };\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if v is a BigNumber instance, otherwise return false.\r\n     *\r\n     * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n     *\r\n     * v {any}\r\n     *\r\n     * '[BigNumber Error] Invalid BigNumber: {v}'\r\n     */\r\n    BigNumber.isBigNumber = function (v) {\r\n      if (!v || v._isBigNumber !== true) return false;\r\n      if (!BigNumber.DEBUG) return true;\r\n\r\n      var i, n,\r\n        c = v.c,\r\n        e = v.e,\r\n        s = v.s;\r\n\r\n      out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n        if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n          // If the first element is zero, the BigNumber value must be zero.\r\n          if (c[0] === 0) {\r\n            if (e === 0 && c.length === 1) return true;\r\n            break out;\r\n          }\r\n\r\n          // Calculate number of digits that c[0] should have, based on the exponent.\r\n          i = (e + 1) % LOG_BASE;\r\n          if (i < 1) i += LOG_BASE;\r\n\r\n          // Calculate number of digits of c[0].\r\n          //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n          if (String(c[0]).length == i) {\r\n\r\n            for (i = 0; i < c.length; i++) {\r\n              n = c[i];\r\n              if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n            }\r\n\r\n            // Last element cannot be zero, unless it is the only element.\r\n            if (n !== 0) return true;\r\n          }\r\n        }\r\n\r\n      // Infinity/NaN\r\n      } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n        return true;\r\n      }\r\n\r\n      throw Error\r\n        (bignumberError + 'Invalid BigNumber: ' + v);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the maximum of the arguments.\r\n     *\r\n     * arguments {number|string|BigNumber}\r\n     */\r\n    BigNumber.maximum = BigNumber.max = function () {\r\n      return maxOrMin(arguments, P.lt);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the minimum of the arguments.\r\n     *\r\n     * arguments {number|string|BigNumber}\r\n     */\r\n    BigNumber.minimum = BigNumber.min = function () {\r\n      return maxOrMin(arguments, P.gt);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n     * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n     * zeros are produced).\r\n     *\r\n     * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n     * '[BigNumber Error] crypto unavailable'\r\n     */\r\n    BigNumber.random = (function () {\r\n      var pow2_53 = 0x20000000000000;\r\n\r\n      // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n      // Check if Math.random() produces more than 32 bits of randomness.\r\n      // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n      // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n      var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n       ? function () { return mathfloor(Math.random() * pow2_53); }\r\n       : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n         (Math.random() * 0x800000 | 0); };\r\n\r\n      return function (dp) {\r\n        var a, b, e, k, v,\r\n          i = 0,\r\n          c = [],\r\n          rand = new BigNumber(ONE);\r\n\r\n        if (dp == null) dp = DECIMAL_PLACES;\r\n        else intCheck(dp, 0, MAX);\r\n\r\n        k = mathceil(dp / LOG_BASE);\r\n\r\n        if (CRYPTO) {\r\n\r\n          // Browsers supporting crypto.getRandomValues.\r\n          if (crypto.getRandomValues) {\r\n\r\n            a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n            for (; i < k;) {\r\n\r\n              // 53 bits:\r\n              // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n              // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n              // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n              //                                     11111 11111111 11111111\r\n              // 0x20000 is 2^21.\r\n              v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n              // Rejection sampling:\r\n              // 0 <= v < 9007199254740992\r\n              // Probability that v >= 9e15, is\r\n              // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n              if (v >= 9e15) {\r\n                b = crypto.getRandomValues(new Uint32Array(2));\r\n                a[i] = b[0];\r\n                a[i + 1] = b[1];\r\n              } else {\r\n\r\n                // 0 <= v <= 8999999999999999\r\n                // 0 <= (v % 1e14) <= 99999999999999\r\n                c.push(v % 1e14);\r\n                i += 2;\r\n              }\r\n            }\r\n            i = k / 2;\r\n\r\n          // Node.js supporting crypto.randomBytes.\r\n          } else if (crypto.randomBytes) {\r\n\r\n            // buffer\r\n            a = crypto.randomBytes(k *= 7);\r\n\r\n            for (; i < k;) {\r\n\r\n              // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n              // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n              // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n              // 0 <= v < 9007199254740992\r\n              v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n                 (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n                 (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n              if (v >= 9e15) {\r\n                crypto.randomBytes(7).copy(a, i);\r\n              } else {\r\n\r\n                // 0 <= (v % 1e14) <= 99999999999999\r\n                c.push(v % 1e14);\r\n                i += 7;\r\n              }\r\n            }\r\n            i = k / 7;\r\n          } else {\r\n            CRYPTO = false;\r\n            throw Error\r\n             (bignumberError + 'crypto unavailable');\r\n          }\r\n        }\r\n\r\n        // Use Math.random.\r\n        if (!CRYPTO) {\r\n\r\n          for (; i < k;) {\r\n            v = random53bitInt();\r\n            if (v < 9e15) c[i++] = v % 1e14;\r\n          }\r\n        }\r\n\r\n        k = c[--i];\r\n        dp %= LOG_BASE;\r\n\r\n        // Convert trailing digits to zeros according to dp.\r\n        if (k && dp) {\r\n          v = POWS_TEN[LOG_BASE - dp];\r\n          c[i] = mathfloor(k / v) * v;\r\n        }\r\n\r\n        // Remove trailing elements which are zero.\r\n        for (; c[i] === 0; c.pop(), i--);\r\n\r\n        // Zero?\r\n        if (i < 0) {\r\n          c = [e = 0];\r\n        } else {\r\n\r\n          // Remove leading elements which are zero and adjust exponent accordingly.\r\n          for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n          // Count the digits of the first element of c to determine leading zeros, and...\r\n          for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n          // adjust the exponent accordingly.\r\n          if (i < LOG_BASE) e -= LOG_BASE - i;\r\n        }\r\n\r\n        rand.e = e;\r\n        rand.c = c;\r\n        return rand;\r\n      };\r\n    })();\r\n\r\n\r\n    /*\r\n     * Return a BigNumber whose value is the sum of the arguments.\r\n     *\r\n     * arguments {number|string|BigNumber}\r\n     */\r\n    BigNumber.sum = function () {\r\n      var i = 1,\r\n        args = arguments,\r\n        sum = new BigNumber(args[0]);\r\n      for (; i < args.length;) sum = sum.plus(args[i++]);\r\n      return sum;\r\n    };\r\n\r\n\r\n    // PRIVATE FUNCTIONS\r\n\r\n\r\n    // Called by BigNumber and BigNumber.prototype.toString.\r\n    convertBase = (function () {\r\n      var decimal = '0123456789';\r\n\r\n      /*\r\n       * Convert string of baseIn to an array of numbers of baseOut.\r\n       * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n       * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n       */\r\n      function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n        var j,\r\n          arr = [0],\r\n          arrL,\r\n          i = 0,\r\n          len = str.length;\r\n\r\n        for (; i < len;) {\r\n          for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n          arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n          for (j = 0; j < arr.length; j++) {\r\n\r\n            if (arr[j] > baseOut - 1) {\r\n              if (arr[j + 1] == null) 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      // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n      // If the caller is toString, we are converting from base 10 to baseOut.\r\n      // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n      return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n        var alphabet, d, e, k, r, x, xc, y,\r\n          i = str.indexOf('.'),\r\n          dp = DECIMAL_PLACES,\r\n          rm = ROUNDING_MODE;\r\n\r\n        // Non-integer.\r\n        if (i >= 0) {\r\n          k = POW_PRECISION;\r\n\r\n          // Unlimited precision.\r\n          POW_PRECISION = 0;\r\n          str = str.replace('.', '');\r\n          y = new BigNumber(baseIn);\r\n          x = y.pow(str.length - i);\r\n          POW_PRECISION = k;\r\n\r\n          // Convert str as if an integer, then restore the fraction part by dividing the\r\n          // result by its base raised to a power.\r\n\r\n          y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n           10, baseOut, decimal);\r\n          y.e = y.c.length;\r\n        }\r\n\r\n        // Convert the number as integer.\r\n\r\n        xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n         ? (alphabet = ALPHABET, decimal)\r\n         : (alphabet = decimal, ALPHABET));\r\n\r\n        // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n        e = k = xc.length;\r\n\r\n        // Remove trailing zeros.\r\n        for (; xc[--k] == 0; xc.pop());\r\n\r\n        // Zero?\r\n        if (!xc[0]) return alphabet.charAt(0);\r\n\r\n        // Does str represent an integer? If so, no need for the division.\r\n        if (i < 0) {\r\n          --e;\r\n        } else {\r\n          x.c = xc;\r\n          x.e = e;\r\n\r\n          // The sign is needed for correct rounding.\r\n          x.s = sign;\r\n          x = div(x, y, dp, rm, baseOut);\r\n          xc = x.c;\r\n          r = x.r;\r\n          e = x.e;\r\n        }\r\n\r\n        // xc now represents str converted to baseOut.\r\n\r\n        // THe index of the rounding digit.\r\n        d = e + dp + 1;\r\n\r\n        // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n        i = xc[d];\r\n\r\n        // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n        k = baseOut / 2;\r\n        r = r || d < 0 || xc[d + 1] != null;\r\n\r\n        r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n              : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n               rm == (x.s < 0 ? 8 : 7));\r\n\r\n        // If the index of the rounding digit is not greater than zero, or xc represents\r\n        // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n        // such as 0.00001.\r\n        if (d < 1 || !xc[0]) {\r\n\r\n          // 1^-dp or 0\r\n          str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n        } else {\r\n\r\n          // Truncate xc to the required number of decimal places.\r\n          xc.length = d;\r\n\r\n          // Round up?\r\n          if (r) {\r\n\r\n            // Rounding up may mean the previous digit has to be rounded up and so on.\r\n            for (--baseOut; ++xc[--d] > baseOut;) {\r\n              xc[d] = 0;\r\n\r\n              if (!d) {\r\n                ++e;\r\n                xc = [1].concat(xc);\r\n              }\r\n            }\r\n          }\r\n\r\n          // Determine trailing zeros.\r\n          for (k = xc.length; !xc[--k];);\r\n\r\n          // E.g. [4, 11, 15] becomes 4bf.\r\n          for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n          // Add leading zeros, decimal point and trailing zeros as required.\r\n          str = toFixedPoint(str, e, alphabet.charAt(0));\r\n        }\r\n\r\n        // The caller will add the sign.\r\n        return str;\r\n      };\r\n    })();\r\n\r\n\r\n    // Perform division in the specified base. Called by div and convertBase.\r\n    div = (function () {\r\n\r\n      // Assume non-zero x and k.\r\n      function multiply(x, k, base) {\r\n        var m, temp, xlo, xhi,\r\n          carry = 0,\r\n          i = x.length,\r\n          klo = k % SQRT_BASE,\r\n          khi = k / SQRT_BASE | 0;\r\n\r\n        for (x = x.slice(); i--;) {\r\n          xlo = x[i] % SQRT_BASE;\r\n          xhi = x[i] / SQRT_BASE | 0;\r\n          m = khi * xlo + xhi * klo;\r\n          temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n          carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n          x[i] = temp % base;\r\n        }\r\n\r\n        if (carry) x = [carry].concat(x);\r\n\r\n        return x;\r\n      }\r\n\r\n      function compare(a, b, aL, bL) {\r\n        var i, cmp;\r\n\r\n        if (aL != bL) {\r\n          cmp = aL > bL ? 1 : -1;\r\n        } else {\r\n\r\n          for (i = cmp = 0; i < aL; i++) {\r\n\r\n            if (a[i] != b[i]) {\r\n              cmp = a[i] > b[i] ? 1 : -1;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n\r\n        return cmp;\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.splice(0, 1));\r\n      }\r\n\r\n      // x: dividend, y: divisor.\r\n      return function (x, y, dp, rm, base) {\r\n        var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n          yL, yz,\r\n          s = x.s == y.s ? 1 : -1,\r\n          xc = x.c,\r\n          yc = y.c;\r\n\r\n        // Either NaN, Infinity or 0?\r\n        if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n          return new BigNumber(\r\n\r\n           // Return NaN if either NaN, or both Infinity or 0.\r\n           !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n            // Return \u00B10 if x is \u00B10 or y is \u00B1Infinity, or return \u00B1Infinity as y is \u00B10.\r\n            xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n         );\r\n        }\r\n\r\n        q = new BigNumber(s);\r\n        qc = q.c = [];\r\n        e = x.e - y.e;\r\n        s = dp + e + 1;\r\n\r\n        if (!base) {\r\n          base = BASE;\r\n          e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n          s = s / LOG_BASE | 0;\r\n        }\r\n\r\n        // Result exponent may be one less then the current value of e.\r\n        // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n        for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n        if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n        if (s < 0) {\r\n          qc.push(1);\r\n          more = true;\r\n        } else {\r\n          xL = xc.length;\r\n          yL = yc.length;\r\n          i = 0;\r\n          s += 2;\r\n\r\n          // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n          n = mathfloor(base / (yc[0] + 1));\r\n\r\n          // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n          // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n          if (n > 1) {\r\n            yc = multiply(yc, n, base);\r\n            xc = multiply(xc, n, base);\r\n            yL = yc.length;\r\n            xL = xc.length;\r\n          }\r\n\r\n          xi = yL;\r\n          rem = xc.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          yz = yc.slice();\r\n          yz = [0].concat(yz);\r\n          yc0 = yc[0];\r\n          if (yc[1] >= base / 2) yc0++;\r\n          // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n          // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n          do {\r\n            n = 0;\r\n\r\n            // Compare divisor and remainder.\r\n            cmp = compare(yc, rem, yL, remL);\r\n\r\n            // If divisor < remainder.\r\n            if (cmp < 0) {\r\n\r\n              // Calculate trial digit, n.\r\n\r\n              rem0 = rem[0];\r\n              if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n              // n is how many times the divisor goes into the current remainder.\r\n              n = mathfloor(rem0 / yc0);\r\n\r\n              //  Algorithm:\r\n              //  product = divisor multiplied by trial digit (n).\r\n              //  Compare product and remainder.\r\n              //  If product is greater than remainder:\r\n              //    Subtract divisor from product, decrement trial digit.\r\n              //  Subtract product from remainder.\r\n              //  If product was less than remainder at the last compare:\r\n              //    Compare new remainder and divisor.\r\n              //    If remainder is greater than divisor:\r\n              //      Subtract divisor from remainder, increment trial digit.\r\n\r\n              if (n > 1) {\r\n\r\n                // n may be > base only when base is 3.\r\n                if (n >= base) n = base - 1;\r\n\r\n                // product = divisor * trial digit.\r\n                prod = multiply(yc, n, base);\r\n                prodL = prod.length;\r\n                remL = rem.length;\r\n\r\n                // Compare product and remainder.\r\n                // If product > remainder then trial digit n too high.\r\n                // n is 1 too high about 5% of the time, and is not known to have\r\n                // ever been more than 1 too high.\r\n                while (compare(prod, rem, prodL, remL) == 1) {\r\n                  n--;\r\n\r\n                  // Subtract divisor from product.\r\n                  subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n                  prodL = prod.length;\r\n                  cmp = 1;\r\n                }\r\n              } else {\r\n\r\n                // n is 0 or 1, cmp is -1.\r\n                // If n is 0, there is no need to compare yc and rem again below,\r\n                // so change cmp to 1 to avoid it.\r\n                // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n                if (n == 0) {\r\n\r\n                  // divisor < remainder, so n must be at least 1.\r\n                  cmp = n = 1;\r\n                }\r\n\r\n                // product = divisor\r\n                prod = yc.slice();\r\n                prodL = prod.length;\r\n              }\r\n\r\n              if (prodL < remL) prod = [0].concat(prod);\r\n\r\n              // Subtract product from remainder.\r\n              subtract(rem, prod, remL, base);\r\n              remL = rem.length;\r\n\r\n               // If product was < remainder.\r\n              if (cmp == -1) {\r\n\r\n                // Compare divisor and new remainder.\r\n                // If divisor < new remainder, subtract divisor from remainder.\r\n                // Trial digit n too low.\r\n                // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n                while (compare(yc, rem, yL, remL) < 1) {\r\n                  n++;\r\n\r\n                  // Subtract divisor from remainder.\r\n                  subtract(rem, yL < remL ? yz : yc, remL, base);\r\n                  remL = rem.length;\r\n                }\r\n              }\r\n            } else if (cmp === 0) {\r\n              n++;\r\n              rem = [0];\r\n            } // else cmp === 1 and n will be 0\r\n\r\n            // Add the next digit, n, to the result array.\r\n            qc[i++] = n;\r\n\r\n            // Update the remainder.\r\n            if (rem[0]) {\r\n              rem[remL++] = xc[xi] || 0;\r\n            } else {\r\n              rem = [xc[xi]];\r\n              remL = 1;\r\n            }\r\n          } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n          more = rem[0] != null;\r\n\r\n          // Leading zero?\r\n          if (!qc[0]) qc.splice(0, 1);\r\n        }\r\n\r\n        if (base == BASE) {\r\n\r\n          // To calculate q.e, first get the number of digits of qc[0].\r\n          for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n          round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n        // Caller is convertBase.\r\n        } else {\r\n          q.e = e;\r\n          q.r = +more;\r\n        }\r\n\r\n        return q;\r\n      };\r\n    })();\r\n\r\n\r\n    /*\r\n     * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n     * notation rounded to the specified decimal places or significant digits.\r\n     *\r\n     * n: a BigNumber.\r\n     * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n     * rm: the rounding mode.\r\n     * id: 1 (toExponential) or 2 (toPrecision).\r\n     */\r\n    function format(n, i, rm, id) {\r\n      var c0, e, ne, len, str;\r\n\r\n      if (rm == null) rm = ROUNDING_MODE;\r\n      else intCheck(rm, 0, 8);\r\n\r\n      if (!n.c) return n.toString();\r\n\r\n      c0 = n.c[0];\r\n      ne = n.e;\r\n\r\n      if (i == null) {\r\n        str = coeffToString(n.c);\r\n        str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n         ? toExponential(str, ne)\r\n         : toFixedPoint(str, ne, '0');\r\n      } else {\r\n        n = round(new BigNumber(n), i, rm);\r\n\r\n        // n.e may have changed if the value was rounded up.\r\n        e = n.e;\r\n\r\n        str = coeffToString(n.c);\r\n        len = str.length;\r\n\r\n        // toPrecision returns exponential notation if the number of significant digits\r\n        // specified is less than the number of digits necessary to represent the integer\r\n        // part of the value in fixed-point notation.\r\n\r\n        // Exponential notation.\r\n        if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n          // Append zeros?\r\n          for (; len < i; str += '0', len++);\r\n          str = toExponential(str, e);\r\n\r\n        // Fixed-point notation.\r\n        } else {\r\n          i -= ne;\r\n          str = toFixedPoint(str, e, '0');\r\n\r\n          // Append zeros?\r\n          if (e + 1 > len) {\r\n            if (--i > 0) for (str += '.'; i--; str += '0');\r\n          } else {\r\n            i += e - len;\r\n            if (i > 0) {\r\n              if (e + 1 == len) str += '.';\r\n              for (; i--; str += '0');\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      return n.s < 0 && c0 ? '-' + str : str;\r\n    }\r\n\r\n\r\n    // Handle BigNumber.max and BigNumber.min.\r\n    function maxOrMin(args, method) {\r\n      var n,\r\n        i = 1,\r\n        m = new BigNumber(args[0]);\r\n\r\n      for (; i < args.length; i++) {\r\n        n = new BigNumber(args[i]);\r\n\r\n        // If any number is NaN, return NaN.\r\n        if (!n.s) {\r\n          m = n;\r\n          break;\r\n        } else if (method.call(m, n)) {\r\n          m = n;\r\n        }\r\n      }\r\n\r\n      return m;\r\n    }\r\n\r\n\r\n    /*\r\n     * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n     * Called by minus, plus and times.\r\n     */\r\n    function normalise(n, c, e) {\r\n      var i = 1,\r\n        j = c.length;\r\n\r\n       // Remove trailing zeros.\r\n      for (; !c[--j]; c.pop());\r\n\r\n      // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n      for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n      // Overflow?\r\n      if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n        // Infinity.\r\n        n.c = n.e = null;\r\n\r\n      // Underflow?\r\n      } else if (e < MIN_EXP) {\r\n\r\n        // Zero.\r\n        n.c = [n.e = 0];\r\n      } else {\r\n        n.e = e;\r\n        n.c = c;\r\n      }\r\n\r\n      return n;\r\n    }\r\n\r\n\r\n    // Handle values that fail the validity test in BigNumber.\r\n    parseNumeric = (function () {\r\n      var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n        dotAfter = /^([^.]+)\\.$/,\r\n        dotBefore = /^\\.([^.]+)$/,\r\n        isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n        whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n      return function (x, str, isNum, b) {\r\n        var base,\r\n          s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n        // No exception on \u00B1Infinity or NaN.\r\n        if (isInfinityOrNaN.test(s)) {\r\n          x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n        } else {\r\n          if (!isNum) {\r\n\r\n            // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n            s = s.replace(basePrefix, function (m, p1, p2) {\r\n              base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n              return !b || b == base ? p1 : m;\r\n            });\r\n\r\n            if (b) {\r\n              base = b;\r\n\r\n              // E.g. '1.' to '1', '.1' to '0.1'\r\n              s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n            }\r\n\r\n            if (str != s) return new BigNumber(s, base);\r\n          }\r\n\r\n          // '[BigNumber Error] Not a number: {n}'\r\n          // '[BigNumber Error] Not a base {b} number: {n}'\r\n          if (BigNumber.DEBUG) {\r\n            throw Error\r\n              (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n          }\r\n\r\n          // NaN\r\n          x.s = null;\r\n        }\r\n\r\n        x.c = x.e = null;\r\n      }\r\n    })();\r\n\r\n\r\n    /*\r\n     * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n     * If r is truthy, it is known that there are more digits after the rounding digit.\r\n     */\r\n    function round(x, sd, rm, r) {\r\n      var d, i, j, k, n, ni, rd,\r\n        xc = x.c,\r\n        pows10 = POWS_TEN;\r\n\r\n      // if x is not Infinity or NaN...\r\n      if (xc) {\r\n\r\n        // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n        // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n        // ni is the index of n within x.c.\r\n        // d is the number of digits of n.\r\n        // i is the index of rd within n including leading zeros.\r\n        // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n        out: {\r\n\r\n          // Get the number of digits of the first element of xc.\r\n          for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n          i = sd - d;\r\n\r\n          // If the rounding digit is in the first element of xc...\r\n          if (i < 0) {\r\n            i += LOG_BASE;\r\n            j = sd;\r\n            n = xc[ni = 0];\r\n\r\n            // Get the rounding digit at index j of n.\r\n            rd = n / pows10[d - j - 1] % 10 | 0;\r\n          } else {\r\n            ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n            if (ni >= xc.length) {\r\n\r\n              if (r) {\r\n\r\n                // Needed by sqrt.\r\n                for (; xc.length <= ni; xc.push(0));\r\n                n = rd = 0;\r\n                d = 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              n = k = xc[ni];\r\n\r\n              // Get the number of digits of n.\r\n              for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n              // Get the index of rd within n.\r\n              i %= LOG_BASE;\r\n\r\n              // Get the index of rd within n, adjusted for leading zeros.\r\n              // The number of leading zeros of n is given by LOG_BASE - d.\r\n              j = i - LOG_BASE + d;\r\n\r\n              // Get the rounding digit at index j of n.\r\n              rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;\r\n            }\r\n          }\r\n\r\n          r = r || sd < 0 ||\r\n\r\n          // Are there any non-zero digits after the rounding digit?\r\n          // The expression  n % pows10[d - j - 1]  returns all digits of n to the right\r\n          // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n           xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n          r = rm < 4\r\n           ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n           : rd > 5 || rd == 5 && (rm == 4 || r || 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 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n             rm == (x.s < 0 ? 8 : 7));\r\n\r\n          if (sd < 1 || !xc[0]) {\r\n            xc.length = 0;\r\n\r\n            if (r) {\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              xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n              x.e = -sd || 0;\r\n            } else {\r\n\r\n              // Zero.\r\n              xc[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            xc.length = ni;\r\n            k = 1;\r\n            ni--;\r\n          } else {\r\n            xc.length = ni + 1;\r\n            k = pows10[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 n.\r\n            xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n          }\r\n\r\n          // Round up?\r\n          if (r) {\r\n\r\n            for (; ;) {\r\n\r\n              // If the digit to be rounded up is in the first element of xc...\r\n              if (ni == 0) {\r\n\r\n                // i will be the length of xc[0] before k is added.\r\n                for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n                j = xc[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 (xc[0] == BASE) xc[0] = 1;\r\n                }\r\n\r\n                break;\r\n              } else {\r\n                xc[ni] += k;\r\n                if (xc[ni] != BASE) break;\r\n                xc[ni--] = 0;\r\n                k = 1;\r\n              }\r\n            }\r\n          }\r\n\r\n          // Remove trailing zeros.\r\n          for (i = xc.length; xc[--i] === 0; xc.pop());\r\n        }\r\n\r\n        // Overflow? Infinity.\r\n        if (x.e > MAX_EXP) {\r\n          x.c = x.e = null;\r\n\r\n        // Underflow? Zero.\r\n        } else if (x.e < MIN_EXP) {\r\n          x.c = [x.e = 0];\r\n        }\r\n      }\r\n\r\n      return x;\r\n    }\r\n\r\n\r\n    function valueOf(n) {\r\n      var str,\r\n        e = n.e;\r\n\r\n      if (e === null) return n.toString();\r\n\r\n      str = coeffToString(n.c);\r\n\r\n      str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n        ? toExponential(str, e)\r\n        : toFixedPoint(str, e, '0');\r\n\r\n      return n.s < 0 ? '-' + str : str;\r\n    }\r\n\r\n\r\n    // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n     */\r\n    P.absoluteValue = P.abs = function () {\r\n      var x = new BigNumber(this);\r\n      if (x.s < 0) x.s = 1;\r\n      return x;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return\r\n     *   1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n     *   -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n     *   0 if they have the same value,\r\n     *   or null if the value of either is NaN.\r\n     */\r\n    P.comparedTo = function (y, b) {\r\n      return compare(this, new BigNumber(y, b));\r\n    };\r\n\r\n\r\n    /*\r\n     * If dp is undefined or null or true or false, return the number of decimal places of the\r\n     * value of this BigNumber, or null if the value of this BigNumber is \u00B1Infinity or NaN.\r\n     *\r\n     * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n     * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n     * ROUNDING_MODE if rm is omitted.\r\n     *\r\n     * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n     */\r\n    P.decimalPlaces = P.dp = function (dp, rm) {\r\n      var c, n, v,\r\n        x = this;\r\n\r\n      if (dp != null) {\r\n        intCheck(dp, 0, MAX);\r\n        if (rm == null) rm = ROUNDING_MODE;\r\n        else intCheck(rm, 0, 8);\r\n\r\n        return round(new BigNumber(x), dp + x.e + 1, rm);\r\n      }\r\n\r\n      if (!(c = x.c)) return null;\r\n      n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n      // Subtract the number of trailing zeros of the last number.\r\n      if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n      if (n < 0) n = 0;\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 BigNumber whose value is the value of this BigNumber divided by the value of\r\n     * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n     */\r\n    P.dividedBy = P.div = function (y, b) {\r\n      return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n     * BigNumber by the value of BigNumber(y, b).\r\n     */\r\n    P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n      return div(this, new BigNumber(y, b), 0, 1);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n     *\r\n     * If m is present, return the result modulo m.\r\n     * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n     * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n     *\r\n     * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n     * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n     *\r\n     * n {number|string|BigNumber} The exponent. An integer.\r\n     * [m] {number|string|BigNumber} The modulus.\r\n     *\r\n     * '[BigNumber Error] Exponent not an integer: {n}'\r\n     */\r\n    P.exponentiatedBy = P.pow = function (n, m) {\r\n      var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n        x = this;\r\n\r\n      n = new BigNumber(n);\r\n\r\n      // Allow NaN and \u00B1Infinity, but not other non-integers.\r\n      if (n.c && !n.isInteger()) {\r\n        throw Error\r\n          (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n      }\r\n\r\n      if (m != null) m = new BigNumber(m);\r\n\r\n      // Exponent of MAX_SAFE_INTEGER is 15.\r\n      nIsBig = n.e > 14;\r\n\r\n      // If x is NaN, \u00B1Infinity, \u00B10 or \u00B11, or n is \u00B1Infinity, NaN or \u00B10.\r\n      if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n        // The sign of the result of pow when x is negative depends on the evenness of n.\r\n        // If +n overflows to \u00B1Infinity, the evenness of n would be not be known.\r\n        y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n)));\r\n        return m ? y.mod(m) : y;\r\n      }\r\n\r\n      nIsNeg = n.s < 0;\r\n\r\n      if (m) {\r\n\r\n        // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n        if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n        isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n        if (isModExp) x = x.mod(m);\r\n\r\n      // Overflow to \u00B1Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n      // Underflow to \u00B10: <=0.79**1e10 or <=0.9999975**1e15.\r\n      } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n        // [1, 240000000]\r\n        ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n        // [80000000000000]  [99999750000000]\r\n        : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n        // If x is negative and n is odd, k = -0, else k = 0.\r\n        k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n        // If x >= 1, k = \u00B1Infinity.\r\n        if (x.e > -1) k = 1 / k;\r\n\r\n        // If n is negative return \u00B10, else return \u00B1Infinity.\r\n        return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n      } else if (POW_PRECISION) {\r\n\r\n        // Truncating each coefficient array to a length of k after each multiplication\r\n        // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n        // i.e. there will be a minimum of 28 guard digits retained.\r\n        k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n      }\r\n\r\n      if (nIsBig) {\r\n        half = new BigNumber(0.5);\r\n        if (nIsNeg) n.s = 1;\r\n        nIsOdd = isOdd(n);\r\n      } else {\r\n        i = Math.abs(+valueOf(n));\r\n        nIsOdd = i % 2;\r\n      }\r\n\r\n      y = new BigNumber(ONE);\r\n\r\n      // Performs 54 loop iterations for n of 9007199254740991.\r\n      for (; ;) {\r\n\r\n        if (nIsOdd) {\r\n          y = y.times(x);\r\n          if (!y.c) break;\r\n\r\n          if (k) {\r\n            if (y.c.length > k) y.c.length = k;\r\n          } else if (isModExp) {\r\n            y = y.mod(m);    //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n          }\r\n        }\r\n\r\n        if (i) {\r\n          i = mathfloor(i / 2);\r\n          if (i === 0) break;\r\n          nIsOdd = i % 2;\r\n        } else {\r\n          n = n.times(half);\r\n          round(n, n.e + 1, 1);\r\n\r\n          if (n.e > 14) {\r\n            nIsOdd = isOdd(n);\r\n          } else {\r\n            i = +valueOf(n);\r\n            if (i === 0) break;\r\n            nIsOdd = i % 2;\r\n          }\r\n        }\r\n\r\n        x = x.times(x);\r\n\r\n        if (k) {\r\n          if (x.c && x.c.length > k) x.c.length = k;\r\n        } else if (isModExp) {\r\n          x = x.mod(m);    //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n        }\r\n      }\r\n\r\n      if (isModExp) return y;\r\n      if (nIsNeg) y = ONE.div(y);\r\n\r\n      return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n     * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n     *\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n     */\r\n    P.integerValue = function (rm) {\r\n      var n = new BigNumber(this);\r\n      if (rm == null) rm = ROUNDING_MODE;\r\n      else intCheck(rm, 0, 8);\r\n      return round(n, n.e + 1, rm);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n     * otherwise return false.\r\n     */\r\n    P.isEqualTo = P.eq = function (y, b) {\r\n      return compare(this, new BigNumber(y, b)) === 0;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n     */\r\n    P.isFinite = function () {\r\n      return !!this.c;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n     * otherwise return false.\r\n     */\r\n    P.isGreaterThan = P.gt = function (y, b) {\r\n      return compare(this, new BigNumber(y, b)) > 0;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is greater than or equal to the value of\r\n     * BigNumber(y, b), otherwise return false.\r\n     */\r\n    P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n      return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n     */\r\n    P.isInteger = function () {\r\n      return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n     * otherwise return false.\r\n     */\r\n    P.isLessThan = P.lt = function (y, b) {\r\n      return compare(this, new BigNumber(y, b)) < 0;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is less than or equal to the value of\r\n     * BigNumber(y, b), otherwise return false.\r\n     */\r\n    P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n      return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n     */\r\n    P.isNaN = function () {\r\n      return !this.s;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is negative, otherwise return false.\r\n     */\r\n    P.isNegative = function () {\r\n      return this.s < 0;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is positive, otherwise return false.\r\n     */\r\n    P.isPositive = function () {\r\n      return this.s > 0;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n     */\r\n    P.isZero = function () {\r\n      return !!this.c && this.c[0] == 0;\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 BigNumber whose value is the value of this BigNumber minus the value of\r\n     * BigNumber(y, b).\r\n     */\r\n    P.minus = function (y, b) {\r\n      var i, j, t, xLTy,\r\n        x = this,\r\n        a = x.s;\r\n\r\n      y = new BigNumber(y, b);\r\n      b = y.s;\r\n\r\n      // Either NaN?\r\n      if (!a || !b) return new BigNumber(NaN);\r\n\r\n      // Signs differ?\r\n      if (a != b) {\r\n        y.s = -b;\r\n        return x.plus(y);\r\n      }\r\n\r\n      var xe = x.e / LOG_BASE,\r\n        ye = y.e / LOG_BASE,\r\n        xc = x.c,\r\n        yc = y.c;\r\n\r\n      if (!xe || !ye) {\r\n\r\n        // Either Infinity?\r\n        if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n        // Either zero?\r\n        if (!xc[0] || !yc[0]) {\r\n\r\n          // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n          return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n           // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n           ROUNDING_MODE == 3 ? -0 : 0);\r\n        }\r\n      }\r\n\r\n      xe = bitFloor(xe);\r\n      ye = bitFloor(ye);\r\n      xc = xc.slice();\r\n\r\n      // Determine which is the bigger number.\r\n      if (a = xe - ye) {\r\n\r\n        if (xLTy = a < 0) {\r\n          a = -a;\r\n          t = xc;\r\n        } else {\r\n          ye = xe;\r\n          t = yc;\r\n        }\r\n\r\n        t.reverse();\r\n\r\n        // Prepend zeros to equalise exponents.\r\n        for (b = a; b--; t.push(0));\r\n        t.reverse();\r\n      } else {\r\n\r\n        // Exponents equal. Check digit by digit.\r\n        j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n        for (a = b = 0; b < j; b++) {\r\n\r\n          if (xc[b] != yc[b]) {\r\n            xLTy = xc[b] < yc[b];\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      // x < y? Point xc to the array of the bigger number.\r\n      if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;\r\n\r\n      b = (j = yc.length) - (i = xc.length);\r\n\r\n      // Append zeros to xc if shorter.\r\n      // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n      if (b > 0) for (; b--; xc[i++] = 0);\r\n      b = BASE - 1;\r\n\r\n      // Subtract yc from xc.\r\n      for (; j > a;) {\r\n\r\n        if (xc[--j] < yc[j]) {\r\n          for (i = j; i && !xc[--i]; xc[i] = b);\r\n          --xc[i];\r\n          xc[j] += BASE;\r\n        }\r\n\r\n        xc[j] -= yc[j];\r\n      }\r\n\r\n      // Remove leading zeros and adjust exponent accordingly.\r\n      for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n      // Zero?\r\n      if (!xc[0]) {\r\n\r\n        // Following IEEE 754 (2008) 6.3,\r\n        // n - n = +0  but  n - n = -0  when rounding towards -Infinity.\r\n        y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n        y.c = [y.e = 0];\r\n        return y;\r\n      }\r\n\r\n      // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n      // for finite x and y.\r\n      return normalise(y, xc, ye);\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 BigNumber whose value is the value of this BigNumber modulo the value of\r\n     * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n     */\r\n    P.modulo = P.mod = function (y, b) {\r\n      var q, s,\r\n        x = this;\r\n\r\n      y = new BigNumber(y, b);\r\n\r\n      // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n      if (!x.c || !y.s || y.c && !y.c[0]) {\r\n        return new BigNumber(NaN);\r\n\r\n      // Return x if y is Infinity or x is zero.\r\n      } else if (!y.c || x.c && !x.c[0]) {\r\n        return new BigNumber(x);\r\n      }\r\n\r\n      if (MODULO_MODE == 9) {\r\n\r\n        // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n        // r = x - qy    where  0 <= r < abs(y)\r\n        s = y.s;\r\n        y.s = 1;\r\n        q = div(x, y, 0, 3);\r\n        y.s = s;\r\n        q.s *= s;\r\n      } else {\r\n        q = div(x, y, 0, MODULO_MODE);\r\n      }\r\n\r\n      y = x.minus(q.times(y));\r\n\r\n      // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n      if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n      return y;\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 BigNumber whose value is the value of this BigNumber multiplied by the value\r\n     * of BigNumber(y, b).\r\n     */\r\n    P.multipliedBy = P.times = function (y, b) {\r\n      var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n        base, sqrtBase,\r\n        x = this,\r\n        xc = x.c,\r\n        yc = (y = new BigNumber(y, b)).c;\r\n\r\n      // Either NaN, \u00B1Infinity or \u00B10?\r\n      if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n        // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n        if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n          y.c = y.e = y.s = null;\r\n        } else {\r\n          y.s *= x.s;\r\n\r\n          // Return \u00B1Infinity if either is \u00B1Infinity.\r\n          if (!xc || !yc) {\r\n            y.c = y.e = null;\r\n\r\n          // Return \u00B10 if either is \u00B10.\r\n          } else {\r\n            y.c = [0];\r\n            y.e = 0;\r\n          }\r\n        }\r\n\r\n        return y;\r\n      }\r\n\r\n      e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n      y.s *= x.s;\r\n      xcL = xc.length;\r\n      ycL = yc.length;\r\n\r\n      // Ensure xc points to longer array and xcL to its length.\r\n      if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;\r\n\r\n      // Initialise the result array with zeros.\r\n      for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n      base = BASE;\r\n      sqrtBase = SQRT_BASE;\r\n\r\n      for (i = ycL; --i >= 0;) {\r\n        c = 0;\r\n        ylo = yc[i] % sqrtBase;\r\n        yhi = yc[i] / sqrtBase | 0;\r\n\r\n        for (k = xcL, j = i + k; j > i;) {\r\n          xlo = xc[--k] % sqrtBase;\r\n          xhi = xc[k] / sqrtBase | 0;\r\n          m = yhi * xlo + xhi * ylo;\r\n          xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n          c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n          zc[j--] = xlo % base;\r\n        }\r\n\r\n        zc[j] = c;\r\n      }\r\n\r\n      if (c) {\r\n        ++e;\r\n      } else {\r\n        zc.splice(0, 1);\r\n      }\r\n\r\n      return normalise(y, zc, e);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n     * i.e. multiplied by -1.\r\n     */\r\n    P.negated = function () {\r\n      var x = new BigNumber(this);\r\n      x.s = -x.s || null;\r\n      return 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 BigNumber whose value is the value of this BigNumber plus the value of\r\n     * BigNumber(y, b).\r\n     */\r\n    P.plus = function (y, b) {\r\n      var t,\r\n        x = this,\r\n        a = x.s;\r\n\r\n      y = new BigNumber(y, b);\r\n      b = y.s;\r\n\r\n      // Either NaN?\r\n      if (!a || !b) return new BigNumber(NaN);\r\n\r\n      // Signs differ?\r\n       if (a != b) {\r\n        y.s = -b;\r\n        return x.minus(y);\r\n      }\r\n\r\n      var xe = x.e / LOG_BASE,\r\n        ye = y.e / LOG_BASE,\r\n        xc = x.c,\r\n        yc = y.c;\r\n\r\n      if (!xe || !ye) {\r\n\r\n        // Return \u00B1Infinity if either \u00B1Infinity.\r\n        if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n        // Either zero?\r\n        // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n        if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n      }\r\n\r\n      xe = bitFloor(xe);\r\n      ye = bitFloor(ye);\r\n      xc = xc.slice();\r\n\r\n      // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n      if (a = xe - ye) {\r\n        if (a > 0) {\r\n          ye = xe;\r\n          t = yc;\r\n        } else {\r\n          a = -a;\r\n          t = xc;\r\n        }\r\n\r\n        t.reverse();\r\n        for (; a--; t.push(0));\r\n        t.reverse();\r\n      }\r\n\r\n      a = xc.length;\r\n      b = yc.length;\r\n\r\n      // Point xc to the longer array, and b to the shorter length.\r\n      if (a - b < 0) t = yc, yc = xc, xc = t, b = a;\r\n\r\n      // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n      for (a = 0; b;) {\r\n        a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n        xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n      }\r\n\r\n      if (a) {\r\n        xc = [a].concat(xc);\r\n        ++ye;\r\n      }\r\n\r\n      // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n      // ye = MAX_EXP + 1 possible\r\n      return normalise(y, xc, ye);\r\n    };\r\n\r\n\r\n    /*\r\n     * If sd is undefined or null or true or false, return the number of significant digits of\r\n     * the value of this BigNumber, or null if the value of this BigNumber is \u00B1Infinity or NaN.\r\n     * If sd is true include integer-part trailing zeros in the count.\r\n     *\r\n     * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n     * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n     * ROUNDING_MODE if rm is omitted.\r\n     *\r\n     * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n     *                     boolean: whether to count integer-part trailing zeros: true or false.\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n     */\r\n    P.precision = P.sd = function (sd, rm) {\r\n      var c, n, v,\r\n        x = this;\r\n\r\n      if (sd != null && sd !== !!sd) {\r\n        intCheck(sd, 1, MAX);\r\n        if (rm == null) rm = ROUNDING_MODE;\r\n        else intCheck(rm, 0, 8);\r\n\r\n        return round(new BigNumber(x), sd, rm);\r\n      }\r\n\r\n      if (!(c = x.c)) return null;\r\n      v = c.length - 1;\r\n      n = v * LOG_BASE + 1;\r\n\r\n      if (v = c[v]) {\r\n\r\n        // Subtract the number of trailing zeros of the last element.\r\n        for (; v % 10 == 0; v /= 10, n--);\r\n\r\n        // Add the number of digits of the first element.\r\n        for (v = c[0]; v >= 10; v /= 10, n++);\r\n      }\r\n\r\n      if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n      return n;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n     * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n     *\r\n     * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n     */\r\n    P.shiftedBy = function (k) {\r\n      intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n      return this.times('1e' + k);\r\n    };\r\n\r\n\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     * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n     * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n     */\r\n    P.squareRoot = P.sqrt = function () {\r\n      var m, n, r, rep, t,\r\n        x = this,\r\n        c = x.c,\r\n        s = x.s,\r\n        e = x.e,\r\n        dp = DECIMAL_PLACES + 4,\r\n        half = new BigNumber('0.5');\r\n\r\n      // Negative/NaN/Infinity/zero?\r\n      if (s !== 1 || !c || !c[0]) {\r\n        return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n      }\r\n\r\n      // Initial estimate.\r\n      s = Math.sqrt(+valueOf(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 = coeffToString(c);\r\n        if ((n.length + e) % 2 == 0) n += '0';\r\n        s = Math.sqrt(+n);\r\n        e = bitFloor((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 BigNumber(n);\r\n      } else {\r\n        r = new BigNumber(s + '');\r\n      }\r\n\r\n      // Check for zero.\r\n      // r could be zero if MIN_EXP is changed after the this value was created.\r\n      // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n      // coeffToString to throw.\r\n      if (r.c[0]) {\r\n        e = r.e;\r\n        s = e + dp;\r\n        if (s < 3) s = 0;\r\n\r\n        // Newton-Raphson iteration.\r\n        for (; ;) {\r\n          t = r;\r\n          r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n          if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n            // The exponent of r may here be one less than the final result exponent,\r\n            // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n            // are indexed correctly.\r\n            if (r.e < e) --s;\r\n            n = n.slice(s - 3, s + 1);\r\n\r\n            // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n            // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n            // 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\r\n              // exact result as the nines may infinitely repeat.\r\n              if (!rep) {\r\n                round(t, t.e + DECIMAL_PLACES + 2, 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              dp += 4;\r\n              s += 4;\r\n              rep = 1;\r\n            } else {\r\n\r\n              // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n              // result. 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                round(r, r.e + DECIMAL_PLACES + 2, 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\r\n      return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a string representing the value of this BigNumber in exponential notation and\r\n     * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n     *\r\n     * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n     */\r\n    P.toExponential = function (dp, rm) {\r\n      if (dp != null) {\r\n        intCheck(dp, 0, MAX);\r\n        dp++;\r\n      }\r\n      return format(this, dp, rm, 1);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n     * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n     *\r\n     * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n     * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n     *\r\n     * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n     */\r\n    P.toFixed = function (dp, rm) {\r\n      if (dp != null) {\r\n        intCheck(dp, 0, MAX);\r\n        dp = dp + this.e + 1;\r\n      }\r\n      return format(this, dp, rm);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n     * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n     * of the format or FORMAT object (see BigNumber.set).\r\n     *\r\n     * The formatting object may contain some or all of the properties shown below.\r\n     *\r\n     * FORMAT = {\r\n     *   prefix: '',\r\n     *   groupSize: 3,\r\n     *   secondaryGroupSize: 0,\r\n     *   groupSeparator: ',',\r\n     *   decimalSeparator: '.',\r\n     *   fractionGroupSize: 0,\r\n     *   fractionGroupSeparator: '\\xA0',      // non-breaking space\r\n     *   suffix: ''\r\n     * };\r\n     *\r\n     * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     * [format] {object} Formatting options. See FORMAT pbject above.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n     * '[BigNumber Error] Argument not an object: {format}'\r\n     */\r\n    P.toFormat = function (dp, rm, format) {\r\n      var str,\r\n        x = this;\r\n\r\n      if (format == null) {\r\n        if (dp != null && rm && typeof rm == 'object') {\r\n          format = rm;\r\n          rm = null;\r\n        } else if (dp && typeof dp == 'object') {\r\n          format = dp;\r\n          dp = rm = null;\r\n        } else {\r\n          format = FORMAT;\r\n        }\r\n      } else if (typeof format != 'object') {\r\n        throw Error\r\n          (bignumberError + 'Argument not an object: ' + format);\r\n      }\r\n\r\n      str = x.toFixed(dp, rm);\r\n\r\n      if (x.c) {\r\n        var i,\r\n          arr = str.split('.'),\r\n          g1 = +format.groupSize,\r\n          g2 = +format.secondaryGroupSize,\r\n          groupSeparator = format.groupSeparator || '',\r\n          intPart = arr[0],\r\n          fractionPart = arr[1],\r\n          isNeg = x.s < 0,\r\n          intDigits = isNeg ? intPart.slice(1) : intPart,\r\n          len = intDigits.length;\r\n\r\n        if (g2) i = g1, g1 = g2, g2 = i, len -= i;\r\n\r\n        if (g1 > 0 && len > 0) {\r\n          i = len % g1 || g1;\r\n          intPart = intDigits.substr(0, i);\r\n          for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n          if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n          if (isNeg) intPart = '-' + intPart;\r\n        }\r\n\r\n        str = fractionPart\r\n         ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n          ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n           '$&' + (format.fractionGroupSeparator || ''))\r\n          : fractionPart)\r\n         : intPart;\r\n      }\r\n\r\n      return (format.prefix || '') + str + (format.suffix || '');\r\n    };\r\n\r\n\r\n    /*\r\n     * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n     * fraction with an integer numerator and an integer denominator.\r\n     * The denominator will be a positive non-zero value less than or equal to the specified\r\n     * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n     * the lowest value necessary to represent the number exactly.\r\n     *\r\n     * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n     *\r\n     * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n     */\r\n    P.toFraction = function (md) {\r\n      var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n        x = this,\r\n        xc = x.c;\r\n\r\n      if (md != null) {\r\n        n = new BigNumber(md);\r\n\r\n        // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n        if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n          throw Error\r\n            (bignumberError + 'Argument ' +\r\n              (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n        }\r\n      }\r\n\r\n      if (!xc) return new BigNumber(x);\r\n\r\n      d = new BigNumber(ONE);\r\n      n1 = d0 = new BigNumber(ONE);\r\n      d1 = n0 = new BigNumber(ONE);\r\n      s = coeffToString(xc);\r\n\r\n      // Determine initial denominator.\r\n      // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n      e = d.e = s.length - x.e - 1;\r\n      d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n      md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n      exp = MAX_EXP;\r\n      MAX_EXP = 1 / 0;\r\n      n = new BigNumber(s);\r\n\r\n      // n0 = d1 = 0\r\n      n0.c[0] = 0;\r\n\r\n      for (; ;)  {\r\n        q = div(n, d, 0, 1);\r\n        d2 = d0.plus(q.times(d1));\r\n        if (d2.comparedTo(md) == 1) break;\r\n        d0 = d1;\r\n        d1 = d2;\r\n        n1 = n0.plus(q.times(d2 = n1));\r\n        n0 = d2;\r\n        d = n.minus(q.times(d2 = d));\r\n        n = d2;\r\n      }\r\n\r\n      d2 = div(md.minus(d0), d1, 0, 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      e = e * 2;\r\n\r\n      // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n      r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n          div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n      MAX_EXP = exp;\r\n\r\n      return r;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return the value of this BigNumber converted to a number primitive.\r\n     */\r\n    P.toNumber = function () {\r\n      return +valueOf(this);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n     * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n     * necessary to represent the integer part of the value in fixed-point notation, then use\r\n     * exponential notation.\r\n     *\r\n     * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n     *\r\n     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n     */\r\n    P.toPrecision = function (sd, rm) {\r\n      if (sd != null) intCheck(sd, 1, MAX);\r\n      return format(this, sd, rm, 2);\r\n    };\r\n\r\n\r\n    /*\r\n     * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n     * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n     * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n     * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n     * TO_EXP_NEG, return exponential notation.\r\n     *\r\n     * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n     *\r\n     * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n     */\r\n    P.toString = function (b) {\r\n      var str,\r\n        n = this,\r\n        s = n.s,\r\n        e = n.e;\r\n\r\n      // Infinity or NaN?\r\n      if (e === null) {\r\n        if (s) {\r\n          str = 'Infinity';\r\n          if (s < 0) str = '-' + str;\r\n        } else {\r\n          str = 'NaN';\r\n        }\r\n      } else {\r\n        if (b == null) {\r\n          str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n           ? toExponential(coeffToString(n.c), e)\r\n           : toFixedPoint(coeffToString(n.c), e, '0');\r\n        } else if (b === 10 && alphabetHasNormalDecimalDigits) {\r\n          n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n          str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n        } else {\r\n          intCheck(b, 2, ALPHABET.length, 'Base');\r\n          str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n        }\r\n\r\n        if (s < 0 && n.c[0]) str = '-' + str;\r\n      }\r\n\r\n      return str;\r\n    };\r\n\r\n\r\n    /*\r\n     * Return as toString, but do not accept a base argument, and include the minus sign for\r\n     * negative zero.\r\n     */\r\n    P.valueOf = P.toJSON = function () {\r\n      return valueOf(this);\r\n    };\r\n\r\n\r\n    P._isBigNumber = true;\r\n\r\n    if (configObject != null) BigNumber.set(configObject);\r\n\r\n    return BigNumber;\r\n  }\r\n\r\n\r\n  // PRIVATE HELPER FUNCTIONS\r\n\r\n  // These functions don't need access to variables,\r\n  // e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\n  function bitFloor(n) {\r\n    var i = n | 0;\r\n    return n > 0 || n === i ? i : i - 1;\r\n  }\r\n\r\n\r\n  // Return a coefficient array as a string of base 10 digits.\r\n  function coeffToString(a) {\r\n    var s, z,\r\n      i = 1,\r\n      j = a.length,\r\n      r = a[0] + '';\r\n\r\n    for (; i < j;) {\r\n      s = a[i++] + '';\r\n      z = LOG_BASE - s.length;\r\n      for (; z--; s = '0' + s);\r\n      r += s;\r\n    }\r\n\r\n    // Determine trailing zeros.\r\n    for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n    return r.slice(0, j + 1 || 1);\r\n  }\r\n\r\n\r\n  // Compare the value of BigNumbers x and y.\r\n  function compare(x, y) {\r\n    var a, b,\r\n      xc = x.c,\r\n      yc = y.c,\r\n      i = x.s,\r\n      j = y.s,\r\n      k = x.e,\r\n      l = y.e;\r\n\r\n    // Either NaN?\r\n    if (!i || !j) return null;\r\n\r\n    a = xc && !xc[0];\r\n    b = yc && !yc[0];\r\n\r\n    // Either zero?\r\n    if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n    // Signs differ?\r\n    if (i != j) return i;\r\n\r\n    a = i < 0;\r\n    b = k == l;\r\n\r\n    // Either Infinity?\r\n    if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n    // Compare exponents.\r\n    if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n    j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n    // Compare digit by digit.\r\n    for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n    // Compare lengths.\r\n    return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n  }\r\n\r\n\r\n  /*\r\n   * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n   */\r\n  function intCheck(n, min, max, name) {\r\n    if (n < min || n > max || n !== mathfloor(n)) {\r\n      throw Error\r\n       (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n         ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n         : ' not a primitive number: ') + String(n));\r\n    }\r\n  }\r\n\r\n\r\n  // Assumes finite n.\r\n  function isOdd(n) {\r\n    var k = n.c.length - 1;\r\n    return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n  }\r\n\r\n\r\n  function toExponential(str, e) {\r\n    return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n     (e < 0 ? 'e' : 'e+') + e;\r\n  }\r\n\r\n\r\n  function toFixedPoint(str, e, z) {\r\n    var len, zs;\r\n\r\n    // Negative exponent?\r\n    if (e < 0) {\r\n\r\n      // Prepend zeros.\r\n      for (zs = z + '.'; ++e; zs += z);\r\n      str = zs + str;\r\n\r\n    // Positive exponent\r\n    } else {\r\n      len = str.length;\r\n\r\n      // Append zeros.\r\n      if (++e > len) {\r\n        for (zs = z, e -= len; --e; zs += z);\r\n        str += zs;\r\n      } else if (e < len) {\r\n        str = str.slice(0, e) + '.' + str.slice(e);\r\n      }\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n\r\n  // EXPORT\r\n\r\n\r\n  BigNumber = clone();\r\n  BigNumber['default'] = BigNumber.BigNumber = BigNumber;\r\n\r\n  // AMD.\r\n  if (typeof define == 'function' && define.amd) {\r\n    define(function () { return BigNumber; });\r\n\r\n  // Node.js and other environments that support module.exports.\r\n  } else if (typeof module != 'undefined' && module.exports) {\r\n    module.exports = BigNumber;\r\n\r\n  // Browser.\r\n  } else {\r\n    if (!globalObject) {\r\n      globalObject = typeof self != 'undefined' && self ? self : window;\r\n    }\r\n\r\n    globalObject.BigNumber = BigNumber;\r\n  }\r\n})(this);\r\n", "/*\nTurbo 7.1.0\nCopyright \u00A9 2021 Basecamp, LLC\n */\n(function () {\n    if (window.Reflect === undefined || window.customElements === undefined ||\n        window.customElements.polyfillWrapFlushCallback) {\n        return;\n    }\n    const BuiltInHTMLElement = HTMLElement;\n    const wrapperForTheName = {\n        'HTMLElement': function HTMLElement() {\n            return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n        }\n    };\n    window.HTMLElement =\n        wrapperForTheName['HTMLElement'];\n    HTMLElement.prototype = BuiltInHTMLElement.prototype;\n    HTMLElement.prototype.constructor = HTMLElement;\n    Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\n/**\n * The MIT License (MIT)\n * \n * Copyright (c) 2019 Javan Makhmali\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function(prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return\n\n  prototype.requestSubmit = function(submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n  }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap;\nfunction findSubmitterFromClickTarget(target) {\n    const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n    const candidate = element ? element.closest(\"input, button\") : null;\n    return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n    const submitter = findSubmitterFromClickTarget(event.target);\n    if (submitter && submitter.form) {\n        submittersByForm.set(submitter.form, submitter);\n    }\n}\n(function () {\n    if (\"submitter\" in Event.prototype)\n        return;\n    let prototype;\n    if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n        prototype = window.SubmitEvent.prototype;\n    }\n    else if (\"SubmitEvent\" in window) {\n        return;\n    }\n    else {\n        prototype = window.Event.prototype;\n    }\n    addEventListener(\"click\", clickCaptured, true);\n    Object.defineProperty(prototype, \"submitter\", {\n        get() {\n            if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n                return submittersByForm.get(this.target);\n            }\n        }\n    });\n})();\n\nvar FrameLoadingStyle;\n(function (FrameLoadingStyle) {\n    FrameLoadingStyle[\"eager\"] = \"eager\";\n    FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nclass FrameElement extends HTMLElement {\n    constructor() {\n        super();\n        this.loaded = Promise.resolve();\n        this.delegate = new FrameElement.delegateConstructor(this);\n    }\n    static get observedAttributes() {\n        return [\"disabled\", \"loading\", \"src\"];\n    }\n    connectedCallback() {\n        this.delegate.connect();\n    }\n    disconnectedCallback() {\n        this.delegate.disconnect();\n    }\n    reload() {\n        const { src } = this;\n        this.src = null;\n        this.src = src;\n    }\n    attributeChangedCallback(name) {\n        if (name == \"loading\") {\n            this.delegate.loadingStyleChanged();\n        }\n        else if (name == \"src\") {\n            this.delegate.sourceURLChanged();\n        }\n        else {\n            this.delegate.disabledChanged();\n        }\n    }\n    get src() {\n        return this.getAttribute(\"src\");\n    }\n    set src(value) {\n        if (value) {\n            this.setAttribute(\"src\", value);\n        }\n        else {\n            this.removeAttribute(\"src\");\n        }\n    }\n    get loading() {\n        return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n    }\n    set loading(value) {\n        if (value) {\n            this.setAttribute(\"loading\", value);\n        }\n        else {\n            this.removeAttribute(\"loading\");\n        }\n    }\n    get disabled() {\n        return this.hasAttribute(\"disabled\");\n    }\n    set disabled(value) {\n        if (value) {\n            this.setAttribute(\"disabled\", \"\");\n        }\n        else {\n            this.removeAttribute(\"disabled\");\n        }\n    }\n    get autoscroll() {\n        return this.hasAttribute(\"autoscroll\");\n    }\n    set autoscroll(value) {\n        if (value) {\n            this.setAttribute(\"autoscroll\", \"\");\n        }\n        else {\n            this.removeAttribute(\"autoscroll\");\n        }\n    }\n    get complete() {\n        return !this.delegate.isLoading;\n    }\n    get isActive() {\n        return this.ownerDocument === document && !this.isPreview;\n    }\n    get isPreview() {\n        var _a, _b;\n        return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n    }\n}\nfunction frameLoadingStyleFromString(style) {\n    switch (style.toLowerCase()) {\n        case \"lazy\": return FrameLoadingStyle.lazy;\n        default: return FrameLoadingStyle.eager;\n    }\n}\n\nfunction expandURL(locatable) {\n    return new URL(locatable.toString(), document.baseURI);\n}\nfunction getAnchor(url) {\n    let anchorMatch;\n    if (url.hash) {\n        return url.hash.slice(1);\n    }\n    else if (anchorMatch = url.href.match(/#(.*)$/)) {\n        return anchorMatch[1];\n    }\n}\nfunction getAction(form, submitter) {\n    const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n    return expandURL(action);\n}\nfunction getExtension(url) {\n    return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n    return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n    const prefix = getPrefix(url);\n    return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location, rootLocation) {\n    return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\nfunction getRequestURL(url) {\n    const anchor = getAnchor(url);\n    return anchor != null\n        ? url.href.slice(0, -(anchor.length + 1))\n        : url.href;\n}\nfunction toCacheKey(url) {\n    return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n    return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n    return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n    return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n    return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n    return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n    constructor(response) {\n        this.response = response;\n    }\n    get succeeded() {\n        return this.response.ok;\n    }\n    get failed() {\n        return !this.succeeded;\n    }\n    get clientError() {\n        return this.statusCode >= 400 && this.statusCode <= 499;\n    }\n    get serverError() {\n        return this.statusCode >= 500 && this.statusCode <= 599;\n    }\n    get redirected() {\n        return this.response.redirected;\n    }\n    get location() {\n        return expandURL(this.response.url);\n    }\n    get isHTML() {\n        return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n    }\n    get statusCode() {\n        return this.response.status;\n    }\n    get contentType() {\n        return this.header(\"Content-Type\");\n    }\n    get responseText() {\n        return this.response.clone().text();\n    }\n    get responseHTML() {\n        if (this.isHTML) {\n            return this.response.clone().text();\n        }\n        else {\n            return Promise.resolve(undefined);\n        }\n    }\n    header(name) {\n        return this.response.headers.get(name);\n    }\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n    const event = new CustomEvent(eventName, { cancelable, bubbles: true, detail });\n    if (target && target.isConnected) {\n        target.dispatchEvent(event);\n    }\n    else {\n        document.documentElement.dispatchEvent(event);\n    }\n    return event;\n}\nfunction nextAnimationFrame() {\n    return new Promise(resolve => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n    return new Promise(resolve => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n    return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n    return new DOMParser().parseFromString(html, \"text/html\");\n}\nfunction unindent(strings, ...values) {\n    const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n    const match = lines[0].match(/^\\s+/);\n    const indent = match ? match[0].length : 0;\n    return lines.map(line => line.slice(indent)).join(\"\\n\");\n}\nfunction interpolate(strings, values) {\n    return strings.reduce((result, string, i) => {\n        const value = values[i] == undefined ? \"\" : values[i];\n        return result + string + value;\n    }, \"\");\n}\nfunction uuid() {\n    return Array.apply(null, { length: 36 }).map((_, i) => {\n        if (i == 8 || i == 13 || i == 18 || i == 23) {\n            return \"-\";\n        }\n        else if (i == 14) {\n            return \"4\";\n        }\n        else if (i == 19) {\n            return (Math.floor(Math.random() * 4) + 8).toString(16);\n        }\n        else {\n            return Math.floor(Math.random() * 15).toString(16);\n        }\n    }).join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n    for (const value of elements.map(element => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n        if (typeof value == \"string\")\n            return value;\n    }\n    return null;\n}\nfunction markAsBusy(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.setAttribute(\"busy\", \"\");\n        }\n        element.setAttribute(\"aria-busy\", \"true\");\n    }\n}\nfunction clearBusyState(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.removeAttribute(\"busy\");\n        }\n        element.removeAttribute(\"aria-busy\");\n    }\n}\n\nvar FetchMethod;\n(function (FetchMethod) {\n    FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n    FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n    FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n    FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n    FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\nfunction fetchMethodFromString(method) {\n    switch (method.toLowerCase()) {\n        case \"get\": return FetchMethod.get;\n        case \"post\": return FetchMethod.post;\n        case \"put\": return FetchMethod.put;\n        case \"patch\": return FetchMethod.patch;\n        case \"delete\": return FetchMethod.delete;\n    }\n}\nclass FetchRequest {\n    constructor(delegate, method, location, body = new URLSearchParams, target = null) {\n        this.abortController = new AbortController;\n        this.resolveRequestPromise = (value) => { };\n        this.delegate = delegate;\n        this.method = method;\n        this.headers = this.defaultHeaders;\n        this.body = body;\n        this.url = location;\n        this.target = target;\n    }\n    get location() {\n        return this.url;\n    }\n    get params() {\n        return this.url.searchParams;\n    }\n    get entries() {\n        return this.body ? Array.from(this.body.entries()) : [];\n    }\n    cancel() {\n        this.abortController.abort();\n    }\n    async perform() {\n        var _a, _b;\n        const { fetchOptions } = this;\n        (_b = (_a = this.delegate).prepareHeadersForRequest) === null || _b === void 0 ? void 0 : _b.call(_a, this.headers, this);\n        await this.allowRequestToBeIntercepted(fetchOptions);\n        try {\n            this.delegate.requestStarted(this);\n            const response = await fetch(this.url.href, fetchOptions);\n            return await this.receive(response);\n        }\n        catch (error) {\n            if (error.name !== 'AbortError') {\n                this.delegate.requestErrored(this, error);\n                throw error;\n            }\n        }\n        finally {\n            this.delegate.requestFinished(this);\n        }\n    }\n    async receive(response) {\n        const fetchResponse = new FetchResponse(response);\n        const event = dispatch(\"turbo:before-fetch-response\", { cancelable: true, detail: { fetchResponse }, target: this.target });\n        if (event.defaultPrevented) {\n            this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n        }\n        else if (fetchResponse.succeeded) {\n            this.delegate.requestSucceededWithResponse(this, fetchResponse);\n        }\n        else {\n            this.delegate.requestFailedWithResponse(this, fetchResponse);\n        }\n        return fetchResponse;\n    }\n    get fetchOptions() {\n        var _a;\n        return {\n            method: FetchMethod[this.method].toUpperCase(),\n            credentials: \"same-origin\",\n            headers: this.headers,\n            redirect: \"follow\",\n            body: this.isIdempotent ? null : this.body,\n            signal: this.abortSignal,\n            referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href\n        };\n    }\n    get defaultHeaders() {\n        return {\n            \"Accept\": \"text/html, application/xhtml+xml\"\n        };\n    }\n    get isIdempotent() {\n        return this.method == FetchMethod.get;\n    }\n    get abortSignal() {\n        return this.abortController.signal;\n    }\n    async allowRequestToBeIntercepted(fetchOptions) {\n        const requestInterception = new Promise(resolve => this.resolveRequestPromise = resolve);\n        const event = dispatch(\"turbo:before-fetch-request\", {\n            cancelable: true,\n            detail: {\n                fetchOptions,\n                url: this.url,\n                resume: this.resolveRequestPromise\n            },\n            target: this.target\n        });\n        if (event.defaultPrevented)\n            await requestInterception;\n    }\n}\n\nclass AppearanceObserver {\n    constructor(delegate, element) {\n        this.started = false;\n        this.intersect = entries => {\n            const lastEntry = entries.slice(-1)[0];\n            if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n                this.delegate.elementAppearedInViewport(this.element);\n            }\n        };\n        this.delegate = delegate;\n        this.element = element;\n        this.intersectionObserver = new IntersectionObserver(this.intersect);\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.intersectionObserver.observe(this.element);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.intersectionObserver.unobserve(this.element);\n        }\n    }\n}\n\nclass StreamMessage {\n    constructor(html) {\n        this.templateElement = document.createElement(\"template\");\n        this.templateElement.innerHTML = html;\n    }\n    static wrap(message) {\n        if (typeof message == \"string\") {\n            return new this(message);\n        }\n        else {\n            return message;\n        }\n    }\n    get fragment() {\n        const fragment = document.createDocumentFragment();\n        for (const element of this.foreignElements) {\n            fragment.appendChild(document.importNode(element, true));\n        }\n        return fragment;\n    }\n    get foreignElements() {\n        return this.templateChildren.reduce((streamElements, child) => {\n            if (child.tagName.toLowerCase() == \"turbo-stream\") {\n                return [...streamElements, child];\n            }\n            else {\n                return streamElements;\n            }\n        }, []);\n    }\n    get templateChildren() {\n        return Array.from(this.templateElement.content.children);\n    }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\n\nvar FormSubmissionState;\n(function (FormSubmissionState) {\n    FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n    FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n    FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n    FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n    FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n    FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function (FormEnctype) {\n    FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n    FormEnctype[\"multipart\"] = \"multipart/form-data\";\n    FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n    switch (encoding.toLowerCase()) {\n        case FormEnctype.multipart: return FormEnctype.multipart;\n        case FormEnctype.plain: return FormEnctype.plain;\n        default: return FormEnctype.urlEncoded;\n    }\n}\nclass FormSubmission {\n    constructor(delegate, formElement, submitter, mustRedirect = false) {\n        this.state = FormSubmissionState.initialized;\n        this.delegate = delegate;\n        this.formElement = formElement;\n        this.submitter = submitter;\n        this.formData = buildFormData(formElement, submitter);\n        this.location = expandURL(this.action);\n        if (this.method == FetchMethod.get) {\n            mergeFormDataEntries(this.location, [...this.body.entries()]);\n        }\n        this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n        this.mustRedirect = mustRedirect;\n    }\n    static confirmMethod(message, element) {\n        return confirm(message);\n    }\n    get method() {\n        var _a;\n        const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n        return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n    }\n    get action() {\n        var _a;\n        const formElementAction = typeof this.formElement.action === 'string' ? this.formElement.action : null;\n        return ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formaction\")) || this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n    }\n    get body() {\n        if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n            return new URLSearchParams(this.stringFormData);\n        }\n        else {\n            return this.formData;\n        }\n    }\n    get enctype() {\n        var _a;\n        return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n    }\n    get isIdempotent() {\n        return this.fetchRequest.isIdempotent;\n    }\n    get stringFormData() {\n        return [...this.formData].reduce((entries, [name, value]) => {\n            return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n        }, []);\n    }\n    get confirmationMessage() {\n        return this.formElement.getAttribute(\"data-turbo-confirm\");\n    }\n    get needsConfirmation() {\n        return this.confirmationMessage !== null;\n    }\n    async start() {\n        const { initialized, requesting } = FormSubmissionState;\n        if (this.needsConfirmation) {\n            const answer = FormSubmission.confirmMethod(this.confirmationMessage, this.formElement);\n            if (!answer) {\n                return;\n            }\n        }\n        if (this.state == initialized) {\n            this.state = requesting;\n            return this.fetchRequest.perform();\n        }\n    }\n    stop() {\n        const { stopping, stopped } = FormSubmissionState;\n        if (this.state != stopping && this.state != stopped) {\n            this.state = stopping;\n            this.fetchRequest.cancel();\n            return true;\n        }\n    }\n    prepareHeadersForRequest(headers, request) {\n        if (!request.isIdempotent) {\n            const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n            if (token) {\n                headers[\"X-CSRF-Token\"] = token;\n            }\n            headers[\"Accept\"] = [StreamMessage.contentType, headers[\"Accept\"]].join(\", \");\n        }\n    }\n    requestStarted(request) {\n        var _a;\n        this.state = FormSubmissionState.waiting;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n        dispatch(\"turbo:submit-start\", { target: this.formElement, detail: { formSubmission: this } });\n        this.delegate.formSubmissionStarted(this);\n    }\n    requestPreventedHandlingResponse(request, response) {\n        this.result = { success: response.succeeded, fetchResponse: response };\n    }\n    requestSucceededWithResponse(request, response) {\n        if (response.clientError || response.serverError) {\n            this.delegate.formSubmissionFailedWithResponse(this, response);\n        }\n        else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n            const error = new Error(\"Form responses must redirect to another location\");\n            this.delegate.formSubmissionErrored(this, error);\n        }\n        else {\n            this.state = FormSubmissionState.receiving;\n            this.result = { success: true, fetchResponse: response };\n            this.delegate.formSubmissionSucceededWithResponse(this, response);\n        }\n    }\n    requestFailedWithResponse(request, response) {\n        this.result = { success: false, fetchResponse: response };\n        this.delegate.formSubmissionFailedWithResponse(this, response);\n    }\n    requestErrored(request, error) {\n        this.result = { success: false, error };\n        this.delegate.formSubmissionErrored(this, error);\n    }\n    requestFinished(request) {\n        var _a;\n        this.state = FormSubmissionState.stopped;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n        dispatch(\"turbo:submit-end\", { target: this.formElement, detail: Object.assign({ formSubmission: this }, this.result) });\n        this.delegate.formSubmissionFinished(this);\n    }\n    requestMustRedirect(request) {\n        return !request.isIdempotent && this.mustRedirect;\n    }\n}\nfunction buildFormData(formElement, submitter) {\n    const formData = new FormData(formElement);\n    const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n    const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n    if (name && value != null && formData.get(name) != value) {\n        formData.append(name, value);\n    }\n    return formData;\n}\nfunction getCookieValue(cookieName) {\n    if (cookieName != null) {\n        const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n        const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n        if (cookie) {\n            const value = cookie.split(\"=\").slice(1).join(\"=\");\n            return value ? decodeURIComponent(value) : undefined;\n        }\n    }\n}\nfunction getMetaContent(name) {\n    const element = document.querySelector(`meta[name=\"${name}\"]`);\n    return element && element.content;\n}\nfunction responseSucceededWithoutRedirect(response) {\n    return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n    const searchParams = new URLSearchParams;\n    for (const [name, value] of entries) {\n        if (value instanceof File)\n            continue;\n        searchParams.append(name, value);\n    }\n    url.search = searchParams.toString();\n    return url;\n}\n\nclass Snapshot {\n    constructor(element) {\n        this.element = element;\n    }\n    get children() {\n        return [...this.element.children];\n    }\n    hasAnchor(anchor) {\n        return this.getElementForAnchor(anchor) != null;\n    }\n    getElementForAnchor(anchor) {\n        return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n    }\n    get isConnected() {\n        return this.element.isConnected;\n    }\n    get firstAutofocusableElement() {\n        return this.element.querySelector(\"[autofocus]\");\n    }\n    get permanentElements() {\n        return [...this.element.querySelectorAll(\"[id][data-turbo-permanent]\")];\n    }\n    getPermanentElementById(id) {\n        return this.element.querySelector(`#${id}[data-turbo-permanent]`);\n    }\n    getPermanentElementMapForSnapshot(snapshot) {\n        const permanentElementMap = {};\n        for (const currentPermanentElement of this.permanentElements) {\n            const { id } = currentPermanentElement;\n            const newPermanentElement = snapshot.getPermanentElementById(id);\n            if (newPermanentElement) {\n                permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n            }\n        }\n        return permanentElementMap;\n    }\n}\n\nclass FormInterceptor {\n    constructor(delegate, element) {\n        this.submitBubbled = ((event) => {\n            const form = event.target;\n            if (!event.defaultPrevented && form instanceof HTMLFormElement && form.closest(\"turbo-frame, html\") == this.element) {\n                const submitter = event.submitter || undefined;\n                const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.method;\n                if (method != \"dialog\" && this.delegate.shouldInterceptFormSubmission(form, submitter)) {\n                    event.preventDefault();\n                    event.stopImmediatePropagation();\n                    this.delegate.formSubmissionIntercepted(form, submitter);\n                }\n            }\n        });\n        this.delegate = delegate;\n        this.element = element;\n    }\n    start() {\n        this.element.addEventListener(\"submit\", this.submitBubbled);\n    }\n    stop() {\n        this.element.removeEventListener(\"submit\", this.submitBubbled);\n    }\n}\n\nclass View {\n    constructor(delegate, element) {\n        this.resolveRenderPromise = (value) => { };\n        this.resolveInterceptionPromise = (value) => { };\n        this.delegate = delegate;\n        this.element = element;\n    }\n    scrollToAnchor(anchor) {\n        const element = this.snapshot.getElementForAnchor(anchor);\n        if (element) {\n            this.scrollToElement(element);\n            this.focusElement(element);\n        }\n        else {\n            this.scrollToPosition({ x: 0, y: 0 });\n        }\n    }\n    scrollToAnchorFromLocation(location) {\n        this.scrollToAnchor(getAnchor(location));\n    }\n    scrollToElement(element) {\n        element.scrollIntoView();\n    }\n    focusElement(element) {\n        if (element instanceof HTMLElement) {\n            if (element.hasAttribute(\"tabindex\")) {\n                element.focus();\n            }\n            else {\n                element.setAttribute(\"tabindex\", \"-1\");\n                element.focus();\n                element.removeAttribute(\"tabindex\");\n            }\n        }\n    }\n    scrollToPosition({ x, y }) {\n        this.scrollRoot.scrollTo(x, y);\n    }\n    scrollToTop() {\n        this.scrollToPosition({ x: 0, y: 0 });\n    }\n    get scrollRoot() {\n        return window;\n    }\n    async render(renderer) {\n        const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n        if (shouldRender) {\n            try {\n                this.renderPromise = new Promise(resolve => this.resolveRenderPromise = resolve);\n                this.renderer = renderer;\n                this.prepareToRenderSnapshot(renderer);\n                const renderInterception = new Promise(resolve => this.resolveInterceptionPromise = resolve);\n                const immediateRender = this.delegate.allowsImmediateRender(snapshot, this.resolveInterceptionPromise);\n                if (!immediateRender)\n                    await renderInterception;\n                await this.renderSnapshot(renderer);\n                this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n                this.finishRenderingSnapshot(renderer);\n            }\n            finally {\n                delete this.renderer;\n                this.resolveRenderPromise(undefined);\n                delete this.renderPromise;\n            }\n        }\n        else {\n            this.invalidate();\n        }\n    }\n    invalidate() {\n        this.delegate.viewInvalidated();\n    }\n    prepareToRenderSnapshot(renderer) {\n        this.markAsPreview(renderer.isPreview);\n        renderer.prepareToRender();\n    }\n    markAsPreview(isPreview) {\n        if (isPreview) {\n            this.element.setAttribute(\"data-turbo-preview\", \"\");\n        }\n        else {\n            this.element.removeAttribute(\"data-turbo-preview\");\n        }\n    }\n    async renderSnapshot(renderer) {\n        await renderer.render();\n    }\n    finishRenderingSnapshot(renderer) {\n        renderer.finishRendering();\n    }\n}\n\nclass FrameView extends View {\n    invalidate() {\n        this.element.innerHTML = \"\";\n    }\n    get snapshot() {\n        return new Snapshot(this.element);\n    }\n}\n\nclass LinkInterceptor {\n    constructor(delegate, element) {\n        this.clickBubbled = (event) => {\n            if (this.respondsToEventTarget(event.target)) {\n                this.clickEvent = event;\n            }\n            else {\n                delete this.clickEvent;\n            }\n        };\n        this.linkClicked = ((event) => {\n            if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n                if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url)) {\n                    this.clickEvent.preventDefault();\n                    event.preventDefault();\n                    this.delegate.linkClickIntercepted(event.target, event.detail.url);\n                }\n            }\n            delete this.clickEvent;\n        });\n        this.willVisit = () => {\n            delete this.clickEvent;\n        };\n        this.delegate = delegate;\n        this.element = element;\n    }\n    start() {\n        this.element.addEventListener(\"click\", this.clickBubbled);\n        document.addEventListener(\"turbo:click\", this.linkClicked);\n        document.addEventListener(\"turbo:before-visit\", this.willVisit);\n    }\n    stop() {\n        this.element.removeEventListener(\"click\", this.clickBubbled);\n        document.removeEventListener(\"turbo:click\", this.linkClicked);\n        document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n    }\n    respondsToEventTarget(target) {\n        const element = target instanceof Element\n            ? target\n            : target instanceof Node\n                ? target.parentElement\n                : null;\n        return element && element.closest(\"turbo-frame, html\") == this.element;\n    }\n}\n\nclass Bardo {\n    constructor(permanentElementMap) {\n        this.permanentElementMap = permanentElementMap;\n    }\n    static preservingPermanentElements(permanentElementMap, callback) {\n        const bardo = new this(permanentElementMap);\n        bardo.enter();\n        callback();\n        bardo.leave();\n    }\n    enter() {\n        for (const id in this.permanentElementMap) {\n            const [, newPermanentElement] = this.permanentElementMap[id];\n            this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n        }\n    }\n    leave() {\n        for (const id in this.permanentElementMap) {\n            const [currentPermanentElement] = this.permanentElementMap[id];\n            this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n            this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n        }\n    }\n    replaceNewPermanentElementWithPlaceholder(permanentElement) {\n        const placeholder = createPlaceholderForPermanentElement(permanentElement);\n        permanentElement.replaceWith(placeholder);\n    }\n    replaceCurrentPermanentElementWithClone(permanentElement) {\n        const clone = permanentElement.cloneNode(true);\n        permanentElement.replaceWith(clone);\n    }\n    replacePlaceholderWithPermanentElement(permanentElement) {\n        const placeholder = this.getPlaceholderById(permanentElement.id);\n        placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n    }\n    getPlaceholderById(id) {\n        return this.placeholders.find(element => element.content == id);\n    }\n    get placeholders() {\n        return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n    }\n}\nfunction createPlaceholderForPermanentElement(permanentElement) {\n    const element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n    element.setAttribute(\"content\", permanentElement.id);\n    return element;\n}\n\nclass Renderer {\n    constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n        this.currentSnapshot = currentSnapshot;\n        this.newSnapshot = newSnapshot;\n        this.isPreview = isPreview;\n        this.willRender = willRender;\n        this.promise = new Promise((resolve, reject) => this.resolvingFunctions = { resolve, reject });\n    }\n    get shouldRender() {\n        return true;\n    }\n    prepareToRender() {\n        return;\n    }\n    finishRendering() {\n        if (this.resolvingFunctions) {\n            this.resolvingFunctions.resolve();\n            delete this.resolvingFunctions;\n        }\n    }\n    createScriptElement(element) {\n        if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n            return element;\n        }\n        else {\n            const createdScriptElement = document.createElement(\"script\");\n            if (this.cspNonce) {\n                createdScriptElement.nonce = this.cspNonce;\n            }\n            createdScriptElement.textContent = element.textContent;\n            createdScriptElement.async = false;\n            copyElementAttributes(createdScriptElement, element);\n            return createdScriptElement;\n        }\n    }\n    preservingPermanentElements(callback) {\n        Bardo.preservingPermanentElements(this.permanentElementMap, callback);\n    }\n    focusFirstAutofocusableElement() {\n        const element = this.connectedSnapshot.firstAutofocusableElement;\n        if (elementIsFocusable(element)) {\n            element.focus();\n        }\n    }\n    get connectedSnapshot() {\n        return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n    }\n    get currentElement() {\n        return this.currentSnapshot.element;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    get permanentElementMap() {\n        return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n    }\n    get cspNonce() {\n        var _a;\n        return (_a = document.head.querySelector('meta[name=\"csp-nonce\"]')) === null || _a === void 0 ? void 0 : _a.getAttribute(\"content\");\n    }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n    for (const { name, value } of [...sourceElement.attributes]) {\n        destinationElement.setAttribute(name, value);\n    }\n}\nfunction elementIsFocusable(element) {\n    return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n    get shouldRender() {\n        return true;\n    }\n    async render() {\n        await nextAnimationFrame();\n        this.preservingPermanentElements(() => {\n            this.loadFrameElement();\n        });\n        this.scrollFrameIntoView();\n        await nextAnimationFrame();\n        this.focusFirstAutofocusableElement();\n        await nextAnimationFrame();\n        this.activateScriptElements();\n    }\n    loadFrameElement() {\n        var _a;\n        const destinationRange = document.createRange();\n        destinationRange.selectNodeContents(this.currentElement);\n        destinationRange.deleteContents();\n        const frameElement = this.newElement;\n        const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n        if (sourceRange) {\n            sourceRange.selectNodeContents(frameElement);\n            this.currentElement.appendChild(sourceRange.extractContents());\n        }\n    }\n    scrollFrameIntoView() {\n        if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n            const element = this.currentElement.firstElementChild;\n            const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n            if (element) {\n                element.scrollIntoView({ block });\n                return true;\n            }\n        }\n        return false;\n    }\n    activateScriptElements() {\n        for (const inertScriptElement of this.newScriptElements) {\n            const activatedScriptElement = this.createScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    get newScriptElements() {\n        return this.currentElement.querySelectorAll(\"script\");\n    }\n}\nfunction readScrollLogicalPosition(value, defaultValue) {\n    if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n        return value;\n    }\n    else {\n        return defaultValue;\n    }\n}\n\nclass ProgressBar {\n    constructor() {\n        this.hiding = false;\n        this.value = 0;\n        this.visible = false;\n        this.trickle = () => {\n            this.setValue(this.value + Math.random() / 100);\n        };\n        this.stylesheetElement = this.createStylesheetElement();\n        this.progressElement = this.createProgressElement();\n        this.installStylesheetElement();\n        this.setValue(0);\n    }\n    static get defaultCSS() {\n        return unindent `\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 9999;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `;\n    }\n    show() {\n        if (!this.visible) {\n            this.visible = true;\n            this.installProgressElement();\n            this.startTrickling();\n        }\n    }\n    hide() {\n        if (this.visible && !this.hiding) {\n            this.hiding = true;\n            this.fadeProgressElement(() => {\n                this.uninstallProgressElement();\n                this.stopTrickling();\n                this.visible = false;\n                this.hiding = false;\n            });\n        }\n    }\n    setValue(value) {\n        this.value = value;\n        this.refresh();\n    }\n    installStylesheetElement() {\n        document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n    }\n    installProgressElement() {\n        this.progressElement.style.width = \"0\";\n        this.progressElement.style.opacity = \"1\";\n        document.documentElement.insertBefore(this.progressElement, document.body);\n        this.refresh();\n    }\n    fadeProgressElement(callback) {\n        this.progressElement.style.opacity = \"0\";\n        setTimeout(callback, ProgressBar.animationDuration * 1.5);\n    }\n    uninstallProgressElement() {\n        if (this.progressElement.parentNode) {\n            document.documentElement.removeChild(this.progressElement);\n        }\n    }\n    startTrickling() {\n        if (!this.trickleInterval) {\n            this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n        }\n    }\n    stopTrickling() {\n        window.clearInterval(this.trickleInterval);\n        delete this.trickleInterval;\n    }\n    refresh() {\n        requestAnimationFrame(() => {\n            this.progressElement.style.width = `${10 + (this.value * 90)}%`;\n        });\n    }\n    createStylesheetElement() {\n        const element = document.createElement(\"style\");\n        element.type = \"text/css\";\n        element.textContent = ProgressBar.defaultCSS;\n        return element;\n    }\n    createProgressElement() {\n        const element = document.createElement(\"div\");\n        element.className = \"turbo-progress-bar\";\n        return element;\n    }\n}\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n    constructor() {\n        super(...arguments);\n        this.detailsByOuterHTML = this.children\n            .filter((element) => !elementIsNoscript(element))\n            .map((element) => elementWithoutNonce(element))\n            .reduce((result, element) => {\n            const { outerHTML } = element;\n            const details = outerHTML in result\n                ? result[outerHTML]\n                : {\n                    type: elementType(element),\n                    tracked: elementIsTracked(element),\n                    elements: []\n                };\n            return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n        }, {});\n    }\n    get trackedElementSignature() {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter(outerHTML => this.detailsByOuterHTML[outerHTML].tracked)\n            .join(\"\");\n    }\n    getScriptElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n    }\n    getStylesheetElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n    }\n    getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter(outerHTML => !(outerHTML in snapshot.detailsByOuterHTML))\n            .map(outerHTML => this.detailsByOuterHTML[outerHTML])\n            .filter(({ type }) => type == matchedType)\n            .map(({ elements: [element] }) => element);\n    }\n    get provisionalElements() {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n            if (type == null && !tracked) {\n                return [...result, ...elements];\n            }\n            else if (elements.length > 1) {\n                return [...result, ...elements.slice(1)];\n            }\n            else {\n                return result;\n            }\n        }, []);\n    }\n    getMetaValue(name) {\n        const element = this.findMetaElementByName(name);\n        return element\n            ? element.getAttribute(\"content\")\n            : null;\n    }\n    findMetaElementByName(name) {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { elements: [element] } = this.detailsByOuterHTML[outerHTML];\n            return elementIsMetaElementWithName(element, name) ? element : result;\n        }, undefined);\n    }\n}\nfunction elementType(element) {\n    if (elementIsScript(element)) {\n        return \"script\";\n    }\n    else if (elementIsStylesheet(element)) {\n        return \"stylesheet\";\n    }\n}\nfunction elementIsTracked(element) {\n    return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n    const tagName = element.tagName.toLowerCase();\n    return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n    const tagName = element.tagName.toLowerCase();\n    return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n    const tagName = element.tagName.toLowerCase();\n    return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n    const tagName = element.tagName.toLowerCase();\n    return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n    if (element.hasAttribute(\"nonce\")) {\n        element.setAttribute(\"nonce\", \"\");\n    }\n    return element;\n}\n\nclass PageSnapshot extends Snapshot {\n    constructor(element, headSnapshot) {\n        super(element);\n        this.headSnapshot = headSnapshot;\n    }\n    static fromHTMLString(html = \"\") {\n        return this.fromDocument(parseHTMLDocument(html));\n    }\n    static fromElement(element) {\n        return this.fromDocument(element.ownerDocument);\n    }\n    static fromDocument({ head, body }) {\n        return new this(body, new HeadSnapshot(head));\n    }\n    clone() {\n        return new PageSnapshot(this.element.cloneNode(true), this.headSnapshot);\n    }\n    get headElement() {\n        return this.headSnapshot.element;\n    }\n    get rootLocation() {\n        var _a;\n        const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n    get cacheControlValue() {\n        return this.getSetting(\"cache-control\");\n    }\n    get isPreviewable() {\n        return this.cacheControlValue != \"no-preview\";\n    }\n    get isCacheable() {\n        return this.cacheControlValue != \"no-cache\";\n    }\n    get isVisitable() {\n        return this.getSetting(\"visit-control\") != \"reload\";\n    }\n    getSetting(name) {\n        return this.headSnapshot.getMetaValue(`turbo-${name}`);\n    }\n}\n\nvar TimingMetric;\n(function (TimingMetric) {\n    TimingMetric[\"visitStart\"] = \"visitStart\";\n    TimingMetric[\"requestStart\"] = \"requestStart\";\n    TimingMetric[\"requestEnd\"] = \"requestEnd\";\n    TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function (VisitState) {\n    VisitState[\"initialized\"] = \"initialized\";\n    VisitState[\"started\"] = \"started\";\n    VisitState[\"canceled\"] = \"canceled\";\n    VisitState[\"failed\"] = \"failed\";\n    VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nconst defaultOptions = {\n    action: \"advance\",\n    historyChanged: false,\n    visitCachedSnapshot: () => { },\n    willRender: true,\n};\nvar SystemStatusCode;\n(function (SystemStatusCode) {\n    SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n    SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n    SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nclass Visit {\n    constructor(delegate, location, restorationIdentifier, options = {}) {\n        this.identifier = uuid();\n        this.timingMetrics = {};\n        this.followedRedirect = false;\n        this.historyChanged = false;\n        this.scrolled = false;\n        this.snapshotCached = false;\n        this.state = VisitState.initialized;\n        this.delegate = delegate;\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier || uuid();\n        const { action, historyChanged, referrer, snapshotHTML, response, visitCachedSnapshot, willRender } = Object.assign(Object.assign({}, defaultOptions), options);\n        this.action = action;\n        this.historyChanged = historyChanged;\n        this.referrer = referrer;\n        this.snapshotHTML = snapshotHTML;\n        this.response = response;\n        this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n        this.visitCachedSnapshot = visitCachedSnapshot;\n        this.willRender = willRender;\n        this.scrolled = !willRender;\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    get restorationData() {\n        return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n    }\n    get silent() {\n        return this.isSamePage;\n    }\n    start() {\n        if (this.state == VisitState.initialized) {\n            this.recordTimingMetric(TimingMetric.visitStart);\n            this.state = VisitState.started;\n            this.adapter.visitStarted(this);\n            this.delegate.visitStarted(this);\n        }\n    }\n    cancel() {\n        if (this.state == VisitState.started) {\n            if (this.request) {\n                this.request.cancel();\n            }\n            this.cancelRender();\n            this.state = VisitState.canceled;\n        }\n    }\n    complete() {\n        if (this.state == VisitState.started) {\n            this.recordTimingMetric(TimingMetric.visitEnd);\n            this.state = VisitState.completed;\n            this.adapter.visitCompleted(this);\n            this.delegate.visitCompleted(this);\n            this.followRedirect();\n        }\n    }\n    fail() {\n        if (this.state == VisitState.started) {\n            this.state = VisitState.failed;\n            this.adapter.visitFailed(this);\n        }\n    }\n    changeHistory() {\n        var _a;\n        if (!this.historyChanged) {\n            const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n            const method = this.getHistoryMethodForAction(actionForHistory);\n            this.history.update(method, this.location, this.restorationIdentifier);\n            this.historyChanged = true;\n        }\n    }\n    issueRequest() {\n        if (this.hasPreloadedResponse()) {\n            this.simulateRequest();\n        }\n        else if (this.shouldIssueRequest() && !this.request) {\n            this.request = new FetchRequest(this, FetchMethod.get, this.location);\n            this.request.perform();\n        }\n    }\n    simulateRequest() {\n        if (this.response) {\n            this.startRequest();\n            this.recordResponse();\n            this.finishRequest();\n        }\n    }\n    startRequest() {\n        this.recordTimingMetric(TimingMetric.requestStart);\n        this.adapter.visitRequestStarted(this);\n    }\n    recordResponse(response = this.response) {\n        this.response = response;\n        if (response) {\n            const { statusCode } = response;\n            if (isSuccessful(statusCode)) {\n                this.adapter.visitRequestCompleted(this);\n            }\n            else {\n                this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n            }\n        }\n    }\n    finishRequest() {\n        this.recordTimingMetric(TimingMetric.requestEnd);\n        this.adapter.visitRequestFinished(this);\n    }\n    loadResponse() {\n        if (this.response) {\n            const { statusCode, responseHTML } = this.response;\n            this.render(async () => {\n                this.cacheSnapshot();\n                if (this.view.renderPromise)\n                    await this.view.renderPromise;\n                if (isSuccessful(statusCode) && responseHTML != null) {\n                    await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender);\n                    this.adapter.visitRendered(this);\n                    this.complete();\n                }\n                else {\n                    await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML));\n                    this.adapter.visitRendered(this);\n                    this.fail();\n                }\n            });\n        }\n    }\n    getCachedSnapshot() {\n        const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n        if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n            if (this.action == \"restore\" || snapshot.isPreviewable) {\n                return snapshot;\n            }\n        }\n    }\n    getPreloadedSnapshot() {\n        if (this.snapshotHTML) {\n            return PageSnapshot.fromHTMLString(this.snapshotHTML);\n        }\n    }\n    hasCachedSnapshot() {\n        return this.getCachedSnapshot() != null;\n    }\n    loadCachedSnapshot() {\n        const snapshot = this.getCachedSnapshot();\n        if (snapshot) {\n            const isPreview = this.shouldIssueRequest();\n            this.render(async () => {\n                this.cacheSnapshot();\n                if (this.isSamePage) {\n                    this.adapter.visitRendered(this);\n                }\n                else {\n                    if (this.view.renderPromise)\n                        await this.view.renderPromise;\n                    await this.view.renderPage(snapshot, isPreview, this.willRender);\n                    this.adapter.visitRendered(this);\n                    if (!isPreview) {\n                        this.complete();\n                    }\n                }\n            });\n        }\n    }\n    followRedirect() {\n        var _a;\n        if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n            this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n                action: 'replace',\n                response: this.response\n            });\n            this.followedRedirect = true;\n        }\n    }\n    goToSamePageAnchor() {\n        if (this.isSamePage) {\n            this.render(async () => {\n                this.cacheSnapshot();\n                this.adapter.visitRendered(this);\n            });\n        }\n    }\n    requestStarted() {\n        this.startRequest();\n    }\n    requestPreventedHandlingResponse(request, response) {\n    }\n    async requestSucceededWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({ statusCode: SystemStatusCode.contentTypeMismatch, redirected });\n        }\n        else {\n            this.redirectedToLocation = response.redirected ? response.location : undefined;\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    async requestFailedWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({ statusCode: SystemStatusCode.contentTypeMismatch, redirected });\n        }\n        else {\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    requestErrored(request, error) {\n        this.recordResponse({ statusCode: SystemStatusCode.networkFailure, redirected: false });\n    }\n    requestFinished() {\n        this.finishRequest();\n    }\n    performScroll() {\n        if (!this.scrolled) {\n            if (this.action == \"restore\") {\n                this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            else {\n                this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            if (this.isSamePage) {\n                this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n            }\n            this.scrolled = true;\n        }\n    }\n    scrollToRestoredPosition() {\n        const { scrollPosition } = this.restorationData;\n        if (scrollPosition) {\n            this.view.scrollToPosition(scrollPosition);\n            return true;\n        }\n    }\n    scrollToAnchor() {\n        const anchor = getAnchor(this.location);\n        if (anchor != null) {\n            this.view.scrollToAnchor(anchor);\n            return true;\n        }\n    }\n    recordTimingMetric(metric) {\n        this.timingMetrics[metric] = new Date().getTime();\n    }\n    getTimingMetrics() {\n        return Object.assign({}, this.timingMetrics);\n    }\n    getHistoryMethodForAction(action) {\n        switch (action) {\n            case \"replace\": return history.replaceState;\n            case \"advance\":\n            case \"restore\": return history.pushState;\n        }\n    }\n    hasPreloadedResponse() {\n        return typeof this.response == \"object\";\n    }\n    shouldIssueRequest() {\n        if (this.isSamePage) {\n            return false;\n        }\n        else if (this.action == \"restore\") {\n            return !this.hasCachedSnapshot();\n        }\n        else {\n            return this.willRender;\n        }\n    }\n    cacheSnapshot() {\n        if (!this.snapshotCached) {\n            this.view.cacheSnapshot().then(snapshot => snapshot && this.visitCachedSnapshot(snapshot));\n            this.snapshotCached = true;\n        }\n    }\n    async render(callback) {\n        this.cancelRender();\n        await new Promise(resolve => {\n            this.frame = requestAnimationFrame(() => resolve());\n        });\n        await callback();\n        delete this.frame;\n        this.performScroll();\n    }\n    cancelRender() {\n        if (this.frame) {\n            cancelAnimationFrame(this.frame);\n            delete this.frame;\n        }\n    }\n}\nfunction isSuccessful(statusCode) {\n    return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n    constructor(session) {\n        this.progressBar = new ProgressBar;\n        this.showProgressBar = () => {\n            this.progressBar.show();\n        };\n        this.session = session;\n    }\n    visitProposedToLocation(location, options) {\n        this.navigator.startVisit(location, uuid(), options);\n    }\n    visitStarted(visit) {\n        visit.loadCachedSnapshot();\n        visit.issueRequest();\n        visit.changeHistory();\n        visit.goToSamePageAnchor();\n    }\n    visitRequestStarted(visit) {\n        this.progressBar.setValue(0);\n        if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n            this.showVisitProgressBarAfterDelay();\n        }\n        else {\n            this.showProgressBar();\n        }\n    }\n    visitRequestCompleted(visit) {\n        visit.loadResponse();\n    }\n    visitRequestFailedWithStatusCode(visit, statusCode) {\n        switch (statusCode) {\n            case SystemStatusCode.networkFailure:\n            case SystemStatusCode.timeoutFailure:\n            case SystemStatusCode.contentTypeMismatch:\n                return this.reload();\n            default:\n                return visit.loadResponse();\n        }\n    }\n    visitRequestFinished(visit) {\n        this.progressBar.setValue(1);\n        this.hideVisitProgressBar();\n    }\n    visitCompleted(visit) {\n    }\n    pageInvalidated() {\n        this.reload();\n    }\n    visitFailed(visit) {\n    }\n    visitRendered(visit) {\n    }\n    formSubmissionStarted(formSubmission) {\n        this.progressBar.setValue(0);\n        this.showFormProgressBarAfterDelay();\n    }\n    formSubmissionFinished(formSubmission) {\n        this.progressBar.setValue(1);\n        this.hideFormProgressBar();\n    }\n    showVisitProgressBarAfterDelay() {\n        this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n    hideVisitProgressBar() {\n        this.progressBar.hide();\n        if (this.visitProgressBarTimeout != null) {\n            window.clearTimeout(this.visitProgressBarTimeout);\n            delete this.visitProgressBarTimeout;\n        }\n    }\n    showFormProgressBarAfterDelay() {\n        if (this.formProgressBarTimeout == null) {\n            this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n        }\n    }\n    hideFormProgressBar() {\n        this.progressBar.hide();\n        if (this.formProgressBarTimeout != null) {\n            window.clearTimeout(this.formProgressBarTimeout);\n            delete this.formProgressBarTimeout;\n        }\n    }\n    reload() {\n        window.location.reload();\n    }\n    get navigator() {\n        return this.session.navigator;\n    }\n}\n\nclass CacheObserver {\n    constructor() {\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n        }\n    }\n    removeStaleElements() {\n        const staleElements = [...document.querySelectorAll('[data-turbo-cache=\"false\"]')];\n        for (const element of staleElements) {\n            element.remove();\n        }\n    }\n}\n\nclass FormSubmitObserver {\n    constructor(delegate) {\n        this.started = false;\n        this.submitCaptured = () => {\n            removeEventListener(\"submit\", this.submitBubbled, false);\n            addEventListener(\"submit\", this.submitBubbled, false);\n        };\n        this.submitBubbled = ((event) => {\n            if (!event.defaultPrevented) {\n                const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n                const submitter = event.submitter || undefined;\n                if (form) {\n                    const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n                    if (method != \"dialog\" && this.delegate.willSubmitForm(form, submitter)) {\n                        event.preventDefault();\n                        this.delegate.formSubmitted(form, submitter);\n                    }\n                }\n            }\n        });\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"submit\", this.submitCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"submit\", this.submitCaptured, true);\n            this.started = false;\n        }\n    }\n}\n\nclass FrameRedirector {\n    constructor(element) {\n        this.element = element;\n        this.linkInterceptor = new LinkInterceptor(this, element);\n        this.formInterceptor = new FormInterceptor(this, element);\n    }\n    start() {\n        this.linkInterceptor.start();\n        this.formInterceptor.start();\n    }\n    stop() {\n        this.linkInterceptor.stop();\n        this.formInterceptor.stop();\n    }\n    shouldInterceptLinkClick(element, url) {\n        return this.shouldRedirect(element);\n    }\n    linkClickIntercepted(element, url) {\n        const frame = this.findFrameElement(element);\n        if (frame) {\n            frame.delegate.linkClickIntercepted(element, url);\n        }\n    }\n    shouldInterceptFormSubmission(element, submitter) {\n        return this.shouldSubmit(element, submitter);\n    }\n    formSubmissionIntercepted(element, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        if (frame) {\n            frame.removeAttribute(\"reloadable\");\n            frame.delegate.formSubmissionIntercepted(element, submitter);\n        }\n    }\n    shouldSubmit(form, submitter) {\n        var _a;\n        const action = getAction(form, submitter);\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n        return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n    }\n    shouldRedirect(element, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        return frame ? frame != element.closest(\"turbo-frame\") : false;\n    }\n    findFrameElement(element, submitter) {\n        const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n        if (id && id != \"_top\") {\n            const frame = this.element.querySelector(`#${id}:not([disabled])`);\n            if (frame instanceof FrameElement) {\n                return frame;\n            }\n        }\n    }\n}\n\nclass History {\n    constructor(delegate) {\n        this.restorationIdentifier = uuid();\n        this.restorationData = {};\n        this.started = false;\n        this.pageLoaded = false;\n        this.onPopState = (event) => {\n            if (this.shouldHandlePopState()) {\n                const { turbo } = event.state || {};\n                if (turbo) {\n                    this.location = new URL(window.location.href);\n                    const { restorationIdentifier } = turbo;\n                    this.restorationIdentifier = restorationIdentifier;\n                    this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n                }\n            }\n        };\n        this.onPageLoad = async (event) => {\n            await nextMicrotask();\n            this.pageLoaded = true;\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"popstate\", this.onPopState, false);\n            addEventListener(\"load\", this.onPageLoad, false);\n            this.started = true;\n            this.replace(new URL(window.location.href));\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"popstate\", this.onPopState, false);\n            removeEventListener(\"load\", this.onPageLoad, false);\n            this.started = false;\n        }\n    }\n    push(location, restorationIdentifier) {\n        this.update(history.pushState, location, restorationIdentifier);\n    }\n    replace(location, restorationIdentifier) {\n        this.update(history.replaceState, location, restorationIdentifier);\n    }\n    update(method, location, restorationIdentifier = uuid()) {\n        const state = { turbo: { restorationIdentifier } };\n        method.call(history, state, \"\", location.href);\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier;\n    }\n    getRestorationDataForIdentifier(restorationIdentifier) {\n        return this.restorationData[restorationIdentifier] || {};\n    }\n    updateRestorationData(additionalData) {\n        const { restorationIdentifier } = this;\n        const restorationData = this.restorationData[restorationIdentifier];\n        this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n    }\n    assumeControlOfScrollRestoration() {\n        var _a;\n        if (!this.previousScrollRestoration) {\n            this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n            history.scrollRestoration = \"manual\";\n        }\n    }\n    relinquishControlOfScrollRestoration() {\n        if (this.previousScrollRestoration) {\n            history.scrollRestoration = this.previousScrollRestoration;\n            delete this.previousScrollRestoration;\n        }\n    }\n    shouldHandlePopState() {\n        return this.pageIsLoaded();\n    }\n    pageIsLoaded() {\n        return this.pageLoaded || document.readyState == \"complete\";\n    }\n}\n\nclass LinkClickObserver {\n    constructor(delegate) {\n        this.started = false;\n        this.clickCaptured = () => {\n            removeEventListener(\"click\", this.clickBubbled, false);\n            addEventListener(\"click\", this.clickBubbled, false);\n        };\n        this.clickBubbled = (event) => {\n            if (this.clickEventIsSignificant(event)) {\n                const target = (event.composedPath && event.composedPath()[0]) || event.target;\n                const link = this.findLinkFromClickTarget(target);\n                if (link) {\n                    const location = this.getLocationForLink(link);\n                    if (this.delegate.willFollowLinkToLocation(link, location)) {\n                        event.preventDefault();\n                        this.delegate.followedLinkToLocation(link, location);\n                    }\n                }\n            }\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"click\", this.clickCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"click\", this.clickCaptured, true);\n            this.started = false;\n        }\n    }\n    clickEventIsSignificant(event) {\n        return !((event.target && event.target.isContentEditable)\n            || event.defaultPrevented\n            || event.which > 1\n            || event.altKey\n            || event.ctrlKey\n            || event.metaKey\n            || event.shiftKey);\n    }\n    findLinkFromClickTarget(target) {\n        if (target instanceof Element) {\n            return target.closest(\"a[href]:not([target^=_]):not([download])\");\n        }\n    }\n    getLocationForLink(link) {\n        return expandURL(link.getAttribute(\"href\") || \"\");\n    }\n}\n\nfunction isAction(action) {\n    return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\n\nclass Navigator {\n    constructor(delegate) {\n        this.delegate = delegate;\n    }\n    proposeVisit(location, options = {}) {\n        if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n            if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n                this.delegate.visitProposedToLocation(location, options);\n            }\n            else {\n                window.location.href = location.toString();\n            }\n        }\n    }\n    startVisit(locatable, restorationIdentifier, options = {}) {\n        this.stop();\n        this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n        this.currentVisit.start();\n    }\n    submitForm(form, submitter) {\n        this.stop();\n        this.formSubmission = new FormSubmission(this, form, submitter, true);\n        this.formSubmission.start();\n    }\n    stop() {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n            delete this.formSubmission;\n        }\n        if (this.currentVisit) {\n            this.currentVisit.cancel();\n            delete this.currentVisit;\n        }\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    formSubmissionStarted(formSubmission) {\n        if (typeof this.adapter.formSubmissionStarted === 'function') {\n            this.adapter.formSubmissionStarted(formSubmission);\n        }\n    }\n    async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n        if (formSubmission == this.formSubmission) {\n            const responseHTML = await fetchResponse.responseHTML;\n            if (responseHTML) {\n                if (formSubmission.method != FetchMethod.get) {\n                    this.view.clearSnapshotCache();\n                }\n                const { statusCode, redirected } = fetchResponse;\n                const action = this.getActionForFormSubmission(formSubmission);\n                const visitOptions = { action, response: { statusCode, responseHTML, redirected } };\n                this.proposeVisit(fetchResponse.location, visitOptions);\n            }\n        }\n    }\n    async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        const responseHTML = await fetchResponse.responseHTML;\n        if (responseHTML) {\n            const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n            if (fetchResponse.serverError) {\n                await this.view.renderError(snapshot);\n            }\n            else {\n                await this.view.renderPage(snapshot);\n            }\n            this.view.scrollToTop();\n            this.view.clearSnapshotCache();\n        }\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished(formSubmission) {\n        if (typeof this.adapter.formSubmissionFinished === 'function') {\n            this.adapter.formSubmissionFinished(formSubmission);\n        }\n    }\n    visitStarted(visit) {\n        this.delegate.visitStarted(visit);\n    }\n    visitCompleted(visit) {\n        this.delegate.visitCompleted(visit);\n    }\n    locationWithActionIsSamePage(location, action) {\n        const anchor = getAnchor(location);\n        const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n        const isRestorationToTop = action === 'restore' && typeof anchor === 'undefined';\n        return action !== \"replace\" &&\n            getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n            (isRestorationToTop || (anchor != null && anchor !== currentAnchor));\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    getActionForFormSubmission(formSubmission) {\n        const { formElement, submitter } = formSubmission;\n        const action = getAttribute(\"data-turbo-action\", submitter, formElement);\n        return isAction(action) ? action : \"advance\";\n    }\n}\n\nvar PageStage;\n(function (PageStage) {\n    PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n    PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n    PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n    PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nclass PageObserver {\n    constructor(delegate) {\n        this.stage = PageStage.initial;\n        this.started = false;\n        this.interpretReadyState = () => {\n            const { readyState } = this;\n            if (readyState == \"interactive\") {\n                this.pageIsInteractive();\n            }\n            else if (readyState == \"complete\") {\n                this.pageIsComplete();\n            }\n        };\n        this.pageWillUnload = () => {\n            this.delegate.pageWillUnload();\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            if (this.stage == PageStage.initial) {\n                this.stage = PageStage.loading;\n            }\n            document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n            addEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n            removeEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = false;\n        }\n    }\n    pageIsInteractive() {\n        if (this.stage == PageStage.loading) {\n            this.stage = PageStage.interactive;\n            this.delegate.pageBecameInteractive();\n        }\n    }\n    pageIsComplete() {\n        this.pageIsInteractive();\n        if (this.stage == PageStage.interactive) {\n            this.stage = PageStage.complete;\n            this.delegate.pageLoaded();\n        }\n    }\n    get readyState() {\n        return document.readyState;\n    }\n}\n\nclass ScrollObserver {\n    constructor(delegate) {\n        this.started = false;\n        this.onScroll = () => {\n            this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"scroll\", this.onScroll, false);\n            this.onScroll();\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"scroll\", this.onScroll, false);\n            this.started = false;\n        }\n    }\n    updatePosition(position) {\n        this.delegate.scrollPositionChanged(position);\n    }\n}\n\nclass StreamObserver {\n    constructor(delegate) {\n        this.sources = new Set;\n        this.started = false;\n        this.inspectFetchResponse = ((event) => {\n            const response = fetchResponseFromEvent(event);\n            if (response && fetchResponseIsStream(response)) {\n                event.preventDefault();\n                this.receiveMessageResponse(response);\n            }\n        });\n        this.receiveMessageEvent = (event) => {\n            if (this.started && typeof event.data == \"string\") {\n                this.receiveMessageHTML(event.data);\n            }\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    connectStreamSource(source) {\n        if (!this.streamSourceIsConnected(source)) {\n            this.sources.add(source);\n            source.addEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    disconnectStreamSource(source) {\n        if (this.streamSourceIsConnected(source)) {\n            this.sources.delete(source);\n            source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    streamSourceIsConnected(source) {\n        return this.sources.has(source);\n    }\n    async receiveMessageResponse(response) {\n        const html = await response.responseHTML;\n        if (html) {\n            this.receiveMessageHTML(html);\n        }\n    }\n    receiveMessageHTML(html) {\n        this.delegate.receivedMessageFromStream(new StreamMessage(html));\n    }\n}\nfunction fetchResponseFromEvent(event) {\n    var _a;\n    const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n    if (fetchResponse instanceof FetchResponse) {\n        return fetchResponse;\n    }\n}\nfunction fetchResponseIsStream(response) {\n    var _a;\n    const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n    return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n    async render() {\n        this.replaceHeadAndBody();\n        this.activateScriptElements();\n    }\n    replaceHeadAndBody() {\n        const { documentElement, head, body } = document;\n        documentElement.replaceChild(this.newHead, head);\n        documentElement.replaceChild(this.newElement, body);\n    }\n    activateScriptElements() {\n        for (const replaceableElement of this.scriptElements) {\n            const parentNode = replaceableElement.parentNode;\n            if (parentNode) {\n                const element = this.createScriptElement(replaceableElement);\n                parentNode.replaceChild(element, replaceableElement);\n            }\n        }\n    }\n    get newHead() {\n        return this.newSnapshot.headSnapshot.element;\n    }\n    get scriptElements() {\n        return [...document.documentElement.querySelectorAll(\"script\")];\n    }\n}\n\nclass PageRenderer extends Renderer {\n    get shouldRender() {\n        return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n    }\n    prepareToRender() {\n        this.mergeHead();\n    }\n    async render() {\n        if (this.willRender) {\n            this.replaceBody();\n        }\n    }\n    finishRendering() {\n        super.finishRendering();\n        if (!this.isPreview) {\n            this.focusFirstAutofocusableElement();\n        }\n    }\n    get currentHeadSnapshot() {\n        return this.currentSnapshot.headSnapshot;\n    }\n    get newHeadSnapshot() {\n        return this.newSnapshot.headSnapshot;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    mergeHead() {\n        this.copyNewHeadStylesheetElements();\n        this.copyNewHeadScriptElements();\n        this.removeCurrentHeadProvisionalElements();\n        this.copyNewHeadProvisionalElements();\n    }\n    replaceBody() {\n        this.preservingPermanentElements(() => {\n            this.activateNewBody();\n            this.assignNewBody();\n        });\n    }\n    get trackedElementsAreIdentical() {\n        return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n    }\n    copyNewHeadStylesheetElements() {\n        for (const element of this.newHeadStylesheetElements) {\n            document.head.appendChild(element);\n        }\n    }\n    copyNewHeadScriptElements() {\n        for (const element of this.newHeadScriptElements) {\n            document.head.appendChild(this.createScriptElement(element));\n        }\n    }\n    removeCurrentHeadProvisionalElements() {\n        for (const element of this.currentHeadProvisionalElements) {\n            document.head.removeChild(element);\n        }\n    }\n    copyNewHeadProvisionalElements() {\n        for (const element of this.newHeadProvisionalElements) {\n            document.head.appendChild(element);\n        }\n    }\n    activateNewBody() {\n        document.adoptNode(this.newElement);\n        this.activateNewBodyScriptElements();\n    }\n    activateNewBodyScriptElements() {\n        for (const inertScriptElement of this.newBodyScriptElements) {\n            const activatedScriptElement = this.createScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    assignNewBody() {\n        if (document.body && this.newElement instanceof HTMLBodyElement) {\n            document.body.replaceWith(this.newElement);\n        }\n        else {\n            document.documentElement.appendChild(this.newElement);\n        }\n    }\n    get newHeadStylesheetElements() {\n        return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get newHeadScriptElements() {\n        return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get currentHeadProvisionalElements() {\n        return this.currentHeadSnapshot.provisionalElements;\n    }\n    get newHeadProvisionalElements() {\n        return this.newHeadSnapshot.provisionalElements;\n    }\n    get newBodyScriptElements() {\n        return this.newElement.querySelectorAll(\"script\");\n    }\n}\n\nclass SnapshotCache {\n    constructor(size) {\n        this.keys = [];\n        this.snapshots = {};\n        this.size = size;\n    }\n    has(location) {\n        return toCacheKey(location) in this.snapshots;\n    }\n    get(location) {\n        if (this.has(location)) {\n            const snapshot = this.read(location);\n            this.touch(location);\n            return snapshot;\n        }\n    }\n    put(location, snapshot) {\n        this.write(location, snapshot);\n        this.touch(location);\n        return snapshot;\n    }\n    clear() {\n        this.snapshots = {};\n    }\n    read(location) {\n        return this.snapshots[toCacheKey(location)];\n    }\n    write(location, snapshot) {\n        this.snapshots[toCacheKey(location)] = snapshot;\n    }\n    touch(location) {\n        const key = toCacheKey(location);\n        const index = this.keys.indexOf(key);\n        if (index > -1)\n            this.keys.splice(index, 1);\n        this.keys.unshift(key);\n        this.trim();\n    }\n    trim() {\n        for (const key of this.keys.splice(this.size)) {\n            delete this.snapshots[key];\n        }\n    }\n}\n\nclass PageView extends View {\n    constructor() {\n        super(...arguments);\n        this.snapshotCache = new SnapshotCache(10);\n        this.lastRenderedLocation = new URL(location.href);\n    }\n    renderPage(snapshot, isPreview = false, willRender = true) {\n        const renderer = new PageRenderer(this.snapshot, snapshot, isPreview, willRender);\n        return this.render(renderer);\n    }\n    renderError(snapshot) {\n        const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n        return this.render(renderer);\n    }\n    clearSnapshotCache() {\n        this.snapshotCache.clear();\n    }\n    async cacheSnapshot() {\n        if (this.shouldCacheSnapshot) {\n            this.delegate.viewWillCacheSnapshot();\n            const { snapshot, lastRenderedLocation: location } = this;\n            await nextEventLoopTick();\n            const cachedSnapshot = snapshot.clone();\n            this.snapshotCache.put(location, cachedSnapshot);\n            return cachedSnapshot;\n        }\n    }\n    getCachedSnapshotForLocation(location) {\n        return this.snapshotCache.get(location);\n    }\n    get snapshot() {\n        return PageSnapshot.fromElement(this.element);\n    }\n    get shouldCacheSnapshot() {\n        return this.snapshot.isCacheable;\n    }\n}\n\nclass Session {\n    constructor() {\n        this.navigator = new Navigator(this);\n        this.history = new History(this);\n        this.view = new PageView(this, document.documentElement);\n        this.adapter = new BrowserAdapter(this);\n        this.pageObserver = new PageObserver(this);\n        this.cacheObserver = new CacheObserver();\n        this.linkClickObserver = new LinkClickObserver(this);\n        this.formSubmitObserver = new FormSubmitObserver(this);\n        this.scrollObserver = new ScrollObserver(this);\n        this.streamObserver = new StreamObserver(this);\n        this.frameRedirector = new FrameRedirector(document.documentElement);\n        this.drive = true;\n        this.enabled = true;\n        this.progressBarDelay = 500;\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.pageObserver.start();\n            this.cacheObserver.start();\n            this.linkClickObserver.start();\n            this.formSubmitObserver.start();\n            this.scrollObserver.start();\n            this.streamObserver.start();\n            this.frameRedirector.start();\n            this.history.start();\n            this.started = true;\n            this.enabled = true;\n        }\n    }\n    disable() {\n        this.enabled = false;\n    }\n    stop() {\n        if (this.started) {\n            this.pageObserver.stop();\n            this.cacheObserver.stop();\n            this.linkClickObserver.stop();\n            this.formSubmitObserver.stop();\n            this.scrollObserver.stop();\n            this.streamObserver.stop();\n            this.frameRedirector.stop();\n            this.history.stop();\n            this.started = false;\n        }\n    }\n    registerAdapter(adapter) {\n        this.adapter = adapter;\n    }\n    visit(location, options = {}) {\n        this.navigator.proposeVisit(expandURL(location), options);\n    }\n    connectStreamSource(source) {\n        this.streamObserver.connectStreamSource(source);\n    }\n    disconnectStreamSource(source) {\n        this.streamObserver.disconnectStreamSource(source);\n    }\n    renderStreamMessage(message) {\n        document.documentElement.appendChild(StreamMessage.wrap(message).fragment);\n    }\n    clearCache() {\n        this.view.clearSnapshotCache();\n    }\n    setProgressBarDelay(delay) {\n        this.progressBarDelay = delay;\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n        if (this.enabled) {\n            this.navigator.startVisit(location, restorationIdentifier, { action: \"restore\", historyChanged: true });\n        }\n        else {\n            this.adapter.pageInvalidated();\n        }\n    }\n    scrollPositionChanged(position) {\n        this.history.updateRestorationData({ scrollPosition: position });\n    }\n    willFollowLinkToLocation(link, location) {\n        return this.elementDriveEnabled(link)\n            && locationIsVisitable(location, this.snapshot.rootLocation)\n            && this.applicationAllowsFollowingLinkToLocation(link, location);\n    }\n    followedLinkToLocation(link, location) {\n        const action = this.getActionForLink(link);\n        this.convertLinkWithMethodClickToFormSubmission(link) || this.visit(location.href, { action });\n    }\n    convertLinkWithMethodClickToFormSubmission(link) {\n        const linkMethod = link.getAttribute(\"data-turbo-method\");\n        if (linkMethod) {\n            const form = document.createElement(\"form\");\n            form.method = linkMethod;\n            form.action = link.getAttribute(\"href\") || \"undefined\";\n            form.hidden = true;\n            if (link.hasAttribute(\"data-turbo-confirm\")) {\n                form.setAttribute(\"data-turbo-confirm\", link.getAttribute(\"data-turbo-confirm\"));\n            }\n            const frame = this.getTargetFrameForLink(link);\n            if (frame) {\n                form.setAttribute(\"data-turbo-frame\", frame);\n                form.addEventListener(\"turbo:submit-start\", () => form.remove());\n            }\n            else {\n                form.addEventListener(\"submit\", () => form.remove());\n            }\n            document.body.appendChild(form);\n            return dispatch(\"submit\", { cancelable: true, target: form });\n        }\n        else {\n            return false;\n        }\n    }\n    allowsVisitingLocationWithAction(location, action) {\n        return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n    }\n    visitProposedToLocation(location, options) {\n        extendURLWithDeprecatedProperties(location);\n        this.adapter.visitProposedToLocation(location, options);\n    }\n    visitStarted(visit) {\n        extendURLWithDeprecatedProperties(visit.location);\n        if (!visit.silent) {\n            this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n        }\n    }\n    visitCompleted(visit) {\n        this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n    }\n    locationWithActionIsSamePage(location, action) {\n        return this.navigator.locationWithActionIsSamePage(location, action);\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n    }\n    willSubmitForm(form, submitter) {\n        const action = getAction(form, submitter);\n        return this.elementDriveEnabled(form)\n            && (!submitter || this.elementDriveEnabled(submitter))\n            && locationIsVisitable(expandURL(action), this.snapshot.rootLocation);\n    }\n    formSubmitted(form, submitter) {\n        this.navigator.submitForm(form, submitter);\n    }\n    pageBecameInteractive() {\n        this.view.lastRenderedLocation = this.location;\n        this.notifyApplicationAfterPageLoad();\n    }\n    pageLoaded() {\n        this.history.assumeControlOfScrollRestoration();\n    }\n    pageWillUnload() {\n        this.history.relinquishControlOfScrollRestoration();\n    }\n    receivedMessageFromStream(message) {\n        this.renderStreamMessage(message);\n    }\n    viewWillCacheSnapshot() {\n        var _a;\n        if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n            this.notifyApplicationBeforeCachingSnapshot();\n        }\n    }\n    allowsImmediateRender({ element }, resume) {\n        const event = this.notifyApplicationBeforeRender(element, resume);\n        return !event.defaultPrevented;\n    }\n    viewRenderedSnapshot(snapshot, isPreview) {\n        this.view.lastRenderedLocation = this.history.location;\n        this.notifyApplicationAfterRender();\n    }\n    viewInvalidated() {\n        this.adapter.pageInvalidated();\n    }\n    frameLoaded(frame) {\n        this.notifyApplicationAfterFrameLoad(frame);\n    }\n    frameRendered(fetchResponse, frame) {\n        this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n    }\n    applicationAllowsFollowingLinkToLocation(link, location) {\n        const event = this.notifyApplicationAfterClickingLinkToLocation(link, location);\n        return !event.defaultPrevented;\n    }\n    applicationAllowsVisitingLocation(location) {\n        const event = this.notifyApplicationBeforeVisitingLocation(location);\n        return !event.defaultPrevented;\n    }\n    notifyApplicationAfterClickingLinkToLocation(link, location) {\n        return dispatch(\"turbo:click\", { target: link, detail: { url: location.href }, cancelable: true });\n    }\n    notifyApplicationBeforeVisitingLocation(location) {\n        return dispatch(\"turbo:before-visit\", { detail: { url: location.href }, cancelable: true });\n    }\n    notifyApplicationAfterVisitingLocation(location, action) {\n        markAsBusy(document.documentElement);\n        return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n    }\n    notifyApplicationBeforeCachingSnapshot() {\n        return dispatch(\"turbo:before-cache\");\n    }\n    notifyApplicationBeforeRender(newBody, resume) {\n        return dispatch(\"turbo:before-render\", { detail: { newBody, resume }, cancelable: true });\n    }\n    notifyApplicationAfterRender() {\n        return dispatch(\"turbo:render\");\n    }\n    notifyApplicationAfterPageLoad(timing = {}) {\n        clearBusyState(document.documentElement);\n        return dispatch(\"turbo:load\", { detail: { url: this.location.href, timing } });\n    }\n    notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n        dispatchEvent(new HashChangeEvent(\"hashchange\", { oldURL: oldURL.toString(), newURL: newURL.toString() }));\n    }\n    notifyApplicationAfterFrameLoad(frame) {\n        return dispatch(\"turbo:frame-load\", { target: frame });\n    }\n    notifyApplicationAfterFrameRender(fetchResponse, frame) {\n        return dispatch(\"turbo:frame-render\", { detail: { fetchResponse }, target: frame, cancelable: true });\n    }\n    elementDriveEnabled(element) {\n        const container = element === null || element === void 0 ? void 0 : element.closest(\"[data-turbo]\");\n        if (this.drive) {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") != \"false\";\n            }\n            else {\n                return true;\n            }\n        }\n        else {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") == \"true\";\n            }\n            else {\n                return false;\n            }\n        }\n    }\n    getActionForLink(link) {\n        const action = link.getAttribute(\"data-turbo-action\");\n        return isAction(action) ? action : \"advance\";\n    }\n    getTargetFrameForLink(link) {\n        const frame = link.getAttribute(\"data-turbo-frame\");\n        if (frame) {\n            return frame;\n        }\n        else {\n            const container = link.closest(\"turbo-frame\");\n            if (container) {\n                return container.id;\n            }\n        }\n    }\n    get snapshot() {\n        return this.view.snapshot;\n    }\n}\nfunction extendURLWithDeprecatedProperties(url) {\n    Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nconst deprecatedLocationPropertyDescriptors = {\n    absoluteURL: {\n        get() {\n            return this.toString();\n        }\n    }\n};\n\nconst session = new Session;\nconst { navigator: navigator$1 } = session;\nfunction start() {\n    session.start();\n}\nfunction registerAdapter(adapter) {\n    session.registerAdapter(adapter);\n}\nfunction visit(location, options) {\n    session.visit(location, options);\n}\nfunction connectStreamSource(source) {\n    session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n    session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n    session.renderStreamMessage(message);\n}\nfunction clearCache() {\n    session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n    session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n    FormSubmission.confirmMethod = confirmMethod;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    navigator: navigator$1,\n    session: session,\n    PageRenderer: PageRenderer,\n    PageSnapshot: PageSnapshot,\n    start: start,\n    registerAdapter: registerAdapter,\n    visit: visit,\n    connectStreamSource: connectStreamSource,\n    disconnectStreamSource: disconnectStreamSource,\n    renderStreamMessage: renderStreamMessage,\n    clearCache: clearCache,\n    setProgressBarDelay: setProgressBarDelay,\n    setConfirmMethod: setConfirmMethod\n});\n\nclass FrameController {\n    constructor(element) {\n        this.fetchResponseLoaded = (fetchResponse) => { };\n        this.currentFetchRequest = null;\n        this.resolveVisitPromise = () => { };\n        this.connected = false;\n        this.hasBeenLoaded = false;\n        this.settingSourceURL = false;\n        this.element = element;\n        this.view = new FrameView(this, this.element);\n        this.appearanceObserver = new AppearanceObserver(this, this.element);\n        this.linkInterceptor = new LinkInterceptor(this, this.element);\n        this.formInterceptor = new FormInterceptor(this, this.element);\n    }\n    connect() {\n        if (!this.connected) {\n            this.connected = true;\n            this.reloadable = false;\n            if (this.loadingStyle == FrameLoadingStyle.lazy) {\n                this.appearanceObserver.start();\n            }\n            this.linkInterceptor.start();\n            this.formInterceptor.start();\n            this.sourceURLChanged();\n        }\n    }\n    disconnect() {\n        if (this.connected) {\n            this.connected = false;\n            this.appearanceObserver.stop();\n            this.linkInterceptor.stop();\n            this.formInterceptor.stop();\n        }\n    }\n    disabledChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.eager) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n            this.loadSourceURL();\n        }\n    }\n    loadingStyleChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.lazy) {\n            this.appearanceObserver.start();\n        }\n        else {\n            this.appearanceObserver.stop();\n            this.loadSourceURL();\n        }\n    }\n    async loadSourceURL() {\n        if (!this.settingSourceURL && this.enabled && this.isActive && (this.reloadable || this.sourceURL != this.currentURL)) {\n            const previousURL = this.currentURL;\n            this.currentURL = this.sourceURL;\n            if (this.sourceURL) {\n                try {\n                    this.element.loaded = this.visit(expandURL(this.sourceURL));\n                    this.appearanceObserver.stop();\n                    await this.element.loaded;\n                    this.hasBeenLoaded = true;\n                }\n                catch (error) {\n                    this.currentURL = previousURL;\n                    throw error;\n                }\n            }\n        }\n    }\n    async loadResponse(fetchResponse) {\n        if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n            this.sourceURL = fetchResponse.response.url;\n        }\n        try {\n            const html = await fetchResponse.responseHTML;\n            if (html) {\n                const { body } = parseHTMLDocument(html);\n                const snapshot = new Snapshot(await this.extractForeignFrameElement(body));\n                const renderer = new FrameRenderer(this.view.snapshot, snapshot, false, false);\n                if (this.view.renderPromise)\n                    await this.view.renderPromise;\n                await this.view.render(renderer);\n                session.frameRendered(fetchResponse, this.element);\n                session.frameLoaded(this.element);\n                this.fetchResponseLoaded(fetchResponse);\n            }\n        }\n        catch (error) {\n            console.error(error);\n            this.view.invalidate();\n        }\n        finally {\n            this.fetchResponseLoaded = () => { };\n        }\n    }\n    elementAppearedInViewport(element) {\n        this.loadSourceURL();\n    }\n    shouldInterceptLinkClick(element, url) {\n        if (element.hasAttribute(\"data-turbo-method\")) {\n            return false;\n        }\n        else {\n            return this.shouldInterceptNavigation(element);\n        }\n    }\n    linkClickIntercepted(element, url) {\n        this.reloadable = true;\n        this.navigateFrame(element, url);\n    }\n    shouldInterceptFormSubmission(element, submitter) {\n        return this.shouldInterceptNavigation(element, submitter);\n    }\n    formSubmissionIntercepted(element, submitter) {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n        }\n        this.reloadable = false;\n        this.formSubmission = new FormSubmission(this, element, submitter);\n        const { fetchRequest } = this.formSubmission;\n        this.prepareHeadersForRequest(fetchRequest.headers, fetchRequest);\n        this.formSubmission.start();\n    }\n    prepareHeadersForRequest(headers, request) {\n        headers[\"Turbo-Frame\"] = this.id;\n    }\n    requestStarted(request) {\n        markAsBusy(this.element);\n    }\n    requestPreventedHandlingResponse(request, response) {\n        this.resolveVisitPromise();\n    }\n    async requestSucceededWithResponse(request, response) {\n        await this.loadResponse(response);\n        this.resolveVisitPromise();\n    }\n    requestFailedWithResponse(request, response) {\n        console.error(response);\n        this.resolveVisitPromise();\n    }\n    requestErrored(request, error) {\n        console.error(error);\n        this.resolveVisitPromise();\n    }\n    requestFinished(request) {\n        clearBusyState(this.element);\n    }\n    formSubmissionStarted({ formElement }) {\n        markAsBusy(formElement, this.findFrameElement(formElement));\n    }\n    formSubmissionSucceededWithResponse(formSubmission, response) {\n        const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n        this.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n        frame.delegate.loadResponse(response);\n    }\n    formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        this.element.delegate.loadResponse(fetchResponse);\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished({ formElement }) {\n        clearBusyState(formElement, this.findFrameElement(formElement));\n    }\n    allowsImmediateRender(snapshot, resume) {\n        return true;\n    }\n    viewRenderedSnapshot(snapshot, isPreview) {\n    }\n    viewInvalidated() {\n    }\n    async visit(url) {\n        var _a;\n        const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams, this.element);\n        (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n        this.currentFetchRequest = request;\n        return new Promise(resolve => {\n            this.resolveVisitPromise = () => {\n                this.resolveVisitPromise = () => { };\n                this.currentFetchRequest = null;\n                resolve();\n            };\n            request.perform();\n        });\n    }\n    navigateFrame(element, url, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        this.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n        frame.setAttribute(\"reloadable\", \"\");\n        frame.src = url;\n    }\n    proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n        const action = getAttribute(\"data-turbo-action\", submitter, element, frame);\n        if (isAction(action)) {\n            const { visitCachedSnapshot } = new SnapshotSubstitution(frame);\n            frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n                if (frame.src) {\n                    const { statusCode, redirected } = fetchResponse;\n                    const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n                    const response = { statusCode, redirected, responseHTML };\n                    session.visit(frame.src, { action, response, visitCachedSnapshot, willRender: false });\n                }\n            };\n        }\n    }\n    findFrameElement(element, submitter) {\n        var _a;\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n    }\n    async extractForeignFrameElement(container) {\n        let element;\n        const id = CSS.escape(this.id);\n        try {\n            if (element = activateElement(container.querySelector(`turbo-frame#${id}`), this.currentURL)) {\n                return element;\n            }\n            if (element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.currentURL)) {\n                await element.loaded;\n                return await this.extractForeignFrameElement(element);\n            }\n            console.error(`Response has no matching <turbo-frame id=\"${id}\"> element`);\n        }\n        catch (error) {\n            console.error(error);\n        }\n        return new FrameElement();\n    }\n    formActionIsVisitable(form, submitter) {\n        const action = getAction(form, submitter);\n        return locationIsVisitable(expandURL(action), this.rootLocation);\n    }\n    shouldInterceptNavigation(element, submitter) {\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n            return false;\n        }\n        if (!this.enabled || id == \"_top\") {\n            return false;\n        }\n        if (id) {\n            const frameElement = getFrameElementById(id);\n            if (frameElement) {\n                return !frameElement.disabled;\n            }\n        }\n        if (!session.elementDriveEnabled(element)) {\n            return false;\n        }\n        if (submitter && !session.elementDriveEnabled(submitter)) {\n            return false;\n        }\n        return true;\n    }\n    get id() {\n        return this.element.id;\n    }\n    get enabled() {\n        return !this.element.disabled;\n    }\n    get sourceURL() {\n        if (this.element.src) {\n            return this.element.src;\n        }\n    }\n    get reloadable() {\n        const frame = this.findFrameElement(this.element);\n        return frame.hasAttribute(\"reloadable\");\n    }\n    set reloadable(value) {\n        const frame = this.findFrameElement(this.element);\n        if (value) {\n            frame.setAttribute(\"reloadable\", \"\");\n        }\n        else {\n            frame.removeAttribute(\"reloadable\");\n        }\n    }\n    set sourceURL(sourceURL) {\n        this.settingSourceURL = true;\n        this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n        this.currentURL = this.element.src;\n        this.settingSourceURL = false;\n    }\n    get loadingStyle() {\n        return this.element.loading;\n    }\n    get isLoading() {\n        return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n    }\n    get isActive() {\n        return this.element.isActive && this.connected;\n    }\n    get rootLocation() {\n        var _a;\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n}\nclass SnapshotSubstitution {\n    constructor(element) {\n        this.visitCachedSnapshot = ({ element }) => {\n            var _a;\n            const { id, clone } = this;\n            (_a = element.querySelector(\"#\" + id)) === null || _a === void 0 ? void 0 : _a.replaceWith(clone);\n        };\n        this.clone = element.cloneNode(true);\n        this.id = element.id;\n    }\n}\nfunction getFrameElementById(id) {\n    if (id != null) {\n        const element = document.getElementById(id);\n        if (element instanceof FrameElement) {\n            return element;\n        }\n    }\n}\nfunction activateElement(element, currentURL) {\n    if (element) {\n        const src = element.getAttribute(\"src\");\n        if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n            throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`);\n        }\n        if (element.ownerDocument !== document) {\n            element = document.importNode(element, true);\n        }\n        if (element instanceof FrameElement) {\n            element.connectedCallback();\n            element.disconnectedCallback();\n            return element;\n        }\n    }\n}\n\nconst StreamActions = {\n    after() {\n        this.targetElements.forEach(e => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling); });\n    },\n    append() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach(e => e.append(this.templateContent));\n    },\n    before() {\n        this.targetElements.forEach(e => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e); });\n    },\n    prepend() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach(e => e.prepend(this.templateContent));\n    },\n    remove() {\n        this.targetElements.forEach(e => e.remove());\n    },\n    replace() {\n        this.targetElements.forEach(e => e.replaceWith(this.templateContent));\n    },\n    update() {\n        this.targetElements.forEach(e => {\n            e.innerHTML = \"\";\n            e.append(this.templateContent);\n        });\n    }\n};\n\nclass StreamElement extends HTMLElement {\n    async connectedCallback() {\n        try {\n            await this.render();\n        }\n        catch (error) {\n            console.error(error);\n        }\n        finally {\n            this.disconnect();\n        }\n    }\n    async render() {\n        var _a;\n        return (_a = this.renderPromise) !== null && _a !== void 0 ? _a : (this.renderPromise = (async () => {\n            if (this.dispatchEvent(this.beforeRenderEvent)) {\n                await nextAnimationFrame();\n                this.performAction();\n            }\n        })());\n    }\n    disconnect() {\n        try {\n            this.remove();\n        }\n        catch (_a) { }\n    }\n    removeDuplicateTargetChildren() {\n        this.duplicateChildren.forEach(c => c.remove());\n    }\n    get duplicateChildren() {\n        var _a;\n        const existingChildren = this.targetElements.flatMap(e => [...e.children]).filter(c => !!c.id);\n        const newChildrenIds = [...(_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children].filter(c => !!c.id).map(c => c.id);\n        return existingChildren.filter(c => newChildrenIds.includes(c.id));\n    }\n    get performAction() {\n        if (this.action) {\n            const actionFunction = StreamActions[this.action];\n            if (actionFunction) {\n                return actionFunction;\n            }\n            this.raise(\"unknown action\");\n        }\n        this.raise(\"action attribute is missing\");\n    }\n    get targetElements() {\n        if (this.target) {\n            return this.targetElementsById;\n        }\n        else if (this.targets) {\n            return this.targetElementsByQuery;\n        }\n        else {\n            this.raise(\"target or targets attribute is missing\");\n        }\n    }\n    get templateContent() {\n        return this.templateElement.content.cloneNode(true);\n    }\n    get templateElement() {\n        if (this.firstElementChild instanceof HTMLTemplateElement) {\n            return this.firstElementChild;\n        }\n        this.raise(\"first child element must be a <template> element\");\n    }\n    get action() {\n        return this.getAttribute(\"action\");\n    }\n    get target() {\n        return this.getAttribute(\"target\");\n    }\n    get targets() {\n        return this.getAttribute(\"targets\");\n    }\n    raise(message) {\n        throw new Error(`${this.description}: ${message}`);\n    }\n    get description() {\n        var _a, _b;\n        return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : \"<turbo-stream>\";\n    }\n    get beforeRenderEvent() {\n        return new CustomEvent(\"turbo:before-stream-render\", { bubbles: true, cancelable: true });\n    }\n    get targetElementsById() {\n        var _a;\n        const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);\n        if (element !== null) {\n            return [element];\n        }\n        else {\n            return [];\n        }\n    }\n    get targetElementsByQuery() {\n        var _a;\n        const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);\n        if (elements.length !== 0) {\n            return Array.prototype.slice.call(elements);\n        }\n        else {\n            return [];\n        }\n    }\n}\n\nFrameElement.delegateConstructor = FrameController;\ncustomElements.define(\"turbo-frame\", FrameElement);\ncustomElements.define(\"turbo-stream\", StreamElement);\n\n(() => {\n    let element = document.currentScript;\n    if (!element)\n        return;\n    if (element.hasAttribute(\"data-turbo-suppress-warning\"))\n        return;\n    while (element = element.parentElement) {\n        if (element == document.body) {\n            return console.warn(unindent `\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        \u2014\u2014\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `, element.outerHTML);\n        }\n    }\n})();\n\nwindow.Turbo = Turbo;\nstart();\n\nexport { PageRenderer, PageSnapshot, clearCache, connectStreamSource, disconnectStreamSource, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, { received: this.dispatchMessageEvent.bind(this) })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name }\n  }\n}\n\ncustomElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n", "/*\nStimulus 3.0.1\nCopyright \u00A9 2021 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            }\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map;\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach(eventListener => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach(eventListener => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values())\n            .reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map;\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions).sort().forEach(key => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName: matches[2],\n        eventOptions: matches[9] ? parseEventOptions(matches[9]) : {},\n        identifier: matches[5],\n        methodName: matches[7]\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions.split(\":\").reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nclass Action {\n    constructor(element, index, descriptor) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n    }\n    static forToken(token) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content));\n    }\n    toString() {\n        const eventNameSuffix = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventNameSuffix}->${this.identifier}#${this.methodName}`;\n    }\n    get params() {\n        if (this.eventTarget instanceof Element) {\n            return this.getParamsFromEventTargetAttributes(this.eventTarget);\n        }\n        else {\n            return {};\n        }\n    }\n    getParamsFromEventTargetAttributes(eventTarget) {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`);\n        const attributes = Array.from(eventTarget.attributes);\n        attributes.forEach(({ name, value }) => {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                Object.assign(params, { [camelize(key)]: typecast(value) });\n            }\n        });\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n}\nconst defaultEventNames = {\n    \"a\": e => \"click\",\n    \"button\": e => \"click\",\n    \"form\": e => \"submit\",\n    \"details\": e => \"toggle\",\n    \"input\": e => e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\",\n    \"select\": e => \"change\",\n    \"textarea\": e => \"input\"\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        if (this.willBeInvokedByEvent(event)) {\n            this.invokeWithEvent(event);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            const { params } = this.action;\n            const actionEvent = Object.assign(event, { params });\n            this.method.call(this.controller, actionEvent);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set;\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(node, attributeName) {\n        const element = node;\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map;\n        this.mutationObserver = new MutationObserver(mutations => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map(attribute => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some(set => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([key, values]) => values.has(value))\n            .map(([key, values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map;\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap;\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach(token => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach(token => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens)\n            .findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString.trim().split(/\\s+/).filter(content => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap;\n        this.valuesByTokenByElement = new WeakMap;\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map;\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map;\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach(binding => this.delegate.bindingDisconnected(binding));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    start() {\n        this.stringMapObserver.start();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            const value = descriptor.reader(rawValue);\n            let oldValue = rawOldValue;\n            if (rawOldValue) {\n                oldValue = descriptor.reader(rawOldValue);\n            }\n            changedMethod.call(this.receiver, value, oldValue);\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map(key => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach(key => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap;\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach(name => values.add(name));\n        return values;\n    }, new Set));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map(key => [key, definition[key]]) : [];\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [\n            ...Object.getOwnPropertyNames(object),\n            ...Object.getOwnPropertySymbols(object)\n        ];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended }\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () { this.a.call(this); };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b;\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor)\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap;\n        this.connectedContexts = new Set;\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap;\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set;\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target\n            || this.findTarget(targetName)\n            || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName)\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map(element => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n    }\n    findElement(selector) {\n        return this.element.matches(selector)\n            ? this.element\n            : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...this.element.matches(selector) ? [this.element] : [],\n            ...this.queryElements(selector).filter(this.containsElement)\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap;\n        this.scopeReferenceCounts = new WeakMap;\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map;\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap;\n        this.modulesByIdentifier = new Map;\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find(context => context.element == element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach(scope => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach(scope => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: identifier => `data-${identifier}-target`\n};\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n    }\n    static start(element, schema) {\n        const application = new Application(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        if (controllerConstructor.shouldLoad) {\n            this.load({ identifier, controllerConstructor });\n        }\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach(definition => this.router.loadDefinition(definition));\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach(identifier => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map(context => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise(resolve => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            }\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            }\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            }\n        }\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            }\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            }\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            }\n        }\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            }\n        }\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            }\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            }\n        }\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition]) {\n    return valueDescriptorForTokenAndTypeDefinition(token, typeDefinition);\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array: return \"array\";\n        case Boolean: return \"boolean\";\n        case Number: return \"number\";\n        case Object: return \"object\";\n        case String: return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\": return \"boolean\";\n        case \"number\": return \"number\";\n        case \"string\": return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(typeObject) {\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    if (typeFromObject) {\n        const defaultValueType = parseValueTypeDefault(typeObject.default);\n        if (typeFromObject !== defaultValueType) {\n            throw new Error(`Type \"${typeFromObject}\" must match the type of the default value. Given default value: \"${typeObject.default}\" as \"${defaultValueType}\"`);\n        }\n        return typeFromObject;\n    }\n}\nfunction parseValueTypeDefinition(typeDefinition) {\n    const typeFromObject = parseValueTypeObject(typeDefinition);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    throw new Error(`Unknown value type \"${typeDefinition}\"`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const defaultValue = typeDefinition.default;\n    if (defaultValue !== undefined)\n        return defaultValue;\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(token, typeDefinition) {\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(typeDefinition);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() { return defaultValueForDefinition(typeDefinition); },\n        get hasCustomDefaultValue() { return parseValueTypeDefault(typeDefinition) !== undefined; },\n        reader: readers[type],\n        writer: writers[type] || writers.default\n    };\n}\nconst defaultValuesByType = {\n    get array() { return []; },\n    boolean: false,\n    number: 0,\n    get object() { return {}; },\n    string: \"\"\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(\"Expected array\");\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || value == \"false\");\n    },\n    number(value) {\n        return Number(value);\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(\"Expected object\");\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    }\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\nController.targets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Application } from \"@hotwired/stimulus\"\n\nconst application = Application.start()\n\n// Configure Stimulus development experience\napplication.debug = process.env.NODE_ENV === 'development'\nwindow.Stimulus   = application\n\nexport { application }\n\n// stimlus\u30C7\u30D0\u30C3\u30B0\u7528\nif (process.env.NODE_ENV === 'development') {\n  window.stimlusInstance = (controllerName) => {\n    return Stimulus.getControllerForElementAndIdentifier(\n      document.querySelector(`[data-controller=\"${controllerName}\"]`),\n      controllerName\n    )\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  connect() {}\n\n  linkDestroy(event) {\n    // https://github.com/rails/jquery-ujs/blob/fafee4e1af48c7a5bf6bbed0def4afe5162626d5/src/rails.js#L215\n    event.preventDefault();\n    const confirmMessage = $(event.currentTarget).attr(\"confirm\");\n    if (confirmMessage) {\n      const ok = confirm(confirmMessage);\n      if (ok) {\n        const href = event.currentTarget.href;\n        const method = \"delete\";\n        let form = $('<form method=\"post\" action=\"' + href + '\"></form>');\n        let metadataInput =\n          '<input name=\"_method\" value=\"' + method + '\" type=\"hidden\" />';\n        const csrfToken = document.getElementsByName(\"csrf-token\")[0].content;\n        const csrfParam = document.getElementsByName(\"csrf-param\")[0].content;\n        if (csrfParam !== undefined && csrfToken !== undefined) {\n          metadataInput +=\n            '<input name=\"' +\n            csrfParam +\n            '\" value=\"' +\n            csrfToken +\n            '\" type=\"hidden\" />';\n        }\n        form.hide().append(metadataInput).appendTo(\"body\");\n        form.submit();\n      }\n    } else {\n      const href = event.currentTarget.href;\n      const method = \"delete\";\n      let form = $('<form method=\"post\" action=\"' + href + '\"></form>');\n      let metadataInput =\n        '<input name=\"_method\" value=\"' + method + '\" type=\"hidden\" />';\n      const csrfToken = document.getElementsByName(\"csrf-token\")[0].content;\n      const csrfParam = document.getElementsByName(\"csrf-param\")[0].content;\n      if (csrfParam !== undefined && csrfToken !== undefined) {\n        metadataInput +=\n          '<input name=\"' +\n          csrfParam +\n          '\" value=\"' +\n          csrfToken +\n          '\" type=\"hidden\" />';\n      }\n      form.hide().append(metadataInput).appendTo(\"body\");\n      form.submit();\n    }\n  }\n\n  // \u30BB\u30EC\u30AF\u30C8\u306E\u5909\u66F4\u306A\u3069\u3067\u3001\u6240\u5C5E\u3059\u308B\u30D5\u30A9\u30FC\u30E0\u3092\u305D\u306E\u307E\u307E\u9001\u4FE1\u3059\u308B\n  autoSubmit(event) {\n    event.currentTarget.form.requestSubmit();\n  }\n\n  htmlSubmit(event) {\n    event.preventDefault();\n    $(event.currentTarget).closest(\"form\").submit();\n  }\n}\n", "var sparkMd5 = {\n  exports: {}\n};\n\n(function(module, exports) {\n  (function(factory) {\n    {\n      module.exports = factory();\n    }\n  })((function(undefined$1) {\n    var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n    function md5cycle(x, k) {\n      var a = x[0], b = x[1], c = x[2], d = x[3];\n      a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[10] - 42063 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b ^ c ^ d) + k[5] - 378558 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      x[0] = a + x[0] | 0;\n      x[1] = b + x[1] | 0;\n      x[2] = c + x[2] | 0;\n      x[3] = d + x[3] | 0;\n    }\n    function md5blk(s) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n      }\n      return md5blks;\n    }\n    function md5blk_array(a) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n      }\n      return md5blks;\n    }\n    function md51(s) {\n      var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk(s.substring(i - 64, i)));\n      }\n      s = s.substring(i - 64);\n      length = s.length;\n      tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function md51_array(a) {\n      var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n      }\n      a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n      length = a.length;\n      tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= a[i] << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function rhex(n) {\n      var s = \"\", j;\n      for (j = 0; j < 4; j += 1) {\n        s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n      }\n      return s;\n    }\n    function hex(x) {\n      var i;\n      for (i = 0; i < x.length; i += 1) {\n        x[i] = rhex(x[i]);\n      }\n      return x.join(\"\");\n    }\n    if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n    if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n      (function() {\n        function clamp(val, length) {\n          val = val | 0 || 0;\n          if (val < 0) {\n            return Math.max(val + length, 0);\n          }\n          return Math.min(val, length);\n        }\n        ArrayBuffer.prototype.slice = function(from, to) {\n          var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n          if (to !== undefined$1) {\n            end = clamp(to, length);\n          }\n          if (begin > end) {\n            return new ArrayBuffer(0);\n          }\n          num = end - begin;\n          target = new ArrayBuffer(num);\n          targetArray = new Uint8Array(target);\n          sourceArray = new Uint8Array(this, begin, num);\n          targetArray.set(sourceArray);\n          return target;\n        };\n      })();\n    }\n    function toUtf8(str) {\n      if (/[\\u0080-\\uFFFF]/.test(str)) {\n        str = unescape(encodeURIComponent(str));\n      }\n      return str;\n    }\n    function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n      var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n      for (i = 0; i < length; i += 1) {\n        arr[i] = str.charCodeAt(i);\n      }\n      return returnUInt8Array ? arr : buff;\n    }\n    function arrayBuffer2Utf8Str(buff) {\n      return String.fromCharCode.apply(null, new Uint8Array(buff));\n    }\n    function concatenateArrayBuffers(first, second, returnUInt8Array) {\n      var result = new Uint8Array(first.byteLength + second.byteLength);\n      result.set(new Uint8Array(first));\n      result.set(new Uint8Array(second), first.byteLength);\n      return returnUInt8Array ? result : result.buffer;\n    }\n    function hexToBinaryString(hex) {\n      var bytes = [], length = hex.length, x;\n      for (x = 0; x < length - 1; x += 2) {\n        bytes.push(parseInt(hex.substr(x, 2), 16));\n      }\n      return String.fromCharCode.apply(String, bytes);\n    }\n    function SparkMD5() {\n      this.reset();\n    }\n    SparkMD5.prototype.append = function(str) {\n      this.appendBinary(toUtf8(str));\n      return this;\n    };\n    SparkMD5.prototype.appendBinary = function(contents) {\n      this._buff += contents;\n      this._length += contents.length;\n      var length = this._buff.length, i;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n      }\n      this._buff = this._buff.substring(i - 64);\n      return this;\n    };\n    SparkMD5.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.prototype.reset = function() {\n      this._buff = \"\";\n      this._length = 0;\n      this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n      return this;\n    };\n    SparkMD5.prototype.getState = function() {\n      return {\n        buff: this._buff,\n        length: this._length,\n        hash: this._hash.slice()\n      };\n    };\n    SparkMD5.prototype.setState = function(state) {\n      this._buff = state.buff;\n      this._length = state.length;\n      this._hash = state.hash;\n      return this;\n    };\n    SparkMD5.prototype.destroy = function() {\n      delete this._hash;\n      delete this._buff;\n      delete this._length;\n    };\n    SparkMD5.prototype._finish = function(tail, length) {\n      var i = length, tmp, lo, hi;\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(this._hash, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = this._length * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(this._hash, tail);\n    };\n    SparkMD5.hash = function(str, raw) {\n      return SparkMD5.hashBinary(toUtf8(str), raw);\n    };\n    SparkMD5.hashBinary = function(content, raw) {\n      var hash = md51(content), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    SparkMD5.ArrayBuffer = function() {\n      this.reset();\n    };\n    SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n      var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n      this._length += arr.byteLength;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n      }\n      this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff[i] << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.ArrayBuffer.prototype.reset = function() {\n      this._buff = new Uint8Array(0);\n      this._length = 0;\n      this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.getState = function() {\n      var state = SparkMD5.prototype.getState.call(this);\n      state.buff = arrayBuffer2Utf8Str(state.buff);\n      return state;\n    };\n    SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n      state.buff = utf8Str2ArrayBuffer(state.buff, true);\n      return SparkMD5.prototype.setState.call(this, state);\n    };\n    SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n    SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n    SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n      var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    return SparkMD5;\n  }));\n})(sparkMd5);\n\nvar SparkMD5 = sparkMd5.exports;\n\nconst fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\nclass FileChecksum {\n  static create(file, callback) {\n    const instance = new FileChecksum(file);\n    instance.create(callback);\n  }\n  constructor(file) {\n    this.file = file;\n    this.chunkSize = 2097152;\n    this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n    this.chunkIndex = 0;\n  }\n  create(callback) {\n    this.callback = callback;\n    this.md5Buffer = new SparkMD5.ArrayBuffer;\n    this.fileReader = new FileReader;\n    this.fileReader.addEventListener(\"load\", (event => this.fileReaderDidLoad(event)));\n    this.fileReader.addEventListener(\"error\", (event => this.fileReaderDidError(event)));\n    this.readNextChunk();\n  }\n  fileReaderDidLoad(event) {\n    this.md5Buffer.append(event.target.result);\n    if (!this.readNextChunk()) {\n      const binaryDigest = this.md5Buffer.end(true);\n      const base64digest = btoa(binaryDigest);\n      this.callback(null, base64digest);\n    }\n  }\n  fileReaderDidError(event) {\n    this.callback(`Error reading ${this.file.name}`);\n  }\n  readNextChunk() {\n    if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n      const start = this.chunkIndex * this.chunkSize;\n      const end = Math.min(start + this.chunkSize, this.file.size);\n      const bytes = fileSlice.call(this.file, start, end);\n      this.fileReader.readAsArrayBuffer(bytes);\n      this.chunkIndex++;\n      return true;\n    } else {\n      return false;\n    }\n  }\n}\n\nfunction getMetaValue(name) {\n  const element = findElement(document.head, `meta[name=\"${name}\"]`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\n\nfunction findElements(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  const elements = root.querySelectorAll(selector);\n  return toArray(elements);\n}\n\nfunction findElement(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  return root.querySelector(selector);\n}\n\nfunction dispatchEvent(element, type, eventInit = {}) {\n  const {disabled: disabled} = element;\n  const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;\n  const event = document.createEvent(\"Event\");\n  event.initEvent(type, bubbles || true, cancelable || true);\n  event.detail = detail || {};\n  try {\n    element.disabled = false;\n    element.dispatchEvent(event);\n  } finally {\n    element.disabled = disabled;\n  }\n  return event;\n}\n\nfunction toArray(value) {\n  if (Array.isArray(value)) {\n    return value;\n  } else if (Array.from) {\n    return Array.from(value);\n  } else {\n    return [].slice.call(value);\n  }\n}\n\nclass BlobRecord {\n  constructor(file, checksum, url, directUploadToken, attachmentName) {\n    this.file = file;\n    this.attributes = {\n      filename: file.name,\n      content_type: file.type || \"application/octet-stream\",\n      byte_size: file.size,\n      checksum: checksum\n    };\n    this.directUploadToken = directUploadToken;\n    this.attachmentName = attachmentName;\n    this.xhr = new XMLHttpRequest;\n    this.xhr.open(\"POST\", url, true);\n    this.xhr.responseType = \"json\";\n    this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n    this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n    this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n    const csrfToken = getMetaValue(\"csrf-token\");\n    if (csrfToken != undefined) {\n      this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n    }\n    this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n    this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n  }\n  get status() {\n    return this.xhr.status;\n  }\n  get response() {\n    const {responseType: responseType, response: response} = this.xhr;\n    if (responseType == \"json\") {\n      return response;\n    } else {\n      return JSON.parse(response);\n    }\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(JSON.stringify({\n      blob: this.attributes,\n      direct_upload_token: this.directUploadToken,\n      attachment_name: this.attachmentName\n    }));\n  }\n  requestDidLoad(event) {\n    if (this.status >= 200 && this.status < 300) {\n      const {response: response} = this;\n      const {direct_upload: direct_upload} = response;\n      delete response.direct_upload;\n      this.attributes = response;\n      this.directUploadData = direct_upload;\n      this.callback(null, this.toJSON());\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n  }\n  toJSON() {\n    const result = {};\n    for (const key in this.attributes) {\n      result[key] = this.attributes[key];\n    }\n    return result;\n  }\n}\n\nclass BlobUpload {\n  constructor(blob) {\n    this.blob = blob;\n    this.file = blob.file;\n    const {url: url, headers: headers} = blob.directUploadData;\n    this.xhr = new XMLHttpRequest;\n    this.xhr.open(\"PUT\", url, true);\n    this.xhr.responseType = \"text\";\n    for (const key in headers) {\n      this.xhr.setRequestHeader(key, headers[key]);\n    }\n    this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n    this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(this.file.slice());\n  }\n  requestDidLoad(event) {\n    const {status: status, response: response} = this.xhr;\n    if (status >= 200 && status < 300) {\n      this.callback(null, response);\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n  }\n}\n\nlet id = 0;\n\nclass DirectUpload {\n  constructor(file, url, serviceName, attachmentName, delegate) {\n    this.id = ++id;\n    this.file = file;\n    this.url = url;\n    this.serviceName = serviceName;\n    this.attachmentName = attachmentName;\n    this.delegate = delegate;\n  }\n  create(callback) {\n    FileChecksum.create(this.file, ((error, checksum) => {\n      if (error) {\n        callback(error);\n        return;\n      }\n      const blob = new BlobRecord(this.file, checksum, this.url, this.serviceName, this.attachmentName);\n      notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n      blob.create((error => {\n        if (error) {\n          callback(error);\n        } else {\n          const upload = new BlobUpload(blob);\n          notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n          upload.create((error => {\n            if (error) {\n              callback(error);\n            } else {\n              callback(null, blob.toJSON());\n            }\n          }));\n        }\n      }));\n    }));\n  }\n}\n\nfunction notify(object, methodName, ...messages) {\n  if (object && typeof object[methodName] == \"function\") {\n    return object[methodName](...messages);\n  }\n}\n\nclass DirectUploadController {\n  constructor(input, file) {\n    this.input = input;\n    this.file = file;\n    this.directUpload = new DirectUpload(this.file, this.url, this.directUploadToken, this.attachmentName, this);\n    this.dispatch(\"initialize\");\n  }\n  start(callback) {\n    const hiddenInput = document.createElement(\"input\");\n    hiddenInput.type = \"hidden\";\n    hiddenInput.name = this.input.name;\n    this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n    this.dispatch(\"start\");\n    this.directUpload.create(((error, attributes) => {\n      if (error) {\n        hiddenInput.parentNode.removeChild(hiddenInput);\n        this.dispatchError(error);\n      } else {\n        hiddenInput.value = attributes.signed_id;\n      }\n      this.dispatch(\"end\");\n      callback(error);\n    }));\n  }\n  uploadRequestDidProgress(event) {\n    const progress = event.loaded / event.total * 100;\n    if (progress) {\n      this.dispatch(\"progress\", {\n        progress: progress\n      });\n    }\n  }\n  get url() {\n    return this.input.getAttribute(\"data-direct-upload-url\");\n  }\n  get directUploadToken() {\n    return this.input.getAttribute(\"data-direct-upload-token\");\n  }\n  get attachmentName() {\n    return this.input.getAttribute(\"data-direct-upload-attachment-name\");\n  }\n  dispatch(name, detail = {}) {\n    detail.file = this.file;\n    detail.id = this.directUpload.id;\n    return dispatchEvent(this.input, `direct-upload:${name}`, {\n      detail: detail\n    });\n  }\n  dispatchError(error) {\n    const event = this.dispatch(\"error\", {\n      error: error\n    });\n    if (!event.defaultPrevented) {\n      alert(error);\n    }\n  }\n  directUploadWillCreateBlobWithXHR(xhr) {\n    this.dispatch(\"before-blob-request\", {\n      xhr: xhr\n    });\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    this.dispatch(\"before-storage-request\", {\n      xhr: xhr\n    });\n    xhr.upload.addEventListener(\"progress\", (event => this.uploadRequestDidProgress(event)));\n  }\n}\n\nconst inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\nclass DirectUploadsController {\n  constructor(form) {\n    this.form = form;\n    this.inputs = findElements(form, inputSelector).filter((input => input.files.length));\n  }\n  start(callback) {\n    const controllers = this.createDirectUploadControllers();\n    const startNextController = () => {\n      const controller = controllers.shift();\n      if (controller) {\n        controller.start((error => {\n          if (error) {\n            callback(error);\n            this.dispatch(\"end\");\n          } else {\n            startNextController();\n          }\n        }));\n      } else {\n        callback();\n        this.dispatch(\"end\");\n      }\n    };\n    this.dispatch(\"start\");\n    startNextController();\n  }\n  createDirectUploadControllers() {\n    const controllers = [];\n    this.inputs.forEach((input => {\n      toArray(input.files).forEach((file => {\n        const controller = new DirectUploadController(input, file);\n        controllers.push(controller);\n      }));\n    }));\n    return controllers;\n  }\n  dispatch(name, detail = {}) {\n    return dispatchEvent(this.form, `direct-uploads:${name}`, {\n      detail: detail\n    });\n  }\n}\n\nconst processingAttribute = \"data-direct-uploads-processing\";\n\nconst submitButtonsByForm = new WeakMap;\n\nlet started = false;\n\nfunction start() {\n  if (!started) {\n    started = true;\n    document.addEventListener(\"click\", didClick, true);\n    document.addEventListener(\"submit\", didSubmitForm, true);\n    document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n  }\n}\n\nfunction didClick(event) {\n  const {target: target} = event;\n  if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n    submitButtonsByForm.set(target.form, target);\n  }\n}\n\nfunction didSubmitForm(event) {\n  handleFormSubmissionEvent(event);\n}\n\nfunction didSubmitRemoteElement(event) {\n  if (event.target.tagName == \"FORM\") {\n    handleFormSubmissionEvent(event);\n  }\n}\n\nfunction handleFormSubmissionEvent(event) {\n  const form = event.target;\n  if (form.hasAttribute(processingAttribute)) {\n    event.preventDefault();\n    return;\n  }\n  const controller = new DirectUploadsController(form);\n  const {inputs: inputs} = controller;\n  if (inputs.length) {\n    event.preventDefault();\n    form.setAttribute(processingAttribute, \"\");\n    inputs.forEach(disable);\n    controller.start((error => {\n      form.removeAttribute(processingAttribute);\n      if (error) {\n        inputs.forEach(enable);\n      } else {\n        submitForm(form);\n      }\n    }));\n  }\n}\n\nfunction submitForm(form) {\n  let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n  if (button) {\n    const {disabled: disabled} = button;\n    button.disabled = false;\n    button.focus();\n    button.click();\n    button.disabled = disabled;\n  } else {\n    button = document.createElement(\"input\");\n    button.type = \"submit\";\n    button.style.display = \"none\";\n    form.appendChild(button);\n    button.click();\n    form.removeChild(button);\n  }\n  submitButtonsByForm.delete(form);\n}\n\nfunction disable(input) {\n  input.disabled = true;\n}\n\nfunction enable(input) {\n  input.disabled = false;\n}\n\nfunction autostart() {\n  if (window.ActiveStorage) {\n    start();\n  }\n}\n\nsetTimeout(autostart, 1);\n\nexport { DirectUpload, start };\n", "import { Controller } from \"@hotwired/stimulus\";\nimport { DirectUpload } from \"@rails/activestorage\";\n\nexport default class extends Controller {\n  static targets = [\"input\"];\n  static values = {\n    maxFileSize: Number,\n    maxFiles: Number,\n  };\n\n  connect() {\n    this.inputTarget.addEventListener(\"change\", this.handleFileChange.bind(this));\n    $(\".js-remove-image\").on(\"click\", this.removeFile.bind(this));\n  }\n\n  handleFileChange(event) {\n    const files = Array.from(this.inputTarget.files);\n    const totalFile = $(\"input.js-image-file-input\").length;\n    const fileSizeInvalid = files.some(file => file.size > this.maxFileSizeValue);\n\n    if (totalFile + files.length > this.maxFilesValue || fileSizeInvalid) {\n      alert(`\u6700\u5927${this.maxFileSizeValue / (1024 * 1024)}MB\u4EE5\u4E0B\u306E\u30D5\u30A1\u30A4\u30EB\u3092${this.maxFilesValue}\u30D5\u30A1\u30A4\u30EB\u307E\u3067\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002`);\n      this.inputTarget.value = null;\n      return;\n    }\n\n    files.forEach(this._uploadFile.bind(this));\n    this.inputTarget.value = null;\n  }\n\n  _uploadFile(file) {\n    this._showSpinner();  // \u30B9\u30D4\u30CA\u30FC\u3092\u8868\u793A\n\n    const upload = new DirectUpload(\n      file,\n      this.inputTarget.getAttribute(\"data-direct-upload-url\"),\n      this.inputTarget.getAttribute(\"data-direct-upload-token\"),\n      this.inputTarget.getAttribute(\"data-direct-upload-attachment-name\")\n    );\n\n    upload.create((error, blob) => {\n      this._hideSpinner();  // \u30B9\u30D4\u30CA\u30FC\u3092\u975E\u8868\u793A\n\n      if (error) {\n        console.log(\"File upload error!\");\n        return;\n      }\n\n      const hiddenField = this._createHiddenField(blob);\n      document.querySelector(\"form\").appendChild(hiddenField);\n\n      this._imagesPreview(blob);\n    });\n  }\n\n  _createHiddenField(blob) {\n    const hiddenField = document.createElement(\"input\");\n    hiddenField.type = \"hidden\";\n    hiddenField.value = blob.signed_id;\n    hiddenField.id = blob.signed_id;\n    hiddenField.classList.add(\"js-image-file-input\");\n    hiddenField.name = this.inputTarget.name;\n    return hiddenField;\n  }\n\n  _imagesPreview(blob) {\n    if (!$(\".js-image-added-wrapper\").length) {\n      $(\".js-image-wrapper\").append('<div class=\"images-review d-flex align-items-center js-image-added-wrapper\"></div>');\n    }\n\n    const element = `\n      <div class=\"image-container parent-image js-add-preview\">\n        <img src=\"${blob.preview_url}\">\n        <i class=\"icon-clear\" data-action=\"click->direct-upload#removeFile\" data-signed=\"${blob.signed_id}\"></i>\n      </div>`;\n    $(\".js-image-added-wrapper\").append(element);\n  }\n\n  _showSpinner() {\n    if (!$(\".js-image-added-wrapper\").length) {\n      $(\".js-image-wrapper\").append('<div class=\"images-review d-flex align-items-center js-image-added-wrapper\"></div>');\n    }\n\n    const spinnerElement = `\n      <div class=\"spinner-border js-spinner\" role=\"status\">\n        <span class=\"visually-hidden\">Loading...</span>\n      </div>`;\n    $(\".js-image-added-wrapper\").append(spinnerElement);\n  }\n  \n  _hideSpinner() {\n    $(\".js-spinner\").remove();\n  }\n\n  removeFile(e) {\n    const id = $(e.currentTarget).data(\"signed\");\n    $(`#${id}`).remove();\n    e.currentTarget.closest(\".parent-image\").remove();\n  }\n}\n", "var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names-external').f;\n\n// eslint-disable-next-line es/no-object-getownpropertynames -- required for testing\nvar FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); });\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n  getOwnPropertyNames: getOwnPropertyNames\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n  test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n  test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n  // feature detection can be too slow, so check engines versions\n  if (V8) return V8 < 70;\n  if (FF && FF > 3) return;\n  if (IE_OR_EDGE) return true;\n  if (WEBKIT) return WEBKIT < 603;\n\n  var result = '';\n  var code, chr, value, index;\n\n  // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n  for (code = 65; code < 76; code++) {\n    chr = String.fromCharCode(code);\n\n    switch (code) {\n      case 66: case 69: case 70: case 72: value = 3; break;\n      case 68: case 71: value = 4; break;\n      default: value = 2;\n    }\n\n    for (index = 0; index < 47; index++) {\n      test.push({ k: chr + index, v: value });\n    }\n  }\n\n  test.sort(function (a, b) { return b.v - a.v; });\n\n  for (index = 0; index < test.length; index++) {\n    chr = test[index].k.charAt(0);\n    if (result.charAt(result.length - 1) !== chr) result += chr;\n  }\n\n  return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n  return function (x, y) {\n    if (y === undefined) return -1;\n    if (x === undefined) return 1;\n    if (comparefn !== undefined) return +comparefn(x, y) || 0;\n    return toString(x) > toString(y) ? 1 : -1;\n  };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  sort: function sort(comparefn) {\n    if (comparefn !== undefined) aCallable(comparefn);\n\n    var array = toObject(this);\n\n    if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n    var items = [];\n    var arrayLength = lengthOfArrayLike(array);\n    var itemsLength, index;\n\n    for (index = 0; index < arrayLength; index++) {\n      if (index in array) push(items, array[index]);\n    }\n\n    internalSort(items, getSortCompare(comparefn));\n\n    itemsLength = items.length;\n    index = 0;\n\n    while (index < itemsLength) array[index] = items[index++];\n    while (index < arrayLength) delete array[index++];\n\n    return array;\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar TypeError = global.TypeError;\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  splice: function splice(start, deleteCount /* , ...items */) {\n    var O = toObject(this);\n    var len = lengthOfArrayLike(O);\n    var actualStart = toAbsoluteIndex(start, len);\n    var argumentsLength = arguments.length;\n    var insertCount, actualDeleteCount, A, k, from, to;\n    if (argumentsLength === 0) {\n      insertCount = actualDeleteCount = 0;\n    } else if (argumentsLength === 1) {\n      insertCount = 0;\n      actualDeleteCount = len - actualStart;\n    } else {\n      insertCount = argumentsLength - 2;\n      actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n    }\n    if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n      throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n    }\n    A = arraySpeciesCreate(O, actualDeleteCount);\n    for (k = 0; k < actualDeleteCount; k++) {\n      from = actualStart + k;\n      if (from in O) createProperty(A, k, O[from]);\n    }\n    A.length = actualDeleteCount;\n    if (insertCount < actualDeleteCount) {\n      for (k = actualStart; k < len - actualDeleteCount; k++) {\n        from = k + actualDeleteCount;\n        to = k + insertCount;\n        if (from in O) O[to] = O[from];\n        else delete O[to];\n      }\n      for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n    } else if (insertCount > actualDeleteCount) {\n      for (k = len - actualDeleteCount; k > actualStart; k--) {\n        from = k + actualDeleteCount - 1;\n        to = k + insertCount - 1;\n        if (from in O) O[to] = O[from];\n        else delete O[to];\n      }\n    }\n    for (k = 0; k < insertCount; k++) {\n      O[k + actualStart] = arguments[k + 2];\n    }\n    O.length = len - actualDeleteCount + insertCount;\n    return A;\n  }\n});\n", "var $ = require('../internals/export');\nvar isIntegralNumber = require('../internals/is-integral-number');\n\n// `Number.isInteger` method\n// https://tc39.es/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n  isInteger: isIntegralNumber\n});\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar hasOwn = require('../internals/has-own-property');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar thisNumberValue = require('../internals/this-number-value');\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\nvar TypeError = global.TypeError;\nvar arraySlice = uncurryThis(''.slice);\nvar charCodeAt = uncurryThis(''.charCodeAt);\n\n// `ToNumeric` abstract operation\n// https://tc39.es/ecma262/#sec-tonumeric\nvar toNumeric = function (value) {\n  var primValue = toPrimitive(value, 'number');\n  return typeof primValue == 'bigint' ? primValue : toNumber(primValue);\n};\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n  var it = toPrimitive(argument, 'number');\n  var first, third, radix, maxCode, digits, length, index, code;\n  if (isSymbol(it)) throw TypeError('Cannot convert a Symbol value to a number');\n  if (typeof it == 'string' && it.length > 2) {\n    it = trim(it);\n    first = charCodeAt(it, 0);\n    if (first === 43 || first === 45) {\n      third = charCodeAt(it, 2);\n      if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n    } else if (first === 48) {\n      switch (charCodeAt(it, 1)) {\n        case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n        case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n        default: return +it;\n      }\n      digits = arraySlice(it, 2);\n      length = digits.length;\n      for (index = 0; index < length; index++) {\n        code = charCodeAt(digits, index);\n        // parseInt parses a string to a first unavailable symbol\n        // but ToNumber should return NaN if a string contains unavailable symbols\n        if (code < 48 || code > maxCode) return NaN;\n      } return parseInt(digits, radix);\n    }\n  } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n  var NumberWrapper = function Number(value) {\n    var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));\n    var dummy = this;\n    // check on 1..constructor(foo) case\n    return isPrototypeOf(NumberPrototype, dummy) && fails(function () { thisNumberValue(dummy); })\n      ? inheritIfRequired(Object(n), dummy, NumberWrapper) : n;\n  };\n  for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n    // ES3:\n    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n    // ES2015 (in case, if modules with ES2015 Number statics required before):\n    'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +\n    // ESNext\n    'fromString,range'\n  ).split(','), j = 0, key; keys.length > j; j++) {\n    if (hasOwn(NativeNumber, key = keys[j]) && !hasOwn(NumberWrapper, key)) {\n      defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n    }\n  }\n  NumberWrapper.prototype = NumberPrototype;\n  NumberPrototype.constructor = NumberWrapper;\n  redefine(global, NUMBER, NumberWrapper);\n}\n", "'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar un$Slice = require('../internals/array-slice');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  slice: function slice(start, end) {\n    var O = toIndexedObject(this);\n    var length = lengthOfArrayLike(O);\n    var k = toAbsoluteIndex(start, length);\n    var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n    // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n    var Constructor, result, n;\n    if (isArray(O)) {\n      Constructor = O.constructor;\n      // cross-realm fallback\n      if (isConstructor(Constructor) && (Constructor === Array || isArray(Constructor.prototype))) {\n        Constructor = undefined;\n      } else if (isObject(Constructor)) {\n        Constructor = Constructor[SPECIES];\n        if (Constructor === null) Constructor = undefined;\n      }\n      if (Constructor === Array || Constructor === undefined) {\n        return un$Slice(O, k, fin);\n      }\n    }\n    result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n    for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n    result.length = n;\n    return result;\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\nvar TypeError = global.TypeError;\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n  var array = [];\n  array[IS_CONCAT_SPREADABLE] = false;\n  return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n  if (!isObject(O)) return false;\n  var spreadable = O[IS_CONCAT_SPREADABLE];\n  return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  concat: function concat(arg) {\n    var O = toObject(this);\n    var A = arraySpeciesCreate(O, 0);\n    var n = 0;\n    var i, k, length, len, E;\n    for (i = -1, length = arguments.length; i < length; i++) {\n      E = i === -1 ? O : arguments[i];\n      if (isConcatSpreadable(E)) {\n        len = lengthOfArrayLike(E);\n        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n      } else {\n        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        createProperty(A, n++, E);\n      }\n    }\n    A.length = n;\n    return A;\n  }\n});\n", "var $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n  fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n", "'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  map: function map(callbackfn /* , thisArg */) {\n    return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.fill.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.reverse.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/web.immediate.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.function.name.js\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { addClass, empty, removeClass } from \"./helpers/dom/element.mjs\";\nimport { isFunction } from \"./helpers/function.mjs\";\nimport { isDefined, isUndefined, isRegExp, _injectProductInfo, isEmpty } from \"./helpers/mixed.mjs\";\nimport { isMobileBrowser, isIpadOS } from \"./helpers/browser.mjs\";\nimport EditorManager from \"./editorManager.mjs\";\nimport EventManager from \"./eventManager.mjs\";\nimport { deepClone, duckSchema, isObjectEqual, isObject, deepObjectSize, hasOwnProperty, createObjectPropListener, objectEach } from \"./helpers/object.mjs\";\nimport { arrayMap, arrayEach, arrayReduce, getDifferenceOfArrays, stringToArray, pivot } from \"./helpers/array.mjs\";\nimport { instanceToHTML } from \"./utils/parseTable.mjs\";\nimport { getPlugin, getPluginsNames } from \"./plugins/registry.mjs\";\nimport { getRenderer } from \"./renderers/registry.mjs\";\nimport { getValidator } from \"./validators/registry.mjs\";\nimport { randomString, toUpperCaseFirst } from \"./helpers/string.mjs\";\nimport { rangeEach, rangeEachReverse, isNumericLike } from \"./helpers/number.mjs\";\nimport TableView from \"./tableView.mjs\";\nimport DataSource from \"./dataSource.mjs\";\nimport { cellMethodLookupFactory, spreadsheetColumnLabel } from \"./helpers/data.mjs\";\nimport { IndexMapper } from \"./translations/index.mjs\";\nimport { registerAsRootInstance, hasValidParameter, isRootInstance } from \"./utils/rootInstance.mjs\";\nimport { CellCoords, ViewportColumnsCalculator } from \"./3rdparty/walkontable/src/index.mjs\";\nimport Hooks from \"./pluginHooks.mjs\";\nimport { hasLanguageDictionary, getValidLanguageCode, getTranslatedPhrase } from \"./i18n/registry.mjs\";\nimport { warnUserAboutLanguageRegistration, normalizeLanguageCode } from \"./i18n/utils.mjs\";\nimport { startObserving as keyStateStartObserving, stopObserving as keyStateStopObserving } from \"./utils/keyStateObserver.mjs\";\nimport { Selection } from \"./selection/index.mjs\";\nimport { MetaManager, DynamicCellMetaMod, replaceData } from \"./dataMap/index.mjs\";\nimport { createUniqueMap } from \"./utils/dataStructures/uniqueMap.mjs\";\nvar activeGuid = null;\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * Handsontable constructor.\n *\n * @core\n * @class Core\n * @description\n *\n * The `Handsontable` class to which we refer as to `Core`, allows you to modify the grid's behavior by using one of the available public methods.\n *\n * ## How to call a method\n *\n * ```js\n * // First, let's contruct Handsontable\n * const hot = new Handsontable(document.getElementById('example'), options);\n *\n * // Then, let's use the setDataAtCell method\n * hot.setDataAtCell(0, 0, 'new value');\n * ```\n *\n * @param {HTMLElement} rootElement The element to which the Handsontable instance is injected.\n * @param {object} userSettings The user defined options.\n * @param {boolean} [rootInstanceSymbol=false] Indicates if the instance is root of all later instances created.\n */\n\nexport default function Core(rootElement, userSettings) {\n  var _this = this;\n\n  var rootInstanceSymbol = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var preventScrollingToCell = false;\n  var instance = this;\n  var eventManager = new EventManager(instance);\n  var datamap;\n  var dataSource;\n  var grid;\n  var editorManager;\n  var firstRun = true;\n  userSettings.language = getValidLanguageCode(userSettings.language);\n  var metaManager = new MetaManager(instance, userSettings, [DynamicCellMetaMod]);\n  var tableMeta = metaManager.getTableMeta();\n  var globalMeta = metaManager.getGlobalMeta();\n  var pluginsRegistry = createUniqueMap();\n\n  if (hasValidParameter(rootInstanceSymbol)) {\n    registerAsRootInstance(this);\n  } // TODO: check if references to DOM elements should be move to UI layer (Walkontable)\n\n  /**\n   * Reference to the container element.\n   *\n   * @private\n   * @type {HTMLElement}\n   */\n\n\n  this.rootElement = rootElement;\n  /**\n   * The nearest document over container.\n   *\n   * @private\n   * @type {Document}\n   */\n\n  this.rootDocument = rootElement.ownerDocument;\n  /**\n   * Window object over container's document.\n   *\n   * @private\n   * @type {Window}\n   */\n\n  this.rootWindow = this.rootDocument.defaultView;\n  /**\n   * A boolean to tell if the Handsontable has been fully destroyed. This is set to `true`\n   * after `afterDestroy` hook is called.\n   *\n   * @memberof Core#\n   * @member isDestroyed\n   * @type {boolean}\n   */\n\n  this.isDestroyed = false;\n  /**\n   * The counter determines how many times the render suspending was called. It allows\n   * tracking the nested suspending calls. For each render suspend resuming call the\n   * counter is decremented. The value equal to 0 means the render suspending feature\n   * is disabled.\n   *\n   * @private\n   * @type {number}\n   */\n\n  this.renderSuspendedCounter = 0;\n  /**\n   * The counter determines how many times the execution suspending was called. It allows\n   * tracking the nested suspending calls. For each execution suspend resuming call the\n   * counter is decremented. The value equal to 0 means the execution suspending feature\n   * is disabled.\n   *\n   * @private\n   * @type {number}\n   */\n\n  this.executionSuspendedCounter = 0;\n  keyStateStartObserving(this.rootDocument);\n  this.container = this.rootDocument.createElement('div');\n  this.renderCall = false;\n  rootElement.insertBefore(this.container, rootElement.firstChild);\n\n  if (isRootInstance(this)) {\n    _injectProductInfo(userSettings.licenseKey, rootElement);\n  }\n\n  this.guid = \"ht_\".concat(randomString()); // this is the namespace for global events\n\n  /**\n   * Instance of index mapper which is responsible for managing the column indexes.\n   *\n   * @memberof Core#\n   * @member columnIndexMapper\n   * @type {IndexMapper}\n   */\n\n  this.columnIndexMapper = new IndexMapper();\n  /**\n   * Instance of index mapper which is responsible for managing the row indexes.\n   *\n   * @memberof Core#\n   * @member rowIndexMapper\n   * @type {IndexMapper}\n   */\n\n  this.rowIndexMapper = new IndexMapper();\n  dataSource = new DataSource(instance);\n\n  if (!this.rootElement.id || this.rootElement.id.substring(0, 3) === 'ht_') {\n    this.rootElement.id = this.guid; // if root element does not have an id, assign a random id\n  }\n\n  var visualToRenderableCoords = function visualToRenderableCoords(coords) {\n    var visualRow = coords.row,\n        visualColumn = coords.col;\n    return new CellCoords( // We just store indexes for rows and columns without headers.\n    visualRow >= 0 ? instance.rowIndexMapper.getRenderableFromVisualIndex(visualRow) : visualRow, visualColumn >= 0 ? instance.columnIndexMapper.getRenderableFromVisualIndex(visualColumn) : visualColumn);\n  };\n\n  var renderableToVisualCoords = function renderableToVisualCoords(coords) {\n    var renderableRow = coords.row,\n        renderableColumn = coords.col;\n    return new CellCoords( // We just store indexes for rows and columns without headers.\n    renderableRow >= 0 ? instance.rowIndexMapper.getVisualFromRenderableIndex(renderableRow) : renderableRow, renderableColumn >= 0 ? instance.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn) : renderableColumn // eslint-disable-line max-len\n    );\n  };\n\n  var selection = new Selection(tableMeta, {\n    countCols: function countCols() {\n      return instance.countCols();\n    },\n    countRows: function countRows() {\n      return instance.countRows();\n    },\n    propToCol: function propToCol(prop) {\n      return datamap.propToCol(prop);\n    },\n    isEditorOpened: function isEditorOpened() {\n      return instance.getActiveEditor() ? instance.getActiveEditor().isOpened() : false;\n    },\n    countColsTranslated: function countColsTranslated() {\n      return _this.view.countRenderableColumns();\n    },\n    countRowsTranslated: function countRowsTranslated() {\n      return _this.view.countRenderableRows();\n    },\n    visualToRenderableCoords: visualToRenderableCoords,\n    renderableToVisualCoords: renderableToVisualCoords,\n    isDisabledCellSelection: function isDisabledCellSelection(visualRow, visualColumn) {\n      return instance.getCellMeta(visualRow, visualColumn).disableVisualSelection;\n    }\n  });\n  this.selection = selection;\n\n  var onIndexMapperCacheUpdate = function onIndexMapperCacheUpdate(_ref) {\n    var hiddenIndexesChanged = _ref.hiddenIndexesChanged;\n\n    if (hiddenIndexesChanged) {\n      _this.selection.refresh();\n    }\n  };\n\n  this.columnIndexMapper.addLocalHook('cacheUpdated', onIndexMapperCacheUpdate);\n  this.rowIndexMapper.addLocalHook('cacheUpdated', onIndexMapperCacheUpdate);\n  this.selection.addLocalHook('beforeSetRangeStart', function (cellCoords) {\n    _this.runHooks('beforeSetRangeStart', cellCoords);\n  });\n  this.selection.addLocalHook('beforeSetRangeStartOnly', function (cellCoords) {\n    _this.runHooks('beforeSetRangeStartOnly', cellCoords);\n  });\n  this.selection.addLocalHook('beforeSetRangeEnd', function (cellCoords) {\n    _this.runHooks('beforeSetRangeEnd', cellCoords);\n\n    if (cellCoords.row < 0) {\n      cellCoords.row = _this.view.wt.wtTable.getFirstVisibleRow();\n    }\n\n    if (cellCoords.col < 0) {\n      cellCoords.col = _this.view.wt.wtTable.getFirstVisibleColumn();\n    }\n  });\n  this.selection.addLocalHook('afterSetRangeEnd', function (cellCoords) {\n    var preventScrolling = createObjectPropListener(false);\n\n    var selectionRange = _this.selection.getSelectedRange();\n\n    var _selectionRange$curre = selectionRange.current(),\n        from = _selectionRange$curre.from,\n        to = _selectionRange$curre.to;\n\n    var selectionLayerLevel = selectionRange.size() - 1;\n\n    _this.runHooks('afterSelection', from.row, from.col, to.row, to.col, preventScrolling, selectionLayerLevel);\n\n    _this.runHooks('afterSelectionByProp', from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), preventScrolling, selectionLayerLevel); // eslint-disable-line max-len\n\n\n    var isSelectedByAnyHeader = _this.selection.isSelectedByAnyHeader();\n\n    var currentSelectedRange = _this.selection.selectedRange.current();\n\n    var scrollToCell = true;\n\n    if (preventScrollingToCell) {\n      scrollToCell = false;\n    }\n\n    if (preventScrolling.isTouched()) {\n      scrollToCell = !preventScrolling.value;\n    }\n\n    var isSelectedByRowHeader = _this.selection.isSelectedByRowHeader();\n\n    var isSelectedByColumnHeader = _this.selection.isSelectedByColumnHeader();\n\n    if (scrollToCell !== false) {\n      if (!isSelectedByAnyHeader) {\n        if (currentSelectedRange && !_this.selection.isMultiple()) {\n          _this.view.scrollViewport(visualToRenderableCoords(currentSelectedRange.from));\n        } else {\n          _this.view.scrollViewport(visualToRenderableCoords(cellCoords));\n        }\n      } else if (isSelectedByRowHeader) {\n        _this.view.scrollViewportVertically(instance.rowIndexMapper.getRenderableFromVisualIndex(cellCoords.row));\n      } else if (isSelectedByColumnHeader) {\n        _this.view.scrollViewportHorizontally(instance.columnIndexMapper.getRenderableFromVisualIndex(cellCoords.col));\n      }\n    } // @TODO: These CSS classes are no longer needed anymore. They are used only as a indicator of the selected\n    // rows/columns in the MergedCells plugin (via border.js#L520 in the walkontable module). After fixing\n    // the Border class this should be removed.\n\n\n    if (isSelectedByRowHeader && isSelectedByColumnHeader) {\n      addClass(_this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n    } else if (isSelectedByRowHeader) {\n      removeClass(_this.rootElement, 'ht__selection--columns');\n      addClass(_this.rootElement, 'ht__selection--rows');\n    } else if (isSelectedByColumnHeader) {\n      removeClass(_this.rootElement, 'ht__selection--rows');\n      addClass(_this.rootElement, 'ht__selection--columns');\n    } else {\n      removeClass(_this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n    }\n\n    _this._refreshBorders(null);\n  });\n  this.selection.addLocalHook('afterSelectionFinished', function (cellRanges) {\n    var selectionLayerLevel = cellRanges.length - 1;\n    var _cellRanges$selection = cellRanges[selectionLayerLevel],\n        from = _cellRanges$selection.from,\n        to = _cellRanges$selection.to;\n\n    _this.runHooks('afterSelectionEnd', from.row, from.col, to.row, to.col, selectionLayerLevel);\n\n    _this.runHooks('afterSelectionEndByProp', from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), selectionLayerLevel);\n  });\n  this.selection.addLocalHook('afterIsMultipleSelection', function (isMultiple) {\n    var changedIsMultiple = _this.runHooks('afterIsMultipleSelection', isMultiple.value);\n\n    if (isMultiple.value) {\n      isMultiple.value = changedIsMultiple;\n    }\n  });\n  this.selection.addLocalHook('beforeModifyTransformStart', function (cellCoordsDelta) {\n    _this.runHooks('modifyTransformStart', cellCoordsDelta);\n  });\n  this.selection.addLocalHook('afterModifyTransformStart', function (coords, rowTransformDir, colTransformDir) {\n    _this.runHooks('afterModifyTransformStart', coords, rowTransformDir, colTransformDir);\n  });\n  this.selection.addLocalHook('beforeModifyTransformEnd', function (cellCoordsDelta) {\n    _this.runHooks('modifyTransformEnd', cellCoordsDelta);\n  });\n  this.selection.addLocalHook('afterModifyTransformEnd', function (coords, rowTransformDir, colTransformDir) {\n    _this.runHooks('afterModifyTransformEnd', coords, rowTransformDir, colTransformDir);\n  });\n  this.selection.addLocalHook('afterDeselect', function () {\n    editorManager.destroyEditor();\n\n    _this._refreshBorders();\n\n    removeClass(_this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n\n    _this.runHooks('afterDeselect');\n  });\n  this.selection.addLocalHook('insertRowRequire', function (totalRows) {\n    _this.alter('insert_row', totalRows, 1, 'auto');\n  });\n  this.selection.addLocalHook('insertColRequire', function (totalCols) {\n    _this.alter('insert_col', totalCols, 1, 'auto');\n  });\n  grid = {\n    /**\n     * Inserts or removes rows and columns.\n     *\n     * @private\n     * @param {string} action Possible values: \"insert_row\", \"insert_col\", \"remove_row\", \"remove_col\".\n     * @param {number|Array} index Row or column visual index which from the alter action will be triggered.\n     *                             Alter actions such as \"remove_row\" and \"remove_col\" support array indexes in the\n     *                             format `[[index, amount], [index, amount]...]` this can be used to remove\n     *                             non-consecutive columns or rows in one call.\n     * @param {number} [amount=1] Ammount rows or columns to remove.\n     * @param {string} [source] Optional. Source of hook runner.\n     * @param {boolean} [keepEmptyRows] Optional. Flag for preventing deletion of empty rows.\n     */\n    alter: function alter(action, index) {\n      var amount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n      var source = arguments.length > 3 ? arguments[3] : undefined;\n      var keepEmptyRows = arguments.length > 4 ? arguments[4] : undefined;\n      var delta;\n\n      var normalizeIndexesGroup = function normalizeIndexesGroup(indexes) {\n        if (indexes.length === 0) {\n          return [];\n        }\n\n        var sortedIndexes = _toConsumableArray(indexes); // Sort the indexes in ascending order.\n\n\n        sortedIndexes.sort(function (_ref2, _ref3) {\n          var _ref4 = _slicedToArray(_ref2, 1),\n              indexA = _ref4[0];\n\n          var _ref5 = _slicedToArray(_ref3, 1),\n              indexB = _ref5[0];\n\n          if (indexA === indexB) {\n            return 0;\n          }\n\n          return indexA > indexB ? 1 : -1;\n        }); // Normalize the {index, amount} groups into bigger groups.\n\n        var normalizedIndexes = arrayReduce(sortedIndexes, function (acc, _ref6) {\n          var _ref7 = _slicedToArray(_ref6, 2),\n              groupIndex = _ref7[0],\n              groupAmount = _ref7[1];\n\n          var previousItem = acc[acc.length - 1];\n\n          var _previousItem = _slicedToArray(previousItem, 2),\n              prevIndex = _previousItem[0],\n              prevAmount = _previousItem[1];\n\n          var prevLastIndex = prevIndex + prevAmount;\n\n          if (groupIndex <= prevLastIndex) {\n            var amountToAdd = Math.max(groupAmount - (prevLastIndex - groupIndex), 0);\n            previousItem[1] += amountToAdd;\n          } else {\n            acc.push([groupIndex, groupAmount]);\n          }\n\n          return acc;\n        }, [sortedIndexes[0]]);\n        return normalizedIndexes;\n      };\n      /* eslint-disable no-case-declarations */\n\n\n      switch (action) {\n        case 'insert_row':\n          var numberOfSourceRows = instance.countSourceRows();\n\n          if (tableMeta.maxRows === numberOfSourceRows) {\n            return;\n          } // eslint-disable-next-line no-param-reassign\n\n\n          index = isDefined(index) ? index : numberOfSourceRows;\n          delta = datamap.createRow(index, amount, source);\n\n          if (delta) {\n            metaManager.createRow(instance.toPhysicalRow(index), amount);\n            var currentSelectedRange = selection.selectedRange.current();\n            var currentFromRange = currentSelectedRange === null || currentSelectedRange === void 0 ? void 0 : currentSelectedRange.from;\n            var currentFromRow = currentFromRange === null || currentFromRange === void 0 ? void 0 : currentFromRange.row; // Moving down the selection (when it exist). It should be present on the \"old\" row.\n            // TODO: The logic here should be handled by selection module.\n\n            if (isDefined(currentFromRow) && currentFromRow >= index) {\n              var _currentSelectedRange = currentSelectedRange.to,\n                  currentToRow = _currentSelectedRange.row,\n                  currentToColumn = _currentSelectedRange.col;\n              var currentFromColumn = currentFromRange.col; // Workaround: headers are not stored inside selection.\n\n              if (selection.isSelectedByRowHeader()) {\n                currentFromColumn = -1;\n              } // Remove from the stack the last added selection as that selection below will be\n              // replaced by new transformed selection.\n\n\n              selection.getSelectedRange().pop(); // I can't use transforms as they don't work in negative indexes.\n\n              selection.setRangeStartOnly(new CellCoords(currentFromRow + delta, currentFromColumn), true);\n              selection.setRangeEnd(new CellCoords(currentToRow + delta, currentToColumn)); // will call render() internally\n            } else {\n              instance._refreshBorders(); // it will call render and prepare methods\n\n            }\n          }\n\n          break;\n\n        case 'insert_col':\n          delta = datamap.createCol(index, amount, source);\n\n          if (delta) {\n            metaManager.createColumn(instance.toPhysicalColumn(index), amount);\n\n            if (Array.isArray(tableMeta.colHeaders)) {\n              var spliceArray = [index, 0];\n              spliceArray.length += delta; // inserts empty (undefined) elements at the end of an array\n\n              Array.prototype.splice.apply(tableMeta.colHeaders, spliceArray); // inserts empty (undefined) elements into the colHeader array\n            }\n\n            var _currentSelectedRange2 = selection.selectedRange.current();\n\n            var _currentFromRange = _currentSelectedRange2 === null || _currentSelectedRange2 === void 0 ? void 0 : _currentSelectedRange2.from;\n\n            var _currentFromColumn = _currentFromRange === null || _currentFromRange === void 0 ? void 0 : _currentFromRange.col; // Moving right the selection (when it exist). It should be present on the \"old\" row.\n            // TODO: The logic here should be handled by selection module.\n\n\n            if (isDefined(_currentFromColumn) && _currentFromColumn >= index) {\n              var _currentSelectedRange3 = _currentSelectedRange2.to,\n                  _currentToRow = _currentSelectedRange3.row,\n                  _currentToColumn = _currentSelectedRange3.col;\n              var _currentFromRow = _currentFromRange.row; // Workaround: headers are not stored inside selection.\n\n              if (selection.isSelectedByColumnHeader()) {\n                _currentFromRow = -1;\n              } // Remove from the stack the last added selection as that selection below will be\n              // replaced by new transformed selection.\n\n\n              selection.getSelectedRange().pop(); // I can't use transforms as they don't work in negative indexes.\n\n              selection.setRangeStartOnly(new CellCoords(_currentFromRow, _currentFromColumn + delta), true);\n              selection.setRangeEnd(new CellCoords(_currentToRow, _currentToColumn + delta)); // will call render() internally\n            } else {\n              instance._refreshBorders(); // it will call render and prepare methods\n\n            }\n          }\n\n          break;\n\n        case 'remove_row':\n          var removeRow = function removeRow(indexes) {\n            var offset = 0; // Normalize the {index, amount} groups into bigger groups.\n\n            arrayEach(indexes, function (_ref8) {\n              var _ref9 = _slicedToArray(_ref8, 2),\n                  groupIndex = _ref9[0],\n                  groupAmount = _ref9[1];\n\n              var calcIndex = isEmpty(groupIndex) ? instance.countRows() - 1 : Math.max(groupIndex - offset, 0); // If the 'index' is an integer decrease it by 'offset' otherwise pass it through to make the value\n              // compatible with datamap.removeCol method.\n\n              if (Number.isInteger(groupIndex)) {\n                // eslint-disable-next-line no-param-reassign\n                groupIndex = Math.max(groupIndex - offset, 0);\n              } // TODO: for datamap.removeRow index should be passed as it is (with undefined and null values). If not, the logic\n              // inside the datamap.removeRow breaks the removing functionality.\n\n\n              var wasRemoved = datamap.removeRow(groupIndex, groupAmount, source);\n\n              if (!wasRemoved) {\n                return;\n              }\n\n              metaManager.removeRow(instance.toPhysicalRow(calcIndex), groupAmount);\n              var totalRows = instance.countRows();\n              var fixedRowsTop = tableMeta.fixedRowsTop;\n\n              if (fixedRowsTop >= calcIndex + 1) {\n                tableMeta.fixedRowsTop -= Math.min(groupAmount, fixedRowsTop - calcIndex);\n              }\n\n              var fixedRowsBottom = tableMeta.fixedRowsBottom;\n\n              if (fixedRowsBottom && calcIndex >= totalRows - fixedRowsBottom) {\n                tableMeta.fixedRowsBottom -= Math.min(groupAmount, fixedRowsBottom);\n              }\n\n              offset += groupAmount;\n            });\n          };\n\n          if (Array.isArray(index)) {\n            removeRow(normalizeIndexesGroup(index));\n          } else {\n            removeRow([[index, amount]]);\n          }\n\n          grid.adjustRowsAndCols();\n\n          instance._refreshBorders(); // it will call render and prepare methods\n\n\n          break;\n\n        case 'remove_col':\n          var removeCol = function removeCol(indexes) {\n            var offset = 0; // Normalize the {index, amount} groups into bigger groups.\n\n            arrayEach(indexes, function (_ref10) {\n              var _ref11 = _slicedToArray(_ref10, 2),\n                  groupIndex = _ref11[0],\n                  groupAmount = _ref11[1];\n\n              var calcIndex = isEmpty(groupIndex) ? instance.countCols() - 1 : Math.max(groupIndex - offset, 0);\n              var physicalColumnIndex = instance.toPhysicalColumn(calcIndex); // If the 'index' is an integer decrease it by 'offset' otherwise pass it through to make the value\n              // compatible with datamap.removeCol method.\n\n              if (Number.isInteger(groupIndex)) {\n                // eslint-disable-next-line no-param-reassign\n                groupIndex = Math.max(groupIndex - offset, 0);\n              } // TODO: for datamap.removeCol index should be passed as it is (with undefined and null values). If not, the logic\n              // inside the datamap.removeCol breaks the removing functionality.\n\n\n              var wasRemoved = datamap.removeCol(groupIndex, groupAmount, source);\n\n              if (!wasRemoved) {\n                return;\n              }\n\n              metaManager.removeColumn(physicalColumnIndex, groupAmount);\n              var fixedColumnsLeft = tableMeta.fixedColumnsLeft;\n\n              if (fixedColumnsLeft >= calcIndex + 1) {\n                tableMeta.fixedColumnsLeft -= Math.min(groupAmount, fixedColumnsLeft - calcIndex);\n              }\n\n              if (Array.isArray(tableMeta.colHeaders)) {\n                if (typeof physicalColumnIndex === 'undefined') {\n                  physicalColumnIndex = -1;\n                }\n\n                tableMeta.colHeaders.splice(physicalColumnIndex, groupAmount);\n              }\n\n              offset += groupAmount;\n            });\n          };\n\n          if (Array.isArray(index)) {\n            removeCol(normalizeIndexesGroup(index));\n          } else {\n            removeCol([[index, amount]]);\n          }\n\n          grid.adjustRowsAndCols();\n\n          instance._refreshBorders(); // it will call render and prepare methods\n\n\n          break;\n\n        default:\n          throw new Error(\"There is no such action \\\"\".concat(action, \"\\\"\"));\n      }\n\n      if (!keepEmptyRows) {\n        grid.adjustRowsAndCols(); // makes sure that we did not add rows that will be removed in next refresh\n      }\n    },\n\n    /**\n     * Makes sure there are empty rows at the bottom of the table.\n     *\n     * @private\n     */\n    adjustRowsAndCols: function adjustRowsAndCols() {\n      var minRows = tableMeta.minRows;\n      var minSpareRows = tableMeta.minSpareRows;\n      var minCols = tableMeta.minCols;\n      var minSpareCols = tableMeta.minSpareCols;\n\n      if (minRows) {\n        // should I add empty rows to data source to meet minRows?\n        var nrOfRows = instance.countRows();\n\n        if (nrOfRows < minRows) {\n          // The synchronization with cell meta is not desired here. For `minRows` option,\n          // we don't want to touch/shift cell meta objects.\n          datamap.createRow(nrOfRows, minRows - nrOfRows, 'auto');\n        }\n      }\n\n      if (minSpareRows) {\n        var emptyRows = instance.countEmptyRows(true); // should I add empty rows to meet minSpareRows?\n\n        if (emptyRows < minSpareRows) {\n          var emptyRowsMissing = minSpareRows - emptyRows;\n          var rowsToCreate = Math.min(emptyRowsMissing, tableMeta.maxRows - instance.countSourceRows()); // The synchronization with cell meta is not desired here. For `minSpareRows` option,\n          // we don't want to touch/shift cell meta objects.\n\n          datamap.createRow(instance.countRows(), rowsToCreate, 'auto');\n        }\n      }\n\n      {\n        var emptyCols; // count currently empty cols\n\n        if (minCols || minSpareCols) {\n          emptyCols = instance.countEmptyCols(true);\n        }\n\n        var nrOfColumns = instance.countCols(); // should I add empty cols to meet minCols?\n\n        if (minCols && !tableMeta.columns && nrOfColumns < minCols) {\n          // The synchronization with cell meta is not desired here. For `minSpareRows` option,\n          // we don't want to touch/shift cell meta objects.\n          var colsToCreate = minCols - nrOfColumns;\n          emptyCols += colsToCreate;\n          datamap.createCol(nrOfColumns, colsToCreate, 'auto');\n        } // should I add empty cols to meet minSpareCols?\n\n\n        if (minSpareCols && !tableMeta.columns && instance.dataType === 'array' && emptyCols < minSpareCols) {\n          nrOfColumns = instance.countCols();\n          var emptyColsMissing = minSpareCols - emptyCols;\n\n          var _colsToCreate = Math.min(emptyColsMissing, tableMeta.maxCols - nrOfColumns); // The synchronization with cell meta is not desired here. For `minSpareRows` option,\n          // we don't want to touch/shift cell meta objects.\n\n\n          datamap.createCol(nrOfColumns, _colsToCreate, 'auto');\n        }\n      }\n      var rowCount = instance.countRows();\n      var colCount = instance.countCols();\n\n      if (rowCount === 0 || colCount === 0) {\n        selection.deselect();\n      }\n\n      if (selection.isSelected()) {\n        arrayEach(selection.selectedRange, function (range) {\n          var selectionChanged = false;\n          var fromRow = range.from.row;\n          var fromCol = range.from.col;\n          var toRow = range.to.row;\n          var toCol = range.to.col; // if selection is outside, move selection to last row\n\n          if (fromRow > rowCount - 1) {\n            fromRow = rowCount - 1;\n            selectionChanged = true;\n\n            if (toRow > fromRow) {\n              toRow = fromRow;\n            }\n          } else if (toRow > rowCount - 1) {\n            toRow = rowCount - 1;\n            selectionChanged = true;\n\n            if (fromRow > toRow) {\n              fromRow = toRow;\n            }\n          } // if selection is outside, move selection to last row\n\n\n          if (fromCol > colCount - 1) {\n            fromCol = colCount - 1;\n            selectionChanged = true;\n\n            if (toCol > fromCol) {\n              toCol = fromCol;\n            }\n          } else if (toCol > colCount - 1) {\n            toCol = colCount - 1;\n            selectionChanged = true;\n\n            if (fromCol > toCol) {\n              fromCol = toCol;\n            }\n          }\n\n          if (selectionChanged) {\n            instance.selectCell(fromRow, fromCol, toRow, toCol);\n          }\n        });\n      }\n\n      if (instance.view) {\n        instance.view.adjustElementsSize();\n      }\n    },\n\n    /**\n     * Populate the data from the provided 2d array from the given cell coordinates.\n     *\n     * @private\n     * @param {object} start Start selection position. Visual indexes.\n     * @param {Array} input 2d data array.\n     * @param {object} [end] End selection position (only for drag-down mode). Visual indexes.\n     * @param {string} [source=\"populateFromArray\"] Source information string.\n     * @param {string} [method=\"overwrite\"] Populate method. Possible options: `shift_down`, `shift_right`, `overwrite`.\n     * @param {string} direction (left|right|up|down) String specifying the direction.\n     * @param {Array} deltas The deltas array. A difference between values of adjacent cells.\n     *                       Useful **only** when the type of handled cells is `numeric`.\n     * @returns {object|undefined} Ending td in pasted area (only if any cell was changed).\n     */\n    populateFromArray: function populateFromArray(start, input, end, source, method, direction, deltas) {\n      // TODO: either remove or implement the `direction` argument. Currently it's not working at all.\n      var r;\n      var rlen;\n      var c;\n      var clen;\n      var setData = [];\n      var current = {};\n      var newDataByColumns = [];\n      var startRow = start.row;\n      var startColumn = start.col;\n      rlen = input.length;\n\n      if (rlen === 0) {\n        return false;\n      }\n\n      var columnsPopulationEnd = 0;\n      var rowsPopulationEnd = 0;\n\n      if (isObject(end)) {\n        columnsPopulationEnd = end.col - startColumn + 1;\n        rowsPopulationEnd = end.row - startRow + 1;\n      } // insert data with specified pasteMode method\n\n\n      switch (method) {\n        case 'shift_down':\n          // translate data from a list of rows to a list of columns\n          var populatedDataByColumns = pivot(input);\n          var numberOfDataColumns = populatedDataByColumns.length; // method's argument can extend the range of data population (data would be repeated)\n\n          var numberOfColumnsToPopulate = Math.max(numberOfDataColumns, columnsPopulationEnd);\n          var pushedDownDataByRows = instance.getData().slice(startRow); // translate data from a list of rows to a list of columns\n\n          var pushedDownDataByColumns = pivot(pushedDownDataByRows).slice(startColumn, startColumn + numberOfColumnsToPopulate);\n\n          for (c = 0; c < numberOfColumnsToPopulate; c += 1) {\n            if (c < numberOfDataColumns) {\n              for (r = 0, rlen = populatedDataByColumns[c].length; r < rowsPopulationEnd - rlen; r += 1) {\n                // repeating data for rows\n                populatedDataByColumns[c].push(populatedDataByColumns[c][r % rlen]);\n              }\n\n              if (c < pushedDownDataByColumns.length) {\n                newDataByColumns.push(populatedDataByColumns[c].concat(pushedDownDataByColumns[c]));\n              } else {\n                // if before data population, there was no data in the column\n                // we fill the required rows' newly-created cells with `null` values\n                newDataByColumns.push(populatedDataByColumns[c].concat(new Array(pushedDownDataByRows.length).fill(null)));\n              }\n            } else {\n              // Repeating data for columns.\n              newDataByColumns.push(populatedDataByColumns[c % numberOfDataColumns].concat(pushedDownDataByColumns[c]));\n            }\n          }\n\n          instance.populateFromArray(startRow, startColumn, pivot(newDataByColumns));\n          break;\n\n        case 'shift_right':\n          var numberOfDataRows = input.length; // method's argument can extend the range of data population (data would be repeated)\n\n          var numberOfRowsToPopulate = Math.max(numberOfDataRows, rowsPopulationEnd);\n          var pushedRightDataByRows = instance.getData().slice(startRow).map(function (rowData) {\n            return rowData.slice(startColumn);\n          });\n\n          for (r = 0; r < numberOfRowsToPopulate; r += 1) {\n            if (r < numberOfDataRows) {\n              for (c = 0, clen = input[r].length; c < columnsPopulationEnd - clen; c += 1) {\n                // repeating data for rows\n                input[r].push(input[r][c % clen]);\n              }\n\n              if (r < pushedRightDataByRows.length) {\n                for (var i = 0; i < pushedRightDataByRows[r].length; i += 1) {\n                  input[r].push(pushedRightDataByRows[r][i]);\n                }\n              } else {\n                var _input$r;\n\n                // if before data population, there was no data in the row\n                // we fill the required columns' newly-created cells with `null` values\n                (_input$r = input[r]).push.apply(_input$r, _toConsumableArray(new Array(pushedRightDataByRows[0].length).fill(null)));\n              }\n            } else {\n              // Repeating data for columns.\n              input.push(input[r % rlen].slice(0, numberOfRowsToPopulate).concat(pushedRightDataByRows[r]));\n            }\n          }\n\n          instance.populateFromArray(startRow, startColumn, input);\n          break;\n\n        case 'overwrite':\n        default:\n          // overwrite and other not specified options\n          current.row = start.row;\n          current.col = start.col;\n          var selected = {\n            // selected range\n            row: end && start ? end.row - start.row + 1 : 1,\n            col: end && start ? end.col - start.col + 1 : 1\n          };\n          var skippedRow = 0;\n          var skippedColumn = 0;\n          var pushData = true;\n          var cellMeta;\n\n          var getInputValue = function getInputValue(row) {\n            var col = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n            var rowValue = input[row % input.length];\n\n            if (col !== null) {\n              return rowValue[col % rowValue.length];\n            }\n\n            return rowValue;\n          };\n\n          var rowInputLength = input.length;\n          var rowSelectionLength = end ? end.row - start.row + 1 : 0;\n\n          if (end) {\n            rlen = rowSelectionLength;\n          } else {\n            rlen = Math.max(rowInputLength, rowSelectionLength);\n          }\n\n          for (r = 0; r < rlen; r++) {\n            if (end && current.row > end.row && rowSelectionLength > rowInputLength || !tableMeta.allowInsertRow && current.row > instance.countRows() - 1 || current.row >= tableMeta.maxRows) {\n              break;\n            }\n\n            var visualRow = r - skippedRow;\n            var colInputLength = getInputValue(visualRow).length;\n            var colSelectionLength = end ? end.col - start.col + 1 : 0;\n\n            if (end) {\n              clen = colSelectionLength;\n            } else {\n              clen = Math.max(colInputLength, colSelectionLength);\n            }\n\n            current.col = start.col;\n            cellMeta = instance.getCellMeta(current.row, current.col);\n\n            if ((source === 'CopyPaste.paste' || source === 'Autofill.fill') && cellMeta.skipRowOnPaste) {\n              skippedRow += 1;\n              current.row += 1;\n              rlen += 1;\n              /* eslint-disable no-continue */\n\n              continue;\n            }\n\n            skippedColumn = 0;\n\n            for (c = 0; c < clen; c++) {\n              if (end && current.col > end.col && colSelectionLength > colInputLength || !tableMeta.allowInsertColumn && current.col > instance.countCols() - 1 || current.col >= tableMeta.maxCols) {\n                break;\n              }\n\n              cellMeta = instance.getCellMeta(current.row, current.col);\n\n              if ((source === 'CopyPaste.paste' || source === 'Autofill.fill') && cellMeta.skipColumnOnPaste) {\n                skippedColumn += 1;\n                current.col += 1;\n                clen += 1;\n                continue;\n              }\n\n              if (cellMeta.readOnly && source !== 'UndoRedo.undo') {\n                current.col += 1;\n                /* eslint-disable no-continue */\n\n                continue;\n              }\n\n              var visualColumn = c - skippedColumn;\n              var value = getInputValue(visualRow, visualColumn);\n              var orgValue = instance.getDataAtCell(current.row, current.col);\n              var index = {\n                row: visualRow,\n                col: visualColumn\n              };\n\n              if (source === 'Autofill.fill') {\n                var result = instance.runHooks('beforeAutofillInsidePopulate', index, direction, input, deltas, {}, selected);\n\n                if (result) {\n                  value = isUndefined(result.value) ? value : result.value;\n                }\n              }\n\n              if (value !== null && _typeof(value) === 'object') {\n                // when 'value' is array and 'orgValue' is null, set 'orgValue' to\n                // an empty array so that the null value can be compared to 'value'\n                // as an empty value for the array context\n                if (Array.isArray(value) && orgValue === null) orgValue = [];\n\n                if (orgValue === null || _typeof(orgValue) !== 'object') {\n                  pushData = false;\n                } else {\n                  var orgValueSchema = duckSchema(Array.isArray(orgValue) ? orgValue : orgValue[0] || orgValue);\n                  var valueSchema = duckSchema(Array.isArray(value) ? value : value[0] || value);\n                  /* eslint-disable max-depth */\n\n                  if (isObjectEqual(orgValueSchema, valueSchema)) {\n                    value = deepClone(value);\n                  } else {\n                    pushData = false;\n                  }\n                }\n              } else if (orgValue !== null && _typeof(orgValue) === 'object') {\n                pushData = false;\n              }\n\n              if (pushData) {\n                setData.push([current.row, current.col, value]);\n              }\n\n              pushData = true;\n              current.col += 1;\n            }\n\n            current.row += 1;\n          }\n\n          instance.setDataAtCell(setData, null, null, source || 'populateFromArray');\n          break;\n      }\n    }\n  };\n  /**\n   * Internal function to set `language` key of settings.\n   *\n   * @private\n   * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n   * @fires Hooks#afterLanguageChange\n   */\n\n  function setLanguage(languageCode) {\n    var normalizedLanguageCode = normalizeLanguageCode(languageCode);\n\n    if (hasLanguageDictionary(normalizedLanguageCode)) {\n      instance.runHooks('beforeLanguageChange', normalizedLanguageCode);\n      globalMeta.language = normalizedLanguageCode;\n      instance.runHooks('afterLanguageChange', normalizedLanguageCode);\n    } else {\n      warnUserAboutLanguageRegistration(languageCode);\n    }\n  }\n  /**\n   * Internal function to set `className` or `tableClassName`, depending on the key from the settings object.\n   *\n   * @private\n   * @param {string} className `className` or `tableClassName` from the key in the settings object.\n   * @param {string|string[]} classSettings String or array of strings. Contains class name(s) from settings object.\n   */\n\n\n  function setClassName(className, classSettings) {\n    var element = className === 'className' ? instance.rootElement : instance.table;\n\n    if (firstRun) {\n      addClass(element, classSettings);\n    } else {\n      var globalMetaSettingsArray = [];\n      var settingsArray = [];\n\n      if (globalMeta[className]) {\n        globalMetaSettingsArray = Array.isArray(globalMeta[className]) ? globalMeta[className] : stringToArray(globalMeta[className]);\n      }\n\n      if (classSettings) {\n        settingsArray = Array.isArray(classSettings) ? classSettings : stringToArray(classSettings);\n      }\n\n      var classNameToRemove = getDifferenceOfArrays(globalMetaSettingsArray, settingsArray);\n      var classNameToAdd = getDifferenceOfArrays(settingsArray, globalMetaSettingsArray);\n\n      if (classNameToRemove.length) {\n        removeClass(element, classNameToRemove);\n      }\n\n      if (classNameToAdd.length) {\n        addClass(element, classNameToAdd);\n      }\n    }\n\n    globalMeta[className] = classSettings;\n  }\n\n  this.init = function () {\n    dataSource.setData(tableMeta.data);\n    instance.runHooks('beforeInit');\n\n    if (isMobileBrowser() || isIpadOS()) {\n      addClass(instance.rootElement, 'mobile');\n    }\n\n    this.updateSettings(tableMeta, true);\n    this.view = new TableView(this);\n    editorManager = EditorManager.getInstance(instance, tableMeta, selection);\n    instance.runHooks('init');\n    this.forceFullRender = true; // used when data was changed\n\n    this.view.render();\n\n    if (_typeof(firstRun) === 'object') {\n      instance.runHooks('afterChange', firstRun[0], firstRun[1]);\n      firstRun = false;\n    }\n\n    instance.runHooks('afterInit');\n  };\n  /**\n   * @ignore\n   * @returns {object}\n   */\n\n\n  function ValidatorsQueue() {\n    // moved this one level up so it can be used in any function here. Probably this should be moved to a separate file\n    var resolved = false;\n    return {\n      validatorsInQueue: 0,\n      valid: true,\n      addValidatorToQueue: function addValidatorToQueue() {\n        this.validatorsInQueue += 1;\n        resolved = false;\n      },\n      removeValidatorFormQueue: function removeValidatorFormQueue() {\n        this.validatorsInQueue = this.validatorsInQueue - 1 < 0 ? 0 : this.validatorsInQueue - 1;\n        this.checkIfQueueIsEmpty();\n      },\n      onQueueEmpty: function onQueueEmpty() {},\n      checkIfQueueIsEmpty: function checkIfQueueIsEmpty() {\n        if (this.validatorsInQueue === 0 && resolved === false) {\n          resolved = true;\n          this.onQueueEmpty(this.valid);\n        }\n      }\n    };\n  }\n  /**\n   * Get parsed number from numeric string.\n   *\n   * @private\n   * @param {string} numericData Float (separated by a dot or a comma) or integer.\n   * @returns {number} Number if we get data in parsable format, not changed value otherwise.\n   */\n\n\n  function getParsedNumber(numericData) {\n    // Unifying \"float like\" string. Change from value with comma determiner to value with dot determiner,\n    // for example from `450,65` to `450.65`.\n    var unifiedNumericData = numericData.replace(',', '.');\n\n    if (isNaN(parseFloat(unifiedNumericData)) === false) {\n      return parseFloat(unifiedNumericData);\n    }\n\n    return numericData;\n  }\n  /**\n   * @ignore\n   * @param {Array} changes The 2D array containing information about each of the edited cells.\n   * @param {string} source The string that identifies source of validation.\n   * @param {Function} callback The callback function fot async validation.\n   */\n\n\n  function validateChanges(changes, source, callback) {\n    if (!changes.length) {\n      return;\n    }\n\n    var activeEditor = instance.getActiveEditor();\n    var beforeChangeResult = instance.runHooks('beforeChange', changes, source || 'edit');\n    var shouldBeCanceled = true;\n\n    if (beforeChangeResult === false) {\n      if (activeEditor) {\n        activeEditor.cancelChanges();\n      }\n\n      return;\n    }\n\n    var waitingForValidator = new ValidatorsQueue();\n\n    waitingForValidator.onQueueEmpty = function (isValid) {\n      if (activeEditor && shouldBeCanceled) {\n        activeEditor.cancelChanges();\n      }\n\n      callback(isValid); // called when async validators are resolved and beforeChange was not async\n    };\n\n    for (var i = changes.length - 1; i >= 0; i--) {\n      if (changes[i] === null) {\n        changes.splice(i, 1);\n      } else {\n        var _changes$i = _slicedToArray(changes[i], 4),\n            row = _changes$i[0],\n            prop = _changes$i[1],\n            newValue = _changes$i[3];\n\n        var col = datamap.propToCol(prop);\n        var cellProperties = instance.getCellMeta(row, col);\n\n        if (cellProperties.type === 'numeric' && typeof newValue === 'string' && isNumericLike(newValue)) {\n          changes[i][3] = getParsedNumber(newValue);\n        }\n        /* eslint-disable no-loop-func */\n\n\n        if (instance.getCellValidator(cellProperties)) {\n          waitingForValidator.addValidatorToQueue();\n          instance.validateCell(changes[i][3], cellProperties, function (index, cellPropertiesReference) {\n            return function (result) {\n              if (typeof result !== 'boolean') {\n                throw new Error('Validation error: result is not boolean');\n              }\n\n              if (result === false && cellPropertiesReference.allowInvalid === false) {\n                shouldBeCanceled = false;\n                changes.splice(index, 1); // cancel the change\n\n                cellPropertiesReference.valid = true; // we cancelled the change, so cell value is still valid\n\n                var cell = instance.getCell(cellPropertiesReference.visualRow, cellPropertiesReference.visualCol);\n\n                if (cell !== null) {\n                  removeClass(cell, tableMeta.invalidCellClassName);\n                } // index -= 1;\n\n              }\n\n              waitingForValidator.removeValidatorFormQueue();\n            };\n          }(i, cellProperties), source);\n        }\n      }\n    }\n\n    waitingForValidator.checkIfQueueIsEmpty();\n  }\n  /**\n   * Internal function to apply changes. Called after validateChanges.\n   *\n   * @private\n   * @param {Array} changes Array in form of [row, prop, oldValue, newValue].\n   * @param {string} source String that identifies how this change will be described in changes array (useful in onChange callback).\n   * @fires Hooks#beforeChangeRender\n   * @fires Hooks#afterChange\n   */\n\n\n  function applyChanges(changes, source) {\n    var i = changes.length - 1;\n\n    if (i < 0) {\n      return;\n    }\n\n    for (; i >= 0; i--) {\n      var skipThisChange = false;\n\n      if (changes[i] === null) {\n        changes.splice(i, 1);\n        /* eslint-disable no-continue */\n\n        continue;\n      }\n\n      if ((changes[i][2] === null || changes[i][2] === void 0) && (changes[i][3] === null || changes[i][3] === void 0)) {\n        /* eslint-disable no-continue */\n        continue;\n      }\n\n      if (tableMeta.allowInsertRow) {\n        while (changes[i][0] > instance.countRows() - 1) {\n          var numberOfCreatedRows = datamap.createRow(void 0, void 0, source);\n\n          if (numberOfCreatedRows >= 1) {\n            metaManager.createRow(null, numberOfCreatedRows);\n          } else {\n            skipThisChange = true;\n            break;\n          }\n        }\n      }\n\n      if (instance.dataType === 'array' && (!tableMeta.columns || tableMeta.columns.length === 0) && tableMeta.allowInsertColumn) {\n        while (datamap.propToCol(changes[i][1]) > instance.countCols() - 1) {\n          var numberOfCreatedColumns = datamap.createCol(void 0, void 0, source);\n\n          if (numberOfCreatedColumns >= 1) {\n            metaManager.createColumn(null, numberOfCreatedColumns);\n          } else {\n            skipThisChange = true;\n            break;\n          }\n        }\n      }\n\n      if (skipThisChange) {\n        /* eslint-disable no-continue */\n        continue;\n      }\n\n      datamap.set(changes[i][0], changes[i][1], changes[i][3]);\n    }\n\n    instance.forceFullRender = true; // used when data was changed\n\n    grid.adjustRowsAndCols();\n    instance.runHooks('beforeChangeRender', changes, source);\n    editorManager.lockEditor();\n\n    instance._refreshBorders(null);\n\n    editorManager.unlockEditor();\n    instance.view.adjustElementsSize();\n    instance.runHooks('afterChange', changes, source || 'edit');\n    var activeEditor = instance.getActiveEditor();\n\n    if (activeEditor && isDefined(activeEditor.refreshValue)) {\n      activeEditor.refreshValue();\n    }\n  }\n  /**\n   * Validate a single cell.\n   *\n   * @memberof Core#\n   * @function validateCell\n   * @param {string|number} value The value to validate.\n   * @param {object} cellProperties The cell meta which corresponds with the value.\n   * @param {Function} callback The callback function.\n   * @param {string} source The string that identifies source of the validation.\n   */\n\n\n  this.validateCell = function (value, cellProperties, callback, source) {\n    var validator = instance.getCellValidator(cellProperties); // the `canBeValidated = false` argument suggests, that the cell passes validation by default.\n\n    /**\n     * @private\n     * @function done\n     * @param {boolean} valid Indicates if the validation was successful.\n     * @param {boolean} [canBeValidated=true] Flag which controls the validation process.\n     */\n\n    function done(valid) {\n      var canBeValidated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      // Fixes GH#3903\n      if (!canBeValidated || cellProperties.hidden === true) {\n        callback(valid);\n        return;\n      }\n\n      var col = cellProperties.visualCol;\n      var row = cellProperties.visualRow;\n      var td = instance.getCell(row, col, true);\n\n      if (td && td.nodeName !== 'TH') {\n        var renderableRow = instance.rowIndexMapper.getRenderableFromVisualIndex(row);\n        var renderableColumn = instance.columnIndexMapper.getRenderableFromVisualIndex(col);\n        instance.view.wt.wtSettings.settings.cellRenderer(renderableRow, renderableColumn, td);\n      }\n\n      callback(valid);\n    }\n\n    if (isRegExp(validator)) {\n      validator = function (expression) {\n        return function (cellValue, validatorCallback) {\n          validatorCallback(expression.test(cellValue));\n        };\n      }(validator);\n    }\n\n    if (isFunction(validator)) {\n      // eslint-disable-next-line no-param-reassign\n      value = instance.runHooks('beforeValidate', value, cellProperties.visualRow, cellProperties.prop, source); // To provide consistent behaviour, validation should be always asynchronous\n\n      instance._registerImmediate(function () {\n        validator.call(cellProperties, value, function (valid) {\n          if (!instance) {\n            return;\n          } // eslint-disable-next-line no-param-reassign\n\n\n          valid = instance.runHooks('afterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source);\n          cellProperties.valid = valid;\n          done(valid);\n          instance.runHooks('postAfterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source);\n        });\n      });\n    } else {\n      // resolve callback even if validator function was not found\n      instance._registerImmediate(function () {\n        cellProperties.valid = true;\n        done(cellProperties.valid, false);\n      });\n    }\n  };\n  /**\n   * @ignore\n   * @param {number} row The visual row index.\n   * @param {string|number} propOrCol The visual prop or column index.\n   * @param {*} value The cell value.\n   * @returns {Array}\n   */\n\n\n  function setDataInputToArray(row, propOrCol, value) {\n    if (Array.isArray(row)) {\n      // it's an array of changes\n      return row;\n    }\n\n    return [[row, propOrCol, value]];\n  }\n  /**\n   * @description\n   * Set new value to a cell. To change many cells at once (recommended way), pass an array of `changes` in format\n   * `[[row, col, value],...]` as the first argument.\n   *\n   * @memberof Core#\n   * @function setDataAtCell\n   * @param {number|Array} row Visual row index or array of changes in format `[[row, col, value],...]`.\n   * @param {number} [column] Visual column index.\n   * @param {string} [value] New value.\n   * @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange callback). Set to 'edit' if left empty.\n   */\n\n\n  this.setDataAtCell = function (row, column, value, source) {\n    var input = setDataInputToArray(row, column, value);\n    var changes = [];\n    var changeSource = source;\n    var i;\n    var ilen;\n    var prop;\n\n    for (i = 0, ilen = input.length; i < ilen; i++) {\n      if (_typeof(input[i]) !== 'object') {\n        throw new Error('Method `setDataAtCell` accepts row number or changes array of arrays as its first parameter');\n      }\n\n      if (typeof input[i][1] !== 'number') {\n        throw new Error('Method `setDataAtCell` accepts row and column number as its parameters. If you want to use object property name, use method `setDataAtRowProp`'); // eslint-disable-line max-len\n      }\n\n      if (input[i][1] >= this.countCols()) {\n        prop = input[i][1];\n      } else {\n        prop = datamap.colToProp(input[i][1]);\n      }\n\n      changes.push([input[i][0], prop, dataSource.getAtCell(this.toPhysicalRow(input[i][0]), input[i][1]), input[i][2]]);\n    }\n\n    if (!changeSource && _typeof(row) === 'object') {\n      changeSource = column;\n    }\n\n    instance.runHooks('afterSetDataAtCell', changes, changeSource);\n    validateChanges(changes, changeSource, function () {\n      applyChanges(changes, changeSource);\n    });\n  };\n  /**\n   * @description\n   * Set new value to a cell. To change many cells at once (recommended way), pass an array of `changes` in format\n   * `[[row, prop, value],...]` as the first argument.\n   *\n   * @memberof Core#\n   * @function setDataAtRowProp\n   * @param {number|Array} row Visual row index or array of changes in format `[[row, prop, value], ...]`.\n   * @param {string} prop Property name or the source string (e.g. `'first.name'` or `'0'`).\n   * @param {string} value Value to be set.\n   * @param {string} [source] String that identifies how this change will be described in changes array (useful in onChange callback).\n   */\n\n\n  this.setDataAtRowProp = function (row, prop, value, source) {\n    var input = setDataInputToArray(row, prop, value);\n    var changes = [];\n    var changeSource = source;\n    var i;\n    var ilen;\n\n    for (i = 0, ilen = input.length; i < ilen; i++) {\n      changes.push([input[i][0], input[i][1], dataSource.getAtCell(this.toPhysicalRow(input[i][0]), input[i][1]), input[i][2]]);\n    }\n\n    if (!changeSource && _typeof(row) === 'object') {\n      changeSource = prop;\n    }\n\n    instance.runHooks('afterSetDataAtRowProp', changes, changeSource);\n    validateChanges(changes, changeSource, function () {\n      applyChanges(changes, changeSource);\n    });\n  };\n  /**\n   * Listen to the keyboard input on document body. This allows Handsontable to capture keyboard events and respond\n   * in the right way.\n   *\n   * @memberof Core#\n   * @function listen\n   * @fires Hooks#afterListen\n   */\n\n\n  this.listen = function () {\n    if (instance && !instance.isListening()) {\n      activeGuid = instance.guid;\n      instance.runHooks('afterListen');\n    }\n  };\n  /**\n   * Stop listening to keyboard input on the document body. Calling this method makes the Handsontable inactive for\n   * any keyboard events.\n   *\n   * @memberof Core#\n   * @function unlisten\n   */\n\n\n  this.unlisten = function () {\n    if (this.isListening()) {\n      activeGuid = null;\n      instance.runHooks('afterUnlisten');\n    }\n  };\n  /**\n   * Returns `true` if the current Handsontable instance is listening to keyboard input on document body.\n   *\n   * @memberof Core#\n   * @function isListening\n   * @returns {boolean} `true` if the instance is listening, `false` otherwise.\n   */\n\n\n  this.isListening = function () {\n    return activeGuid === instance.guid;\n  };\n  /**\n   * Destroys the current editor, render the table and prepares the editor of the newly selected cell.\n   *\n   * @memberof Core#\n   * @function destroyEditor\n   * @param {boolean} [revertOriginal=false] If `true`, the previous value will be restored. Otherwise, the edited value will be saved.\n   * @param {boolean} [prepareEditorIfNeeded=true] If `true` the editor under the selected cell will be prepared to open.\n   */\n\n\n  this.destroyEditor = function () {\n    var revertOriginal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var prepareEditorIfNeeded = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    instance._refreshBorders(revertOriginal, prepareEditorIfNeeded);\n  };\n  /**\n   * Populate cells at position with 2D input array (e.g. `[[1, 2], [3, 4]]`). Use `endRow`, `endCol` when you\n   * want to cut input when a certain row is reached.\n   *\n   * Optional `method` argument has the same effect as pasteMode option (see {@link Options#pasteMode}).\n   *\n   * @memberof Core#\n   * @function populateFromArray\n   * @param {number} row Start visual row index.\n   * @param {number} column Start visual column index.\n   * @param {Array} input 2d array.\n   * @param {number} [endRow] End visual row index (use when you want to cut input when certain row is reached).\n   * @param {number} [endCol] End visual column index (use when you want to cut input when certain column is reached).\n   * @param {string} [source=populateFromArray] Used to identify this call in the resulting events (beforeChange, afterChange).\n   * @param {string} [method=overwrite] Populate method, possible values: `'shift_down'`, `'shift_right'`, `'overwrite'`.\n   * @param {string} direction Populate direction, possible values: `'left'`, `'right'`, `'up'`, `'down'`.\n   * @param {Array} deltas The deltas array. A difference between values of adjacent cells.\n   *                       Useful **only** when the type of handled cells is `numeric`.\n   * @returns {object|undefined} Ending td in pasted area (only if any cell was changed).\n   */\n\n\n  this.populateFromArray = function (row, column, input, endRow, endCol, source, method, direction, deltas) {\n    if (!(_typeof(input) === 'object' && _typeof(input[0]) === 'object')) {\n      throw new Error('populateFromArray parameter `input` must be an array of arrays'); // API changed in 0.9-beta2, let's check if you use it correctly\n    }\n\n    var c = typeof endRow === 'number' ? new CellCoords(endRow, endCol) : null;\n    return grid.populateFromArray(new CellCoords(row, column), input, c, source, method, direction, deltas);\n  };\n  /**\n   * Adds/removes data from the column. This method works the same as Array.splice for arrays.\n   *\n   * @memberof Core#\n   * @function spliceCol\n   * @param {number} column Index of the column in which do you want to do splice.\n   * @param {number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n   * @param {number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n   * @param {...number} [elements] The elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array.\n   * @returns {Array} Returns removed portion of columns.\n   */\n\n\n  this.spliceCol = function (column, index, amount) {\n    var _datamap;\n\n    for (var _len = arguments.length, elements = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n      elements[_key - 3] = arguments[_key];\n    }\n\n    return (_datamap = datamap).spliceCol.apply(_datamap, [column, index, amount].concat(elements));\n  };\n  /**\n   * Adds/removes data from the row. This method works the same as Array.splice for arrays.\n   *\n   * @memberof Core#\n   * @function spliceRow\n   * @param {number} row Index of column in which do you want to do splice.\n   * @param {number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n   * @param {number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n   * @param {...number} [elements] The elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array.\n   * @returns {Array} Returns removed portion of rows.\n   */\n\n\n  this.spliceRow = function (row, index, amount) {\n    var _datamap2;\n\n    for (var _len2 = arguments.length, elements = new Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {\n      elements[_key2 - 3] = arguments[_key2];\n    }\n\n    return (_datamap2 = datamap).spliceRow.apply(_datamap2, [row, index, amount].concat(elements));\n  };\n  /**\n   * Returns indexes of the currently selected cells as an array of arrays `[[startRow, startCol, endRow, endCol],...]`.\n   *\n   * Start row and start column are the coordinates of the active cell (where the selection was started).\n   *\n   * The version 0.36.0 adds a non-consecutive selection feature. Since this version, the method returns an array of arrays.\n   * Additionally to collect the coordinates of the currently selected area (as it was previously done by the method)\n   * you need to use `getSelectedLast` method.\n   *\n   * @memberof Core#\n   * @function getSelected\n   * @returns {Array[]|undefined} An array of arrays of the selection's coordinates.\n   */\n\n\n  this.getSelected = function () {\n    // https://github.com/handsontable/handsontable/issues/44  //cjl\n    if (selection.isSelected()) {\n      return arrayMap(selection.getSelectedRange(), function (_ref12) {\n        var from = _ref12.from,\n            to = _ref12.to;\n        return [from.row, from.col, to.row, to.col];\n      });\n    }\n  };\n  /**\n   * Returns the last coordinates applied to the table as a an array `[startRow, startCol, endRow, endCol]`.\n   *\n   * @since 0.36.0\n   * @memberof Core#\n   * @function getSelectedLast\n   * @returns {Array|undefined} An array of the selection's coordinates.\n   */\n\n\n  this.getSelectedLast = function () {\n    var selected = this.getSelected();\n    var result;\n\n    if (selected && selected.length > 0) {\n      result = selected[selected.length - 1];\n    }\n\n    return result;\n  };\n  /**\n   * Returns the current selection as an array of CellRange objects.\n   *\n   * The version 0.36.0 adds a non-consecutive selection feature. Since this version, the method returns an array of arrays.\n   * Additionally to collect the coordinates of the currently selected area (as it was previously done by the method)\n   * you need to use `getSelectedRangeLast` method.\n   *\n   * @memberof Core#\n   * @function getSelectedRange\n   * @returns {CellRange[]|undefined} Selected range object or undefined if there is no selection.\n   */\n\n\n  this.getSelectedRange = function () {\n    // https://github.com/handsontable/handsontable/issues/44  //cjl\n    if (selection.isSelected()) {\n      return Array.from(selection.getSelectedRange());\n    }\n  };\n  /**\n   * Returns the last coordinates applied to the table as a CellRange object.\n   *\n   * @memberof Core#\n   * @function getSelectedRangeLast\n   * @since 0.36.0\n   * @returns {CellRange|undefined} Selected range object or undefined` if there is no selection.\n   */\n\n\n  this.getSelectedRangeLast = function () {\n    var selectedRange = this.getSelectedRange();\n    var result;\n\n    if (selectedRange && selectedRange.length > 0) {\n      result = selectedRange[selectedRange.length - 1];\n    }\n\n    return result;\n  };\n  /**\n   * Erases content from cells that have been selected in the table.\n   *\n   * @memberof Core#\n   * @function emptySelectedCells\n   * @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange callback). Set to 'edit' if left empty.\n   * @since 0.36.0\n   */\n\n\n  this.emptySelectedCells = function (source) {\n    var _this2 = this;\n\n    if (!selection.isSelected() || this.countRows() === 0 || this.countCols() === 0) {\n      return;\n    }\n\n    var changes = [];\n    arrayEach(selection.getSelectedRange(), function (cellRange) {\n      var topLeft = cellRange.getTopLeftCorner();\n      var bottomRight = cellRange.getBottomRightCorner();\n      rangeEach(topLeft.row, bottomRight.row, function (row) {\n        rangeEach(topLeft.col, bottomRight.col, function (column) {\n          if (!_this2.getCellMeta(row, column).readOnly) {\n            changes.push([row, column, null]);\n          }\n        });\n      });\n    });\n\n    if (changes.length > 0) {\n      this.setDataAtCell(changes, source);\n    }\n  };\n  /**\n   * Checks if the table rendering process was suspended. See explanation in {@link Core#suspendRender}.\n   *\n   * @memberof Core#\n   * @function isRenderSuspended\n   * @since 8.3.0\n   * @returns {boolean}\n   */\n\n\n  this.isRenderSuspended = function () {\n    return this.renderSuspendedCounter > 0;\n  };\n  /**\n   * Suspends the rendering process. It's helpful to wrap the table render\n   * cycles triggered by API calls or UI actions (or both) and call the \"render\"\n   * once in the end. As a result, it improves the performance of wrapped operations.\n   * When the table is in the suspend state, most operations will have no visual\n   * effect until the rendering state is resumed. Resuming the state automatically\n   * invokes the table rendering. To make sure that after executing all operations,\n   * the table will be rendered, it's highly recommended to use the {@link Core#batchRender}\n   * method or {@link Core#batch}, which additionally aggregates the logic execution\n   * that happens behind the table.\n   *\n   * The method is intended to be used by advanced users. Suspending the rendering\n   * process could cause visual glitches when wrongly implemented.\n   *\n   * @memberof Core#\n   * @function suspendRender\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.suspendRender();\n   * hot.alter('insert_row', 5, 45);\n   * hot.alter('insert_col', 10, 40);\n   * hot.setDataAtCell(1, 1, 'John');\n   * hot.setDataAtCell(2, 2, 'Mark');\n   * hot.setDataAtCell(3, 3, 'Ann');\n   * hot.setDataAtCell(4, 4, 'Sophia');\n   * hot.setDataAtCell(5, 5, 'Mia');\n   * hot.selectCell(0, 0);\n   * hot.resumeRender(); // It re-renders the table internally\n   * ```\n   */\n\n\n  this.suspendRender = function () {\n    this.renderSuspendedCounter += 1;\n  };\n  /**\n   * Resumes the rendering process. In combination with the {@link Core#suspendRender}\n   * method it allows aggregating the table render cycles triggered by API calls or UI\n   * actions (or both) and calls the \"render\" once in the end. When the table is in\n   * the suspend state, most operations will have no visual effect until the rendering\n   * state is resumed. Resuming the state automatically invokes the table rendering.\n   *\n   * The method is intended to be used by advanced users. Suspending the rendering\n   * process could cause visual glitches when wrongly implemented.\n   *\n   * @memberof Core#\n   * @function resumeRender\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.suspendRender();\n   * hot.alter('insert_row', 5, 45);\n   * hot.alter('insert_col', 10, 40);\n   * hot.setDataAtCell(1, 1, 'John');\n   * hot.setDataAtCell(2, 2, 'Mark');\n   * hot.setDataAtCell(3, 3, 'Ann');\n   * hot.setDataAtCell(4, 4, 'Sophia');\n   * hot.setDataAtCell(5, 5, 'Mia');\n   * hot.selectCell(0, 0);\n   * hot.resumeRender(); // It re-renders the table internally\n   * ```\n   */\n\n\n  this.resumeRender = function () {\n    var nextValue = this.renderSuspendedCounter - 1;\n    this.renderSuspendedCounter = Math.max(nextValue, 0);\n\n    if (!this.isRenderSuspended() && nextValue === this.renderSuspendedCounter) {\n      if (this.renderCall) {\n        this.render();\n      } else {\n        this._refreshBorders(null);\n      }\n    }\n  };\n  /**\n   * Rerender the table. Calling this method starts the process of recalculating, redrawing and applying the changes\n   * to the DOM. While rendering the table all cell renderers are recalled.\n   *\n   * Calling this method manually is not recommended. Handsontable tries to render itself by choosing the most\n   * optimal moments in its lifecycle.\n   *\n   * @memberof Core#\n   * @function render\n   */\n\n\n  this.render = function () {\n    if (this.view) {\n      this.renderCall = true;\n      this.forceFullRender = true; // used when data was changed\n\n      if (!this.isRenderSuspended()) {\n        editorManager.lockEditor();\n\n        this._refreshBorders(null);\n\n        editorManager.unlockEditor();\n      }\n    }\n  };\n  /**\n   * The method aggregates multi-line API calls into a callback and postpones the\n   * table rendering process. After the execution of the operations, the table is\n   * rendered once. As a result, it improves the performance of wrapped operations.\n   * Without batching, a similar case could trigger multiple table render calls.\n   *\n   * @memberof Core#\n   * @function batchRender\n   * @param {Function} wrappedOperations Batched operations wrapped in a function.\n   * @returns {*} Returns result from the wrappedOperations callback.\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.batchRender(() => {\n   *   hot.alter('insert_row', 5, 45);\n   *   hot.alter('insert_col', 10, 40);\n   *   hot.setDataAtCell(1, 1, 'John');\n   *   hot.setDataAtCell(2, 2, 'Mark');\n   *   hot.setDataAtCell(3, 3, 'Ann');\n   *   hot.setDataAtCell(4, 4, 'Sophia');\n   *   hot.setDataAtCell(5, 5, 'Mia');\n   *   hot.selectCell(0, 0);\n   *   // The table will be rendered once after executing the callback\n   * });\n   * ```\n   */\n\n\n  this.batchRender = function (wrappedOperations) {\n    this.suspendRender();\n    var result = wrappedOperations();\n    this.resumeRender();\n    return result;\n  };\n  /**\n   * Checks if the table indexes recalculation process was suspended. See explanation\n   * in {@link Core#suspendExecution}.\n   *\n   * @memberof Core#\n   * @function isExecutionSuspended\n   * @since 8.3.0\n   * @returns {boolean}\n   */\n\n\n  this.isExecutionSuspended = function () {\n    return this.executionSuspendedCounter > 0;\n  };\n  /**\n   * Suspends the execution process. It's helpful to wrap the table logic changes\n   * such as index changes into one call after which the cache is updated. As a result,\n   * it improves the performance of wrapped operations.\n   *\n   * The method is intended to be used by advanced users. Suspending the execution\n   * process could cause visual glitches caused by not updated the internal table cache.\n   *\n   * @memberof Core#\n   * @function suspendExecution\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.suspendExecution();\n   * const filters = hot.getPlugin('filters');\n   *\n   * filters.addCondition(2, 'contains', ['3']);\n   * filters.filter();\n   * hot.getPlugin('columnSorting').sort({ column: 1, sortOrder: 'desc' });\n   * hot.resumeExecution(); // It updates the cache internally\n   * ```\n   */\n\n\n  this.suspendExecution = function () {\n    this.executionSuspendedCounter += 1;\n    this.columnIndexMapper.suspendOperations();\n    this.rowIndexMapper.suspendOperations();\n  };\n  /**\n   * Resumes the execution process. In combination with the {@link Core#suspendExecution}\n   * method it allows aggregating the table logic changes after which the cache is\n   * updated. Resuming the state automatically invokes the table cache updating process.\n   *\n   * The method is intended to be used by advanced users. Suspending the execution\n   * process could cause visual glitches caused by not updated the internal table cache.\n   *\n   * @memberof Core#\n   * @function resumeExecution\n   * @param {boolean} [forceFlushChanges=false] If `true`, the table internal data cache\n   * is recalculated after the execution of the batched operations. For nested\n   * {@link Core#batchExecution} calls, it can be desire to recalculate the table\n   * after each batch.\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.suspendExecution();\n   * const filters = hot.getPlugin('filters');\n   *\n   * filters.addCondition(2, 'contains', ['3']);\n   * filters.filter();\n   * hot.getPlugin('columnSorting').sort({ column: 1, sortOrder: 'desc' });\n   * hot.resumeExecution(); // It updates the cache internally\n   * ```\n   */\n\n\n  this.resumeExecution = function () {\n    var forceFlushChanges = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var nextValue = this.executionSuspendedCounter - 1;\n    this.executionSuspendedCounter = Math.max(nextValue, 0);\n\n    if (!this.isExecutionSuspended() && nextValue === this.executionSuspendedCounter || forceFlushChanges) {\n      this.columnIndexMapper.resumeOperations();\n      this.rowIndexMapper.resumeOperations();\n    }\n  };\n  /**\n   * The method aggregates multi-line API calls into a callback and postpones the\n   * table execution process. After the execution of the operations, the internal table\n   * cache is recalculated once. As a result, it improves the performance of wrapped\n   * operations. Without batching, a similar case could trigger multiple table cache rebuilds.\n   *\n   * @memberof Core#\n   * @function batchExecution\n   * @param {Function} wrappedOperations Batched operations wrapped in a function.\n   * @param {boolean} [forceFlushChanges=false] If `true`, the table internal data cache\n   * is recalculated after the execution of the batched operations. For nested calls,\n   * it can be a desire to recalculate the table after each batch.\n   * @returns {*} Returns result from the wrappedOperations callback.\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.batchExecution(() => {\n   *   const filters = hot.getPlugin('filters');\n   *\n   *   filters.addCondition(2, 'contains', ['3']);\n   *   filters.filter();\n   *   hot.getPlugin('columnSorting').sort({ column: 1, sortOrder: 'desc' });\n   *   // The table cache will be recalculated once after executing the callback\n   * });\n   * ```\n   */\n\n\n  this.batchExecution = function (wrappedOperations) {\n    var forceFlushChanges = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    this.suspendExecution();\n    var result = wrappedOperations();\n    this.resumeExecution(forceFlushChanges);\n    return result;\n  };\n  /**\n   * It batches the rendering process and index recalculations. The method aggregates\n   * multi-line API calls into a callback and postpones the table rendering process\n   * as well aggregates the table logic changes such as index changes into one call\n   * after which the cache is updated. After the execution of the operations, the\n   * table is rendered, and the cache is updated once. As a result, it improves the\n   * performance of wrapped operations.\n   *\n   * @memberof Core#\n   * @function batch\n   * @param {Function} wrappedOperations Batched operations wrapped in a function.\n   * @returns {*} Returns result from the wrappedOperations callback.\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.batch(() => {\n   *   hot.alter('insert_row', 5, 45);\n   *   hot.alter('insert_col', 10, 40);\n   *   hot.setDataAtCell(1, 1, 'x');\n   *   hot.setDataAtCell(2, 2, 'c');\n   *   hot.setDataAtCell(3, 3, 'v');\n   *   hot.setDataAtCell(4, 4, 'b');\n   *   hot.setDataAtCell(5, 5, 'n');\n   *   hot.selectCell(0, 0);\n   *\n   *   const filters = hot.getPlugin('filters');\n   *\n   *   filters.addCondition(2, 'contains', ['3']);\n   *   filters.filter();\n   *   hot.getPlugin('columnSorting').sort({ column: 1, sortOrder: 'desc' });\n   *   // The table will be re-rendered and cache will be recalculated once after executing the callback\n   * });\n   * ```\n   */\n\n\n  this.batch = function (wrappedOperations) {\n    this.suspendRender();\n    this.suspendExecution();\n    var result = wrappedOperations();\n    this.resumeExecution();\n    this.resumeRender();\n    return result;\n  };\n  /**\n   * Updates dimensions of the table. The method compares previous dimensions with the current ones and updates accordingly.\n   *\n   * @memberof Core#\n   * @function refreshDimensions\n   * @fires Hooks#beforeRefreshDimensions\n   * @fires Hooks#afterRefreshDimensions\n   */\n\n\n  this.refreshDimensions = function () {\n    if (!instance.view) {\n      return;\n    }\n\n    var _instance$view$getLas = instance.view.getLastSize(),\n        lastWidth = _instance$view$getLas.width,\n        lastHeight = _instance$view$getLas.height;\n\n    var _instance$rootElement = instance.rootElement.getBoundingClientRect(),\n        width = _instance$rootElement.width,\n        height = _instance$rootElement.height;\n\n    var isSizeChanged = width !== lastWidth || height !== lastHeight;\n    var isResizeBlocked = instance.runHooks('beforeRefreshDimensions', {\n      width: lastWidth,\n      height: lastHeight\n    }, {\n      width: width,\n      height: height\n    }, isSizeChanged) === false;\n\n    if (isResizeBlocked) {\n      return;\n    }\n\n    if (isSizeChanged || instance.view.wt.wtOverlays.scrollableElement === instance.rootWindow) {\n      instance.view.setLastSize(width, height);\n      instance.render();\n    }\n\n    instance.runHooks('afterRefreshDimensions', {\n      width: lastWidth,\n      height: lastHeight\n    }, {\n      width: width,\n      height: height\n    }, isSizeChanged);\n  };\n  /**\n   * The `updateData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.\n   *\n   * The `updateData()` method:\n   * - Keeps cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)\n   * - Keeps rows' states (e.g. row order)\n   * - Keeps columns' states (e.g. column order)\n   *\n   * To replace Handsontable's [`data`](@/api/options.md#data) and reset states, use the [`loadData()`](#loaddata) method.\n   *\n   * Read more:\n   * - [Binding to data &#8594;](@/guides/getting-started/binding-to-data.md)\n   * - [Saving data &#8594;](@/guides/getting-started/saving-data.md)\n   *\n   * @memberof Core#\n   * @function updateData\n   * @since 11.1.0\n   * @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {string} [source] The source of the `updateData()` call\n   * @fires Hooks#beforeUpdateData\n   * @fires Hooks#afterUpdateData\n   * @fires Hooks#afterChange\n   */\n\n\n  this.updateData = function (data, source) {\n    var _this3 = this;\n\n    replaceData(data, function (newDataMap) {\n      datamap = newDataMap;\n    }, function (newDataMap) {\n      datamap = newDataMap;\n      instance.columnIndexMapper.fitToLength(_this3.getInitialColumnCount());\n      instance.rowIndexMapper.fitToLength(_this3.countSourceRows());\n      grid.adjustRowsAndCols();\n    }, {\n      hotInstance: instance,\n      dataMap: datamap,\n      dataSource: dataSource,\n      internalSource: 'updateData',\n      source: source,\n      firstRun: firstRun\n    });\n  };\n  /**\n   * The `loadData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.\n   *\n   * Additionally, the `loadData()` method:\n   * - Resets cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)\n   * - Resets rows' states (e.g. row order)\n   * - Resets columns' states (e.g. column order)\n   *\n   * To replace Handsontable's [`data`](@/api/options.md#data) without resetting states, use the [`updateData()`](#updatedata) method.\n   *\n   * Read more:\n   * - [Binding to data &#8594;](@/guides/getting-started/binding-to-data.md)\n   * - [Saving data &#8594;](@/guides/getting-started/saving-data.md)\n   *\n   * @memberof Core#\n   * @function loadData\n   * @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {string} [source] The source of the `loadData()` call\n   * @fires Hooks#beforeLoadData\n   * @fires Hooks#afterLoadData\n   * @fires Hooks#afterChange\n   */\n\n\n  this.loadData = function (data, source) {\n    replaceData(data, function (newDataMap) {\n      datamap = newDataMap;\n    }, function () {\n      metaManager.clearCellsCache();\n      instance.initIndexMappers();\n      grid.adjustRowsAndCols();\n\n      if (firstRun) {\n        firstRun = [null, 'loadData'];\n      }\n    }, {\n      hotInstance: instance,\n      dataMap: datamap,\n      dataSource: dataSource,\n      internalSource: 'loadData',\n      source: source,\n      firstRun: firstRun\n    });\n  };\n  /**\n   * Gets the initial column count, calculated based on the `columns` setting.\n   *\n   * @private\n   * @returns {number} The calculated number of columns.\n   */\n\n\n  this.getInitialColumnCount = function () {\n    var columnsSettings = tableMeta.columns;\n    var finalNrOfColumns = 0; // We will check number of columns when the `columns` property was defined as an array. Columns option may\n    // narrow down or expand displayed dataset in that case.\n\n    if (Array.isArray(columnsSettings)) {\n      finalNrOfColumns = columnsSettings.length;\n    } else if (isFunction(columnsSettings)) {\n      if (instance.dataType === 'array') {\n        var nrOfSourceColumns = this.countSourceCols();\n\n        for (var columnIndex = 0; columnIndex < nrOfSourceColumns; columnIndex += 1) {\n          if (columnsSettings(columnIndex)) {\n            finalNrOfColumns += 1;\n          }\n        } // Extended dataset by the `columns` property? Moved code right from the refactored `countCols` method.\n\n      } else if (instance.dataType === 'object' || instance.dataType === 'function') {\n        finalNrOfColumns = datamap.colToPropCache.length;\n      } // In some cases we need to check columns length from the schema, i.e. `data` may be empty.\n\n    } else if (isDefined(tableMeta.dataSchema)) {\n      var schema = datamap.getSchema(); // Schema may be defined as an array of objects. Each object will define column.\n\n      finalNrOfColumns = Array.isArray(schema) ? schema.length : deepObjectSize(schema);\n    } else {\n      // We init index mappers by length of source data to provide indexes also for skipped indexes.\n      finalNrOfColumns = this.countSourceCols();\n    }\n\n    return finalNrOfColumns;\n  };\n  /**\n   * Init index mapper which manage indexes assigned to the data.\n   *\n   * @private\n   */\n\n\n  this.initIndexMappers = function () {\n    this.columnIndexMapper.initToLength(this.getInitialColumnCount());\n    this.rowIndexMapper.initToLength(this.countSourceRows());\n  };\n  /**\n   * Returns the current data object (the same one that was passed by `data` configuration option or `loadData` method,\n   * unless some modifications have been applied (i.e. Sequence of rows/columns was changed, some row/column was skipped).\n   * If that's the case - use the {@link Core#getSourceData} method.).\n   *\n   * Optionally you can provide cell range by defining `row`, `column`, `row2`, `column2` to get only a fragment of table data.\n   *\n   * @memberof Core#\n   * @function getData\n   * @param {number} [row] From visual row index.\n   * @param {number} [column] From visual column index.\n   * @param {number} [row2] To visual row index.\n   * @param {number} [column2] To visual column index.\n   * @returns {Array[]} Array with the data.\n   * @example\n   * ```js\n   * // Get all data (in order how it is rendered in the table).\n   * hot.getData();\n   * // Get data fragment (from top-left 0, 0 to bottom-right 3, 3).\n   * hot.getData(3, 3);\n   * // Get data fragment (from top-left 2, 1 to bottom-right 3, 3).\n   * hot.getData(2, 1, 3, 3);\n   * ```\n   */\n\n\n  this.getData = function (row, column, row2, column2) {\n    if (isUndefined(row)) {\n      return datamap.getAll();\n    }\n\n    return datamap.getRange(new CellCoords(row, column), new CellCoords(row2, column2), datamap.DESTINATION_RENDERER);\n  };\n  /**\n   * Returns a string value of the selected range. Each column is separated by tab, each row is separated by a new\n   * line character.\n   *\n   * @memberof Core#\n   * @function getCopyableText\n   * @param {number} startRow From visual row index.\n   * @param {number} startCol From visual column index.\n   * @param {number} endRow To visual row index.\n   * @param {number} endCol To visual column index.\n   * @returns {string}\n   */\n\n\n  this.getCopyableText = function (startRow, startCol, endRow, endCol) {\n    return datamap.getCopyableText(new CellCoords(startRow, startCol), new CellCoords(endRow, endCol));\n  };\n  /**\n   * Returns the data's copyable value at specified `row` and `column` index.\n   *\n   * @memberof Core#\n   * @function getCopyableData\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {string}\n   */\n\n\n  this.getCopyableData = function (row, column) {\n    return datamap.getCopyable(row, datamap.colToProp(column));\n  };\n  /**\n   * Returns schema provided by constructor settings. If it doesn't exist then it returns the schema based on the data\n   * structure in the first row.\n   *\n   * @memberof Core#\n   * @function getSchema\n   * @returns {object} Schema object.\n   */\n\n\n  this.getSchema = function () {\n    return datamap.getSchema();\n  };\n  /**\n   * Use it if you need to change configuration after initialization. The `settings` argument is an object containing the new\n   * settings, declared the same way as in the initial settings object.\n   *\n   * __Note__, that although the `updateSettings` method doesn't overwrite the previously declared settings, it might reset\n   * the settings made post-initialization. (for example - ignore changes made using the columnResize feature).\n   *\n   * Since 8.0.0 passing `columns` or `data` inside `settings` objects will result in resetting states corresponding to rows and columns\n   * (for example, row/column sequence, column width, row height, frozen columns etc.).\n   *\n   * @memberof Core#\n   * @function updateSettings\n   * @param {object} settings New settings object (see {@link Options}).\n   * @param {boolean} [init=false] Internally used for in initialization mode.\n   * @example\n   * ```js\n   * hot.updateSettings({\n   *    contextMenu: true,\n   *    colHeaders: true,\n   *    fixedRowsTop: 2\n   * });\n   * ```\n   * @fires Hooks#afterCellMetaReset\n   * @fires Hooks#afterUpdateSettings\n   */\n\n\n  this.updateSettings = function (settings) {\n    var init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    // TODO: uncomment the next line with the next major version update\n    // Do not forget to re-enable the pending tests that cover the change:\n    //  * https://github.com/handsontable/handsontable/blob/9f62c282a1c951b27cd8406aa27105bd32b05bb6/handsontable/test/e2e/core/toPhysicalColumn.spec.js#L70\n    //  * https://github.com/handsontable/handsontable/blob/9f62c282a1c951b27cd8406aa27105bd32b05bb6/handsontable/test/e2e/core/toVisualColumn.spec.js#L70\n    // const dataUpdateFunction = (firstRun ? instance.loadData : instance.updateData).bind(this);\n    var dataUpdateFunction = instance.loadData.bind(this);\n    var columnsAsFunc = false;\n    var i;\n    var j;\n\n    if (isDefined(settings.rows)) {\n      throw new Error('The \"rows\" setting is no longer supported. Do you mean startRows, minRows or maxRows?');\n    }\n\n    if (isDefined(settings.cols)) {\n      throw new Error('The \"cols\" setting is no longer supported. Do you mean startCols, minCols or maxCols?');\n    }\n\n    if (isDefined(settings.ganttChart)) {\n      throw new Error('Since 8.0.0 the \"ganttChart\" setting is no longer supported.');\n    } // eslint-disable-next-line no-restricted-syntax\n\n\n    for (i in settings) {\n      if (i === 'data') {\n        /* eslint-disable-next-line no-continue */\n        continue; // loadData will be triggered later\n      } else if (i === 'language') {\n        setLanguage(settings.language);\n        /* eslint-disable-next-line no-continue */\n\n        continue;\n      } else if (i === 'className') {\n        setClassName('className', settings.className);\n      } else if (i === 'tableClassName' && instance.table) {\n        setClassName('tableClassName', settings.tableClassName);\n        instance.view.wt.wtOverlays.syncOverlayTableClassNames();\n      } else if (Hooks.getSingleton().isRegistered(i) || Hooks.getSingleton().isDeprecated(i)) {\n        if (isFunction(settings[i]) || Array.isArray(settings[i])) {\n          settings[i].initialHook = true;\n          instance.addHook(i, settings[i]);\n        }\n      } else if (!init && hasOwnProperty(settings, i)) {\n        // Update settings\n        globalMeta[i] = settings[i];\n      }\n    } // Load data or create data map\n\n\n    if (settings.data === void 0 && tableMeta.data === void 0) {\n      dataUpdateFunction(null, 'updateSettings'); // data source created just now\n    } else if (settings.data !== void 0) {\n      dataUpdateFunction(settings.data, 'updateSettings'); // data source given as option\n    } else if (settings.columns !== void 0) {\n      datamap.createMap(); // The `column` property has changed - dataset may be expanded or narrowed down. The `loadData` do the same.\n\n      instance.initIndexMappers();\n    }\n\n    var clen = instance.countCols();\n    var columnSetting = tableMeta.columns; // Init columns constructors configuration\n\n    if (columnSetting && isFunction(columnSetting)) {\n      columnsAsFunc = true;\n    } // Clear cell meta cache\n\n\n    if (settings.cell !== void 0 || settings.cells !== void 0 || settings.columns !== void 0) {\n      metaManager.clearCache();\n    }\n\n    if (clen > 0) {\n      for (i = 0, j = 0; i < clen; i++) {\n        // Use settings provided by user\n        if (columnSetting) {\n          var column = columnsAsFunc ? columnSetting(i) : columnSetting[j];\n\n          if (column) {\n            metaManager.updateColumnMeta(j, column);\n          }\n        }\n\n        j += 1;\n      }\n    }\n\n    if (isDefined(settings.cell)) {\n      objectEach(settings.cell, function (cell) {\n        instance.setCellMetaObject(cell.row, cell.col, cell);\n      });\n    }\n\n    instance.runHooks('afterCellMetaReset');\n    var currentHeight = instance.rootElement.style.height;\n\n    if (currentHeight !== '') {\n      currentHeight = parseInt(instance.rootElement.style.height, 10);\n    }\n\n    var height = settings.height;\n\n    if (isFunction(height)) {\n      height = height();\n    }\n\n    if (init) {\n      var initialStyle = instance.rootElement.getAttribute('style');\n\n      if (initialStyle) {\n        instance.rootElement.setAttribute('data-initialstyle', instance.rootElement.getAttribute('style'));\n      }\n    }\n\n    if (height === null) {\n      var _initialStyle = instance.rootElement.getAttribute('data-initialstyle');\n\n      if (_initialStyle && (_initialStyle.indexOf('height') > -1 || _initialStyle.indexOf('overflow') > -1)) {\n        instance.rootElement.setAttribute('style', _initialStyle);\n      } else {\n        instance.rootElement.style.height = '';\n        instance.rootElement.style.overflow = '';\n      }\n    } else if (height !== void 0) {\n      instance.rootElement.style.height = isNaN(height) ? \"\".concat(height) : \"\".concat(height, \"px\");\n      instance.rootElement.style.overflow = 'hidden';\n    }\n\n    if (typeof settings.width !== 'undefined') {\n      var width = settings.width;\n\n      if (isFunction(width)) {\n        width = width();\n      }\n\n      instance.rootElement.style.width = isNaN(width) ? \"\".concat(width) : \"\".concat(width, \"px\");\n    }\n\n    if (!init) {\n      if (instance.view) {\n        instance.view.wt.wtViewport.resetHasOversizedColumnHeadersMarked();\n        instance.view.wt.exportSettingsAsClassNames();\n      }\n\n      instance.runHooks('afterUpdateSettings', settings);\n    }\n\n    grid.adjustRowsAndCols();\n\n    if (instance.view && !firstRun) {\n      instance.forceFullRender = true; // used when data was changed\n\n      editorManager.lockEditor();\n\n      instance._refreshBorders(null);\n\n      instance.view.wt.wtOverlays.adjustElementsSize();\n      editorManager.unlockEditor();\n    }\n\n    if (!init && instance.view && (currentHeight === '' || height === '' || height === void 0) && currentHeight !== height) {\n      instance.view.wt.wtOverlays.updateMainScrollableElements();\n    }\n  };\n  /**\n   * Get value from the selected cell.\n   *\n   * @memberof Core#\n   * @function getValue\n   * @returns {*} Value of selected cell.\n   */\n\n\n  this.getValue = function () {\n    var sel = instance.getSelectedLast();\n\n    if (tableMeta.getValue) {\n      if (isFunction(tableMeta.getValue)) {\n        return tableMeta.getValue.call(instance);\n      } else if (sel) {\n        return instance.getData()[sel[0][0]][tableMeta.getValue];\n      }\n    } else if (sel) {\n      return instance.getDataAtCell(sel[0], sel[1]);\n    }\n  };\n  /**\n   * Returns the object settings.\n   *\n   * @memberof Core#\n   * @function getSettings\n   * @returns {object} Object containing the current table settings.\n   */\n\n\n  this.getSettings = function () {\n    return tableMeta;\n  };\n  /**\n   * Clears the data from the table (the table settings remain intact).\n   *\n   * @memberof Core#\n   * @function clear\n   */\n\n\n  this.clear = function () {\n    this.selectAll();\n    this.emptySelectedCells();\n  };\n  /**\n   * Allows altering the table structure by either inserting/removing rows or columns.\n   * This method works with an array data structure only.\n   *\n   * @memberof Core#\n   * @function alter\n   * @param {string} action Possible alter operations:\n   *  <ul>\n   *    <li> `'insert_row'` </li>\n   *    <li> `'insert_col'` </li>\n   *    <li> `'remove_row'` </li>\n   *    <li> `'remove_col'` </li>\n   * </ul>.\n   * @param {number|number[]} index Visual index of the row/column before which the new row/column will be\n   *                                inserted/removed or an array of arrays in format `[[index, amount],...]`.\n   * @param {number} [amount=1] Amount of rows/columns to be inserted or removed.\n   * @param {string} [source] Source indicator.\n   * @param {boolean} [keepEmptyRows] Flag for preventing deletion of empty rows.\n   * @example\n   * ```js\n   * // Insert new row above the row at given visual index.\n   * hot.alter('insert_row', 10);\n   * // Insert 3 new columns before 10th column.\n   * hot.alter('insert_col', 10, 3);\n   * // Remove 2 rows starting from 10th row.\n   * hot.alter('remove_row', 10, 2);\n   * // Remove 5 non-contiquous rows (it removes 3 rows from visual index 1 and 2 rows from visual index 5).\n   * hot.alter('remove_row', [[1, 3], [5, 2]]);\n   * ```\n   */\n\n\n  this.alter = function (action, index, amount, source, keepEmptyRows) {\n    grid.alter(action, index, amount, source, keepEmptyRows);\n  };\n  /**\n   * Returns a TD element for the given `row` and `column` arguments, if it is rendered on screen.\n   * Returns `null` if the TD is not rendered on screen (probably because that part of the table is not visible).\n   *\n   * @memberof Core#\n   * @function getCell\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {boolean} [topmost=false] If set to `true`, it returns the TD element from the topmost overlay. For example,\n   * if the wanted cell is in the range of fixed rows, it will return a TD element from the `top` overlay.\n   * @returns {HTMLTableCellElement|null} The cell's TD element.\n   */\n\n\n  this.getCell = function (row, column) {\n    var topmost = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    var renderableColumnIndex = column; // Handling also column headers.\n\n    var renderableRowIndex = row; // Handling also row headers.\n\n    if (column >= 0) {\n      if (this.columnIndexMapper.isHidden(this.toPhysicalColumn(column))) {\n        return null;\n      }\n\n      renderableColumnIndex = this.columnIndexMapper.getRenderableFromVisualIndex(column);\n    }\n\n    if (row >= 0) {\n      if (this.rowIndexMapper.isHidden(this.toPhysicalRow(row))) {\n        return null;\n      }\n\n      renderableRowIndex = this.rowIndexMapper.getRenderableFromVisualIndex(row);\n    }\n\n    if (renderableRowIndex === null || renderableColumnIndex === null) {\n      return null;\n    }\n\n    return instance.view.getCellAtCoords(new CellCoords(renderableRowIndex, renderableColumnIndex), topmost);\n  };\n  /**\n   * Returns the coordinates of the cell, provided as a HTML table cell element.\n   *\n   * @memberof Core#\n   * @function getCoords\n   * @param {HTMLTableCellElement} element The HTML Element representing the cell.\n   * @returns {CellCoords|null} Visual coordinates object.\n   * @example\n   * ```js\n   * hot.getCoords(hot.getCell(1, 1));\n   * // it returns CellCoords object instance with props row: 1 and col: 1.\n   * ```\n   */\n\n\n  this.getCoords = function (element) {\n    var renderableCoords = this.view.wt.wtTable.getCoords(element);\n\n    if (renderableCoords === null) {\n      return null;\n    }\n\n    var renderableRow = renderableCoords.row,\n        renderableColumn = renderableCoords.col;\n    var visualRow = renderableRow;\n    var visualColumn = renderableColumn;\n\n    if (renderableRow >= 0) {\n      visualRow = this.rowIndexMapper.getVisualFromRenderableIndex(renderableRow);\n    }\n\n    if (renderableColumn >= 0) {\n      visualColumn = this.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn);\n    }\n\n    return new CellCoords(visualRow, visualColumn);\n  };\n  /**\n   * Returns the property name that corresponds with the given column index.\n   * If the data source is an array of arrays, it returns the columns index.\n   *\n   * @memberof Core#\n   * @function colToProp\n   * @param {number} column Visual column index.\n   * @returns {string|number} Column property or physical column index.\n   */\n\n\n  this.colToProp = function (column) {\n    return datamap.colToProp(column);\n  };\n  /**\n   * Returns column index that corresponds with the given property.\n   *\n   * @memberof Core#\n   * @function propToCol\n   * @param {string|number} prop Property name or physical column index.\n   * @returns {number} Visual column index.\n   */\n\n\n  this.propToCol = function (prop) {\n    return datamap.propToCol(prop);\n  };\n  /**\n   * Translate physical row index into visual.\n   *\n   * This method is useful when you want to retrieve visual row index which can be reordered, moved or trimmed\n   * based on a physical index.\n   *\n   * @memberof Core#\n   * @function toVisualRow\n   * @param {number} row Physical row index.\n   * @returns {number} Returns visual row index.\n   */\n\n\n  this.toVisualRow = function (row) {\n    return _this.rowIndexMapper.getVisualFromPhysicalIndex(row);\n  };\n  /**\n   * Translate physical column index into visual.\n   *\n   * This method is useful when you want to retrieve visual column index which can be reordered, moved or trimmed\n   * based on a physical index.\n   *\n   * @memberof Core#\n   * @function toVisualColumn\n   * @param {number} column Physical column index.\n   * @returns {number} Returns visual column index.\n   */\n\n\n  this.toVisualColumn = function (column) {\n    return _this.columnIndexMapper.getVisualFromPhysicalIndex(column);\n  };\n  /**\n   * Translate visual row index into physical.\n   *\n   * This method is useful when you want to retrieve physical row index based on a visual index which can be\n   * reordered, moved or trimmed.\n   *\n   * @memberof Core#\n   * @function toPhysicalRow\n   * @param {number} row Visual row index.\n   * @returns {number} Returns physical row index.\n   */\n\n\n  this.toPhysicalRow = function (row) {\n    return _this.rowIndexMapper.getPhysicalFromVisualIndex(row);\n  };\n  /**\n   * Translate visual column index into physical.\n   *\n   * This method is useful when you want to retrieve physical column index based on a visual index which can be\n   * reordered, moved or trimmed.\n   *\n   * @memberof Core#\n   * @function toPhysicalColumn\n   * @param {number} column Visual column index.\n   * @returns {number} Returns physical column index.\n   */\n\n\n  this.toPhysicalColumn = function (column) {\n    return _this.columnIndexMapper.getPhysicalFromVisualIndex(column);\n  };\n  /**\n   * @description\n   * Returns the cell value at `row`, `column`.\n   *\n   * __Note__: If data is reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtCell\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {*} Data at cell.\n   */\n\n\n  this.getDataAtCell = function (row, column) {\n    return datamap.get(row, datamap.colToProp(column));\n  };\n  /**\n   * Returns value at visual `row` and `prop` indexes.\n   *\n   * __Note__: If data is reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtRowProp\n   * @param {number} row Visual row index.\n   * @param {string} prop Property name.\n   * @returns {*} Cell value.\n   */\n\n\n  this.getDataAtRowProp = function (row, prop) {\n    return datamap.get(row, prop);\n  };\n  /**\n   * @description\n   * Returns array of column values from the data source.\n   *\n   * __Note__: If columns were reordered or sorted, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtCol\n   * @param {number} column Visual column index.\n   * @returns {Array} Array of cell values.\n   */\n\n\n  this.getDataAtCol = function (column) {\n    var _ref13;\n\n    return (_ref13 = []).concat.apply(_ref13, _toConsumableArray(datamap.getRange(new CellCoords(0, column), new CellCoords(tableMeta.data.length - 1, column), datamap.DESTINATION_RENDERER)));\n  };\n  /**\n   * Given the object property name (e.g. `'first.name'` or `'0'`), returns an array of column's values from the table data.\n   * You can also provide a column index as the first argument.\n   *\n   * @memberof Core#\n   * @function getDataAtProp\n   * @param {string|number} prop Property name or physical column index.\n   * @returns {Array} Array of cell values.\n   */\n  // TODO: Getting data from `datamap` should work on visual indexes.\n\n\n  this.getDataAtProp = function (prop) {\n    var _ref14;\n\n    var range = datamap.getRange(new CellCoords(0, datamap.propToCol(prop)), new CellCoords(tableMeta.data.length - 1, datamap.propToCol(prop)), datamap.DESTINATION_RENDERER);\n    return (_ref14 = []).concat.apply(_ref14, _toConsumableArray(range));\n  };\n  /**\n   * Returns a clone of the source data object.\n   * Optionally you can provide a cell range by using the `row`, `column`, `row2`, `column2` arguments, to get only a\n   * fragment of the table data.\n   *\n   * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,\n   * sorted or trimmed only physical indexes are correct.\n   *\n   * @memberof Core#\n   * @function getSourceData\n   * @param {number} [row] From physical row index.\n   * @param {number} [column] From physical column index (or visual index, if data type is an array of objects).\n   * @param {number} [row2] To physical row index.\n   * @param {number} [column2] To physical column index (or visual index, if data type is an array of objects).\n   * @returns {Array[]|object[]} The table data.\n   */\n\n\n  this.getSourceData = function (row, column, row2, column2) {\n    var data;\n\n    if (row === void 0) {\n      data = dataSource.getData();\n    } else {\n      data = dataSource.getByRange(new CellCoords(row, column), new CellCoords(row2, column2));\n    }\n\n    return data;\n  };\n  /**\n   * Returns the source data object as an arrays of arrays format even when source data was provided in another format.\n   * Optionally you can provide a cell range by using the `row`, `column`, `row2`, `column2` arguments, to get only a\n   * fragment of the table data.\n   *\n   * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,\n   * sorted or trimmed only physical indexes are correct.\n   *\n   * @memberof Core#\n   * @function getSourceDataArray\n   * @param {number} [row] From physical row index.\n   * @param {number} [column] From physical column index (or visual index, if data type is an array of objects).\n   * @param {number} [row2] To physical row index.\n   * @param {number} [column2] To physical column index (or visual index, if data type is an array of objects).\n   * @returns {Array} An array of arrays.\n   */\n\n\n  this.getSourceDataArray = function (row, column, row2, column2) {\n    var data;\n\n    if (row === void 0) {\n      data = dataSource.getData(true);\n    } else {\n      data = dataSource.getByRange(new CellCoords(row, column), new CellCoords(row2, column2), true);\n    }\n\n    return data;\n  };\n  /**\n   * Returns an array of column values from the data source.\n   *\n   * @memberof Core#\n   * @function getSourceDataAtCol\n   * @param {number} column Visual column index.\n   * @returns {Array} Array of the column's cell values.\n   */\n  // TODO: Getting data from `sourceData` should work always on physical indexes.\n\n\n  this.getSourceDataAtCol = function (column) {\n    return dataSource.getAtColumn(column);\n  };\n  /* eslint-disable jsdoc/require-param */\n\n  /**\n   * Set the provided value in the source data set at the provided coordinates.\n   *\n   * @memberof Core#\n   * @function setSourceDataAtCell\n   * @param {number|Array} row Physical row index or array of changes in format `[[row, prop, value], ...]`.\n   * @param {number|string} column Physical column index / prop name.\n   * @param {*} value The value to be set at the provided coordinates.\n   * @param {string} [source] Source of the change as a string.\n   */\n\n  /* eslint-enable jsdoc/require-param */\n\n\n  this.setSourceDataAtCell = function (row, column, value, source) {\n    var input = setDataInputToArray(row, column, value);\n    var isThereAnySetSourceListener = this.hasHook('afterSetSourceDataAtCell');\n    var changesForHook = [];\n\n    if (isThereAnySetSourceListener) {\n      arrayEach(input, function (_ref15) {\n        var _ref16 = _slicedToArray(_ref15, 3),\n            changeRow = _ref16[0],\n            changeProp = _ref16[1],\n            changeValue = _ref16[2];\n\n        changesForHook.push([changeRow, changeProp, dataSource.getAtCell(changeRow, changeProp), // The previous value.\n        changeValue]);\n      });\n    }\n\n    arrayEach(input, function (_ref17) {\n      var _ref18 = _slicedToArray(_ref17, 3),\n          changeRow = _ref18[0],\n          changeProp = _ref18[1],\n          changeValue = _ref18[2];\n\n      dataSource.setAtCell(changeRow, changeProp, changeValue);\n    });\n\n    if (isThereAnySetSourceListener) {\n      this.runHooks('afterSetSourceDataAtCell', changesForHook, source);\n    }\n\n    this.render();\n    var activeEditor = instance.getActiveEditor();\n\n    if (activeEditor && isDefined(activeEditor.refreshValue)) {\n      activeEditor.refreshValue();\n    }\n  };\n  /**\n   * Returns a single row of the data (array or object, depending on what data format you use).\n   *\n   * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,\n   * sorted or trimmed only physical indexes are correct.\n   *\n   * @memberof Core#\n   * @function getSourceDataAtRow\n   * @param {number} row Physical row index.\n   * @returns {Array|object} Single row of data.\n   */\n\n\n  this.getSourceDataAtRow = function (row) {\n    return dataSource.getAtRow(row);\n  };\n  /**\n   * Returns a single value from the data source.\n   *\n   * @memberof Core#\n   * @function getSourceDataAtCell\n   * @param {number} row Physical row index.\n   * @param {number} column Visual column index.\n   * @returns {*} Cell data.\n   */\n  // TODO: Getting data from `sourceData` should work always on physical indexes.\n\n\n  this.getSourceDataAtCell = function (row, column) {\n    return dataSource.getAtCell(row, column);\n  };\n  /**\n   * @description\n   * Returns a single row of the data.\n   *\n   * __Note__: If rows were reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtRow\n   * @param {number} row Visual row index.\n   * @returns {Array} Array of row's cell data.\n   */\n\n\n  this.getDataAtRow = function (row) {\n    var data = datamap.getRange(new CellCoords(row, 0), new CellCoords(row, this.countCols() - 1), datamap.DESTINATION_RENDERER);\n    return data[0] || [];\n  };\n  /**\n   * @description\n   * Returns a data type defined in the Handsontable settings under the `type` key ({@link Options#type}).\n   * If there are cells with different types in the selected range, it returns `'mixed'`.\n   *\n   * __Note__: If data is reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataType\n   * @param {number} rowFrom From visual row index.\n   * @param {number} columnFrom From visual column index.\n   * @param {number} rowTo To visual row index.\n   * @param {number} columnTo To visual column index.\n   * @returns {string} Cell type (e.q: `'mixed'`, `'text'`, `'numeric'`, `'autocomplete'`).\n   */\n\n\n  this.getDataType = function (rowFrom, columnFrom, rowTo, columnTo) {\n    var _this4 = this;\n\n    var coords = rowFrom === void 0 ? [0, 0, this.countRows(), this.countCols()] : [rowFrom, columnFrom, rowTo, columnTo];\n    var rowStart = coords[0],\n        columnStart = coords[1];\n    var rowEnd = coords[2],\n        columnEnd = coords[3];\n    var previousType = null;\n    var currentType = null;\n\n    if (rowEnd === void 0) {\n      rowEnd = rowStart;\n    }\n\n    if (columnEnd === void 0) {\n      columnEnd = columnStart;\n    }\n\n    var type = 'mixed';\n    rangeEach(Math.max(Math.min(rowStart, rowEnd), 0), Math.max(rowStart, rowEnd), function (row) {\n      var isTypeEqual = true;\n      rangeEach(Math.max(Math.min(columnStart, columnEnd), 0), Math.max(columnStart, columnEnd), function (column) {\n        var cellType = _this4.getCellMeta(row, column);\n\n        currentType = cellType.type;\n\n        if (previousType) {\n          isTypeEqual = previousType === currentType;\n        } else {\n          previousType = currentType;\n        }\n\n        return isTypeEqual;\n      });\n      type = isTypeEqual ? currentType : 'mixed';\n      return isTypeEqual;\n    });\n    return type;\n  };\n  /**\n   * Remove a property defined by the `key` argument from the cell meta object for the provided `row` and `column` coordinates.\n   *\n   * @memberof Core#\n   * @function removeCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key Property name.\n   * @fires Hooks#beforeRemoveCellMeta\n   * @fires Hooks#afterRemoveCellMeta\n   */\n\n\n  this.removeCellMeta = function (row, column, key) {\n    var _ref19 = [this.toPhysicalRow(row), this.toPhysicalColumn(column)],\n        physicalRow = _ref19[0],\n        physicalColumn = _ref19[1];\n    var cachedValue = metaManager.getCellMetaKeyValue(physicalRow, physicalColumn, key);\n    var hookResult = instance.runHooks('beforeRemoveCellMeta', row, column, key, cachedValue);\n\n    if (hookResult !== false) {\n      metaManager.removeCellMeta(physicalRow, physicalColumn, key);\n      instance.runHooks('afterRemoveCellMeta', row, column, key, cachedValue);\n    }\n\n    cachedValue = null;\n  };\n  /**\n   * Removes or adds one or more rows of the cell meta objects to the cell meta collections.\n   *\n   * @since 0.30.0\n   * @memberof Core#\n   * @function spliceCellsMeta\n   * @param {number} visualIndex A visual index that specifies at what position to add/remove items.\n   * @param {number} [deleteAmount=0] The number of items to be removed. If set to 0, no cell meta objects will be removed.\n   * @param {...object} [cellMetaRows] The new cell meta row objects to be added to the cell meta collection.\n   */\n\n\n  this.spliceCellsMeta = function (visualIndex) {\n    var _this5 = this;\n\n    var deleteAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n    for (var _len3 = arguments.length, cellMetaRows = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n      cellMetaRows[_key3 - 2] = arguments[_key3];\n    }\n\n    if (cellMetaRows.length > 0 && !Array.isArray(cellMetaRows[0])) {\n      throw new Error('The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.');\n    }\n\n    if (deleteAmount > 0) {\n      metaManager.removeRow(this.toPhysicalRow(visualIndex), deleteAmount);\n    }\n\n    if (cellMetaRows.length > 0) {\n      arrayEach(cellMetaRows.reverse(), function (cellMetaRow) {\n        metaManager.createRow(_this5.toPhysicalRow(visualIndex));\n        arrayEach(cellMetaRow, function (cellMeta, columnIndex) {\n          return _this5.setCellMetaObject(visualIndex, columnIndex, cellMeta);\n        });\n      });\n    }\n\n    instance.render();\n  };\n  /**\n   * Set cell meta data object defined by `prop` to the corresponding params `row` and `column`.\n   *\n   * @memberof Core#\n   * @function setCellMetaObject\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} prop Meta object.\n   */\n\n\n  this.setCellMetaObject = function (row, column, prop) {\n    var _this6 = this;\n\n    if (_typeof(prop) === 'object') {\n      objectEach(prop, function (value, key) {\n        _this6.setCellMeta(row, column, key, value);\n      });\n    }\n  };\n  /**\n   * Sets a property defined by the `key` property to the meta object of a cell corresponding to params `row` and `column`.\n   *\n   * @memberof Core#\n   * @function setCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key Property name.\n   * @param {string} value Property value.\n   * @fires Hooks#beforeSetCellMeta\n   * @fires Hooks#afterSetCellMeta\n   */\n\n\n  this.setCellMeta = function (row, column, key, value) {\n    var allowSetCellMeta = instance.runHooks('beforeSetCellMeta', row, column, key, value);\n\n    if (allowSetCellMeta === false) {\n      return;\n    }\n\n    var physicalRow = row;\n    var physicalColumn = column;\n\n    if (row < this.countRows()) {\n      physicalRow = this.toPhysicalRow(row);\n    }\n\n    if (column < this.countCols()) {\n      physicalColumn = this.toPhysicalColumn(column);\n    }\n\n    metaManager.setCellMeta(physicalRow, physicalColumn, key, value);\n    instance.runHooks('afterSetCellMeta', row, column, key, value);\n  };\n  /**\n   * Get all the cells meta settings at least once generated in the table (in order of cell initialization).\n   *\n   * @memberof Core#\n   * @function getCellsMeta\n   * @returns {Array} Returns an array of ColumnSettings object instances.\n   */\n\n\n  this.getCellsMeta = function () {\n    return metaManager.getCellsMeta();\n  };\n  /**\n   * Returns the cell properties object for the given `row` and `column` coordinates.\n   *\n   * @memberof Core#\n   * @function getCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {object} The cell properties object.\n   * @fires Hooks#beforeGetCellMeta\n   * @fires Hooks#afterGetCellMeta\n   */\n\n\n  this.getCellMeta = function (row, column) {\n    var physicalRow = this.toPhysicalRow(row);\n    var physicalColumn = this.toPhysicalColumn(column);\n\n    if (physicalRow === null) {\n      physicalRow = row;\n    }\n\n    if (physicalColumn === null) {\n      physicalColumn = column;\n    }\n\n    return metaManager.getCellMeta(physicalRow, physicalColumn, {\n      visualRow: row,\n      visualColumn: column\n    });\n  };\n  /**\n   * Returns an array of cell meta objects for specified physical row index.\n   *\n   * @memberof Core#\n   * @function getCellMetaAtRow\n   * @param {number} row Physical row index.\n   * @returns {Array}\n   */\n\n\n  this.getCellMetaAtRow = function (row) {\n    return metaManager.getCellsMetaAtRow(row);\n  };\n  /**\n   * Checks if the data format and config allows user to modify the column structure.\n   *\n   * @memberof Core#\n   * @function isColumnModificationAllowed\n   * @returns {boolean}\n   */\n\n\n  this.isColumnModificationAllowed = function () {\n    return !(instance.dataType === 'object' || tableMeta.columns);\n  };\n\n  var rendererLookup = cellMethodLookupFactory('renderer');\n  /**\n   * Returns the cell renderer function by given `row` and `column` arguments.\n   *\n   * @memberof Core#\n   * @function getCellRenderer\n   * @param {number|object} row Visual row index or cell meta object (see {@link Core#getCellMeta}).\n   * @param {number} column Visual column index.\n   * @returns {Function} The renderer function.\n   * @example\n   * ```js\n   * // Get cell renderer using `row` and `column` coordinates.\n   * hot.getCellRenderer(1, 1);\n   * // Get cell renderer using cell meta object.\n   * hot.getCellRenderer(hot.getCellMeta(1, 1));\n   * ```\n   */\n\n  this.getCellRenderer = function (row, column) {\n    return getRenderer(rendererLookup.call(this, row, column));\n  };\n  /**\n   * Returns the cell editor class by the provided `row` and `column` arguments.\n   *\n   * @memberof Core#\n   * @function getCellEditor\n   * @param {number} row Visual row index or cell meta object (see {@link Core#getCellMeta}).\n   * @param {number} column Visual column index.\n   * @returns {Function} The editor class.\n   * @example\n   * ```js\n   * // Get cell editor class using `row` and `column` coordinates.\n   * hot.getCellEditor(1, 1);\n   * // Get cell editor class using cell meta object.\n   * hot.getCellEditor(hot.getCellMeta(1, 1));\n   * ```\n   */\n\n\n  this.getCellEditor = cellMethodLookupFactory('editor');\n  var validatorLookup = cellMethodLookupFactory('validator');\n  /**\n   * Returns the cell validator by `row` and `column`.\n   *\n   * @memberof Core#\n   * @function getCellValidator\n   * @param {number|object} row Visual row index or cell meta object (see {@link Core#getCellMeta}).\n   * @param {number} column Visual column index.\n   * @returns {Function|RegExp|undefined} The validator function.\n   * @example\n   * ```js\n   * // Get cell valiator using `row` and `column` coordinates.\n   * hot.getCellValidator(1, 1);\n   * // Get cell valiator using cell meta object.\n   * hot.getCellValidator(hot.getCellMeta(1, 1));\n   * ```\n   */\n\n  this.getCellValidator = function (row, column) {\n    var validator = validatorLookup.call(this, row, column);\n\n    if (typeof validator === 'string') {\n      validator = getValidator(validator);\n    }\n\n    return validator;\n  };\n  /**\n   * Validates all cells using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it\n   * would equal `true`.\n   *\n   * @memberof Core#\n   * @function validateCells\n   * @param {Function} [callback] The callback function.\n   * @example\n   * ```js\n   * hot.validateCells((valid) => {\n   *   if (valid) {\n   *     // ... code for validated cells\n   *   }\n   * })\n   * ```\n   */\n\n\n  this.validateCells = function (callback) {\n    this._validateCells(callback);\n  };\n  /**\n   * Validates rows using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it\n   *  would equal `true`.\n   *\n   * @memberof Core#\n   * @function validateRows\n   * @param {Array} [rows] Array of validation target visual row indexes.\n   * @param {Function} [callback] The callback function.\n   * @example\n   * ```js\n   * hot.validateRows([3, 4, 5], (valid) => {\n   *   if (valid) {\n   *     // ... code for validated rows\n   *   }\n   * })\n   * ```\n   */\n\n\n  this.validateRows = function (rows, callback) {\n    if (!Array.isArray(rows)) {\n      throw new Error('validateRows parameter `rows` must be an array');\n    }\n\n    this._validateCells(callback, rows);\n  };\n  /**\n   * Validates columns using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it\n   *  would equal `true`.\n   *\n   * @memberof Core#\n   * @function validateColumns\n   * @param {Array} [columns] Array of validation target visual columns indexes.\n   * @param {Function} [callback] The callback function.\n   * @example\n   * ```js\n   * hot.validateColumns([3, 4, 5], (valid) => {\n   *   if (valid) {\n   *     // ... code for validated columns\n   *   }\n   * })\n   * ```\n   */\n\n\n  this.validateColumns = function (columns, callback) {\n    if (!Array.isArray(columns)) {\n      throw new Error('validateColumns parameter `columns` must be an array');\n    }\n\n    this._validateCells(callback, undefined, columns);\n  };\n  /**\n   * Validates all cells using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it would equal `true`.\n   *\n   * Private use intended.\n   *\n   * @private\n   * @memberof Core#\n   * @function _validateCells\n   * @param {Function} [callback] The callback function.\n   * @param {Array} [rows] An array of validation target visual row indexes.\n   * @param {Array} [columns] An array of validation target visual column indexes.\n   */\n\n\n  this._validateCells = function (callback, rows, columns) {\n    var waitingForValidator = new ValidatorsQueue();\n\n    if (callback) {\n      waitingForValidator.onQueueEmpty = callback;\n    }\n\n    var i = instance.countRows() - 1;\n\n    while (i >= 0) {\n      if (rows !== undefined && rows.indexOf(i) === -1) {\n        i -= 1;\n        continue;\n      }\n\n      var j = instance.countCols() - 1;\n\n      while (j >= 0) {\n        if (columns !== undefined && columns.indexOf(j) === -1) {\n          j -= 1;\n          continue;\n        }\n\n        waitingForValidator.addValidatorToQueue();\n        instance.validateCell(instance.getDataAtCell(i, j), instance.getCellMeta(i, j), function (result) {\n          if (typeof result !== 'boolean') {\n            throw new Error('Validation error: result is not boolean');\n          }\n\n          if (result === false) {\n            waitingForValidator.valid = false;\n          }\n\n          waitingForValidator.removeValidatorFormQueue();\n        }, 'validateCells');\n        j -= 1;\n      }\n\n      i -= 1;\n    }\n\n    waitingForValidator.checkIfQueueIsEmpty();\n  };\n  /**\n   * Returns an array of row headers' values (if they are enabled). If param `row` was given, it returns the header of the given row as a string.\n   *\n   * @memberof Core#\n   * @function getRowHeader\n   * @param {number} [row] Visual row index.\n   * @fires Hooks#modifyRowHeader\n   * @returns {Array|string|number} Array of header values / single header value.\n   */\n\n\n  this.getRowHeader = function (row) {\n    var rowHeader = tableMeta.rowHeaders;\n    var physicalRow = row;\n\n    if (physicalRow !== void 0) {\n      physicalRow = instance.runHooks('modifyRowHeader', physicalRow);\n    }\n\n    if (physicalRow === void 0) {\n      rowHeader = [];\n      rangeEach(instance.countRows() - 1, function (i) {\n        rowHeader.push(instance.getRowHeader(i));\n      });\n    } else if (Array.isArray(rowHeader) && rowHeader[physicalRow] !== void 0) {\n      rowHeader = rowHeader[physicalRow];\n    } else if (isFunction(rowHeader)) {\n      rowHeader = rowHeader(physicalRow);\n    } else if (rowHeader && typeof rowHeader !== 'string' && typeof rowHeader !== 'number') {\n      rowHeader = physicalRow + 1;\n    }\n\n    return rowHeader;\n  };\n  /**\n   * Returns information about if this table is configured to display row headers.\n   *\n   * @memberof Core#\n   * @function hasRowHeaders\n   * @returns {boolean} `true` if the instance has the row headers enabled, `false` otherwise.\n   */\n\n\n  this.hasRowHeaders = function () {\n    return !!tableMeta.rowHeaders;\n  };\n  /**\n   * Returns information about if this table is configured to display column headers.\n   *\n   * @memberof Core#\n   * @function hasColHeaders\n   * @returns {boolean} `true` if the instance has the column headers enabled, `false` otherwise.\n   */\n\n\n  this.hasColHeaders = function () {\n    if (tableMeta.colHeaders !== void 0 && tableMeta.colHeaders !== null) {\n      // Polymer has empty value = null\n      return !!tableMeta.colHeaders;\n    }\n\n    for (var i = 0, ilen = instance.countCols(); i < ilen; i++) {\n      if (instance.getColHeader(i)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n  /**\n   * Returns an array of column headers (in string format, if they are enabled). If param `column` is given, it\n   * returns the header at the given column.\n   *\n   * @memberof Core#\n   * @function getColHeader\n   * @param {number} [column] Visual column index.\n   * @fires Hooks#modifyColHeader\n   * @returns {Array|string|number} The column header(s).\n   */\n\n\n  this.getColHeader = function (column) {\n    var columnIndex = instance.runHooks('modifyColHeader', column);\n    var result = tableMeta.colHeaders;\n\n    if (columnIndex === void 0) {\n      var out = [];\n      var ilen = instance.countCols();\n\n      for (var i = 0; i < ilen; i++) {\n        out.push(instance.getColHeader(i));\n      }\n\n      result = out;\n    } else {\n      var translateVisualIndexToColumns = function translateVisualIndexToColumns(visualColumnIndex) {\n        var arr = [];\n        var columnsLen = instance.countCols();\n        var index = 0;\n\n        for (; index < columnsLen; index++) {\n          if (isFunction(tableMeta.columns) && tableMeta.columns(index)) {\n            arr.push(index);\n          }\n        }\n\n        return arr[visualColumnIndex];\n      };\n\n      var physicalColumn = instance.toPhysicalColumn(columnIndex);\n      var prop = translateVisualIndexToColumns(physicalColumn);\n\n      if (tableMeta.colHeaders === false) {\n        result = null;\n      } else if (tableMeta.columns && isFunction(tableMeta.columns) && tableMeta.columns(prop) && tableMeta.columns(prop).title) {\n        result = tableMeta.columns(prop).title;\n      } else if (tableMeta.columns && tableMeta.columns[physicalColumn] && tableMeta.columns[physicalColumn].title) {\n        result = tableMeta.columns[physicalColumn].title;\n      } else if (Array.isArray(tableMeta.colHeaders) && tableMeta.colHeaders[physicalColumn] !== void 0) {\n        result = tableMeta.colHeaders[physicalColumn];\n      } else if (isFunction(tableMeta.colHeaders)) {\n        result = tableMeta.colHeaders(physicalColumn);\n      } else if (tableMeta.colHeaders && typeof tableMeta.colHeaders !== 'string' && typeof tableMeta.colHeaders !== 'number') {\n        result = spreadsheetColumnLabel(columnIndex); // see #1458\n      }\n    }\n\n    return result;\n  };\n  /**\n   * Return column width from settings (no guessing). Private use intended.\n   *\n   * @private\n   * @memberof Core#\n   * @function _getColWidthFromSettings\n   * @param {number} col Visual col index.\n   * @returns {number}\n   */\n\n\n  this._getColWidthFromSettings = function (col) {\n    var width; // We currently don't support cell meta objects for headers (negative values)\n\n    if (col >= 0) {\n      var cellProperties = instance.getCellMeta(0, col);\n      width = cellProperties.width;\n    }\n\n    if (width === void 0 || width === tableMeta.width) {\n      width = tableMeta.colWidths;\n    }\n\n    if (width !== void 0 && width !== null) {\n      switch (_typeof(width)) {\n        case 'object':\n          // array\n          width = width[col];\n          break;\n\n        case 'function':\n          width = width(col);\n          break;\n\n        default:\n          break;\n      }\n\n      if (typeof width === 'string') {\n        width = parseInt(width, 10);\n      }\n    }\n\n    return width;\n  };\n  /**\n   * Returns the width of the requested column.\n   *\n   * @memberof Core#\n   * @function getColWidth\n   * @param {number} column Visual column index.\n   * @returns {number} Column width.\n   * @fires Hooks#modifyColWidth\n   */\n\n\n  this.getColWidth = function (column) {\n    var width = instance._getColWidthFromSettings(column);\n\n    width = instance.runHooks('modifyColWidth', width, column);\n\n    if (width === void 0) {\n      width = ViewportColumnsCalculator.DEFAULT_WIDTH;\n    }\n\n    return width;\n  };\n  /**\n   * Return row height from settings (no guessing). Private use intended.\n   *\n   * @private\n   * @memberof Core#\n   * @function _getRowHeightFromSettings\n   * @param {number} row Visual row index.\n   * @returns {number}\n   */\n\n\n  this._getRowHeightFromSettings = function (row) {\n    // let cellProperties = instance.getCellMeta(row, 0);\n    // let height = cellProperties.height;\n    //\n    // if (height === void 0 || height === tableMeta.height) {\n    //  height = cellProperties.rowHeights;\n    // }\n    var height = tableMeta.rowHeights;\n\n    if (height !== void 0 && height !== null) {\n      switch (_typeof(height)) {\n        case 'object':\n          // array\n          height = height[row];\n          break;\n\n        case 'function':\n          height = height(row);\n          break;\n\n        default:\n          break;\n      }\n\n      if (typeof height === 'string') {\n        height = parseInt(height, 10);\n      }\n    }\n\n    return height;\n  };\n  /**\n   * Returns the row height.\n   *\n   * Mind that this method is different from the [AutoRowSize](@/api/autoRowSize.md) plugin's [`getRowHeight()`](@/api/autoRowSize.md#getrowheight) method.\n   *\n   * @memberof Core#\n   * @function getRowHeight\n   * @param {number} row Visual row index.\n   * @returns {number} The given row's height.\n   * @fires Hooks#modifyRowHeight\n   */\n\n\n  this.getRowHeight = function (row) {\n    var height = instance._getRowHeightFromSettings(row);\n\n    height = instance.runHooks('modifyRowHeight', height, row);\n    return height;\n  };\n  /**\n   * Returns the total number of rows in the data source.\n   *\n   * @memberof Core#\n   * @function countSourceRows\n   * @returns {number} Total number of rows.\n   */\n\n\n  this.countSourceRows = function () {\n    return dataSource.countRows();\n  };\n  /**\n   * Returns the total number of columns in the data source.\n   *\n   * @memberof Core#\n   * @function countSourceCols\n   * @returns {number} Total number of columns.\n   */\n\n\n  this.countSourceCols = function () {\n    return dataSource.countFirstRowKeys();\n  };\n  /**\n   * Returns the total number of visual rows in the table.\n   *\n   * @memberof Core#\n   * @function countRows\n   * @returns {number} Total number of rows.\n   */\n\n\n  this.countRows = function () {\n    return datamap.getLength();\n  };\n  /**\n   * Returns the total number of visible columns in the table.\n   *\n   * @memberof Core#\n   * @function countCols\n   * @returns {number} Total number of columns.\n   */\n\n\n  this.countCols = function () {\n    var maxCols = tableMeta.maxCols;\n    var dataLen = this.columnIndexMapper.getNotTrimmedIndexesLength();\n    return Math.min(maxCols, dataLen);\n  };\n  /**\n   * Returns the number of rendered rows (including rows partially or fully rendered outside viewport).\n   *\n   * @memberof Core#\n   * @function countRenderedRows\n   * @returns {number} Returns -1 if table is not visible.\n   */\n\n\n  this.countRenderedRows = function () {\n    return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedRowsCount() : -1;\n  };\n  /**\n   * Returns the number of visible rows (rendered rows that fully fit inside viewport).\n   *\n   * @memberof Core#\n   * @function countVisibleRows\n   * @returns {number} Number of visible rows or -1.\n   */\n\n\n  this.countVisibleRows = function () {\n    return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleRowsCount() : -1;\n  };\n  /**\n   * Returns the number of rendered columns (including columns partially or fully rendered outside viewport).\n   *\n   * @memberof Core#\n   * @function countRenderedCols\n   * @returns {number} Returns -1 if table is not visible.\n   */\n\n\n  this.countRenderedCols = function () {\n    return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedColumnsCount() : -1;\n  };\n  /**\n   * Returns the number of visible columns. Returns -1 if table is not visible.\n   *\n   * @memberof Core#\n   * @function countVisibleCols\n   * @returns {number} Number of visible columns or -1.\n   */\n\n\n  this.countVisibleCols = function () {\n    return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleColumnsCount() : -1;\n  };\n  /**\n   * Returns the number of empty rows. If the optional ending parameter is `true`, returns the\n   * number of empty rows at the bottom of the table.\n   *\n   * @memberof Core#\n   * @function countEmptyRows\n   * @param {boolean} [ending=false] If `true`, will only count empty rows at the end of the data source.\n   * @returns {number} Count empty rows.\n   */\n\n\n  this.countEmptyRows = function () {\n    var ending = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var emptyRows = 0;\n    rangeEachReverse(instance.countRows() - 1, function (visualIndex) {\n      if (instance.isEmptyRow(visualIndex)) {\n        emptyRows += 1;\n      } else if (ending === true) {\n        return false;\n      }\n    });\n    return emptyRows;\n  };\n  /**\n   * Returns the number of empty columns. If the optional ending parameter is `true`, returns the number of empty\n   * columns at right hand edge of the table.\n   *\n   * @memberof Core#\n   * @function countEmptyCols\n   * @param {boolean} [ending=false] If `true`, will only count empty columns at the end of the data source row.\n   * @returns {number} Count empty cols.\n   */\n\n\n  this.countEmptyCols = function () {\n    var ending = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    if (instance.countRows() < 1) {\n      return 0;\n    }\n\n    var emptyColumns = 0;\n    rangeEachReverse(instance.countCols() - 1, function (visualIndex) {\n      if (instance.isEmptyCol(visualIndex)) {\n        emptyColumns += 1;\n      } else if (ending === true) {\n        return false;\n      }\n    });\n    return emptyColumns;\n  };\n  /**\n   * Check if all cells in the row declared by the `row` argument are empty.\n   *\n   * @memberof Core#\n   * @function isEmptyRow\n   * @param {number} row Visual row index.\n   * @returns {boolean} `true` if the row at the given `row` is empty, `false` otherwise.\n   */\n\n\n  this.isEmptyRow = function (row) {\n    return tableMeta.isEmptyRow.call(instance, row);\n  };\n  /**\n   * Check if all cells in the the column declared by the `column` argument are empty.\n   *\n   * @memberof Core#\n   * @function isEmptyCol\n   * @param {number} column Column index.\n   * @returns {boolean} `true` if the column at the given `col` is empty, `false` otherwise.\n   */\n\n\n  this.isEmptyCol = function (column) {\n    return tableMeta.isEmptyCol.call(instance, column);\n  };\n  /**\n   * Select cell specified by `row` and `column` values or a range of cells finishing at `endRow`, `endCol`. If the table\n   * was configured to support data column properties that properties can be used to making a selection.\n   *\n   * By default, viewport will be scrolled to the selection. After the `selectCell` method had finished, the instance\n   * will be listening to keyboard input on the document.\n   *\n   * @example\n   * ```js\n   * // select a single cell\n   * hot.selectCell(2, 4);\n   * // select a single cell using column property\n   * hot.selectCell(2, 'address');\n   * // select a range of cells\n   * hot.selectCell(2, 4, 3, 5);\n   * // select a range of cells using column properties\n   * hot.selectCell(2, 'address', 3, 'phone_number');\n   * // select a range of cells without scrolling to them\n   * hot.selectCell(2, 'address', 3, 'phone_number', false);\n   * ```\n   *\n   * @memberof Core#\n   * @function selectCell\n   * @param {number} row Visual row index.\n   * @param {number|string} column Visual column index or column property.\n   * @param {number} [endRow] Visual end row index (if selecting a range).\n   * @param {number|string} [endColumn] Visual end column index or column property (if selecting a range).\n   * @param {boolean} [scrollToCell=true] If `true`, the viewport will be scrolled to the selection.\n   * @param {boolean} [changeListener=true] If `false`, Handsontable will not change keyboard events listener to himself.\n   * @returns {boolean} `true` if selection was successful, `false` otherwise.\n   */\n\n\n  this.selectCell = function (row, column, endRow, endColumn) {\n    var scrollToCell = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n    var changeListener = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n\n    if (isUndefined(row) || isUndefined(column)) {\n      return false;\n    }\n\n    return this.selectCells([[row, column, endRow, endColumn]], scrollToCell, changeListener);\n  };\n  /**\n   * Make multiple, non-contiguous selection specified by `row` and `column` values or a range of cells\n   * finishing at `endRow`, `endColumn`. The method supports two input formats which are the same as that\n   * produces by `getSelected` and `getSelectedRange` methods.\n   *\n   * By default, viewport will be scrolled to selection. After the `selectCells` method had finished, the instance\n   * will be listening to keyboard input on the document.\n   *\n   * @example\n   * ```js\n   * // Using an array of arrays.\n   * hot.selectCells([[1, 1, 2, 2], [3, 3], [6, 2, 0, 2]]);\n   * // Using an array of arrays with defined columns as props.\n   * hot.selectCells([[1, 'id', 2, 'first_name'], [3, 'full_name'], [6, 'last_name', 0, 'first_name']]);\n   * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n   * const selected = hot.getSelectedRange();\n   *\n   * selected[0].from.row = 0;\n   * selected[0].from.col = 0;\n   *\n   * hot.selectCells(selected);\n   * ```\n   *\n   * @memberof Core#\n   * @since 0.38.0\n   * @function selectCells\n   * @param {Array[]|CellRange[]} coords Visual coords passed as an array of array (`[[rowStart, columnStart, rowEnd, columnEnd], ...]`)\n   *                                     the same format as `getSelected` method returns or as an CellRange objects\n   *                                     which is the same format what `getSelectedRange` method returns.\n   * @param {boolean} [scrollToCell=true] If `true`, the viewport will be scrolled to the selection.\n   * @param {boolean} [changeListener=true] If `false`, Handsontable will not change keyboard events listener to himself.\n   * @returns {boolean} `true` if selection was successful, `false` otherwise.\n   */\n\n\n  this.selectCells = function () {\n    var coords = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [[]];\n    var scrollToCell = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    var changeListener = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n    if (scrollToCell === false) {\n      preventScrollingToCell = true;\n    }\n\n    var wasSelected = selection.selectCells(coords);\n\n    if (wasSelected && changeListener) {\n      instance.listen();\n    }\n\n    preventScrollingToCell = false;\n    return wasSelected;\n  };\n  /**\n   * Select column specified by `startColumn` visual index, column property or a range of columns finishing at `endColumn`.\n   *\n   * @example\n   * ```js\n   * // Select column using visual index.\n   * hot.selectColumns(1);\n   * // Select column using column property.\n   * hot.selectColumns('id');\n   * // Select range of columns using visual indexes.\n   * hot.selectColumns(1, 4);\n   * // Select range of columns using column properties.\n   * hot.selectColumns('id', 'last_name');\n   * ```\n   *\n   * @memberof Core#\n   * @since 0.38.0\n   * @function selectColumns\n   * @param {number} startColumn The visual column index from which the selection starts.\n   * @param {number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`\n   *                                         is not defined the column defined by `startColumn` will be selected.\n   * @returns {boolean} `true` if selection was successful, `false` otherwise.\n   */\n\n\n  this.selectColumns = function (startColumn) {\n    var endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;\n    return selection.selectColumns(startColumn, endColumn);\n  };\n  /**\n   * Select row specified by `startRow` visual index or a range of rows finishing at `endRow`.\n   *\n   * @example\n   * ```js\n   * // Select row using visual index.\n   * hot.selectRows(1);\n   * // Select range of rows using visual indexes.\n   * hot.selectRows(1, 4);\n   * ```\n   *\n   * @memberof Core#\n   * @since 0.38.0\n   * @function selectRows\n   * @param {number} startRow The visual row index from which the selection starts.\n   * @param {number} [endRow=startRow] The visual row index to which the selection finishes. If `endRow`\n   *                                   is not defined the row defined by `startRow` will be selected.\n   * @returns {boolean} `true` if selection was successful, `false` otherwise.\n   */\n\n\n  this.selectRows = function (startRow) {\n    var endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;\n    return selection.selectRows(startRow, endRow);\n  };\n  /**\n   * Deselects the current cell selection on the table.\n   *\n   * @memberof Core#\n   * @function deselectCell\n   */\n\n\n  this.deselectCell = function () {\n    selection.deselect();\n  };\n  /**\n   * Select the whole table. The previous selection will be overwritten.\n   *\n   * @since 0.38.2\n   * @memberof Core#\n   * @function selectAll\n   * @param {boolean} [includeHeaders=true] `true` If the selection should include the row, column and corner headers,\n   * `false` otherwise.\n   */\n\n\n  this.selectAll = function () {\n    var includeHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n    var includeRowHeaders = includeHeaders && this.hasRowHeaders();\n    var includeColumnHeaders = includeHeaders && this.hasColHeaders();\n    preventScrollingToCell = true;\n    selection.selectAll(includeRowHeaders, includeColumnHeaders);\n    preventScrollingToCell = false;\n  };\n\n  var getIndexToScroll = function getIndexToScroll(indexMapper, visualIndex) {\n    // Looking for a visual index on the right and then (when not found) on the left.\n    return indexMapper.getFirstNotHiddenIndex(visualIndex, 1, true);\n  };\n  /**\n   * Scroll viewport to coordinates specified by the `row` and `column` arguments.\n   *\n   * @memberof Core#\n   * @function scrollViewportTo\n   * @param {number} [row] Row index. If the last argument isn't defined we treat the index as a visual row index. Otherwise,\n   * we are using the index for numbering only this rows which may be rendered (we don't consider hidden rows).\n   * @param {number} [column] Column index. If the last argument isn't defined we treat the index as a visual column index.\n   * Otherwise, we are using the index for numbering only this columns which may be rendered (we don't consider hidden columns).\n   * @param {boolean} [snapToBottom=false] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n   * @param {boolean} [snapToRight=false] If `true`, viewport is scrolled to show the cell on the right side of the table.\n   * @param {boolean} [considerHiddenIndexes=true] If `true`, we handle visual indexes, otherwise we handle only indexes which\n   * may be rendered when they are in the viewport (we don't consider hidden indexes as they aren't rendered).\n   * @returns {boolean} `true` if scroll was successful, `false` otherwise.\n   */\n\n\n  this.scrollViewportTo = function (row, column) {\n    var snapToBottom = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    var snapToRight = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n    var considerHiddenIndexes = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n    var snapToTop = !snapToBottom;\n    var snapToLeft = !snapToRight;\n    var renderableRow = row;\n    var renderableColumn = column;\n\n    if (considerHiddenIndexes) {\n      var _isRowInteger = Number.isInteger(row);\n\n      var _isColumnInteger = Number.isInteger(column);\n\n      var visualRowToScroll = _isRowInteger ? getIndexToScroll(this.rowIndexMapper, row) : void 0;\n      var visualColumnToScroll = _isColumnInteger ? getIndexToScroll(this.columnIndexMapper, column) : void 0;\n\n      if (visualRowToScroll === null || visualColumnToScroll === null) {\n        return false;\n      }\n\n      renderableRow = _isRowInteger ? instance.rowIndexMapper.getRenderableFromVisualIndex(visualRowToScroll) : void 0;\n      renderableColumn = _isColumnInteger ? instance.columnIndexMapper.getRenderableFromVisualIndex(visualColumnToScroll) : void 0;\n    }\n\n    var isRowInteger = Number.isInteger(renderableRow);\n    var isColumnInteger = Number.isInteger(renderableColumn);\n\n    if (isRowInteger && isColumnInteger) {\n      return instance.view.scrollViewport(new CellCoords(renderableRow, renderableColumn), snapToTop, snapToRight, snapToBottom, snapToLeft);\n    }\n\n    if (isRowInteger && isColumnInteger === false) {\n      return instance.view.scrollViewportVertically(renderableRow, snapToTop, snapToBottom);\n    }\n\n    if (isColumnInteger && isRowInteger === false) {\n      return instance.view.scrollViewportHorizontally(renderableColumn, snapToRight, snapToLeft);\n    }\n\n    return false;\n  };\n  /**\n   * Removes the table from the DOM and destroys the instance of the Handsontable.\n   *\n   * @memberof Core#\n   * @function destroy\n   * @fires Hooks#afterDestroy\n   */\n\n\n  this.destroy = function () {\n    instance._clearTimeouts();\n\n    instance._clearImmediates();\n\n    if (instance.view) {\n      // in case HT is destroyed before initialization has finished\n      instance.view.destroy();\n    }\n\n    if (dataSource) {\n      dataSource.destroy();\n    }\n\n    dataSource = null;\n    metaManager.clearCache();\n    keyStateStopObserving();\n\n    if (isRootInstance(instance)) {\n      var licenseInfo = this.rootDocument.querySelector('#hot-display-license-info');\n\n      if (licenseInfo) {\n        licenseInfo.parentNode.removeChild(licenseInfo);\n      }\n    }\n\n    empty(instance.rootElement);\n    eventManager.destroy();\n\n    if (editorManager) {\n      editorManager.destroy();\n    } // The plugin's `destroy` method is called as a consequence and it should handle\n    // unregistration of plugin's maps. Some unregistered maps reset the cache.\n\n\n    instance.batchExecution(function () {\n      instance.rowIndexMapper.unregisterAll();\n      instance.columnIndexMapper.unregisterAll();\n      pluginsRegistry.getItems().forEach(function (_ref20) {\n        var _ref21 = _slicedToArray(_ref20, 2),\n            plugin = _ref21[1];\n\n        plugin.destroy();\n      });\n      pluginsRegistry.clear();\n      instance.runHooks('afterDestroy');\n    }, true);\n    Hooks.getSingleton().destroy(instance);\n    objectEach(instance, function (property, key, obj) {\n      // replace instance methods with post mortem\n      if (isFunction(property)) {\n        obj[key] = postMortem(key);\n      } else if (key !== 'guid') {\n        // replace instance properties with null (restores memory)\n        // it should not be necessary but this prevents a memory leak side effects that show itself in Jasmine tests\n        obj[key] = null;\n      }\n    });\n    instance.isDestroyed = true; // replace private properties with null (restores memory)\n    // it should not be necessary but this prevents a memory leak side effects that show itself in Jasmine tests\n\n    if (datamap) {\n      datamap.destroy();\n    }\n\n    instance.rowIndexMapper = null;\n    instance.columnIndexMapper = null;\n    datamap = null;\n    grid = null;\n    selection = null;\n    editorManager = null;\n    instance = null;\n  };\n  /**\n   * Replacement for all methods after the Handsontable was destroyed.\n   *\n   * @private\n   * @param {string} method The method name.\n   * @returns {Function}\n   */\n\n\n  function postMortem(method) {\n    return function () {\n      throw new Error(\"The \\\"\".concat(method, \"\\\" method cannot be called because this Handsontable instance has been destroyed\"));\n    };\n  }\n  /**\n   * Returns the active editor class instance.\n   *\n   * @memberof Core#\n   * @function getActiveEditor\n   * @returns {BaseEditor} The active editor instance.\n   */\n\n\n  this.getActiveEditor = function () {\n    return editorManager.getActiveEditor();\n  };\n  /**\n   * Returns plugin instance by provided its name.\n   *\n   * @memberof Core#\n   * @function getPlugin\n   * @param {string} pluginName The plugin name.\n   * @returns {BasePlugin|undefined} The plugin instance or undefined if there is no plugin.\n   */\n\n\n  this.getPlugin = function (pluginName) {\n    var unifiedPluginName = toUpperCaseFirst(pluginName); // Workaround for the UndoRedo plugin which, currently doesn't follow the plugin architecture.\n\n    if (unifiedPluginName === 'UndoRedo') {\n      return this.undoRedo;\n    }\n\n    return pluginsRegistry.getItem(unifiedPluginName);\n  };\n  /**\n   * Returns name of the passed plugin.\n   *\n   * @private\n   * @memberof Core#\n   * @param {BasePlugin} plugin The plugin instance.\n   * @returns {string}\n   */\n\n\n  this.getPluginName = function (plugin) {\n    // Workaround for the UndoRedo plugin which, currently doesn't follow the plugin architecture.\n    if (plugin === this.undoRedo) {\n      return this.undoRedo.constructor.PLUGIN_KEY;\n    }\n\n    return pluginsRegistry.getId(plugin);\n  };\n  /**\n   * Returns the Handsontable instance.\n   *\n   * @memberof Core#\n   * @function getInstance\n   * @returns {Handsontable} The Handsontable instance.\n   */\n\n\n  this.getInstance = function () {\n    return instance;\n  };\n  /**\n   * Adds listener to the specified hook name (only for this Handsontable instance).\n   *\n   * @memberof Core#\n   * @function addHook\n   * @see Hooks#add\n   * @param {string} key Hook name (see {@link Hooks}).\n   * @param {Function|Array} callback Function or array of functions.\n   * @example\n   * ```js\n   * hot.addHook('beforeInit', myCallback);\n   * ```\n   */\n\n\n  this.addHook = function (key, callback) {\n    Hooks.getSingleton().add(key, callback, instance);\n  };\n  /**\n   * Check if for a specified hook name there are added listeners (only for this Handsontable instance). All available\n   * hooks you will find {@link Hooks}.\n   *\n   * @memberof Core#\n   * @function hasHook\n   * @see Hooks#has\n   * @param {string} key Hook name.\n   * @returns {boolean}\n   *\n   * @example\n   * ```js\n   * const hasBeforeInitListeners = hot.hasHook('beforeInit');\n   * ```\n   */\n\n\n  this.hasHook = function (key) {\n    return Hooks.getSingleton().has(key, instance);\n  };\n  /**\n   * Adds listener to specified hook name (only for this Handsontable instance). After the listener is triggered,\n   * it will be automatically removed.\n   *\n   * @memberof Core#\n   * @function addHookOnce\n   * @see Hooks#once\n   * @param {string} key Hook name (see {@link Hooks}).\n   * @param {Function|Array} callback Function or array of functions.\n   * @example\n   * ```js\n   * hot.addHookOnce('beforeInit', myCallback);\n   * ```\n   */\n\n\n  this.addHookOnce = function (key, callback) {\n    Hooks.getSingleton().once(key, callback, instance);\n  };\n  /**\n   * Removes the hook listener previously registered with {@link Core#addHook}.\n   *\n   * @memberof Core#\n   * @function removeHook\n   * @see Hooks#remove\n   * @param {string} key Hook name.\n   * @param {Function} callback Reference to the function which has been registered using {@link Core#addHook}.\n   *\n   * @example\n   * ```js\n   * hot.removeHook('beforeInit', myCallback);\n   * ```\n   */\n\n\n  this.removeHook = function (key, callback) {\n    Hooks.getSingleton().remove(key, callback, instance);\n  };\n  /**\n   * Run the callbacks for the hook provided in the `key` argument using the parameters given in the other arguments.\n   *\n   * @memberof Core#\n   * @function runHooks\n   * @see Hooks#run\n   * @param {string} key Hook name.\n   * @param {*} [p1] Argument passed to the callback.\n   * @param {*} [p2] Argument passed to the callback.\n   * @param {*} [p3] Argument passed to the callback.\n   * @param {*} [p4] Argument passed to the callback.\n   * @param {*} [p5] Argument passed to the callback.\n   * @param {*} [p6] Argument passed to the callback.\n   * @returns {*}\n   *\n   * @example\n   * ```js\n   * // Run built-in hook\n   * hot.runHooks('beforeInit');\n   * // Run custom hook\n   * hot.runHooks('customAction', 10, 'foo');\n   * ```\n   */\n\n\n  this.runHooks = function (key, p1, p2, p3, p4, p5, p6) {\n    return Hooks.getSingleton().run(instance, key, p1, p2, p3, p4, p5, p6);\n  };\n  /**\n   * Get language phrase for specified dictionary key.\n   *\n   * @memberof Core#\n   * @function getTranslatedPhrase\n   * @since 0.35.0\n   * @param {string} dictionaryKey Constant which is dictionary key.\n   * @param {*} extraArguments Arguments which will be handled by formatters.\n   * @returns {string}\n   */\n\n\n  this.getTranslatedPhrase = function (dictionaryKey, extraArguments) {\n    return getTranslatedPhrase(tableMeta.language, dictionaryKey, extraArguments);\n  };\n  /**\n   * Converts instance into outerHTML of HTMLTableElement.\n   *\n   * @memberof Core#\n   * @function toHTML\n   * @since 7.1.0\n   * @returns {string}\n   */\n\n\n  this.toHTML = function () {\n    return instanceToHTML(_this);\n  };\n  /**\n   * Converts instance into HTMLTableElement.\n   *\n   * @memberof Core#\n   * @function toTableElement\n   * @since 7.1.0\n   * @returns {HTMLTableElement}\n   */\n\n\n  this.toTableElement = function () {\n    var tempElement = _this.rootDocument.createElement('div');\n\n    tempElement.insertAdjacentHTML('afterbegin', instanceToHTML(_this));\n    return tempElement.firstElementChild;\n  };\n\n  this.timeouts = [];\n  /**\n   * Sets timeout. Purpose of this method is to clear all known timeouts when `destroy` method is called.\n   *\n   * @param {number|Function} handle Handler returned from setTimeout or function to execute (it will be automatically wraped\n   *                                 by setTimeout function).\n   * @param {number} [delay=0] If first argument is passed as a function this argument set delay of the execution of that function.\n   * @private\n   */\n\n  this._registerTimeout = function (handle) {\n    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    var handleFunc = handle;\n\n    if (typeof handleFunc === 'function') {\n      handleFunc = setTimeout(handleFunc, delay);\n    }\n\n    this.timeouts.push(handleFunc);\n  };\n  /**\n   * Clears all known timeouts.\n   *\n   * @private\n   */\n\n\n  this._clearTimeouts = function () {\n    arrayEach(this.timeouts, function (handler) {\n      clearTimeout(handler);\n    });\n  };\n\n  this.immediates = [];\n  /**\n   * Execute function execution to the next event loop cycle. Purpose of this method is to clear all known timeouts when `destroy` method is called.\n   *\n   * @param {Function} callback Function to be delayed in execution.\n   * @private\n   */\n\n  this._registerImmediate = function (callback) {\n    this.immediates.push(setImmediate(callback));\n  };\n  /**\n   * Clears all known timeouts.\n   *\n   * @private\n   */\n\n\n  this._clearImmediates = function () {\n    arrayEach(this.immediates, function (handler) {\n      clearImmediate(handler);\n    });\n  };\n  /**\n   * Refresh selection borders. This is temporary method relic after selection rewrite.\n   *\n   * @private\n   * @param {boolean} [revertOriginal=false] If `true`, the previous value will be restored. Otherwise, the edited value will be saved.\n   * @param {boolean} [prepareEditorIfNeeded=true] If `true` the editor under the selected cell will be prepared to open.\n   */\n\n\n  this._refreshBorders = function () {\n    var revertOriginal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var prepareEditorIfNeeded = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    editorManager.destroyEditor(revertOriginal);\n    instance.view.render();\n\n    if (prepareEditorIfNeeded && selection.isSelected()) {\n      editorManager.prepareEditor();\n    }\n  };\n  /**\n   * Check if currently it is RTL direction.\n   *\n   * @private\n   * @memberof Core#\n   * @function isRtl\n   * @returns {boolean} True if RTL.\n   */\n\n\n  this.isRtl = function () {\n    return instance.rootWindow.getComputedStyle(instance.rootElement).direction === 'rtl';\n  };\n  /**\n   * Check if currently it is LTR direction.\n   *\n   * @private\n   * @memberof Core#\n   * @function isLtr\n   * @returns {boolean} True if LTR.\n   */\n\n\n  this.isLtr = function () {\n    return !instance.isRtl();\n  };\n  /**\n   * Returns 1 for LTR; -1 for RTL. Useful for calculations.\n   *\n   * @private\n   * @memberof Core#\n   * @function getDirectionFactor\n   * @returns {number} Returns 1 for LTR; -1 for RTL.\n   */\n\n\n  this.getDirectionFactor = function () {\n    return instance.isLtr() ? 1 : -1;\n  };\n\n  getPluginsNames().forEach(function (pluginName) {\n    var PluginClass = getPlugin(pluginName);\n    pluginsRegistry.addItem(pluginName, new PluginClass(_this));\n  });\n  Hooks.getSingleton().run(instance, 'construct');\n}", "'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n  // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n  return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n  if (/./[REPLACE]) {\n    return /./[REPLACE]('a', '$0') === '';\n  }\n  return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n  return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n  var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.es/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = requireObjectCoercible(this);\n      var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);\n      return replacer\n        ? call(replacer, searchValue, O, replaceValue)\n        : call(nativeReplace, toString(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n    function (string, replaceValue) {\n      var rx = anObject(this);\n      var S = toString(string);\n\n      if (\n        typeof replaceValue == 'string' &&\n        stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n        stringIndexOf(replaceValue, '$<') === -1\n      ) {\n        var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n        if (res.done) return res.value;\n      }\n\n      var functionalReplace = isCallable(replaceValue);\n      if (!functionalReplace) replaceValue = toString(replaceValue);\n\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n\n        push(results, result);\n        if (!global) break;\n\n        var matchStr = toString(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n\n        var matched = toString(result[0]);\n        var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = concat([matched], captures, position, S);\n          if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n          var replacement = toString(apply(replaceValue, undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + stringSlice(S, nextSourcePosition);\n    }\n  ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n", "var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n  // eslint-disable-next-line es/no-array-from -- required for testing\n  Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n  from: from\n});\n", "'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n  setInternalState(this, {\n    type: STRING_ITERATOR,\n    string: toString(iterated),\n    index: 0\n  });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n  var state = getInternalState(this);\n  var string = state.string;\n  var index = state.index;\n  var point;\n  if (index >= string.length) return { value: undefined, done: true };\n  point = charAt(string, index);\n  state.index += point.length;\n  return { value: point, done: false };\n});\n", "'use strict';\n/* eslint-disable es/no-array-prototype-indexof -- required for testing */\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar $IndexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar un$IndexOf = uncurryThis([].indexOf);\n\nvar NEGATIVE_ZERO = !!un$IndexOf && 1 / un$IndexOf([1], 1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\n\n// `Array.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD }, {\n  indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n    var fromIndex = arguments.length > 1 ? arguments[1] : undefined;\n    return NEGATIVE_ZERO\n      // convert -0 to +0\n      ? un$IndexOf(this, searchElement, fromIndex) || 0\n      : $IndexOf(this, searchElement, fromIndex);\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\n\nvar un$Reverse = uncurryThis([].reverse);\nvar test = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n  reverse: function reverse() {\n    // eslint-disable-next-line no-self-assign -- dirty hack\n    if (isArray(this)) this.length = this.length;\n    return un$Reverse(this);\n  }\n});\n", "var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n  redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n", "var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar handlePrototype = function (CollectionPrototype) {\n  // some Chrome versions have non-configurable methods on DOMTokenList\n  if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n    createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n  } catch (error) {\n    CollectionPrototype.forEach = forEach;\n  }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  if (DOMIterables[COLLECTION_NAME]) {\n    handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n  }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n", "var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar isCallable = require('../internals/is-callable');\nvar userAgent = require('../internals/engine-user-agent');\nvar arraySlice = require('../internals/array-slice');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\n\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar Function = global.Function;\n\nvar wrap = function (scheduler) {\n  return function (handler, timeout /* , ...arguments */) {\n    var boundArgs = validateArgumentsLength(arguments.length, 1) > 2;\n    var fn = isCallable(handler) ? handler : Function(handler);\n    var args = boundArgs ? arraySlice(arguments, 2) : undefined;\n    return scheduler(boundArgs ? function () {\n      apply(fn, this, args);\n    } : fn, timeout);\n  };\n};\n\n// ie9- setTimeout & setInterval additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers\n$({ global: true, bind: true, forced: MSIE }, {\n  // `setTimeout` method\n  // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout\n  setTimeout: wrap(global.setTimeout),\n  // `setInterval` method\n  // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval\n  setInterval: wrap(global.setInterval)\n});\n", "var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar task = require('../internals/task');\n\nvar FORCED = !global.setImmediate || !global.clearImmediate;\n\n// http://w3c.github.io/setImmediate/\n$({ global: true, bind: true, enumerable: true, forced: FORCED }, {\n  // `setImmediate` method\n  // http://w3c.github.io/setImmediate/#si-setImmediate\n  setImmediate: task.set,\n  // `clearImmediate` method\n  // http://w3c.github.io/setImmediate/#si-clearImmediate\n  clearImmediate: task.clear\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar arraySlice = require('../internals/array-slice');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n  return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n    get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (O, P, Attributes) {\n  var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n  if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n  nativeDefineProperty(O, P, Attributes);\n  if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n    nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n  }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n  var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n  setInternalState(symbol, {\n    type: SYMBOL,\n    tag: tag,\n    description: description\n  });\n  if (!DESCRIPTORS) symbol.description = description;\n  return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n  if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n  anObject(O);\n  var key = toPropertyKey(P);\n  anObject(Attributes);\n  if (hasOwn(AllSymbols, key)) {\n    if (!Attributes.enumerable) {\n      if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n      O[HIDDEN][key] = true;\n    } else {\n      if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n      Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n    } return setSymbolDescriptor(O, key, Attributes);\n  } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n  anObject(O);\n  var properties = toIndexedObject(Properties);\n  var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n  $forEach(keys, function (key) {\n    if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n  });\n  return O;\n};\n\nvar $create = function create(O, Properties) {\n  return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n  var P = toPropertyKey(V);\n  var enumerable = call(nativePropertyIsEnumerable, this, P);\n  if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n  return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n    ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n  var it = toIndexedObject(O);\n  var key = toPropertyKey(P);\n  if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n  var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n  if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n    descriptor.enumerable = true;\n  }\n  return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n  var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n  });\n  return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n  var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n  var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n      push(result, AllSymbols[key]);\n    }\n  });\n  return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n  $Symbol = function Symbol() {\n    if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');\n    var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n    var tag = uid(description);\n    var setter = function (value) {\n      if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n      if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n    };\n    if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n    return wrap(tag, description);\n  };\n\n  SymbolPrototype = $Symbol[PROTOTYPE];\n\n  redefine(SymbolPrototype, 'toString', function toString() {\n    return getInternalState(this).tag;\n  });\n\n  redefine($Symbol, 'withoutSetter', function (description) {\n    return wrap(uid(description), description);\n  });\n\n  propertyIsEnumerableModule.f = $propertyIsEnumerable;\n  definePropertyModule.f = $defineProperty;\n  definePropertiesModule.f = $defineProperties;\n  getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n  getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n  getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n  wrappedWellKnownSymbolModule.f = function (name) {\n    return wrap(wellKnownSymbol(name), name);\n  };\n\n  if (DESCRIPTORS) {\n    // https://github.com/tc39/proposal-Symbol-description\n    nativeDefineProperty(SymbolPrototype, 'description', {\n      configurable: true,\n      get: function description() {\n        return getInternalState(this).description;\n      }\n    });\n    if (!IS_PURE) {\n      redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n    }\n  }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n  Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n  defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Symbol.for` method\n  // https://tc39.es/ecma262/#sec-symbol.for\n  'for': function (key) {\n    var string = $toString(key);\n    if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n    var symbol = $Symbol(string);\n    StringToSymbolRegistry[string] = symbol;\n    SymbolToStringRegistry[symbol] = string;\n    return symbol;\n  },\n  // `Symbol.keyFor` method\n  // https://tc39.es/ecma262/#sec-symbol.keyfor\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n    if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n  },\n  useSetter: function () { USE_SETTER = true; },\n  useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n  // `Object.create` method\n  // https://tc39.es/ecma262/#sec-object.create\n  create: $create,\n  // `Object.defineProperty` method\n  // https://tc39.es/ecma262/#sec-object.defineproperty\n  defineProperty: $defineProperty,\n  // `Object.defineProperties` method\n  // https://tc39.es/ecma262/#sec-object.defineproperties\n  defineProperties: $defineProperties,\n  // `Object.getOwnPropertyDescriptor` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Object.getOwnPropertyNames` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertynames\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // `Object.getOwnPropertySymbols` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return getOwnPropertySymbolsModule.f(toObject(it));\n  }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n  var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n    var symbol = $Symbol();\n    // MS Edge converts symbol values to JSON as {}\n    return $stringify([symbol]) != '[null]'\n      // WebKit converts symbol values to JSON as null\n      || $stringify({ a: symbol }) != '{}'\n      // V8 throws on boxed symbols\n      || $stringify(Object(symbol)) != '{}';\n  });\n\n  $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n    // eslint-disable-next-line no-unused-vars -- required for `.length`\n    stringify: function stringify(it, replacer, space) {\n      var args = arraySlice(arguments);\n      var $replacer = replacer;\n      if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n      if (!isArray(replacer)) replacer = function (key, value) {\n        if (isCallable($replacer)) value = call($replacer, this, key, value);\n        if (!isSymbol(value)) return value;\n      };\n      args[1] = replacer;\n      return apply($stringify, null, args);\n    }\n  });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!SymbolPrototype[TO_PRIMITIVE]) {\n  var valueOf = SymbolPrototype.valueOf;\n  // eslint-disable-next-line no-unused-vars -- required for .length\n  redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n    // TODO: improve hint logic\n    return call(valueOf, this);\n  });\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n", "// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar toString = require('../internals/to-string');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\nvar SymbolPrototype = NativeSymbol && NativeSymbol.prototype;\n\nif (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||\n  // Safari 12 bug\n  NativeSymbol().description !== undefined\n)) {\n  var EmptyStringDescriptionStore = {};\n  // wrap Symbol constructor for correct work with undefined description\n  var SymbolWrapper = function Symbol() {\n    var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);\n    var result = isPrototypeOf(SymbolPrototype, this)\n      ? new NativeSymbol(description)\n      // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n      : description === undefined ? NativeSymbol() : NativeSymbol(description);\n    if (description === '') EmptyStringDescriptionStore[result] = true;\n    return result;\n  };\n\n  copyConstructorProperties(SymbolWrapper, NativeSymbol);\n  SymbolWrapper.prototype = SymbolPrototype;\n  SymbolPrototype.constructor = SymbolWrapper;\n\n  var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';\n  var symbolToString = uncurryThis(SymbolPrototype.toString);\n  var symbolValueOf = uncurryThis(SymbolPrototype.valueOf);\n  var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n  var replace = uncurryThis(''.replace);\n  var stringSlice = uncurryThis(''.slice);\n\n  defineProperty(SymbolPrototype, 'description', {\n    configurable: true,\n    get: function description() {\n      var symbol = symbolValueOf(this);\n      var string = symbolToString(symbol);\n      if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';\n      var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');\n      return desc === '' ? undefined : desc;\n    }\n  });\n\n  $({ global: true, forced: true }, {\n    Symbol: SymbolWrapper\n  });\n}\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n", "var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n  if (CollectionPrototype) {\n    // some Chrome versions have non-configurable methods on DOMTokenList\n    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n    } catch (error) {\n      CollectionPrototype[ITERATOR] = ArrayValues;\n    }\n    if (!CollectionPrototype[TO_STRING_TAG]) {\n      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n    }\n    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n      // some Chrome versions have non-configurable methods on DOMTokenList\n      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n      } catch (error) {\n        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n      }\n    }\n  }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n", "var DESCRIPTORS = require('../internals/descriptors');\nvar FUNCTION_NAME_EXISTS = require('../internals/function-name').EXISTS;\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar functionToString = uncurryThis(FunctionPrototype.toString);\nvar nameRE = /function\\b(?:\\s|\\/\\*[\\S\\s]*?\\*\\/|\\/\\/[^\\n\\r]*[\\n\\r]+)*([^\\s(/]*)/;\nvar regExpExec = uncurryThis(nameRE.exec);\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {\n  defineProperty(FunctionPrototype, NAME, {\n    configurable: true,\n    get: function () {\n      try {\n        return regExpExec(nameRE, functionToString(this))[1];\n      } catch (error) {\n        return '';\n      }\n    }\n  });\n}\n", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/es.regexp.constructor.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.string.trim.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport { hasCaptionProblem, isClassListSupported, isTextContentSupported, isGetComputedStyleSupported } from \"../feature.mjs\";\nimport { isSafari, isIE9 } from \"../browser.mjs\";\nimport { sanitize } from \"../string.mjs\";\n/**\n * Get the parent of the specified node in the DOM tree.\n *\n * @param {HTMLElement} element Element from which traversing is started.\n * @param {number} [level=0] Traversing deep level.\n * @returns {HTMLElement|null}\n */\n\nexport function getParent(element) {\n  var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var iteration = -1;\n  var parent = null;\n  var elementToCheck = element;\n\n  while (elementToCheck !== null) {\n    if (iteration === level) {\n      parent = elementToCheck;\n      break;\n    }\n\n    if (elementToCheck.host && elementToCheck.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      elementToCheck = elementToCheck.host;\n    } else {\n      iteration += 1;\n      elementToCheck = elementToCheck.parentNode;\n    }\n  }\n\n  return parent;\n}\n/**\n * Gets `frameElement` of the specified frame. Returns null if it is a top frame or if script has no access to read property.\n *\n * @param {Window} frame Frame from which should be get frameElement in safe way.\n * @returns {HTMLIFrameElement|null}\n */\n\nexport function getFrameElement(frame) {\n  return Object.getPrototypeOf(frame.parent) && frame.frameElement;\n}\n/**\n * Gets parent frame of the specified frame. Returns null if it is a top frame or if script has no access to read property.\n *\n * @param {Window} frame Frame from which should be get frameElement in safe way.\n * @returns {Window|null}\n */\n\nexport function getParentWindow(frame) {\n  return getFrameElement(frame) && frame.parent;\n}\n/**\n * Checks if script has access to read from parent frame of specified frame.\n *\n * @param {Window} frame Frame from which should be get frameElement in safe way.\n * @returns {boolean}\n */\n\nexport function hasAccessToParentWindow(frame) {\n  return !!Object.getPrototypeOf(frame.parent);\n}\n/**\n * Goes up the DOM tree (including given element) until it finds an parent element that matches the nodes or nodes name.\n * This method goes up through web components.\n *\n * @param {Node} element Element from which traversing is started.\n * @param {Array<string|Node>} [nodes] Array of elements or Array of elements name (in uppercase form).\n * @param {Node} [until] The element until the traversing ends.\n * @returns {Node|null}\n */\n\nexport function closest(element) {\n  var nodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n  var until = arguments.length > 2 ? arguments[2] : undefined;\n  var _Node = Node,\n      ELEMENT_NODE = _Node.ELEMENT_NODE,\n      DOCUMENT_FRAGMENT_NODE = _Node.DOCUMENT_FRAGMENT_NODE;\n  var elementToCheck = element;\n\n  while (elementToCheck !== null && elementToCheck !== void 0 && elementToCheck !== until) {\n    var _elementToCheck = elementToCheck,\n        nodeType = _elementToCheck.nodeType,\n        nodeName = _elementToCheck.nodeName;\n\n    if (nodeType === ELEMENT_NODE && (nodes.includes(nodeName) || nodes.includes(elementToCheck))) {\n      return elementToCheck;\n    }\n\n    var _elementToCheck2 = elementToCheck,\n        host = _elementToCheck2.host;\n\n    if (host && nodeType === DOCUMENT_FRAGMENT_NODE) {\n      elementToCheck = host;\n    } else {\n      elementToCheck = elementToCheck.parentNode;\n    }\n  }\n\n  return null;\n}\n/**\n * Goes \"down\" the DOM tree (including given element) until it finds an element that matches the nodes or nodes name.\n *\n * @param {HTMLElement} element Element from which traversing is started.\n * @param {Array} nodes Array of elements or Array of elements name.\n * @param {HTMLElement} [until] The list of elements until the traversing ends.\n * @returns {HTMLElement|null}\n */\n\nexport function closestDown(element, nodes, until) {\n  var matched = [];\n  var elementToCheck = element;\n\n  while (elementToCheck) {\n    elementToCheck = closest(elementToCheck, nodes, until);\n\n    if (!elementToCheck || until && !until.contains(elementToCheck)) {\n      break;\n    }\n\n    matched.push(elementToCheck);\n\n    if (elementToCheck.host && elementToCheck.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      elementToCheck = elementToCheck.host;\n    } else {\n      elementToCheck = elementToCheck.parentNode;\n    }\n  }\n\n  var length = matched.length;\n  return length ? matched[length - 1] : null;\n}\n/**\n * Goes up the DOM tree and checks if element is child of another element.\n *\n * @param {HTMLElement} child Child element An element to check.\n * @param {object|string} parent Parent element OR selector of the parent element.\n *                               If string provided, function returns `true` for the first occurrence of element with that class.\n * @returns {boolean}\n */\n\nexport function isChildOf(child, parent) {\n  var node = child.parentNode;\n  var queriedParents = [];\n\n  if (typeof parent === 'string') {\n    if (child.defaultView) {\n      queriedParents = Array.prototype.slice.call(child.querySelectorAll(parent), 0);\n    } else {\n      queriedParents = Array.prototype.slice.call(child.ownerDocument.querySelectorAll(parent), 0);\n    }\n  } else {\n    queriedParents.push(parent);\n  }\n\n  while (node !== null) {\n    if (queriedParents.indexOf(node) > -1) {\n      return true;\n    }\n\n    node = node.parentNode;\n  }\n\n  return false;\n}\n/**\n * Counts index of element within its parent.\n * WARNING: for performance reasons, assumes there are only element nodes (no text nodes). This is true\n * for Walkotnable, otherwise would need to check for nodeType or use previousElementSibling.\n *\n * @see http://jsperf.com/sibling-index/10\n * @param {Element} element The element to check.\n * @returns {number}\n */\n\nexport function index(element) {\n  var i = 0;\n  var elementToCheck = element;\n\n  if (elementToCheck.previousSibling) {\n    /* eslint-disable no-cond-assign */\n    while (elementToCheck = elementToCheck.previousSibling) {\n      i += 1;\n    }\n  }\n\n  return i;\n}\n/**\n * Check if the provided overlay contains the provided element.\n *\n * @param {string} overlayType The type of the overlay.\n * @param {HTMLElement} element An element to check.\n * @param {HTMLElement} root The root element.\n * @returns {boolean}\n */\n\nexport function overlayContainsElement(overlayType, element, root) {\n  var overlayElement = root.parentElement.querySelector(\".ht_clone_\".concat(overlayType));\n  return overlayElement ? overlayElement.contains(element) : null;\n}\n\nvar _hasClass;\n\nvar _addClass;\n\nvar _removeClass;\n/**\n * @param {string} classNames The element \"class\" attribute string.\n * @returns {string[]}\n */\n\n\nfunction filterEmptyClassNames(classNames) {\n  if (!classNames || !classNames.length) {\n    return [];\n  }\n\n  return classNames.filter(function (x) {\n    return !!x;\n  });\n}\n\nif (isClassListSupported()) {\n  var isSupportMultipleClassesArg = function isSupportMultipleClassesArg(rootDocument) {\n    var element = rootDocument.createElement('div');\n    element.classList.add('test', 'test2');\n    return element.classList.contains('test2');\n  };\n\n  _hasClass = function _hasClass(element, className) {\n    if (element.classList === void 0 || typeof className !== 'string' || className === '') {\n      return false;\n    }\n\n    return element.classList.contains(className);\n  };\n\n  _addClass = function _addClass(element, classes) {\n    var rootDocument = element.ownerDocument;\n    var className = classes;\n\n    if (typeof className === 'string') {\n      className = className.split(' ');\n    }\n\n    className = filterEmptyClassNames(className);\n\n    if (className.length > 0) {\n      if (isSupportMultipleClassesArg(rootDocument)) {\n        var _element$classList;\n\n        (_element$classList = element.classList).add.apply(_element$classList, _toConsumableArray(className));\n      } else {\n        var len = 0;\n\n        while (className[len]) {\n          element.classList.add(className[len]);\n          len += 1;\n        }\n      }\n    }\n  };\n\n  _removeClass = function _removeClass(element, classes) {\n    var rootDocument = element.ownerDocument;\n    var className = classes;\n\n    if (typeof className === 'string') {\n      className = className.split(' ');\n    }\n\n    className = filterEmptyClassNames(className);\n\n    if (className.length > 0) {\n      if (isSupportMultipleClassesArg(rootDocument)) {\n        var _element$classList2;\n\n        (_element$classList2 = element.classList).remove.apply(_element$classList2, _toConsumableArray(className));\n      } else {\n        var len = 0;\n\n        while (className[len]) {\n          element.classList.remove(className[len]);\n          len += 1;\n        }\n      }\n    }\n  };\n} else {\n  var createClassNameRegExp = function createClassNameRegExp(className) {\n    return new RegExp(\"(\\\\s|^)\".concat(className, \"(\\\\s|$)\"));\n  };\n\n  _hasClass = function _hasClass(element, className) {\n    // http://snipplr.com/view/3561/addclass-removeclass-hasclass/\n    return element.className !== void 0 && createClassNameRegExp(className).test(element.className);\n  };\n\n  _addClass = function _addClass(element, classes) {\n    var _className = element.className;\n    var className = classes;\n\n    if (typeof className === 'string') {\n      className = className.split(' ');\n    }\n\n    className = filterEmptyClassNames(className);\n\n    if (_className === '') {\n      _className = className.join(' ');\n    } else {\n      for (var len = 0; len < className.length; len++) {\n        if (className[len] && !createClassNameRegExp(className[len]).test(_className)) {\n          _className += \" \".concat(className[len]);\n        }\n      }\n    }\n\n    element.className = _className;\n  };\n\n  _removeClass = function _removeClass(element, classes) {\n    var len = 0;\n    var _className = element.className;\n    var className = classes;\n\n    if (typeof className === 'string') {\n      className = className.split(' ');\n    }\n\n    className = filterEmptyClassNames(className);\n\n    while (className[len]) {\n      // String.prototype.trim is defined in polyfill.js\n      _className = _className.replace(createClassNameRegExp(className[len]), ' ').trim();\n      len += 1;\n    }\n\n    if (element.className !== _className) {\n      element.className = _className;\n    }\n  };\n}\n/**\n * Checks if element has class name.\n *\n * @param {HTMLElement} element An element to check.\n * @param {string} className Class name to check.\n * @returns {boolean}\n */\n\n\nexport function hasClass(element, className) {\n  return _hasClass(element, className);\n}\n/**\n * Add class name to an element.\n *\n * @param {HTMLElement} element An element to process.\n * @param {string|Array} className Class name as string or array of strings.\n */\n\nexport function addClass(element, className) {\n  _addClass(element, className);\n}\n/**\n * Remove class name from an element.\n *\n * @param {HTMLElement} element An element to process.\n * @param {string|Array} className Class name as string or array of strings.\n */\n\nexport function removeClass(element, className) {\n  _removeClass(element, className);\n}\n/**\n * @param {HTMLElement} element An element from the text is removed.\n */\n\nexport function removeTextNodes(element) {\n  if (element.nodeType === 3) {\n    element.parentNode.removeChild(element); // bye text nodes!\n  } else if (['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR'].indexOf(element.nodeName) > -1) {\n    var childs = element.childNodes;\n\n    for (var i = childs.length - 1; i >= 0; i--) {\n      removeTextNodes(childs[i]);\n    }\n  }\n}\n/**\n * Remove childs function\n * WARNING - this doesn't unload events and data attached by jQuery\n * http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/9\n * http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/11 - no siginificant improvement with Chrome remove() method.\n *\n * @param {HTMLElement} element An element to clear.\n */\n\nexport function empty(element) {\n  var child;\n  /* eslint-disable no-cond-assign */\n\n  while (child = element.lastChild) {\n    element.removeChild(child);\n  }\n}\nexport var HTML_CHARACTERS = /(<(.*)>|&(.*);)/;\n/**\n * Insert content into element trying avoid innerHTML method.\n *\n * @param {HTMLElement} element An element to write into.\n * @param {string} content The text to write.\n * @param {boolean} [sanitizeContent=true] If `true`, the content will be sanitized before writing to the element.\n */\n\nexport function fastInnerHTML(element, content) {\n  var sanitizeContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n  if (HTML_CHARACTERS.test(content)) {\n    element.innerHTML = sanitizeContent ? sanitize(content) : content;\n  } else {\n    fastInnerText(element, content);\n  }\n}\n/**\n * Insert text content into element.\n *\n * @param {HTMLElement} element An element to write into.\n * @param {string} content The text to write.\n */\n\nexport function fastInnerText(element, content) {\n  var child = element.firstChild;\n\n  if (child && child.nodeType === 3 && child.nextSibling === null) {\n    // fast lane - replace existing text node\n    if (isTextContentSupported) {\n      // http://jsperf.com/replace-text-vs-reuse\n      child.textContent = content;\n    } else {\n      // http://jsperf.com/replace-text-vs-reuse\n      child.data = content;\n    }\n  } else {\n    // slow lane - empty element and insert a text node\n    empty(element);\n    element.appendChild(element.ownerDocument.createTextNode(content));\n  }\n}\n/**\n * Returns true if element is attached to the DOM and visible, false otherwise.\n *\n * @param {HTMLElement} element An element to check.\n * @returns {boolean}\n */\n\nexport function isVisible(element) {\n  var documentElement = element.ownerDocument.documentElement;\n  var next = element;\n\n  while (next !== documentElement) {\n    // until <html> reached\n    if (next === null) {\n      // parent detached from DOM\n      return false;\n    } else if (next.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      if (next.host) {\n        // this is Web Components Shadow DOM\n        // see: http://w3c.github.io/webcomponents/spec/shadow/#encapsulation\n        // according to spec, should be if (next.ownerDocument !== window.document), but that doesn't work yet\n        if (next.host.impl) {\n          // Chrome 33.0.1723.0 canary (2013-11-29) Web Platform features disabled\n          return isVisible(next.host.impl);\n        } else if (next.host) {\n          // Chrome 33.0.1723.0 canary (2013-11-29) Web Platform features enabled\n          return isVisible(next.host);\n        }\n\n        throw new Error('Lost in Web Components world');\n      } else {\n        return false; // this is a node detached from document in IE8\n      }\n    } else if (next.style && next.style.display === 'none') {\n      return false;\n    }\n\n    next = next.parentNode;\n  }\n\n  return true;\n}\n/**\n * Returns elements top and left offset relative to the document. Function is not compatible with jQuery offset.\n *\n * @param {HTMLElement} element An element to get the offset position from.\n * @returns {object} Returns object with `top` and `left` props.\n */\n\nexport function offset(element) {\n  var rootDocument = element.ownerDocument;\n  var rootWindow = rootDocument.defaultView;\n  var documentElement = rootDocument.documentElement;\n  var elementToCheck = element;\n  var offsetLeft;\n  var offsetTop;\n  var lastElem;\n  var box;\n\n  if (hasCaptionProblem() && elementToCheck.firstChild && elementToCheck.firstChild.nodeName === 'CAPTION') {\n    // fixes problem with Firefox ignoring <caption> in TABLE offset (see also export outerHeight)\n    // http://jsperf.com/offset-vs-getboundingclientrect/8\n    box = elementToCheck.getBoundingClientRect();\n    return {\n      top: box.top + (rootWindow.pageYOffset || documentElement.scrollTop) - (documentElement.clientTop || 0),\n      left: box.left + (rootWindow.pageXOffset || documentElement.scrollLeft) - (documentElement.clientLeft || 0)\n    };\n  }\n\n  offsetLeft = elementToCheck.offsetLeft;\n  offsetTop = elementToCheck.offsetTop;\n  lastElem = elementToCheck;\n  /* eslint-disable no-cond-assign */\n\n  while (elementToCheck = elementToCheck.offsetParent) {\n    // from my observation, document.body always has scrollLeft/scrollTop == 0\n    if (elementToCheck === rootDocument.body) {\n      break;\n    }\n\n    offsetLeft += elementToCheck.offsetLeft;\n    offsetTop += elementToCheck.offsetTop;\n    lastElem = elementToCheck;\n  } // slow - http://jsperf.com/offset-vs-getboundingclientrect/6\n\n\n  if (lastElem && lastElem.style.position === 'fixed') {\n    // if(lastElem !== document.body) { //faster but does gives false positive in Firefox\n    offsetLeft += rootWindow.pageXOffset || documentElement.scrollLeft;\n    offsetTop += rootWindow.pageYOffset || documentElement.scrollTop;\n  }\n\n  return {\n    left: offsetLeft,\n    top: offsetTop\n  };\n}\n/**\n * Returns the document's scrollTop property.\n *\n * @param {Window} [rootWindow] The document window owner.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\n\nexport function getWindowScrollTop() {\n  var rootWindow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window;\n  var res = rootWindow.scrollY;\n\n  if (res === void 0) {\n    // IE8-11\n    res = rootWindow.document.documentElement.scrollTop;\n  }\n\n  return res;\n}\n/**\n * Returns the document's scrollLeft property.\n *\n * @param {Window} [rootWindow] The document window owner.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\n\nexport function getWindowScrollLeft() {\n  var rootWindow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window;\n  var res = rootWindow.scrollX;\n\n  if (res === void 0) {\n    // IE8-11\n    res = rootWindow.document.documentElement.scrollLeft;\n  }\n\n  return res;\n}\n/**\n * Returns the provided element's scrollTop property.\n *\n * @param {HTMLElement} element An element to get the scroll top position from.\n * @param {Window} [rootWindow] The document window owner.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\n\nexport function getScrollTop(element) {\n  var rootWindow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n\n  if (element === rootWindow) {\n    return getWindowScrollTop(rootWindow);\n  }\n\n  return element.scrollTop;\n}\n/**\n * Returns the provided element's scrollLeft property.\n *\n * @param {HTMLElement} element An element to get the scroll left position from.\n * @param {Window} [rootWindow] The document window owner.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\n\nexport function getScrollLeft(element) {\n  var rootWindow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n\n  if (element === rootWindow) {\n    return getWindowScrollLeft(rootWindow);\n  }\n\n  return element.scrollLeft;\n}\n/**\n * Returns a DOM element responsible for scrolling of the provided element.\n *\n * @param {HTMLElement} element An element to get the scrollable element from.\n * @returns {HTMLElement} Element's scrollable parent.\n */\n\nexport function getScrollableElement(element) {\n  var rootDocument = element.ownerDocument;\n  var rootWindow = rootDocument ? rootDocument.defaultView : void 0;\n\n  if (!rootDocument) {\n    rootDocument = element.document ? element.document : element;\n    rootWindow = rootDocument.defaultView;\n  }\n\n  var props = ['auto', 'scroll'];\n  var supportedGetComputedStyle = isGetComputedStyleSupported();\n  var el = element.parentNode;\n\n  while (el && el.style && rootDocument.body !== el) {\n    var _el$style = el.style,\n        overflow = _el$style.overflow,\n        overflowX = _el$style.overflowX,\n        overflowY = _el$style.overflowY;\n\n    if ([overflow, overflowX, overflowY].includes('scroll')) {\n      return el;\n    } else if (supportedGetComputedStyle) {\n      var _rootWindow$getComput = rootWindow.getComputedStyle(el);\n\n      overflow = _rootWindow$getComput.overflow;\n      overflowX = _rootWindow$getComput.overflowX;\n      overflowY = _rootWindow$getComput.overflowY;\n\n      if (props.includes(overflow) || props.includes(overflowX) || props.includes(overflowY)) {\n        return el;\n      }\n    } // The '+ 1' after the scrollHeight/scrollWidth is to prevent problems with zoomed out Chrome.\n\n\n    if (el.clientHeight <= el.scrollHeight + 1 && (props.includes(overflowY) || props.includes(overflow))) {\n      return el;\n    }\n\n    if (el.clientWidth <= el.scrollWidth + 1 && (props.includes(overflowX) || props.includes(overflow))) {\n      return el;\n    }\n\n    el = el.parentNode;\n  }\n\n  return rootWindow;\n}\n/**\n * Returns a DOM element responsible for trimming the provided element.\n *\n * @param {HTMLElement} base Base element.\n * @returns {HTMLElement} Base element's trimming parent.\n */\n\nexport function getTrimmingContainer(base) {\n  var rootDocument = base.ownerDocument;\n  var rootWindow = rootDocument.defaultView;\n  var el = base.parentNode;\n\n  while (el && el.style && rootDocument.body !== el) {\n    if (el.style.overflow !== 'visible' && el.style.overflow !== '') {\n      return el;\n    }\n\n    var computedStyle = getComputedStyle(el, rootWindow);\n    var allowedProperties = ['scroll', 'hidden', 'auto'];\n    var property = computedStyle.getPropertyValue('overflow');\n    var propertyY = computedStyle.getPropertyValue('overflow-y');\n    var propertyX = computedStyle.getPropertyValue('overflow-x');\n\n    if (allowedProperties.includes(property) || allowedProperties.includes(propertyY) || allowedProperties.includes(propertyX)) {\n      return el;\n    }\n\n    el = el.parentNode;\n  }\n\n  return rootWindow;\n}\n/**\n * Returns a style property for the provided element. (Be it an inline or external style).\n *\n * @param {HTMLElement} element An element to get the style from.\n * @param {string} prop Wanted property.\n * @param {Window} [rootWindow] The document window owner.\n * @returns {string|undefined} Element's style property.\n */\n// eslint-disable-next-line no-restricted-globals\n\nexport function getStyle(element, prop) {\n  var rootWindow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : window;\n\n  if (!element) {\n    return;\n  } else if (element === rootWindow) {\n    if (prop === 'width') {\n      return \"\".concat(rootWindow.innerWidth, \"px\");\n    } else if (prop === 'height') {\n      return \"\".concat(rootWindow.innerHeight, \"px\");\n    }\n\n    return;\n  }\n\n  var styleProp = element.style[prop];\n\n  if (styleProp !== '' && styleProp !== void 0) {\n    return styleProp;\n  }\n\n  var computedStyle = getComputedStyle(element, rootWindow);\n\n  if (computedStyle[prop] !== '' && computedStyle[prop] !== void 0) {\n    return computedStyle[prop];\n  }\n}\n/**\n * Verifies if element fit to provided CSSRule.\n *\n * @param {Element} element Element to verify with selector text.\n * @param {CSSRule} rule Selector text from CSSRule.\n * @returns {boolean}\n */\n\nexport function matchesCSSRules(element, rule) {\n  var selectorText = rule.selectorText;\n  var result = false;\n\n  if (rule.type === CSSRule.STYLE_RULE && selectorText) {\n    if (element.msMatchesSelector) {\n      result = element.msMatchesSelector(selectorText);\n    } else if (element.matches) {\n      result = element.matches(selectorText);\n    }\n  }\n\n  return result;\n}\n/**\n * Returns a computed style object for the provided element. (Needed if style is declared in external stylesheet).\n *\n * @param {HTMLElement} element An element to get style from.\n * @param {Window} [rootWindow] The document window owner.\n * @returns {IEElementStyle|CssStyle} Elements computed style object.\n */\n// eslint-disable-next-line no-restricted-globals\n\nexport function getComputedStyle(element) {\n  var rootWindow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n  return element.currentStyle || rootWindow.getComputedStyle(element);\n}\n/**\n * Returns the element's outer width.\n *\n * @param {HTMLElement} element An element to get the width from.\n * @returns {number} Element's outer width.\n */\n\nexport function outerWidth(element) {\n  return element.offsetWidth;\n}\n/**\n * Returns the element's outer height.\n *\n * @param {HTMLElement} element An element to get the height from.\n * @returns {number} Element's outer height.\n */\n\nexport function outerHeight(element) {\n  if (hasCaptionProblem() && element.firstChild && element.firstChild.nodeName === 'CAPTION') {\n    // fixes problem with Firefox ignoring <caption> in TABLE.offsetHeight\n    // jQuery (1.10.1) still has this unsolved\n    // may be better to just switch to getBoundingClientRect\n    // http://bililite.com/blog/2009/03/27/finding-the-size-of-a-table/\n    // http://lists.w3.org/Archives/Public/www-style/2009Oct/0089.html\n    // http://bugs.jquery.com/ticket/2196\n    // http://lists.w3.org/Archives/Public/www-style/2009Oct/0140.html#start140\n    return element.offsetHeight + element.firstChild.offsetHeight;\n  }\n\n  return element.offsetHeight;\n}\n/**\n * Returns the element's inner height.\n *\n * @param {HTMLElement} element An element to get the height from.\n * @returns {number} Element's inner height.\n */\n\nexport function innerHeight(element) {\n  return element.clientHeight || element.innerHeight;\n}\n/**\n * Returns the element's inner width.\n *\n * @param {HTMLElement} element An element to get the width from.\n * @returns {number} Element's inner width.\n */\n\nexport function innerWidth(element) {\n  return element.clientWidth || element.innerWidth;\n}\n/**\n * @param {HTMLElement} element An element to which the event is added.\n * @param {string} event The event name.\n * @param {Function} callback The callback to add.\n */\n\nexport function addEvent(element, event, callback) {\n  element.addEventListener(event, callback, false);\n}\n/**\n * @param {HTMLElement} element An element from which the event is removed.\n * @param {string} event The event name.\n * @param {Function} callback The function reference to remove.\n */\n\nexport function removeEvent(element, event, callback) {\n  element.removeEventListener(event, callback, false);\n}\n/**\n * Returns caret position in text input.\n *\n * @author https://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea\n * @param {HTMLElement} el An element to check.\n * @returns {number}\n */\n\nexport function getCaretPosition(el) {\n  var rootDocument = el.ownerDocument;\n\n  if (el.selectionStart) {\n    return el.selectionStart;\n  } else if (rootDocument.selection) {\n    // IE8\n    el.focus();\n    var r = rootDocument.selection.createRange();\n\n    if (r === null) {\n      return 0;\n    }\n\n    var re = el.createTextRange();\n    var rc = re.duplicate();\n    re.moveToBookmark(r.getBookmark());\n    rc.setEndPoint('EndToStart', re);\n    return rc.text.length;\n  }\n\n  return 0;\n}\n/**\n * Returns end of the selection in text input.\n *\n * @param {HTMLElement} el An element to check.\n * @returns {number}\n */\n\nexport function getSelectionEndPosition(el) {\n  var rootDocument = el.ownerDocument;\n\n  if (el.selectionEnd) {\n    return el.selectionEnd;\n  } else if (rootDocument.selection) {\n    // IE8\n    var r = rootDocument.selection.createRange();\n\n    if (r === null) {\n      return 0;\n    }\n\n    var re = el.createTextRange();\n    return re.text.indexOf(r.text) + r.text.length;\n  }\n\n  return 0;\n}\n/**\n * Returns text under selection.\n *\n * @param {Window} [rootWindow] The document window owner.\n * @returns {string}\n */\n// eslint-disable-next-line no-restricted-globals\n\nexport function getSelectionText() {\n  var rootWindow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window;\n  var rootDocument = rootWindow.document;\n  var text = '';\n\n  if (rootWindow.getSelection) {\n    text = rootWindow.getSelection().toString();\n  } else if (rootDocument.selection && rootDocument.selection.type !== 'Control') {\n    text = rootDocument.selection.createRange().text;\n  }\n\n  return text;\n}\n/**\n * Cross-platform helper to clear text selection.\n *\n * @param {Window} [rootWindow] The document window owner.\n */\n// eslint-disable-next-line no-restricted-globals\n\nexport function clearTextSelection() {\n  var rootWindow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window;\n  var rootDocument = rootWindow.document; // http://stackoverflow.com/questions/3169786/clear-text-selection-with-javascript\n\n  if (rootWindow.getSelection) {\n    if (rootWindow.getSelection().empty) {\n      // Chrome\n      rootWindow.getSelection().empty();\n    } else if (rootWindow.getSelection().removeAllRanges) {\n      // Firefox\n      rootWindow.getSelection().removeAllRanges();\n    }\n  } else if (rootDocument.selection) {\n    // IE?\n    rootDocument.selection.empty();\n  }\n}\n/**\n * Sets caret position in text input.\n *\n * @author http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/\n * @param {Element} element An element to process.\n * @param {number} pos The selection start position.\n * @param {number} endPos The selection end position.\n */\n\nexport function setCaretPosition(element, pos, endPos) {\n  if (endPos === void 0) {\n    endPos = pos;\n  }\n\n  if (element.setSelectionRange) {\n    element.focus();\n\n    try {\n      element.setSelectionRange(pos, endPos);\n    } catch (err) {\n      var elementParent = element.parentNode;\n      var parentDisplayValue = elementParent.style.display;\n      elementParent.style.display = 'block';\n      element.setSelectionRange(pos, endPos);\n      elementParent.style.display = parentDisplayValue;\n    }\n  }\n}\nvar cachedScrollbarWidth;\n/**\n * Helper to calculate scrollbar width.\n * Source: https://stackoverflow.com/questions/986937/how-can-i-get-the-browsers-scrollbar-sizes.\n *\n * @private\n * @param {Document} rootDocument The onwer of the document.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\n\nfunction walkontableCalculateScrollbarWidth() {\n  var rootDocument = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;\n  var inner = rootDocument.createElement('div');\n  inner.style.height = '200px';\n  inner.style.width = '100%';\n  var outer = rootDocument.createElement('div');\n  outer.style.boxSizing = 'content-box';\n  outer.style.height = '150px';\n  outer.style.left = '0px';\n  outer.style.overflow = 'hidden';\n  outer.style.position = 'absolute';\n  outer.style.top = '0px';\n  outer.style.width = '200px';\n  outer.style.visibility = 'hidden';\n  outer.appendChild(inner);\n  (rootDocument.body || rootDocument.documentElement).appendChild(outer);\n  var w1 = inner.offsetWidth;\n  outer.style.overflow = 'scroll';\n  var w2 = inner.offsetWidth;\n\n  if (w1 === w2) {\n    w2 = outer.clientWidth;\n  }\n\n  (rootDocument.body || rootDocument.documentElement).removeChild(outer);\n  return w1 - w2;\n}\n/**\n * Returns the computed width of the native browser scroll bar.\n *\n * @param {Document} [rootDocument] The owner of the document.\n * @returns {number} Width.\n */\n// eslint-disable-next-line no-restricted-globals\n\n\nexport function getScrollbarWidth() {\n  var rootDocument = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;\n\n  if (cachedScrollbarWidth === void 0) {\n    cachedScrollbarWidth = walkontableCalculateScrollbarWidth(rootDocument);\n  }\n\n  return cachedScrollbarWidth;\n}\n/**\n * Checks if the provided element has a vertical scrollbar.\n *\n * @param {HTMLElement} element An element to check.\n * @returns {boolean}\n */\n\nexport function hasVerticalScrollbar(element) {\n  return element.offsetWidth !== element.clientWidth;\n}\n/**\n * Checks if the provided element has a vertical scrollbar.\n *\n * @param {HTMLElement} element An element to check.\n * @returns {boolean}\n */\n\nexport function hasHorizontalScrollbar(element) {\n  return element.offsetHeight !== element.clientHeight;\n}\n/**\n * Sets overlay position depending on it's type and used browser.\n *\n * @param {HTMLElement} overlayElem An element to process.\n * @param {number|string} left The left position of the overlay.\n * @param {number|string} top The top position of the overlay.\n */\n\nexport function setOverlayPosition(overlayElem, left, top) {\n  if (isIE9()) {\n    overlayElem.style.top = top;\n    overlayElem.style.left = left;\n  } else if (isSafari()) {\n    overlayElem.style['-webkit-transform'] = \"translate3d(\".concat(left, \",\").concat(top, \",0)\");\n  } else {\n    overlayElem.style.transform = \"translate3d(\".concat(left, \",\").concat(top, \",0)\");\n  }\n}\n/**\n * @param {HTMLElement} element An element to process.\n * @returns {number|Array}\n */\n\nexport function getCssTransform(element) {\n  var transform;\n\n  if (element.style.transform && (transform = element.style.transform) !== '') {\n    return ['transform', transform];\n  } else if (element.style['-webkit-transform'] && (transform = element.style['-webkit-transform']) !== '') {\n    return ['-webkit-transform', transform];\n  }\n\n  return -1;\n}\n/**\n * @param {HTMLElement} element An element to process.\n */\n\nexport function resetCssTransform(element) {\n  if (element.style.transform && element.style.transform !== '') {\n    element.style.transform = '';\n  } else if (element.style['-webkit-transform'] && element.style['-webkit-transform'] !== '') {\n    element.style['-webkit-transform'] = '';\n  }\n}\n/**\n * Determines if the given DOM element is an input field.\n * Notice: By 'input' we mean input, textarea and select nodes.\n *\n * @param {HTMLElement} element - DOM element.\n * @returns {boolean}\n */\n\nexport function isInput(element) {\n  var inputs = ['INPUT', 'SELECT', 'TEXTAREA'];\n  return element && (inputs.indexOf(element.nodeName) > -1 || element.contentEditable === 'true');\n}\n/**\n * Determines if the given DOM element is an input field placed OUTSIDE of HOT.\n * Notice: By 'input' we mean input, textarea and select nodes which have defined 'data-hot-input' attribute.\n *\n * @param {HTMLElement} element - DOM element.\n * @returns {boolean}\n */\n\nexport function isOutsideInput(element) {\n  return isInput(element) && element.hasAttribute('data-hot-input') === false;\n}\n/**\n * Check if the given DOM element can be focused (by using \"select\" method).\n *\n * @param {HTMLElement} element - DOM element.\n */\n\nexport function selectElementIfAllowed(element) {\n  var activeElement = element.ownerDocument.activeElement;\n\n  if (!isOutsideInput(activeElement)) {\n    element.select();\n  }\n}\n/**\n * Check if the provided element is detached from DOM.\n *\n * @param {HTMLElement} element HTML element to be checked.\n * @returns {boolean} `true` if the element is detached, `false` otherwise.\n */\n\nexport function isDetached(element) {\n  return !element.parentNode;\n}", "var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n  getPrototypeOf: function getPrototypeOf(it) {\n    return nativeGetPrototypeOf(toObject(it));\n  }\n});\n\n", "'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n", "'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~stringIndexOf(\n      toString(requireObjectCoercible(this)),\n      toString(notARegExp(searchString)),\n      arguments.length > 1 ? arguments[1] : undefined\n    );\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  filter: function filter(callbackfn /* , thisArg */) {\n    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n", "'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar arraySlice = require('../internals/array-slice-simple');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n  // eslint-disable-next-line regexp/no-empty-group -- required for testing\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n  var internalSplit;\n  if (\n    'abbc'.split(/(b)*/)[1] == 'c' ||\n    // eslint-disable-next-line regexp/no-empty-group -- required for testing\n    'test'.split(/(?:)/, -1).length != 4 ||\n    'ab'.split(/(?:ab)*/).length != 2 ||\n    '.'.split(/(.?)(.?)/).length != 4 ||\n    // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n    '.'.split(/()()/).length > 1 ||\n    ''.split(/.?/).length\n  ) {\n    // based on es5-shim implementation, need to rework it\n    internalSplit = function (separator, limit) {\n      var string = toString(requireObjectCoercible(this));\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (separator === undefined) return [string];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) {\n        return call(nativeSplit, string, separator, lim);\n      }\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var match, lastIndex, lastLength;\n      while (match = call(regexpExec, separatorCopy, string)) {\n        lastIndex = separatorCopy.lastIndex;\n        if (lastIndex > lastLastIndex) {\n          push(output, stringSlice(string, lastLastIndex, match.index));\n          if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\n          lastLength = match[0].length;\n          lastLastIndex = lastIndex;\n          if (output.length >= lim) break;\n        }\n        if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string.length) {\n        if (lastLength || !exec(separatorCopy, '')) push(output, '');\n      } else push(output, stringSlice(string, lastLastIndex));\n      return output.length > lim ? arraySlice(output, 0, lim) : output;\n    };\n  // Chakra, V8\n  } else if ('0'.split(undefined, 0).length) {\n    internalSplit = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n    };\n  } else internalSplit = nativeSplit;\n\n  return [\n    // `String.prototype.split` method\n    // https://tc39.es/ecma262/#sec-string.prototype.split\n    function split(separator, limit) {\n      var O = requireObjectCoercible(this);\n      var splitter = separator == undefined ? undefined : getMethod(separator, SPLIT);\n      return splitter\n        ? call(splitter, separator, O, limit)\n        : call(internalSplit, toString(O), separator, limit);\n    },\n    // `RegExp.prototype[@@split]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n    //\n    // NOTE: This cannot be properly polyfilled in engines that don't support\n    // the 'y' flag.\n    function (string, limit) {\n      var rx = anObject(this);\n      var S = toString(string);\n      var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n      if (res.done) return res.value;\n\n      var C = speciesConstructor(rx, RegExp);\n\n      var unicodeMatching = rx.unicode;\n      var flags = (rx.ignoreCase ? 'i' : '') +\n                  (rx.multiline ? 'm' : '') +\n                  (rx.unicode ? 'u' : '') +\n                  (UNSUPPORTED_Y ? 'g' : 'y');\n\n      // ^(? + rx + ) is needed, in combination with some S slicing, to\n      // simulate the 'y' flag.\n      var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n      var p = 0;\n      var q = 0;\n      var A = [];\n      while (q < S.length) {\n        splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n        var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n        var e;\n        if (\n          z === null ||\n          (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n        ) {\n          q = advanceStringIndex(S, q, unicodeMatching);\n        } else {\n          push(A, stringSlice(S, p, q));\n          if (A.length === lim) return A;\n          for (var i = 1; i <= z.length - 1; i++) {\n            push(A, z[i]);\n            if (A.length === lim) return A;\n          }\n          q = p = e;\n        }\n      }\n      push(A, stringSlice(S, p));\n      return A;\n    }\n  ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n", "var DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar regExpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar SyntaxError = global.SyntaxError;\nvar getFlags = uncurryThis(regExpFlags);\nvar exec = uncurryThis(RegExpPrototype.exec);\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n// TODO: Use only propper RegExpIdentifierName\nvar IS_NCG = /^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar MISSED_STICKY = stickyHelpers.MISSED_STICKY;\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar BASE_FORCED = DESCRIPTORS &&\n  (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {\n    re2[MATCH] = false;\n    // RegExp constructor can alter flags and IsRegExp works correct with @@match\n    return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';\n  }));\n\nvar handleDotAll = function (string) {\n  var length = string.length;\n  var index = 0;\n  var result = '';\n  var brackets = false;\n  var chr;\n  for (; index <= length; index++) {\n    chr = charAt(string, index);\n    if (chr === '\\\\') {\n      result += chr + charAt(string, ++index);\n      continue;\n    }\n    if (!brackets && chr === '.') {\n      result += '[\\\\s\\\\S]';\n    } else {\n      if (chr === '[') {\n        brackets = true;\n      } else if (chr === ']') {\n        brackets = false;\n      } result += chr;\n    }\n  } return result;\n};\n\nvar handleNCG = function (string) {\n  var length = string.length;\n  var index = 0;\n  var result = '';\n  var named = [];\n  var names = {};\n  var brackets = false;\n  var ncg = false;\n  var groupid = 0;\n  var groupname = '';\n  var chr;\n  for (; index <= length; index++) {\n    chr = charAt(string, index);\n    if (chr === '\\\\') {\n      chr = chr + charAt(string, ++index);\n    } else if (chr === ']') {\n      brackets = false;\n    } else if (!brackets) switch (true) {\n      case chr === '[':\n        brackets = true;\n        break;\n      case chr === '(':\n        if (exec(IS_NCG, stringSlice(string, index + 1))) {\n          index += 2;\n          ncg = true;\n        }\n        result += chr;\n        groupid++;\n        continue;\n      case chr === '>' && ncg:\n        if (groupname === '' || hasOwn(names, groupname)) {\n          throw new SyntaxError('Invalid capture group name');\n        }\n        names[groupname] = true;\n        named[named.length] = [groupname, groupid];\n        ncg = false;\n        groupname = '';\n        continue;\n    }\n    if (ncg) groupname += chr;\n    else result += chr;\n  } return [result, named];\n};\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (isForced('RegExp', BASE_FORCED)) {\n  var RegExpWrapper = function RegExp(pattern, flags) {\n    var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);\n    var patternIsRegExp = isRegExp(pattern);\n    var flagsAreUndefined = flags === undefined;\n    var groups = [];\n    var rawPattern = pattern;\n    var rawFlags, dotAll, sticky, handled, result, state;\n\n    if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\n      return pattern;\n    }\n\n    if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {\n      pattern = pattern.source;\n      if (flagsAreUndefined) flags = 'flags' in rawPattern ? rawPattern.flags : getFlags(rawPattern);\n    }\n\n    pattern = pattern === undefined ? '' : toString(pattern);\n    flags = flags === undefined ? '' : toString(flags);\n    rawPattern = pattern;\n\n    if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\n      dotAll = !!flags && stringIndexOf(flags, 's') > -1;\n      if (dotAll) flags = replace(flags, /s/g, '');\n    }\n\n    rawFlags = flags;\n\n    if (MISSED_STICKY && 'sticky' in re1) {\n      sticky = !!flags && stringIndexOf(flags, 'y') > -1;\n      if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, '');\n    }\n\n    if (UNSUPPORTED_NCG) {\n      handled = handleNCG(pattern);\n      pattern = handled[0];\n      groups = handled[1];\n    }\n\n    result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\n\n    if (dotAll || sticky || groups.length) {\n      state = enforceInternalState(result);\n      if (dotAll) {\n        state.dotAll = true;\n        state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\n      }\n      if (sticky) state.sticky = true;\n      if (groups.length) state.groups = groups;\n    }\n\n    if (pattern !== rawPattern) try {\n      // fails in old engines, but we have no alternatives for unsupported regex syntax\n      createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\n    } catch (error) { /* empty */ }\n\n    return result;\n  };\n\n  var proxy = function (key) {\n    key in RegExpWrapper || defineProperty(RegExpWrapper, key, {\n      configurable: true,\n      get: function () { return NativeRegExp[key]; },\n      set: function (it) { NativeRegExp[key] = it; }\n    });\n  };\n\n  for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\n    proxy(keys[index++]);\n  }\n\n  RegExpPrototype.constructor = RegExpWrapper;\n  RegExpWrapper.prototype = RegExpPrototype;\n  redefine(global, 'RegExp', RegExpWrapper);\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar $toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar n$ToString = RegExpPrototype[TO_STRING];\nvar getFlags = uncurryThis(regExpFlags);\n\nvar NOT_GENERIC = fails(function () { return n$ToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = PROPER_FUNCTION_NAME && n$ToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n  redefine(RegExp.prototype, TO_STRING, function toString() {\n    var R = anObject(this);\n    var p = $toString(R.source);\n    var rf = R.flags;\n    var f = $toString(rf === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype) ? getFlags(R) : rf);\n    return '/' + p + '/' + f;\n  }, { unsafe: true });\n}\n", "'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar un$Join = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n  join: function join(separator) {\n    return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator);\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n  trim: function trim() {\n    return $trim(this);\n  }\n});\n", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n// https://gist.github.com/paulirish/1579671\n\n/* eslint-disable no-restricted-globals */\nvar lastTime = 0;\nvar vendors = ['ms', 'moz', 'webkit', 'o'];\nvar _requestAnimationFrame = window.requestAnimationFrame;\nvar _cancelAnimationFrame = window.cancelAnimationFrame;\n\nfor (var x = 0; x < vendors.length && !_requestAnimationFrame; ++x) {\n  _requestAnimationFrame = window[\"\".concat(vendors[x], \"RequestAnimationFrame\")];\n  _cancelAnimationFrame = window[\"\".concat(vendors[x], \"CancelAnimationFrame\")] || window[\"\".concat(vendors[x], \"CancelRequestAnimationFrame\")];\n}\n\nif (!_requestAnimationFrame) {\n  _requestAnimationFrame = function _requestAnimationFrame(callback) {\n    var currTime = new Date().getTime();\n    var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n    var id = window.setTimeout(function () {\n      callback(currTime + timeToCall);\n    }, timeToCall);\n    lastTime = currTime + timeToCall;\n    return id;\n  };\n}\n\nif (!_cancelAnimationFrame) {\n  _cancelAnimationFrame = function _cancelAnimationFrame(id) {\n    clearTimeout(id);\n  };\n}\n/**\n * Polyfill for requestAnimationFrame.\n *\n * @param {Function} callback The function to call when it's time.\n * @returns {number}\n */\n\n\nexport function requestAnimationFrame(callback) {\n  return _requestAnimationFrame.call(window, callback);\n}\n/**\n * @returns {boolean}\n */\n\nexport function isClassListSupported() {\n  return !!document.documentElement.classList;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isTextContentSupported() {\n  return !!document.createTextNode('test').textContent;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isGetComputedStyleSupported() {\n  return !!window.getComputedStyle;\n}\n/**\n * Polyfill for cancelAnimationFrame.\n *\n * @param {number} id The request Id, generated by `requestAnimationFrame`.\n */\n\nexport function cancelAnimationFrame(id) {\n  _cancelAnimationFrame.call(window, id);\n}\n/**\n * @returns {boolean}\n */\n\nexport function isTouchSupported() {\n  return 'ontouchstart' in window;\n}\n\nvar _hasCaptionProblem;\n/**\n *\n */\n\n\nfunction detectCaptionProblem() {\n  var TABLE = document.createElement('TABLE');\n  TABLE.style.borderSpacing = '0';\n  TABLE.style.borderWidth = '0';\n  TABLE.style.padding = '0';\n  var TBODY = document.createElement('TBODY');\n  TABLE.appendChild(TBODY);\n  TBODY.appendChild(document.createElement('TR'));\n  TBODY.firstChild.appendChild(document.createElement('TD'));\n  TBODY.firstChild.firstChild.innerHTML = '<tr><td>t<br>t</td></tr>';\n  var CAPTION = document.createElement('CAPTION');\n  CAPTION.innerHTML = 'c<br>c<br>c<br>c';\n  CAPTION.style.padding = '0';\n  CAPTION.style.margin = '0';\n  TABLE.insertBefore(CAPTION, TBODY);\n  document.body.appendChild(TABLE);\n  _hasCaptionProblem = TABLE.offsetHeight < 2 * TABLE.lastChild.offsetHeight; // boolean\n\n  document.body.removeChild(TABLE);\n}\n/**\n * @returns {boolean}\n */\n\n\nexport function hasCaptionProblem() {\n  if (_hasCaptionProblem === void 0) {\n    detectCaptionProblem();\n  }\n\n  return _hasCaptionProblem;\n}\nvar comparisonFunction;\n/**\n * Get string comparison function for sorting purposes. It supports multilingual string comparison base on Internationalization API.\n *\n * @param {string} [language] The language code used for phrases sorting.\n * @param {object} [options] Additional options for sort comparator.\n * @returns {*}\n */\n\nexport function getComparisonFunction(language) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (comparisonFunction) {\n    return comparisonFunction;\n  }\n\n  if ((typeof Intl === \"undefined\" ? \"undefined\" : _typeof(Intl)) === 'object') {\n    comparisonFunction = new Intl.Collator(language, options).compare;\n  } else if (typeof String.prototype.localeCompare === 'function') {\n    comparisonFunction = function comparisonFunction(a, b) {\n      return \"\".concat(a).localeCompare(b);\n    };\n  } else {\n    comparisonFunction = function comparisonFunction(a, b) {\n      if (a === b) {\n        return 0;\n      }\n\n      return a > b ? -1 : 1;\n    };\n  }\n\n  return comparisonFunction;\n}\nvar passiveSupported;\n/**\n * Checks if browser supports passive events.\n *\n * @returns {boolean}\n */\n\nexport function isPassiveEventSupported() {\n  if (passiveSupported !== void 0) {\n    return passiveSupported;\n  }\n\n  try {\n    var options = {\n      get passive() {\n        passiveSupported = true;\n      }\n\n    }; // eslint-disable-next-line no-restricted-globals\n\n    window.addEventListener('test', options, options); // eslint-disable-next-line no-restricted-globals\n\n    window.removeEventListener('test', options, options);\n  } catch (err) {\n    passiveSupported = false;\n  }\n\n  return passiveSupported;\n}", "import \"core-js/modules/es.regexp.exec.js\";\nimport { objectEach } from \"./object.mjs\";\n\nvar tester = function tester(testerFunc) {\n  var result = {\n    value: false\n  };\n\n  result.test = function (ua, vendor) {\n    result.value = testerFunc(ua, vendor);\n  };\n\n  return result;\n};\n\nvar browsers = {\n  chrome: tester(function (ua, vendor) {\n    return /Chrome/.test(ua) && /Google/.test(vendor);\n  }),\n  chromeWebKit: tester(function (ua) {\n    return /CriOS/.test(ua);\n  }),\n  edge: tester(function (ua) {\n    return /Edge/.test(ua);\n  }),\n  edgeWebKit: tester(function (ua) {\n    return /EdgiOS/.test(ua);\n  }),\n  firefox: tester(function (ua) {\n    return /Firefox/.test(ua);\n  }),\n  firefoxWebKit: tester(function (ua) {\n    return /FxiOS/.test(ua);\n  }),\n  ie: tester(function (ua) {\n    return /Trident/.test(ua);\n  }),\n  // eslint-disable-next-line no-restricted-globals\n  ie9: tester(function () {\n    return !!document.documentMode;\n  }),\n  mobile: tester(function (ua) {\n    return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua);\n  }),\n  safari: tester(function (ua, vendor) {\n    return /Safari/.test(ua) && /Apple Computer/.test(vendor);\n  })\n};\nvar platforms = {\n  mac: tester(function (platform) {\n    return /^Mac/.test(platform);\n  }),\n  win: tester(function (platform) {\n    return /^Win/.test(platform);\n  }),\n  linux: tester(function (platform) {\n    return /^Linux/.test(platform);\n  }),\n  ios: tester(function (ua) {\n    return /iPhone|iPad|iPod/i.test(ua);\n  })\n};\n/**\n * @param {object} [metaObject] The browser identity collection.\n * @param {object} [metaObject.userAgent] The user agent reported by browser.\n * @param {object} [metaObject.vendor] The vendor name reported by browser.\n */\n\nexport function setBrowserMeta() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      _ref$userAgent = _ref.userAgent,\n      userAgent = _ref$userAgent === void 0 ? navigator.userAgent : _ref$userAgent,\n      _ref$vendor = _ref.vendor,\n      vendor = _ref$vendor === void 0 ? navigator.vendor : _ref$vendor;\n\n  objectEach(browsers, function (_ref2) {\n    var test = _ref2.test;\n    return void test(userAgent, vendor);\n  });\n}\n/**\n * @param {object} [metaObject] The platform identity collection.\n * @param {object} [metaObject.platform] The platform ID.\n */\n\nexport function setPlatformMeta() {\n  var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      _ref3$platform = _ref3.platform,\n      platform = _ref3$platform === void 0 ? navigator.platform : _ref3$platform;\n\n  objectEach(platforms, function (_ref4) {\n    var test = _ref4.test;\n    return void test(platform);\n  });\n}\nsetBrowserMeta();\nsetPlatformMeta();\n/**\n * @returns {boolean}\n */\n\nexport function isChrome() {\n  return browsers.chrome.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isChromeWebKit() {\n  return browsers.chromeWebKit.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isFirefox() {\n  return browsers.firefox.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isFirefoxWebKit() {\n  return browsers.firefoxWebKit.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isSafari() {\n  return browsers.safari.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isEdge() {\n  return browsers.edge.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isEdgeWebKit() {\n  return browsers.edgeWebKit.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isIE() {\n  return browsers.ie.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isIE9() {\n  return browsers.ie9.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isMSBrowser() {\n  return browsers.ie.value || browsers.edge.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isMobileBrowser() {\n  return browsers.mobile.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isIOS() {\n  return platforms.ios.value;\n}\n/**\n * A hacky way to recognize the iPad. Since iOS 13, the iPad on Safari mimics macOS behavior and user agent.\n *\n * @see {@https://stackoverflow.com/a/57838385}\n * @param {object} [metaObject] The browser identity collection.\n * @param {number} [metaObject.maxTouchPoints] The maximum number of simultanous touch points.\n * @returns {boolean}\n */\n\nexport function isIpadOS() {\n  var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : navigator,\n      maxTouchPoints = _ref5.maxTouchPoints;\n\n  return maxTouchPoints > 2 && platforms.mac.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isWindowsOS() {\n  return platforms.win.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isMacOS() {\n  return platforms.mac.value;\n}\n/**\n * @returns {boolean}\n */\n\nexport function isLinuxOS() {\n  return platforms.linux.value;\n}", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport { arrayEach } from \"./array.mjs\";\n/**\n * Generate schema for passed object.\n *\n * @param {Array|object} object An object to analyze.\n * @returns {Array|object}\n */\n\nexport function duckSchema(object) {\n  var schema;\n\n  if (Array.isArray(object)) {\n    schema = [];\n  } else {\n    schema = {};\n    objectEach(object, function (value, key) {\n      if (key === '__children') {\n        return;\n      }\n\n      if (value && _typeof(value) === 'object' && !Array.isArray(value)) {\n        schema[key] = duckSchema(value);\n      } else if (Array.isArray(value)) {\n        if (value.length && _typeof(value[0]) === 'object' && !Array.isArray(value[0])) {\n          schema[key] = [duckSchema(value[0])];\n        } else {\n          schema[key] = [];\n        }\n      } else {\n        schema[key] = null;\n      }\n    });\n  }\n\n  return schema;\n}\n/**\n * Inherit without without calling parent constructor, and setting `Child.prototype.constructor` to `Child` instead of `Parent`.\n * Creates temporary dummy function to call it as constructor.\n * Described in ticket: https://github.com/handsontable/handsontable/pull/516.\n *\n * @param {object} Child The child class.\n * @param {object} Parent The parent class.\n * @returns {object}\n */\n\nexport function inherit(Child, Parent) {\n  Parent.prototype.constructor = Parent;\n  Child.prototype = new Parent();\n  Child.prototype.constructor = Child;\n  return Child;\n}\n/**\n * Perform shallow extend of a target object with extension's own properties.\n *\n * @param {object} target An object that will receive the new properties.\n * @param {object} extension An object containing additional properties to merge into the target.\n * @param {string[]} [writableKeys] An array of keys that are writable to target object.\n * @returns {object}\n */\n\nexport function extend(target, extension, writableKeys) {\n  var hasWritableKeys = Array.isArray(writableKeys);\n  objectEach(extension, function (value, key) {\n    if (hasWritableKeys === false || writableKeys.includes(key)) {\n      target[key] = value;\n    }\n  });\n  return target;\n}\n/**\n * Perform deep extend of a target object with extension's own properties.\n *\n * @param {object} target An object that will receive the new properties.\n * @param {object} extension An object containing additional properties to merge into the target.\n */\n\nexport function deepExtend(target, extension) {\n  objectEach(extension, function (value, key) {\n    if (extension[key] && _typeof(extension[key]) === 'object') {\n      if (!target[key]) {\n        if (Array.isArray(extension[key])) {\n          target[key] = [];\n        } else if (Object.prototype.toString.call(extension[key]) === '[object Date]') {\n          target[key] = extension[key];\n        } else {\n          target[key] = {};\n        }\n      }\n\n      deepExtend(target[key], extension[key]);\n    } else {\n      target[key] = extension[key];\n    }\n  });\n}\n/**\n * Perform deep clone of an object.\n * WARNING! Only clones JSON properties. Will cause error when `obj` contains a function, Date, etc.\n *\n * @param {object} obj An object that will be cloned.\n * @returns {object}\n */\n\nexport function deepClone(obj) {\n  if (_typeof(obj) === 'object') {\n    return JSON.parse(JSON.stringify(obj));\n  }\n\n  return obj;\n}\n/**\n * Shallow clone object.\n *\n * @param {object} object An object to clone.\n * @returns {object}\n */\n\nexport function clone(object) {\n  var result = {};\n  objectEach(object, function (value, key) {\n    result[key] = value;\n  });\n  return result;\n}\n/**\n * Extend the Base object (usually prototype) of the functionality the `mixins` objects.\n *\n * @param {object} Base Base object which will be extended.\n * @param {object} mixins The object of the functionality will be \"copied\".\n * @returns {object}\n */\n\nexport function mixin(Base) {\n  if (!Base.MIXINS) {\n    Base.MIXINS = [];\n  }\n\n  for (var _len = arguments.length, mixins = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    mixins[_key - 1] = arguments[_key];\n  }\n\n  arrayEach(mixins, function (mixinItem) {\n    Base.MIXINS.push(mixinItem.MIXIN_NAME);\n    objectEach(mixinItem, function (value, key) {\n      if (Base.prototype[key] !== void 0) {\n        throw new Error(\"Mixin conflict. Property '\".concat(key, \"' already exist and cannot be overwritten.\"));\n      }\n\n      if (typeof value === 'function') {\n        Base.prototype[key] = value;\n      } else {\n        var getter = function _getter(property, initialValue) {\n          var propertyName = \"_\".concat(property);\n\n          var initValue = function initValue(newValue) {\n            var result = newValue;\n\n            if (Array.isArray(result) || isObject(result)) {\n              result = deepClone(result);\n            }\n\n            return result;\n          };\n\n          return function () {\n            if (this[propertyName] === void 0) {\n              this[propertyName] = initValue(initialValue);\n            }\n\n            return this[propertyName];\n          };\n        };\n\n        var setter = function _setter(property) {\n          var propertyName = \"_\".concat(property);\n          return function (newValue) {\n            this[propertyName] = newValue;\n          };\n        };\n\n        Object.defineProperty(Base.prototype, key, {\n          get: getter(key, value),\n          set: setter(key),\n          configurable: true\n        });\n      }\n    });\n  });\n  return Base;\n}\n/**\n * Checks if two objects or arrays are (deep) equal.\n *\n * @param {object|Array} object1 The first object to compare.\n * @param {object|Array} object2 The second object to compare.\n * @returns {boolean}\n */\n\nexport function isObjectEqual(object1, object2) {\n  return JSON.stringify(object1) === JSON.stringify(object2);\n}\n/**\n * Determines whether given object is a plain Object.\n * Note: String and Array are not plain Objects.\n *\n * @param {*} object An object to check.\n * @returns {boolean}\n */\n\nexport function isObject(object) {\n  return Object.prototype.toString.call(object) === '[object Object]';\n}\n/**\n * @param {object} object The object on which to define the property.\n * @param {string} property The name of the property to be defined or modified.\n * @param {*} value The value associated with the property.\n * @param {object} options The descriptor for the property being defined or modified.\n */\n\nexport function defineGetter(object, property, value, options) {\n  options.value = value;\n  options.writable = options.writable !== false;\n  options.enumerable = options.enumerable !== false;\n  options.configurable = options.configurable !== false;\n  Object.defineProperty(object, property, options);\n}\n/**\n * A specialized version of `.forEach` for objects.\n *\n * @param {object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {object} Returns `object`.\n */\n\nexport function objectEach(object, iteratee) {\n  // eslint-disable-next-line no-restricted-syntax\n  for (var key in object) {\n    if (!object.hasOwnProperty || object.hasOwnProperty && Object.prototype.hasOwnProperty.call(object, key)) {\n      if (iteratee(object[key], key, object) === false) {\n        break;\n      }\n    }\n  }\n\n  return object;\n}\n/**\n * Get object property by its name. Access to sub properties can be achieved by dot notation (e.q. `'foo.bar.baz'`).\n *\n * @param {object} object Object which value will be exported.\n * @param {string} name Object property name.\n * @returns {*}\n */\n\nexport function getProperty(object, name) {\n  var names = name.split('.');\n  var result = object;\n  objectEach(names, function (nameItem) {\n    result = result[nameItem];\n\n    if (result === void 0) {\n      result = void 0;\n      return false;\n    }\n  });\n  return result;\n}\n/**\n * Set a property value on the provided object. Works on nested object prop names as well (e.g. `first.name`).\n *\n * @param {object} object Object to work on.\n * @param {string} name Prop name.\n * @param {*} value Value to be assigned at the provided property.\n */\n\nexport function setProperty(object, name, value) {\n  var names = name.split('.');\n  var workingObject = object;\n  names.forEach(function (propName, index) {\n    if (index !== names.length - 1) {\n      if (!hasOwnProperty(workingObject, propName)) {\n        workingObject[propName] = {};\n      }\n\n      workingObject = workingObject[propName];\n    } else {\n      workingObject[propName] = value;\n    }\n  });\n}\n/**\n * Return object length (recursively).\n *\n * @param {*} object Object for which we want get length.\n * @returns {number}\n */\n\nexport function deepObjectSize(object) {\n  if (!isObject(object)) {\n    return 0;\n  }\n\n  var recursObjLen = function recursObjLen(obj) {\n    var result = 0;\n\n    if (isObject(obj)) {\n      objectEach(obj, function (value, key) {\n        if (key === '__children') {\n          return;\n        }\n\n        result += recursObjLen(value);\n      });\n    } else {\n      result += 1;\n    }\n\n    return result;\n  };\n\n  return recursObjLen(object);\n}\n/**\n * Create object with property where its value change will be observed.\n *\n * @param {*} [defaultValue=undefined] Default value.\n * @param {string} [propertyToListen='value'] Property to listen.\n * @returns {object}\n */\n\nexport function createObjectPropListener(defaultValue) {\n  var _holder;\n\n  var propertyToListen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'value';\n  var privateProperty = \"_\".concat(propertyToListen);\n  var holder = (_holder = {\n    _touched: false\n  }, _defineProperty(_holder, privateProperty, defaultValue), _defineProperty(_holder, \"isTouched\", function isTouched() {\n    return this._touched;\n  }), _holder);\n  Object.defineProperty(holder, propertyToListen, {\n    get: function get() {\n      return this[privateProperty];\n    },\n    set: function set(value) {\n      this._touched = true;\n      this[privateProperty] = value;\n    },\n    enumerable: true,\n    configurable: true\n  });\n  return holder;\n}\n/**\n * Check if at specified `key` there is any value for `object`.\n *\n * @param {object} object Object to search value at specyfic key.\n * @param {string} key String key to check.\n * @returns {boolean}\n */\n\nexport function hasOwnProperty(object, key) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}", "import \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\n\n/**\n * @param {Array} arr An array to process.\n */\nexport function to2dArray(arr) {\n  var ilen = arr.length;\n  var i = 0;\n\n  while (i < ilen) {\n    arr[i] = [arr[i]];\n    i += 1;\n  }\n}\n/**\n * @param {Array} arr An array to extend.\n * @param {Array} extension The data to extend from.\n */\n\nexport function extendArray(arr, extension) {\n  var ilen = extension.length;\n  var i = 0;\n\n  while (i < ilen) {\n    arr.push(extension[i]);\n    i += 1;\n  }\n}\n/**\n * @param {Array} arr An array to pivot.\n * @returns {Array}\n */\n\nexport function pivot(arr) {\n  var pivotedArr = [];\n\n  if (!arr || arr.length === 0 || !arr[0] || arr[0].length === 0) {\n    return pivotedArr;\n  }\n\n  var rowCount = arr.length;\n  var colCount = arr[0].length;\n\n  for (var i = 0; i < rowCount; i++) {\n    for (var j = 0; j < colCount; j++) {\n      if (!pivotedArr[j]) {\n        pivotedArr[j] = [];\n      }\n\n      pivotedArr[j][i] = arr[i][j];\n    }\n  }\n\n  return pivotedArr;\n}\n/**\n * A specialized version of `.reduce` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}.\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initFromArray] Specify using the first element of `array` as the initial value.\n * @returns {*} Returns the accumulated value.\n */\n\nexport function arrayReduce(array, iteratee, accumulator, initFromArray) {\n  var index = -1;\n  var iterable = array;\n  var result = accumulator;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n\n  var length = iterable.length;\n\n  if (initFromArray && length) {\n    index += 1;\n    result = iterable[index];\n  }\n\n  index += 1;\n\n  while (index < length) {\n    result = iteratee(result, iterable[index], index, iterable);\n    index += 1;\n  }\n\n  return result;\n}\n/**\n * A specialized version of `.filter` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}.\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n\nexport function arrayFilter(array, predicate) {\n  var index = 0;\n  var iterable = array;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n\n  var length = iterable.length;\n  var result = [];\n  var resIndex = -1;\n\n  while (index < length) {\n    var value = iterable[index];\n\n    if (predicate(value, index, iterable)) {\n      resIndex += 1;\n      result[resIndex] = value;\n    }\n\n    index += 1;\n  }\n\n  return result;\n}\n/**\n * A specialized version of `.map` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n\nexport function arrayMap(array, iteratee) {\n  var index = 0;\n  var iterable = array;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n\n  var length = iterable.length;\n  var result = [];\n  var resIndex = -1;\n\n  while (index < length) {\n    var value = iterable[index];\n    resIndex += 1;\n    result[resIndex] = iteratee(value, index, iterable);\n    index += 1;\n  }\n\n  return result;\n}\n/**\n * A specialized version of `.forEach` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}.\n *\n * @param {Array|*} array The array to iterate over or an any element with implemented iterator protocol.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n\nexport function arrayEach(array, iteratee) {\n  var index = 0;\n  var iterable = array;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n\n  var length = iterable.length;\n\n  while (index < length) {\n    if (iteratee(iterable[index], index, iterable) === false) {\n      break;\n    }\n\n    index += 1;\n  }\n\n  return array;\n}\n/**\n * Calculate sum value for each item of the array.\n *\n * @param {Array} array The array to process.\n * @returns {number} Returns calculated sum value.\n */\n\nexport function arraySum(array) {\n  return arrayReduce(array, function (a, b) {\n    return a + b;\n  }, 0);\n}\n/**\n * Returns the highest value from an array. Can be array of numbers or array of strings.\n * NOTICE: Mixed values is not supported.\n *\n * @param {Array} array The array to process.\n * @returns {number} Returns the highest value from an array.\n */\n\nexport function arrayMax(array) {\n  return arrayReduce(array, function (a, b) {\n    return a > b ? a : b;\n  }, Array.isArray(array) ? array[0] : void 0);\n}\n/**\n * Returns the lowest value from an array. Can be array of numbers or array of strings.\n * NOTICE: Mixed values is not supported.\n *\n * @param {Array} array The array to process.\n * @returns {number} Returns the lowest value from an array.\n */\n\nexport function arrayMin(array) {\n  return arrayReduce(array, function (a, b) {\n    return a < b ? a : b;\n  }, Array.isArray(array) ? array[0] : void 0);\n}\n/**\n * Calculate average value for each item of the array.\n *\n * @param {Array} array The array to process.\n * @returns {number} Returns calculated average value.\n */\n\nexport function arrayAvg(array) {\n  if (!array.length) {\n    return 0;\n  }\n\n  return arraySum(array) / array.length;\n}\n/**\n * Flatten multidimensional array.\n *\n * @param {Array} array Array of Arrays.\n * @returns {Array}\n */\n\nexport function arrayFlatten(array) {\n  return arrayReduce(array, function (initial, value) {\n    return initial.concat(Array.isArray(value) ? arrayFlatten(value) : value);\n  }, []);\n}\n/**\n * Unique values in the array.\n *\n * @param {Array} array The array to process.\n * @returns {Array}\n */\n\nexport function arrayUnique(array) {\n  var unique = [];\n  arrayEach(array, function (value) {\n    if (unique.indexOf(value) === -1) {\n      unique.push(value);\n    }\n  });\n  return unique;\n}\n/**\n * Differences from two or more arrays.\n *\n * @param {...Array} arrays Array of strings or array of numbers.\n * @returns {Array} Returns the difference between arrays.\n */\n\nexport function getDifferenceOfArrays() {\n  for (var _len = arguments.length, arrays = new Array(_len), _key = 0; _key < _len; _key++) {\n    arrays[_key] = arguments[_key];\n  }\n\n  var _ref = [].concat(arrays),\n      first = _ref[0],\n      rest = _ref.slice(1);\n\n  var filteredFirstArray = first;\n  arrayEach(rest, function (array) {\n    filteredFirstArray = filteredFirstArray.filter(function (value) {\n      return !array.includes(value);\n    });\n  });\n  return filteredFirstArray;\n}\n/**\n * Intersection of two or more arrays.\n *\n * @param {...Array} arrays Array of strings or array of numbers.\n * @returns {Array} Returns elements that exists in every array.\n */\n\nexport function getIntersectionOfArrays() {\n  for (var _len2 = arguments.length, arrays = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    arrays[_key2] = arguments[_key2];\n  }\n\n  var _ref2 = [].concat(arrays),\n      first = _ref2[0],\n      rest = _ref2.slice(1);\n\n  var filteredFirstArray = first;\n  arrayEach(rest, function (array) {\n    filteredFirstArray = filteredFirstArray.filter(function (value) {\n      return array.includes(value);\n    });\n  });\n  return filteredFirstArray;\n}\n/**\n * Union of two or more arrays.\n *\n * @param {...Array} arrays Array of strings or array of numbers.\n * @returns {Array} Returns the elements that exist in any of the arrays, without duplicates.\n */\n\nexport function getUnionOfArrays() {\n  for (var _len3 = arguments.length, arrays = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n    arrays[_key3] = arguments[_key3];\n  }\n\n  var _ref3 = [].concat(arrays),\n      first = _ref3[0],\n      rest = _ref3.slice(1);\n\n  var set = new Set(first);\n  arrayEach(rest, function (array) {\n    arrayEach(array, function (value) {\n      if (!set.has(value)) {\n        set.add(value);\n      }\n    });\n  });\n  return Array.from(set);\n}\n/**\n * Convert a separated strings to an array of strings.\n *\n * @param {string} value A string of class name(s).\n * @param {string|RegExp} delimiter The pattern describing where each split should occur.\n * @returns {string[]} Returns array of string or empty array.\n */\n\nexport function stringToArray(value) {\n  var delimiter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ' ';\n  return value.split(delimiter);\n}", "'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n  return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n", "import \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport DOMPurify from 'dompurify';\nimport { stringify } from \"./mixed.mjs\";\n/**\n * Convert string to upper case first letter.\n *\n * @param {string} string String to convert.\n * @returns {string}\n */\n\nexport function toUpperCaseFirst(string) {\n  return string[0].toUpperCase() + string.substr(1);\n}\n/**\n * Compare strings case insensitively.\n *\n * @param {...string} strings Strings to compare.\n * @returns {boolean}\n */\n\nexport function equalsIgnoreCase() {\n  var unique = [];\n\n  for (var _len = arguments.length, strings = new Array(_len), _key = 0; _key < _len; _key++) {\n    strings[_key] = arguments[_key];\n  }\n\n  var length = strings.length;\n\n  while (length) {\n    length -= 1;\n    var string = stringify(strings[length]).toLowerCase();\n\n    if (unique.indexOf(string) === -1) {\n      unique.push(string);\n    }\n  }\n\n  return unique.length === 1;\n}\n/**\n * Generates a random hex string. Used as namespace for Handsontable instance events.\n *\n * @returns {string} Returns 16-long character random string (eq. `'92b1bfc74ec4'`).\n */\n\nexport function randomString() {\n  /**\n   * @returns {string}\n   */\n  function s4() {\n    return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n  }\n\n  return s4() + s4() + s4() + s4();\n}\n/**\n * Checks if value is valid percent.\n *\n * @param {string} value The value to check.\n * @returns {boolean}\n */\n\nexport function isPercentValue(value) {\n  return /^([0-9][0-9]?%$)|(^100%$)/.test(value);\n}\n/**\n * Substitute strings placed beetwen square brackets into value defined in `variables` object. String names defined in\n * square brackets must be the same as property name of `variables` object.\n *\n * @param {string} template Template string.\n * @param {object} variables Object which contains all available values which can be injected into template.\n * @returns {string}\n */\n\nexport function substitute(template) {\n  var variables = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return \"\".concat(template).replace(/(?:\\\\)?\\[([^[\\]]+)]/g, function (match, name) {\n    if (match.charAt(0) === '\\\\') {\n      return match.substr(1, match.length - 1);\n    }\n\n    return variables[name] === void 0 ? '' : variables[name];\n  });\n}\n/**\n * Strip any HTML tag from the string.\n *\n * @param {string} string String to cut HTML from.\n * @returns {string}\n */\n\nexport function stripTags(string) {\n  return sanitize(\"\".concat(string), {\n    ALLOWED_TAGS: []\n  });\n}\n/**\n * Sanitizes string from potential security vulnerabilities.\n *\n * @param {string} string String to sanitize.\n * @param {object} [options] DOMPurify's configuration object.\n * @returns {string}\n */\n\nexport function sanitize(string, options) {\n  return DOMPurify.sanitize(string, options);\n}", "import \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\n\nvar _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.string.code-point-at.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/es.string.pad-start.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport moment from 'moment';\nimport { toSingleLine } from \"./templateLiteralTag.mjs\";\n/**\n * Converts any value to string.\n *\n * @param {*} value The value to stringify.\n * @returns {string}\n */\n\nexport function stringify(value) {\n  var result;\n\n  switch (_typeof(value)) {\n    case 'string':\n    case 'number':\n      result = \"\".concat(value);\n      break;\n\n    case 'object':\n      result = value === null ? '' : value.toString();\n      break;\n\n    case 'undefined':\n      result = '';\n      break;\n\n    default:\n      result = value.toString();\n      break;\n  }\n\n  return result;\n}\n/**\n * Checks if given variable is defined.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\n\nexport function isDefined(variable) {\n  return typeof variable !== 'undefined';\n}\n/**\n * Checks if given variable is undefined.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\n\nexport function isUndefined(variable) {\n  return typeof variable === 'undefined';\n}\n/**\n * Check if given variable is null, empty string or undefined.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\n\nexport function isEmpty(variable) {\n  return variable === null || variable === '' || isUndefined(variable);\n}\n/**\n * Check if given variable is a regular expression.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\n\nexport function isRegExp(variable) {\n  return Object.prototype.toString.call(variable) === '[object RegExp]';\n}\n/* eslint-disable */\n\nvar _m = '\\x6C\\x65\\x6E\\x67\\x74\\x68';\n\nvar _hd = function _hd(v) {\n  return parseInt(v, 16);\n};\n\nvar _pi = function _pi(v) {\n  return parseInt(v, 10);\n};\n\nvar _ss = function _ss(v, s, l) {\n  return v['\\x73\\x75\\x62\\x73\\x74\\x72'](s, l);\n};\n\nvar _cp = function _cp(v) {\n  return v['\\x63\\x6F\\x64\\x65\\x50\\x6F\\x69\\x6E\\x74\\x41\\x74'](0) - 65;\n};\n\nvar _norm = function _norm(v) {\n  return \"\".concat(v).replace(/\\-/g, '');\n};\n\nvar _extractTime = function _extractTime(v) {\n  return _hd(_ss(_norm(v), _hd('12'), _cp('\\x46'))) / (_hd(_ss(_norm(v), _cp('\\x42'), ~~![][_m])) || 9);\n};\n\nvar _ignored = function _ignored() {\n  return typeof location !== 'undefined' && /^([a-z0-9\\-]+\\.)?\\x68\\x61\\x6E\\x64\\x73\\x6F\\x6E\\x74\\x61\\x62\\x6C\\x65\\x2E\\x63\\x6F\\x6D$/i.test(location.host);\n};\n\nvar _notified = false;\nvar consoleMessages = {\n  invalid: function invalid() {\n    return toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"\\n    The license key for Handsontable is invalid. \\n    If you need any help, contact us at support@handsontable.com.\"], [\"\\n    The license key for Handsontable is invalid.\\\\x20\\n    If you need any help, contact us at support@handsontable.com.\"])));\n  },\n  expired: function expired(_ref) {\n    var keyValidityDate = _ref.keyValidityDate,\n        hotVersion = _ref.hotVersion;\n    return toSingleLine(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral([\"\\n    The license key for Handsontable expired on \", \", and is not valid for the installed \\n    version \", \". Renew your license key at handsontable.com or downgrade to a version released prior \\n    to \", \". If you need any help, contact us at sales@handsontable.com.\"], [\"\\n    The license key for Handsontable expired on \", \", and is not valid for the installed\\\\x20\\n    version \", \". Renew your license key at handsontable.com or downgrade to a version released prior\\\\x20\\n    to \", \". If you need any help, contact us at sales@handsontable.com.\"])), keyValidityDate, hotVersion, keyValidityDate);\n  },\n  missing: function missing() {\n    return toSingleLine(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral([\"\\n    The license key for Handsontable is missing. Use your purchased key to activate the product. \\n    Alternatively, you can activate Handsontable to use for non-commercial purposes by \\n    passing the key: 'non-commercial-and-evaluation'. If you need any help, contact \\n    us at support@handsontable.com.\"], [\"\\n    The license key for Handsontable is missing. Use your purchased key to activate the product.\\\\x20\\n    Alternatively, you can activate Handsontable to use for non-commercial purposes by\\\\x20\\n    passing the key: 'non-commercial-and-evaluation'. If you need any help, contact\\\\x20\\n    us at support@handsontable.com.\"])));\n  },\n  non_commercial: function non_commercial() {\n    return '';\n  }\n};\nvar domMessages = {\n  invalid: function invalid() {\n    return toSingleLine(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral([\"\\n    The license key for Handsontable is invalid. \\n    <a href=\\\"https://handsontable.com/docs/tutorial-license-key.html\\\" target=\\\"_blank\\\">Read more</a> on how to \\n    install it properly or contact us at <a href=\\\"mailto:support@handsontable.com\\\">support@handsontable.com</a>.\"], [\"\\n    The license key for Handsontable is invalid.\\\\x20\\n    <a href=\\\"https://handsontable.com/docs/tutorial-license-key.html\\\" target=\\\"_blank\\\">Read more</a> on how to\\\\x20\\n    install it properly or contact us at <a href=\\\"mailto:support@handsontable.com\\\">support@handsontable.com</a>.\"])));\n  },\n  expired: function expired(_ref2) {\n    var keyValidityDate = _ref2.keyValidityDate,\n        hotVersion = _ref2.hotVersion;\n    return toSingleLine(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral([\"\\n    The license key for Handsontable expired on \", \", and is not valid for the installed \\n    version \", \". <a href=\\\"https://handsontable.com/pricing\\\" target=\\\"_blank\\\">Renew</a> your \\n    license key or downgrade to a version released prior to \", \". If you need any \\n    help, contact us at <a href=\\\"mailto:sales@handsontable.com\\\">sales@handsontable.com</a>.\"], [\"\\n    The license key for Handsontable expired on \", \", and is not valid for the installed\\\\x20\\n    version \", \". <a href=\\\"https://handsontable.com/pricing\\\" target=\\\"_blank\\\">Renew</a> your\\\\x20\\n    license key or downgrade to a version released prior to \", \". If you need any\\\\x20\\n    help, contact us at <a href=\\\"mailto:sales@handsontable.com\\\">sales@handsontable.com</a>.\"])), keyValidityDate, hotVersion, keyValidityDate);\n  },\n  missing: function missing() {\n    return toSingleLine(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral([\"\\n    The license key for Handsontable is missing. Use your purchased key to activate the product. \\n    Alternatively, you can activate Handsontable to use for non-commercial purposes by \\n    passing the key: 'non-commercial-and-evaluation'. \\n    <a href=\\\"https://handsontable.com/docs/tutorial-license-key.html\\\" target=\\\"_blank\\\">Read more</a> about it in \\n    the documentation or contact us at <a href=\\\"mailto:support@handsontable.com\\\">support@handsontable.com</a>.\"], [\"\\n    The license key for Handsontable is missing. Use your purchased key to activate the product.\\\\x20\\n    Alternatively, you can activate Handsontable to use for non-commercial purposes by\\\\x20\\n    passing the key: 'non-commercial-and-evaluation'.\\\\x20\\n    <a href=\\\"https://handsontable.com/docs/tutorial-license-key.html\\\" target=\\\"_blank\\\">Read more</a> about it in\\\\x20\\n    the documentation or contact us at <a href=\\\"mailto:support@handsontable.com\\\">support@handsontable.com</a>.\"])));\n  },\n  non_commercial: function non_commercial() {\n    return '';\n  }\n};\nexport function _injectProductInfo(key, element) {\n  var hasValidType = !isEmpty(key);\n  var isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';\n  var hotVersion = \"11.1.0\";\n  var keyValidityDate;\n  var consoleMessageState = 'invalid';\n  var domMessageState = 'invalid';\n  key = _norm(key || '');\n\n  var schemaValidity = _checkKeySchema(key);\n\n  if (hasValidType || isNonCommercial || schemaValidity) {\n    if (schemaValidity) {\n      var releaseDate = moment(\"13/01/2022\", 'DD/MM/YYYY');\n      var releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);\n\n      var keyValidityDays = _extractTime(key);\n\n      keyValidityDate = moment((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');\n\n      if (releaseDays > keyValidityDays) {\n        var daysAfterRelease = moment().diff(releaseDate, 'days');\n        consoleMessageState = daysAfterRelease <= 1 ? 'valid' : 'expired';\n        domMessageState = daysAfterRelease <= 15 ? 'valid' : 'expired';\n      } else {\n        consoleMessageState = 'valid';\n        domMessageState = 'valid';\n      }\n    } else if (isNonCommercial) {\n      consoleMessageState = 'non_commercial';\n      domMessageState = 'valid';\n    } else {\n      consoleMessageState = 'invalid';\n      domMessageState = 'invalid';\n    }\n  } else {\n    consoleMessageState = 'missing';\n    domMessageState = 'missing';\n  }\n\n  if (_ignored()) {\n    consoleMessageState = 'valid';\n    domMessageState = 'valid';\n  }\n\n  if (!_notified && consoleMessageState !== 'valid') {\n    var message = consoleMessages[consoleMessageState]({\n      keyValidityDate: keyValidityDate,\n      hotVersion: hotVersion\n    });\n\n    if (message) {\n      console[consoleMessageState === 'non_commercial' ? 'info' : 'warn'](consoleMessages[consoleMessageState]({\n        keyValidityDate: keyValidityDate,\n        hotVersion: hotVersion\n      }));\n    }\n\n    _notified = true;\n  }\n\n  if (domMessageState !== 'valid' && element.parentNode) {\n    var _message = domMessages[domMessageState]({\n      keyValidityDate: keyValidityDate,\n      hotVersion: hotVersion\n    });\n\n    if (_message) {\n      var messageNode = document.createElement('div');\n      messageNode.id = 'hot-display-license-info';\n      messageNode.innerHTML = domMessages[domMessageState]({\n        keyValidityDate: keyValidityDate,\n        hotVersion: hotVersion\n      });\n      element.parentNode.insertBefore(messageNode, element.nextSibling);\n    }\n  }\n}\n\nfunction _checkKeySchema(v) {\n  var z = [][_m];\n  var p = z;\n\n  if (v[_m] !== _cp('\\x5A')) {\n    return false;\n  }\n\n  for (var c = '', i = '\\x42\\x3C\\x48\\x34\\x50\\x2B'.split(''), j = _cp(i.shift()); j; j = _cp(i.shift() || 'A')) {\n    --j < ''[_m] ? p = p | (_pi(\"\".concat(_pi(_hd(c) + (_hd(_ss(v, Math.abs(j), 2)) + []).padStart(2, '0')))) % 97 || 2) >> 1 : c = _ss(v, j, !j ? 6 : i[_m] === 1 ? 9 : 8);\n  }\n\n  return p === z;\n}\n/* eslint-enable */", "var $ = require('../internals/export');\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\n\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar $freeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); });\n\n// `Object.freeze` method\n// https://tc39.es/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n  freeze: function freeze(it) {\n    return $freeze && isObject(it) ? $freeze(onFreeze(it)) : it;\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar codeAt = require('../internals/string-multibyte').codeAt;\n\n// `String.prototype.codePointAt` method\n// https://tc39.es/ecma262/#sec-string.prototype.codepointat\n$({ target: 'String', proto: true }, {\n  codePointAt: function codePointAt(pos) {\n    return codeAt(this, pos);\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n  padStart: function padStart(maxLength /* , fillString = ' ' */) {\n    return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n", "import \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.string.trim.js\";\nimport { arrayReduce } from \"../helpers/array.mjs\";\n/**\n * Tags a multiline string and return new one without line break characters and following spaces.\n *\n * @param {Array} strings Parts of the entire string without expressions.\n * @param {...string} expressions Expressions converted to strings, which are added to the entire string.\n * @returns {string}\n */\n\nexport function toSingleLine(strings) {\n  for (var _len = arguments.length, expressions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    expressions[_key - 1] = arguments[_key];\n  }\n\n  var result = arrayReduce(strings, function (previousValue, currentValue, index) {\n    var valueWithoutWhiteSpaces = currentValue.replace(/\\r?\\n\\s*/g, '');\n    var expressionForIndex = expressions[index] ? expressions[index] : '';\n    return previousValue + valueWithoutWhiteSpaces + expressionForIndex;\n  }, '');\n  return result.trim();\n}", "import \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.reverse.js\";\nimport { arrayReduce } from \"./array.mjs\";\nimport { isDefined } from \"./mixed.mjs\";\n/**\n * Checks if given variable is function.\n *\n * @param {*} func Variable to check.\n * @returns {boolean}\n */\n\nexport function isFunction(func) {\n  return typeof func === 'function';\n}\n/**\n * Creates throttle function that enforces a maximum number of times a function (`func`) can be called over time (`wait`).\n *\n * @param {Function} func Function to invoke.\n * @param {number} wait Delay in miliseconds.\n * @returns {Function}\n */\n\nexport function throttle(func) {\n  var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;\n  var lastCalled = 0;\n  var result = {\n    lastCallThrottled: true\n  };\n  var lastTimer = null;\n  /**\n   * @param {...*} args The list of arguments passed during the function invocation.\n   * @returns {object}\n   */\n\n  function _throttle() {\n    var _this = this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    var stamp = Date.now();\n    var needCall = false;\n    result.lastCallThrottled = true;\n\n    if (!lastCalled) {\n      lastCalled = stamp;\n      needCall = true;\n    }\n\n    var remaining = wait - (stamp - lastCalled);\n\n    if (needCall) {\n      result.lastCallThrottled = false;\n      func.apply(this, args);\n    } else {\n      if (lastTimer) {\n        clearTimeout(lastTimer);\n      }\n\n      lastTimer = setTimeout(function () {\n        result.lastCallThrottled = false;\n        func.apply(_this, args);\n        lastCalled = 0;\n        lastTimer = void 0;\n      }, remaining);\n    }\n\n    return result;\n  }\n\n  return _throttle;\n}\n/**\n * Creates throttle function that enforces a maximum number of times a function (`func`) can be called over\n * time (`wait`) after specified hits.\n *\n * @param {Function} func Function to invoke.\n * @param {number} wait Delay in miliseconds.\n * @param {number} hits Number of hits after throttling will be applied.\n * @returns {Function}\n */\n\nexport function throttleAfterHits(func) {\n  var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;\n  var hits = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n  var funcThrottle = throttle(func, wait);\n  var remainHits = hits;\n  /**\n   *\n   */\n\n  function _clearHits() {\n    remainHits = hits;\n  }\n  /**\n   * @param {*} args The list of arguments passed during the function invocation.\n   * @returns {*}\n   */\n\n\n  function _throttleAfterHits() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    if (remainHits) {\n      remainHits -= 1;\n      return func.apply(this, args);\n    }\n\n    return funcThrottle.apply(this, args);\n  }\n\n  _throttleAfterHits.clearHits = _clearHits;\n  return _throttleAfterHits;\n}\n/**\n * Creates debounce function that enforces a function (`func`) not be called again until a certain amount of time (`wait`)\n * has passed without it being called.\n *\n * @param {Function} func Function to invoke.\n * @param {number} wait Delay in milliseconds.\n * @returns {Function}\n */\n\nexport function debounce(func) {\n  var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;\n  var lastTimer = null;\n  var result;\n  /**\n   * @param {*} args The list of arguments passed during the function invocation.\n   * @returns {*}\n   */\n\n  function _debounce() {\n    var _this2 = this;\n\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n\n    if (lastTimer) {\n      clearTimeout(lastTimer);\n    }\n\n    lastTimer = setTimeout(function () {\n      result = func.apply(_this2, args);\n    }, wait);\n    return result;\n  }\n\n  return _debounce;\n}\n/**\n * Creates the function that returns the result of calling the given functions. Result of the first function is passed to\n * the second as an argument and so on. Only first function in the chain can handle multiple arguments.\n *\n * @param {Function} functions Functions to compose.\n * @returns {Function}\n */\n\nexport function pipe() {\n  for (var _len4 = arguments.length, functions = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n    functions[_key4] = arguments[_key4];\n  }\n\n  var firstFunc = functions[0],\n      restFunc = functions.slice(1);\n  return function _pipe() {\n    for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n      args[_key5] = arguments[_key5];\n    }\n\n    return arrayReduce(restFunc, function (acc, fn) {\n      return fn(acc);\n    }, firstFunc.apply(this, args));\n  };\n}\n/**\n * Creates the function that returns the function with cached arguments.\n *\n * @param {Function} func Function to partialization.\n * @param {Array} params Function arguments to cache.\n * @returns {Function}\n */\n\nexport function partial(func) {\n  for (var _len6 = arguments.length, params = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n    params[_key6 - 1] = arguments[_key6];\n  }\n\n  return function _partial() {\n    for (var _len7 = arguments.length, restParams = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n      restParams[_key7] = arguments[_key7];\n    }\n\n    return func.apply(this, params.concat(restParams));\n  };\n}\n/**\n * Creates the functions that returns the function with cached arguments. If count if passed arguments will be matched\n * to the arguments defined in `func` then function will be invoked.\n * Arguments are added to the stack in direction from the left to the right.\n *\n * @example\n * ```\n * var replace = curry(function(find, replace, string) {\n *   return string.replace(find, replace);\n * });\n *\n * // returns function with bounded first argument\n * var replace = replace('foo')\n *\n * // returns replaced string - all arguments was passed so function was invoked\n * replace('bar', 'Some test with foo...');\n *\n * ```\n *\n * @param {Function} func Function to currying.\n * @returns {Function}\n */\n\nexport function curry(func) {\n  var argsLength = func.length;\n  /**\n   * @param {*} argsSoFar The list of arguments passed during the function invocation.\n   * @returns {Function}\n   */\n\n  function given(argsSoFar) {\n    return function _curry() {\n      for (var _len8 = arguments.length, params = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n        params[_key8] = arguments[_key8];\n      }\n\n      var passedArgsSoFar = argsSoFar.concat(params);\n      var result;\n\n      if (passedArgsSoFar.length >= argsLength) {\n        result = func.apply(this, passedArgsSoFar);\n      } else {\n        result = given(passedArgsSoFar);\n      }\n\n      return result;\n    };\n  }\n\n  return given([]);\n}\n/**\n * Creates the functions that returns the function with cached arguments. If count if passed arguments will be matched\n * to the arguments defined in `func` then function will be invoked.\n * Arguments are added to the stack in direction from the right to the left.\n *\n * @example\n * ```\n * var replace = curry(function(find, replace, string) {\n *   return string.replace(find, replace);\n * });\n *\n * // returns function with bounded first argument\n * var replace = replace('Some test with foo...')\n *\n * // returns replaced string - all arguments was passed so function was invoked\n * replace('bar', 'foo');\n *\n * ```\n *\n * @param {Function} func Function to currying.\n * @returns {Function}\n */\n\nexport function curryRight(func) {\n  var argsLength = func.length;\n  /**\n   * @param {*} argsSoFar The list of arguments passed during the function invocation.\n   * @returns {Function}\n   */\n\n  function given(argsSoFar) {\n    return function _curry() {\n      for (var _len9 = arguments.length, params = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n        params[_key9] = arguments[_key9];\n      }\n\n      var passedArgsSoFar = argsSoFar.concat(params.reverse());\n      var result;\n\n      if (passedArgsSoFar.length >= argsLength) {\n        result = func.apply(this, passedArgsSoFar);\n      } else {\n        result = given(passedArgsSoFar);\n      }\n\n      return result;\n    };\n  }\n\n  return given([]);\n}\n/**\n * Calls a function in the quickest way available.\n *\n * In contrast to the `apply()` method that passes arguments as an array,\n * the `call()` method passes arguments directly, to avoid garbage collection costs.\n *\n * @param {Function} func The function to call.\n * @param {*} context The value to use as `this` when calling the `func` function.\n * @param {*} [arg1] An argument passed to the `func` function.\n * @param {*} [arg2] An argument passed to `func` function.\n * @param {*} [arg3] An argument passed to `func` function.\n * @param {*} [arg4] An argument passed to `func` function.\n * @param {*} [arg5] An argument passed to `func` function.\n * @param {*} [arg6] An argument passed to `func` function.\n * @returns {*}\n */\n\nexport function fastCall(func, context, arg1, arg2, arg3, arg4, arg5, arg6) {\n  if (isDefined(arg6)) {\n    return func.call(context, arg1, arg2, arg3, arg4, arg5, arg6);\n  } else if (isDefined(arg5)) {\n    return func.call(context, arg1, arg2, arg3, arg4, arg5);\n  } else if (isDefined(arg4)) {\n    return func.call(context, arg1, arg2, arg3, arg4);\n  } else if (isDefined(arg3)) {\n    return func.call(context, arg1, arg2, arg3);\n  } else if (isDefined(arg2)) {\n    return func.call(context, arg1, arg2);\n  } else if (isDefined(arg1)) {\n    return func.call(context, arg1);\n  }\n\n  return func.call(context);\n}", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { CellCoords } from \"./3rdparty/walkontable/src/index.mjs\";\nimport { KEY_CODES, isFunctionKey, isCtrlMetaKey } from \"./helpers/unicode.mjs\";\nimport { stopImmediatePropagation, isImmediatePropagationStopped } from \"./helpers/dom/event.mjs\";\nimport { getEditorInstance } from \"./editors/registry.mjs\";\nimport EventManager from \"./eventManager.mjs\";\nimport { EDITOR_STATE } from \"./editors/baseEditor/index.mjs\";\nimport { getParentWindow } from \"./helpers/dom/element.mjs\";\n\nvar EditorManager = /*#__PURE__*/function () {\n  /**\n   * @param {Core} instance The Handsontable instance.\n   * @param {TableMeta} tableMeta The table meta instance.\n   * @param {Selection} selection The selection instance.\n   */\n  function EditorManager(instance, tableMeta, selection) {\n    var _this = this;\n\n    _classCallCheck(this, EditorManager);\n\n    /**\n     * Instance of {@link Handsontable}.\n     *\n     * @private\n     * @type {Handsontable}\n     */\n    this.instance = instance;\n    /**\n     * Reference to an instance's private GridSettings object.\n     *\n     * @private\n     * @type {GridSettings}\n     */\n\n    this.tableMeta = tableMeta;\n    /**\n     * Instance of {@link Selection}.\n     *\n     * @private\n     * @type {Selection}\n     */\n\n    this.selection = selection;\n    /**\n     * Instance of {@link EventManager}.\n     *\n     * @private\n     * @type {EventManager}\n     */\n\n    this.eventManager = new EventManager(instance);\n    /**\n     * Determines if EditorManager is destroyed.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    this.destroyed = false;\n    /**\n     * Determines if EditorManager is locked.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    this.lock = false;\n    /**\n     * A reference to an instance of the activeEditor.\n     *\n     * @private\n     * @type {BaseEditor}\n     */\n\n    this.activeEditor = void 0;\n    /**\n     * Keeps a reference to the cell's properties object.\n     *\n     * @type {object}\n     */\n\n    this.cellProperties = void 0;\n    /**\n     * Keeps last keyCode pressed from the keydown event.\n     *\n     * @type {number}\n     */\n\n    this.lastKeyCode = void 0;\n    this.instance.addHook('afterDocumentKeyDown', function (event) {\n      return _this.onAfterDocumentKeyDown(event);\n    });\n    var frame = this.instance.rootWindow;\n\n    while (frame) {\n      this.eventManager.addEventListener(frame.document.documentElement, 'keydown', function (event) {\n        if (!_this.destroyed) {\n          _this.instance.runHooks('afterDocumentKeyDown', event);\n        }\n      });\n      frame = getParentWindow(frame);\n    } // Open editor when text composition is started (IME editor)\n\n\n    this.eventManager.addEventListener(this.instance.rootDocument.documentElement, 'compositionstart', function (event) {\n      if (!_this.destroyed && _this.activeEditor && !_this.activeEditor.isOpened() && _this.instance.isListening()) {\n        _this.openEditor('', event);\n      }\n    });\n    this.instance.view.wt.update('onCellDblClick', function (event, coords, elem) {\n      return _this.onCellDblClick(event, coords, elem);\n    });\n  }\n  /**\n   * Lock the editor from being prepared and closed. Locking the editor prevents its closing and\n   * reinitialized after selecting the new cell. This feature is necessary for a mobile editor.\n   */\n\n\n  _createClass(EditorManager, [{\n    key: \"lockEditor\",\n    value: function lockEditor() {\n      this.lock = true;\n    }\n    /**\n     * Unlock the editor from being prepared and closed. This method restores the original behavior of\n     * the editors where for every new selection its instances are closed.\n     */\n\n  }, {\n    key: \"unlockEditor\",\n    value: function unlockEditor() {\n      this.lock = false;\n    }\n    /**\n     * Destroy current editor, if exists.\n     *\n     * @param {boolean} revertOriginal If `false` and the cell using allowInvalid option,\n     *                                 then an editor won't be closed until validation is passed.\n     */\n\n  }, {\n    key: \"destroyEditor\",\n    value: function destroyEditor(revertOriginal) {\n      if (!this.lock) {\n        this.closeEditor(revertOriginal);\n      }\n    }\n    /**\n     * Get active editor.\n     *\n     * @returns {BaseEditor}\n     */\n\n  }, {\n    key: \"getActiveEditor\",\n    value: function getActiveEditor() {\n      return this.activeEditor;\n    }\n    /**\n     * Prepare text input to be displayed at given grid cell.\n     */\n\n  }, {\n    key: \"prepareEditor\",\n    value: function prepareEditor() {\n      var _this2 = this;\n\n      if (this.lock) {\n        return;\n      }\n\n      if (this.activeEditor && this.activeEditor.isWaiting()) {\n        this.closeEditor(false, false, function (dataSaved) {\n          if (dataSaved) {\n            _this2.prepareEditor();\n          }\n        });\n        return;\n      }\n\n      var _this$instance$select = this.instance.selection.selectedRange.current().highlight,\n          row = _this$instance$select.row,\n          col = _this$instance$select.col;\n      var modifiedCellCoords = this.instance.runHooks('modifyGetCellCoords', row, col);\n      var visualRowToCheck = row;\n      var visualColumnToCheck = col;\n\n      if (Array.isArray(modifiedCellCoords)) {\n        var _modifiedCellCoords = _slicedToArray(modifiedCellCoords, 2);\n\n        visualRowToCheck = _modifiedCellCoords[0];\n        visualColumnToCheck = _modifiedCellCoords[1];\n      } // Getting values using the modified coordinates.\n\n\n      this.cellProperties = this.instance.getCellMeta(visualRowToCheck, visualColumnToCheck);\n      var activeElement = this.instance.rootDocument.activeElement;\n\n      if (activeElement) {\n        // Bluring the activeElement removes unwanted border around the focusable element\n        // (and resets activeElement prop). Without blurring the activeElement points to the\n        // previously focusable element after clicking onto the cell (#6877).\n        activeElement.blur();\n      }\n\n      if (this.cellProperties.readOnly) {\n        this.clearActiveEditor();\n        return;\n      }\n\n      var editorClass = this.instance.getCellEditor(this.cellProperties); // Getting element using coordinates from the selection.\n\n      var td = this.instance.getCell(row, col, true);\n\n      if (editorClass && td) {\n        var prop = this.instance.colToProp(visualColumnToCheck);\n        var originalValue = this.instance.getSourceDataAtCell(this.instance.toPhysicalRow(visualRowToCheck), visualColumnToCheck);\n        this.activeEditor = getEditorInstance(editorClass, this.instance); // Using not modified coordinates, as we need to get the table element using selection coordinates.\n        // There is an extra translation in the editor for saving value.\n\n        this.activeEditor.prepare(row, col, prop, td, originalValue, this.cellProperties);\n      } else {\n        this.clearActiveEditor();\n      }\n    }\n    /**\n     * Check is editor is opened/showed.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isEditorOpened\",\n    value: function isEditorOpened() {\n      return this.activeEditor && this.activeEditor.isOpened();\n    }\n    /**\n     * Open editor with initial value.\n     *\n     * @param {null|string} newInitialValue New value from which editor will start if handled property it's not the `null`.\n     * @param {Event} event The event object.\n     */\n\n  }, {\n    key: \"openEditor\",\n    value: function openEditor(newInitialValue, event) {\n      if (!this.activeEditor) {\n        return;\n      }\n\n      this.activeEditor.beginEditing(newInitialValue, event);\n    }\n    /**\n     * Close editor, finish editing cell.\n     *\n     * @param {boolean} restoreOriginalValue If `true`, then closes editor without saving value from the editor into a cell.\n     * @param {boolean} isCtrlPressed If `true`, then editor will save value to each cell in the last selected range.\n     * @param {Function} callback The callback function, fired after editor closing.\n     */\n\n  }, {\n    key: \"closeEditor\",\n    value: function closeEditor(restoreOriginalValue, isCtrlPressed, callback) {\n      if (this.activeEditor) {\n        this.activeEditor.finishEditing(restoreOriginalValue, isCtrlPressed, callback);\n      } else if (callback) {\n        callback(false);\n      }\n    }\n    /**\n     * Close editor and save changes.\n     *\n     * @param {boolean} isCtrlPressed If `true`, then editor will save value to each cell in the last selected range.\n     */\n\n  }, {\n    key: \"closeEditorAndSaveChanges\",\n    value: function closeEditorAndSaveChanges(isCtrlPressed) {\n      this.closeEditor(false, isCtrlPressed);\n    }\n    /**\n     * Close editor and restore original value.\n     *\n     * @param {boolean} isCtrlPressed Indication of whether the CTRL button is pressed.\n     */\n\n  }, {\n    key: \"closeEditorAndRestoreOriginalValue\",\n    value: function closeEditorAndRestoreOriginalValue(isCtrlPressed) {\n      this.closeEditor(true, isCtrlPressed);\n    }\n    /**\n     * Clears reference to an instance of the active editor.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"clearActiveEditor\",\n    value: function clearActiveEditor() {\n      this.activeEditor = void 0;\n    }\n    /**\n     * Controls selection's behaviour after clicking `Enter`.\n     *\n     * @private\n     * @param {boolean} isShiftPressed If `true`, then the selection will move up after hit enter.\n     */\n\n  }, {\n    key: \"moveSelectionAfterEnter\",\n    value: function moveSelectionAfterEnter(isShiftPressed) {\n      var enterMoves = typeof this.tableMeta.enterMoves === 'function' ? this.tableMeta.enterMoves(event) : this.tableMeta.enterMoves;\n\n      if (isShiftPressed) {\n        // move selection up\n        this.selection.transformStart(-enterMoves.row, -enterMoves.col);\n      } else {\n        // move selection down (add a new row if needed)\n        this.selection.transformStart(enterMoves.row, enterMoves.col, true);\n      }\n    }\n    /**\n     * Controls selection behaviour after clicking `arrow up`.\n     *\n     * @private\n     * @param {boolean} isShiftPressed If `true`, then the selection will expand up.\n     */\n\n  }, {\n    key: \"moveSelectionUp\",\n    value: function moveSelectionUp(isShiftPressed) {\n      if (isShiftPressed) {\n        this.selection.transformEnd(-1, 0);\n      } else {\n        this.selection.transformStart(-1, 0);\n      }\n    }\n    /**\n     * Controls selection's behaviour after clicking `arrow down`.\n     *\n     * @private\n     * @param {boolean} isShiftPressed If `true`, then the selection will expand down.\n     */\n\n  }, {\n    key: \"moveSelectionDown\",\n    value: function moveSelectionDown(isShiftPressed) {\n      if (isShiftPressed) {\n        // expanding selection down with shift\n        this.selection.transformEnd(1, 0);\n      } else {\n        this.selection.transformStart(1, 0);\n      }\n    }\n    /**\n     * Controls selection's behaviour after clicking `arrow right`.\n     *\n     * @private\n     * @param {boolean} isShiftPressed If `true`, then the selection will expand right.\n     */\n\n  }, {\n    key: \"moveSelectionRight\",\n    value: function moveSelectionRight(isShiftPressed) {\n      if (isShiftPressed) {\n        this.selection.transformEnd(0, this.instance.getDirectionFactor());\n      } else {\n        this.selection.transformStart(0, this.instance.getDirectionFactor());\n      }\n    }\n    /**\n     * Controls selection's behaviour after clicking `arrow left`.\n     *\n     * @private\n     * @param {boolean} isShiftPressed If `true`, then the selection will expand left.\n     */\n\n  }, {\n    key: \"moveSelectionLeft\",\n    value: function moveSelectionLeft(isShiftPressed) {\n      if (isShiftPressed) {\n        this.selection.transformEnd(0, -1 * this.instance.getDirectionFactor());\n      } else {\n        this.selection.transformStart(0, -1 * this.instance.getDirectionFactor());\n      }\n    }\n    /**\n     * OnAfterDocumentKeyDown callback.\n     *\n     * @private\n     * @param {KeyboardEvent} event The keyboard event object.\n     */\n\n  }, {\n    key: \"onAfterDocumentKeyDown\",\n    value: function onAfterDocumentKeyDown(event) {\n      if (!this.instance.isListening()) {\n        return;\n      }\n\n      this.instance.runHooks('beforeKeyDown', event);\n      var keyCode = event.keyCode; // keyCode 229 aka 'uninitialized' doesn't take into account with editors. This key code is produced when unfinished\n      // character is entering (using IME editor). It is fired mainly on linux (ubuntu) with installed ibus-pinyin package.\n\n      if (this.destroyed || keyCode === 229) {\n        return;\n      }\n\n      if (isImmediatePropagationStopped(event)) {\n        return;\n      }\n\n      this.lastKeyCode = keyCode;\n\n      if (!this.selection.isSelected()) {\n        return;\n      } // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL)\n\n\n      var isCtrlPressed = (event.ctrlKey || event.metaKey) && !event.altKey;\n\n      if (this.activeEditor && !this.activeEditor.isWaiting()) {\n        if (!isFunctionKey(keyCode) && !isCtrlMetaKey(keyCode) && !isCtrlPressed && !this.isEditorOpened()) {\n          this.openEditor('', event);\n          return;\n        }\n      }\n\n      var isShiftPressed = event.shiftKey;\n      var rangeModifier = isShiftPressed ? this.selection.setRangeEnd : this.selection.setRangeStart;\n      var tabMoves;\n\n      switch (keyCode) {\n        case KEY_CODES.A:\n          if (!this.isEditorOpened() && isCtrlPressed) {\n            this.instance.selectAll();\n            event.preventDefault();\n            event.stopPropagation();\n          }\n\n          break;\n\n        case KEY_CODES.ARROW_UP:\n          if (this.isEditorOpened() && !this.activeEditor.isWaiting()) {\n            this.closeEditorAndSaveChanges(isCtrlPressed);\n          }\n\n          this.moveSelectionUp(isShiftPressed);\n          event.preventDefault();\n          event.stopPropagation();\n          break;\n\n        case KEY_CODES.ARROW_DOWN:\n          if (this.isEditorOpened() && !this.activeEditor.isWaiting()) {\n            this.closeEditorAndSaveChanges(isCtrlPressed);\n          }\n\n          this.moveSelectionDown(isShiftPressed);\n          event.preventDefault();\n          event.stopPropagation();\n          break;\n\n        case KEY_CODES.ARROW_RIGHT:\n          if (this.isEditorOpened() && !this.activeEditor.isWaiting()) {\n            this.closeEditorAndSaveChanges(isCtrlPressed);\n          }\n\n          this.moveSelectionRight(isShiftPressed);\n          event.preventDefault();\n          event.stopPropagation();\n          break;\n\n        case KEY_CODES.ARROW_LEFT:\n          if (this.isEditorOpened() && !this.activeEditor.isWaiting()) {\n            this.closeEditorAndSaveChanges(isCtrlPressed);\n          }\n\n          this.moveSelectionLeft(isShiftPressed);\n          event.preventDefault();\n          event.stopPropagation();\n          break;\n\n        case KEY_CODES.TAB:\n          tabMoves = typeof this.tableMeta.tabMoves === 'function' ? this.tableMeta.tabMoves(event) : this.tableMeta.tabMoves;\n\n          if (isShiftPressed) {\n            // move selection left\n            this.selection.transformStart(-tabMoves.row, -tabMoves.col);\n          } else {\n            // move selection right (add a new column if needed)\n            this.selection.transformStart(tabMoves.row, tabMoves.col, true);\n          }\n\n          event.preventDefault();\n          event.stopPropagation();\n          break;\n\n        case KEY_CODES.BACKSPACE:\n        case KEY_CODES.DELETE:\n          this.instance.emptySelectedCells();\n          this.prepareEditor();\n          event.preventDefault();\n          break;\n\n        case KEY_CODES.F2:\n          /* F2 */\n          if (this.activeEditor) {\n            this.activeEditor.enableFullEditMode();\n          }\n\n          this.openEditor(null, event);\n          event.preventDefault(); // prevent Opera from opening 'Go to Page dialog'\n\n          break;\n\n        case KEY_CODES.ENTER:\n          /* return/enter */\n          if (this.isEditorOpened()) {\n            if (this.activeEditor && this.activeEditor.state !== EDITOR_STATE.WAITING) {\n              this.closeEditorAndSaveChanges(isCtrlPressed);\n            }\n\n            this.moveSelectionAfterEnter(isShiftPressed);\n          } else if (this.instance.getSettings().enterBeginsEditing) {\n            if (this.cellProperties.readOnly) {\n              this.moveSelectionAfterEnter();\n            } else if (this.activeEditor) {\n              this.activeEditor.enableFullEditMode();\n              this.openEditor(null, event);\n            }\n          } else {\n            this.moveSelectionAfterEnter(isShiftPressed);\n          }\n\n          event.preventDefault(); // don't add newline to field\n\n          stopImmediatePropagation(event); // required by HandsontableEditor\n\n          break;\n\n        case KEY_CODES.ESCAPE:\n          if (this.isEditorOpened()) {\n            this.closeEditorAndRestoreOriginalValue(isCtrlPressed);\n            this.activeEditor.focus();\n          }\n\n          event.preventDefault();\n          break;\n\n        case KEY_CODES.HOME:\n          if (event.ctrlKey || event.metaKey) {\n            rangeModifier.call(this.selection, new CellCoords(this.instance.rowIndexMapper.getFirstNotHiddenIndex(0, 1), this.selection.selectedRange.current().from.col));\n          } else {\n            rangeModifier.call(this.selection, new CellCoords(this.selection.selectedRange.current().from.row, this.instance.columnIndexMapper.getFirstNotHiddenIndex(0, 1)));\n          }\n\n          event.preventDefault(); // don't scroll the window\n\n          event.stopPropagation();\n          break;\n\n        case KEY_CODES.END:\n          if (event.ctrlKey || event.metaKey) {\n            rangeModifier.call(this.selection, new CellCoords(this.instance.rowIndexMapper.getFirstNotHiddenIndex(this.instance.countRows() - 1, -1), this.selection.selectedRange.current().from.col));\n          } else {\n            rangeModifier.call(this.selection, new CellCoords(this.selection.selectedRange.current().from.row, this.instance.columnIndexMapper.getFirstNotHiddenIndex(this.instance.countCols() - 1, -1)));\n          }\n\n          event.preventDefault(); // don't scroll the window\n\n          event.stopPropagation();\n          break;\n\n        case KEY_CODES.PAGE_UP:\n          this.selection.transformStart(-this.instance.countVisibleRows(), 0);\n          event.preventDefault(); // don't page up the window\n\n          event.stopPropagation();\n          break;\n\n        case KEY_CODES.PAGE_DOWN:\n          this.selection.transformStart(this.instance.countVisibleRows(), 0);\n          event.preventDefault(); // don't page down the window\n\n          event.stopPropagation();\n          break;\n\n        default:\n          break;\n      }\n    }\n    /**\n     * OnCellDblClick callback.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event object.\n     * @param {object} coords The cell coordinates.\n     * @param {HTMLTableCellElement|HTMLTableHeaderCellElement} elem The element which triggers the action.\n     */\n\n  }, {\n    key: \"onCellDblClick\",\n    value: function onCellDblClick(event, coords, elem) {\n      // may be TD or TH\n      if (elem.nodeName === 'TD') {\n        if (this.activeEditor) {\n          this.activeEditor.enableFullEditMode();\n        }\n\n        this.openEditor(null, event);\n      }\n    }\n    /**\n     * Destroy the instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.destroyed = true;\n      this.eventManager.destroy();\n    }\n  }]);\n\n  return EditorManager;\n}();\n\nvar instances = new WeakMap();\n/**\n * @param {Core} hotInstance The Handsontable instance.\n * @param {TableMeta} tableMeta The table meta class instance.\n * @param {Selection} selection The selection instance.\n * @returns {EditorManager}\n */\n\nEditorManager.getInstance = function (hotInstance, tableMeta, selection) {\n  var editorManager = instances.get(hotInstance);\n\n  if (!editorManager) {\n    editorManager = new EditorManager(hotInstance, tableMeta, selection);\n    instances.set(hotInstance, editorManager);\n  }\n\n  return editorManager;\n};\n\nexport default EditorManager;", "'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar redefineAll = require('../internals/redefine-all');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar isExtensible = require('../internals/object-is-extensible');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar NATIVE_WEAK_MAP = require('../internals/native-weak-map');\n\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n  return function WeakMap() {\n    return init(this, arguments.length ? arguments[0] : undefined);\n  };\n};\n\n// `WeakMap` constructor\n// https://tc39.es/ecma262/#sec-weakmap-constructor\nvar $WeakMap = collection('WeakMap', wrapper, collectionWeak);\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP && IS_IE11) {\n  InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n  InternalMetadataModule.enable();\n  var WeakMapPrototype = $WeakMap.prototype;\n  var nativeDelete = uncurryThis(WeakMapPrototype['delete']);\n  var nativeHas = uncurryThis(WeakMapPrototype.has);\n  var nativeGet = uncurryThis(WeakMapPrototype.get);\n  var nativeSet = uncurryThis(WeakMapPrototype.set);\n  redefineAll(WeakMapPrototype, {\n    'delete': function (key) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceInternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        return nativeDelete(this, key) || state.frozen['delete'](key);\n      } return nativeDelete(this, key);\n    },\n    has: function has(key) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceInternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        return nativeHas(this, key) || state.frozen.has(key);\n      } return nativeHas(this, key);\n    },\n    get: function get(key) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceInternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key);\n      } return nativeGet(this, key);\n    },\n    set: function set(key, value) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceInternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value);\n      } else nativeSet(this, key, value);\n      return this;\n    }\n  });\n}\n", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport { RENDER_TYPE, FULLY_VISIBLE_TYPE } from \"./constants.mjs\";\nvar privatePool = new WeakMap();\n/**\n * Calculates indexes of columns to render OR columns that are visible.\n * To redo the calculation, you need to create a new calculator.\n *\n * @class ViewportColumnsCalculator\n */\n\nvar ViewportColumnsCalculator = /*#__PURE__*/function () {\n  /**\n   * @param {object} options Object with all options specified for column viewport calculation.\n   * @param {number} options.viewportSize Width of the viewport.\n   * @param {number} options.scrollOffset Current horizontal scroll position of the viewport.\n   * @param {number} options.totalItems Total number of columns.\n   * @param {Function} options.itemSizeFn Function that returns the width of the column at a given index (in px).\n   * @param {Function} options.overrideFn Function that changes calculated this.startRow, this.endRow (used by MergeCells plugin).\n   * @param {string} options.calculationType String which describes types of calculation which will be performed.\n   * @param {string} [options.stretchMode] Stretch mode 'all' or 'last'.\n   * @param {Function} [options.stretchingItemWidthFn] Function that returns the new width of the stretched column.\n   */\n  function ViewportColumnsCalculator() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        viewportSize = _ref.viewportSize,\n        scrollOffset = _ref.scrollOffset,\n        totalItems = _ref.totalItems,\n        itemSizeFn = _ref.itemSizeFn,\n        overrideFn = _ref.overrideFn,\n        calculationType = _ref.calculationType,\n        stretchMode = _ref.stretchMode,\n        _ref$stretchingItemWi = _ref.stretchingItemWidthFn,\n        stretchingItemWidthFn = _ref$stretchingItemWi === void 0 ? function (width) {\n      return width;\n    } : _ref$stretchingItemWi;\n\n    _classCallCheck(this, ViewportColumnsCalculator);\n\n    privatePool.set(this, {\n      viewportWidth: viewportSize,\n      scrollOffset: scrollOffset,\n      totalColumns: totalItems,\n      columnWidthFn: itemSizeFn,\n      overrideFn: overrideFn,\n      calculationType: calculationType,\n      stretchingColumnWidthFn: stretchingItemWidthFn\n    });\n    /**\n     * Number of rendered/visible columns.\n     *\n     * @type {number}\n     */\n\n    this.count = 0;\n    /**\n     * Index of the first rendered/visible column (can be overwritten using overrideFn).\n     *\n     * @type {number|null}\n     */\n\n    this.startColumn = null;\n    /**\n     * Index of the last rendered/visible column (can be overwritten using overrideFn).\n     *\n     * @type {null}\n     */\n\n    this.endColumn = null;\n    /**\n     * Position of the first rendered/visible column (in px).\n     *\n     * @type {number|null}\n     */\n\n    this.startPosition = null;\n    this.stretchAllRatio = 0;\n    this.stretchLastWidth = 0;\n    this.stretch = stretchMode;\n    this.totalTargetWidth = 0;\n    this.needVerifyLastColumnWidth = true;\n    this.stretchAllColumnsWidth = [];\n    this.calculate();\n  }\n  /**\n   * Calculates viewport.\n   */\n\n\n  _createClass(ViewportColumnsCalculator, [{\n    key: \"calculate\",\n    value: function calculate() {\n      var sum = 0;\n      var needReverse = true;\n      var startPositions = [];\n      var columnWidth;\n      var priv = privatePool.get(this);\n      var calculationType = priv.calculationType;\n      var overrideFn = priv.overrideFn;\n      var scrollOffset = priv.scrollOffset;\n      var totalColumns = priv.totalColumns;\n      var viewportWidth = priv.viewportWidth;\n\n      for (var i = 0; i < totalColumns; i++) {\n        columnWidth = this._getColumnWidth(i);\n\n        if (sum <= scrollOffset && calculationType !== FULLY_VISIBLE_TYPE) {\n          this.startColumn = i;\n        } // +1 pixel for row header width compensation for horizontal scroll > 0\n\n\n        var compensatedViewportWidth = scrollOffset > 0 ? viewportWidth + 1 : viewportWidth;\n\n        if (sum >= scrollOffset && sum + (calculationType === FULLY_VISIBLE_TYPE ? columnWidth : 0) <= scrollOffset + compensatedViewportWidth) {\n          // eslint-disable-line max-len\n          if (this.startColumn === null || this.startColumn === void 0) {\n            this.startColumn = i;\n          }\n\n          this.endColumn = i;\n        }\n\n        startPositions.push(sum);\n        sum += columnWidth;\n\n        if (calculationType !== FULLY_VISIBLE_TYPE) {\n          this.endColumn = i;\n        }\n\n        if (sum >= scrollOffset + viewportWidth) {\n          needReverse = false;\n          break;\n        }\n      }\n\n      if (this.endColumn === totalColumns - 1 && needReverse) {\n        this.startColumn = this.endColumn;\n\n        while (this.startColumn > 0) {\n          var viewportSum = startPositions[this.endColumn] + columnWidth - startPositions[this.startColumn - 1];\n\n          if (viewportSum <= viewportWidth || calculationType !== FULLY_VISIBLE_TYPE) {\n            this.startColumn -= 1;\n          }\n\n          if (viewportSum > viewportWidth) {\n            break;\n          }\n        }\n      }\n\n      if (calculationType === RENDER_TYPE && this.startColumn !== null && overrideFn) {\n        overrideFn(this);\n      }\n\n      this.startPosition = startPositions[this.startColumn];\n\n      if (this.startPosition === void 0) {\n        this.startPosition = null;\n      } // If totalColumns exceeded its total columns size set endColumn to the latest item\n\n\n      if (totalColumns < this.endColumn) {\n        this.endColumn = totalColumns - 1;\n      }\n\n      if (this.startColumn !== null) {\n        this.count = this.endColumn - this.startColumn + 1;\n      }\n    }\n    /**\n     * Recalculate columns stretching.\n     *\n     * @param {number} totalWidth The total width of the table.\n     */\n\n  }, {\n    key: \"refreshStretching\",\n    value: function refreshStretching(totalWidth) {\n      if (this.stretch === 'none') {\n        return;\n      }\n\n      var totalColumnsWidth = totalWidth;\n      this.totalTargetWidth = totalColumnsWidth;\n      var priv = privatePool.get(this);\n      var totalColumns = priv.totalColumns;\n      var sumAll = 0;\n\n      for (var i = 0; i < totalColumns; i++) {\n        var columnWidth = this._getColumnWidth(i);\n\n        var permanentColumnWidth = priv.stretchingColumnWidthFn(void 0, i);\n\n        if (typeof permanentColumnWidth === 'number') {\n          totalColumnsWidth -= permanentColumnWidth;\n        } else {\n          sumAll += columnWidth;\n        }\n      }\n\n      var remainingSize = totalColumnsWidth - sumAll;\n\n      if (this.stretch === 'all' && remainingSize > 0) {\n        this.stretchAllRatio = totalColumnsWidth / sumAll;\n        this.stretchAllColumnsWidth = [];\n        this.needVerifyLastColumnWidth = true;\n      } else if (this.stretch === 'last' && totalColumnsWidth !== Infinity) {\n        var _columnWidth = this._getColumnWidth(totalColumns - 1);\n\n        var lastColumnWidth = remainingSize + _columnWidth;\n        this.stretchLastWidth = lastColumnWidth >= 0 ? lastColumnWidth : _columnWidth;\n      }\n    }\n    /**\n     * Get stretched column width based on stretchH (all or last) setting passed in handsontable instance.\n     *\n     * @param {number} column The visual column index.\n     * @param {number} baseWidth The default column width.\n     * @returns {number|null}\n     */\n\n  }, {\n    key: \"getStretchedColumnWidth\",\n    value: function getStretchedColumnWidth(column, baseWidth) {\n      var result = null;\n\n      if (this.stretch === 'all' && this.stretchAllRatio !== 0) {\n        result = this._getStretchedAllColumnWidth(column, baseWidth);\n      } else if (this.stretch === 'last' && this.stretchLastWidth !== 0) {\n        result = this._getStretchedLastColumnWidth(column);\n      }\n\n      return result;\n    }\n    /**\n     * @param {number} column The visual column index.\n     * @param {number} baseWidth The default column width.\n     * @returns {number}\n     * @private\n     */\n\n  }, {\n    key: \"_getStretchedAllColumnWidth\",\n    value: function _getStretchedAllColumnWidth(column, baseWidth) {\n      var sumRatioWidth = 0;\n      var priv = privatePool.get(this);\n      var totalColumns = priv.totalColumns;\n\n      if (!this.stretchAllColumnsWidth[column]) {\n        var stretchedWidth = Math.round(baseWidth * this.stretchAllRatio);\n        var newStretchedWidth = priv.stretchingColumnWidthFn(stretchedWidth, column);\n\n        if (newStretchedWidth === void 0) {\n          this.stretchAllColumnsWidth[column] = stretchedWidth;\n        } else {\n          this.stretchAllColumnsWidth[column] = isNaN(newStretchedWidth) ? this._getColumnWidth(column) : newStretchedWidth;\n        }\n      }\n\n      if (this.stretchAllColumnsWidth.length === totalColumns && this.needVerifyLastColumnWidth) {\n        this.needVerifyLastColumnWidth = false;\n\n        for (var i = 0; i < this.stretchAllColumnsWidth.length; i++) {\n          sumRatioWidth += this.stretchAllColumnsWidth[i];\n        }\n\n        if (sumRatioWidth !== this.totalTargetWidth) {\n          this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length - 1] += this.totalTargetWidth - sumRatioWidth;\n        }\n      }\n\n      return this.stretchAllColumnsWidth[column];\n    }\n    /**\n     * @param {number} column The visual column index.\n     * @returns {number|null}\n     * @private\n     */\n\n  }, {\n    key: \"_getStretchedLastColumnWidth\",\n    value: function _getStretchedLastColumnWidth(column) {\n      var priv = privatePool.get(this);\n      var totalColumns = priv.totalColumns;\n\n      if (column === totalColumns - 1) {\n        return this.stretchLastWidth;\n      }\n\n      return null;\n    }\n    /**\n     * @param {number} column The visual column index.\n     * @returns {number}\n     * @private\n     */\n\n  }, {\n    key: \"_getColumnWidth\",\n    value: function _getColumnWidth(column) {\n      var width = privatePool.get(this).columnWidthFn(column);\n\n      if (isNaN(width)) {\n        width = ViewportColumnsCalculator.DEFAULT_WIDTH;\n      }\n\n      return width;\n    }\n  }], [{\n    key: \"DEFAULT_WIDTH\",\n    get:\n    /**\n     * Default column width.\n     *\n     * @type {number}\n     */\n    function get() {\n      return 50;\n    }\n  }]);\n\n  return ViewportColumnsCalculator;\n}();\n\nexport default ViewportColumnsCalculator;", "/**\n * Render type calculation calculates how many DOM nodes should be created and where placed\n * based on `startRow` and `endRow` properties.\n *\n * @type {number}\n */\nexport var RENDER_TYPE = 1;\n/**\n * Fully visible type calculation calculates rows that are fully visible in the viewport.\n * This type of calculation is used in scrolling by arrow keys navigation.\n *\n * @type {number}\n */\n\nexport var FULLY_VISIBLE_TYPE = 2;\n/**\n * Partially visible type calculation calculates rows that are fully and partially visible in\n * the viewport. This type of calculation is used to check `endRow` (or `startRow`) with properties\n * calculated in render calculator. If checking met the criteria slow render is\n * performed (which render calculator with new data).\n *\n * @type {number}\n */\n\nexport var PARTIALLY_VISIBLE_TYPE = 3;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport { RENDER_TYPE, FULLY_VISIBLE_TYPE } from \"./constants.mjs\";\nvar privatePool = new WeakMap();\n/**\n * Calculates indexes of rows to render OR rows that are visible.\n * To redo the calculation, you need to create a new calculator.\n *\n * @class ViewportRowsCalculator\n */\n\nvar ViewportRowsCalculator = /*#__PURE__*/function () {\n  /**\n   * @param {object} options Object with all options specified for row viewport calculation.\n   * @param {number} options.viewportSize Height of the viewport.\n   * @param {number} options.scrollOffset Current vertical scroll position of the viewport.\n   * @param {number} options.totalItems Total number of rows.\n   * @param {Function} options.itemSizeFn Function that returns the height of the row at a given index (in px).\n   * @param {Function} options.overrideFn Function that changes calculated this.startRow, this.endRow (used by MergeCells plugin).\n   * @param {string} options.calculationType String which describes types of calculation which will be performed.\n   * @param {number} options.scrollbarHeight The scrollbar height.\n   */\n  function ViewportRowsCalculator() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        viewportSize = _ref.viewportSize,\n        scrollOffset = _ref.scrollOffset,\n        totalItems = _ref.totalItems,\n        itemSizeFn = _ref.itemSizeFn,\n        overrideFn = _ref.overrideFn,\n        calculationType = _ref.calculationType,\n        scrollbarHeight = _ref.scrollbarHeight;\n\n    _classCallCheck(this, ViewportRowsCalculator);\n\n    privatePool.set(this, {\n      viewportHeight: viewportSize,\n      scrollOffset: scrollOffset,\n      totalRows: totalItems,\n      rowHeightFn: itemSizeFn,\n      overrideFn: overrideFn,\n      calculationType: calculationType,\n      horizontalScrollbarHeight: scrollbarHeight\n    });\n    /**\n     * Number of rendered/visible rows.\n     *\n     * @type {number}\n     */\n\n    this.count = 0;\n    /**\n     * Index of the first rendered/visible row (can be overwritten using overrideFn).\n     *\n     * @type {number|null}\n     */\n\n    this.startRow = null;\n    /**\n     * Index of the last rendered/visible row (can be overwritten using overrideFn).\n     *\n     * @type {null}\n     */\n\n    this.endRow = null;\n    /**\n     * Position of the first rendered/visible row (in px).\n     *\n     * @type {number|null}\n     */\n\n    this.startPosition = null;\n    this.calculate();\n  }\n  /**\n   * Calculates viewport.\n   */\n\n\n  _createClass(ViewportRowsCalculator, [{\n    key: \"calculate\",\n    value: function calculate() {\n      var sum = 0;\n      var needReverse = true;\n      var startPositions = [];\n      var priv = privatePool.get(this);\n      var calculationType = priv.calculationType;\n      var overrideFn = priv.overrideFn;\n      var rowHeightFn = priv.rowHeightFn;\n      var scrollOffset = priv.scrollOffset;\n      var totalRows = priv.totalRows;\n      var viewportHeight = priv.viewportHeight;\n      var horizontalScrollbarHeight = priv.horizontalScrollbarHeight || 0;\n      var rowHeight; // Calculate the number (start and end index) of rows needed\n\n      for (var i = 0; i < totalRows; i++) {\n        rowHeight = rowHeightFn(i);\n\n        if (isNaN(rowHeight)) {\n          rowHeight = ViewportRowsCalculator.DEFAULT_HEIGHT;\n        }\n\n        if (sum <= scrollOffset && calculationType !== FULLY_VISIBLE_TYPE) {\n          this.startRow = i;\n        }\n\n        if (sum >= scrollOffset && sum + (calculationType === FULLY_VISIBLE_TYPE ? rowHeight : 0) <= scrollOffset + viewportHeight - horizontalScrollbarHeight) {\n          // eslint-disable-line max-len\n          if (this.startRow === null) {\n            this.startRow = i;\n          }\n\n          this.endRow = i;\n        }\n\n        startPositions.push(sum);\n        sum += rowHeight;\n\n        if (calculationType !== FULLY_VISIBLE_TYPE) {\n          this.endRow = i;\n        }\n\n        if (sum >= scrollOffset + viewportHeight - horizontalScrollbarHeight) {\n          needReverse = false;\n          break;\n        }\n      } // If the estimation has reached the last row and there is still some space available in the viewport,\n      // we need to render in reverse in order to fill the whole viewport with rows\n\n\n      if (this.endRow === totalRows - 1 && needReverse) {\n        this.startRow = this.endRow;\n\n        while (this.startRow > 0) {\n          // rowHeight is the height of the last row\n          var viewportSum = startPositions[this.endRow] + rowHeight - startPositions[this.startRow - 1];\n\n          if (viewportSum <= viewportHeight - horizontalScrollbarHeight || calculationType !== FULLY_VISIBLE_TYPE) {\n            this.startRow -= 1;\n          }\n\n          if (viewportSum >= viewportHeight - horizontalScrollbarHeight) {\n            break;\n          }\n        }\n      }\n\n      if (calculationType === RENDER_TYPE && this.startRow !== null && overrideFn) {\n        overrideFn(this);\n      }\n\n      this.startPosition = startPositions[this.startRow];\n\n      if (this.startPosition === void 0) {\n        this.startPosition = null;\n      } // If totalRows exceeded its total rows size set endRow to the latest item\n\n\n      if (totalRows < this.endRow) {\n        this.endRow = totalRows - 1;\n      }\n\n      if (this.startRow !== null) {\n        this.count = this.endRow - this.startRow + 1;\n      }\n    }\n  }], [{\n    key: \"DEFAULT_HEIGHT\",\n    get:\n    /**\n     * Default row height.\n     *\n     * @type {number}\n     */\n    function get() {\n      return 23;\n    }\n  }]);\n\n  return ViewportRowsCalculator;\n}();\n\nexport default ViewportRowsCalculator;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/**\n * CellCoords holds cell coordinates (row, column) and few method to validate them and retrieve as an array or an object.\n *\n * @util\n */\nvar CellCoords = /*#__PURE__*/function () {\n  function CellCoords(row, column) {\n    _classCallCheck(this, CellCoords);\n\n    /**\n     * Row index.\n     *\n     * @type {number}\n     */\n    this.row = null;\n    /**\n     * Column index.\n     *\n     * @type {number}\n     */\n\n    this.col = null;\n\n    if (typeof row !== 'undefined' && typeof column !== 'undefined') {\n      this.row = row;\n      this.col = column;\n    }\n  }\n  /**\n   * Checks if given set of coordinates is valid in context of a given Walkontable instance.\n   *\n   * @param {Walkontable} wot A Walkontable instance.\n   * @returns {boolean}\n   */\n\n\n  _createClass(CellCoords, [{\n    key: \"isValid\",\n    value: function isValid(wot) {\n      // is it a valid cell index (0 or higher)\n      if (this.row < 0 || this.col < 0) {\n        return false;\n      } // is selection within total rows and columns\n\n\n      if (this.row >= wot.getSetting('totalRows') || this.col >= wot.getSetting('totalColumns')) {\n        return false;\n      }\n\n      return true;\n    }\n    /**\n     * Checks if this cell coordinates are the same as cell coordinates given as an argument.\n     *\n     * @param {CellCoords} cellCoords Cell coordinates to equal.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isEqual\",\n    value: function isEqual(cellCoords) {\n      if (cellCoords === this) {\n        return true;\n      }\n\n      return this.row === cellCoords.row && this.col === cellCoords.col;\n    }\n    /**\n     * Checks if tested coordinates are positioned in south-east from this cell coordinates.\n     *\n     * @param {object} testedCoords Cell coordinates to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSouthEastOf\",\n    value: function isSouthEastOf(testedCoords) {\n      return this.row >= testedCoords.row && this.col >= testedCoords.col;\n    }\n    /**\n     * Checks if tested coordinates are positioned in north-east from this cell coordinates.\n     *\n     * @param {object} testedCoords Cell coordinates to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isNorthWestOf\",\n    value: function isNorthWestOf(testedCoords) {\n      return this.row <= testedCoords.row && this.col <= testedCoords.col;\n    }\n    /**\n     * Checks if tested coordinates are positioned in south-west from this cell coordinates.\n     *\n     * @param {object} testedCoords Cell coordinates to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSouthWestOf\",\n    value: function isSouthWestOf(testedCoords) {\n      return this.row >= testedCoords.row && this.col <= testedCoords.col;\n    }\n    /**\n     * Checks if tested coordinates are positioned in north-east from this cell coordinates.\n     *\n     * @param {object} testedCoords Cell coordinates to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isNorthEastOf\",\n    value: function isNorthEastOf(testedCoords) {\n      return this.row <= testedCoords.row && this.col >= testedCoords.col;\n    }\n    /**\n     * Normalizes the coordinates to the nearest valid position. The coordinates that point\n     * to the headers (negative values) are normalized to 0.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"normalize\",\n    value: function normalize() {\n      this.row = this.row === null ? this.row : Math.max(this.row, 0);\n      this.col = this.col === null ? this.col : Math.max(this.col, 0);\n      return this;\n    }\n    /**\n     * Clones the coordinates.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new CellCoords(this.row, this.col);\n    }\n    /**\n     * Converts CellCoords to literal object with `row` and `col` properties.\n     *\n     * @returns {object} Returns a literal object with `row` and `col` properties.\n     */\n\n  }, {\n    key: \"toObject\",\n    value: function toObject() {\n      return {\n        row: this.row,\n        col: this.col\n      };\n    }\n  }]);\n\n  return CellCoords;\n}();\n\nexport default CellCoords;", "import \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.array.index-of.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport CellCoords from \"./../cell/coords.mjs\";\n/**\n * CellRange holds cell coordinates as {@link CellCoords} instances. This object represent unit of the selection layer which\n * can contains multiple contiquous cells or single cell.\n *\n * @util\n */\n\nvar CellRange = /*#__PURE__*/function () {\n  function CellRange(highlight) {\n    var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : highlight;\n    var to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : highlight;\n\n    _classCallCheck(this, CellRange);\n\n    /**\n     * Used to draw bold border around a cell where selection was started and to edit the cell\n     * when you press Enter. The highlight cannot point to headers (negative values) so its\n     * coordinates object is normalized while assigning.\n     *\n     * @type {CellCoords}\n     */\n    this.highlight = highlight.clone().normalize();\n    /**\n     * Usually the same as highlight, but in Excel there is distinction - one can change\n     * highlight within a selection.\n     *\n     * @type {CellCoords}\n     */\n\n    this.from = from.clone();\n    /**\n     * End selection.\n     *\n     * @type {CellCoords}\n     */\n\n    this.to = to.clone();\n  }\n  /**\n   * Set the new coordinates for highlighting selection.\n   *\n   * @param {CellCoords} coords Coordinates to use.\n   * @returns {CellRange}\n   */\n\n\n  _createClass(CellRange, [{\n    key: \"setHighlight\",\n    value: function setHighlight(coords) {\n      this.highlight = coords.clone().normalize();\n      return this;\n    }\n    /**\n     * Set the new coordinates where selection starts from.\n     *\n     * @param {CellCoords} coords Coordinates to use.\n     * @returns {CellRange}\n     */\n\n  }, {\n    key: \"setFrom\",\n    value: function setFrom(coords) {\n      this.from = coords.clone();\n      return this;\n    }\n    /**\n     * Set new coordinates where selection ends from.\n     *\n     * @param {CellCoords} coords Coordinates to use.\n     * @returns {CellRange}\n     */\n\n  }, {\n    key: \"setTo\",\n    value: function setTo(coords) {\n      this.to = coords.clone();\n      return this;\n    }\n    /**\n     * Checks if given coordinates are valid in context of a given Walkontable instance.\n     *\n     * @param {Walkontable} wot The Walkontable instance.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isValid\",\n    value: function isValid(wot) {\n      return this.from.isValid(wot) && this.to.isValid(wot);\n    }\n    /**\n     * Checks if this cell range is restricted to one cell.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSingle\",\n    value: function isSingle() {\n      return this.from.row >= 0 && this.from.row === this.to.row && this.from.col >= 0 && this.from.col === this.to.col;\n    }\n    /**\n     * Returns selected range height (in number of rows including rows' headers).\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getOuterHeight\",\n    value: function getOuterHeight() {\n      return Math.max(this.from.row, this.to.row) - Math.min(this.from.row, this.to.row) + 1;\n    }\n    /**\n     * Returns selected range width (in number of columns including columns' headers).\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getOuterWidth\",\n    value: function getOuterWidth() {\n      return Math.max(this.from.col, this.to.col) - Math.min(this.from.col, this.to.col) + 1;\n    }\n    /**\n     * Returns selected range height (in number of rows excluding rows' headers).\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getHeight\",\n    value: function getHeight() {\n      var fromRow = Math.max(this.from.row, 0);\n      var toRow = Math.max(this.to.row, 0);\n      return Math.max(fromRow, toRow) - Math.min(fromRow, toRow) + 1;\n    }\n    /**\n     * Returns selected range width (in number of columns excluding columns' headers).\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getWidth\",\n    value: function getWidth() {\n      var fromCol = Math.max(this.from.col, 0);\n      var toCol = Math.max(this.to.col, 0);\n      return Math.max(fromCol, toCol) - Math.min(fromCol, toCol) + 1;\n    }\n    /**\n     * Checks if given cell coordinates are within `from` and `to` cell coordinates of this range.\n     *\n     * @param {CellCoords} cellCoords The cell coordinates to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"includes\",\n    value: function includes(cellCoords) {\n      var row = cellCoords.row,\n          col = cellCoords.col;\n      var topLeft = this.getOuterTopLeftCorner();\n      var bottomRight = this.getOuterBottomRightCorner();\n      return topLeft.row <= row && bottomRight.row >= row && topLeft.col <= col && bottomRight.col >= col;\n    }\n    /**\n     * Checks if given range is within of this range.\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"includesRange\",\n    value: function includesRange(cellRange) {\n      return this.includes(cellRange.getOuterTopLeftCorner()) && this.includes(cellRange.getOuterBottomRightCorner());\n    }\n    /**\n     * Checks if given range is equal to this range.\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isEqual\",\n    value: function isEqual(cellRange) {\n      return Math.min(this.from.row, this.to.row) === Math.min(cellRange.from.row, cellRange.to.row) && Math.max(this.from.row, this.to.row) === Math.max(cellRange.from.row, cellRange.to.row) && Math.min(this.from.col, this.to.col) === Math.min(cellRange.from.col, cellRange.to.col) && Math.max(this.from.col, this.to.col) === Math.max(cellRange.from.col, cellRange.to.col);\n    }\n    /**\n     * Checks if tested range overlaps with the range. Range A is considered to to be overlapping with range B\n     * if intersection of A and B or B and A is not empty.\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"overlaps\",\n    value: function overlaps(cellRange) {\n      return cellRange.isSouthEastOf(this.getOuterTopLeftCorner()) && cellRange.isNorthWestOf(this.getOuterBottomRightCorner());\n    }\n    /**\n     * Checks if tested coordinates are positioned in south-east from this cell range.\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSouthEastOf\",\n    value: function isSouthEastOf(cellRange) {\n      return this.getOuterTopLeftCorner().isSouthEastOf(cellRange) || this.getOuterBottomRightCorner().isSouthEastOf(cellRange);\n    }\n    /**\n     * Checks if tested coordinates are positioned in north-west from this cell range.\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isNorthWestOf\",\n    value: function isNorthWestOf(cellRange) {\n      return this.getOuterTopLeftCorner().isNorthWestOf(cellRange) || this.getOuterBottomRightCorner().isNorthWestOf(cellRange);\n    }\n    /**\n     * Returns `true` if the provided range is overlapping the current range horizontally (e.g. The current range's last\n     * column is 5 and the provided range's first column is 3).\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isOverlappingHorizontally\",\n    value: function isOverlappingHorizontally(cellRange) {\n      return this.getOuterTopRightCorner().col >= cellRange.getOuterTopLeftCorner().col && this.getOuterTopRightCorner().col <= cellRange.getOuterTopRightCorner().col || this.getOuterTopLeftCorner().col <= cellRange.getOuterTopRightCorner().col && this.getOuterTopLeftCorner().col >= cellRange.getOuterTopLeftCorner().col;\n    }\n    /**\n     * Returns `true` if the provided range is overlapping the current range vertically (e.g. The current range's last\n     *  row is 5 and the provided range's first row is 3).\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isOverlappingVertically\",\n    value: function isOverlappingVertically(cellRange) {\n      return this.getOuterBottomRightCorner().row >= cellRange.getOuterTopRightCorner().row && this.getOuterBottomRightCorner().row <= cellRange.getOuterBottomRightCorner().row || this.getOuterTopRightCorner().row <= cellRange.getOuterBottomRightCorner().row && this.getOuterTopRightCorner().row >= cellRange.getOuterTopRightCorner().row;\n    }\n    /**\n     * Adds a cell to a range (only if exceeds corners of the range). Returns information if range was expanded.\n     *\n     * @param {CellCoords} cellCoords The cell coordinates.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"expand\",\n    value: function expand(cellCoords) {\n      var topLeft = this.getOuterTopLeftCorner();\n      var bottomRight = this.getOuterBottomRightCorner();\n\n      if (cellCoords.row < topLeft.row || cellCoords.col < topLeft.col || cellCoords.row > bottomRight.row || cellCoords.col > bottomRight.col) {\n        this.from = new CellCoords(Math.min(topLeft.row, cellCoords.row), Math.min(topLeft.col, cellCoords.col));\n        this.to = new CellCoords(Math.max(bottomRight.row, cellCoords.row), Math.max(bottomRight.col, cellCoords.col));\n        return true;\n      }\n\n      return false;\n    }\n    /**\n     * Expand the current object by the range passed in the first argument.\n     *\n     * @param {CellRange} expandingRange Object extending the range.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"expandByRange\",\n    value: function expandByRange(expandingRange) {\n      if (this.includesRange(expandingRange) || !this.overlaps(expandingRange)) {\n        return false;\n      }\n\n      var topLeft = this.getOuterTopLeftCorner();\n      var bottomRight = this.getOuterBottomRightCorner();\n      var initialDirection = this.getDirection();\n      var expandingTopLeft = expandingRange.getOuterTopLeftCorner();\n      var expandingBottomRight = expandingRange.getOuterBottomRightCorner();\n      var resultTopRow = Math.min(topLeft.row, expandingTopLeft.row);\n      var resultTopCol = Math.min(topLeft.col, expandingTopLeft.col);\n      var resultBottomRow = Math.max(bottomRight.row, expandingBottomRight.row);\n      var resultBottomCol = Math.max(bottomRight.col, expandingBottomRight.col);\n      var finalFrom = new CellCoords(resultTopRow, resultTopCol);\n      var finalTo = new CellCoords(resultBottomRow, resultBottomCol);\n      this.from = finalFrom;\n      this.to = finalTo;\n      this.setDirection(initialDirection);\n\n      if (this.highlight.row === this.getOuterBottomRightCorner().row && this.getVerticalDirection() === 'N-S') {\n        this.flipDirectionVertically();\n      }\n\n      if (this.highlight.col === this.getOuterTopRightCorner().col && this.getHorizontalDirection() === 'W-E') {\n        this.flipDirectionHorizontally();\n      }\n\n      return true;\n    }\n    /**\n     * Gets the direction of the selection.\n     *\n     * @returns {string} Returns one of the values: `'NW-SE'`, `'NE-SW'`, `'SE-NW'`, `'SW-NE'`.\n     */\n\n  }, {\n    key: \"getDirection\",\n    value: function getDirection() {\n      if (this.from.isNorthWestOf(this.to)) {\n        // NorthWest - SouthEast\n        return 'NW-SE';\n      } else if (this.from.isNorthEastOf(this.to)) {\n        // NorthEast - SouthWest\n        return 'NE-SW';\n      } else if (this.from.isSouthEastOf(this.to)) {\n        // SouthEast - NorthWest\n        return 'SE-NW';\n      } else if (this.from.isSouthWestOf(this.to)) {\n        // SouthWest - NorthEast\n        return 'SW-NE';\n      }\n    }\n    /**\n     * Sets the direction of the selection.\n     *\n     * @param {string} direction One of the values: `'NW-SE'`, `'NE-SW'`, `'SE-NW'`, `'SW-NE'`.\n     */\n\n  }, {\n    key: \"setDirection\",\n    value: function setDirection(direction) {\n      switch (direction) {\n        case 'NW-SE':\n          var _ref = [this.getOuterTopLeftCorner(), this.getOuterBottomRightCorner()];\n          this.from = _ref[0];\n          this.to = _ref[1];\n          break;\n\n        case 'NE-SW':\n          var _ref2 = [this.getOuterTopRightCorner(), this.getOuterBottomLeftCorner()];\n          this.from = _ref2[0];\n          this.to = _ref2[1];\n          break;\n\n        case 'SE-NW':\n          var _ref3 = [this.getOuterBottomRightCorner(), this.getOuterTopLeftCorner()];\n          this.from = _ref3[0];\n          this.to = _ref3[1];\n          break;\n\n        case 'SW-NE':\n          var _ref4 = [this.getOuterBottomLeftCorner(), this.getOuterTopRightCorner()];\n          this.from = _ref4[0];\n          this.to = _ref4[1];\n          break;\n\n        default:\n          break;\n      }\n    }\n    /**\n     * Gets the vertical direction of the range.\n     *\n     * @returns {string} Returns one of the values: `N-S` (north->south), `S-N` (south->north).\n     */\n\n  }, {\n    key: \"getVerticalDirection\",\n    value: function getVerticalDirection() {\n      return ['NE-SW', 'NW-SE'].indexOf(this.getDirection()) > -1 ? 'N-S' : 'S-N';\n    }\n    /**\n     * Gets the horizontal direction of the range.\n     *\n     * @returns {string} Returns one of the values: `W-E` (west->east), `E-W` (east->west).\n     */\n\n  }, {\n    key: \"getHorizontalDirection\",\n    value: function getHorizontalDirection() {\n      return ['NW-SE', 'SW-NE'].indexOf(this.getDirection()) > -1 ? 'W-E' : 'E-W';\n    }\n    /**\n     * Flip the direction vertically. (e.g. `NW-SE` changes to `SW-NE`).\n     */\n\n  }, {\n    key: \"flipDirectionVertically\",\n    value: function flipDirectionVertically() {\n      var direction = this.getDirection();\n\n      switch (direction) {\n        case 'NW-SE':\n          this.setDirection('SW-NE');\n          break;\n\n        case 'NE-SW':\n          this.setDirection('SE-NW');\n          break;\n\n        case 'SE-NW':\n          this.setDirection('NE-SW');\n          break;\n\n        case 'SW-NE':\n          this.setDirection('NW-SE');\n          break;\n\n        default:\n          break;\n      }\n    }\n    /**\n     * Flip the direction horizontally. (e.g. `NW-SE` changes to `NE-SW`).\n     */\n\n  }, {\n    key: \"flipDirectionHorizontally\",\n    value: function flipDirectionHorizontally() {\n      var direction = this.getDirection();\n\n      switch (direction) {\n        case 'NW-SE':\n          this.setDirection('NE-SW');\n          break;\n\n        case 'NE-SW':\n          this.setDirection('NW-SE');\n          break;\n\n        case 'SE-NW':\n          this.setDirection('SW-NE');\n          break;\n\n        case 'SW-NE':\n          this.setDirection('SE-NW');\n          break;\n\n        default:\n          break;\n      }\n    }\n    /**\n     * Gets the top left corner of this range. If the corner contains header coordinates\n     * (negative values), the corner coordinates will be normalized to 0.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"getTopLeftCorner\",\n    value: function getTopLeftCorner() {\n      return new CellCoords(Math.min(this.from.row, this.to.row), Math.min(this.from.col, this.to.col)).normalize();\n    }\n    /**\n     * Gets the bottom right corner of this range. If the corner contains header coordinates\n     * (negative values), the corner coordinates will be normalized to 0.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"getBottomRightCorner\",\n    value: function getBottomRightCorner() {\n      return new CellCoords(Math.max(this.from.row, this.to.row), Math.max(this.from.col, this.to.col)).normalize();\n    }\n    /**\n     * Gets the top right corner of this range. If the corner contains header coordinates\n     * (negative values), the corner coordinates will be normalized to 0.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"getTopRightCorner\",\n    value: function getTopRightCorner() {\n      return new CellCoords(Math.min(this.from.row, this.to.row), Math.max(this.from.col, this.to.col)).normalize();\n    }\n    /**\n     * Gets the bottom left corner of this range. If the corner contains header coordinates\n     * (negative values), the corner coordinates will be normalized to 0.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"getBottomLeftCorner\",\n    value: function getBottomLeftCorner() {\n      return new CellCoords(Math.max(this.from.row, this.to.row), Math.min(this.from.col, this.to.col)).normalize();\n    }\n    /**\n     * Gets the top left corner of this range. If the corner contains header coordinates\n     * (negative values), then the top and left coordinates will be pointed to that header.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"getOuterTopLeftCorner\",\n    value: function getOuterTopLeftCorner() {\n      return new CellCoords(Math.min(this.from.row, this.to.row), Math.min(this.from.col, this.to.col));\n    }\n    /**\n     * Gets the bottom right corner of this range.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"getOuterBottomRightCorner\",\n    value: function getOuterBottomRightCorner() {\n      return new CellCoords(Math.max(this.from.row, this.to.row), Math.max(this.from.col, this.to.col));\n    }\n    /**\n     * Gets the top right corner of this range. If the corner contains header coordinates\n     * (negative values), then the top coordinate will be pointed to that header.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"getOuterTopRightCorner\",\n    value: function getOuterTopRightCorner() {\n      return new CellCoords(Math.min(this.from.row, this.to.row), Math.max(this.from.col, this.to.col));\n    }\n    /**\n     * Gets the bottom left corner of this range. If the corner contains header coordinates\n     * (negative values), then the left coordinate will be pointed to that header.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"getOuterBottomLeftCorner\",\n    value: function getOuterBottomLeftCorner() {\n      return new CellCoords(Math.max(this.from.row, this.to.row), Math.min(this.from.col, this.to.col));\n    }\n    /**\n     * Checks if coordinates match to one of the 4th corners of this range.\n     *\n     * @param {CellCoords} coords Cell coordinates to check.\n     * @param {CellRange} [expandedRange] The cells range to compare with.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isCorner\",\n    value: function isCorner(coords, expandedRange) {\n      if (expandedRange && expandedRange.includes(coords) && (this.getOuterTopLeftCorner().isEqual(new CellCoords(expandedRange.from.row, expandedRange.from.col)) || this.getOuterTopRightCorner().isEqual(new CellCoords(expandedRange.from.row, expandedRange.to.col)) || this.getOuterBottomLeftCorner().isEqual(new CellCoords(expandedRange.to.row, expandedRange.from.col)) || this.getOuterBottomRightCorner().isEqual(new CellCoords(expandedRange.to.row, expandedRange.to.col)))) {\n        return true;\n      }\n\n      return coords.isEqual(this.getOuterTopLeftCorner()) || coords.isEqual(this.getOuterTopRightCorner()) || coords.isEqual(this.getOuterBottomLeftCorner()) || coords.isEqual(this.getOuterBottomRightCorner());\n    }\n    /**\n     * Gets coordinates of the corner which is opposite to the matched. When the passed coordinates matched to the\n     * bottom-right corner of this range then the coordinates for top-left will be returned.\n     *\n     * @param {CellCoords} coords Cell coordinates to check.\n     * @param {CellRange} [expandedRange] The cells range to compare with.\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"getOppositeCorner\",\n    value: function getOppositeCorner(coords, expandedRange) {\n      if (!(coords instanceof CellCoords)) {\n        return false;\n      }\n\n      if (expandedRange) {\n        if (expandedRange.includes(coords)) {\n          if (this.getOuterTopLeftCorner().isEqual(new CellCoords(expandedRange.from.row, expandedRange.from.col))) {\n            return this.getOuterBottomRightCorner();\n          }\n\n          if (this.getOuterTopRightCorner().isEqual(new CellCoords(expandedRange.from.row, expandedRange.to.col))) {\n            return this.getOuterBottomLeftCorner();\n          }\n\n          if (this.getOuterBottomLeftCorner().isEqual(new CellCoords(expandedRange.to.row, expandedRange.from.col))) {\n            return this.getOuterTopRightCorner();\n          }\n\n          if (this.getOuterBottomRightCorner().isEqual(new CellCoords(expandedRange.to.row, expandedRange.to.col))) {\n            return this.getOuterTopLeftCorner();\n          }\n        }\n      }\n\n      if (coords.isEqual(this.getOuterBottomRightCorner())) {\n        return this.getOuterTopLeftCorner();\n      } else if (coords.isEqual(this.getOuterTopLeftCorner())) {\n        return this.getOuterBottomRightCorner();\n      } else if (coords.isEqual(this.getOuterTopRightCorner())) {\n        return this.getOuterBottomLeftCorner();\n      } else if (coords.isEqual(this.getOuterBottomLeftCorner())) {\n        return this.getOuterTopRightCorner();\n      }\n    }\n    /**\n     * @param {CellRange} range The cells range to compare with.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getBordersSharedWith\",\n    value: function getBordersSharedWith(range) {\n      if (!this.includesRange(range)) {\n        return [];\n      }\n\n      var thisBorders = {\n        top: Math.min(this.from.row, this.to.row),\n        bottom: Math.max(this.from.row, this.to.row),\n        left: Math.min(this.from.col, this.to.col),\n        right: Math.max(this.from.col, this.to.col)\n      };\n      var rangeBorders = {\n        top: Math.min(range.from.row, range.to.row),\n        bottom: Math.max(range.from.row, range.to.row),\n        left: Math.min(range.from.col, range.to.col),\n        right: Math.max(range.from.col, range.to.col)\n      };\n      var result = [];\n\n      if (thisBorders.top === rangeBorders.top) {\n        result.push('top');\n      }\n\n      if (thisBorders.right === rangeBorders.right) {\n        result.push('right');\n      }\n\n      if (thisBorders.bottom === rangeBorders.bottom) {\n        result.push('bottom');\n      }\n\n      if (thisBorders.left === rangeBorders.left) {\n        result.push('left');\n      }\n\n      return result;\n    }\n    /**\n     * Get inner selected cell coords defined by this range.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getInner\",\n    value: function getInner() {\n      var topLeft = this.getOuterTopLeftCorner();\n      var bottomRight = this.getOuterBottomRightCorner();\n      var out = [];\n\n      for (var r = topLeft.row; r <= bottomRight.row; r++) {\n        for (var c = topLeft.col; c <= bottomRight.col; c++) {\n          if (!(this.from.row === r && this.from.col === c) && !(this.to.row === r && this.to.col === c)) {\n            out.push(new CellCoords(r, c));\n          }\n        }\n      }\n\n      return out;\n    }\n    /**\n     * Get all selected cell coords defined by this range.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getAll\",\n    value: function getAll() {\n      var topLeft = this.getOuterTopLeftCorner();\n      var bottomRight = this.getOuterBottomRightCorner();\n      var out = [];\n\n      for (var r = topLeft.row; r <= bottomRight.row; r++) {\n        for (var c = topLeft.col; c <= bottomRight.col; c++) {\n          if (topLeft.row === r && topLeft.col === c) {\n            out.push(topLeft);\n          } else if (bottomRight.row === r && bottomRight.col === c) {\n            out.push(bottomRight);\n          } else {\n            out.push(new CellCoords(r, c));\n          }\n        }\n      }\n\n      return out;\n    }\n    /**\n     * Runs a callback function against all cells in the range. You can break the iteration by returning\n     * `false` in the callback function.\n     *\n     * @param {Function} callback The callback function.\n     */\n\n  }, {\n    key: \"forAll\",\n    value: function forAll(callback) {\n      var topLeft = this.getOuterTopLeftCorner();\n      var bottomRight = this.getOuterBottomRightCorner();\n\n      for (var r = topLeft.row; r <= bottomRight.row; r++) {\n        for (var c = topLeft.col; c <= bottomRight.col; c++) {\n          var breakIteration = callback(r, c);\n\n          if (breakIteration === false) {\n            return;\n          }\n        }\n      }\n    }\n    /**\n     * Clones the range coordinates.\n     *\n     * @returns {CellRange}\n     */\n\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new CellRange(this.highlight, this.from, this.to);\n    }\n    /**\n     * Convert CellRange to literal object.\n     *\n     * @returns {object} Returns a literal object with `from` and `to` properties which each of that object\n     *                  contains `row` and `col` keys.\n     */\n\n  }, {\n    key: \"toObject\",\n    value: function toObject() {\n      return {\n        from: this.from.toObject(),\n        to: this.to.toObject()\n      };\n    }\n  }]);\n\n  return CellRange;\n}();\n\nexport default CellRange;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/**\n * @class ColumnFilter\n */\nvar ColumnFilter = /*#__PURE__*/function () {\n  /**\n   * @param {number} offset The scroll horizontal offset.\n   * @param {number} total The total width of the table.\n   * @param {number} countTH The number of rendered row headers.\n   */\n  function ColumnFilter(offset, total, countTH) {\n    _classCallCheck(this, ColumnFilter);\n\n    this.offset = offset;\n    this.total = total;\n    this.countTH = countTH;\n  }\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n\n\n  _createClass(ColumnFilter, [{\n    key: \"offsetted\",\n    value: function offsetted(index) {\n      return index + this.offset;\n    }\n    /**\n     * @param {number} index The visual column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"unOffsetted\",\n    value: function unOffsetted(index) {\n      return index - this.offset;\n    }\n    /**\n     * @param {number} index The visual column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"renderedToSource\",\n    value: function renderedToSource(index) {\n      return this.offsetted(index);\n    }\n    /**\n     * @param {number} index The visual column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"sourceToRendered\",\n    value: function sourceToRendered(index) {\n      return this.unOffsetted(index);\n    }\n    /**\n     * @param {number} index The visual column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"offsettedTH\",\n    value: function offsettedTH(index) {\n      return index - this.countTH;\n    }\n    /**\n     * @param {number} index The visual column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"unOffsettedTH\",\n    value: function unOffsettedTH(index) {\n      return index + this.countTH;\n    }\n    /**\n     * @param {number} index The visual column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"visibleRowHeadedColumnToSourceColumn\",\n    value: function visibleRowHeadedColumnToSourceColumn(index) {\n      return this.renderedToSource(this.offsettedTH(index));\n    }\n    /**\n     * @param {number} index The visual column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"sourceColumnToVisibleRowHeadedColumn\",\n    value: function sourceColumnToVisibleRowHeadedColumn(index) {\n      return this.unOffsettedTH(this.sourceToRendered(index));\n    }\n  }]);\n\n  return ColumnFilter;\n}();\n\nexport default ColumnFilter;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/**\n * @class RowFilter\n */\nvar RowFilter = /*#__PURE__*/function () {\n  /**\n   * @param {number} offset The scroll vertical offset.\n   * @param {number} total The total height of the table.\n   * @param {number} countTH The number of rendered column headers.\n   */\n  function RowFilter(offset, total, countTH) {\n    _classCallCheck(this, RowFilter);\n\n    this.offset = offset;\n    this.total = total;\n    this.countTH = countTH;\n  }\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n\n\n  _createClass(RowFilter, [{\n    key: \"offsetted\",\n    value: function offsetted(index) {\n      return index + this.offset;\n    }\n    /**\n     * @param {number} index The visual row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"unOffsetted\",\n    value: function unOffsetted(index) {\n      return index - this.offset;\n    }\n    /**\n     * @param {number} index The visual row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"renderedToSource\",\n    value: function renderedToSource(index) {\n      return this.offsetted(index);\n    }\n    /**\n     * @param {number} index The visual row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"sourceToRendered\",\n    value: function sourceToRendered(index) {\n      return this.unOffsetted(index);\n    }\n    /**\n     * @param {number} index The visual row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"offsettedTH\",\n    value: function offsettedTH(index) {\n      return index - this.countTH;\n    }\n    /**\n     * @param {number} index The visual row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"unOffsettedTH\",\n    value: function unOffsettedTH(index) {\n      return index + this.countTH;\n    }\n    /**\n     * @param {number} index The visual row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"visibleColHeadedRowToSourceRow\",\n    value: function visibleColHeadedRowToSourceRow(index) {\n      return this.renderedToSource(this.offsettedTH(index));\n    }\n    /**\n     * @param {number} index The visual row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"sourceRowToVisibleColHeadedRow\",\n    value: function sourceRowToVisibleColHeadedRow(index) {\n      return this.unOffsettedTH(this.sourceToRendered(index));\n    }\n  }]);\n\n  return RowFilter;\n}();\n\nexport default RowFilter;", "var $ = require('../internals/export');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n$({ target: 'Object', stat: true }, {\n  setPrototypeOf: setPrototypeOf\n});\n", "var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind');\nvar aConstructor = require('../internals/a-constructor');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\nvar ObjectPrototype = Object.prototype;\nvar push = [].push;\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n  function F() { /* empty */ }\n  return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\n\nvar ARGS_BUG = !fails(function () {\n  nativeConstruct(function () { /* empty */ });\n});\n\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n  construct: function construct(Target, args /* , newTarget */) {\n    aConstructor(Target);\n    anObject(args);\n    var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);\n    if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n    if (Target == newTarget) {\n      // w/o altered newTarget, optimization for 0-4 arguments\n      switch (args.length) {\n        case 0: return new Target();\n        case 1: return new Target(args[0]);\n        case 2: return new Target(args[0], args[1]);\n        case 3: return new Target(args[0], args[1], args[2]);\n        case 4: return new Target(args[0], args[1], args[2], args[3]);\n      }\n      // w/o altered newTarget, lot of arguments case\n      var $args = [null];\n      apply(push, $args, args);\n      return new (apply(bind, Target, $args))();\n    }\n    // with altered newTarget, not support built-in constructors\n    var proto = newTarget.prototype;\n    var instance = create(isObject(proto) ? proto : ObjectPrototype);\n    var result = apply(Target, instance, args);\n    return isObject(result) ? result : instance;\n  }\n});\n", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { getStyle, getComputedStyle, getTrimmingContainer, isVisible } from \"./../../../../helpers/dom/element.mjs\";\nimport Table from \"../table.mjs\";\nimport calculatedRows from \"./mixin/calculatedRows.mjs\";\nimport calculatedColumns from \"./mixin/calculatedColumns.mjs\";\nimport { mixin } from \"./../../../../helpers/object.mjs\";\n/**\n * Subclass of `Table` that provides the helper methods relevant to the master table (not overlays), implemented through mixins.\n */\n\nvar MasterTable = /*#__PURE__*/function (_Table) {\n  _inherits(MasterTable, _Table);\n\n  var _super = _createSuper(MasterTable);\n\n  function MasterTable() {\n    _classCallCheck(this, MasterTable);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(MasterTable, [{\n    key: \"alignOverlaysWithTrimmingContainer\",\n    value: function alignOverlaysWithTrimmingContainer() {\n      var trimmingElement = getTrimmingContainer(this.wtRootElement);\n      var rootWindow = this.wot.rootWindow;\n\n      if (trimmingElement === rootWindow) {\n        var preventOverflow = this.wot.getSetting('preventOverflow');\n\n        if (!preventOverflow) {\n          this.holder.style.overflow = 'visible';\n          this.wtRootElement.style.overflow = 'visible';\n        }\n      } else {\n        var trimmingElementParent = trimmingElement.parentElement;\n        var trimmingHeight = getStyle(trimmingElement, 'height', rootWindow);\n        var trimmingOverflow = getStyle(trimmingElement, 'overflow', rootWindow);\n        var holderStyle = this.holder.style;\n        var scrollWidth = trimmingElement.scrollWidth,\n            scrollHeight = trimmingElement.scrollHeight;\n\n        var _trimmingElement$getB = trimmingElement.getBoundingClientRect(),\n            width = _trimmingElement$getB.width,\n            height = _trimmingElement$getB.height;\n\n        var overflow = ['auto', 'hidden', 'scroll'];\n\n        if (trimmingElementParent && overflow.includes(trimmingOverflow)) {\n          var cloneNode = trimmingElement.cloneNode(false); // Before calculating the height of the trimming element, set overflow: auto to hide scrollbars.\n          // An issue occurred on Firefox, where an empty element with overflow: scroll returns an element height higher than 0px\n          // despite an empty content within.\n\n          cloneNode.style.overflow = 'auto';\n\n          if (trimmingElement.nextElementSibling) {\n            trimmingElementParent.insertBefore(cloneNode, trimmingElement.nextElementSibling);\n          } else {\n            trimmingElementParent.appendChild(cloneNode);\n          }\n\n          var cloneHeight = parseInt(getComputedStyle(cloneNode, rootWindow).height, 10);\n          trimmingElementParent.removeChild(cloneNode);\n\n          if (cloneHeight === 0) {\n            height = 0;\n          }\n        }\n\n        height = Math.min(height, scrollHeight);\n        holderStyle.height = trimmingHeight === 'auto' ? 'auto' : \"\".concat(height, \"px\");\n        width = Math.min(width, scrollWidth);\n        holderStyle.width = \"\".concat(width, \"px\");\n        holderStyle.overflow = '';\n        this.hasTableHeight = holderStyle.height === 'auto' ? true : height > 0;\n        this.hasTableWidth = width > 0;\n      }\n\n      this.isTableVisible = isVisible(this.TABLE);\n    }\n  }, {\n    key: \"markOversizedColumnHeaders\",\n    value: function markOversizedColumnHeaders() {\n      var wot = this.wot;\n      var overlayName = wot.getOverlayName();\n      var columnHeaders = wot.getSetting('columnHeaders');\n      var columnHeadersCount = columnHeaders.length;\n\n      if (columnHeadersCount && !wot.wtViewport.hasOversizedColumnHeadersMarked[overlayName]) {\n        var rowHeaders = wot.getSetting('rowHeaders');\n        var rowHeaderCount = rowHeaders.length;\n        var columnCount = this.getRenderedColumnsCount();\n\n        for (var i = 0; i < columnHeadersCount; i++) {\n          for (var renderedColumnIndex = -1 * rowHeaderCount; renderedColumnIndex < columnCount; renderedColumnIndex++) {\n            // eslint-disable-line max-len\n            this.markIfOversizedColumnHeader(renderedColumnIndex);\n          }\n        }\n\n        wot.wtViewport.hasOversizedColumnHeadersMarked[overlayName] = true;\n      }\n    }\n  }]);\n\n  return MasterTable;\n}(Table);\n\nmixin(MasterTable, calculatedRows);\nmixin(MasterTable, calculatedColumns);\nexport default MasterTable;", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { hasClass, index, offset, removeClass, removeTextNodes, overlayContainsElement, closest, outerWidth, innerHeight, isVisible as _isVisible } from \"./../../../helpers/dom/element.mjs\";\nimport { isFunction } from \"./../../../helpers/function.mjs\";\nimport CellCoords from \"./cell/coords.mjs\";\nimport ColumnFilter from \"./filter/column.mjs\";\nimport RowFilter from \"./filter/row.mjs\";\nimport { Renderer } from \"./renderer/index.mjs\";\nimport ColumnUtils from \"./utils/column.mjs\";\nimport RowUtils from \"./utils/row.mjs\";\nimport { isOverlayTypeOf } from \"./overlay/registerer.mjs\";\nimport { CLONE_TOP, CLONE_BOTTOM, CLONE_LEFT, CLONE_TOP_LEFT_CORNER, CLONE_BOTTOM_LEFT_CORNER } from \"./overlay/constants.mjs\";\n/**\n *\n */\n\nvar Table = /*#__PURE__*/function () {\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance.\n   * @param {HTMLTableElement} table An element to the Walkontable generated table is injected.\n   */\n  function Table(wotInstance, table) {\n    var _this = this;\n\n    _classCallCheck(this, Table);\n\n    /**\n     * Indicates if this instance is of type `MasterTable` (i.e. It is NOT an overlay).\n     *\n     * @type {boolean}\n     */\n    this.isMaster = !wotInstance.cloneOverlay; // \"instanceof\" operator isn't used, because it caused a circular reference in Webpack\n\n    this.wot = wotInstance; // legacy support\n\n    this.instance = this.wot;\n    this.TABLE = table;\n    this.TBODY = null;\n    this.THEAD = null;\n    this.COLGROUP = null;\n    this.tableOffset = 0;\n    this.holderOffset = 0;\n    /**\n     * Indicates if the table has height bigger than 0px.\n     *\n     * @type {boolean}\n     */\n\n    this.hasTableHeight = true;\n    /**\n     * Indicates if the table has width bigger than 0px.\n     *\n     * @type {boolean}\n     */\n\n    this.hasTableWidth = true;\n    /**\n     * Indicates if the table is visible. By visible, it means that the holder\n     * element has CSS 'display' property different than 'none'.\n     *\n     * @type {boolean}\n     */\n\n    this.isTableVisible = false;\n    removeTextNodes(this.TABLE);\n    this.spreader = this.createSpreader(this.TABLE);\n    this.hider = this.createHider(this.spreader);\n    this.holder = this.createHolder(this.hider);\n    this.wtRootElement = this.holder.parentNode;\n\n    if (this.isMaster) {\n      this.alignOverlaysWithTrimmingContainer();\n    }\n\n    this.fixTableDomTree();\n    this.rowFilter = null;\n    this.columnFilter = null;\n    this.correctHeaderWidth = false;\n    var origRowHeaderWidth = this.wot.wtSettings.settings.rowHeaderWidth; // Fix for jumping row headers (https://github.com/handsontable/handsontable/issues/3850)\n\n    this.wot.wtSettings.settings.rowHeaderWidth = function () {\n      return _this._modifyRowHeaderWidth(origRowHeaderWidth);\n    };\n\n    this.rowUtils = new RowUtils(this.wot);\n    this.columnUtils = new ColumnUtils(this.wot);\n    this.tableRenderer = new Renderer({\n      TABLE: this.TABLE,\n      THEAD: this.THEAD,\n      COLGROUP: this.COLGROUP,\n      TBODY: this.TBODY,\n      rowUtils: this.rowUtils,\n      columnUtils: this.columnUtils,\n      cellRenderer: this.wot.wtSettings.settings.cellRenderer\n    });\n  }\n  /**\n   * Returns a boolean that is true if this intance of Table represents a specific overlay, identified by the overlay name.\n   * For MasterTable, it returns false.\n   *\n   * @param {string} overlayTypeName The overlay type.\n   * @returns {boolean}\n   */\n\n\n  _createClass(Table, [{\n    key: \"is\",\n    value: function is(overlayTypeName) {\n      return isOverlayTypeOf(this.wot.cloneOverlay, overlayTypeName);\n    }\n    /**\n     *\n     */\n\n  }, {\n    key: \"fixTableDomTree\",\n    value: function fixTableDomTree() {\n      var rootDocument = this.wot.rootDocument;\n      this.TBODY = this.TABLE.querySelector('tbody');\n\n      if (!this.TBODY) {\n        this.TBODY = rootDocument.createElement('tbody');\n        this.TABLE.appendChild(this.TBODY);\n      }\n\n      this.THEAD = this.TABLE.querySelector('thead');\n\n      if (!this.THEAD) {\n        this.THEAD = rootDocument.createElement('thead');\n        this.TABLE.insertBefore(this.THEAD, this.TBODY);\n      }\n\n      this.COLGROUP = this.TABLE.querySelector('colgroup');\n\n      if (!this.COLGROUP) {\n        this.COLGROUP = rootDocument.createElement('colgroup');\n        this.TABLE.insertBefore(this.COLGROUP, this.THEAD);\n      }\n\n      if (this.wot.getSetting('columnHeaders').length && !this.THEAD.childNodes.length) {\n        this.THEAD.appendChild(rootDocument.createElement('TR'));\n      }\n    }\n    /**\n     * @param {HTMLTableElement} table An element to process.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"createSpreader\",\n    value: function createSpreader(table) {\n      var parent = table.parentNode;\n      var spreader;\n\n      if (!parent || parent.nodeType !== Node.ELEMENT_NODE || !hasClass(parent, 'wtHolder')) {\n        spreader = this.wot.rootDocument.createElement('div');\n        spreader.className = 'wtSpreader';\n\n        if (parent) {\n          // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n          parent.insertBefore(spreader, table);\n        }\n\n        spreader.appendChild(table);\n      }\n\n      spreader.style.position = 'relative';\n      return spreader;\n    }\n    /**\n     * @param {HTMLElement} spreader An element to the hider element is injected.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"createHider\",\n    value: function createHider(spreader) {\n      var parent = spreader.parentNode;\n      var hider;\n\n      if (!parent || parent.nodeType !== Node.ELEMENT_NODE || !hasClass(parent, 'wtHolder')) {\n        hider = this.wot.rootDocument.createElement('div');\n        hider.className = 'wtHider';\n\n        if (parent) {\n          // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n          parent.insertBefore(hider, spreader);\n        }\n\n        hider.appendChild(spreader);\n      }\n\n      return hider;\n    }\n    /**\n     *\n     * @param {HTMLElement} hider An element to the holder element is injected.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"createHolder\",\n    value: function createHolder(hider) {\n      var parent = hider.parentNode;\n      var holder;\n\n      if (!parent || parent.nodeType !== Node.ELEMENT_NODE || !hasClass(parent, 'wtHolder')) {\n        holder = this.wot.rootDocument.createElement('div');\n        holder.style.position = 'relative';\n        holder.className = 'wtHolder';\n\n        if (parent) {\n          // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n          parent.insertBefore(holder, hider);\n        }\n\n        if (this.isMaster) {\n          holder.parentNode.className += 'ht_master handsontable';\n        }\n\n        holder.appendChild(hider);\n      }\n\n      return holder;\n    }\n    /**\n     * Redraws the table.\n     *\n     * @param {boolean} [fastDraw=false] If TRUE, will try to avoid full redraw and only update the border positions.\n     *                                   If FALSE or UNDEFINED, will perform a full redraw.\n     * @returns {Table}\n     */\n\n  }, {\n    key: \"draw\",\n    value: function draw() {\n      var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var wot = this.wot;\n      var wtOverlays = wot.wtOverlays,\n          wtViewport = wot.wtViewport;\n      var totalRows = wot.getSetting('totalRows');\n      var totalColumns = wot.getSetting('totalColumns');\n      var rowHeaders = wot.getSetting('rowHeaders');\n      var rowHeadersCount = rowHeaders.length;\n      var columnHeaders = wot.getSetting('columnHeaders');\n      var columnHeadersCount = columnHeaders.length;\n      var syncScroll = false;\n      var runFastDraw = fastDraw;\n\n      if (this.isMaster) {\n        this.holderOffset = offset(this.holder);\n        runFastDraw = wtViewport.createRenderCalculators(runFastDraw);\n\n        if (rowHeadersCount && !wot.getSetting('fixedColumnsLeft')) {\n          var leftScrollPos = wtOverlays.leftOverlay.getScrollPosition();\n          var previousState = this.correctHeaderWidth;\n          this.correctHeaderWidth = leftScrollPos > 0;\n\n          if (previousState !== this.correctHeaderWidth) {\n            runFastDraw = false;\n          }\n        }\n      }\n\n      if (this.isMaster) {\n        syncScroll = wtOverlays.prepareOverlays();\n      }\n\n      if (runFastDraw) {\n        if (this.isMaster) {\n          // in case we only scrolled without redraw, update visible rows information in oldRowsCalculator\n          wtViewport.createVisibleCalculators();\n        }\n\n        if (wtOverlays) {\n          wtOverlays.refresh(true);\n        }\n      } else {\n        if (this.isMaster) {\n          this.tableOffset = offset(this.TABLE);\n        } else {\n          this.tableOffset = this.wot.cloneSource.wtTable.tableOffset;\n        }\n\n        var startRow = totalRows > 0 ? this.getFirstRenderedRow() : 0;\n        var startColumn = totalColumns > 0 ? this.getFirstRenderedColumn() : 0;\n        this.rowFilter = new RowFilter(startRow, totalRows, columnHeadersCount);\n        this.columnFilter = new ColumnFilter(startColumn, totalColumns, rowHeadersCount);\n        var performRedraw = true; // Only master table rendering can be skipped\n\n        if (this.isMaster) {\n          this.alignOverlaysWithTrimmingContainer();\n          var skipRender = {};\n          this.wot.getSetting('beforeDraw', true, skipRender);\n          performRedraw = skipRender.skipRender !== true;\n        }\n\n        if (performRedraw) {\n          this.tableRenderer.setHeaderContentRenderers(rowHeaders, columnHeaders);\n\n          if (this.is(CLONE_BOTTOM) || this.is(CLONE_BOTTOM_LEFT_CORNER)) {\n            // do NOT render headers on the bottom or bottom-left corner overlay\n            this.tableRenderer.setHeaderContentRenderers(rowHeaders, []);\n          }\n\n          this.resetOversizedRows();\n          this.tableRenderer.setViewportSize(this.getRenderedRowsCount(), this.getRenderedColumnsCount()).setFilters(this.rowFilter, this.columnFilter).render();\n          var workspaceWidth;\n\n          if (this.isMaster) {\n            workspaceWidth = this.wot.wtViewport.getWorkspaceWidth();\n            this.wot.wtViewport.containerWidth = null;\n            this.markOversizedColumnHeaders();\n          }\n\n          this.adjustColumnHeaderHeights();\n\n          if (this.isMaster || this.is(CLONE_BOTTOM)) {\n            this.markOversizedRows();\n          }\n\n          if (this.isMaster) {\n            this.wot.wtViewport.createVisibleCalculators();\n            this.wot.wtOverlays.refresh(false);\n            this.wot.wtOverlays.applyToDOM();\n            var hiderWidth = outerWidth(this.hider);\n            var tableWidth = outerWidth(this.TABLE);\n\n            if (hiderWidth !== 0 && tableWidth !== hiderWidth) {\n              // Recalculate the column widths, if width changes made in the overlays removed the scrollbar, thus changing the viewport width.\n              this.columnUtils.calculateWidths();\n              this.tableRenderer.renderer.colGroup.render();\n            }\n\n            if (workspaceWidth !== this.wot.wtViewport.getWorkspaceWidth()) {\n              // workspace width changed though to shown/hidden vertical scrollbar. Let's reapply stretching\n              this.wot.wtViewport.containerWidth = null;\n              this.columnUtils.calculateWidths();\n              this.tableRenderer.renderer.colGroup.render();\n            }\n\n            this.wot.getSetting('onDraw', true);\n          } else if (this.is(CLONE_BOTTOM)) {\n            this.wot.cloneSource.wtOverlays.adjustElementsSize();\n          }\n        }\n      }\n\n      if (this.isMaster) {\n        var positionChanged = wtOverlays.topOverlay.resetFixedPosition();\n\n        if (wtOverlays.bottomOverlay.clone) {\n          positionChanged = wtOverlays.bottomOverlay.resetFixedPosition() || positionChanged;\n        }\n\n        positionChanged = wtOverlays.leftOverlay.resetFixedPosition() || positionChanged;\n\n        if (wtOverlays.topLeftCornerOverlay) {\n          wtOverlays.topLeftCornerOverlay.resetFixedPosition();\n        }\n\n        if (wtOverlays.bottomLeftCornerOverlay && wtOverlays.bottomLeftCornerOverlay.clone) {\n          wtOverlays.bottomLeftCornerOverlay.resetFixedPosition();\n        }\n\n        if (positionChanged) {\n          // It refreshes the cells borders caused by a 1px shift (introduced by overlays which add or\n          // remove `innerBorderTop` and `innerBorderLeft` CSS classes to the DOM element. This happens\n          // when there is a switch between rendering from 0 to N rows/columns and vice versa).\n          wtOverlays.refreshAll();\n          wtOverlays.adjustElementsSize();\n        }\n      }\n\n      this.refreshSelections(runFastDraw);\n\n      if (syncScroll) {\n        wtOverlays.syncScrollWithMaster();\n      }\n\n      wot.drawn = true;\n      return this;\n    }\n    /**\n     * @param {number} col The visual column index.\n     */\n\n  }, {\n    key: \"markIfOversizedColumnHeader\",\n    value: function markIfOversizedColumnHeader(col) {\n      var sourceColIndex = this.wot.wtTable.columnFilter.renderedToSource(col);\n      var level = this.wot.getSetting('columnHeaders').length;\n      var defaultRowHeight = this.wot.wtSettings.settings.defaultRowHeight;\n      var previousColHeaderHeight;\n      var currentHeader;\n      var currentHeaderHeight;\n      var columnHeaderHeightSetting = this.wot.getSetting('columnHeaderHeight') || [];\n\n      while (level) {\n        level -= 1;\n        previousColHeaderHeight = this.wot.wtTable.getColumnHeaderHeight(level);\n        currentHeader = this.wot.wtTable.getColumnHeader(sourceColIndex, level);\n\n        if (!currentHeader) {\n          /* eslint-disable no-continue */\n          continue;\n        }\n\n        currentHeaderHeight = innerHeight(currentHeader);\n\n        if (!previousColHeaderHeight && defaultRowHeight < currentHeaderHeight || previousColHeaderHeight < currentHeaderHeight) {\n          this.wot.wtViewport.oversizedColumnHeaders[level] = currentHeaderHeight;\n        }\n\n        if (Array.isArray(columnHeaderHeightSetting)) {\n          if (columnHeaderHeightSetting[level] !== null && columnHeaderHeightSetting[level] !== void 0) {\n            this.wot.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting[level];\n          }\n        } else if (!isNaN(columnHeaderHeightSetting)) {\n          this.wot.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting;\n        }\n\n        if (this.wot.wtViewport.oversizedColumnHeaders[level] < (columnHeaderHeightSetting[level] || columnHeaderHeightSetting)) {\n          this.wot.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting[level] || columnHeaderHeightSetting; // eslint-disable-line max-len\n        }\n      }\n    }\n    /**\n     *\n     */\n\n  }, {\n    key: \"adjustColumnHeaderHeights\",\n    value: function adjustColumnHeaderHeights() {\n      var wot = this.wot;\n      var children = wot.wtTable.THEAD.childNodes;\n      var oversizedColumnHeaders = wot.wtViewport.oversizedColumnHeaders;\n      var columnHeaders = wot.getSetting('columnHeaders');\n\n      for (var i = 0, len = columnHeaders.length; i < len; i++) {\n        if (oversizedColumnHeaders[i]) {\n          if (!children[i] || children[i].childNodes.length === 0) {\n            return;\n          }\n\n          children[i].childNodes[0].style.height = \"\".concat(oversizedColumnHeaders[i], \"px\");\n        }\n      }\n    }\n    /**\n     * Resets cache of row heights. The cache should be cached for each render cycle in a case\n     * when new cell values have content which increases/decreases cell height.\n     */\n\n  }, {\n    key: \"resetOversizedRows\",\n    value: function resetOversizedRows() {\n      var wot = this.wot;\n\n      if (!this.isMaster && !this.is(CLONE_BOTTOM)) {\n        return;\n      }\n\n      if (!wot.getSetting('externalRowCalculator')) {\n        var rowsToRender = this.getRenderedRowsCount(); // Reset the oversized row cache for rendered rows\n\n        for (var visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n          var sourceRow = this.rowFilter.renderedToSource(visibleRowIndex);\n\n          if (wot.wtViewport.oversizedRows && wot.wtViewport.oversizedRows[sourceRow]) {\n            wot.wtViewport.oversizedRows[sourceRow] = void 0;\n          }\n        }\n      }\n    }\n    /**\n     * @param {string} className The CSS class name to remove from the table cells.\n     */\n\n  }, {\n    key: \"removeClassFromCells\",\n    value: function removeClassFromCells(className) {\n      var nodes = this.TABLE.querySelectorAll(\".\".concat(className));\n\n      for (var i = 0, len = nodes.length; i < len; i++) {\n        removeClass(nodes[i], className);\n      }\n    }\n    /**\n     * Refresh the table selection by re-rendering Selection instances connected with that instance.\n     *\n     * @param {boolean} fastDraw If fast drawing is enabled than additionally className clearing is applied.\n     */\n\n  }, {\n    key: \"refreshSelections\",\n    value: function refreshSelections(fastDraw) {\n      var wot = this.wot;\n\n      if (!wot.selections) {\n        return;\n      }\n\n      var highlights = Array.from(wot.selections);\n      var len = highlights.length;\n\n      if (fastDraw) {\n        var classesToRemove = [];\n\n        for (var i = 0; i < len; i++) {\n          var _highlights$i$setting = highlights[i].settings,\n              highlightHeaderClassName = _highlights$i$setting.highlightHeaderClassName,\n              highlightRowClassName = _highlights$i$setting.highlightRowClassName,\n              highlightColumnClassName = _highlights$i$setting.highlightColumnClassName;\n          var classNames = highlights[i].classNames;\n          var classNamesLength = classNames.length;\n\n          for (var j = 0; j < classNamesLength; j++) {\n            if (!classesToRemove.includes(classNames[j])) {\n              classesToRemove.push(classNames[j]);\n            }\n          }\n\n          if (highlightHeaderClassName && !classesToRemove.includes(highlightHeaderClassName)) {\n            classesToRemove.push(highlightHeaderClassName);\n          }\n\n          if (highlightRowClassName && !classesToRemove.includes(highlightRowClassName)) {\n            classesToRemove.push(highlightRowClassName);\n          }\n\n          if (highlightColumnClassName && !classesToRemove.includes(highlightColumnClassName)) {\n            classesToRemove.push(highlightColumnClassName);\n          }\n        }\n\n        var additionalClassesToRemove = wot.getSetting('onBeforeRemoveCellClassNames');\n\n        if (Array.isArray(additionalClassesToRemove)) {\n          for (var _i = 0; _i < additionalClassesToRemove.length; _i++) {\n            classesToRemove.push(additionalClassesToRemove[_i]);\n          }\n        }\n\n        var classesToRemoveLength = classesToRemove.length;\n\n        for (var _i2 = 0; _i2 < classesToRemoveLength; _i2++) {\n          // there was no rerender, so we need to remove classNames by ourselves\n          this.removeClassFromCells(classesToRemove[_i2]);\n        }\n      }\n\n      for (var _i3 = 0; _i3 < len; _i3++) {\n        highlights[_i3].draw(wot, fastDraw);\n      }\n    }\n    /**\n     * Get cell element at coords.\n     * Negative coords.row or coords.col are used to retrieve header cells. If there are multiple header levels, the\n     * negative value corresponds to the distance from the working area. For example, when there are 3 levels of column\n     * headers, coords.col=-1 corresponds to the most inner header element, while coords.col=-3 corresponds to the\n     * outmost header element.\n     *\n     * In case an element for the coords is not rendered, the method returns an error code.\n     * To produce the error code, the input parameters are validated in the order in which they\n     * are given. Thus, if both the row and the column coords are out of the rendered bounds,\n     * the method returns the error code for the row.\n     *\n     * @param {CellCoords} coords The cell coordinates.\n     * @returns {HTMLElement|number} HTMLElement on success or Number one of the exit codes on error:\n     *  -1 row before viewport\n     *  -2 row after viewport\n     *  -3 column before viewport\n     *  -4 column after viewport.\n     */\n\n  }, {\n    key: \"getCell\",\n    value: function getCell(coords) {\n      var row = coords.row;\n      var column = coords.col;\n      var hookResult = this.wot.getSetting('onModifyGetCellCoords', row, column);\n\n      if (hookResult && Array.isArray(hookResult)) {\n        var _hookResult = _slicedToArray(hookResult, 2);\n\n        row = _hookResult[0];\n        column = _hookResult[1];\n      }\n\n      if (this.isRowBeforeRenderedRows(row)) {\n        // row before rendered rows\n        return -1;\n      } else if (this.isRowAfterRenderedRows(row)) {\n        // row after rendered rows\n        return -2;\n      } else if (this.isColumnBeforeRenderedColumns(column)) {\n        // column before rendered columns\n        return -3;\n      } else if (this.isColumnAfterRenderedColumns(column)) {\n        // column after rendered columns\n        return -4;\n      }\n\n      var TR;\n\n      if (row < 0) {\n        TR = this.THEAD.childNodes[this.rowFilter.sourceRowToVisibleColHeadedRow(row)];\n      } else {\n        TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n      }\n\n      if (!TR && row >= 0) {\n        throw new Error('TR was expected to be rendered but is not');\n      }\n\n      var TD = TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(column)];\n\n      if (!TD && column >= 0) {\n        throw new Error('TD or TH was expected to be rendered but is not');\n      }\n\n      return TD;\n    }\n    /**\n     * GetColumnHeader.\n     *\n     * @param {number} col Column index.\n     * @param {number} [level=0] Header level (0 = most distant to the table).\n     * @returns {object} HTMLElement on success or undefined on error.\n     */\n\n  }, {\n    key: \"getColumnHeader\",\n    value: function getColumnHeader(col) {\n      var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n      var TR = this.THEAD.childNodes[level];\n      return TR === null || TR === void 0 ? void 0 : TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(col)];\n    }\n    /**\n     * Gets all columns headers (TH elements) from the table.\n     *\n     * @param {number} column A source column index.\n     * @returns {HTMLTableCellElement[]}\n     */\n\n  }, {\n    key: \"getColumnHeaders\",\n    value: function getColumnHeaders(column) {\n      var THs = [];\n      var visibleColumn = this.columnFilter.sourceColumnToVisibleRowHeadedColumn(column);\n      this.THEAD.childNodes.forEach(function (TR) {\n        var TH = TR.childNodes[visibleColumn];\n\n        if (TH) {\n          THs.push(TH);\n        }\n      });\n      return THs;\n    }\n    /**\n     * GetRowHeader.\n     *\n     * @param {number} row Row index.\n     * @param {number} [level=0] Header level (0 = most distant to the table).\n     * @returns {HTMLElement} HTMLElement on success or Number one of the exit codes on error: `null table doesn't have row headers`.\n     */\n\n  }, {\n    key: \"getRowHeader\",\n    value: function getRowHeader(row) {\n      var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) {\n        return;\n      }\n\n      var rowHeadersCount = this.wot.getSetting('rowHeaders').length;\n\n      if (level >= rowHeadersCount) {\n        return;\n      }\n\n      var TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n      return TR === null || TR === void 0 ? void 0 : TR.childNodes[level];\n    }\n    /**\n     * Gets all rows headers (TH elements) from the table.\n     *\n     * @param {number} row A source row index.\n     * @returns {HTMLTableCellElement[]}\n     */\n\n  }, {\n    key: \"getRowHeaders\",\n    value: function getRowHeaders(row) {\n      if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) {\n        return [];\n      }\n\n      var THs = [];\n      var rowHeadersCount = this.wot.getSetting('rowHeaders').length;\n\n      for (var renderedRowIndex = 0; renderedRowIndex < rowHeadersCount; renderedRowIndex++) {\n        var TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n        var TH = TR === null || TR === void 0 ? void 0 : TR.childNodes[renderedRowIndex];\n\n        if (TH) {\n          THs.push(TH);\n        }\n      }\n\n      return THs;\n    }\n    /**\n     * Returns cell coords object for a given TD (or a child element of a TD element).\n     *\n     * @param {HTMLTableCellElement} TD A cell DOM element (or a child of one).\n     * @returns {CellCoords|null} The coordinates of the provided TD element (or the closest TD element) or null, if the provided element is not applicable.\n     */\n\n  }, {\n    key: \"getCoords\",\n    value: function getCoords(TD) {\n      var cellElement = TD;\n\n      if (cellElement.nodeName !== 'TD' && cellElement.nodeName !== 'TH') {\n        cellElement = closest(cellElement, ['TD', 'TH']);\n      }\n\n      if (cellElement === null) {\n        return null;\n      }\n\n      var TR = cellElement.parentNode;\n      var CONTAINER = TR.parentNode;\n      var row = index(TR);\n      var col = cellElement.cellIndex;\n\n      if (overlayContainsElement(CLONE_TOP_LEFT_CORNER, cellElement, this.wtRootElement) || overlayContainsElement(CLONE_TOP, cellElement, this.wtRootElement)) {\n        if (CONTAINER.nodeName === 'THEAD') {\n          row -= CONTAINER.childNodes.length;\n        }\n      } else if (overlayContainsElement(CLONE_BOTTOM_LEFT_CORNER, cellElement, this.wtRootElement) || overlayContainsElement(CLONE_BOTTOM, cellElement, this.wtRootElement)) {\n        var totalRows = this.wot.getSetting('totalRows');\n        row = totalRows - CONTAINER.childNodes.length + row;\n      } else if (CONTAINER === this.THEAD) {\n        row = this.rowFilter.visibleColHeadedRowToSourceRow(row);\n      } else {\n        row = this.rowFilter.renderedToSource(row);\n      }\n\n      if (overlayContainsElement(CLONE_TOP_LEFT_CORNER, cellElement, this.wtRootElement) || overlayContainsElement(CLONE_LEFT, cellElement, this.wtRootElement) || overlayContainsElement(CLONE_BOTTOM_LEFT_CORNER, cellElement, this.wtRootElement)) {\n        col = this.columnFilter.offsettedTH(col);\n      } else {\n        col = this.columnFilter.visibleRowHeadedColumnToSourceColumn(col);\n      }\n\n      return new CellCoords(row, col);\n    }\n    /**\n     * Check if any of the rendered rows is higher than expected, and if so, cache them.\n     */\n\n  }, {\n    key: \"markOversizedRows\",\n    value: function markOversizedRows() {\n      if (this.wot.getSetting('externalRowCalculator')) {\n        return;\n      }\n\n      var rowCount = this.TBODY.childNodes.length;\n      var expectedTableHeight = rowCount * this.wot.wtSettings.settings.defaultRowHeight;\n      var actualTableHeight = innerHeight(this.TBODY) - 1;\n      var previousRowHeight;\n      var rowInnerHeight;\n      var sourceRowIndex;\n      var currentTr;\n      var rowHeader;\n\n      if (expectedTableHeight === actualTableHeight && !this.wot.getSetting('fixedRowsBottom')) {\n        // If the actual table height equals rowCount * default single row height, no row is oversized -> no need to iterate over them\n        return;\n      }\n\n      while (rowCount) {\n        rowCount -= 1;\n        sourceRowIndex = this.rowFilter.renderedToSource(rowCount);\n        previousRowHeight = this.getRowHeight(sourceRowIndex);\n        currentTr = this.getTrForRow(sourceRowIndex);\n        rowHeader = currentTr.querySelector('th');\n\n        if (rowHeader) {\n          rowInnerHeight = innerHeight(rowHeader);\n        } else {\n          rowInnerHeight = innerHeight(currentTr) - 1;\n        }\n\n        if (!previousRowHeight && this.wot.wtSettings.settings.defaultRowHeight < rowInnerHeight || previousRowHeight < rowInnerHeight) {\n          rowInnerHeight += 1;\n          this.wot.wtViewport.oversizedRows[sourceRowIndex] = rowInnerHeight;\n        }\n      }\n    }\n    /**\n     * @param {number} row The visual row index.\n     * @returns {HTMLTableElement}\n     */\n\n  }, {\n    key: \"getTrForRow\",\n    value: function getTrForRow(row) {\n      return this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n    }\n    /**\n     * Checks if the column index (negative value from -1 to N) is rendered.\n     *\n     * @param {number} column The column index (negative value from -1 to N).\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isColumnHeaderRendered\",\n    value: function isColumnHeaderRendered(column) {\n      if (column >= 0) {\n        return false;\n      }\n\n      var rowHeaders = this.wot.getSetting('rowHeaders');\n      var rowHeadersCount = rowHeaders.length;\n      return Math.abs(column) <= rowHeadersCount;\n    }\n    /**\n     * Checks if the row index (negative value from -1 to N) is rendered.\n     *\n     * @param {number} row The row index (negative value from -1 to N).\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isRowHeaderRendered\",\n    value: function isRowHeaderRendered(row) {\n      if (row >= 0) {\n        return false;\n      }\n\n      var columnHeaders = this.wot.getSetting('columnHeaders');\n      var columnHeadersCount = columnHeaders.length;\n      return Math.abs(row) <= columnHeadersCount;\n    }\n    /* eslint-disable jsdoc/require-description-complete-sentence */\n\n    /**\n     * Check if the given row index is lower than the index of the first row that\n     * is currently rendered and return TRUE in that case, or FALSE otherwise.\n     *\n     * Negative row index is used to check the columns' headers.\n     *\n     *  Headers\n     *           +--------------+                                     \u2502\n     *       -3  \u2502    \u2502    \u2502    \u2502                                     \u2502\n     *           +--------------+                                     \u2502\n     *       -2  \u2502    \u2502    \u2502    \u2502                                     \u2502 TRUE\n     *           +--------------+                                     \u2502\n     *       -1  \u2502    \u2502    \u2502    \u2502                                     \u2502\n     *  Cells  +==================+                                   \u2502\n     *        0  \u2507    \u2507    \u2507    \u2507 <--- For fixedRowsTop: 1            \u2502\n     *           +--------------+      the master overlay do       ---+ first rendered row (index 1)\n     *        1  \u2502 A2 \u2502 B2 \u2502 C2 \u2502      not render the first row.      \u2502\n     *           +--------------+                                     \u2502 FALSE\n     *        2  \u2502 A3 \u2502 B3 \u2502 C3 \u2502                                     \u2502\n     *           +--------------+                                  ---+ last rendered row\n     *                                                                \u2502\n     *                                                                \u2502 FALSE\n     *\n     * @param {number} row The visual row index.\n     * @memberof Table#\n     * @function isRowBeforeRenderedRows\n     * @returns {boolean}\n     */\n\n    /* eslint-enable jsdoc/require-description-complete-sentence */\n\n  }, {\n    key: \"isRowBeforeRenderedRows\",\n    value: function isRowBeforeRenderedRows(row) {\n      var first = this.getFirstRenderedRow(); // Check the headers only in case when the first rendered row is -1 or 0.\n      // This is an indication that the overlay is placed on the most top position.\n\n      if (row < 0 && first <= 0) {\n        return !this.isRowHeaderRendered(row);\n      }\n\n      return row < first;\n    }\n    /* eslint-disable jsdoc/require-description-complete-sentence */\n\n    /**\n     * Check if the given column index is greater than the index of the last column that\n     * is currently rendered and return TRUE in that case, or FALSE otherwise.\n     *\n     * The negative row index is used to check the columns' headers. However,\n     * keep in mind that for negative indexes, the method always returns FALSE as\n     * it is not possible to render headers partially. The \"after\" index can not be\n     * lower than -1.\n     *\n     *  Headers\n     *           +--------------+                                     \u2502\n     *       -3  \u2502    \u2502    \u2502    \u2502                                     \u2502\n     *           +--------------+                                     \u2502\n     *       -2  \u2502    \u2502    \u2502    \u2502                                     \u2502 FALSE\n     *           +--------------+                                     \u2502\n     *       -1  \u2502    \u2502    \u2502    \u2502                                     \u2502\n     *  Cells  +==================+                                   \u2502\n     *        0  \u2507    \u2507    \u2507    \u2507 <--- For fixedRowsTop: 1            \u2502\n     *           +--------------+      the master overlay do       ---+ first rendered row (index 1)\n     *        1  \u2502 A2 \u2502 B2 \u2502 C2 \u2502      not render the first rows      \u2502\n     *           +--------------+                                     \u2502 FALSE\n     *        2  \u2502 A3 \u2502 B3 \u2502 C3 \u2502                                     \u2502\n     *           +--------------+                                  ---+ last rendered row\n     *                                                                \u2502\n     *                                                                \u2502 TRUE\n     *\n     * @param {number} row The visual row index.\n     * @memberof Table#\n     * @function isRowAfterRenderedRows\n     * @returns {boolean}\n     */\n\n    /* eslint-enable jsdoc/require-description-complete-sentence */\n\n  }, {\n    key: \"isRowAfterRenderedRows\",\n    value: function isRowAfterRenderedRows(row) {\n      return row > this.getLastRenderedRow();\n    }\n    /* eslint-disable jsdoc/require-description-complete-sentence */\n\n    /**\n     * Check if the given column index is lower than the index of the first column that\n     * is currently rendered and return TRUE in that case, or FALSE otherwise.\n     *\n     * Negative column index is used to check the rows' headers.\n     *\n     *                            For fixedColumnsLeft: 1 the master overlay\n     *                            do not render this first columns.\n     *  Headers    -3   -2   -1    |\n     *           +----+----+----\u2551\u2504 \u2504 +------+------+\n     *           \u2502    \u2502    \u2502    \u2551    \u2502  B1  \u2502  C1  \u2502\n     *           +--------------\u2551\u2504 \u2504 --------------\u2502\n     *           \u2502    \u2502    \u2502    \u2551    \u2502  B2  \u2502  C2  \u2502\n     *           +--------------\u2551\u2504 \u2504 --------------\u2502\n     *           \u2502    \u2502    \u2502    \u2551    \u2502  B3  \u2502  C3  \u2502\n     *           +----+----+----\u2551\u2504 \u2504 +------+------+\n     *                               \u2577             \u2577\n     *      -------------------------+-------------+---------------->\n     *          TRUE             first    FALSE   last         FALSE\n     *                           rendered         rendered\n     *                           column           column\n     *\n     * @param {number} column The visual column index.\n     * @memberof Table#\n     * @function isColumnBeforeRenderedColumns\n     * @returns {boolean}\n     */\n\n    /* eslint-enable jsdoc/require-description-complete-sentence */\n\n  }, {\n    key: \"isColumnBeforeRenderedColumns\",\n    value: function isColumnBeforeRenderedColumns(column) {\n      var first = this.getFirstRenderedColumn(); // Check the headers only in case when the first rendered column is -1 or 0.\n      // This is an indication that the overlay is placed on the most left position.\n\n      if (column < 0 && first <= 0) {\n        return !this.isColumnHeaderRendered(column);\n      }\n\n      return column < first;\n    }\n    /* eslint-disable jsdoc/require-description-complete-sentence */\n\n    /**\n     * Check if the given column index is greater than the index of the last column that\n     * is currently rendered and return TRUE in that case, or FALSE otherwise.\n     *\n     * The negative column index is used to check the rows' headers. However,\n     * keep in mind that for negative indexes, the method always returns FALSE as\n     * it is not possible to render headers partially. The \"after\" index can not be\n     * lower than -1.\n     *\n     *                            For fixedColumnsLeft: 1 the master overlay\n     *                            do not render this first columns.\n     *  Headers    -3   -2   -1    |\n     *           +----+----+----\u2551\u2504 \u2504 +------+------+\n     *           \u2502    \u2502    \u2502    \u2551    \u2502  B1  \u2502  C1  \u2502\n     *           +--------------\u2551\u2504 \u2504 --------------\u2502\n     *           \u2502    \u2502    \u2502    \u2551    \u2502  B2  \u2502  C2  \u2502\n     *           +--------------\u2551\u2504 \u2504 --------------\u2502\n     *           \u2502    \u2502    \u2502    \u2551    \u2502  B3  \u2502  C3  \u2502\n     *           +----+----+----\u2551\u2504 \u2504 +------+------+\n     *                               \u2577             \u2577\n     *      -------------------------+-------------+---------------->\n     *          FALSE             first    FALSE   last         TRUE\n     *                           rendered         rendered\n     *                           column           column\n     *\n     * @param {number} column The visual column index.\n     * @memberof Table#\n     * @function isColumnAfterRenderedColumns\n     * @returns {boolean}\n     */\n\n    /* eslint-enable jsdoc/require-description-complete-sentence */\n\n  }, {\n    key: \"isColumnAfterRenderedColumns\",\n    value: function isColumnAfterRenderedColumns(column) {\n      return this.columnFilter && column > this.getLastRenderedColumn();\n    }\n  }, {\n    key: \"isColumnAfterViewport\",\n    value: function isColumnAfterViewport(column) {\n      return this.columnFilter && column > this.getLastVisibleColumn();\n    }\n  }, {\n    key: \"isRowAfterViewport\",\n    value: function isRowAfterViewport(row) {\n      return this.rowFilter && row > this.getLastVisibleRow();\n    }\n  }, {\n    key: \"isColumnBeforeViewport\",\n    value: function isColumnBeforeViewport(column) {\n      return this.columnFilter && this.columnFilter.sourceToRendered(column) < 0 && column >= 0;\n    }\n  }, {\n    key: \"isLastRowFullyVisible\",\n    value: function isLastRowFullyVisible() {\n      return this.getLastVisibleRow() === this.getLastRenderedRow();\n    }\n  }, {\n    key: \"isLastColumnFullyVisible\",\n    value: function isLastColumnFullyVisible() {\n      return this.getLastVisibleColumn() === this.getLastRenderedColumn();\n    }\n  }, {\n    key: \"allRowsInViewport\",\n    value: function allRowsInViewport() {\n      return this.wot.getSetting('totalRows') === this.getVisibleRowsCount();\n    }\n  }, {\n    key: \"allColumnsInViewport\",\n    value: function allColumnsInViewport() {\n      return this.wot.getSetting('totalColumns') === this.getVisibleColumnsCount();\n    }\n    /**\n     * Checks if any of the row's cells content exceeds its initial height, and if so, returns the oversized height.\n     *\n     * @param {number} sourceRow The physical row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getRowHeight\",\n    value: function getRowHeight(sourceRow) {\n      return this.rowUtils.getHeight(sourceRow);\n    }\n    /**\n     * @param {number} level The column level.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getColumnHeaderHeight\",\n    value: function getColumnHeaderHeight(level) {\n      return this.columnUtils.getHeaderHeight(level);\n    }\n    /**\n     * @param {number} sourceColumn The physical column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getColumnWidth\",\n    value: function getColumnWidth(sourceColumn) {\n      return this.columnUtils.getWidth(sourceColumn);\n    }\n    /**\n     * @param {number} sourceColumn The physical column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getStretchedColumnWidth\",\n    value: function getStretchedColumnWidth(sourceColumn) {\n      return this.columnUtils.getStretchedColumnWidth(sourceColumn);\n    }\n    /**\n     * Checks if the table has defined size. It returns `true` when the table has width and height\n     * set bigger than `0px`.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"hasDefinedSize\",\n    value: function hasDefinedSize() {\n      return this.hasTableHeight && this.hasTableWidth;\n    }\n    /**\n     * Checks if the table is visible. It returns `true` when the holder element (or its parents)\n     * has CSS 'display' property different than 'none'.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isVisible\",\n    value: function isVisible() {\n      return _isVisible(this.TABLE);\n    }\n    /**\n     * Modify row header widths provided by user in class contructor.\n     *\n     * @private\n     * @param {Function} rowHeaderWidthFactory The function which can provide default width values for rows..\n     * @returns {number}\n     */\n\n  }, {\n    key: \"_modifyRowHeaderWidth\",\n    value: function _modifyRowHeaderWidth(rowHeaderWidthFactory) {\n      var widths = isFunction(rowHeaderWidthFactory) ? rowHeaderWidthFactory() : null;\n\n      if (Array.isArray(widths)) {\n        widths = _toConsumableArray(widths);\n        widths[widths.length - 1] = this._correctRowHeaderWidth(widths[widths.length - 1]);\n      } else {\n        widths = this._correctRowHeaderWidth(widths);\n      }\n\n      return widths;\n    }\n    /**\n     * Correct row header width if necessary.\n     *\n     * @private\n     * @param {number} width The width to process.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"_correctRowHeaderWidth\",\n    value: function _correctRowHeaderWidth(width) {\n      var rowHeaderWidth = width;\n\n      if (typeof width !== 'number') {\n        rowHeaderWidth = this.wot.getSetting('defaultColumnWidth');\n      }\n\n      if (this.correctHeaderWidth) {\n        rowHeaderWidth += 1;\n      }\n\n      return rowHeaderWidth;\n    }\n  }]);\n\n  return Table;\n}();\n\nexport default Table;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { SharedOrderView } from \"./../utils/orderView/index.mjs\";\nimport BaseRenderer from \"./_base.mjs\";\n/**\n * Row headers renderer responsible for managing (inserting, tracking, rendering) TR elements belongs to TR.\n *\n *   <tr> (root node)\n *     \u251C <th>   --- RowHeadersRenderer\n *     \u251C <td>   \\\n *     \u251C <td>    \\\n *     \u251C <td>     - CellsRenderer\n *     \u251C <td>    /\n *     \u2514 <td>   /.\n *\n * @class {CellsRenderer}\n */\n\nvar RowHeadersRenderer = /*#__PURE__*/function (_BaseRenderer) {\n  _inherits(RowHeadersRenderer, _BaseRenderer);\n\n  var _super = _createSuper(RowHeadersRenderer);\n\n  function RowHeadersRenderer() {\n    var _this;\n\n    _classCallCheck(this, RowHeadersRenderer);\n\n    _this = _super.call(this, 'TH');\n    /**\n     * Cache for OrderView classes connected to specified node.\n     *\n     * @type {WeakMap}\n     */\n\n    _this.orderViews = new WeakMap();\n    /**\n     * Row index which specifies the row position of the processed row header.\n     *\n     * @type {number}\n     */\n\n    _this.sourceRowIndex = 0;\n    return _this;\n  }\n  /**\n   * Obtains the instance of the SharedOrderView class which is responsible for rendering the nodes to the root node.\n   *\n   * @param {HTMLTableRowElement} rootNode The TR element, which is root element for row headers (TH).\n   * @returns {SharedOrderView}\n   */\n\n\n  _createClass(RowHeadersRenderer, [{\n    key: \"obtainOrderView\",\n    value: function obtainOrderView(rootNode) {\n      var _this2 = this;\n\n      var orderView;\n\n      if (this.orderViews.has(rootNode)) {\n        orderView = this.orderViews.get(rootNode);\n      } else {\n        orderView = new SharedOrderView(rootNode, function (sourceColumnIndex) {\n          return _this2.nodesPool.obtain(_this2.sourceRowIndex, sourceColumnIndex);\n        }, this.nodeType);\n        this.orderViews.set(rootNode, orderView);\n      }\n\n      return orderView;\n    }\n    /**\n     * Renders the cells.\n     */\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$table = this.table,\n          rowsToRender = _this$table.rowsToRender,\n          rowHeaderFunctions = _this$table.rowHeaderFunctions,\n          rowHeadersCount = _this$table.rowHeadersCount,\n          rows = _this$table.rows,\n          cells = _this$table.cells;\n\n      for (var visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n        var sourceRowIndex = this.table.renderedRowToSource(visibleRowIndex);\n        var TR = rows.getRenderedNode(visibleRowIndex);\n        this.sourceRowIndex = sourceRowIndex;\n        var orderView = this.obtainOrderView(TR);\n        var cellsView = cells.obtainOrderView(TR);\n        orderView.appendView(cellsView).setSize(rowHeadersCount).setOffset(this.table.renderedColumnToSource(0)).start();\n\n        for (var visibleColumnIndex = 0; visibleColumnIndex < rowHeadersCount; visibleColumnIndex++) {\n          orderView.render();\n          var TH = orderView.getCurrentNode();\n          TH.className = '';\n          TH.removeAttribute('style');\n          rowHeaderFunctions[visibleColumnIndex](sourceRowIndex, TH, visibleColumnIndex);\n        }\n\n        orderView.end();\n      }\n    }\n  }]);\n\n  return RowHeadersRenderer;\n}(BaseRenderer);\n\nexport { RowHeadersRenderer as default };", "/**\n * Describes that ViewSizeSet instance doesn't share sizes with another\n * instance (root node can contain only one type of children nodes).\n *\n * @type {number}\n */\nexport var WORKING_SPACE_ALL = 0;\n/**\n * Describes that ViewSizeSet instance share sizes with another instance and\n * set working space for this instance to 'top' (root node can contain multiple\n * types of children and this instance will be occupied top space of the root node).\n *\n * @type {number}\n */\n\nexport var WORKING_SPACE_TOP = 1;\n/**\n * Describes that ViewSizeSet instance share sizes with another instance and\n * set working space for this instance to 'bottom' (root node can contain multiple\n * types of children and this instance will be occupied bottom space of the root node).\n *\n * @type {number}\n */\n\nexport var WORKING_SPACE_BOTTOM = 2;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/**\n * Holder for current and next size (count of rendered and to render DOM elements) and offset.\n *\n * @class {ViewSize}\n */\nvar ViewSize = /*#__PURE__*/function () {\n  function ViewSize() {\n    _classCallCheck(this, ViewSize);\n\n    /**\n     * Current size of the rendered DOM elements.\n     *\n     * @type {number}\n     */\n    this.currentSize = 0;\n    /**\n     * Next size of the rendered DOM elements which should be fulfilled.\n     *\n     * @type {number}\n     */\n\n    this.nextSize = 0;\n    /**\n     * Current offset.\n     *\n     * @type {number}\n     */\n\n    this.currentOffset = 0;\n    /**\n     * Next ofset.\n     *\n     * @type {number}\n     */\n\n    this.nextOffset = 0;\n  }\n  /**\n   * Sets new size of the rendered DOM elements.\n   *\n   * @param {number} size The size.\n   */\n\n\n  _createClass(ViewSize, [{\n    key: \"setSize\",\n    value: function setSize(size) {\n      this.currentSize = this.nextSize;\n      this.nextSize = size;\n    }\n    /**\n     * Sets new offset.\n     *\n     * @param {number} offset The offset.\n     */\n\n  }, {\n    key: \"setOffset\",\n    value: function setOffset(offset) {\n      this.currentOffset = this.nextOffset;\n      this.nextOffset = offset;\n    }\n  }]);\n\n  return ViewSize;\n}();\n\nexport { ViewSize as default };", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport ViewSize from \"./viewSize.mjs\";\nimport { WORKING_SPACE_ALL, WORKING_SPACE_TOP, WORKING_SPACE_BOTTOM } from \"./constants.mjs\";\n/**\n * The class is a source of the truth of information about the current and\n * next size of the rendered DOM elements and current and next offset of\n * the view. That information allows us to calculate diff between current\n * DOM order and this which should be rendered without touching the DOM API at all.\n *\n * Mostly the ViewSizeSet is created for each individual renderer. But in\n * the table, there is one case where this size information should be shared\n * between two different instances (different table renderers). This is a TR\n * element which can contain TH elements - managed by own renderer and\n * TD elements - managed by another renderer. To generate correct DOM order\n * for them it is required to connect these two instances by reference\n * through `sharedSize`.\n *\n * @class {ViewSizeSet}\n */\n\nvar ViewSizeSet = /*#__PURE__*/function () {\n  function ViewSizeSet() {\n    _classCallCheck(this, ViewSizeSet);\n\n    /**\n     * Holder for current and next view size and offset.\n     *\n     * @type {ViewSize}\n     */\n    this.size = new ViewSize();\n    /**\n     * Defines if this instance shares its size with another instance. If it's in the shared\n     * mode it defines what space it occupies ('top' or 'bottom').\n     *\n     * @type {number}\n     */\n\n    this.workingSpace = WORKING_SPACE_ALL;\n    /**\n     * Shared Size instance.\n     *\n     * @type {ViewSize}\n     */\n\n    this.sharedSize = null;\n  }\n  /**\n   * Sets the size for rendered elements. It can be a size for rows, cells or size for row\n   * headers etc.\n   *\n   * @param {number} size The size.\n   */\n\n\n  _createClass(ViewSizeSet, [{\n    key: \"setSize\",\n    value: function setSize(size) {\n      this.size.setSize(size);\n    }\n    /**\n     * Sets the offset for rendered elements. The offset describes the shift between 0 and\n     * the first rendered element according to the scroll position.\n     *\n     * @param {number} offset The offset.\n     */\n\n  }, {\n    key: \"setOffset\",\n    value: function setOffset(offset) {\n      this.size.setOffset(offset);\n    }\n    /**\n     * Returns ViewSize instance.\n     *\n     * @returns {ViewSize}\n     */\n\n  }, {\n    key: \"getViewSize\",\n    value: function getViewSize() {\n      return this.size;\n    }\n    /**\n     * Checks if this ViewSizeSet is sharing the size with another instance.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isShared\",\n    value: function isShared() {\n      return this.sharedSize instanceof ViewSize;\n    }\n    /**\n     * Checks what working space describes this size instance.\n     *\n     * @param {number} workingSpace The number which describes the type of the working space (see constants.js).\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isPlaceOn\",\n    value: function isPlaceOn(workingSpace) {\n      return this.workingSpace === workingSpace;\n    }\n    /**\n     * Appends the ViewSizeSet instance to this instance that turns it into a shared mode.\n     *\n     * @param {ViewSizeSet} viewSize The instance of the ViewSizeSet class.\n     */\n\n  }, {\n    key: \"append\",\n    value: function append(viewSize) {\n      this.workingSpace = WORKING_SPACE_TOP;\n      viewSize.workingSpace = WORKING_SPACE_BOTTOM;\n      this.sharedSize = viewSize.getViewSize();\n    }\n    /**\n     * Prepends the ViewSize instance to this instance that turns it into a shared mode.\n     *\n     * @param {ViewSizeSet} viewSize The instance of the ViewSizeSet class.\n     */\n\n  }, {\n    key: \"prepend\",\n    value: function prepend(viewSize) {\n      this.workingSpace = WORKING_SPACE_BOTTOM;\n      viewSize.workingSpace = WORKING_SPACE_TOP;\n      this.sharedSize = viewSize.getViewSize();\n    }\n  }]);\n\n  return ViewSizeSet;\n}();\n\nexport { ViewSizeSet as default };", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { WORKING_SPACE_TOP, WORKING_SPACE_BOTTOM } from \"./constants.mjs\";\nimport ViewSizeSet from \"./viewSizeSet.mjs\";\n/**\n * Executive model for each table renderer. It's responsible for injecting DOM nodes in a\n * specified order and adjusting the number of elements in the root node.\n *\n * Only this class have rights to juggling DOM elements within the root node (see render method).\n *\n * @class {OrderView}\n */\n\nvar OrderView = /*#__PURE__*/function () {\n  function OrderView(rootNode, nodesPool, childNodeType) {\n    _classCallCheck(this, OrderView);\n\n    /**\n     * The root node to manage with.\n     *\n     * @type {HTMLElement}\n     */\n    this.rootNode = rootNode;\n    /**\n     * Factory for newly created DOM elements.\n     *\n     * @type {Function}\n     */\n\n    this.nodesPool = nodesPool;\n    /**\n     * Holder for sizing and positioning of the view.\n     *\n     * @type {ViewSizeSet}\n     */\n\n    this.sizeSet = new ViewSizeSet();\n    /**\n     * Node type which the order view will manage while rendering the DOM elements.\n     *\n     * @type {string}\n     */\n\n    this.childNodeType = childNodeType.toUpperCase();\n    /**\n     * The visual index of currently processed row.\n     *\n     * @type {number}\n     */\n\n    this.visualIndex = 0;\n    /**\n     * The list of DOM elements which are rendered for this render cycle.\n     *\n     * @type {HTMLElement[]}\n     */\n\n    this.collectedNodes = [];\n  }\n  /**\n   * Sets the size for rendered elements. It can be a size for rows, cells or size for row\n   * headers etc. It depends for what table renderer this instance was created.\n   *\n   * @param {number} size The size.\n   * @returns {OrderView}\n   */\n\n\n  _createClass(OrderView, [{\n    key: \"setSize\",\n    value: function setSize(size) {\n      this.sizeSet.setSize(size);\n      return this;\n    }\n    /**\n     * Sets the offset for rendered elements. The offset describes the shift between 0 and\n     * the first rendered element according to the scroll position.\n     *\n     * @param {number} offset The offset.\n     * @returns {OrderView}\n     */\n\n  }, {\n    key: \"setOffset\",\n    value: function setOffset(offset) {\n      this.sizeSet.setOffset(offset);\n      return this;\n    }\n    /**\n     * Checks if this instance of the view shares the root node with another instance. This happens only once when\n     * a row (TR) as a root node is managed by two OrderView instances. If this happens another DOM injection\n     * algorithm is performed to achieve consistent order.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSharedViewSet\",\n    value: function isSharedViewSet() {\n      return this.sizeSet.isShared();\n    }\n    /**\n     * Returns rendered DOM element based on visual index.\n     *\n     * @param {number} visualIndex The visual index.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"getNode\",\n    value: function getNode(visualIndex) {\n      return visualIndex < this.collectedNodes.length ? this.collectedNodes[visualIndex] : null;\n    }\n    /**\n     * Returns currently processed DOM element.\n     *\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"getCurrentNode\",\n    value: function getCurrentNode() {\n      var length = this.collectedNodes.length;\n      return length > 0 ? this.collectedNodes[length - 1] : null;\n    }\n    /**\n     * Returns rendered child count for this instance.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getRenderedChildCount\",\n    value: function getRenderedChildCount() {\n      var rootNode = this.rootNode,\n          sizeSet = this.sizeSet;\n      var childElementCount = 0;\n\n      if (this.isSharedViewSet()) {\n        var element = rootNode.firstElementChild;\n\n        while (element) {\n          if (element.tagName === this.childNodeType) {\n            childElementCount += 1;\n          } else if (sizeSet.isPlaceOn(WORKING_SPACE_TOP)) {\n            break;\n          }\n\n          element = element.nextElementSibling;\n        }\n      } else {\n        childElementCount = rootNode.childElementCount;\n      }\n\n      return childElementCount;\n    }\n    /**\n     * Setups and prepares all necessary properties and start the rendering process.\n     * This method has to be called only once (at the start) for the render cycle.\n     */\n\n  }, {\n    key: \"start\",\n    value: function start() {\n      this.collectedNodes.length = 0;\n      this.visualIndex = 0;\n      var rootNode = this.rootNode,\n          sizeSet = this.sizeSet;\n      var isShared = this.isSharedViewSet();\n\n      var _sizeSet$getViewSize = sizeSet.getViewSize(),\n          nextSize = _sizeSet$getViewSize.nextSize;\n\n      var childElementCount = this.getRenderedChildCount();\n\n      while (childElementCount < nextSize) {\n        var newNode = this.nodesPool();\n\n        if (!isShared || isShared && sizeSet.isPlaceOn(WORKING_SPACE_BOTTOM)) {\n          rootNode.appendChild(newNode);\n        } else {\n          rootNode.insertBefore(newNode, rootNode.firstChild);\n        }\n\n        childElementCount += 1;\n      }\n\n      var isSharedPlacedOnTop = isShared && sizeSet.isPlaceOn(WORKING_SPACE_TOP);\n\n      while (childElementCount > nextSize) {\n        rootNode.removeChild(isSharedPlacedOnTop ? rootNode.firstChild : rootNode.lastChild);\n        childElementCount -= 1;\n      }\n    }\n    /**\n     * Renders the DOM element based on visual index (which is calculated internally).\n     * This method has to be called as many times as the size count is met (to cover all previously rendered DOM elements).\n     */\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      var rootNode = this.rootNode,\n          sizeSet = this.sizeSet;\n      var visualIndex = this.visualIndex;\n\n      if (this.isSharedViewSet() && sizeSet.isPlaceOn(WORKING_SPACE_BOTTOM)) {\n        visualIndex += sizeSet.sharedSize.nextSize;\n      }\n\n      var node = rootNode.childNodes[visualIndex];\n\n      if (node.tagName !== this.childNodeType) {\n        var newNode = this.nodesPool();\n        rootNode.replaceChild(newNode, node);\n        node = newNode;\n      }\n\n      this.collectedNodes.push(node);\n      this.visualIndex += 1;\n    }\n    /**\n     * Ends the render process.\n     * This method has to be called only once (at the end) for the render cycle.\n     */\n\n  }, {\n    key: \"end\",\n    value: function end() {}\n  }]);\n\n  return OrderView;\n}();\n\nexport { OrderView as default };", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport OrderView from \"./view.mjs\";\n/**\n * Executive model for TR root nodes.\n *\n * @class {SharedOrderView}\n */\n\nvar SharedOrderView = /*#__PURE__*/function (_OrderView) {\n  _inherits(SharedOrderView, _OrderView);\n\n  var _super = _createSuper(SharedOrderView);\n\n  function SharedOrderView() {\n    _classCallCheck(this, SharedOrderView);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(SharedOrderView, [{\n    key: \"prependView\",\n    value:\n    /**\n     * The method results in merging external order view into the current order. This happens only for order views which\n     * operate on the same root node.\n     *\n     * In the table, there is only one scenario when this happens. TR root element\n     * has a common root node with cells order view and row headers order view. Both classes have to share\n     * information about their order sizes to make proper diff calculations.\n     *\n     * @param {OrderView} orderView The order view to merging with. The view will be added at the beginning of the list.\n     * @returns {SharedOrderView}\n     */\n    function prependView(orderView) {\n      this.sizeSet.prepend(orderView.sizeSet);\n      orderView.sizeSet.append(this.sizeSet);\n      return this;\n    }\n    /**\n     * The method results in merging external order view into the current order. This happens only for order views which\n     * operate on the same root node.\n     *\n     * In the table, there is only one scenario when this happens. TR root element\n     * has a common root node with cells order view and row headers order view. Both classes have to share\n     * information about their order sizes to make proper diff calculations.\n     *\n     * @param {OrderView} orderView The order view to merging with. The view will be added at the end of the list.\n     * @returns {SharedOrderView}\n     */\n\n  }, {\n    key: \"appendView\",\n    value: function appendView(orderView) {\n      this.sizeSet.append(orderView.sizeSet);\n      orderView.sizeSet.prepend(this.sizeSet);\n      return this;\n    }\n  }]);\n\n  return SharedOrderView;\n}(OrderView);\n\nexport { SharedOrderView as default };", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/**\n * Factory for newly created DOM elements.\n *\n * @class {NodesPool}\n */\nvar NodesPool = /*#__PURE__*/function () {\n  function NodesPool(nodeType) {\n    _classCallCheck(this, NodesPool);\n\n    /**\n     * Node type to generate (ew 'th', 'td').\n     *\n     * @type {string}\n     */\n    this.nodeType = nodeType.toUpperCase();\n  }\n  /**\n   * Set document owner for this instance.\n   *\n   * @param {HTMLDocument} rootDocument The document window owner.\n   */\n\n\n  _createClass(NodesPool, [{\n    key: \"setRootDocument\",\n    value: function setRootDocument(rootDocument) {\n      this.rootDocument = rootDocument;\n    }\n    /**\n     * Obtains an element. The returned elements in the feature can be cached.\n     *\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"obtain\",\n    value: function obtain() {\n      return this.rootDocument.createElement(this.nodeType);\n    }\n  }]);\n\n  return NodesPool;\n}();\n\nexport { NodesPool as default };", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport NodesPool from \"./../utils/nodesPool.mjs\";\n/**\n * Base renderer class, abstract logic for specialized renderers.\n *\n * @class BaseRenderer\n */\n\nvar BaseRenderer = /*#__PURE__*/function () {\n  function BaseRenderer(nodeType, rootNode) {\n    _classCallCheck(this, BaseRenderer);\n\n    /**\n     * Factory for newly created DOM elements.\n     *\n     * NodePool should be used for each renderer. For the first stage of the refactoring\n     * process, only some of the renderers are implemented a new approach.\n     *\n     * @type {NodesPool|null}\n     */\n    this.nodesPool = typeof nodeType === 'string' ? new NodesPool(nodeType) : null;\n    /**\n     * Node type which the renderer will manage while building the table (eg. 'TD', 'TR', 'TH').\n     *\n     * @type {string}\n     */\n\n    this.nodeType = nodeType;\n    /**\n     * The root node to which newly created elements will be inserted.\n     *\n     * @type {HTMLElement}\n     */\n\n    this.rootNode = rootNode;\n    /**\n     * The instance of the Table class, a wrapper for all renderers and holder for properties describe table state.\n     *\n     * @type {TableRenderer}\n     */\n\n    this.table = null;\n    /**\n     * Counter of nodes already added.\n     *\n     * @type {number}\n     */\n\n    this.renderedNodes = 0;\n  }\n  /**\n   * Sets the table renderer instance to the current renderer.\n   *\n   * @param {TableRenderer} table The TableRenderer instance.\n   */\n\n\n  _createClass(BaseRenderer, [{\n    key: \"setTable\",\n    value: function setTable(table) {\n      if (this.nodesPool) {\n        this.nodesPool.setRootDocument(table.rootDocument);\n      }\n\n      this.table = table;\n    }\n    /**\n     * Adjusts the number of rendered nodes.\n     */\n\n  }, {\n    key: \"adjust\",\n    value: function adjust() {}\n    /**\n     * Renders the contents to the elements.\n     */\n\n  }, {\n    key: \"render\",\n    value: function render() {}\n  }]);\n\n  return BaseRenderer;\n}();\n\nexport { BaseRenderer as default };", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { empty } from \"./../../../../helpers/dom/element.mjs\";\nimport BaseRenderer from \"./_base.mjs\";\n/**\n * Column headers renderer responsible for managing (inserting, tracking, rendering) TR and TH elements.\n *\n *   <thead> (root node)\n *     \u251C <tr>   \\\n *     \u251C <tr>    \\\n *     \u251C <tr>     - ColumnHeadersRenderer\n *     \u251C <tr>    /\n *     \u2514 <tr>   /.\n *\n * @class {ColumnHeadersRenderer}\n */\n\nvar ColumnHeadersRenderer = /*#__PURE__*/function (_BaseRenderer) {\n  _inherits(ColumnHeadersRenderer, _BaseRenderer);\n\n  var _super = _createSuper(ColumnHeadersRenderer);\n\n  function ColumnHeadersRenderer(rootNode) {\n    _classCallCheck(this, ColumnHeadersRenderer);\n\n    return _super.call(this, null, rootNode); // NodePool is not implemented for this renderer yet\n  }\n  /**\n   * Adjusts the number of the rendered elements.\n   */\n\n\n  _createClass(ColumnHeadersRenderer, [{\n    key: \"adjust\",\n    value: function adjust() {\n      var _this$table = this.table,\n          columnHeadersCount = _this$table.columnHeadersCount,\n          rowHeadersCount = _this$table.rowHeadersCount;\n      var TR = this.rootNode.firstChild;\n\n      if (columnHeadersCount) {\n        var columnsToRender = this.table.columnsToRender;\n        var allColumnsToRender = columnsToRender + rowHeadersCount;\n\n        for (var i = 0, len = columnHeadersCount; i < len; i++) {\n          TR = this.rootNode.childNodes[i];\n\n          if (!TR) {\n            TR = this.table.rootDocument.createElement('tr');\n            this.rootNode.appendChild(TR);\n          }\n\n          this.renderedNodes = TR.childNodes.length;\n\n          while (this.renderedNodes < allColumnsToRender) {\n            TR.appendChild(this.table.rootDocument.createElement('th'));\n            this.renderedNodes += 1;\n          }\n\n          while (this.renderedNodes > allColumnsToRender) {\n            TR.removeChild(TR.lastChild);\n            this.renderedNodes -= 1;\n          }\n        }\n\n        var theadChildrenLength = this.rootNode.childNodes.length;\n\n        if (theadChildrenLength > columnHeadersCount) {\n          for (var _i = columnHeadersCount; _i < theadChildrenLength; _i++) {\n            this.rootNode.removeChild(this.rootNode.lastChild);\n          }\n        }\n      } else if (TR) {\n        empty(TR);\n      }\n    }\n    /**\n     * Renders the TH elements.\n     */\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      var columnHeadersCount = this.table.columnHeadersCount;\n\n      for (var rowHeaderIndex = 0; rowHeaderIndex < columnHeadersCount; rowHeaderIndex += 1) {\n        var _this$table2 = this.table,\n            columnHeaderFunctions = _this$table2.columnHeaderFunctions,\n            columnsToRender = _this$table2.columnsToRender,\n            rowHeadersCount = _this$table2.rowHeadersCount;\n        var TR = this.rootNode.childNodes[rowHeaderIndex];\n\n        for (var renderedColumnIndex = -1 * rowHeadersCount; renderedColumnIndex < columnsToRender; renderedColumnIndex += 1) {\n          // eslint-disable-line max-len\n          var sourceColumnIndex = this.table.renderedColumnToSource(renderedColumnIndex);\n          var TH = TR.childNodes[renderedColumnIndex + rowHeadersCount];\n          TH.className = '';\n          TH.removeAttribute('style');\n          columnHeaderFunctions[rowHeaderIndex](sourceColumnIndex, TH, rowHeaderIndex);\n        }\n      }\n    }\n  }]);\n\n  return ColumnHeadersRenderer;\n}(BaseRenderer);\n\nexport { ColumnHeadersRenderer as default };", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport BaseRenderer from \"./_base.mjs\";\nimport { addClass } from \"./../../../../helpers/dom/element.mjs\";\n/**\n * Colgroup renderer responsible for managing (inserting, tracking, rendering) COL elements.\n *\n *   <colgroup> (root node)\n *     \u251C <col>   \\\n *     \u251C <col>    \\\n *     \u251C <col>     - ColGroupRenderer\n *     \u251C <col>    /\n *     \u2514 <col>   /.\n *\n * @class {ColGroupRenderer}\n */\n\nvar ColGroupRenderer = /*#__PURE__*/function (_BaseRenderer) {\n  _inherits(ColGroupRenderer, _BaseRenderer);\n\n  var _super = _createSuper(ColGroupRenderer);\n\n  function ColGroupRenderer(rootNode) {\n    _classCallCheck(this, ColGroupRenderer);\n\n    return _super.call(this, null, rootNode); // NodePool is not implemented for this renderer yet\n  }\n  /**\n   * Adjusts the number of the rendered elements.\n   */\n\n\n  _createClass(ColGroupRenderer, [{\n    key: \"adjust\",\n    value: function adjust() {\n      var _this$table = this.table,\n          columnsToRender = _this$table.columnsToRender,\n          rowHeadersCount = _this$table.rowHeadersCount;\n      var allColumnsToRender = columnsToRender + rowHeadersCount;\n\n      while (this.renderedNodes < allColumnsToRender) {\n        this.rootNode.appendChild(this.table.rootDocument.createElement('col'));\n        this.renderedNodes += 1;\n      }\n\n      while (this.renderedNodes > allColumnsToRender) {\n        this.rootNode.removeChild(this.rootNode.lastChild);\n        this.renderedNodes -= 1;\n      }\n    }\n    /**\n     * Renders the col group elements.\n     */\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      this.adjust();\n      var _this$table2 = this.table,\n          columnsToRender = _this$table2.columnsToRender,\n          rowHeadersCount = _this$table2.rowHeadersCount; // Render column nodes for row headers\n\n      for (var visibleColumnIndex = 0; visibleColumnIndex < rowHeadersCount; visibleColumnIndex++) {\n        var sourceColumnIndex = this.table.renderedColumnToSource(visibleColumnIndex);\n        var width = this.table.columnUtils.getHeaderWidth(sourceColumnIndex);\n        this.rootNode.childNodes[visibleColumnIndex].style.width = \"\".concat(width, \"px\");\n      } // Render column nodes for cells\n\n\n      for (var _visibleColumnIndex = 0; _visibleColumnIndex < columnsToRender; _visibleColumnIndex++) {\n        var _sourceColumnIndex = this.table.renderedColumnToSource(_visibleColumnIndex);\n\n        var _width = this.table.columnUtils.getStretchedColumnWidth(_sourceColumnIndex);\n\n        this.rootNode.childNodes[_visibleColumnIndex + rowHeadersCount].style.width = \"\".concat(_width, \"px\");\n      }\n\n      var firstChild = this.rootNode.firstChild;\n\n      if (firstChild) {\n        addClass(firstChild, 'rowHeader');\n      }\n    }\n  }]);\n\n  return ColGroupRenderer;\n}(BaseRenderer);\n\nexport { ColGroupRenderer as default };", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nvar _templateObject;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { warn } from \"./../../../../helpers/console.mjs\";\nimport { toSingleLine } from \"./../../../../helpers/templateLiteralTag.mjs\";\nimport { OrderView } from \"./../utils/orderView/index.mjs\";\nimport BaseRenderer from \"./_base.mjs\";\nvar performanceWarningAppeared = false;\n/**\n * Rows renderer responsible for managing (inserting, tracking, rendering) TR elements belongs to TBODY.\n *\n *   <tbody> (root node)\n *     \u251C <tr>   \\\n *     \u251C <tr>    \\\n *     \u251C <tr>     - RowsRenderer\n *     \u251C <tr>    /\n *     \u2514 <tr>   /.\n *\n * @class {RowsRenderer}\n */\n\nvar RowsRenderer = /*#__PURE__*/function (_BaseRenderer) {\n  _inherits(RowsRenderer, _BaseRenderer);\n\n  var _super = _createSuper(RowsRenderer);\n\n  function RowsRenderer(rootNode) {\n    var _this;\n\n    _classCallCheck(this, RowsRenderer);\n\n    _this = _super.call(this, 'TR', rootNode);\n    /**\n     * Cache for OrderView classes connected to specified node.\n     *\n     * @type {WeakMap}\n     */\n\n    _this.orderView = new OrderView(rootNode, function (sourceRowIndex) {\n      return _this.nodesPool.obtain(sourceRowIndex);\n    }, _this.nodeType);\n    return _this;\n  }\n  /**\n   * Returns currently rendered node.\n   *\n   * @param {string} visualIndex Visual index of the rendered node (it always goeas from 0 to N).\n   * @returns {HTMLTableRowElement}\n   */\n\n\n  _createClass(RowsRenderer, [{\n    key: \"getRenderedNode\",\n    value: function getRenderedNode(visualIndex) {\n      return this.orderView.getNode(visualIndex);\n    }\n    /**\n     * Renders the cells.\n     */\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      var rowsToRender = this.table.rowsToRender;\n\n      if (!performanceWarningAppeared && rowsToRender > 1000) {\n        performanceWarningAppeared = true;\n        warn(toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"Performance tip: Handsontable rendered more than 1000 visible rows. Consider limiting \\n        the number of rendered rows by specifying the table height and/or turning off the \\\"renderAllRows\\\" option.\"], [\"Performance tip: Handsontable rendered more than 1000 visible rows. Consider limiting\\\\x20\\n        the number of rendered rows by specifying the table height and/or turning off the \\\"renderAllRows\\\" option.\"]))));\n      }\n\n      this.orderView.setSize(rowsToRender).setOffset(this.table.renderedRowToSource(0)).start();\n\n      for (var visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n        this.orderView.render();\n      }\n\n      this.orderView.end();\n    }\n  }]);\n\n  return RowsRenderer;\n}(BaseRenderer);\n\nexport { RowsRenderer as default };", "/* eslint-disable no-console */\n\n/* eslint-disable no-restricted-globals */\n\n/**\n * \"In Internet Explorer 9 (and 8), the console object is only exposed when the developer tools are opened\n * for a particular tab.\".\n *\n * Source: https://stackoverflow.com/a/5473193.\n */\nimport { isDefined } from \"./mixed.mjs\";\n/**\n * Logs message to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\n\nexport function log() {\n  if (isDefined(console)) {\n    var _console;\n\n    (_console = console).log.apply(_console, arguments);\n  }\n}\n/**\n * Logs warn to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\n\nexport function warn() {\n  if (isDefined(console)) {\n    var _console2;\n\n    (_console2 = console).warn.apply(_console2, arguments);\n  }\n}\n/**\n * Logs info to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\n\nexport function info() {\n  if (isDefined(console)) {\n    var _console3;\n\n    (_console3 = console).info.apply(_console3, arguments);\n  }\n}\n/**\n * Logs error to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\n\nexport function error() {\n  if (isDefined(console)) {\n    var _console4;\n\n    (_console4 = console).error.apply(_console4, arguments);\n  }\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { hasClass } from \"./../../../../helpers/dom/element.mjs\";\nimport { SharedOrderView } from \"./../utils/orderView/index.mjs\";\nimport BaseRenderer from \"./_base.mjs\";\n/**\n * Cell renderer responsible for managing (inserting, tracking, rendering) TD elements.\n *\n *   <tr> (root node)\n *     \u251C <th>   --- RowHeadersRenderer\n *     \u251C <td>   \\\n *     \u251C <td>    \\\n *     \u251C <td>     - CellsRenderer\n *     \u251C <td>    /\n *     \u2514 <td>   /.\n *\n * @class {CellsRenderer}\n */\n\nvar CellsRenderer = /*#__PURE__*/function (_BaseRenderer) {\n  _inherits(CellsRenderer, _BaseRenderer);\n\n  var _super = _createSuper(CellsRenderer);\n\n  function CellsRenderer() {\n    var _this;\n\n    _classCallCheck(this, CellsRenderer);\n\n    _this = _super.call(this, 'TD');\n    /**\n     * Cache for OrderView classes connected to specified node.\n     *\n     * @type {WeakMap}\n     */\n\n    _this.orderViews = new WeakMap();\n    /**\n     * Row index which specifies the row position of the processed cell.\n     *\n     * @type {number}\n     */\n\n    _this.sourceRowIndex = 0;\n    return _this;\n  }\n  /**\n   * Obtains the instance of the SharedOrderView class which is responsible for rendering the nodes to the root node.\n   *\n   * @param {HTMLTableRowElement} rootNode The TR element, which is root element for cells (TD).\n   * @returns {SharedOrderView}\n   */\n\n\n  _createClass(CellsRenderer, [{\n    key: \"obtainOrderView\",\n    value: function obtainOrderView(rootNode) {\n      var _this2 = this;\n\n      var orderView;\n\n      if (this.orderViews.has(rootNode)) {\n        orderView = this.orderViews.get(rootNode);\n      } else {\n        orderView = new SharedOrderView(rootNode, function (sourceColumnIndex) {\n          return _this2.nodesPool.obtain(_this2.sourceRowIndex, sourceColumnIndex);\n        }, this.nodeType);\n        this.orderViews.set(rootNode, orderView);\n      }\n\n      return orderView;\n    }\n    /**\n     * Renders the cells.\n     */\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$table = this.table,\n          rowsToRender = _this$table.rowsToRender,\n          columnsToRender = _this$table.columnsToRender,\n          rows = _this$table.rows,\n          rowHeaders = _this$table.rowHeaders;\n\n      for (var visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n        var sourceRowIndex = this.table.renderedRowToSource(visibleRowIndex);\n        var TR = rows.getRenderedNode(visibleRowIndex);\n        this.sourceRowIndex = sourceRowIndex;\n        var orderView = this.obtainOrderView(TR);\n        var rowHeadersView = rowHeaders.obtainOrderView(TR); // @TODO(perf-tip): For cells other than \"visual 0\" generating diff leads/commands can be skipped. New order view\n        // shoule share state between next orderViews.\n\n        orderView.prependView(rowHeadersView).setSize(columnsToRender).setOffset(this.table.renderedColumnToSource(0)).start();\n\n        for (var visibleColumnIndex = 0; visibleColumnIndex < columnsToRender; visibleColumnIndex++) {\n          orderView.render();\n          var TD = orderView.getCurrentNode();\n          var sourceColumnIndex = this.table.renderedColumnToSource(visibleColumnIndex);\n\n          if (!hasClass(TD, 'hide')) {\n            // Workaround for hidden columns plugin\n            TD.className = '';\n          }\n\n          TD.removeAttribute('style');\n          this.table.cellRenderer(sourceRowIndex, sourceColumnIndex, TD);\n        }\n\n        orderView.end();\n      }\n    }\n  }]);\n\n  return CellsRenderer;\n}(BaseRenderer);\n\nexport { CellsRenderer as default };", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/**\n * TableRenderer class collects all renderers and properties necessary for table creation. It's\n * responsible for adjusting and rendering each renderer.\n *\n * Below is a diagram of the renderers together with an indication of what they are responisble for.\n *   <table>\n *     <colgroup>  \\ (root node)\n *       <col>      \\\n *       <col>       \\___ ColGroupRenderer\n *       <col>       /\n *       <col>      /\n *     </colgroup> /\n *     <thead>     \\ (root node)\n *       <tr>       \\\n *         <th>      \\\n *         <th>       \\____ ColumnHeadersRenderer\n *         <th>       /\n *         <th>      /\n *       </tr>      /\n *     </thead>    /\n *     <tbody>   \u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\u00AF\\ (root node)\n *       <tr>   (root node)          \\\n *         <th>  --- RowHeadersRenderer\n *         <td>  \\                     \\\n *         <td>   -- CellsRenderer      \\\n *         <td>  /                       \\\n *       </tr>                            \\\n *       <tr>   (root node)                \\\n *         <th>  --- RowHeadersRenderer     \\\n *         <td>  \\                           \\___ RowsRenderer\n *         <td>   -- CellsRenderer           /\n *         <td>  /                          /\n *       </tr>                             /\n *       <tr>   (root node)               /\n *         <th>  --- RowHeadersRenderer  /\n *         <td>  \\                      /\n *         <td>   -- CellsRenderer     /\n *         <td>  /                    /\n *       </tr>                       /\n *     </tbody>  ___________________/\n *   </table>.\n *\n * @class {RowsRenderer}\n */\nvar TableRenderer = /*#__PURE__*/function () {\n  function TableRenderer(rootNode) {\n    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n        cellRenderer = _ref.cellRenderer;\n\n    _classCallCheck(this, TableRenderer);\n\n    /**\n     * Table element which will be used to render the children element.\n     *\n     * @type {HTMLTableElement}\n     */\n    this.rootNode = rootNode;\n    /**\n     * Document owner of the root node.\n     *\n     * @type {HTMLDocument}\n     */\n\n    this.rootDocument = this.rootNode.ownerDocument;\n    /**\n     * Renderer class responsible for rendering row headers.\n     *\n     * @type {RowsRenderer}\n     */\n\n    this.rowHeaders = null;\n    /**\n     * Renderer class responsible for rendering column headers.\n     *\n     * @type {ColumnHeadersRenderer}\n     */\n\n    this.columnHeaders = null;\n    /**\n     * Renderer class responsible for rendering col in colgroup.\n     *\n     * @type {ColGroupRenderer}\n     */\n\n    this.colGroup = null;\n    /**\n     * Renderer class responsible for rendering rows in tbody.\n     *\n     * @type {RowsRenderer}\n     */\n\n    this.rows = null;\n    /**\n     * Renderer class responsible for rendering cells.\n     *\n     * @type {CellsRenderer}\n     */\n\n    this.cells = null;\n    /**\n     * Row filter which contains all necessary information about row index transformation.\n     *\n     * @type {RowFilter}\n     */\n\n    this.rowFilter = null;\n    /**\n     * Column filter which contains all necessary information about column index transformation.\n     *\n     * @type {ColumnFilter}\n     */\n\n    this.columnFilter = null;\n    /**\n     * Row utils class which contains all necessary information about sizes of the rows.\n     *\n     * @type {RowUtils}\n     */\n\n    this.rowUtils = null;\n    /**\n     * Column utils class which contains all necessary information about sizes of the columns.\n     *\n     * @type {ColumnUtils}\n     */\n\n    this.columnUtils = null;\n    /**\n     * Indicates how much rows should be rendered to fill whole table viewport.\n     *\n     * @type {number}\n     */\n\n    this.rowsToRender = 0;\n    /**\n     * Indicates how much columns should be rendered to fill whole table viewport.\n     *\n     * @type {number}\n     */\n\n    this.columnsToRender = 0;\n    /**\n     * An array of functions to be used as a content factory to row headers.\n     *\n     * @type {Function[]}\n     */\n\n    this.rowHeaderFunctions = [];\n    /**\n     * Count of the function used to render row headers.\n     *\n     * @type {number}\n     */\n\n    this.rowHeadersCount = 0;\n    /**\n     * An array of functions to be used as a content factory to column headers.\n     *\n     * @type {Function[]}\n     */\n\n    this.columnHeaderFunctions = [];\n    /**\n     * Count of the function used to render column headers.\n     *\n     * @type {number}\n     */\n\n    this.columnHeadersCount = 0;\n    /**\n     * Cell renderer used to render cells content.\n     *\n     * @type {Function}\n     */\n\n    this.cellRenderer = cellRenderer;\n  }\n  /**\n   * Set row and column util classes.\n   *\n   * @param {RowUtils} rowUtils RowUtils instance which provides useful methods related to row sizes.\n   * @param {ColumnUtils} columnUtils ColumnUtils instance which provides useful methods related to row sizes.\n   */\n\n\n  _createClass(TableRenderer, [{\n    key: \"setAxisUtils\",\n    value: function setAxisUtils(rowUtils, columnUtils) {\n      this.rowUtils = rowUtils;\n      this.columnUtils = columnUtils;\n    }\n    /**\n     * Sets viewport size of the table.\n     *\n     * @param {number} rowsCount An amount of rows to render.\n     * @param {number} columnsCount An amount of columns to render.\n     */\n\n  }, {\n    key: \"setViewportSize\",\n    value: function setViewportSize(rowsCount, columnsCount) {\n      this.rowsToRender = rowsCount;\n      this.columnsToRender = columnsCount;\n    }\n    /**\n     * Sets row and column filter instances.\n     *\n     * @param {RowFilter} rowFilter Row filter instance which contains all necessary information about row index transformation.\n     * @param {ColumnFilter} columnFilter Cokumn filter instance  which contains all necessary information about row index transformation.\n     */\n\n  }, {\n    key: \"setFilters\",\n    value: function setFilters(rowFilter, columnFilter) {\n      this.rowFilter = rowFilter;\n      this.columnFilter = columnFilter;\n    }\n    /**\n     * Sets row and column header functions.\n     *\n     * @param {Function[]} rowHeaders Row header functions. Factories for creating content for row headers.\n     * @param {Function[]} columnHeaders Column header functions. Factories for creating content for column headers.\n     */\n\n  }, {\n    key: \"setHeaderContentRenderers\",\n    value: function setHeaderContentRenderers(rowHeaders, columnHeaders) {\n      this.rowHeaderFunctions = rowHeaders;\n      this.rowHeadersCount = rowHeaders.length;\n      this.columnHeaderFunctions = columnHeaders;\n      this.columnHeadersCount = columnHeaders.length;\n    }\n    /**\n     * Sets table renderers.\n     *\n     * @param {renderers} renderers The renderer units.\n     * @param {RowHeadersRenderer} renderers.rowHeaders Row headers renderer.\n     * @param {ColumnHeadersRenderer} renderers.columnHeaders Column headers renderer.\n     * @param {ColGroupRenderer} renderers.colGroup Col group renderer.\n     * @param {RowsRenderer} renderers.rows Rows renderer.\n     * @param {CellsRenderer} renderers.cells Cells renderer.\n     */\n\n  }, {\n    key: \"setRenderers\",\n    value: function setRenderers() {\n      var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          rowHeaders = _ref2.rowHeaders,\n          columnHeaders = _ref2.columnHeaders,\n          colGroup = _ref2.colGroup,\n          rows = _ref2.rows,\n          cells = _ref2.cells;\n\n      rowHeaders.setTable(this);\n      columnHeaders.setTable(this);\n      colGroup.setTable(this);\n      rows.setTable(this);\n      cells.setTable(this);\n      this.rowHeaders = rowHeaders;\n      this.columnHeaders = columnHeaders;\n      this.colGroup = colGroup;\n      this.rows = rows;\n      this.cells = cells;\n    }\n    /**\n     * Transforms visual/rendered row index to source index.\n     *\n     * @param {number} rowIndex Rendered index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"renderedRowToSource\",\n    value: function renderedRowToSource(rowIndex) {\n      return this.rowFilter.renderedToSource(rowIndex);\n    }\n    /**\n     * Transforms visual/rendered column index to source index.\n     *\n     * @param {number} columnIndex Rendered index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"renderedColumnToSource\",\n    value: function renderedColumnToSource(columnIndex) {\n      return this.columnFilter.renderedToSource(columnIndex);\n    }\n    /**\n     * Renders the table.\n     */\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      this.colGroup.adjust();\n      this.columnHeaders.adjust();\n      this.rows.adjust();\n      this.rowHeaders.adjust();\n      this.columnHeaders.render();\n      this.rows.render();\n      this.rowHeaders.render();\n      this.cells.render(); // After the cells are rendered calculate columns width (or columns stretch width) to prepare proper values\n      // for colGroup renderer (which renders COL elements).\n\n      this.columnUtils.calculateWidths();\n      this.colGroup.render();\n      var rowsToRender = this.rowsToRender,\n          rows = this.rows; // Fix for multi-line content and for supporting `rowHeights` option.\n\n      for (var visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n        var TR = rows.getRenderedNode(visibleRowIndex);\n\n        if (TR.firstChild) {\n          var sourceRowIndex = this.renderedRowToSource(visibleRowIndex);\n          var rowHeight = this.rowUtils.getHeight(sourceRowIndex);\n\n          if (rowHeight) {\n            // Decrease height. 1 pixel will be \"replaced\" by 1px border top\n            TR.firstChild.style.height = \"\".concat(rowHeight - 1, \"px\");\n          } else {\n            TR.firstChild.style.height = '';\n          }\n        }\n      }\n    }\n  }]);\n\n  return TableRenderer;\n}();\n\nexport { TableRenderer as default };", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport RowHeadersRenderer from \"./rowHeaders.mjs\";\nimport ColumnHeadersRenderer from \"./columnHeaders.mjs\";\nimport ColGroupRenderer from \"./colGroup.mjs\";\nimport RowsRenderer from \"./rows.mjs\";\nimport CellsRenderer from \"./cells.mjs\";\nimport TableRenderer from \"./table.mjs\";\n/**\n * Content renderer.\n *\n * @class Renderer\n */\n\nvar Renderer = /*#__PURE__*/function () {\n  function Renderer() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        TABLE = _ref.TABLE,\n        THEAD = _ref.THEAD,\n        COLGROUP = _ref.COLGROUP,\n        TBODY = _ref.TBODY,\n        rowUtils = _ref.rowUtils,\n        columnUtils = _ref.columnUtils,\n        cellRenderer = _ref.cellRenderer;\n\n    _classCallCheck(this, Renderer);\n\n    /**\n     * General renderer class used to render Walkontable content on screen.\n     *\n     * @type {TableRenderer}\n     */\n    this.renderer = new TableRenderer(TABLE, {\n      cellRenderer: cellRenderer\n    });\n    this.renderer.setRenderers({\n      rowHeaders: new RowHeadersRenderer(),\n      columnHeaders: new ColumnHeadersRenderer(THEAD),\n      colGroup: new ColGroupRenderer(COLGROUP),\n      rows: new RowsRenderer(TBODY),\n      cells: new CellsRenderer()\n    });\n    this.renderer.setAxisUtils(rowUtils, columnUtils);\n  }\n  /**\n   * Sets filter calculators for newly calculated row and column position. The filters are used to transform visual\n   * indexes (0 to N) to source indexes provided by Handsontable.\n   *\n   * @param {RowFilter} rowFilter The row filter instance.\n   * @param {ColumnFilter} columnFilter The column filter instance.\n   * @returns {Renderer}\n   */\n\n\n  _createClass(Renderer, [{\n    key: \"setFilters\",\n    value: function setFilters(rowFilter, columnFilter) {\n      this.renderer.setFilters(rowFilter, columnFilter);\n      return this;\n    }\n    /**\n     * Sets the viewport size of the rendered table.\n     *\n     * @param {number} rowsCount An amount of rows to render.\n     * @param {number} columnsCount An amount of columns to render.\n     * @returns {Renderer}\n     */\n\n  }, {\n    key: \"setViewportSize\",\n    value: function setViewportSize(rowsCount, columnsCount) {\n      this.renderer.setViewportSize(rowsCount, columnsCount);\n      return this;\n    }\n    /**\n     * Sets row and column header functions.\n     *\n     * @param {Function[]} rowHeaders Row header functions. Factories for creating content for row headers.\n     * @param {Function[]} columnHeaders Column header functions. Factories for creating content for column headers.\n     * @returns {Renderer}\n     */\n\n  }, {\n    key: \"setHeaderContentRenderers\",\n    value: function setHeaderContentRenderers(rowHeaders, columnHeaders) {\n      this.renderer.setHeaderContentRenderers(rowHeaders, columnHeaders);\n      return this;\n    }\n    /**\n     * Adjusts the table (preparing for render).\n     */\n\n  }, {\n    key: \"adjust\",\n    value: function adjust() {\n      this.renderer.adjust();\n    }\n    /**\n     * Renders the table.\n     */\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      this.renderer.render();\n    }\n  }]);\n\n  return Renderer;\n}();\n\nexport { RowHeadersRenderer, ColumnHeadersRenderer, ColGroupRenderer, RowsRenderer, CellsRenderer, TableRenderer, Renderer };", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { getScrollbarWidth } from \"./../../../../helpers/dom/element.mjs\";\n/**\n * Column utils class contains all necessary information about sizes of the columns.\n *\n * @class {ColumnUtils}\n */\n\nvar ColumnUtils = /*#__PURE__*/function () {\n  function ColumnUtils(wot) {\n    _classCallCheck(this, ColumnUtils);\n\n    this.wot = wot;\n    this.headerWidths = new Map();\n  }\n  /**\n   * Returns column width based on passed source index.\n   *\n   * @param {number} sourceIndex Column source index.\n   * @returns {number}\n   */\n\n\n  _createClass(ColumnUtils, [{\n    key: \"getWidth\",\n    value: function getWidth(sourceIndex) {\n      var width = this.wot.wtSettings.settings.columnWidth;\n\n      if (typeof width === 'function') {\n        width = width(sourceIndex);\n      } else if (_typeof(width) === 'object') {\n        width = width[sourceIndex];\n      }\n\n      return width || this.wot.wtSettings.settings.defaultColumnWidth;\n    }\n    /**\n     * Returns stretched column width based on passed source index.\n     *\n     * @param {number} sourceIndex Column source index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getStretchedColumnWidth\",\n    value: function getStretchedColumnWidth(sourceIndex) {\n      var columnWidth = this.getWidth(sourceIndex);\n      var calculator = this.wot.wtViewport.columnsRenderCalculator;\n      var width = columnWidth !== null && columnWidth !== void 0 ? columnWidth : this.wot.wtSettings.settings.defaultColumnWidth;\n\n      if (calculator) {\n        var stretchedWidth = calculator.getStretchedColumnWidth(sourceIndex, width);\n\n        if (stretchedWidth) {\n          width = stretchedWidth;\n        }\n      }\n\n      return width;\n    }\n    /**\n     * Returns column header height based on passed header level.\n     *\n     * @param {number} level Column header level.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getHeaderHeight\",\n    value: function getHeaderHeight(level) {\n      var height = this.wot.wtSettings.settings.defaultRowHeight;\n      var oversizedHeight = this.wot.wtViewport.oversizedColumnHeaders[level];\n\n      if (oversizedHeight !== void 0) {\n        height = height ? Math.max(height, oversizedHeight) : oversizedHeight;\n      }\n\n      return height;\n    }\n    /**\n     * Returns column header width based on passed source index.\n     *\n     * @param {number} sourceIndex Column source index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getHeaderWidth\",\n    value: function getHeaderWidth(sourceIndex) {\n      return this.headerWidths.get(this.wot.wtTable.columnFilter.sourceToRendered(sourceIndex));\n    }\n    /**\n     * Calculates column header widths that can be retrieved from the cache.\n     */\n\n  }, {\n    key: \"calculateWidths\",\n    value: function calculateWidths() {\n      var wot = this.wot;\n      var wtTable = wot.wtTable,\n          wtViewport = wot.wtViewport,\n          cloneSource = wot.cloneSource;\n      var mainHolder = cloneSource ? cloneSource.wtTable.holder : wtTable.holder;\n      var scrollbarCompensation = mainHolder.offsetHeight < mainHolder.scrollHeight ? getScrollbarWidth() : 0;\n      var rowHeaderWidthSetting = wot.getSetting('rowHeaderWidth');\n      wtViewport.columnsRenderCalculator.refreshStretching(wtViewport.getViewportWidth() - scrollbarCompensation);\n      rowHeaderWidthSetting = wot.getSetting('onModifyRowHeaderWidth', rowHeaderWidthSetting);\n\n      if (rowHeaderWidthSetting !== null && rowHeaderWidthSetting !== void 0) {\n        var rowHeadersCount = wot.getSetting('rowHeaders').length;\n        var defaultColumnWidth = wot.getSetting('defaultColumnWidth');\n\n        for (var visibleColumnIndex = 0; visibleColumnIndex < rowHeadersCount; visibleColumnIndex++) {\n          var width = Array.isArray(rowHeaderWidthSetting) ? rowHeaderWidthSetting[visibleColumnIndex] : rowHeaderWidthSetting;\n          width = width === null || width === void 0 ? defaultColumnWidth : width;\n          this.headerWidths.set(visibleColumnIndex, width);\n        }\n      }\n    }\n  }]);\n\n  return ColumnUtils;\n}();\n\nexport { ColumnUtils as default };", "'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n  return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/**\n * Row utils class contains all necessary information about sizes of the rows.\n *\n * @class {RowUtils}\n */\nvar RowUtils = /*#__PURE__*/function () {\n  function RowUtils(wot) {\n    _classCallCheck(this, RowUtils);\n\n    this.wot = wot;\n  }\n  /**\n   * Returns row height based on passed source index.\n   *\n   * @param {number} sourceIndex Row source index.\n   * @returns {number}\n   */\n\n\n  _createClass(RowUtils, [{\n    key: \"getHeight\",\n    value: function getHeight(sourceIndex) {\n      var height = this.wot.wtSettings.settings.rowHeight(sourceIndex);\n      var oversizedHeight = this.wot.wtViewport.oversizedRows[sourceIndex];\n\n      if (oversizedHeight !== void 0) {\n        height = height === void 0 ? oversizedHeight : Math.max(height, oversizedHeight);\n      }\n\n      return height;\n    }\n  }]);\n\n  return RowUtils;\n}();\n\nexport { RowUtils as default };", "export var CLONE_TOP = 'top';\nexport var CLONE_BOTTOM = 'bottom';\nexport var CLONE_LEFT = 'left';\nexport var CLONE_TOP_LEFT_CORNER = 'top_left_corner';\nexport var CLONE_BOTTOM_LEFT_CORNER = 'bottom_left_corner';\nexport var CLONE_TYPES = [CLONE_TOP, CLONE_BOTTOM, CLONE_LEFT, CLONE_TOP_LEFT_CORNER, CLONE_BOTTOM_LEFT_CORNER];", "import \"core-js/modules/es.array.index-of.js\";\nimport { CLONE_TYPES } from \"./constants.mjs\";\nvar registeredOverlays = {};\n/**\n * Register overlay class. If the Overlay under the same name is already registered\n * the class won't be registered.\n *\n * @param {Overlay} overlayClass Overlay class extended from base overlay class {@link Overlay}.\n */\n\nexport function registerOverlayOnce(overlayClass) {\n  var overlayName = overlayClass.OVERLAY_NAME;\n\n  if (CLONE_TYPES.indexOf(overlayName) === -1) {\n    throw new Error(\"Unsupported overlay (\".concat(overlayName, \").\"));\n  }\n\n  if (!hasOverlay(overlayName)) {\n    registeredOverlays[overlayName] = overlayClass;\n  }\n}\n/**\n * Create new instance of overlay type.\n *\n * @param {string} type Overlay type, one of the CLONE_TYPES value.\n * @param {Walkontable} wot The Walkontable instance.\n * @returns {Overlay}\n */\n\nexport function createOverlay(type, wot) {\n  return new registeredOverlays[type](wot);\n}\n/**\n * Check if specified overlay was registered.\n *\n * @param {string} type Overlay type, one of the CLONE_TYPES value.\n * @returns {boolean}\n */\n\nexport function hasOverlay(type) {\n  return registeredOverlays[type] !== void 0;\n}\n/**\n * Checks if overlay object (`overlay`) is instance of overlay type (`type`).\n *\n * @param {Overlay} overlay Overlay object.\n * @param {string} type Overlay type, one of the CLONE_TYPES value.\n * @returns {boolean}\n */\n\nexport function isOverlayTypeOf(overlay, type) {\n  if (!overlay || !registeredOverlays[type]) {\n    return false;\n  }\n\n  return overlay instanceof registeredOverlays[type];\n}", "import { defineGetter } from \"../../../../../helpers/object.mjs\";\nvar MIXIN_NAME = 'calculatedRows';\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to rows.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use virtual rendering in the vertical axis.\n *\n * @type {object}\n */\n\nvar calculatedRows = {\n  /**\n   * Get the source index of the first rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getFirstRenderedRow: function getFirstRenderedRow() {\n    var startRow = this.wot.wtViewport.rowsRenderCalculator.startRow;\n\n    if (startRow === null) {\n      return -1;\n    }\n\n    return startRow;\n  },\n\n  /**\n   * Get the source index of the first row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getFirstVisibleRow: function getFirstVisibleRow() {\n    var startRow = this.wot.wtViewport.rowsVisibleCalculator.startRow;\n\n    if (startRow === null) {\n      return -1;\n    }\n\n    return startRow;\n  },\n\n  /**\n   * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getLastRenderedRow: function getLastRenderedRow() {\n    var endRow = this.wot.wtViewport.rowsRenderCalculator.endRow;\n\n    if (endRow === null) {\n      return -1;\n    }\n\n    return endRow;\n  },\n\n  /**\n   * Get the source index of the last row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getLastVisibleRow: function getLastVisibleRow() {\n    var endRow = this.wot.wtViewport.rowsVisibleCalculator.endRow;\n\n    if (endRow === null) {\n      return -1;\n    }\n\n    return endRow;\n  },\n\n  /**\n   * Get the number of rendered rows.\n   *\n   * @returns {number}\n   */\n  getRenderedRowsCount: function getRenderedRowsCount() {\n    return this.wot.wtViewport.rowsRenderCalculator.count;\n  },\n\n  /**\n   * Get the number of fully visible rows in the viewport.\n   *\n   * @returns {number}\n   */\n  getVisibleRowsCount: function getVisibleRowsCount() {\n    return this.wot.wtViewport.rowsVisibleCalculator.count;\n  }\n};\ndefineGetter(calculatedRows, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false\n});\nexport default calculatedRows;", "import { defineGetter } from \"../../../../../helpers/object.mjs\";\nvar MIXIN_NAME = 'calculatedColumns';\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to columns.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use virtual rendering in the horizontal axis.\n *\n * @type {object}\n */\n\nvar calculatedColumns = {\n  /**\n   * Get the source index of the first rendered column. If no columns are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getFirstRenderedColumn: function getFirstRenderedColumn() {\n    var startColumn = this.wot.wtViewport.columnsRenderCalculator.startColumn;\n\n    if (startColumn === null) {\n      return -1;\n    }\n\n    return startColumn;\n  },\n\n  /**\n   * Get the source index of the first column fully visible in the viewport. If no columns are fully visible, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getFirstVisibleColumn: function getFirstVisibleColumn() {\n    var startColumn = this.wot.wtViewport.columnsVisibleCalculator.startColumn;\n\n    if (startColumn === null) {\n      return -1;\n    }\n\n    return startColumn;\n  },\n\n  /**\n   * Get the source index of the last rendered column. If no columns are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getLastRenderedColumn: function getLastRenderedColumn() {\n    var endColumn = this.wot.wtViewport.columnsRenderCalculator.endColumn;\n\n    if (endColumn === null) {\n      return -1;\n    }\n\n    return endColumn;\n  },\n\n  /**\n   * Get the source index of the last column fully visible in the viewport. If no columns are fully visible, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getLastVisibleColumn: function getLastVisibleColumn() {\n    var endColumn = this.wot.wtViewport.columnsVisibleCalculator.endColumn;\n\n    if (endColumn === null) {\n      return -1;\n    }\n\n    return endColumn;\n  },\n\n  /**\n   * Get the number of rendered columns.\n   *\n   * @returns {number}\n   */\n  getRenderedColumnsCount: function getRenderedColumnsCount() {\n    return this.wot.wtViewport.columnsRenderCalculator.count;\n  },\n\n  /**\n   * Get the number of fully visible columns in the viewport.\n   *\n   * @returns {number}\n   */\n  getVisibleColumnsCount: function getVisibleColumnsCount() {\n    return this.wot.wtViewport.columnsVisibleCalculator.count;\n  }\n};\ndefineGetter(calculatedColumns, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false\n});\nexport default calculatedColumns;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { getScrollbarWidth, outerHeight, outerWidth, resetCssTransform } from \"./../../../../helpers/dom/element.mjs\";\nimport BottomLeftCornerOverlayTable from \"./../table/bottomLeftCorner.mjs\";\nimport { Overlay } from \"./_base.mjs\";\nimport { CLONE_BOTTOM_LEFT_CORNER } from \"./constants.mjs\";\n/**\n * @class TopLeftCornerOverlay\n */\n\nexport var BottomLeftCornerOverlay = /*#__PURE__*/function (_Overlay) {\n  _inherits(BottomLeftCornerOverlay, _Overlay);\n\n  var _super = _createSuper(BottomLeftCornerOverlay);\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance.\n   */\n  function BottomLeftCornerOverlay(wotInstance) {\n    var _this;\n\n    _classCallCheck(this, BottomLeftCornerOverlay);\n\n    _this = _super.call(this, wotInstance);\n    _this.clone = _this.makeClone(CLONE_BOTTOM_LEFT_CORNER);\n    return _this;\n  }\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {Table}\n   */\n\n\n  _createClass(BottomLeftCornerOverlay, [{\n    key: \"createTable\",\n    value: function createTable() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _construct(BottomLeftCornerOverlayTable, args);\n    }\n    /**\n     * Checks if overlay should be fully rendered.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"shouldBeRendered\",\n    value: function shouldBeRendered() {\n      var wot = this.wot;\n      return wot.getSetting('shouldRenderBottomOverlay') && wot.getSetting('shouldRenderLeftOverlay');\n    }\n    /**\n     * Updates the corner overlay position.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"resetFixedPosition\",\n    value: function resetFixedPosition() {\n      var wot = this.wot;\n      this.updateTrimmingContainer();\n\n      if (!wot.wtTable.holder.parentNode) {\n        // removed from DOM\n        return;\n      }\n\n      var overlayRoot = this.clone.wtTable.holder.parentNode;\n      overlayRoot.style.top = '';\n\n      if (this.trimmingContainer === wot.rootWindow) {\n        var _this$wot = this.wot,\n            rootDocument = _this$wot.rootDocument,\n            wtTable = _this$wot.wtTable;\n        var hiderRect = wtTable.hider.getBoundingClientRect();\n        var bottom = Math.ceil(hiderRect.bottom);\n        var left = Math.ceil(hiderRect.left);\n        var bodyHeight = rootDocument.documentElement.clientHeight;\n        var finalLeft;\n        var finalBottom;\n\n        if (left < 0) {\n          finalLeft = -left;\n        } else {\n          finalLeft = 0;\n        }\n\n        if (bottom > bodyHeight) {\n          finalBottom = bottom - bodyHeight;\n        } else {\n          finalBottom = 0;\n        }\n\n        finalBottom += 'px';\n        finalLeft += 'px';\n        overlayRoot.style.left = finalLeft;\n        overlayRoot.style.bottom = finalBottom;\n      } else {\n        resetCssTransform(overlayRoot);\n        this.repositionOverlay();\n      }\n\n      var tableHeight = outerHeight(this.clone.wtTable.TABLE);\n      var tableWidth = outerWidth(this.clone.wtTable.TABLE);\n\n      if (!this.wot.wtTable.hasDefinedSize()) {\n        tableHeight = 0;\n      }\n\n      overlayRoot.style.height = \"\".concat(tableHeight, \"px\");\n      overlayRoot.style.width = \"\".concat(tableWidth, \"px\");\n      return false;\n    }\n    /**\n     * Reposition the overlay.\n     */\n\n  }, {\n    key: \"repositionOverlay\",\n    value: function repositionOverlay() {\n      var _this$wot2 = this.wot,\n          wtTable = _this$wot2.wtTable,\n          rootDocument = _this$wot2.rootDocument;\n      var cloneRoot = this.clone.wtTable.holder.parentNode;\n      var scrollbarWidth = getScrollbarWidth(rootDocument);\n\n      if (wtTable.holder.clientHeight === wtTable.holder.offsetHeight) {\n        scrollbarWidth = 0;\n      }\n\n      cloneRoot.style.bottom = \"\".concat(scrollbarWidth, \"px\");\n    }\n  }], [{\n    key: \"OVERLAY_NAME\",\n    get: function get() {\n      return CLONE_BOTTOM_LEFT_CORNER;\n    }\n  }]);\n\n  return BottomLeftCornerOverlay;\n}(Overlay);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport Table from \"../table.mjs\";\nimport stickyRowsBottom from \"./mixin/stickyRowsBottom.mjs\";\nimport stickyColumnsLeft from \"./mixin/stickyColumnsLeft.mjs\";\nimport { mixin } from \"./../../../../helpers/object.mjs\";\n/**\n * Subclass of `Table` that provides the helper methods relevant to BottomLeftCornerOverlay, implemented through mixins.\n */\n\nvar BottomLeftCornerOverlayTable = /*#__PURE__*/function (_Table) {\n  _inherits(BottomLeftCornerOverlayTable, _Table);\n\n  var _super = _createSuper(BottomLeftCornerOverlayTable);\n\n  function BottomLeftCornerOverlayTable() {\n    _classCallCheck(this, BottomLeftCornerOverlayTable);\n\n    return _super.apply(this, arguments);\n  }\n\n  return _createClass(BottomLeftCornerOverlayTable);\n}(Table);\n\nmixin(BottomLeftCornerOverlayTable, stickyRowsBottom);\nmixin(BottomLeftCornerOverlayTable, stickyColumnsLeft);\nexport default BottomLeftCornerOverlayTable;", "import { defineGetter } from \"../../../../../helpers/object.mjs\";\nvar MIXIN_NAME = 'stickyRowsBottom';\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to rows.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use sticky rendering of the bottom rows in the vertical axis.\n *\n * @type {object}\n */\n\nvar stickyRowsBottom = {\n  /**\n   * Get the source index of the first rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getFirstRenderedRow: function getFirstRenderedRow() {\n    var totalRows = this.wot.getSetting('totalRows');\n    var fixedRowsBottom = this.wot.getSetting('fixedRowsBottom');\n    var index = totalRows - fixedRowsBottom;\n\n    if (totalRows === 0 || fixedRowsBottom === 0) {\n      return -1;\n    }\n\n    if (index < 0) {\n      return 0;\n    }\n\n    return index;\n  },\n\n  /**\n   * Get the source index of the first row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   */\n  getFirstVisibleRow: function getFirstVisibleRow() {\n    return this.getFirstRenderedRow();\n  },\n\n  /**\n   * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getLastRenderedRow: function getLastRenderedRow() {\n    return this.wot.getSetting('totalRows') - 1;\n  },\n\n  /**\n   * Get the source index of the last row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   */\n  getLastVisibleRow: function getLastVisibleRow() {\n    return this.getLastRenderedRow();\n  },\n\n  /**\n   * Get the number of rendered rows.\n   *\n   * @returns {number}\n   */\n  getRenderedRowsCount: function getRenderedRowsCount() {\n    var totalRows = this.wot.getSetting('totalRows');\n    return Math.min(this.wot.getSetting('fixedRowsBottom'), totalRows);\n  },\n\n  /**\n   * Get the number of fully visible rows in the viewport.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   */\n  getVisibleRowsCount: function getVisibleRowsCount() {\n    return this.getRenderedRowsCount();\n  }\n};\ndefineGetter(stickyRowsBottom, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false\n});\nexport default stickyRowsBottom;", "import { defineGetter } from \"../../../../../helpers/object.mjs\";\nvar MIXIN_NAME = 'stickyColumnsLeft';\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to columns.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use sticky rendering of the first columns in the horizontal axis.\n *\n * @type {object}\n */\n\nvar stickyColumnsLeft = {\n  /**\n   * Get the source index of the first rendered column. If no columns are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getFirstRenderedColumn: function getFirstRenderedColumn() {\n    var totalColumns = this.wot.getSetting('totalColumns');\n\n    if (totalColumns === 0) {\n      return -1;\n    }\n\n    return 0;\n  },\n\n  /**\n   * Get the source index of the first column fully visible in the viewport. If no columns are fully visible, returns an error code: -1.\n   * Assumes that all rendered columns are fully visible.\n   *\n   * @returns {number}\n   */\n  getFirstVisibleColumn: function getFirstVisibleColumn() {\n    return this.getFirstRenderedColumn();\n  },\n\n  /**\n   * Get the source index of the last rendered column. If no columns are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getLastRenderedColumn: function getLastRenderedColumn() {\n    return this.getRenderedColumnsCount() - 1;\n  },\n\n  /**\n   * Get the source index of the last column fully visible in the viewport. If no columns are fully visible, returns an error code: -1.\n   * Assumes that all rendered columns are fully visible.\n   *\n   * @returns {number}\n   */\n  getLastVisibleColumn: function getLastVisibleColumn() {\n    return this.getLastRenderedColumn();\n  },\n\n  /**\n   * Get the number of rendered columns.\n   *\n   * @returns {number}\n   */\n  getRenderedColumnsCount: function getRenderedColumnsCount() {\n    var totalColumns = this.wot.getSetting('totalColumns');\n    return Math.min(this.wot.getSetting('fixedColumnsLeft'), totalColumns);\n  },\n\n  /**\n   * Get the number of fully visible columns in the viewport.\n   * Assumes that all rendered columns are fully visible.\n   *\n   * @returns {number}\n   */\n  getVisibleColumnsCount: function getVisibleColumnsCount() {\n    return this.getRenderedColumnsCount();\n  }\n};\ndefineGetter(stickyColumnsLeft, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false\n});\nexport default stickyColumnsLeft;", "/**\n * Prevent other listeners of the same event from being called.\n *\n * @param {Event} event The mouse event object.\n */\nexport function stopImmediatePropagation(event) {\n  event.isImmediatePropagationEnabled = false;\n  event.cancelBubble = true;\n}\n/**\n * Check if event was stopped by `stopImmediatePropagation`.\n *\n * @param {Event} event The mouse event object.\n * @returns {boolean}\n */\n\nexport function isImmediatePropagationStopped(event) {\n  return event.isImmediatePropagationEnabled === false;\n}\n/**\n * Check if provided event was triggered by clicking the right mouse button.\n *\n * @param {Event} event The mouse event object.\n * @returns {boolean}\n */\n\nexport function isRightClick(event) {\n  return event.button === 2;\n}\n/**\n * Check if provided event was triggered by clicking the left mouse button.\n *\n * @param {Event} event The mouse event object.\n * @returns {boolean}\n */\n\nexport function isLeftClick(event) {\n  return event.button === 0;\n}", "import \"core-js/modules/es.array.splice.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { isPassiveEventSupported } from \"./helpers/feature.mjs\";\nimport { stopImmediatePropagation as _stopImmediatePropagation } from \"./helpers/dom/event.mjs\";\n/**\n * Counter which tracks unregistered listeners (useful for detecting memory leaks).\n *\n * @type {number}\n */\n\nvar listenersCounter = 0;\n/**\n * Event DOM manager for internal use in Handsontable.\n *\n * @class EventManager\n * @util\n */\n\nvar EventManager = /*#__PURE__*/function () {\n  /**\n   * @param {object} [context=null] An object to which event listeners will be stored.\n   * @private\n   */\n  function EventManager() {\n    var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n    _classCallCheck(this, EventManager);\n\n    this.context = context || this;\n\n    if (!this.context.eventListeners) {\n      this.context.eventListeners = []; // TODO perf It would be more performant if every instance of EventManager tracked its own listeners only\n    }\n  }\n  /**\n   * Register specified listener (`eventName`) to the element.\n   *\n   * @param {Element} element Target element.\n   * @param {string} eventName Event name.\n   * @param {Function} callback Function which will be called after event occur.\n   * @param {AddEventListenerOptions|boolean} [options] Listener options if object or useCapture if boolean.\n   * @returns {Function} Returns function which you can easily call to remove that event.\n   */\n\n\n  _createClass(EventManager, [{\n    key: \"addEventListener\",\n    value: function addEventListener(element, eventName, callback) {\n      var _this = this;\n\n      var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n      /**\n       * @param {Event} event The event object.\n       */\n      function callbackProxy(event) {\n        callback.call(this, extendEvent(event));\n      }\n\n      if (typeof options !== 'boolean' && !isPassiveEventSupported()) {\n        options = false;\n      }\n\n      this.context.eventListeners.push({\n        element: element,\n        event: eventName,\n        callback: callback,\n        callbackProxy: callbackProxy,\n        options: options,\n        eventManager: this\n      });\n      element.addEventListener(eventName, callbackProxy, options);\n      listenersCounter += 1;\n      return function () {\n        _this.removeEventListener(element, eventName, callback);\n      };\n    }\n    /**\n     * Remove the event listener previously registered.\n     *\n     * @param {Element} element Target element.\n     * @param {string} eventName Event name.\n     * @param {Function} callback Function to remove from the event target. It must be the same as during registration listener.\n     * @param {boolean} [onlyOwnEvents] Whether whould remove only events registered using this instance of EventManager.\n     */\n\n  }, {\n    key: \"removeEventListener\",\n    value: function removeEventListener(element, eventName, callback) {\n      var onlyOwnEvents = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n      var len = this.context.eventListeners.length;\n      var tmpEvent;\n\n      while (len) {\n        len -= 1;\n        tmpEvent = this.context.eventListeners[len];\n\n        if (tmpEvent.event === eventName && tmpEvent.element === element) {\n          if (callback && callback !== tmpEvent.callback) {\n            /* eslint-disable no-continue */\n            continue;\n          }\n\n          if (onlyOwnEvents && tmpEvent.eventManager !== this) {\n            continue;\n          }\n\n          this.context.eventListeners.splice(len, 1);\n          tmpEvent.element.removeEventListener(tmpEvent.event, tmpEvent.callbackProxy, tmpEvent.options);\n          listenersCounter -= 1;\n        }\n      }\n    }\n    /**\n     * Clear all previously registered events.\n     *\n     * @private\n     * @since 0.15.0-beta3\n     * @param {boolean} [onlyOwnEvents] Whether whould remove only events registered using this instance of EventManager.\n     */\n\n  }, {\n    key: \"clearEvents\",\n    value: function clearEvents() {\n      var onlyOwnEvents = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!this.context) {\n        return;\n      }\n\n      var len = this.context.eventListeners.length;\n\n      while (len) {\n        len -= 1;\n        var event = this.context.eventListeners[len];\n\n        if (onlyOwnEvents && event.eventManager !== this) {\n          continue;\n        }\n\n        this.context.eventListeners.splice(len, 1);\n        event.element.removeEventListener(event.event, event.callbackProxy, event.options);\n        listenersCounter -= 1;\n      }\n    }\n    /**\n     * Clear all previously registered events.\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.clearEvents();\n    }\n    /**\n     * Destroy instance of EventManager, clearing all events of the context.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.clearEvents();\n      this.context = null;\n    }\n    /**\n     * Destroy instance of EventManager, clearing only the own events.\n     */\n\n  }, {\n    key: \"destroyWithOwnEventsOnly\",\n    value: function destroyWithOwnEventsOnly() {\n      this.clearEvents(true);\n      this.context = null;\n    }\n    /**\n     * Trigger event at the specified target element.\n     *\n     * @param {Element} element Target element.\n     * @param {string} eventName Event name.\n     */\n\n  }, {\n    key: \"fireEvent\",\n    value: function fireEvent(element, eventName) {\n      var rootDocument = element.document;\n      var rootWindow = element;\n\n      if (!rootDocument) {\n        rootDocument = element.ownerDocument ? element.ownerDocument : element;\n        rootWindow = rootDocument.defaultView;\n      }\n\n      var options = {\n        bubbles: true,\n        cancelable: eventName !== 'mousemove',\n        view: rootWindow,\n        detail: 0,\n        screenX: 0,\n        screenY: 0,\n        clientX: 1,\n        clientY: 1,\n        ctrlKey: false,\n        altKey: false,\n        shiftKey: false,\n        metaKey: false,\n        button: 0,\n        relatedTarget: undefined\n      };\n      var event;\n\n      if (rootDocument.createEvent) {\n        event = rootDocument.createEvent('MouseEvents');\n        event.initMouseEvent(eventName, options.bubbles, options.cancelable, options.view, options.detail, options.screenX, options.screenY, options.clientX, options.clientY, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, options.relatedTarget || rootDocument.body.parentNode);\n      } else {\n        event = rootDocument.createEventObject();\n      }\n\n      if (element.dispatchEvent) {\n        element.dispatchEvent(event);\n      } else {\n        element.fireEvent(\"on\".concat(eventName), event);\n      }\n    }\n  }]);\n\n  return EventManager;\n}();\n/**\n * @private\n * @param {Event} event The event object.\n * @returns {Event}\n */\n\n\nfunction extendEvent(event) {\n  var nativeStopImmediatePropagation = event.stopImmediatePropagation;\n\n  event.stopImmediatePropagation = function () {\n    nativeStopImmediatePropagation.apply(this);\n\n    _stopImmediatePropagation(this);\n  };\n\n  return event;\n}\n\nexport default EventManager;\n/**\n * @returns {number}\n */\n\nexport function getListenersCounter() {\n  return listenersCounter;\n}", "import \"core-js/modules/es.array.index-of.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { getScrollableElement, getTrimmingContainer } from \"./../../../../helpers/dom/element.mjs\";\nimport { defineGetter } from \"./../../../../helpers/object.mjs\";\nimport { arrayEach } from \"./../../../../helpers/array.mjs\";\nimport { warn } from \"./../../../../helpers/console.mjs\";\nimport EventManager from \"./../../../../eventManager.mjs\";\nimport { CLONE_TYPES, CLONE_TOP, CLONE_LEFT } from \"./constants.mjs\";\n/**\n * Creates an overlay over the original Walkontable instance. The overlay renders the clone of the original Walkontable\n * and (optionally) implements behavior needed for native horizontal and vertical scrolling.\n *\n * @class Overlay\n */\n\nexport var Overlay = /*#__PURE__*/function () {\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance.\n   */\n  function Overlay(wotInstance) {\n    _classCallCheck(this, Overlay);\n\n    defineGetter(this, 'wot', wotInstance, {\n      writable: false\n    });\n    var _this$wot$wtTable = this.wot.wtTable,\n        TABLE = _this$wot$wtTable.TABLE,\n        hider = _this$wot$wtTable.hider,\n        spreader = _this$wot$wtTable.spreader,\n        holder = _this$wot$wtTable.holder,\n        wtRootElement = _this$wot$wtTable.wtRootElement; // legacy support, deprecated in the future\n\n    this.instance = this.wot;\n    this.type = '';\n    this.mainTableScrollableElement = null;\n    this.TABLE = TABLE;\n    this.hider = hider;\n    this.spreader = spreader;\n    this.holder = holder;\n    this.wtRootElement = wtRootElement;\n    this.trimmingContainer = getTrimmingContainer(this.hider.parentNode.parentNode);\n    this.updateStateOfRendering();\n  }\n  /**\n   * Update internal state of object with an information about the need of full rendering of the overlay.\n   *\n   * @returns {boolean} Returns `true` if the state has changed since the last check.\n   */\n\n\n  _createClass(Overlay, [{\n    key: \"updateStateOfRendering\",\n    value: function updateStateOfRendering() {\n      var previousState = this.needFullRender;\n      this.needFullRender = this.shouldBeRendered();\n      var changed = previousState !== this.needFullRender;\n\n      if (changed && !this.needFullRender) {\n        this.reset();\n      }\n\n      return changed;\n    }\n    /**\n     * Checks if overlay should be fully rendered.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"shouldBeRendered\",\n    value: function shouldBeRendered() {\n      return true;\n    }\n    /**\n     * Update the trimming container.\n     */\n\n  }, {\n    key: \"updateTrimmingContainer\",\n    value: function updateTrimmingContainer() {\n      this.trimmingContainer = getTrimmingContainer(this.hider.parentNode.parentNode);\n    }\n    /**\n     * Update the main scrollable element.\n     */\n\n  }, {\n    key: \"updateMainScrollableElement\",\n    value: function updateMainScrollableElement() {\n      var _this$wot = this.wot,\n          wtTable = _this$wot.wtTable,\n          rootWindow = _this$wot.rootWindow;\n\n      if (rootWindow.getComputedStyle(wtTable.wtRootElement.parentNode).getPropertyValue('overflow') === 'hidden') {\n        this.mainTableScrollableElement = this.wot.wtTable.holder;\n      } else {\n        this.mainTableScrollableElement = getScrollableElement(wtTable.TABLE);\n      }\n    }\n    /**\n     * Calculates coordinates of the provided element, relative to the root Handsontable element.\n     * NOTE: The element needs to be a child of the overlay in order for the method to work correctly.\n     *\n     * @param {HTMLElement} element The cell element to calculate the position for.\n     * @param {number} rowIndex Visual row index.\n     * @param {number} columnIndex Visual column index.\n     * @returns {{top: number, left: number}|undefined}\n     */\n\n  }, {\n    key: \"getRelativeCellPosition\",\n    value: function getRelativeCellPosition(element, rowIndex, columnIndex) {\n      if (this.clone.wtTable.holder.contains(element) === false) {\n        warn(\"The provided element is not a child of the \".concat(this.type, \" overlay\"));\n        return;\n      }\n\n      var windowScroll = this.mainTableScrollableElement === this.wot.rootWindow;\n      var fixedColumn = columnIndex < this.wot.getSetting('fixedColumnsLeft');\n      var fixedRowTop = rowIndex < this.wot.getSetting('fixedRowsTop');\n      var fixedRowBottom = rowIndex >= this.wot.getSetting('totalRows') - this.wot.getSetting('fixedRowsBottom');\n      var spreaderOffset = {\n        left: this.clone.wtTable.spreader.offsetLeft,\n        top: this.clone.wtTable.spreader.offsetTop\n      };\n      var elementOffset = {\n        left: element.offsetLeft,\n        top: element.offsetTop\n      };\n      var offsetObject = null;\n\n      if (windowScroll) {\n        offsetObject = this.getRelativeCellPositionWithinWindow(fixedRowTop, fixedColumn, elementOffset, spreaderOffset);\n      } else {\n        offsetObject = this.getRelativeCellPositionWithinHolder(fixedRowTop, fixedRowBottom, fixedColumn, elementOffset, spreaderOffset);\n      }\n\n      return offsetObject;\n    }\n    /**\n     * Calculates coordinates of the provided element, relative to the root Handsontable element within a table with window\n     * as a scrollable element.\n     *\n     * @private\n     * @param {boolean} onFixedRowTop `true` if the coordinates point to a place within the top fixed rows.\n     * @param {boolean} onFixedColumn `true` if the coordinates point to a place within the fixed columns.\n     * @param {number} elementOffset Offset position of the cell element.\n     * @param {number} spreaderOffset Offset position of the spreader element.\n     * @returns {{top: number, left: number}}\n     */\n\n  }, {\n    key: \"getRelativeCellPositionWithinWindow\",\n    value: function getRelativeCellPositionWithinWindow(onFixedRowTop, onFixedColumn, elementOffset, spreaderOffset) {\n      var absoluteRootElementPosition = this.wot.wtTable.wtRootElement.getBoundingClientRect();\n      var horizontalOffset = 0;\n      var verticalOffset = 0;\n\n      if (!onFixedColumn) {\n        horizontalOffset = spreaderOffset.left;\n      } else {\n        horizontalOffset = absoluteRootElementPosition.left <= 0 ? -1 * absoluteRootElementPosition.left : 0;\n      }\n\n      if (onFixedRowTop) {\n        var absoluteOverlayPosition = this.clone.wtTable.TABLE.getBoundingClientRect();\n        verticalOffset = absoluteOverlayPosition.top - absoluteRootElementPosition.top;\n      } else {\n        verticalOffset = spreaderOffset.top;\n      }\n\n      return {\n        left: elementOffset.left + horizontalOffset,\n        top: elementOffset.top + verticalOffset\n      };\n    }\n    /**\n     * Calculates coordinates of the provided element, relative to the root Handsontable element within a table with window\n     * as a scrollable element.\n     *\n     * @private\n     * @param {boolean} onFixedRowTop `true` if the coordinates point to a place within the top fixed rows.\n     * @param {boolean} onFixedRowBottom `true` if the coordinates point to a place within the bottom fixed rows.\n     * @param {boolean} onFixedColumn `true` if the coordinates point to a place within the fixed columns.\n     * @param {number} elementOffset Offset position of the cell element.\n     * @param {number} spreaderOffset Offset position of the spreader element.\n     * @returns {{top: number, left: number}}\n     */\n\n  }, {\n    key: \"getRelativeCellPositionWithinHolder\",\n    value: function getRelativeCellPositionWithinHolder(onFixedRowTop, onFixedRowBottom, onFixedColumn, elementOffset, spreaderOffset) {\n      var tableScrollPosition = {\n        horizontal: this.clone.cloneSource.wtOverlays.leftOverlay.getScrollPosition(),\n        vertical: this.clone.cloneSource.wtOverlays.topOverlay.getScrollPosition()\n      };\n      var horizontalOffset = 0;\n      var verticalOffset = 0;\n\n      if (!onFixedColumn) {\n        horizontalOffset = tableScrollPosition.horizontal - spreaderOffset.left;\n      }\n\n      if (onFixedRowBottom) {\n        var absoluteRootElementPosition = this.wot.wtTable.wtRootElement.getBoundingClientRect();\n        var absoluteOverlayPosition = this.clone.wtTable.TABLE.getBoundingClientRect();\n        verticalOffset = absoluteOverlayPosition.top * -1 + absoluteRootElementPosition.top;\n      } else if (!onFixedRowTop) {\n        verticalOffset = tableScrollPosition.vertical - spreaderOffset.top;\n      }\n\n      return {\n        left: elementOffset.left - horizontalOffset,\n        top: elementOffset.top - verticalOffset\n      };\n    }\n    /**\n     * Make a clone of table for overlay.\n     *\n     * @param {string} direction Can be `Overlay.CLONE_TOP`, `Overlay.CLONE_LEFT`,\n     *                           `Overlay.CLONE_TOP_LEFT_CORNER`.\n     * @returns {Walkontable}\n     */\n\n  }, {\n    key: \"makeClone\",\n    value: function makeClone(direction) {\n      if (CLONE_TYPES.indexOf(direction) === -1) {\n        throw new Error(\"Clone type \\\"\".concat(direction, \"\\\" is not supported.\"));\n      }\n\n      var _this$wot2 = this.wot,\n          wtTable = _this$wot2.wtTable,\n          rootDocument = _this$wot2.rootDocument,\n          rootWindow = _this$wot2.rootWindow;\n      var clone = rootDocument.createElement('DIV');\n      var clonedTable = rootDocument.createElement('TABLE');\n      var tableParent = wtTable.wtRootElement.parentNode;\n      clone.className = \"ht_clone_\".concat(direction, \" handsontable\");\n      clone.style.position = 'absolute';\n      clone.style.top = 0;\n      clone.style.left = 0;\n      clone.style.overflow = 'visible';\n      clonedTable.className = wtTable.TABLE.className;\n      clone.appendChild(clonedTable);\n      this.type = direction;\n      tableParent.appendChild(clone);\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (preventOverflow === true || preventOverflow === 'horizontal' && this.type === CLONE_TOP || preventOverflow === 'vertical' && this.type === CLONE_LEFT) {\n        this.mainTableScrollableElement = rootWindow;\n      } else if (rootWindow.getComputedStyle(tableParent).getPropertyValue('overflow') === 'hidden') {\n        this.mainTableScrollableElement = wtTable.holder;\n      } else {\n        this.mainTableScrollableElement = getScrollableElement(wtTable.TABLE);\n      } // Create a new instance of the Walkontable class\n\n\n      return new this.wot.constructor({\n        cloneSource: this.wot,\n        cloneOverlay: this,\n        table: clonedTable\n      });\n    }\n    /**\n     * Refresh/Redraw overlay.\n     *\n     * @param {boolean} [fastDraw=false] When `true`, try to refresh only the positions of borders without rerendering\n     *                                   the data. It will only work if Table.draw() does not force\n     *                                   rendering anyway.\n     */\n\n  }, {\n    key: \"refresh\",\n    value: function refresh() {\n      var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      // When hot settings are changed we allow to refresh overlay once before blocking\n      var nextCycleRenderFlag = this.shouldBeRendered();\n\n      if (this.clone && (this.needFullRender || nextCycleRenderFlag)) {\n        this.clone.draw(fastDraw);\n      }\n\n      this.needFullRender = nextCycleRenderFlag;\n    }\n    /**\n     * Reset overlay styles to initial values.\n     */\n\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      if (!this.clone) {\n        return;\n      }\n\n      var holder = this.clone.wtTable.holder;\n      var hider = this.clone.wtTable.hider;\n      var holderStyle = holder.style;\n      var hidderStyle = hider.style;\n      var rootStyle = holder.parentNode.style;\n      arrayEach([holderStyle, hidderStyle, rootStyle], function (style) {\n        style.width = '';\n        style.height = '';\n      });\n    }\n    /**\n     * Destroy overlay instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      new EventManager(this.clone).destroy();\n    }\n  }]);\n\n  return Overlay;\n}();", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { addClass, getScrollbarWidth, getScrollTop, getWindowScrollLeft, hasClass, outerHeight, removeClass } from \"./../../../../helpers/dom/element.mjs\";\nimport BottomOverlayTable from \"./../table/bottom.mjs\";\nimport { Overlay } from \"./_base.mjs\";\nimport { CLONE_BOTTOM } from \"./constants.mjs\";\n/**\n * @class BottomOverlay\n */\n\nexport var BottomOverlay = /*#__PURE__*/function (_Overlay) {\n  _inherits(BottomOverlay, _Overlay);\n\n  var _super = _createSuper(BottomOverlay);\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance.\n   */\n  function BottomOverlay(wotInstance) {\n    var _this;\n\n    _classCallCheck(this, BottomOverlay);\n\n    _this = _super.call(this, wotInstance);\n\n    _defineProperty(_assertThisInitialized(_this), \"cachedFixedRowsBottom\", -1);\n\n    _this.clone = _this.makeClone(CLONE_BOTTOM);\n    _this.cachedFixedRowsBottom = _this.wot.getSetting('fixedRowsBottom');\n    return _this;\n  }\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {Table}\n   */\n\n\n  _createClass(BottomOverlay, [{\n    key: \"createTable\",\n    value: function createTable() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _construct(BottomOverlayTable, args);\n    }\n    /**\n     * Checks if overlay should be fully rendered.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"shouldBeRendered\",\n    value: function shouldBeRendered() {\n      return this.wot.getSetting('shouldRenderBottomOverlay');\n    }\n    /**\n     * Updates the top overlay position.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"resetFixedPosition\",\n    value: function resetFixedPosition() {\n      if (!this.needFullRender || !this.wot.wtTable.holder.parentNode) {\n        // removed from DOM\n        return;\n      }\n\n      var overlayRoot = this.clone.wtTable.holder.parentNode;\n      overlayRoot.style.top = '';\n      var headerPosition = 0;\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (this.trimmingContainer === this.wot.rootWindow && (!preventOverflow || preventOverflow !== 'vertical')) {\n        var _this$wot = this.wot,\n            rootDocument = _this$wot.rootDocument,\n            wtTable = _this$wot.wtTable;\n        var hiderRect = wtTable.hider.getBoundingClientRect();\n        var bottom = Math.ceil(hiderRect.bottom);\n        var bodyHeight = rootDocument.documentElement.clientHeight;\n        var finalLeft;\n        var finalBottom;\n        finalLeft = wtTable.hider.style.left;\n        finalLeft = finalLeft === '' ? 0 : finalLeft;\n\n        if (bottom > bodyHeight) {\n          finalBottom = bottom - bodyHeight;\n        } else {\n          finalBottom = 0;\n        }\n\n        headerPosition = finalBottom;\n        finalBottom += 'px';\n        overlayRoot.style.left = finalLeft;\n        overlayRoot.style.bottom = finalBottom;\n      } else {\n        headerPosition = this.getScrollPosition();\n        this.repositionOverlay();\n      }\n\n      var positionChanged = this.adjustHeaderBordersPosition(headerPosition);\n      this.adjustElementsSize();\n      return positionChanged;\n    }\n    /**\n     * Updates the bottom overlay position.\n     */\n\n  }, {\n    key: \"repositionOverlay\",\n    value: function repositionOverlay() {\n      var _this$wot2 = this.wot,\n          wtTable = _this$wot2.wtTable,\n          rootDocument = _this$wot2.rootDocument;\n      var cloneRoot = this.clone.wtTable.holder.parentNode;\n      var scrollbarWidth = getScrollbarWidth(rootDocument);\n\n      if (wtTable.holder.clientHeight === wtTable.holder.offsetHeight) {\n        scrollbarWidth = 0;\n      }\n\n      cloneRoot.style.bottom = \"\".concat(scrollbarWidth, \"px\");\n    }\n    /**\n     * Sets the main overlay's vertical scroll position.\n     *\n     * @param {number} pos The scroll position.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"setScrollPosition\",\n    value: function setScrollPosition(pos) {\n      var rootWindow = this.wot.rootWindow;\n      var result = false;\n\n      if (this.mainTableScrollableElement === rootWindow) {\n        rootWindow.scrollTo(getWindowScrollLeft(rootWindow), pos);\n        result = true;\n      } else if (this.mainTableScrollableElement.scrollTop !== pos) {\n        this.mainTableScrollableElement.scrollTop = pos;\n        result = true;\n      }\n\n      return result;\n    }\n    /**\n     * Triggers onScroll hook callback.\n     */\n\n  }, {\n    key: \"onScroll\",\n    value: function onScroll() {\n      this.wot.getSetting('onScrollHorizontally');\n    }\n    /**\n     * Calculates total sum cells height.\n     *\n     * @param {number} from Row index which calculates started from.\n     * @param {number} to Row index where calculation is finished.\n     * @returns {number} Height sum.\n     */\n\n  }, {\n    key: \"sumCellSizes\",\n    value: function sumCellSizes(from, to) {\n      var _this$wot3 = this.wot,\n          wtTable = _this$wot3.wtTable,\n          wtSettings = _this$wot3.wtSettings;\n      var defaultRowHeight = wtSettings.settings.defaultRowHeight;\n      var row = from;\n      var sum = 0;\n\n      while (row < to) {\n        var height = wtTable.getRowHeight(row);\n        sum += height === void 0 ? defaultRowHeight : height;\n        row += 1;\n      }\n\n      return sum;\n    }\n    /**\n     * Adjust overlay root element, childs and master table element sizes (width, height).\n     *\n     * @param {boolean} [force=false] When `true`, it adjusts the DOM nodes sizes for that overlay.\n     */\n\n  }, {\n    key: \"adjustElementsSize\",\n    value: function adjustElementsSize() {\n      var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      this.updateTrimmingContainer();\n\n      if (this.needFullRender || force) {\n        this.adjustRootElementSize();\n        this.adjustRootChildrenSize();\n      }\n    }\n    /**\n     * Adjust overlay root element size (width and height).\n     */\n\n  }, {\n    key: \"adjustRootElementSize\",\n    value: function adjustRootElementSize() {\n      var _this$wot4 = this.wot,\n          wtTable = _this$wot4.wtTable,\n          wtViewport = _this$wot4.wtViewport,\n          rootWindow = _this$wot4.rootWindow;\n      var scrollbarWidth = getScrollbarWidth(this.wot.rootDocument);\n      var overlayRoot = this.clone.wtTable.holder.parentNode;\n      var overlayRootStyle = overlayRoot.style;\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (this.trimmingContainer !== rootWindow || preventOverflow === 'horizontal') {\n        var width = wtViewport.getWorkspaceWidth();\n\n        if (this.wot.wtOverlays.hasScrollbarRight) {\n          width -= scrollbarWidth;\n        }\n\n        width = Math.min(width, wtTable.wtRootElement.scrollWidth);\n        overlayRootStyle.width = \"\".concat(width, \"px\");\n      } else {\n        overlayRootStyle.width = '';\n      }\n\n      this.clone.wtTable.holder.style.width = overlayRootStyle.width;\n      var tableHeight = outerHeight(this.clone.wtTable.TABLE);\n\n      if (!this.wot.wtTable.hasDefinedSize()) {\n        tableHeight = 0;\n      }\n\n      overlayRootStyle.height = \"\".concat(tableHeight, \"px\");\n    }\n    /**\n     * Adjust overlay root childs size.\n     */\n\n  }, {\n    key: \"adjustRootChildrenSize\",\n    value: function adjustRootChildrenSize() {\n      var holder = this.clone.wtTable.holder;\n      this.clone.wtTable.hider.style.width = this.hider.style.width;\n      holder.style.width = holder.parentNode.style.width;\n      holder.style.height = holder.parentNode.style.height;\n    }\n    /**\n     * Adjust the overlay dimensions and position.\n     */\n\n  }, {\n    key: \"applyToDOM\",\n    value: function applyToDOM() {\n      var total = this.wot.getSetting('totalRows');\n\n      if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') {\n        this.spreader.style.top = \"\".concat(this.wot.wtViewport.rowsRenderCalculator.startPosition, \"px\");\n      } else if (total === 0) {\n        // can happen if there are 0 rows\n        this.spreader.style.top = '0';\n      } else {\n        throw new Error('Incorrect value of the rowsRenderCalculator');\n      }\n\n      this.spreader.style.bottom = '';\n\n      if (this.needFullRender) {\n        this.syncOverlayOffset();\n      }\n    }\n    /**\n     * Synchronize calculated left position to an element.\n     */\n\n  }, {\n    key: \"syncOverlayOffset\",\n    value: function syncOverlayOffset() {\n      if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') {\n        this.clone.wtTable.spreader.style.left = \"\".concat(this.wot.wtViewport.columnsRenderCalculator.startPosition, \"px\");\n      } else {\n        this.clone.wtTable.spreader.style.left = '';\n      }\n    }\n    /**\n     * Scrolls vertically to a row.\n     *\n     * @param {number} sourceRow Row index which you want to scroll to.\n     * @param {boolean} [bottomEdge=false] If `true`, scrolls according to the bottom edge (top edge is by default).\n     */\n\n  }, {\n    key: \"scrollTo\",\n    value: function scrollTo(sourceRow, bottomEdge) {\n      var newY = this.getTableParentOffset();\n      var sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot;\n      var mainHolder = sourceInstance.wtTable.holder;\n      var scrollbarCompensation = 0;\n\n      if (bottomEdge && mainHolder.offsetHeight !== mainHolder.clientHeight) {\n        scrollbarCompensation = getScrollbarWidth(this.wot.rootDocument);\n      }\n\n      if (bottomEdge) {\n        newY += this.sumCellSizes(0, sourceRow + 1);\n        newY -= this.wot.wtViewport.getViewportHeight(); // Fix 1 pixel offset when cell is selected\n\n        newY += 1;\n      } else {\n        newY += this.sumCellSizes(this.wot.getSetting('fixedRowsBottom'), sourceRow);\n      }\n\n      newY += scrollbarCompensation;\n      this.setScrollPosition(newY);\n    }\n    /**\n     * Gets table parent top position.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getTableParentOffset\",\n    value: function getTableParentOffset() {\n      if (this.mainTableScrollableElement === this.wot.rootWindow) {\n        return this.wot.wtTable.holderOffset.top;\n      }\n\n      return 0;\n    }\n    /**\n     * Gets the main overlay's vertical scroll position.\n     *\n     * @returns {number} Main table's vertical scroll position.\n     */\n\n  }, {\n    key: \"getScrollPosition\",\n    value: function getScrollPosition() {\n      return getScrollTop(this.mainTableScrollableElement, this.wot.rootWindow);\n    }\n    /**\n     * Adds css classes to hide the header border's header (cell-selection border hiding issue).\n     *\n     * @param {number} position Header Y position if trimming container is window or scroll top if not.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"adjustHeaderBordersPosition\",\n    value: function adjustHeaderBordersPosition(position) {\n      var fixedRowsBottom = this.wot.getSetting('fixedRowsBottom');\n      var areFixedRowsBottomChanged = this.cachedFixedRowsBottom !== fixedRowsBottom;\n      var columnHeaders = this.wot.getSetting('columnHeaders');\n      var positionChanged = false;\n\n      if ((areFixedRowsBottomChanged || fixedRowsBottom === 0) && columnHeaders.length > 0) {\n        var masterParent = this.wot.wtTable.holder.parentNode;\n        var previousState = hasClass(masterParent, 'innerBorderBottom');\n        this.cachedFixedRowsBottom = this.wot.getSetting('fixedRowsBottom');\n\n        if (position || this.wot.getSetting('totalRows') === 0) {\n          addClass(masterParent, 'innerBorderBottom');\n          positionChanged = !previousState;\n        } else {\n          removeClass(masterParent, 'innerBorderBottom');\n          positionChanged = previousState;\n        }\n      }\n\n      return positionChanged;\n    }\n  }], [{\n    key: \"OVERLAY_NAME\",\n    get: function get() {\n      return CLONE_BOTTOM;\n    }\n    /**\n     * Cached value which holds the previous value of the `fixedRowsBottom` option.\n     * It is used as a comparison value that can be used to detect changes in that value.\n     *\n     * @type {number}\n     */\n\n  }]);\n\n  return BottomOverlay;\n}(Overlay);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport Table from \"../table.mjs\";\nimport stickyRowsBottom from \"./mixin/stickyRowsBottom.mjs\";\nimport calculatedColumns from \"./mixin/calculatedColumns.mjs\";\nimport { mixin } from \"./../../../../helpers/object.mjs\";\n/**\n * Subclass of `Table` that provides the helper methods relevant to BottomOverlay, implemented through mixins.\n */\n\nvar BottomOverlayTable = /*#__PURE__*/function (_Table) {\n  _inherits(BottomOverlayTable, _Table);\n\n  var _super = _createSuper(BottomOverlayTable);\n\n  function BottomOverlayTable() {\n    _classCallCheck(this, BottomOverlayTable);\n\n    return _super.apply(this, arguments);\n  }\n\n  return _createClass(BottomOverlayTable);\n}(Table);\n\nmixin(BottomOverlayTable, stickyRowsBottom);\nmixin(BottomOverlayTable, calculatedColumns);\nexport default BottomOverlayTable;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { addClass, getScrollbarWidth, getScrollLeft, getWindowScrollTop, hasClass, outerWidth, removeClass, setOverlayPosition, resetCssTransform } from \"./../../../../helpers/dom/element.mjs\";\nimport LeftOverlayTable from \"./../table/left.mjs\";\nimport { Overlay } from \"./_base.mjs\";\nimport { CLONE_LEFT } from \"./constants.mjs\";\n/**\n * @class LeftOverlay\n */\n\nexport var LeftOverlay = /*#__PURE__*/function (_Overlay) {\n  _inherits(LeftOverlay, _Overlay);\n\n  var _super = _createSuper(LeftOverlay);\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance.\n   */\n  function LeftOverlay(wotInstance) {\n    var _this;\n\n    _classCallCheck(this, LeftOverlay);\n\n    _this = _super.call(this, wotInstance);\n    _this.clone = _this.makeClone(CLONE_LEFT);\n    return _this;\n  }\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {Table}\n   */\n\n\n  _createClass(LeftOverlay, [{\n    key: \"createTable\",\n    value: function createTable() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _construct(LeftOverlayTable, args);\n    }\n    /**\n     * Checks if overlay should be fully rendered.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"shouldBeRendered\",\n    value: function shouldBeRendered() {\n      return this.wot.getSetting('shouldRenderLeftOverlay');\n    }\n    /**\n     * Updates the left overlay position.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"resetFixedPosition\",\n    value: function resetFixedPosition() {\n      var wtTable = this.wot.wtTable;\n\n      if (!this.needFullRender || !wtTable.holder.parentNode) {\n        // removed from DOM\n        return;\n      }\n\n      var overlayRoot = this.clone.wtTable.holder.parentNode;\n      var headerPosition = 0;\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (this.trimmingContainer === this.wot.rootWindow && (!preventOverflow || preventOverflow !== 'horizontal')) {\n        var hiderRect = wtTable.hider.getBoundingClientRect();\n        var left = Math.ceil(hiderRect.left);\n        var right = Math.ceil(hiderRect.right);\n        var finalLeft;\n        var finalTop;\n        finalTop = wtTable.hider.style.top;\n        finalTop = finalTop === '' ? 0 : finalTop;\n\n        if (left < 0 && right - overlayRoot.offsetWidth > 0) {\n          finalLeft = -left;\n        } else {\n          finalLeft = 0;\n        }\n\n        headerPosition = finalLeft;\n        finalLeft += 'px';\n        setOverlayPosition(overlayRoot, finalLeft, finalTop);\n      } else {\n        headerPosition = this.getScrollPosition();\n        resetCssTransform(overlayRoot);\n      }\n\n      var positionChanged = this.adjustHeaderBordersPosition(headerPosition);\n      this.adjustElementsSize();\n      return positionChanged;\n    }\n    /**\n     * Sets the main overlay's horizontal scroll position.\n     *\n     * @param {number} pos The scroll position.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"setScrollPosition\",\n    value: function setScrollPosition(pos) {\n      var rootWindow = this.wot.rootWindow;\n      var result = false;\n\n      if (this.mainTableScrollableElement === rootWindow && rootWindow.scrollX !== pos) {\n        rootWindow.scrollTo(pos, getWindowScrollTop(rootWindow));\n        result = true;\n      } else if (this.mainTableScrollableElement.scrollLeft !== pos) {\n        this.mainTableScrollableElement.scrollLeft = pos;\n        result = true;\n      }\n\n      return result;\n    }\n    /**\n     * Triggers onScroll hook callback.\n     */\n\n  }, {\n    key: \"onScroll\",\n    value: function onScroll() {\n      this.wot.getSetting('onScrollVertically');\n    }\n    /**\n     * Calculates total sum cells width.\n     *\n     * @param {number} from Column index which calculates started from.\n     * @param {number} to Column index where calculation is finished.\n     * @returns {number} Width sum.\n     */\n\n  }, {\n    key: \"sumCellSizes\",\n    value: function sumCellSizes(from, to) {\n      var defaultColumnWidth = this.wot.wtSettings.defaultColumnWidth;\n      var column = from;\n      var sum = 0;\n\n      while (column < to) {\n        sum += this.wot.wtTable.getStretchedColumnWidth(column) || defaultColumnWidth;\n        column += 1;\n      }\n\n      return sum;\n    }\n    /**\n     * Adjust overlay root element, childs and master table element sizes (width, height).\n     *\n     * @param {boolean} [force=false] When `true`, it adjusts the DOM nodes sizes for that overlay.\n     */\n\n  }, {\n    key: \"adjustElementsSize\",\n    value: function adjustElementsSize() {\n      var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      this.updateTrimmingContainer();\n\n      if (this.needFullRender || force) {\n        this.adjustRootElementSize();\n        this.adjustRootChildrenSize();\n      }\n    }\n    /**\n     * Adjust overlay root element size (width and height).\n     */\n\n  }, {\n    key: \"adjustRootElementSize\",\n    value: function adjustRootElementSize() {\n      var _this$wot = this.wot,\n          wtTable = _this$wot.wtTable,\n          rootDocument = _this$wot.rootDocument,\n          rootWindow = _this$wot.rootWindow;\n      var scrollbarHeight = getScrollbarWidth(rootDocument);\n      var overlayRoot = this.clone.wtTable.holder.parentNode;\n      var overlayRootStyle = overlayRoot.style;\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (this.trimmingContainer !== rootWindow || preventOverflow === 'vertical') {\n        var height = this.wot.wtViewport.getWorkspaceHeight();\n\n        if (this.wot.wtOverlays.hasScrollbarBottom) {\n          height -= scrollbarHeight;\n        }\n\n        height = Math.min(height, wtTable.wtRootElement.scrollHeight);\n        overlayRootStyle.height = \"\".concat(height, \"px\");\n      } else {\n        overlayRootStyle.height = '';\n      }\n\n      this.clone.wtTable.holder.style.height = overlayRootStyle.height;\n      var tableWidth = outerWidth(this.clone.wtTable.TABLE);\n      overlayRootStyle.width = \"\".concat(tableWidth, \"px\");\n    }\n    /**\n     * Adjust overlay root childs size.\n     */\n\n  }, {\n    key: \"adjustRootChildrenSize\",\n    value: function adjustRootChildrenSize() {\n      var _selections$getCell$g;\n\n      var holder = this.clone.wtTable.holder;\n      var selections = this.wot.selections;\n      var selectionCornerOffset = Math.abs((_selections$getCell$g = selections === null || selections === void 0 ? void 0 : selections.getCell().getBorder(this.wot).cornerCenterPointOffset) !== null && _selections$getCell$g !== void 0 ? _selections$getCell$g : 0);\n      this.clone.wtTable.hider.style.height = this.hider.style.height;\n      holder.style.height = holder.parentNode.style.height; // Add selection corner protruding part to the holder total width to make sure that\n      // borders' corner won't be cut after horizontal scroll (#6937).\n\n      holder.style.width = \"\".concat(parseInt(holder.parentNode.style.width, 10) + selectionCornerOffset, \"px\");\n    }\n    /**\n     * Adjust the overlay dimensions and position.\n     */\n\n  }, {\n    key: \"applyToDOM\",\n    value: function applyToDOM() {\n      var total = this.wot.getSetting('totalColumns');\n\n      if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') {\n        this.spreader.style.left = \"\".concat(this.wot.wtViewport.columnsRenderCalculator.startPosition, \"px\");\n      } else if (total === 0) {\n        this.spreader.style.left = '0';\n      } else {\n        throw new Error('Incorrect value of the columnsRenderCalculator');\n      }\n\n      this.spreader.style.right = '';\n\n      if (this.needFullRender) {\n        this.syncOverlayOffset();\n      }\n    }\n    /**\n     * Synchronize calculated top position to an element.\n     */\n\n  }, {\n    key: \"syncOverlayOffset\",\n    value: function syncOverlayOffset() {\n      if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') {\n        this.clone.wtTable.spreader.style.top = \"\".concat(this.wot.wtViewport.rowsRenderCalculator.startPosition, \"px\");\n      } else {\n        this.clone.wtTable.spreader.style.top = '';\n      }\n    }\n    /**\n     * Scrolls horizontally to a column at the left edge of the viewport.\n     *\n     * @param {number} sourceCol  Column index which you want to scroll to.\n     * @param {boolean} [beyondRendered]  If `true`, scrolls according to the bottom\n     *                                    edge (top edge is by default).\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"scrollTo\",\n    value: function scrollTo(sourceCol, beyondRendered) {\n      var newX = this.getTableParentOffset();\n      var sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot;\n      var mainHolder = sourceInstance.wtTable.holder;\n      var scrollbarCompensation = 0;\n\n      if (beyondRendered && mainHolder.offsetWidth !== mainHolder.clientWidth) {\n        scrollbarCompensation = getScrollbarWidth(this.wot.rootDocument);\n      }\n\n      if (beyondRendered) {\n        newX += this.sumCellSizes(0, sourceCol + 1);\n        newX -= this.wot.wtViewport.getViewportWidth();\n      } else {\n        newX += this.sumCellSizes(this.wot.getSetting('fixedColumnsLeft'), sourceCol);\n      }\n\n      newX += scrollbarCompensation;\n      return this.setScrollPosition(newX);\n    }\n    /**\n     * Gets table parent left position.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getTableParentOffset\",\n    value: function getTableParentOffset() {\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n      var offset = 0;\n\n      if (!preventOverflow && this.trimmingContainer === this.wot.rootWindow) {\n        offset = this.wot.wtTable.holderOffset.left;\n      }\n\n      return offset;\n    }\n    /**\n     * Gets the main overlay's horizontal scroll position.\n     *\n     * @returns {number} Main table's vertical scroll position.\n     */\n\n  }, {\n    key: \"getScrollPosition\",\n    value: function getScrollPosition() {\n      return getScrollLeft(this.mainTableScrollableElement, this.wot.rootWindow);\n    }\n    /**\n     * Adds css classes to hide the header border's header (cell-selection border hiding issue).\n     *\n     * @param {number} position Header X position if trimming container is window or scroll top if not.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"adjustHeaderBordersPosition\",\n    value: function adjustHeaderBordersPosition(position) {\n      var masterParent = this.wot.wtTable.holder.parentNode;\n      var rowHeaders = this.wot.getSetting('rowHeaders');\n      var fixedColumnsLeft = this.wot.getSetting('fixedColumnsLeft');\n      var totalRows = this.wot.getSetting('totalRows');\n\n      if (totalRows) {\n        removeClass(masterParent, 'emptyRows');\n      } else {\n        addClass(masterParent, 'emptyRows');\n      }\n\n      var positionChanged = false;\n\n      if (fixedColumnsLeft && !rowHeaders.length) {\n        addClass(masterParent, 'innerBorderLeft');\n      } else if (!fixedColumnsLeft && rowHeaders.length) {\n        var previousState = hasClass(masterParent, 'innerBorderLeft');\n\n        if (position) {\n          addClass(masterParent, 'innerBorderLeft');\n          positionChanged = !previousState;\n        } else {\n          removeClass(masterParent, 'innerBorderLeft');\n          positionChanged = previousState;\n        }\n      }\n\n      return positionChanged;\n    }\n  }], [{\n    key: \"OVERLAY_NAME\",\n    get: function get() {\n      return CLONE_LEFT;\n    }\n  }]);\n\n  return LeftOverlay;\n}(Overlay);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport Table from \"../table.mjs\";\nimport calculatedRows from \"./mixin/calculatedRows.mjs\";\nimport stickyColumnsLeft from \"./mixin/stickyColumnsLeft.mjs\";\nimport { mixin } from \"./../../../../helpers/object.mjs\";\n/**\n * Subclass of `Table` that provides the helper methods relevant to LeftOverlay, implemented through mixins.\n */\n\nvar LeftOverlayTable = /*#__PURE__*/function (_Table) {\n  _inherits(LeftOverlayTable, _Table);\n\n  var _super = _createSuper(LeftOverlayTable);\n\n  function LeftOverlayTable() {\n    _classCallCheck(this, LeftOverlayTable);\n\n    return _super.apply(this, arguments);\n  }\n\n  return _createClass(LeftOverlayTable);\n}(Table);\n\nmixin(LeftOverlayTable, calculatedRows);\nmixin(LeftOverlayTable, stickyColumnsLeft);\nexport default LeftOverlayTable;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { outerHeight, outerWidth, setOverlayPosition, resetCssTransform } from \"./../../../../helpers/dom/element.mjs\";\nimport TopLeftCornerOverlayTable from \"./../table/topLeftCorner.mjs\";\nimport { Overlay } from \"./_base.mjs\";\nimport { CLONE_TOP_LEFT_CORNER } from \"./constants.mjs\";\n/**\n * @class TopLeftCornerOverlay\n */\n\nexport var TopLeftCornerOverlay = /*#__PURE__*/function (_Overlay) {\n  _inherits(TopLeftCornerOverlay, _Overlay);\n\n  var _super = _createSuper(TopLeftCornerOverlay);\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance.\n   */\n  function TopLeftCornerOverlay(wotInstance) {\n    var _this;\n\n    _classCallCheck(this, TopLeftCornerOverlay);\n\n    _this = _super.call(this, wotInstance);\n    _this.clone = _this.makeClone(CLONE_TOP_LEFT_CORNER);\n    return _this;\n  }\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {Table}\n   */\n\n\n  _createClass(TopLeftCornerOverlay, [{\n    key: \"createTable\",\n    value: function createTable() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _construct(TopLeftCornerOverlayTable, args);\n    }\n    /**\n     * Checks if overlay should be fully rendered.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"shouldBeRendered\",\n    value: function shouldBeRendered() {\n      var wot = this.wot;\n      return wot.getSetting('shouldRenderTopOverlay') && wot.getSetting('shouldRenderLeftOverlay');\n    }\n    /**\n     * Updates the corner overlay position.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"resetFixedPosition\",\n    value: function resetFixedPosition() {\n      this.updateTrimmingContainer();\n\n      if (!this.wot.wtTable.holder.parentNode) {\n        // removed from DOM\n        return;\n      }\n\n      var overlayRoot = this.clone.wtTable.holder.parentNode;\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (this.trimmingContainer === this.wot.rootWindow) {\n        var wtTable = this.wot.wtTable;\n        var hiderRect = wtTable.hider.getBoundingClientRect();\n        var top = Math.ceil(hiderRect.top);\n        var left = Math.ceil(hiderRect.left);\n        var bottom = Math.ceil(hiderRect.bottom);\n        var right = Math.ceil(hiderRect.right);\n        var finalLeft = '0';\n        var finalTop = '0';\n\n        if (!preventOverflow || preventOverflow === 'vertical') {\n          if (left < 0 && right - overlayRoot.offsetWidth > 0) {\n            finalLeft = \"\".concat(-left, \"px\");\n          }\n        }\n\n        if (!preventOverflow || preventOverflow === 'horizontal') {\n          if (top < 0 && bottom - overlayRoot.offsetHeight > 0) {\n            finalTop = \"\".concat(-top, \"px\");\n          }\n        }\n\n        setOverlayPosition(overlayRoot, finalLeft, finalTop);\n      } else {\n        resetCssTransform(overlayRoot);\n      }\n\n      var tableHeight = outerHeight(this.clone.wtTable.TABLE);\n      var tableWidth = outerWidth(this.clone.wtTable.TABLE);\n\n      if (!this.wot.wtTable.hasDefinedSize()) {\n        tableHeight = 0;\n      }\n\n      overlayRoot.style.height = \"\".concat(tableHeight, \"px\");\n      overlayRoot.style.width = \"\".concat(tableWidth, \"px\");\n      return false;\n    }\n  }], [{\n    key: \"OVERLAY_NAME\",\n    get: function get() {\n      return CLONE_TOP_LEFT_CORNER;\n    }\n  }]);\n\n  return TopLeftCornerOverlay;\n}(Overlay);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport Table from \"../table.mjs\";\nimport stickyRowsTop from \"./mixin/stickyRowsTop.mjs\";\nimport stickyColumnsLeft from \"./mixin/stickyColumnsLeft.mjs\";\nimport { mixin } from \"./../../../../helpers/object.mjs\";\n/**\n * Subclass of `Table` that provides the helper methods relevant to TopLeftCornerOverlay, implemented through mixins.\n */\n\nvar TopLeftCornerOverlayTable = /*#__PURE__*/function (_Table) {\n  _inherits(TopLeftCornerOverlayTable, _Table);\n\n  var _super = _createSuper(TopLeftCornerOverlayTable);\n\n  function TopLeftCornerOverlayTable() {\n    _classCallCheck(this, TopLeftCornerOverlayTable);\n\n    return _super.apply(this, arguments);\n  }\n\n  return _createClass(TopLeftCornerOverlayTable);\n}(Table);\n\nmixin(TopLeftCornerOverlayTable, stickyRowsTop);\nmixin(TopLeftCornerOverlayTable, stickyColumnsLeft);\nexport default TopLeftCornerOverlayTable;", "import { defineGetter } from \"../../../../../helpers/object.mjs\";\nvar MIXIN_NAME = 'stickyRowsTop';\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to rows.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use sticky rendering of the top rows in the vertical axis.\n *\n * @type {object}\n */\n\nvar stickyRowsTop = {\n  /**\n   * Get the source index of the first rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getFirstRenderedRow: function getFirstRenderedRow() {\n    var totalRows = this.wot.getSetting('totalRows');\n\n    if (totalRows === 0) {\n      return -1;\n    }\n\n    return 0;\n  },\n\n  /**\n   * Get the source index of the first row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   */\n  getFirstVisibleRow: function getFirstVisibleRow() {\n    return this.getFirstRenderedRow();\n  },\n\n  /**\n   * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   */\n  getLastRenderedRow: function getLastRenderedRow() {\n    return this.getRenderedRowsCount() - 1;\n  },\n\n  /**\n   * Get the source index of the last row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   */\n  getLastVisibleRow: function getLastVisibleRow() {\n    return this.getLastRenderedRow();\n  },\n\n  /**\n   * Get the number of rendered rows.\n   *\n   * @returns {number}\n   */\n  getRenderedRowsCount: function getRenderedRowsCount() {\n    var totalRows = this.wot.getSetting('totalRows');\n    return Math.min(this.wot.getSetting('fixedRowsTop'), totalRows);\n  },\n\n  /**\n   * Get the number of fully visible rows in the viewport.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   */\n  getVisibleRowsCount: function getVisibleRowsCount() {\n    return this.getRenderedRowsCount();\n  }\n};\ndefineGetter(stickyRowsTop, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false\n});\nexport default stickyRowsTop;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { addClass, getScrollbarWidth, getScrollTop, getWindowScrollLeft, hasClass, outerHeight, removeClass, setOverlayPosition, resetCssTransform } from \"./../../../../helpers/dom/element.mjs\";\nimport TopOverlayTable from \"./../table/top.mjs\";\nimport { Overlay } from \"./_base.mjs\";\nimport { CLONE_TOP } from \"./constants.mjs\";\n/**\n * @class TopOverlay\n */\n\nexport var TopOverlay = /*#__PURE__*/function (_Overlay) {\n  _inherits(TopOverlay, _Overlay);\n\n  var _super = _createSuper(TopOverlay);\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance.\n   */\n  function TopOverlay(wotInstance) {\n    var _this;\n\n    _classCallCheck(this, TopOverlay);\n\n    _this = _super.call(this, wotInstance);\n\n    _defineProperty(_assertThisInitialized(_this), \"cachedFixedRowsTop\", -1);\n\n    _this.clone = _this.makeClone(CLONE_TOP);\n    _this.cachedFixedRowsTop = _this.wot.getSetting('fixedRowsTop');\n    return _this;\n  }\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {Table}\n   */\n\n\n  _createClass(TopOverlay, [{\n    key: \"createTable\",\n    value: function createTable() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _construct(TopOverlayTable, args);\n    }\n    /**\n     * Checks if overlay should be fully rendered.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"shouldBeRendered\",\n    value: function shouldBeRendered() {\n      return this.wot.getSetting('shouldRenderTopOverlay');\n    }\n    /**\n     * Updates the top overlay position.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"resetFixedPosition\",\n    value: function resetFixedPosition() {\n      if (!this.needFullRender || !this.wot.wtTable.holder.parentNode) {\n        // removed from DOM\n        return;\n      }\n\n      var overlayRoot = this.clone.wtTable.holder.parentNode;\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n      var headerPosition = 0;\n      var skipInnerBorderAdjusting = false;\n\n      if (this.trimmingContainer === this.wot.rootWindow && (!preventOverflow || preventOverflow !== 'vertical')) {\n        var wtTable = this.wot.wtTable;\n        var hiderRect = wtTable.hider.getBoundingClientRect();\n        var top = Math.ceil(hiderRect.top);\n        var bottom = Math.ceil(hiderRect.bottom);\n        var rootHeight = overlayRoot.offsetHeight; // This checks if the overlay is going to an infinite loop caused by added (or removed)\n        // `innerBorderTop` class name. Toggling the class name shifts the viewport by 1px and\n        // triggers the `scroll` event. It causes the table to render. The new render cycle takes into,\n        // account the shift and toggles the class name again. This causes the next loops. This\n        // happens only on Chrome (#7256).\n        //\n        // When we detect that the table bottom position is the same as the overlay bottom,\n        // do not toggle the class name.\n        //\n        // This workaround will be able to be cleared after merging the SVG borders, which introduces\n        // frozen lines (no more `innerBorderTop` workaround).\n\n        skipInnerBorderAdjusting = bottom === rootHeight;\n        var finalLeft;\n        var finalTop;\n        finalLeft = wtTable.hider.style.left;\n        finalLeft = finalLeft === '' ? 0 : finalLeft;\n\n        if (top < 0 && bottom - rootHeight > 0) {\n          finalTop = -top;\n        } else {\n          finalTop = 0;\n        }\n\n        headerPosition = finalTop;\n        finalTop += 'px';\n        setOverlayPosition(overlayRoot, finalLeft, finalTop);\n      } else {\n        headerPosition = this.getScrollPosition();\n        resetCssTransform(overlayRoot);\n      }\n\n      var positionChanged = this.adjustHeaderBordersPosition(headerPosition, skipInnerBorderAdjusting);\n      this.adjustElementsSize();\n      return positionChanged;\n    }\n    /**\n     * Sets the main overlay's vertical scroll position.\n     *\n     * @param {number} pos The scroll position.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"setScrollPosition\",\n    value: function setScrollPosition(pos) {\n      var rootWindow = this.wot.rootWindow;\n      var result = false;\n\n      if (this.mainTableScrollableElement === rootWindow && rootWindow.scrollY !== pos) {\n        rootWindow.scrollTo(getWindowScrollLeft(rootWindow), pos);\n        result = true;\n      } else if (this.mainTableScrollableElement.scrollTop !== pos) {\n        this.mainTableScrollableElement.scrollTop = pos;\n        result = true;\n      }\n\n      return result;\n    }\n    /**\n     * Triggers onScroll hook callback.\n     */\n\n  }, {\n    key: \"onScroll\",\n    value: function onScroll() {\n      this.wot.getSetting('onScrollHorizontally');\n    }\n    /**\n     * Calculates total sum cells height.\n     *\n     * @param {number} from Row index which calculates started from.\n     * @param {number} to Row index where calculation is finished.\n     * @returns {number} Height sum.\n     */\n\n  }, {\n    key: \"sumCellSizes\",\n    value: function sumCellSizes(from, to) {\n      var defaultRowHeight = this.wot.wtSettings.settings.defaultRowHeight;\n      var row = from;\n      var sum = 0;\n\n      while (row < to) {\n        var height = this.wot.wtTable.getRowHeight(row);\n        sum += height === void 0 ? defaultRowHeight : height;\n        row += 1;\n      }\n\n      return sum;\n    }\n    /**\n     * Adjust overlay root element, childs and master table element sizes (width, height).\n     *\n     * @param {boolean} [force=false] When `true`, it adjusts the DOM nodes sizes for that overlay.\n     */\n\n  }, {\n    key: \"adjustElementsSize\",\n    value: function adjustElementsSize() {\n      var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      this.updateTrimmingContainer();\n\n      if (this.needFullRender || force) {\n        this.adjustRootElementSize();\n        this.adjustRootChildrenSize();\n      }\n    }\n    /**\n     * Adjust overlay root element size (width and height).\n     */\n\n  }, {\n    key: \"adjustRootElementSize\",\n    value: function adjustRootElementSize() {\n      var _this$wot = this.wot,\n          wtTable = _this$wot.wtTable,\n          rootDocument = _this$wot.rootDocument,\n          rootWindow = _this$wot.rootWindow;\n      var scrollbarWidth = getScrollbarWidth(rootDocument);\n      var overlayRoot = this.clone.wtTable.holder.parentNode;\n      var overlayRootStyle = overlayRoot.style;\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (this.trimmingContainer !== rootWindow || preventOverflow === 'horizontal') {\n        var width = this.wot.wtViewport.getWorkspaceWidth();\n\n        if (this.wot.wtOverlays.hasScrollbarRight) {\n          width -= scrollbarWidth;\n        }\n\n        width = Math.min(width, wtTable.wtRootElement.scrollWidth);\n        overlayRootStyle.width = \"\".concat(width, \"px\");\n      } else {\n        overlayRootStyle.width = '';\n      }\n\n      this.clone.wtTable.holder.style.width = overlayRootStyle.width;\n      var tableHeight = outerHeight(this.clone.wtTable.TABLE);\n\n      if (!this.wot.wtTable.hasDefinedSize()) {\n        tableHeight = 0;\n      }\n\n      overlayRootStyle.height = \"\".concat(tableHeight, \"px\");\n    }\n    /**\n     * Adjust overlay root childs size.\n     */\n\n  }, {\n    key: \"adjustRootChildrenSize\",\n    value: function adjustRootChildrenSize() {\n      var _selections$getCell$g;\n\n      var holder = this.clone.wtTable.holder;\n      var selections = this.wot.selections;\n      var selectionCornerOffset = Math.abs((_selections$getCell$g = selections === null || selections === void 0 ? void 0 : selections.getCell().getBorder(this.wot).cornerCenterPointOffset) !== null && _selections$getCell$g !== void 0 ? _selections$getCell$g : 0);\n      this.clone.wtTable.hider.style.width = this.hider.style.width;\n      holder.style.width = holder.parentNode.style.width; // Add selection corner protruding part to the holder total height to make sure that\n      // borders' corner won't be cut after vertical scroll (#6937).\n\n      holder.style.height = \"\".concat(parseInt(holder.parentNode.style.height, 10) + selectionCornerOffset, \"px\");\n    }\n    /**\n     * Adjust the overlay dimensions and position.\n     */\n\n  }, {\n    key: \"applyToDOM\",\n    value: function applyToDOM() {\n      var total = this.wot.getSetting('totalRows');\n\n      if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') {\n        this.spreader.style.top = \"\".concat(this.wot.wtViewport.rowsRenderCalculator.startPosition, \"px\");\n      } else if (total === 0) {\n        // can happen if there are 0 rows\n        this.spreader.style.top = '0';\n      } else {\n        throw new Error('Incorrect value of the rowsRenderCalculator');\n      }\n\n      this.spreader.style.bottom = '';\n\n      if (this.needFullRender) {\n        this.syncOverlayOffset();\n      }\n    }\n    /**\n     * Synchronize calculated left position to an element.\n     */\n\n  }, {\n    key: \"syncOverlayOffset\",\n    value: function syncOverlayOffset() {\n      if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') {\n        this.clone.wtTable.spreader.style.left = \"\".concat(this.wot.wtViewport.columnsRenderCalculator.startPosition, \"px\");\n      } else {\n        this.clone.wtTable.spreader.style.left = '';\n      }\n    }\n    /**\n     * Scrolls vertically to a row.\n     *\n     * @param {number} sourceRow Row index which you want to scroll to.\n     * @param {boolean} [bottomEdge] If `true`, scrolls according to the bottom edge (top edge is by default).\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"scrollTo\",\n    value: function scrollTo(sourceRow, bottomEdge) {\n      var wot = this.wot;\n      var sourceInstance = wot.cloneSource ? wot.cloneSource : wot;\n      var mainHolder = sourceInstance.wtTable.holder;\n      var newY = this.getTableParentOffset();\n      var scrollbarCompensation = 0;\n\n      if (bottomEdge && mainHolder.offsetHeight !== mainHolder.clientHeight) {\n        scrollbarCompensation = getScrollbarWidth(wot.rootDocument);\n      }\n\n      if (bottomEdge) {\n        var fixedRowsBottom = wot.getSetting('fixedRowsBottom');\n        var totalRows = wot.getSetting('totalRows');\n        newY += this.sumCellSizes(0, sourceRow + 1);\n        newY -= wot.wtViewport.getViewportHeight() - this.sumCellSizes(totalRows - fixedRowsBottom, totalRows); // Fix 1 pixel offset when cell is selected\n\n        newY += 1;\n      } else {\n        newY += this.sumCellSizes(wot.getSetting('fixedRowsTop'), sourceRow);\n      }\n\n      newY += scrollbarCompensation;\n      return this.setScrollPosition(newY);\n    }\n    /**\n     * Gets table parent top position.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getTableParentOffset\",\n    value: function getTableParentOffset() {\n      if (this.mainTableScrollableElement === this.wot.rootWindow) {\n        return this.wot.wtTable.holderOffset.top;\n      }\n\n      return 0;\n    }\n    /**\n     * Gets the main overlay's vertical scroll position.\n     *\n     * @returns {number} Main table's vertical scroll position.\n     */\n\n  }, {\n    key: \"getScrollPosition\",\n    value: function getScrollPosition() {\n      return getScrollTop(this.mainTableScrollableElement, this.wot.rootWindow);\n    }\n    /**\n     * Adds css classes to hide the header border's header (cell-selection border hiding issue).\n     *\n     * @param {number} position Header Y position if trimming container is window or scroll top if not.\n     * @param {boolean} [skipInnerBorderAdjusting=false] If `true` the inner border adjusting will be skipped.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"adjustHeaderBordersPosition\",\n    value: function adjustHeaderBordersPosition(position) {\n      var skipInnerBorderAdjusting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var masterParent = this.wot.wtTable.holder.parentNode;\n      var totalColumns = this.wot.getSetting('totalColumns');\n\n      if (totalColumns) {\n        removeClass(masterParent, 'emptyColumns');\n      } else {\n        addClass(masterParent, 'emptyColumns');\n      }\n\n      var positionChanged = false;\n\n      if (!skipInnerBorderAdjusting) {\n        var fixedRowsTop = this.wot.getSetting('fixedRowsTop');\n        var areFixedRowsTopChanged = this.cachedFixedRowsTop !== fixedRowsTop;\n        var columnHeaders = this.wot.getSetting('columnHeaders');\n\n        if ((areFixedRowsTopChanged || fixedRowsTop === 0) && columnHeaders.length > 0) {\n          var previousState = hasClass(masterParent, 'innerBorderTop');\n          this.cachedFixedRowsTop = this.wot.getSetting('fixedRowsTop');\n\n          if (position || this.wot.getSetting('totalRows') === 0) {\n            addClass(masterParent, 'innerBorderTop');\n            positionChanged = !previousState;\n          } else {\n            removeClass(masterParent, 'innerBorderTop');\n            positionChanged = previousState;\n          }\n        }\n      }\n\n      return positionChanged;\n    }\n  }], [{\n    key: \"OVERLAY_NAME\",\n    get: function get() {\n      return CLONE_TOP;\n    }\n    /**\n     * Cached value which holds the previous value of the `fixedRowsTop` option.\n     * It is used as a comparison value that can be used to detect changes in this value.\n     *\n     * @type {number}\n     */\n\n  }]);\n\n  return TopOverlay;\n}(Overlay);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport Table from \"../table.mjs\";\nimport stickyRowsTop from \"./mixin/stickyRowsTop.mjs\";\nimport calculatedColumns from \"./mixin/calculatedColumns.mjs\";\nimport { mixin } from \"./../../../../helpers/object.mjs\";\n/**\n * Subclass of `Table` that provides the helper methods relevant to TopOverlay, implemented through mixins.\n */\n\nvar TopOverlayTable = /*#__PURE__*/function (_Table) {\n  _inherits(TopOverlayTable, _Table);\n\n  var _super = _createSuper(TopOverlayTable);\n\n  function TopOverlayTable() {\n    _classCallCheck(this, TopOverlayTable);\n\n    return _super.apply(this, arguments);\n  }\n\n  return _createClass(TopOverlayTable);\n}(Table);\n\nmixin(TopOverlayTable, stickyRowsTop);\nmixin(TopOverlayTable, calculatedColumns);\nexport default TopOverlayTable;", "function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { addClass, hasClass, removeClass, getComputedStyle, getTrimmingContainer, innerWidth, innerHeight, offset, outerHeight, outerWidth } from \"./../../../helpers/dom/element.mjs\";\nimport { stopImmediatePropagation } from \"./../../../helpers/dom/event.mjs\";\nimport { objectEach } from \"./../../../helpers/object.mjs\";\nimport { isMobileBrowser } from \"./../../../helpers/browser.mjs\";\nimport EventManager from \"./../../../eventManager.mjs\";\nimport CellCoords from \"./cell/coords.mjs\";\n/**\n *\n */\n\nvar Border = /*#__PURE__*/function () {\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance.\n   * @param {object} settings The border settings.\n   */\n  function Border(wotInstance, settings) {\n    _classCallCheck(this, Border);\n\n    if (!settings) {\n      return;\n    }\n\n    this.eventManager = new EventManager(wotInstance);\n    this.instance = wotInstance;\n    this.wot = wotInstance;\n    this.settings = settings;\n    this.mouseDown = false;\n    this.main = null;\n    this.top = null;\n    this.left = null;\n    this.bottom = null;\n    this.right = null;\n    this.topStyle = null;\n    this.leftStyle = null;\n    this.bottomStyle = null;\n    this.rightStyle = null;\n    this.cornerDefaultStyle = {\n      width: '6px',\n      height: '6px',\n      borderWidth: '1px',\n      borderStyle: 'solid',\n      borderColor: '#FFF'\n    }; // Offset to moving the corner to be centered relative to the grid.\n\n    this.cornerCenterPointOffset = -(parseInt(this.cornerDefaultStyle.width, 10) / 2);\n    this.corner = null;\n    this.cornerStyle = null;\n    this.createBorders(settings);\n    this.registerListeners();\n  }\n  /**\n   * Register all necessary events.\n   */\n\n\n  _createClass(Border, [{\n    key: \"registerListeners\",\n    value: function registerListeners() {\n      var _this2 = this;\n\n      var documentBody = this.wot.rootDocument.body;\n      this.eventManager.addEventListener(documentBody, 'mousedown', function () {\n        return _this2.onMouseDown();\n      });\n      this.eventManager.addEventListener(documentBody, 'mouseup', function () {\n        return _this2.onMouseUp();\n      });\n\n      var _loop = function _loop(c, len) {\n        var element = _this2.main.childNodes[c];\n\n        _this2.eventManager.addEventListener(element, 'mouseenter', function (event) {\n          return _this2.onMouseEnter(event, _this2.main.childNodes[c]);\n        });\n      };\n\n      for (var c = 0, len = this.main.childNodes.length; c < len; c++) {\n        _loop(c, len);\n      }\n    }\n    /**\n     * Mouse down listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMouseDown\",\n    value: function onMouseDown() {\n      this.mouseDown = true;\n    }\n    /**\n     * Mouse up listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMouseUp\",\n    value: function onMouseUp() {\n      this.mouseDown = false;\n    }\n    /**\n     * Mouse enter listener for fragment selection functionality.\n     *\n     * @private\n     * @param {Event} event Dom event.\n     * @param {HTMLElement} parentElement Part of border element.\n     */\n\n  }, {\n    key: \"onMouseEnter\",\n    value: function onMouseEnter(event, parentElement) {\n      if (!this.mouseDown || !this.wot.getSetting('hideBorderOnMouseDownOver')) {\n        return;\n      }\n\n      event.preventDefault();\n      stopImmediatePropagation(event);\n\n      var _this = this;\n\n      var documentBody = this.wot.rootDocument.body;\n      var bounds = parentElement.getBoundingClientRect(); // Hide border to prevents selection jumping when fragmentSelection is enabled.\n\n      parentElement.style.display = 'none';\n      /**\n       * @param {Event} mouseEvent The mouse event object.\n       * @returns {boolean}\n       */\n\n      function isOutside(mouseEvent) {\n        if (mouseEvent.clientY < Math.floor(bounds.top)) {\n          return true;\n        }\n\n        if (mouseEvent.clientY > Math.ceil(bounds.top + bounds.height)) {\n          return true;\n        }\n\n        if (mouseEvent.clientX < Math.floor(bounds.left)) {\n          return true;\n        }\n\n        if (mouseEvent.clientX > Math.ceil(bounds.left + bounds.width)) {\n          return true;\n        }\n      }\n      /**\n       * @param {Event} handlerEvent The mouse event object.\n       */\n\n\n      function handler(handlerEvent) {\n        if (isOutside(handlerEvent)) {\n          _this.eventManager.removeEventListener(documentBody, 'mousemove', handler);\n\n          parentElement.style.display = 'block';\n        }\n      }\n\n      this.eventManager.addEventListener(documentBody, 'mousemove', handler);\n    }\n    /**\n     * Create border elements.\n     *\n     * @param {object} settings The border settings.\n     */\n\n  }, {\n    key: \"createBorders\",\n    value: function createBorders(settings) {\n      var rootDocument = this.wot.rootDocument;\n      this.main = rootDocument.createElement('div');\n      var borderDivs = ['top', 'left', 'bottom', 'right', 'corner'];\n      var style = this.main.style;\n      style.position = 'absolute';\n      style.top = 0;\n      style.left = 0;\n\n      for (var i = 0; i < 5; i++) {\n        var position = borderDivs[i];\n        var div = rootDocument.createElement('div');\n        div.className = \"wtBorder \".concat(this.settings.className || ''); // + borderDivs[i];\n\n        if (this.settings[position] && this.settings[position].hide) {\n          div.className += ' hidden';\n        }\n\n        style = div.style;\n        style.backgroundColor = this.settings[position] && this.settings[position].color ? this.settings[position].color : settings.border.color;\n        style.height = this.settings[position] && this.settings[position].width ? \"\".concat(this.settings[position].width, \"px\") : \"\".concat(settings.border.width, \"px\");\n        style.width = this.settings[position] && this.settings[position].width ? \"\".concat(this.settings[position].width, \"px\") : \"\".concat(settings.border.width, \"px\");\n        this.main.appendChild(div);\n      }\n\n      this.top = this.main.childNodes[0];\n      this.left = this.main.childNodes[1];\n      this.bottom = this.main.childNodes[2];\n      this.right = this.main.childNodes[3];\n      this.topStyle = this.top.style;\n      this.leftStyle = this.left.style;\n      this.bottomStyle = this.bottom.style;\n      this.rightStyle = this.right.style;\n      this.corner = this.main.childNodes[4];\n      this.corner.className += ' corner';\n      this.cornerStyle = this.corner.style;\n      this.cornerStyle.width = this.cornerDefaultStyle.width;\n      this.cornerStyle.height = this.cornerDefaultStyle.height;\n      this.cornerStyle.border = [this.cornerDefaultStyle.borderWidth, this.cornerDefaultStyle.borderStyle, this.cornerDefaultStyle.borderColor].join(' ');\n\n      if (isMobileBrowser()) {\n        this.createMultipleSelectorHandles();\n      }\n\n      this.disappear();\n      var wtTable = this.wot.wtTable;\n      var bordersHolder = wtTable.bordersHolder;\n\n      if (!bordersHolder) {\n        bordersHolder = rootDocument.createElement('div');\n        bordersHolder.className = 'htBorders';\n        wtTable.bordersHolder = bordersHolder;\n        wtTable.spreader.appendChild(bordersHolder);\n      }\n\n      bordersHolder.appendChild(this.main);\n    }\n    /**\n     * Create multiple selector handler for mobile devices.\n     */\n\n  }, {\n    key: \"createMultipleSelectorHandles\",\n    value: function createMultipleSelectorHandles() {\n      var _this3 = this;\n\n      var rootDocument = this.wot.rootDocument;\n      this.selectionHandles = {\n        topLeft: rootDocument.createElement('DIV'),\n        topLeftHitArea: rootDocument.createElement('DIV'),\n        bottomRight: rootDocument.createElement('DIV'),\n        bottomRightHitArea: rootDocument.createElement('DIV')\n      };\n      var width = 10;\n      var hitAreaWidth = 40;\n      this.selectionHandles.topLeft.className = 'topLeftSelectionHandle';\n      this.selectionHandles.topLeftHitArea.className = 'topLeftSelectionHandle-HitArea';\n      this.selectionHandles.bottomRight.className = 'bottomRightSelectionHandle';\n      this.selectionHandles.bottomRightHitArea.className = 'bottomRightSelectionHandle-HitArea';\n      this.selectionHandles.styles = {\n        topLeft: this.selectionHandles.topLeft.style,\n        topLeftHitArea: this.selectionHandles.topLeftHitArea.style,\n        bottomRight: this.selectionHandles.bottomRight.style,\n        bottomRightHitArea: this.selectionHandles.bottomRightHitArea.style\n      };\n      var hitAreaStyle = {\n        position: 'absolute',\n        height: \"\".concat(hitAreaWidth, \"px\"),\n        width: \"\".concat(hitAreaWidth, \"px\"),\n        'border-radius': \"\".concat(parseInt(hitAreaWidth / 1.5, 10), \"px\")\n      };\n      objectEach(hitAreaStyle, function (value, key) {\n        _this3.selectionHandles.styles.bottomRightHitArea[key] = value;\n        _this3.selectionHandles.styles.topLeftHitArea[key] = value;\n      });\n      var handleStyle = {\n        position: 'absolute',\n        height: \"\".concat(width, \"px\"),\n        width: \"\".concat(width, \"px\"),\n        'border-radius': \"\".concat(parseInt(width / 1.5, 10), \"px\"),\n        background: '#F5F5FF',\n        border: '1px solid #4285c8'\n      };\n      objectEach(handleStyle, function (value, key) {\n        _this3.selectionHandles.styles.bottomRight[key] = value;\n        _this3.selectionHandles.styles.topLeft[key] = value;\n      });\n      this.main.appendChild(this.selectionHandles.topLeft);\n      this.main.appendChild(this.selectionHandles.bottomRight);\n      this.main.appendChild(this.selectionHandles.topLeftHitArea);\n      this.main.appendChild(this.selectionHandles.bottomRightHitArea);\n    }\n    /**\n     * @param {number} row The visual row index.\n     * @param {number} col The visual column index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isPartRange\",\n    value: function isPartRange(row, col) {\n      var areaSelection = this.wot.selections.createOrGetArea();\n\n      if (areaSelection.cellRange) {\n        if (row !== areaSelection.cellRange.to.row || col !== areaSelection.cellRange.to.col) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n    /**\n     * @param {number} row The visual row index.\n     * @param {number} col The visual column index.\n     * @param {number} top The top position of the handler.\n     * @param {number} left The left position of the handler.\n     * @param {number} width The width of the handler.\n     * @param {number} height The height of the handler.\n     */\n\n  }, {\n    key: \"updateMultipleSelectionHandlesPosition\",\n    value: function updateMultipleSelectionHandlesPosition(row, col, top, left, width, height) {\n      var handleWidth = parseInt(this.selectionHandles.styles.topLeft.width, 10);\n      var hitAreaWidth = parseInt(this.selectionHandles.styles.topLeftHitArea.width, 10);\n      this.selectionHandles.styles.topLeft.top = \"\".concat(parseInt(top - handleWidth, 10), \"px\");\n      this.selectionHandles.styles.topLeft.left = \"\".concat(parseInt(left - handleWidth, 10), \"px\");\n      this.selectionHandles.styles.topLeftHitArea.top = \"\".concat(parseInt(top - hitAreaWidth / 4 * 3, 10), \"px\");\n      this.selectionHandles.styles.topLeftHitArea.left = \"\".concat(parseInt(left - hitAreaWidth / 4 * 3, 10), \"px\");\n      this.selectionHandles.styles.bottomRight.top = \"\".concat(parseInt(top + height, 10), \"px\");\n      this.selectionHandles.styles.bottomRight.left = \"\".concat(parseInt(left + width, 10), \"px\");\n      this.selectionHandles.styles.bottomRightHitArea.top = \"\".concat(parseInt(top + height - hitAreaWidth / 4, 10), \"px\");\n      this.selectionHandles.styles.bottomRightHitArea.left = \"\".concat(parseInt(left + width - hitAreaWidth / 4, 10), \"px\");\n\n      if (this.settings.border.cornerVisible && this.settings.border.cornerVisible()) {\n        this.selectionHandles.styles.topLeft.display = 'block';\n        this.selectionHandles.styles.topLeftHitArea.display = 'block';\n\n        if (this.isPartRange(row, col)) {\n          this.selectionHandles.styles.bottomRight.display = 'none';\n          this.selectionHandles.styles.bottomRightHitArea.display = 'none';\n        } else {\n          this.selectionHandles.styles.bottomRight.display = 'block';\n          this.selectionHandles.styles.bottomRightHitArea.display = 'block';\n        }\n      } else {\n        this.selectionHandles.styles.topLeft.display = 'none';\n        this.selectionHandles.styles.bottomRight.display = 'none';\n        this.selectionHandles.styles.topLeftHitArea.display = 'none';\n        this.selectionHandles.styles.bottomRightHitArea.display = 'none';\n      }\n\n      if (row === this.wot.wtSettings.getSetting('fixedRowsTop') || col === this.wot.wtSettings.getSetting('fixedColumnsLeft')) {\n        this.selectionHandles.styles.topLeft.zIndex = '9999';\n        this.selectionHandles.styles.topLeftHitArea.zIndex = '9999';\n      } else {\n        this.selectionHandles.styles.topLeft.zIndex = '';\n        this.selectionHandles.styles.topLeftHitArea.zIndex = '';\n      }\n    }\n    /**\n     * Show border around one or many cells.\n     *\n     * @param {Array} corners The corner coordinates.\n     */\n\n  }, {\n    key: \"appear\",\n    value: function appear(corners) {\n      if (this.disabled) {\n        return;\n      }\n\n      var _this$wot = this.wot,\n          wtTable = _this$wot.wtTable,\n          rootDocument = _this$wot.rootDocument,\n          rootWindow = _this$wot.rootWindow;\n      var fromRow;\n      var toRow;\n      var fromColumn;\n      var toColumn;\n      var rowHeader;\n      var columnHeader;\n      var rowsCount = wtTable.getRenderedRowsCount();\n\n      for (var i = 0; i < rowsCount; i += 1) {\n        var s = wtTable.rowFilter.renderedToSource(i);\n\n        if (s >= corners[0] && s <= corners[2]) {\n          fromRow = s;\n          rowHeader = corners[0];\n          break;\n        }\n      }\n\n      for (var _i = rowsCount - 1; _i >= 0; _i -= 1) {\n        var _s = wtTable.rowFilter.renderedToSource(_i);\n\n        if (_s >= corners[0] && _s <= corners[2]) {\n          toRow = _s;\n          break;\n        }\n      }\n\n      var columnsCount = wtTable.getRenderedColumnsCount();\n\n      for (var _i2 = 0; _i2 < columnsCount; _i2 += 1) {\n        var _s2 = wtTable.columnFilter.renderedToSource(_i2);\n\n        if (_s2 >= corners[1] && _s2 <= corners[3]) {\n          fromColumn = _s2;\n          columnHeader = corners[1];\n          break;\n        }\n      }\n\n      for (var _i3 = columnsCount - 1; _i3 >= 0; _i3 -= 1) {\n        var _s3 = wtTable.columnFilter.renderedToSource(_i3);\n\n        if (_s3 >= corners[1] && _s3 <= corners[3]) {\n          toColumn = _s3;\n          break;\n        }\n      }\n\n      if (fromRow === void 0 || fromColumn === void 0) {\n        this.disappear();\n        return;\n      }\n\n      var fromTD = wtTable.getCell(new CellCoords(fromRow, fromColumn));\n      var isMultiple = fromRow !== toRow || fromColumn !== toColumn;\n      var toTD = isMultiple ? wtTable.getCell(new CellCoords(toRow, toColumn)) : fromTD;\n      var fromOffset = offset(fromTD);\n      var toOffset = isMultiple ? offset(toTD) : fromOffset;\n      var containerOffset = offset(wtTable.TABLE);\n      var minTop = fromOffset.top;\n      var minLeft = fromOffset.left;\n      var left = minLeft - containerOffset.left - 1;\n      var width = toOffset.left + outerWidth(toTD) - minLeft;\n\n      if (this.isEntireColumnSelected(fromRow, toRow)) {\n        var modifiedValues = this.getDimensionsFromHeader('columns', fromColumn, toColumn, rowHeader, containerOffset);\n        var fromTH = null;\n\n        if (modifiedValues) {\n          var _modifiedValues = _slicedToArray(modifiedValues, 3);\n\n          fromTH = _modifiedValues[0];\n          left = _modifiedValues[1];\n          width = _modifiedValues[2];\n        }\n\n        if (fromTH) {\n          fromTD = fromTH;\n        }\n      }\n\n      var top = minTop - containerOffset.top - 1;\n      var height = toOffset.top + outerHeight(toTD) - minTop;\n\n      if (this.isEntireRowSelected(fromColumn, toColumn)) {\n        var _modifiedValues2 = this.getDimensionsFromHeader('rows', fromRow, toRow, columnHeader, containerOffset);\n\n        var _fromTH = null;\n\n        if (_modifiedValues2) {\n          var _modifiedValues3 = _slicedToArray(_modifiedValues2, 3);\n\n          _fromTH = _modifiedValues3[0];\n          top = _modifiedValues3[1];\n          height = _modifiedValues3[2];\n        }\n\n        if (_fromTH) {\n          fromTD = _fromTH;\n        }\n      }\n\n      var style = getComputedStyle(fromTD, rootWindow);\n\n      if (parseInt(style.borderTopWidth, 10) > 0) {\n        top += 1;\n        height = height > 0 ? height - 1 : 0;\n      }\n\n      if (parseInt(style.borderLeftWidth, 10) > 0) {\n        left += 1;\n        width = width > 0 ? width - 1 : 0;\n      }\n\n      this.topStyle.top = \"\".concat(top, \"px\");\n      this.topStyle.left = \"\".concat(left, \"px\");\n      this.topStyle.width = \"\".concat(width, \"px\");\n      this.topStyle.display = 'block';\n      this.leftStyle.top = \"\".concat(top, \"px\");\n      this.leftStyle.left = \"\".concat(left, \"px\");\n      this.leftStyle.height = \"\".concat(height, \"px\");\n      this.leftStyle.display = 'block';\n      var delta = Math.floor(this.settings.border.width / 2);\n      this.bottomStyle.top = \"\".concat(top + height - delta, \"px\");\n      this.bottomStyle.left = \"\".concat(left, \"px\");\n      this.bottomStyle.width = \"\".concat(width, \"px\");\n      this.bottomStyle.display = 'block';\n      this.rightStyle.top = \"\".concat(top, \"px\");\n      this.rightStyle.left = \"\".concat(left + width - delta, \"px\");\n      this.rightStyle.height = \"\".concat(height + 1, \"px\");\n      this.rightStyle.display = 'block';\n      var cornerVisibleSetting = this.settings.border.cornerVisible;\n      cornerVisibleSetting = typeof cornerVisibleSetting === 'function' ? cornerVisibleSetting(this.settings.layerLevel) : cornerVisibleSetting;\n      var hookResult = this.wot.getSetting('onModifyGetCellCoords', toRow, toColumn);\n      var checkRow = toRow,\n          checkCol = toColumn;\n\n      if (hookResult && Array.isArray(hookResult)) {\n        var _hookResult = _slicedToArray(hookResult, 4);\n\n        checkRow = _hookResult[2];\n        checkCol = _hookResult[3];\n      }\n\n      if (isMobileBrowser() || !cornerVisibleSetting || this.isPartRange(checkRow, checkCol)) {\n        this.cornerStyle.display = 'none';\n      } else {\n        this.cornerStyle.top = \"\".concat(top + height + this.cornerCenterPointOffset - 1, \"px\");\n        this.cornerStyle.left = \"\".concat(left + width + this.cornerCenterPointOffset - 1, \"px\");\n        this.cornerStyle.borderRightWidth = this.cornerDefaultStyle.borderWidth;\n        this.cornerStyle.width = this.cornerDefaultStyle.width; // Hide the fill handle, so the possible further adjustments won't force unneeded scrollbars.\n\n        this.cornerStyle.display = 'none';\n        var trimmingContainer = getTrimmingContainer(wtTable.TABLE);\n        var trimToWindow = trimmingContainer === rootWindow;\n\n        if (trimToWindow) {\n          trimmingContainer = rootDocument.documentElement;\n        }\n\n        if (toColumn === this.wot.getSetting('totalColumns') - 1) {\n          var toTdOffsetLeft = trimToWindow ? toTD.getBoundingClientRect().left : toTD.offsetLeft;\n          var cornerRightEdge = toTdOffsetLeft + outerWidth(toTD) + parseInt(this.cornerDefaultStyle.width, 10) / 2;\n          var cornerOverlappingContainer = cornerRightEdge >= innerWidth(trimmingContainer);\n\n          if (cornerOverlappingContainer) {\n            this.cornerStyle.left = \"\".concat(Math.floor(left + width + this.cornerCenterPointOffset - parseInt(this.cornerDefaultStyle.width, 10) / 2), \"px\"); // eslint-disable-line max-len\n\n            this.cornerStyle.borderRightWidth = 0;\n          }\n        }\n\n        if (toRow === this.wot.getSetting('totalRows') - 1) {\n          var toTdOffsetTop = trimToWindow ? toTD.getBoundingClientRect().top : toTD.offsetTop;\n          var cornerBottomEdge = toTdOffsetTop + outerHeight(toTD) + parseInt(this.cornerDefaultStyle.height, 10) / 2;\n\n          var _cornerOverlappingContainer = cornerBottomEdge >= innerHeight(trimmingContainer);\n\n          if (_cornerOverlappingContainer) {\n            this.cornerStyle.top = \"\".concat(Math.floor(top + height + this.cornerCenterPointOffset - parseInt(this.cornerDefaultStyle.height, 10) / 2), \"px\"); // eslint-disable-line max-len\n\n            this.cornerStyle.borderBottomWidth = 0;\n          }\n        }\n\n        this.cornerStyle.display = 'block';\n      }\n\n      if (isMobileBrowser()) {\n        this.updateMultipleSelectionHandlesPosition(toRow, toColumn, top, left, width, height);\n      }\n    }\n    /**\n     * Check whether an entire column of cells is selected.\n     *\n     * @private\n     * @param {number} startRowIndex Start row index.\n     * @param {number} endRowIndex End row index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isEntireColumnSelected\",\n    value: function isEntireColumnSelected(startRowIndex, endRowIndex) {\n      return startRowIndex === this.wot.wtTable.getFirstRenderedRow() && endRowIndex === this.wot.wtTable.getLastRenderedRow();\n    }\n    /**\n     * Check whether an entire row of cells is selected.\n     *\n     * @private\n     * @param {number} startColumnIndex Start column index.\n     * @param {number} endColumnIndex End column index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isEntireRowSelected\",\n    value: function isEntireRowSelected(startColumnIndex, endColumnIndex) {\n      return startColumnIndex === this.wot.wtTable.getFirstRenderedColumn() && endColumnIndex === this.wot.wtTable.getLastRenderedColumn();\n    }\n    /**\n     * Get left/top index and width/height depending on the `direction` provided.\n     *\n     * @private\n     * @param {string} direction `rows` or `columns`, defines if an entire column or row is selected.\n     * @param {number} fromIndex Start index of the selection.\n     * @param {number} toIndex End index of the selection.\n     * @param {number} headerIndex The header index as negative value.\n     * @param {number} containerOffset Offset of the container.\n     * @returns {Array|boolean} Returns an array of [headerElement, left, width] or [headerElement, top, height], depending on `direction` (`false` in case of an error getting the headers).\n     */\n\n  }, {\n    key: \"getDimensionsFromHeader\",\n    value: function getDimensionsFromHeader(direction, fromIndex, toIndex, headerIndex, containerOffset) {\n      var wtTable = this.wot.wtTable;\n      var rootHotElement = wtTable.wtRootElement.parentNode;\n      var getHeaderFn = null;\n      var dimensionFn = null;\n      var entireSelectionClassname = null;\n      var index = null;\n      var dimension = null;\n      var dimensionProperty = null;\n      var startHeader = null;\n      var endHeader = null;\n\n      switch (direction) {\n        case 'rows':\n          getHeaderFn = function getHeaderFn() {\n            return wtTable.getRowHeader.apply(wtTable, arguments);\n          };\n\n          dimensionFn = function dimensionFn() {\n            return outerHeight.apply(void 0, arguments);\n          };\n\n          entireSelectionClassname = 'ht__selection--rows';\n          dimensionProperty = 'top';\n          break;\n\n        case 'columns':\n          getHeaderFn = function getHeaderFn() {\n            return wtTable.getColumnHeader.apply(wtTable, arguments);\n          };\n\n          dimensionFn = function dimensionFn() {\n            return outerWidth.apply(void 0, arguments);\n          };\n\n          entireSelectionClassname = 'ht__selection--columns';\n          dimensionProperty = 'left';\n          break;\n\n        default:\n      }\n\n      if (rootHotElement.classList.contains(entireSelectionClassname)) {\n        var columnHeaderLevelCount = this.wot.getSetting('columnHeaders').length;\n        startHeader = getHeaderFn(fromIndex, columnHeaderLevelCount - headerIndex);\n        endHeader = getHeaderFn(toIndex, columnHeaderLevelCount - headerIndex);\n\n        if (!startHeader || !endHeader) {\n          return false;\n        }\n\n        var startHeaderOffset = offset(startHeader);\n        var endOffset = offset(endHeader);\n\n        if (startHeader && endHeader) {\n          index = startHeaderOffset[dimensionProperty] - containerOffset[dimensionProperty] - 1;\n          dimension = endOffset[dimensionProperty] + dimensionFn(endHeader) - startHeaderOffset[dimensionProperty];\n        }\n\n        return [startHeader, index, dimension];\n      }\n\n      return false;\n    }\n    /**\n     * Change border style.\n     *\n     * @private\n     * @param {string} borderElement Coordinate where add/remove border: top, right, bottom, left.\n     * @param {object} border The border object descriptor.\n     */\n\n  }, {\n    key: \"changeBorderStyle\",\n    value: function changeBorderStyle(borderElement, border) {\n      var style = this[borderElement].style;\n      var borderStyle = border[borderElement];\n\n      if (!borderStyle || borderStyle.hide) {\n        addClass(this[borderElement], 'hidden');\n      } else {\n        if (hasClass(this[borderElement], 'hidden')) {\n          removeClass(this[borderElement], 'hidden');\n        }\n\n        style.backgroundColor = borderStyle.color;\n\n        if (borderElement === 'top' || borderElement === 'bottom') {\n          style.height = \"\".concat(borderStyle.width, \"px\");\n        }\n\n        if (borderElement === 'right' || borderElement === 'left') {\n          style.width = \"\".concat(borderStyle.width, \"px\");\n        }\n      }\n    }\n    /**\n     * Change border style to default.\n     *\n     * @private\n     * @param {string} position The position type (\"top\", \"bottom\", \"left\", \"right\") to change.\n     */\n\n  }, {\n    key: \"changeBorderToDefaultStyle\",\n    value: function changeBorderToDefaultStyle(position) {\n      var defaultBorder = {\n        width: 1,\n        color: '#000'\n      };\n      var style = this[position].style;\n      style.backgroundColor = defaultBorder.color;\n      style.width = \"\".concat(defaultBorder.width, \"px\");\n      style.height = \"\".concat(defaultBorder.width, \"px\");\n    }\n    /**\n     * Toggle class 'hidden' to element.\n     *\n     * @private\n     * @param {string} borderElement Coordinate where add/remove border: top, right, bottom, left.\n     * @param {boolean} [remove] Defines type of the action to perform.\n     */\n\n  }, {\n    key: \"toggleHiddenClass\",\n    value: function toggleHiddenClass(borderElement, remove) {\n      this.changeBorderToDefaultStyle(borderElement);\n\n      if (remove) {\n        addClass(this[borderElement], 'hidden');\n      } else {\n        removeClass(this[borderElement], 'hidden');\n      }\n    }\n    /**\n     * Hide border.\n     */\n\n  }, {\n    key: \"disappear\",\n    value: function disappear() {\n      this.topStyle.display = 'none';\n      this.leftStyle.display = 'none';\n      this.bottomStyle.display = 'none';\n      this.rightStyle.display = 'none';\n      this.cornerStyle.display = 'none';\n\n      if (isMobileBrowser()) {\n        this.selectionHandles.styles.topLeft.display = 'none';\n        this.selectionHandles.styles.bottomRight.display = 'none';\n      }\n    }\n    /**\n     * Cleans up all the DOM state related to a Border instance. Call this prior to deleting a Border instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.eventManager.destroyWithOwnEventsOnly();\n      this.main.parentNode.removeChild(this.main);\n    }\n  }]);\n\n  return Border;\n}();\n\nexport default Border;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport { closestDown, hasClass, isChildOf, getParent } from \"./../../../helpers/dom/element.mjs\";\nimport { partial } from \"./../../../helpers/function.mjs\";\nimport { isTouchSupported } from \"./../../../helpers/feature.mjs\";\nimport { isMobileBrowser, isChromeWebKit, isFirefoxWebKit, isIOS } from \"./../../../helpers/browser.mjs\";\nimport EventManager from \"./../../../eventManager.mjs\";\nimport { isDefined } from \"../../../helpers/mixed.mjs\";\nvar privatePool = new WeakMap();\n/**\n * @class Event\n */\n\nvar Event = /*#__PURE__*/function () {\n  /**\n   * @param {*} instance Walkontable instance.\n   */\n  function Event(instance) {\n    _classCallCheck(this, Event);\n\n    /**\n     * Instance of {@link Walkontable}.\n     *\n     * @private\n     * @type {Walkontable}\n     */\n    this.instance = instance;\n    /**\n     * Instance of {@link EventManager}.\n     *\n     * @private\n     * @type {EventManager}\n     */\n\n    this.eventManager = new EventManager(instance);\n    privatePool.set(this, {\n      selectedCellBeforeTouchEnd: void 0,\n      dblClickTimeout: [null, null],\n      dblClickOrigin: [null, null]\n    });\n    this.registerEvents();\n  }\n  /**\n   * Adds listeners for mouse and touch events.\n   *\n   * @private\n   */\n\n\n  _createClass(Event, [{\n    key: \"registerEvents\",\n    value: function registerEvents() {\n      var _this = this;\n\n      this.eventManager.addEventListener(this.instance.wtTable.holder, 'contextmenu', function (event) {\n        return _this.onContextMenu(event);\n      });\n      this.eventManager.addEventListener(this.instance.wtTable.TABLE, 'mouseover', function (event) {\n        return _this.onMouseOver(event);\n      });\n      this.eventManager.addEventListener(this.instance.wtTable.TABLE, 'mouseout', function (event) {\n        return _this.onMouseOut(event);\n      });\n\n      var initTouchEvents = function initTouchEvents() {\n        _this.eventManager.addEventListener(_this.instance.wtTable.holder, 'touchstart', function (event) {\n          return _this.onTouchStart(event);\n        });\n\n        _this.eventManager.addEventListener(_this.instance.wtTable.holder, 'touchend', function (event) {\n          return _this.onTouchEnd(event);\n        });\n\n        if (!_this.instance.momentumScrolling) {\n          _this.instance.momentumScrolling = {};\n        }\n\n        _this.eventManager.addEventListener(_this.instance.wtTable.holder, 'scroll', function () {\n          clearTimeout(_this.instance.momentumScrolling._timeout);\n\n          if (!_this.instance.momentumScrolling.ongoing) {\n            _this.instance.getSetting('onBeforeTouchScroll');\n          }\n\n          _this.instance.momentumScrolling.ongoing = true;\n          _this.instance.momentumScrolling._timeout = setTimeout(function () {\n            if (!_this.instance.touchApplied) {\n              _this.instance.momentumScrolling.ongoing = false;\n\n              _this.instance.getSetting('onAfterMomentumScroll');\n            }\n          }, 200);\n        });\n      };\n\n      var initMouseEvents = function initMouseEvents() {\n        _this.eventManager.addEventListener(_this.instance.wtTable.holder, 'mouseup', function (event) {\n          return _this.onMouseUp(event);\n        });\n\n        _this.eventManager.addEventListener(_this.instance.wtTable.holder, 'mousedown', function (event) {\n          return _this.onMouseDown(event);\n        });\n      };\n\n      if (isMobileBrowser()) {\n        initTouchEvents();\n      } else {\n        // PC like devices which support both methods (touchscreen and ability to plug-in mouse).\n        if (isTouchSupported()) {\n          initTouchEvents();\n        }\n\n        initMouseEvents();\n      }\n    }\n    /**\n     * Checks if an element is already selected.\n     *\n     * @private\n     * @param {Element} touchTarget An element to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"selectedCellWasTouched\",\n    value: function selectedCellWasTouched(touchTarget) {\n      var priv = privatePool.get(this);\n      var cellUnderFinger = this.parentCell(touchTarget);\n      var coordsOfCellUnderFinger = cellUnderFinger.coords;\n\n      if (priv.selectedCellBeforeTouchEnd && coordsOfCellUnderFinger) {\n        var _ref = [coordsOfCellUnderFinger.row, priv.selectedCellBeforeTouchEnd.from.row],\n            rowTouched = _ref[0],\n            rowSelected = _ref[1];\n        var _ref2 = [coordsOfCellUnderFinger.col, priv.selectedCellBeforeTouchEnd.from.col],\n            colTouched = _ref2[0],\n            colSelected = _ref2[1];\n        return rowTouched === rowSelected && colTouched === colSelected;\n      }\n\n      return false;\n    }\n    /**\n     * Gets closest TD or TH element.\n     *\n     * @private\n     * @param {Element} elem An element from the traversing starts.\n     * @returns {object} Contains coordinates and reference to TD or TH if it exists. Otherwise it's empty object.\n     */\n\n  }, {\n    key: \"parentCell\",\n    value: function parentCell(elem) {\n      var cell = {};\n      var TABLE = this.instance.wtTable.TABLE;\n      var TD = closestDown(elem, ['TD', 'TH'], TABLE);\n\n      if (TD) {\n        cell.coords = this.instance.wtTable.getCoords(TD);\n        cell.TD = TD;\n      } else if (hasClass(elem, 'wtBorder') && hasClass(elem, 'current')) {\n        cell.coords = this.instance.selections.getCell().cellRange.highlight;\n        cell.TD = this.instance.wtTable.getCell(cell.coords);\n      } else if (hasClass(elem, 'wtBorder') && hasClass(elem, 'area')) {\n        if (this.instance.selections.createOrGetArea().cellRange) {\n          cell.coords = this.instance.selections.createOrGetArea().cellRange.to;\n          cell.TD = this.instance.wtTable.getCell(cell.coords);\n        }\n      }\n\n      return cell;\n    }\n    /**\n     * OnMouseDown callback.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event object.\n     */\n\n  }, {\n    key: \"onMouseDown\",\n    value: function onMouseDown(event) {\n      var priv = privatePool.get(this);\n      var activeElement = this.instance.rootDocument.activeElement;\n      var getParentNode = partial(getParent, event.target);\n      var realTarget = event.target; // ignore focusable element from mouse down processing (https://github.com/handsontable/handsontable/issues/3555)\n\n      if (realTarget === activeElement || getParentNode(0) === activeElement || getParentNode(1) === activeElement) {\n        return;\n      }\n\n      var cell = this.parentCell(realTarget);\n\n      if (hasClass(realTarget, 'corner')) {\n        this.instance.getSetting('onCellCornerMouseDown', event, realTarget);\n      } else if (cell.TD && this.instance.hasSetting('onCellMouseDown')) {\n        this.instance.getSetting('onCellMouseDown', event, cell.coords, cell.TD, this.instance);\n      } // doubleclick reacts only for left mouse button or from touch events\n\n\n      if ((event.button === 0 || this.instance.touchApplied) && cell.TD) {\n        priv.dblClickOrigin[0] = cell.TD;\n        clearTimeout(priv.dblClickTimeout[0]);\n        priv.dblClickTimeout[0] = setTimeout(function () {\n          priv.dblClickOrigin[0] = null;\n        }, 1000);\n      }\n    }\n    /**\n     * OnContextMenu callback.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event object.\n     */\n\n  }, {\n    key: \"onContextMenu\",\n    value: function onContextMenu(event) {\n      if (this.instance.hasSetting('onCellContextMenu')) {\n        var cell = this.parentCell(event.target);\n\n        if (cell.TD) {\n          this.instance.getSetting('onCellContextMenu', event, cell.coords, cell.TD, this.instance);\n        }\n      }\n    }\n    /**\n     * OnMouseOver callback.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event object.\n     */\n\n  }, {\n    key: \"onMouseOver\",\n    value: function onMouseOver(event) {\n      if (!this.instance.hasSetting('onCellMouseOver')) {\n        return;\n      }\n\n      var table = this.instance.wtTable.TABLE;\n      var td = closestDown(event.target, ['TD', 'TH'], table);\n      var mainWOT = this.instance.cloneSource || this.instance;\n\n      if (td && td !== mainWOT.lastMouseOver && isChildOf(td, table)) {\n        mainWOT.lastMouseOver = td;\n        this.instance.getSetting('onCellMouseOver', event, this.instance.wtTable.getCoords(td), td, this.instance);\n      }\n    }\n    /**\n     * OnMouseOut callback.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event object.\n     */\n\n  }, {\n    key: \"onMouseOut\",\n    value: function onMouseOut(event) {\n      if (!this.instance.hasSetting('onCellMouseOut')) {\n        return;\n      }\n\n      var table = this.instance.wtTable.TABLE;\n      var lastTD = closestDown(event.target, ['TD', 'TH'], table);\n      var nextTD = closestDown(event.relatedTarget, ['TD', 'TH'], table);\n\n      if (lastTD && lastTD !== nextTD && isChildOf(lastTD, table)) {\n        this.instance.getSetting('onCellMouseOut', event, this.instance.wtTable.getCoords(lastTD), lastTD, this.instance);\n      }\n    }\n    /**\n     * OnMouseUp callback.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event object.\n     */\n\n  }, {\n    key: \"onMouseUp\",\n    value: function onMouseUp(event) {\n      var priv = privatePool.get(this);\n      var cell = this.parentCell(event.target);\n\n      if (cell.TD && this.instance.hasSetting('onCellMouseUp')) {\n        this.instance.getSetting('onCellMouseUp', event, cell.coords, cell.TD, this.instance);\n      } // if not left mouse button, and the origin event is not comes from touch\n\n\n      if (event.button !== 0 && !this.instance.touchApplied) {\n        return;\n      }\n\n      if (cell.TD === priv.dblClickOrigin[0] && cell.TD === priv.dblClickOrigin[1]) {\n        if (hasClass(event.target, 'corner')) {\n          this.instance.getSetting('onCellCornerDblClick', event, cell.coords, cell.TD, this.instance);\n        } else {\n          this.instance.getSetting('onCellDblClick', event, cell.coords, cell.TD, this.instance);\n        }\n\n        priv.dblClickOrigin[0] = null;\n        priv.dblClickOrigin[1] = null;\n      } else if (cell.TD === priv.dblClickOrigin[0]) {\n        priv.dblClickOrigin[1] = cell.TD;\n        clearTimeout(priv.dblClickTimeout[1]);\n        priv.dblClickTimeout[1] = setTimeout(function () {\n          priv.dblClickOrigin[1] = null;\n        }, 500);\n      }\n    }\n    /**\n     * OnTouchStart callback. Simulates mousedown event.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event object.\n     */\n\n  }, {\n    key: \"onTouchStart\",\n    value: function onTouchStart(event) {\n      var priv = privatePool.get(this);\n      priv.selectedCellBeforeTouchEnd = this.instance.selections.getCell().cellRange;\n      this.instance.touchApplied = true;\n      this.onMouseDown(event);\n    }\n    /**\n     * OnTouchEnd callback. Simulates mouseup event.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event object.\n     */\n\n  }, {\n    key: \"onTouchEnd\",\n    value: function onTouchEnd(event) {\n      var _this$parentCell;\n\n      var target = event.target;\n      var parentCellCoords = (_this$parentCell = this.parentCell(target)) === null || _this$parentCell === void 0 ? void 0 : _this$parentCell.coords;\n      var isCellsRange = isDefined(parentCellCoords) && parentCellCoords.row >= 0 && parentCellCoords.col >= 0;\n      var isEventCancelable = event.cancelable && isCellsRange && this.instance.getSetting('isDataViewInstance'); // To prevent accidental redirects or other actions that the interactive elements (e.q \"A\" link) do\n      // while the cell is highlighted, all touch events that are triggered on different cells are\n      // \"preventDefault\"'ed. The user can interact with the element (e.q. click on the link that opens\n      // a new page) only when the same cell was previously selected (see related PR #7980).\n\n      if (isEventCancelable) {\n        var interactiveElements = ['A', 'BUTTON', 'INPUT']; // For browsers that use the WebKit as an engine (excluding Safari), there is a bug. The prevent\n        // default has to be called all the time. Otherwise, the second tap won't be triggered (probably\n        // caused by the native ~300ms delay - https://webkit.org/blog/5610/more-responsive-tapping-on-ios/).\n        // To make the interactive elements work, the event target element has to be check. If the element\n        // matches the allow-list, the event is not prevented.\n\n        if (isIOS() && (isChromeWebKit() || isFirefoxWebKit()) && this.selectedCellWasTouched(target) && !interactiveElements.includes(target.tagName)) {\n          event.preventDefault();\n        } else if (!this.selectedCellWasTouched(target)) {\n          // For other browsers, prevent default is fired only for the first tap and only when the previous\n          // highlighted cell was different.\n          event.preventDefault();\n        }\n      }\n\n      this.onMouseUp(event);\n      this.instance.touchApplied = false;\n    }\n    /**\n     * Clears double-click timeouts and destroys the internal eventManager instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var priv = privatePool.get(this);\n      clearTimeout(priv.dblClickTimeout[0]);\n      clearTimeout(priv.dblClickTimeout[1]);\n      this.eventManager.destroy();\n    }\n  }]);\n\n  return Event;\n}();\n\nexport default Event;", "import \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport { arrayEach } from \"./array.mjs\";\nimport { isMacOS, isFirefox } from \"./browser.mjs\";\nexport var KEY_CODES = {\n  ALT: 18,\n  ARROW_DOWN: 40,\n  ARROW_LEFT: 37,\n  ARROW_RIGHT: 39,\n  ARROW_UP: 38,\n  AUDIO_DOWN: isFirefox() ? 182 : 174,\n  AUDIO_MUTE: isFirefox() ? 181 : 173,\n  AUDIO_UP: isFirefox() ? 183 : 175,\n  BACKSPACE: 8,\n  CAPS_LOCK: 20,\n  COMMA: 188,\n  COMMAND_LEFT: 91,\n  COMMAND_RIGHT: 93,\n  COMMAND_FIREFOX: 224,\n  CONTROL: 17,\n  DELETE: 46,\n  END: 35,\n  ENTER: 13,\n  ESCAPE: 27,\n  F1: 112,\n  F2: 113,\n  F3: 114,\n  F4: 115,\n  F5: 116,\n  F6: 117,\n  F7: 118,\n  F8: 119,\n  F9: 120,\n  F10: 121,\n  F11: 122,\n  F12: 123,\n  F13: 124,\n  F14: 125,\n  F15: 126,\n  F16: 127,\n  F17: 128,\n  F18: 129,\n  F19: 130,\n  HOME: 36,\n  INSERT: 45,\n  MEDIA_NEXT: 176,\n  MEDIA_PLAY_PAUSE: 179,\n  MEDIA_PREV: 177,\n  MEDIA_STOP: 178,\n  NULL: 0,\n  NUM_LOCK: 144,\n  PAGE_DOWN: 34,\n  PAGE_UP: 33,\n  PAUSE: 19,\n  PERIOD: 190,\n  SCROLL_LOCK: 145,\n  SHIFT: 16,\n  SPACE: 32,\n  TAB: 9,\n  A: 65,\n  C: 67,\n  D: 68,\n  F: 70,\n  L: 76,\n  O: 79,\n  P: 80,\n  S: 83,\n  V: 86,\n  X: 88,\n  Y: 89,\n  Z: 90\n};\nvar FUNCTION_KEYS = [KEY_CODES.ALT, KEY_CODES.ARROW_DOWN, KEY_CODES.ARROW_LEFT, KEY_CODES.ARROW_RIGHT, KEY_CODES.ARROW_UP, KEY_CODES.AUDIO_DOWN, KEY_CODES.AUDIO_MUTE, KEY_CODES.AUDIO_UP, KEY_CODES.BACKSPACE, KEY_CODES.CAPS_LOCK, KEY_CODES.DELETE, KEY_CODES.END, KEY_CODES.ENTER, KEY_CODES.ESCAPE, KEY_CODES.F1, KEY_CODES.F2, KEY_CODES.F3, KEY_CODES.F4, KEY_CODES.F5, KEY_CODES.F6, KEY_CODES.F7, KEY_CODES.F8, KEY_CODES.F9, KEY_CODES.F10, KEY_CODES.F11, KEY_CODES.F12, KEY_CODES.F13, KEY_CODES.F14, KEY_CODES.F15, KEY_CODES.F16, KEY_CODES.F17, KEY_CODES.F18, KEY_CODES.F19, KEY_CODES.HOME, KEY_CODES.INSERT, KEY_CODES.MEDIA_NEXT, KEY_CODES.MEDIA_PLAY_PAUSE, KEY_CODES.MEDIA_PREV, KEY_CODES.MEDIA_STOP, KEY_CODES.NULL, KEY_CODES.NUM_LOCK, KEY_CODES.PAGE_DOWN, KEY_CODES.PAGE_UP, KEY_CODES.PAUSE, KEY_CODES.SCROLL_LOCK, KEY_CODES.SHIFT, KEY_CODES.TAB];\n/**\n * Returns true if keyCode represents a printable character.\n *\n * @param {number} keyCode The keyboard key code.\n * @returns {boolean}\n */\n\nexport function isPrintableChar(keyCode) {\n  return keyCode === 32 || // space\n  keyCode >= 48 && keyCode <= 57 || // 0-9\n  keyCode >= 96 && keyCode <= 111 || // numpad\n  keyCode >= 186 && keyCode <= 192 || // ;=,-./`\n  keyCode >= 219 && keyCode <= 222 || // []{}\\|\"'\n  keyCode >= 226 || // special chars (229 for Asian chars)\n  keyCode >= 65 && keyCode <= 90; // a-z\n}\n/**\n * @param {number} keyCode The keyboard key code.\n * @returns {boolean}\n */\n\nexport function isFunctionKey(keyCode) {\n  return FUNCTION_KEYS.includes(keyCode);\n}\n/**\n * Checks if passed key code is ctrl or cmd key. Depends on what OS the code runs it check key code based on\n * different meta key codes.\n *\n * @param {number} keyCode The keyboard key code.\n * @returns {boolean}\n */\n\nexport function isCtrlKey(keyCode) {\n  var keys = [];\n\n  if (isMacOS()) {\n    keys.push(KEY_CODES.COMMAND_LEFT, KEY_CODES.COMMAND_RIGHT, KEY_CODES.COMMAND_FIREFOX);\n  } else {\n    keys.push(KEY_CODES.CONTROL);\n  }\n\n  return keys.includes(keyCode);\n}\n/**\n * Checks if passed key code is ctrl or cmd key. This helper checks if the key code matches to meta keys\n * regardless of the OS on which it is running.\n *\n * @param {number} keyCode The keyboard key code.\n * @returns {boolean}\n */\n\nexport function isCtrlMetaKey(keyCode) {\n  return [KEY_CODES.CONTROL, KEY_CODES.COMMAND_LEFT, KEY_CODES.COMMAND_RIGHT, KEY_CODES.COMMAND_FIREFOX].includes(keyCode);\n}\n/**\n * @param {number} keyCode The keyboard key code.\n * @param {string} baseCode The list of the key codes to compare with.\n * @returns {boolean}\n */\n\nexport function isKey(keyCode, baseCode) {\n  var keys = baseCode.split('|');\n  var result = false;\n  arrayEach(keys, function (key) {\n    if (keyCode === KEY_CODES[key]) {\n      result = true;\n      return false;\n    }\n  });\n  return result;\n}", "import \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.timers.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { getScrollableElement, getScrollbarWidth } from \"./../../../helpers/dom/element.mjs\";\nimport { arrayEach } from \"./../../../helpers/array.mjs\";\nimport { isKey } from \"./../../../helpers/unicode.mjs\";\nimport { isChrome } from \"./../../../helpers/browser.mjs\";\nimport EventManager from \"./../../../eventManager.mjs\";\nimport { CLONE_BOTTOM_LEFT_CORNER, CLONE_BOTTOM, CLONE_LEFT, CLONE_TOP_LEFT_CORNER, CLONE_TOP, LeftOverlay, TopOverlay, TopLeftCornerOverlay, BottomOverlay, BottomLeftCornerOverlay, registerOverlayOnce, createOverlay, hasOverlay } from \"./overlay/index.mjs\";\nregisterOverlayOnce(BottomLeftCornerOverlay);\nregisterOverlayOnce(BottomOverlay);\nregisterOverlayOnce(LeftOverlay);\nregisterOverlayOnce(TopLeftCornerOverlay);\nregisterOverlayOnce(TopOverlay);\n/**\n * @class Overlays\n */\n\nvar Overlays = /*#__PURE__*/function () {\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance.\n   */\n  function Overlays(wotInstance) {\n    _classCallCheck(this, Overlays);\n\n    /**\n     * Walkontable instance's reference.\n     *\n     * @private\n     * @type {Walkontable}\n     */\n    this.wot = wotInstance;\n    var _this$wot = this.wot,\n        rootDocument = _this$wot.rootDocument,\n        rootWindow = _this$wot.rootWindow,\n        wtTable = _this$wot.wtTable;\n    /**\n     * Sometimes `line-height` might be set to 'normal'. In that case, a default `font-size` should be multiplied by roughly 1.2.\n     * Https://developer.mozilla.org/pl/docs/Web/CSS/line-height#Values.\n     */\n\n    var BODY_LINE_HEIGHT = parseInt(rootWindow.getComputedStyle(rootDocument.body).lineHeight, 10);\n    var FALLBACK_BODY_LINE_HEIGHT = parseInt(rootWindow.getComputedStyle(rootDocument.body).fontSize, 10) * 1.2; // legacy support\n\n    this.instance = this.wot;\n    this.eventManager = new EventManager(this.wot);\n    this.scrollbarSize = getScrollbarWidth(rootDocument);\n    this.wot.update('scrollbarWidth', this.scrollbarSize);\n    this.wot.update('scrollbarHeight', this.scrollbarSize);\n    var isOverflowHidden = rootWindow.getComputedStyle(wtTable.wtRootElement.parentNode).getPropertyValue('overflow') === 'hidden';\n    this.scrollableElement = isOverflowHidden ? wtTable.holder : getScrollableElement(wtTable.TABLE);\n    this.topOverlay = void 0;\n    this.bottomOverlay = void 0;\n    this.leftOverlay = void 0;\n    this.topLeftCornerOverlay = void 0;\n    this.bottomLeftCornerOverlay = void 0;\n    this.prepareOverlays();\n    this.hasScrollbarBottom = false;\n    this.hasScrollbarRight = false;\n    this.destroyed = false;\n    this.keyPressed = false;\n    this.spreaderLastSize = {\n      width: null,\n      height: null\n    };\n    this.verticalScrolling = false;\n    this.horizontalScrolling = false;\n    this.browserLineHeight = BODY_LINE_HEIGHT || FALLBACK_BODY_LINE_HEIGHT;\n    this.registerListeners();\n    this.lastScrollX = rootWindow.scrollX;\n    this.lastScrollY = rootWindow.scrollY;\n  }\n  /**\n   * Prepare overlays based on user settings.\n   *\n   * @returns {boolean} Returns `true` if changes applied to overlay needs scroll synchronization.\n   */\n\n\n  _createClass(Overlays, [{\n    key: \"prepareOverlays\",\n    value: function prepareOverlays() {\n      var syncScroll = false;\n\n      if (this.topOverlay) {\n        syncScroll = this.topOverlay.updateStateOfRendering() || syncScroll;\n      } else {\n        this.topOverlay = createOverlay(CLONE_TOP, this.wot);\n      }\n\n      if (!hasOverlay(CLONE_BOTTOM)) {\n        this.bottomOverlay = {\n          needFullRender: false,\n          updateStateOfRendering: function updateStateOfRendering() {\n            return false;\n          }\n        };\n      }\n\n      if (!hasOverlay(CLONE_BOTTOM_LEFT_CORNER)) {\n        this.bottomLeftCornerOverlay = {\n          needFullRender: false,\n          updateStateOfRendering: function updateStateOfRendering() {\n            return false;\n          }\n        };\n      }\n\n      if (this.bottomOverlay) {\n        syncScroll = this.bottomOverlay.updateStateOfRendering() || syncScroll;\n      } else {\n        this.bottomOverlay = createOverlay(CLONE_BOTTOM, this.wot);\n      }\n\n      if (this.leftOverlay) {\n        syncScroll = this.leftOverlay.updateStateOfRendering() || syncScroll;\n      } else {\n        this.leftOverlay = createOverlay(CLONE_LEFT, this.wot);\n      }\n\n      if (this.topOverlay.needFullRender && this.leftOverlay.needFullRender) {\n        if (this.topLeftCornerOverlay) {\n          syncScroll = this.topLeftCornerOverlay.updateStateOfRendering() || syncScroll;\n        } else {\n          this.topLeftCornerOverlay = createOverlay(CLONE_TOP_LEFT_CORNER, this.wot);\n        }\n      }\n\n      if (this.bottomOverlay.needFullRender && this.leftOverlay.needFullRender) {\n        if (this.bottomLeftCornerOverlay) {\n          syncScroll = this.bottomLeftCornerOverlay.updateStateOfRendering() || syncScroll;\n        } else {\n          this.bottomLeftCornerOverlay = createOverlay(CLONE_BOTTOM_LEFT_CORNER, this.wot);\n        }\n      }\n\n      return syncScroll;\n    }\n    /**\n     * Refresh and redraw table.\n     */\n\n  }, {\n    key: \"refreshAll\",\n    value: function refreshAll() {\n      if (!this.wot.drawn) {\n        return;\n      }\n\n      if (!this.wot.wtTable.holder.parentNode) {\n        // Walkontable was detached from DOM, but this handler was not removed\n        this.destroy();\n        return;\n      }\n\n      this.wot.draw(true);\n\n      if (this.verticalScrolling) {\n        this.leftOverlay.onScroll();\n      }\n\n      if (this.horizontalScrolling) {\n        this.topOverlay.onScroll();\n      }\n\n      this.verticalScrolling = false;\n      this.horizontalScrolling = false;\n    }\n    /**\n     * Register all necessary event listeners.\n     */\n\n  }, {\n    key: \"registerListeners\",\n    value: function registerListeners() {\n      var _this = this;\n\n      var _this$wot2 = this.wot,\n          rootDocument = _this$wot2.rootDocument,\n          rootWindow = _this$wot2.rootWindow;\n      var topOverlayScrollableElement = this.topOverlay.mainTableScrollableElement;\n      var leftOverlayScrollableElement = this.leftOverlay.mainTableScrollableElement;\n      this.eventManager.addEventListener(rootDocument.documentElement, 'keydown', function (event) {\n        return _this.onKeyDown(event);\n      });\n      this.eventManager.addEventListener(rootDocument.documentElement, 'keyup', function () {\n        return _this.onKeyUp();\n      });\n      this.eventManager.addEventListener(rootDocument, 'visibilitychange', function () {\n        return _this.onKeyUp();\n      });\n      this.eventManager.addEventListener(topOverlayScrollableElement, 'scroll', function (event) {\n        return _this.onTableScroll(event);\n      }, {\n        passive: true\n      });\n\n      if (topOverlayScrollableElement !== leftOverlayScrollableElement) {\n        this.eventManager.addEventListener(leftOverlayScrollableElement, 'scroll', function (event) {\n          return _this.onTableScroll(event);\n        }, {\n          passive: true\n        });\n      }\n\n      var isHighPixelRatio = rootWindow.devicePixelRatio && rootWindow.devicePixelRatio > 1;\n      var isScrollOnWindow = this.scrollableElement === rootWindow;\n      var preventWheel = this.wot.wtSettings.getSetting('preventWheel');\n      var wheelEventOptions = {\n        passive: isScrollOnWindow\n      };\n\n      if (preventWheel || isHighPixelRatio || !isChrome()) {\n        this.eventManager.addEventListener(this.wot.wtTable.wtRootElement, 'wheel', function (event) {\n          return _this.onCloneWheel(event, preventWheel);\n        }, wheelEventOptions);\n      }\n\n      var overlays = [this.topOverlay, this.bottomOverlay, this.leftOverlay, this.topLeftCornerOverlay, this.bottomLeftCornerOverlay];\n      overlays.forEach(function (overlay) {\n        if (overlay && overlay.needFullRender) {\n          var holder = overlay.clone.wtTable.holder;\n\n          _this.eventManager.addEventListener(holder, 'wheel', function (event) {\n            return _this.onCloneWheel(event, preventWheel);\n          }, wheelEventOptions);\n        }\n      });\n      var resizeTimeout;\n      this.eventManager.addEventListener(rootWindow, 'resize', function () {\n        clearTimeout(resizeTimeout);\n        resizeTimeout = setTimeout(function () {\n          _this.wot.getSetting('onWindowResize');\n        }, 200);\n      });\n    }\n    /**\n     * Deregister all previously registered listeners.\n     */\n\n  }, {\n    key: \"deregisterListeners\",\n    value: function deregisterListeners() {\n      this.eventManager.clearEvents(true);\n    }\n    /**\n     * Scroll listener.\n     *\n     * @param {Event} event The mouse event object.\n     */\n\n  }, {\n    key: \"onTableScroll\",\n    value: function onTableScroll(event) {\n      // There was if statement which controlled flow of this function. It avoided the execution of the next lines\n      // on mobile devices. It was changed. Broader description of this case is included within issue #4856.\n      var rootWindow = this.wot.rootWindow;\n      var masterHorizontal = this.leftOverlay.mainTableScrollableElement;\n      var masterVertical = this.topOverlay.mainTableScrollableElement;\n      var target = event.target; // For key press, sync only master -> overlay position because while pressing Walkontable.render is triggered\n      // by hot.refreshBorder\n\n      if (this.keyPressed) {\n        if (masterVertical !== rootWindow && target !== rootWindow && !event.target.contains(masterVertical) || masterHorizontal !== rootWindow && target !== rootWindow && !event.target.contains(masterHorizontal)) {\n          return;\n        }\n      }\n\n      this.syncScrollPositions(event);\n    }\n    /**\n     * Wheel listener for cloned overlays.\n     *\n     * @param {Event} event The mouse event object.\n     * @param {boolean} preventDefault If `true`, the `preventDefault` will be called on event object.\n     */\n\n  }, {\n    key: \"onCloneWheel\",\n    value: function onCloneWheel(event, preventDefault) {\n      var rootWindow = this.wot.rootWindow; // There was if statement which controlled flow of this function. It avoided the execution of the next lines\n      // on mobile devices. It was changed. Broader description of this case is included within issue #4856.\n\n      var masterHorizontal = this.leftOverlay.mainTableScrollableElement;\n      var masterVertical = this.topOverlay.mainTableScrollableElement;\n      var target = event.target; // For key press, sync only master -> overlay position because while pressing Walkontable.render is triggered\n      // by hot.refreshBorder\n\n      var shouldNotWheelVertically = masterVertical !== rootWindow && target !== rootWindow && !target.contains(masterVertical);\n      var shouldNotWheelHorizontally = masterHorizontal !== rootWindow && target !== rootWindow && !target.contains(masterHorizontal);\n\n      if (this.keyPressed && (shouldNotWheelVertically || shouldNotWheelHorizontally)) {\n        return;\n      }\n\n      var isScrollPossible = this.translateMouseWheelToScroll(event);\n\n      if (preventDefault || this.scrollableElement !== rootWindow && isScrollPossible) {\n        event.preventDefault();\n      }\n    }\n    /**\n     * Key down listener.\n     *\n     * @param {Event} event The keyboard event object.\n     */\n\n  }, {\n    key: \"onKeyDown\",\n    value: function onKeyDown(event) {\n      this.keyPressed = isKey(event.keyCode, 'ARROW_UP|ARROW_RIGHT|ARROW_DOWN|ARROW_LEFT');\n    }\n    /**\n     * Key up listener.\n     */\n\n  }, {\n    key: \"onKeyUp\",\n    value: function onKeyUp() {\n      this.keyPressed = false;\n    }\n    /**\n     * Translate wheel event into scroll event and sync scroll overlays position.\n     *\n     * @private\n     * @param {Event} event The mouse event object.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"translateMouseWheelToScroll\",\n    value: function translateMouseWheelToScroll(event) {\n      var browserLineHeight = this.browserLineHeight;\n      var deltaY = isNaN(event.deltaY) ? -1 * event.wheelDeltaY : event.deltaY;\n      var deltaX = isNaN(event.deltaX) ? -1 * event.wheelDeltaX : event.deltaX;\n\n      if (event.deltaMode === 1) {\n        deltaX += deltaX * browserLineHeight;\n        deltaY += deltaY * browserLineHeight;\n      }\n\n      var isScrollVerticallyPossible = this.scrollVertically(deltaY);\n      var isScrollHorizontallyPossible = this.scrollHorizontally(deltaX);\n      return isScrollVerticallyPossible || isScrollHorizontallyPossible;\n    }\n    /**\n     * Scrolls main scrollable element horizontally.\n     *\n     * @param {number} delta Relative value to scroll.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"scrollVertically\",\n    value: function scrollVertically(delta) {\n      var previousScroll = this.scrollableElement.scrollTop;\n      this.scrollableElement.scrollTop += delta;\n      return previousScroll !== this.scrollableElement.scrollTop;\n    }\n    /**\n     * Scrolls main scrollable element horizontally.\n     *\n     * @param {number} delta Relative value to scroll.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"scrollHorizontally\",\n    value: function scrollHorizontally(delta) {\n      var previousScroll = this.scrollableElement.scrollLeft;\n      this.scrollableElement.scrollLeft += delta;\n      return previousScroll !== this.scrollableElement.scrollLeft;\n    }\n    /**\n     * Synchronize scroll position between master table and overlay table.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"syncScrollPositions\",\n    value: function syncScrollPositions() {\n      if (this.destroyed) {\n        return;\n      }\n\n      var rootWindow = this.wot.rootWindow;\n      var topHolder = this.topOverlay.clone.wtTable.holder;\n      var leftHolder = this.leftOverlay.clone.wtTable.holder;\n      var _ref = [this.scrollableElement.scrollLeft, this.scrollableElement.scrollTop],\n          scrollLeft = _ref[0],\n          scrollTop = _ref[1];\n      this.horizontalScrolling = topHolder.scrollLeft !== scrollLeft || this.lastScrollX !== rootWindow.scrollX;\n      this.verticalScrolling = leftHolder.scrollTop !== scrollTop || this.lastScrollY !== rootWindow.scrollY;\n      this.lastScrollX = rootWindow.scrollX;\n      this.lastScrollY = rootWindow.scrollY;\n\n      if (this.horizontalScrolling) {\n        topHolder.scrollLeft = scrollLeft;\n        var bottomHolder = this.bottomOverlay.needFullRender ? this.bottomOverlay.clone.wtTable.holder : null;\n\n        if (bottomHolder) {\n          bottomHolder.scrollLeft = scrollLeft;\n        }\n      }\n\n      if (this.verticalScrolling) {\n        leftHolder.scrollTop = scrollTop;\n      }\n\n      this.refreshAll();\n    }\n    /**\n     * Synchronize overlay scrollbars with the master scrollbar.\n     */\n\n  }, {\n    key: \"syncScrollWithMaster\",\n    value: function syncScrollWithMaster() {\n      var master = this.topOverlay.mainTableScrollableElement;\n      var scrollLeft = master.scrollLeft,\n          scrollTop = master.scrollTop;\n\n      if (this.topOverlay.needFullRender) {\n        this.topOverlay.clone.wtTable.holder.scrollLeft = scrollLeft;\n      }\n\n      if (this.bottomOverlay.needFullRender) {\n        this.bottomOverlay.clone.wtTable.holder.scrollLeft = scrollLeft;\n      }\n\n      if (this.leftOverlay.needFullRender) {\n        this.leftOverlay.clone.wtTable.holder.scrollTop = scrollTop;\n      }\n    }\n    /**\n     * Update the main scrollable elements for all the overlays.\n     */\n\n  }, {\n    key: \"updateMainScrollableElements\",\n    value: function updateMainScrollableElements() {\n      this.deregisterListeners();\n      this.leftOverlay.updateMainScrollableElement();\n      this.topOverlay.updateMainScrollableElement();\n\n      if (this.bottomOverlay.needFullRender) {\n        this.bottomOverlay.updateMainScrollableElement();\n      }\n\n      var _this$wot3 = this.wot,\n          rootWindow = _this$wot3.rootWindow,\n          wtTable = _this$wot3.wtTable;\n\n      if (rootWindow.getComputedStyle(wtTable.wtRootElement.parentNode).getPropertyValue('overflow') === 'hidden') {\n        this.scrollableElement = wtTable.holder;\n      } else {\n        this.scrollableElement = getScrollableElement(wtTable.TABLE);\n      }\n\n      this.registerListeners();\n    }\n    /**\n     *\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.eventManager.destroy();\n      this.topOverlay.destroy();\n\n      if (this.bottomOverlay.clone) {\n        this.bottomOverlay.destroy();\n      }\n\n      this.leftOverlay.destroy();\n\n      if (this.topLeftCornerOverlay) {\n        this.topLeftCornerOverlay.destroy();\n      }\n\n      if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.clone) {\n        this.bottomLeftCornerOverlay.destroy();\n      }\n\n      this.destroyed = true;\n    }\n    /**\n     * @param {boolean} [fastDraw=false] When `true`, try to refresh only the positions of borders without rerendering\n     *                                   the data. It will only work if Table.draw() does not force\n     *                                   rendering anyway.\n     */\n\n  }, {\n    key: \"refresh\",\n    value: function refresh() {\n      var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var spreader = this.wot.wtTable.spreader;\n      var width = spreader.clientWidth;\n      var height = spreader.clientHeight;\n\n      if (width !== this.spreaderLastSize.width || height !== this.spreaderLastSize.height) {\n        this.spreaderLastSize.width = width;\n        this.spreaderLastSize.height = height;\n        this.adjustElementsSize();\n      }\n\n      if (this.bottomOverlay.clone) {\n        this.bottomOverlay.refresh(fastDraw);\n      }\n\n      this.leftOverlay.refresh(fastDraw);\n      this.topOverlay.refresh(fastDraw);\n\n      if (this.topLeftCornerOverlay) {\n        this.topLeftCornerOverlay.refresh(fastDraw);\n      }\n\n      if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.clone) {\n        this.bottomLeftCornerOverlay.refresh(fastDraw);\n      }\n    }\n    /**\n     * Adjust overlays elements size and master table size.\n     *\n     * @param {boolean} [force=false] When `true`, it adjust the DOM nodes sizes for all overlays.\n     */\n\n  }, {\n    key: \"adjustElementsSize\",\n    value: function adjustElementsSize() {\n      var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var _this$wot4 = this.wot,\n          wtViewport = _this$wot4.wtViewport,\n          wtTable = _this$wot4.wtTable;\n      var totalColumns = this.wot.getSetting('totalColumns');\n      var totalRows = this.wot.getSetting('totalRows');\n      var headerRowSize = wtViewport.getRowHeaderWidth();\n      var headerColumnSize = wtViewport.getColumnHeaderHeight();\n      var hiderStyle = wtTable.hider.style;\n      hiderStyle.width = \"\".concat(headerRowSize + this.leftOverlay.sumCellSizes(0, totalColumns), \"px\");\n      hiderStyle.height = \"\".concat(headerColumnSize + this.topOverlay.sumCellSizes(0, totalRows) + 1, \"px\");\n\n      if (this.scrollbarSize > 0) {\n        var _wtTable$wtRootElemen = wtTable.wtRootElement,\n            rootElemScrollHeight = _wtTable$wtRootElemen.scrollHeight,\n            rootElemScrollWidth = _wtTable$wtRootElemen.scrollWidth;\n        var _wtTable$holder = wtTable.holder,\n            holderScrollHeight = _wtTable$holder.scrollHeight,\n            holderScrollWidth = _wtTable$holder.scrollWidth;\n        this.hasScrollbarRight = rootElemScrollHeight < holderScrollHeight;\n        this.hasScrollbarBottom = rootElemScrollWidth < holderScrollWidth;\n\n        if (this.hasScrollbarRight && wtTable.hider.scrollWidth + this.scrollbarSize > rootElemScrollWidth) {\n          this.hasScrollbarBottom = true;\n        } else if (this.hasScrollbarBottom && wtTable.hider.scrollHeight + this.scrollbarSize > rootElemScrollHeight) {\n          this.hasScrollbarRight = true;\n        }\n      }\n\n      this.topOverlay.adjustElementsSize(force);\n      this.leftOverlay.adjustElementsSize(force);\n      this.bottomOverlay.adjustElementsSize(force);\n    }\n    /**\n     *\n     */\n\n  }, {\n    key: \"applyToDOM\",\n    value: function applyToDOM() {\n      var wtTable = this.wot.wtTable;\n\n      if (!wtTable.isVisible()) {\n        return;\n      }\n\n      this.topOverlay.applyToDOM();\n\n      if (this.bottomOverlay.clone) {\n        this.bottomOverlay.applyToDOM();\n      }\n\n      this.leftOverlay.applyToDOM();\n    }\n    /**\n     * Get the parent overlay of the provided element.\n     *\n     * @param {HTMLElement} element An element to process.\n     * @returns {object|null}\n     */\n\n  }, {\n    key: \"getParentOverlay\",\n    value: function getParentOverlay(element) {\n      if (!element) {\n        return null;\n      }\n\n      var overlays = [this.topOverlay, this.leftOverlay, this.bottomOverlay, this.topLeftCornerOverlay, this.bottomLeftCornerOverlay];\n      var result = null;\n      arrayEach(overlays, function (elem) {\n        if (!elem) {\n          return;\n        }\n\n        if (elem.clone && elem.clone.wtTable.TABLE.contains(element)) {\n          result = elem.clone;\n        }\n      });\n      return result;\n    }\n    /**\n     * Synchronize the class names between the main overlay table and the tables on the other overlays.\n     *\n     */\n\n  }, {\n    key: \"syncOverlayTableClassNames\",\n    value: function syncOverlayTableClassNames() {\n      var masterTable = this.instance.wtTable.TABLE;\n      var overlays = [this.topOverlay, this.leftOverlay, this.bottomOverlay, this.topLeftCornerOverlay, this.bottomLeftCornerOverlay];\n      arrayEach(overlays, function (elem) {\n        if (!elem) {\n          return;\n        }\n\n        elem.clone.wtTable.TABLE.className = masterTable.className;\n      });\n    }\n  }]);\n\n  return Overlays;\n}();\n\nexport default Overlays;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { innerHeight, innerWidth, getScrollLeft, getScrollTop, offset } from \"./../../../helpers/dom/element.mjs\";\n/**\n * @class Scroll\n */\n\nvar Scroll = /*#__PURE__*/function () {\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance.\n   */\n  function Scroll(wotInstance) {\n    _classCallCheck(this, Scroll);\n\n    this.wot = wotInstance;\n  }\n  /**\n   * Scrolls viewport to a cell.\n   *\n   * @param {CellCoords} coords The cell coordinates.\n   * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n   * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.\n   * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n   * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.\n   * @returns {boolean}\n   */\n\n\n  _createClass(Scroll, [{\n    key: \"scrollViewport\",\n    value: function scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n      if (coords.col < 0 || coords.row < 0) {\n        return false;\n      }\n\n      var scrolledHorizontally = this.scrollViewportHorizontally(coords.col, snapToRight, snapToLeft);\n      var scrolledVertically = this.scrollViewportVertically(coords.row, snapToTop, snapToBottom);\n      return scrolledHorizontally || scrolledVertically;\n    }\n    /**\n     * Scrolls viewport to a column.\n     *\n     * @param {number} column Visual column index.\n     * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.\n     * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"scrollViewportHorizontally\",\n    value: function scrollViewportHorizontally(column, snapToRight, snapToLeft) {\n      if (!this.wot.drawn) {\n        return false;\n      }\n\n      var _this$_getVariables = this._getVariables(),\n          fixedColumnsLeft = _this$_getVariables.fixedColumnsLeft,\n          leftOverlay = _this$_getVariables.leftOverlay,\n          totalColumns = _this$_getVariables.totalColumns;\n\n      var result = false;\n\n      if (column >= 0 && column <= Math.max(totalColumns - 1, 0)) {\n        var firstVisibleColumn = this.getFirstVisibleColumn();\n        var lastVisibleColumn = this.getLastVisibleColumn();\n\n        if (column >= fixedColumnsLeft && firstVisibleColumn > -1 && (column < firstVisibleColumn || snapToLeft)) {\n          result = leftOverlay.scrollTo(column);\n        } else if (lastVisibleColumn === -1 || lastVisibleColumn > -1 && (column > lastVisibleColumn || snapToRight)) {\n          result = leftOverlay.scrollTo(column, true);\n        }\n      }\n\n      return result;\n    }\n    /**\n     * Scrolls viewport to a row.\n     *\n     * @param {number} row Visual row index.\n     * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n     * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"scrollViewportVertically\",\n    value: function scrollViewportVertically(row, snapToTop, snapToBottom) {\n      if (!this.wot.drawn) {\n        return false;\n      }\n\n      var _this$_getVariables2 = this._getVariables(),\n          fixedRowsBottom = _this$_getVariables2.fixedRowsBottom,\n          fixedRowsTop = _this$_getVariables2.fixedRowsTop,\n          topOverlay = _this$_getVariables2.topOverlay,\n          totalRows = _this$_getVariables2.totalRows;\n\n      var result = false;\n\n      if (row >= 0 && row <= Math.max(totalRows - 1, 0)) {\n        var firstVisibleRow = this.getFirstVisibleRow();\n        var lastVisibleRow = this.getLastVisibleRow();\n\n        if (row >= fixedRowsTop && firstVisibleRow > -1 && (row < firstVisibleRow || snapToTop)) {\n          result = topOverlay.scrollTo(row);\n        } else if (lastVisibleRow === -1 || lastVisibleRow > -1 && (row > lastVisibleRow && row < totalRows - fixedRowsBottom || snapToBottom)) {\n          result = topOverlay.scrollTo(row, true);\n        }\n      }\n\n      return result;\n    }\n    /**\n     * Get first visible row based on virtual dom and how table is visible in browser window viewport.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getFirstVisibleRow\",\n    value: function getFirstVisibleRow() {\n      var _this$_getVariables3 = this._getVariables(),\n          topOverlay = _this$_getVariables3.topOverlay,\n          wtTable = _this$_getVariables3.wtTable,\n          wtViewport = _this$_getVariables3.wtViewport,\n          totalRows = _this$_getVariables3.totalRows,\n          fixedRowsTop = _this$_getVariables3.fixedRowsTop;\n\n      var rootWindow = this.wot.rootWindow;\n      var firstVisibleRow = wtTable.getFirstVisibleRow();\n\n      if (topOverlay.mainTableScrollableElement === rootWindow) {\n        var rootElementOffset = offset(wtTable.wtRootElement);\n        var totalTableHeight = innerHeight(wtTable.hider);\n        var windowHeight = innerHeight(rootWindow);\n        var windowScrollTop = getScrollTop(rootWindow, rootWindow); // Only calculate firstVisibleRow when table didn't filled (from up) whole viewport space\n\n        if (rootElementOffset.top + totalTableHeight - windowHeight <= windowScrollTop) {\n          var rowsHeight = wtViewport.getColumnHeaderHeight();\n          rowsHeight += topOverlay.sumCellSizes(0, fixedRowsTop);\n\n          for (var row = totalRows; row > 0; row--) {\n            rowsHeight += topOverlay.sumCellSizes(row - 1, row);\n\n            if (rootElementOffset.top + totalTableHeight - rowsHeight <= windowScrollTop) {\n              // Return physical row + 1\n              firstVisibleRow = row;\n              break;\n            }\n          }\n        }\n      }\n\n      return firstVisibleRow;\n    }\n    /**\n     * Get last visible row based on virtual dom and how table is visible in browser window viewport.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getLastVisibleRow\",\n    value: function getLastVisibleRow() {\n      var _this$_getVariables4 = this._getVariables(),\n          topOverlay = _this$_getVariables4.topOverlay,\n          wtTable = _this$_getVariables4.wtTable,\n          wtViewport = _this$_getVariables4.wtViewport,\n          totalRows = _this$_getVariables4.totalRows;\n\n      var rootWindow = this.wot.rootWindow;\n      var lastVisibleRow = wtTable.getLastVisibleRow();\n\n      if (topOverlay.mainTableScrollableElement === rootWindow) {\n        var rootElementOffset = offset(wtTable.wtRootElement);\n        var windowScrollTop = getScrollTop(rootWindow, rootWindow); // Only calculate lastVisibleRow when table didn't filled (from bottom) whole viewport space\n\n        if (rootElementOffset.top > windowScrollTop) {\n          var windowHeight = innerHeight(rootWindow);\n          var rowsHeight = wtViewport.getColumnHeaderHeight();\n\n          for (var row = 1; row <= totalRows; row++) {\n            rowsHeight += topOverlay.sumCellSizes(row - 1, row);\n\n            if (rootElementOffset.top + rowsHeight - windowScrollTop >= windowHeight) {\n              // Return physical row - 1 (-2 because rangeEach gives row index + 1 - sumCellSizes requirements)\n              lastVisibleRow = row - 2;\n              break;\n            }\n          }\n        }\n      }\n\n      return lastVisibleRow;\n    }\n    /**\n     * Get first visible column based on virtual dom and how table is visible in browser window viewport.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getFirstVisibleColumn\",\n    value: function getFirstVisibleColumn() {\n      var _this$_getVariables5 = this._getVariables(),\n          leftOverlay = _this$_getVariables5.leftOverlay,\n          wtTable = _this$_getVariables5.wtTable,\n          wtViewport = _this$_getVariables5.wtViewport,\n          totalColumns = _this$_getVariables5.totalColumns;\n\n      var rootWindow = this.wot.rootWindow;\n      var firstVisibleColumn = wtTable.getFirstVisibleColumn();\n\n      if (leftOverlay.mainTableScrollableElement === rootWindow) {\n        var rootElementOffset = offset(wtTable.wtRootElement);\n        var totalTableWidth = innerWidth(wtTable.hider);\n        var windowWidth = innerWidth(rootWindow);\n        var windowScrollLeft = getScrollLeft(rootWindow, rootWindow); // Only calculate firstVisibleColumn when table didn't filled (from left) whole viewport space\n\n        if (rootElementOffset.left + totalTableWidth - windowWidth <= windowScrollLeft) {\n          var columnsWidth = wtViewport.getRowHeaderWidth();\n\n          for (var column = totalColumns; column > 0; column--) {\n            columnsWidth += leftOverlay.sumCellSizes(column - 1, column);\n\n            if (rootElementOffset.left + totalTableWidth - columnsWidth <= windowScrollLeft) {\n              // Return physical column + 1\n              firstVisibleColumn = column;\n              break;\n            }\n          }\n        }\n      }\n\n      return firstVisibleColumn;\n    }\n    /**\n     * Get last visible column based on virtual dom and how table is visible in browser window viewport.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getLastVisibleColumn\",\n    value: function getLastVisibleColumn() {\n      var _this$_getVariables6 = this._getVariables(),\n          leftOverlay = _this$_getVariables6.leftOverlay,\n          wtTable = _this$_getVariables6.wtTable,\n          wtViewport = _this$_getVariables6.wtViewport,\n          totalColumns = _this$_getVariables6.totalColumns;\n\n      var rootWindow = this.wot.rootWindow;\n      var lastVisibleColumn = wtTable.getLastVisibleColumn();\n\n      if (leftOverlay.mainTableScrollableElement === rootWindow) {\n        var rootElementOffset = offset(wtTable.wtRootElement);\n        var windowScrollLeft = getScrollLeft(rootWindow, rootWindow); // Only calculate lastVisibleColumn when table didn't filled (from right) whole viewport space\n\n        if (rootElementOffset.left > windowScrollLeft) {\n          var windowWidth = innerWidth(rootWindow);\n          var columnsWidth = wtViewport.getRowHeaderWidth();\n\n          for (var column = 1; column <= totalColumns; column++) {\n            columnsWidth += leftOverlay.sumCellSizes(column - 1, column);\n\n            if (rootElementOffset.left + columnsWidth - windowScrollLeft >= windowWidth) {\n              // Return physical column - 1 (-2 because rangeEach gives column index + 1 - sumCellSizes requirements)\n              lastVisibleColumn = column - 2;\n              break;\n            }\n          }\n        }\n      }\n\n      return lastVisibleColumn;\n    }\n    /**\n     * Returns collection of variables used to rows and columns visibility calculations.\n     *\n     * @returns {object}\n     * @private\n     */\n\n  }, {\n    key: \"_getVariables\",\n    value: function _getVariables() {\n      var wot = this.wot;\n      var topOverlay = wot.wtOverlays.topOverlay;\n      var leftOverlay = wot.wtOverlays.leftOverlay;\n      var wtTable = wot.wtTable;\n      var wtViewport = wot.wtViewport;\n      var totalRows = wot.getSetting('totalRows');\n      var totalColumns = wot.getSetting('totalColumns');\n      var fixedRowsTop = wot.getSetting('fixedRowsTop');\n      var fixedRowsBottom = wot.getSetting('fixedRowsBottom');\n      var fixedColumnsLeft = wot.getSetting('fixedColumnsLeft');\n      return {\n        topOverlay: topOverlay,\n        leftOverlay: leftOverlay,\n        wtTable: wtTable,\n        wtViewport: wtViewport,\n        totalRows: totalRows,\n        totalColumns: totalColumns,\n        fixedRowsTop: fixedRowsTop,\n        fixedRowsBottom: fixedRowsBottom,\n        fixedColumnsLeft: fixedColumnsLeft\n      };\n    }\n  }]);\n\n  return Scroll;\n}();\n\nexport default Scroll;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { fastInnerText } from \"./../../../helpers/dom/element.mjs\";\nimport { objectEach } from \"./../../../helpers/object.mjs\";\n/**\n * @class Settings\n */\n\nvar Settings = /*#__PURE__*/function () {\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance.\n   * @param {object} settings The user defined settings.\n   */\n  function Settings(wotInstance, settings) {\n    var _this = this;\n\n    _classCallCheck(this, Settings);\n\n    this.wot = wotInstance; // legacy support\n\n    this.instance = wotInstance; // default settings. void 0 means it is required, null means it can be empty\n\n    this.defaults = {\n      table: void 0,\n      // Determines whether the Walkontable instance is used as dataset viewer. When its instance is used as\n      // a context menu, autocomplete list, etc, the returned value is `false`.\n      isDataViewInstance: true,\n      // presentation mode\n      externalRowCalculator: false,\n      stretchH: 'none',\n      // values: all, last, none\n      currentRowClassName: null,\n      currentColumnClassName: null,\n      preventOverflow: function preventOverflow() {\n        return false;\n      },\n      preventWheel: false,\n      // data source\n      data: void 0,\n      freezeOverlays: false,\n      // Number of renderable columns for the left overlay.\n      fixedColumnsLeft: 0,\n      // Number of renderable rows for the top overlay.\n      fixedRowsTop: 0,\n      // Number of renderable rows for the bottom overlay.\n      fixedRowsBottom: 0,\n      // Enable the left overlay when conditions are met.\n      shouldRenderLeftOverlay: function shouldRenderLeftOverlay() {\n        return _this.getSetting('fixedColumnsLeft') > 0 || _this.getSetting('rowHeaders').length > 0;\n      },\n      // Enable the top overlay when conditions are met.\n      shouldRenderTopOverlay: function shouldRenderTopOverlay() {\n        return _this.getSetting('fixedRowsTop') > 0 || _this.getSetting('columnHeaders').length > 0;\n      },\n      // Enable the bottom overlay when conditions are met.\n      shouldRenderBottomOverlay: function shouldRenderBottomOverlay() {\n        return _this.getSetting('fixedRowsBottom') > 0;\n      },\n      minSpareRows: 0,\n      // this must be array of functions: [function (row, TH) {}]\n      rowHeaders: function rowHeaders() {\n        return [];\n      },\n      // this must be array of functions: [function (column, TH) {}]\n      columnHeaders: function columnHeaders() {\n        return [];\n      },\n      totalRows: void 0,\n      totalColumns: void 0,\n      cellRenderer: function cellRenderer(row, column, TD) {\n        var cellData = _this.getSetting('data', row, column);\n\n        fastInnerText(TD, cellData === void 0 || cellData === null ? '' : cellData);\n      },\n      // columnWidth: 50,\n      columnWidth: function columnWidth() {// return undefined means use default size for the rendered cell content\n      },\n      rowHeight: function rowHeight() {// return undefined means use default size for the rendered cell content\n      },\n      defaultRowHeight: 23,\n      defaultColumnWidth: 50,\n      selections: null,\n      hideBorderOnMouseDownOver: false,\n      viewportRowCalculatorOverride: null,\n      viewportColumnCalculatorOverride: null,\n      // callbacks\n      onCellMouseDown: null,\n      onCellContextMenu: null,\n      onCellMouseOver: null,\n      onCellMouseOut: null,\n      onCellMouseUp: null,\n      //    onCellMouseOut: null,\n      onCellDblClick: null,\n      onCellCornerMouseDown: null,\n      onCellCornerDblClick: null,\n      beforeDraw: null,\n      onDraw: null,\n      onBeforeRemoveCellClassNames: null,\n      onAfterDrawSelection: null,\n      onBeforeDrawBorders: null,\n      onScrollVertically: null,\n      onScrollHorizontally: null,\n      onBeforeTouchScroll: null,\n      onAfterMomentumScroll: null,\n      onBeforeStretchingColumnWidth: function onBeforeStretchingColumnWidth(width) {\n        return width;\n      },\n      onModifyRowHeaderWidth: null,\n      onModifyGetCellCoords: null,\n      onBeforeHighlightingRowHeader: function onBeforeHighlightingRowHeader(sourceRow) {\n        return sourceRow;\n      },\n      onBeforeHighlightingColumnHeader: function onBeforeHighlightingColumnHeader(sourceCol) {\n        return sourceCol;\n      },\n      onWindowResize: null,\n      // constants\n      scrollbarWidth: 10,\n      scrollbarHeight: 10,\n      renderAllRows: false,\n      groups: false,\n      rowHeaderWidth: null,\n      columnHeaderHeight: null,\n      headerClassName: null\n    }; // reference to settings\n\n    this.settings = {};\n    objectEach(this.defaults, function (value, key) {\n      if (settings[key] !== void 0) {\n        _this.settings[key] = settings[key];\n      } else if (value === void 0) {\n        throw new Error(\"A required setting \\\"\".concat(key, \"\\\" was not provided\"));\n      } else {\n        _this.settings[key] = value;\n      }\n    });\n  }\n  /**\n   * Update settings.\n   *\n   * @param {object} settings The singular settings to update or if passed as object to merge with.\n   * @param {*} value The value to set if the first argument is passed as string.\n   * @returns {Walkontable}\n   */\n\n\n  _createClass(Settings, [{\n    key: \"update\",\n    value: function update(settings, value) {\n      var _this2 = this;\n\n      if (value === void 0) {\n        // settings is object\n        objectEach(settings, function (settingValue, key) {\n          _this2.settings[key] = settingValue;\n        });\n      } else {\n        // if value is defined then settings is the key\n        this.settings[settings] = value;\n      }\n\n      return this.wot;\n    }\n    /**\n     * Get setting by name.\n     *\n     * @param {string} key The settings key to retrieve.\n     * @param {*} [param1] Additional parameter passed to the options defined as function.\n     * @param {*} [param2] Additional parameter passed to the options defined as function.\n     * @param {*} [param3] Additional parameter passed to the options defined as function.\n     * @param {*} [param4] Additional parameter passed to the options defined as function.\n     * @returns {*}\n     */\n\n  }, {\n    key: \"getSetting\",\n    value: function getSetting(key, param1, param2, param3, param4) {\n      if (typeof this.settings[key] === 'function') {\n        // this is faster than .apply - https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n        return this.settings[key](param1, param2, param3, param4);\n      } else if (param1 !== void 0 && Array.isArray(this.settings[key])) {\n        // perhaps this can be removed, it is only used in tests\n        return this.settings[key][param1];\n      }\n\n      return this.settings[key];\n    }\n    /**\n     * Checks if setting exists.\n     *\n     * @param {boolean} key The settings key to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"has\",\n    value: function has(key) {\n      return !!this.settings[key];\n    }\n  }]);\n\n  return Settings;\n}();\n\nexport default Settings;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { getScrollbarWidth, getStyle, offset, outerHeight, outerWidth } from \"./../../../helpers/dom/element.mjs\";\nimport { objectEach } from \"./../../../helpers/object.mjs\";\nimport EventManager from \"./../../../eventManager.mjs\";\nimport { RENDER_TYPE, FULLY_VISIBLE_TYPE, ViewportColumnsCalculator, ViewportRowsCalculator } from \"./calculator/index.mjs\";\n/**\n * @class Viewport\n */\n\nvar Viewport = /*#__PURE__*/function () {\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance.\n   */\n  function Viewport(wotInstance) {\n    var _this = this;\n\n    _classCallCheck(this, Viewport);\n\n    this.wot = wotInstance; // legacy support\n\n    this.instance = this.wot;\n    this.oversizedRows = [];\n    this.oversizedColumnHeaders = [];\n    this.hasOversizedColumnHeadersMarked = {};\n    this.clientHeight = 0;\n    this.containerWidth = NaN;\n    this.rowHeaderWidth = NaN;\n    this.rowsVisibleCalculator = null;\n    this.columnsVisibleCalculator = null;\n    this.eventManager = new EventManager(this.wot);\n    this.eventManager.addEventListener(this.wot.rootWindow, 'resize', function () {\n      _this.clientHeight = _this.getWorkspaceHeight();\n    });\n  }\n  /**\n   * @returns {number}\n   */\n\n\n  _createClass(Viewport, [{\n    key: \"getWorkspaceHeight\",\n    value: function getWorkspaceHeight() {\n      var currentDocument = this.wot.rootDocument;\n      var trimmingContainer = this.instance.wtOverlays.topOverlay.trimmingContainer;\n      var height = 0;\n\n      if (trimmingContainer === this.wot.rootWindow) {\n        height = currentDocument.documentElement.clientHeight;\n      } else {\n        var elemHeight = outerHeight(trimmingContainer); // returns height without DIV scrollbar\n\n        height = elemHeight > 0 && trimmingContainer.clientHeight > 0 ? trimmingContainer.clientHeight : Infinity;\n      }\n\n      return height;\n    }\n  }, {\n    key: \"getWorkspaceWidth\",\n    value: function getWorkspaceWidth() {\n      var wot = this.wot;\n      var rootDocument = wot.rootDocument,\n          rootWindow = wot.rootWindow;\n      var trimmingContainer = this.instance.wtOverlays.leftOverlay.trimmingContainer;\n      var docOffsetWidth = rootDocument.documentElement.offsetWidth;\n      var totalColumns = wot.getSetting('totalColumns');\n      var preventOverflow = wot.getSetting('preventOverflow');\n      var width;\n      var overflow;\n\n      if (preventOverflow) {\n        return outerWidth(this.instance.wtTable.wtRootElement);\n      }\n\n      if (wot.getSetting('freezeOverlays')) {\n        width = Math.min(docOffsetWidth - this.getWorkspaceOffset().left, docOffsetWidth);\n      } else {\n        width = Math.min(this.getContainerFillWidth(), docOffsetWidth - this.getWorkspaceOffset().left, docOffsetWidth);\n      }\n\n      if (trimmingContainer === rootWindow && totalColumns > 0 && this.sumColumnWidths(0, totalColumns - 1) > width) {\n        // in case sum of column widths is higher than available stylesheet width, let's assume using the whole window\n        // otherwise continue below, which will allow stretching\n        // this is used in `scroll_window.html`\n        // TODO test me\n        return rootDocument.documentElement.clientWidth;\n      }\n\n      if (trimmingContainer !== rootWindow) {\n        overflow = getStyle(this.instance.wtOverlays.leftOverlay.trimmingContainer, 'overflow', rootWindow);\n\n        if (overflow === 'scroll' || overflow === 'hidden' || overflow === 'auto') {\n          // this is used in `scroll.html`\n          // TODO test me\n          return Math.max(width, trimmingContainer.clientWidth);\n        }\n      }\n\n      var stretchSetting = wot.getSetting('stretchH');\n\n      if (stretchSetting === 'none' || !stretchSetting) {\n        // if no stretching is used, return the maximum used workspace width\n        return Math.max(width, outerWidth(this.instance.wtTable.TABLE));\n      } // if stretching is used, return the actual container width, so the columns can fit inside it\n\n\n      return width;\n    }\n    /**\n     * Checks if viewport has vertical scroll.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"hasVerticalScroll\",\n    value: function hasVerticalScroll() {\n      return this.getWorkspaceActualHeight() > this.getWorkspaceHeight();\n    }\n    /**\n     * Checks if viewport has horizontal scroll.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"hasHorizontalScroll\",\n    value: function hasHorizontalScroll() {\n      return this.getWorkspaceActualWidth() > this.getWorkspaceWidth();\n    }\n    /**\n     * @param {number} from The visual column index from the width sum is start calculated.\n     * @param {number} length The length of the column to traverse.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"sumColumnWidths\",\n    value: function sumColumnWidths(from, length) {\n      var wtTable = this.wot.wtTable;\n      var sum = 0;\n      var column = from;\n\n      while (column < length) {\n        sum += wtTable.getColumnWidth(column);\n        column += 1;\n      }\n\n      return sum;\n    }\n    /**\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getContainerFillWidth\",\n    value: function getContainerFillWidth() {\n      if (this.containerWidth) {\n        return this.containerWidth;\n      }\n\n      var mainContainer = this.instance.wtTable.holder;\n      var dummyElement = this.wot.rootDocument.createElement('div');\n      dummyElement.style.width = '100%';\n      dummyElement.style.height = '1px';\n      mainContainer.appendChild(dummyElement);\n      var fillWidth = dummyElement.offsetWidth;\n      this.containerWidth = fillWidth;\n      mainContainer.removeChild(dummyElement);\n      return fillWidth;\n    }\n    /**\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getWorkspaceOffset\",\n    value: function getWorkspaceOffset() {\n      return offset(this.wot.wtTable.TABLE);\n    }\n    /**\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getWorkspaceActualHeight\",\n    value: function getWorkspaceActualHeight() {\n      return outerHeight(this.wot.wtTable.TABLE);\n    }\n    /**\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getWorkspaceActualWidth\",\n    value: function getWorkspaceActualWidth() {\n      var wtTable = this.wot.wtTable;\n      return outerWidth(wtTable.TABLE) || outerWidth(wtTable.TBODY) || outerWidth(wtTable.THEAD); // IE8 reports 0 as <table> offsetWidth;\n    }\n    /**\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getColumnHeaderHeight\",\n    value: function getColumnHeaderHeight() {\n      var columnHeaders = this.instance.getSetting('columnHeaders');\n\n      if (!columnHeaders.length) {\n        this.columnHeaderHeight = 0;\n      } else if (isNaN(this.columnHeaderHeight)) {\n        this.columnHeaderHeight = outerHeight(this.wot.wtTable.THEAD);\n      }\n\n      return this.columnHeaderHeight;\n    }\n    /**\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getViewportHeight\",\n    value: function getViewportHeight() {\n      var containerHeight = this.getWorkspaceHeight();\n\n      if (containerHeight === Infinity) {\n        return containerHeight;\n      }\n\n      var columnHeaderHeight = this.getColumnHeaderHeight();\n\n      if (columnHeaderHeight > 0) {\n        containerHeight -= columnHeaderHeight;\n      }\n\n      return containerHeight;\n    }\n    /**\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getRowHeaderWidth\",\n    value: function getRowHeaderWidth() {\n      var rowHeadersWidthSetting = this.instance.getSetting('rowHeaderWidth');\n      var rowHeaders = this.instance.getSetting('rowHeaders');\n\n      if (rowHeadersWidthSetting) {\n        this.rowHeaderWidth = 0;\n\n        for (var i = 0, len = rowHeaders.length; i < len; i++) {\n          this.rowHeaderWidth += rowHeadersWidthSetting[i] || rowHeadersWidthSetting;\n        }\n      }\n\n      if (this.wot.cloneSource) {\n        return this.wot.cloneSource.wtViewport.getRowHeaderWidth();\n      }\n\n      if (isNaN(this.rowHeaderWidth)) {\n        if (rowHeaders.length) {\n          var TH = this.instance.wtTable.TABLE.querySelector('TH');\n          this.rowHeaderWidth = 0;\n\n          for (var _i = 0, _len = rowHeaders.length; _i < _len; _i++) {\n            if (TH) {\n              this.rowHeaderWidth += outerWidth(TH);\n              TH = TH.nextSibling;\n            } else {\n              // yes this is a cheat but it worked like that before, just taking assumption from CSS instead of measuring.\n              // TODO: proper fix\n              this.rowHeaderWidth += 50;\n            }\n          }\n        } else {\n          this.rowHeaderWidth = 0;\n        }\n      }\n\n      this.rowHeaderWidth = this.instance.getSetting('onModifyRowHeaderWidth', this.rowHeaderWidth) || this.rowHeaderWidth;\n      return this.rowHeaderWidth;\n    }\n    /**\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getViewportWidth\",\n    value: function getViewportWidth() {\n      var containerWidth = this.getWorkspaceWidth();\n\n      if (containerWidth === Infinity) {\n        return containerWidth;\n      }\n\n      var rowHeaderWidth = this.getRowHeaderWidth();\n\n      if (rowHeaderWidth > 0) {\n        return containerWidth - rowHeaderWidth;\n      }\n\n      return containerWidth;\n    }\n    /**\n     * Creates:\n     * - rowsRenderCalculator (before draw, to qualify rows for rendering)\n     * - rowsVisibleCalculator (after draw, to measure which rows are actually visible).\n     *\n     * @param {number} calculationType The render type ID, which determines for what type of\n     *                                 calculation calculator is created.\n     * @returns {ViewportRowsCalculator}\n     */\n\n  }, {\n    key: \"createRowsCalculator\",\n    value: function createRowsCalculator() {\n      var calculationType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : RENDER_TYPE;\n      var wot = this.wot;\n      var wtSettings = wot.wtSettings,\n          wtOverlays = wot.wtOverlays,\n          wtTable = wot.wtTable,\n          rootDocument = wot.rootDocument;\n      var height;\n      var scrollbarHeight;\n      var fixedRowsHeight;\n      this.rowHeaderWidth = NaN;\n\n      if (wtSettings.settings.renderAllRows && calculationType === RENDER_TYPE) {\n        height = Infinity;\n      } else {\n        height = this.getViewportHeight();\n      }\n\n      var pos = wtOverlays.topOverlay.getScrollPosition() - wtOverlays.topOverlay.getTableParentOffset();\n\n      if (pos < 0) {\n        pos = 0;\n      }\n\n      var fixedRowsTop = wot.getSetting('fixedRowsTop');\n      var fixedRowsBottom = wot.getSetting('fixedRowsBottom');\n      var totalRows = wot.getSetting('totalRows');\n\n      if (fixedRowsTop) {\n        fixedRowsHeight = wtOverlays.topOverlay.sumCellSizes(0, fixedRowsTop);\n        pos += fixedRowsHeight;\n        height -= fixedRowsHeight;\n      }\n\n      if (fixedRowsBottom && wtOverlays.bottomOverlay.clone) {\n        fixedRowsHeight = wtOverlays.bottomOverlay.sumCellSizes(totalRows - fixedRowsBottom, totalRows);\n        height -= fixedRowsHeight;\n      }\n\n      if (wtTable.holder.clientHeight === wtTable.holder.offsetHeight) {\n        scrollbarHeight = 0;\n      } else {\n        scrollbarHeight = getScrollbarWidth(rootDocument);\n      }\n\n      return new ViewportRowsCalculator({\n        viewportSize: height,\n        scrollOffset: pos,\n        totalItems: wot.getSetting('totalRows'),\n        itemSizeFn: function itemSizeFn(sourceRow) {\n          return wtTable.getRowHeight(sourceRow);\n        },\n        overrideFn: wtSettings.settings.viewportRowCalculatorOverride,\n        calculationType: calculationType,\n        scrollbarHeight: scrollbarHeight\n      });\n    }\n    /**\n     * Creates:\n     * - columnsRenderCalculator (before draw, to qualify columns for rendering)\n     * - columnsVisibleCalculator (after draw, to measure which columns are actually visible).\n     *\n     * @param {number} calculationType The render type ID, which determines for what type of\n     *                                 calculation calculator is created.\n     * @returns {ViewportRowsCalculator}\n     */\n\n  }, {\n    key: \"createColumnsCalculator\",\n    value: function createColumnsCalculator() {\n      var calculationType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : RENDER_TYPE;\n      var wot = this.wot;\n      var wtSettings = wot.wtSettings,\n          wtOverlays = wot.wtOverlays,\n          wtTable = wot.wtTable,\n          rootDocument = wot.rootDocument;\n      var width = this.getViewportWidth();\n      var pos = wtOverlays.leftOverlay.getScrollPosition() - wtOverlays.leftOverlay.getTableParentOffset();\n      this.columnHeaderHeight = NaN;\n\n      if (pos < 0) {\n        pos = 0;\n      }\n\n      var fixedColumnsLeft = wot.getSetting('fixedColumnsLeft');\n\n      if (fixedColumnsLeft) {\n        var fixedColumnsWidth = wtOverlays.leftOverlay.sumCellSizes(0, fixedColumnsLeft);\n        pos += fixedColumnsWidth;\n        width -= fixedColumnsWidth;\n      }\n\n      if (wtTable.holder.clientWidth !== wtTable.holder.offsetWidth) {\n        width -= getScrollbarWidth(rootDocument);\n      }\n\n      return new ViewportColumnsCalculator({\n        viewportSize: width,\n        scrollOffset: pos,\n        totalItems: wot.getSetting('totalColumns'),\n        itemSizeFn: function itemSizeFn(sourceCol) {\n          return wot.wtTable.getColumnWidth(sourceCol);\n        },\n        overrideFn: wtSettings.settings.viewportColumnCalculatorOverride,\n        calculationType: calculationType,\n        stretchMode: wot.getSetting('stretchH'),\n        stretchingItemWidthFn: function stretchingItemWidthFn(stretchedWidth, column) {\n          return wot.getSetting('onBeforeStretchingColumnWidth', stretchedWidth, column);\n        }\n      });\n    }\n    /**\n     * Creates rowsRenderCalculator and columnsRenderCalculator (before draw, to determine what rows and\n     * cols should be rendered).\n     *\n     * @param {boolean} fastDraw If `true`, will try to avoid full redraw and only update the border positions.\n     *                           If `false` or `undefined`, will perform a full redraw.\n     * @returns {boolean} The fastDraw value, possibly modified.\n     */\n\n  }, {\n    key: \"createRenderCalculators\",\n    value: function createRenderCalculators() {\n      var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var runFastDraw = fastDraw;\n\n      if (runFastDraw) {\n        var proposedRowsVisibleCalculator = this.createRowsCalculator(FULLY_VISIBLE_TYPE);\n        var proposedColumnsVisibleCalculator = this.createColumnsCalculator(FULLY_VISIBLE_TYPE);\n\n        if (!(this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) && this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator))) {\n          runFastDraw = false;\n        }\n      }\n\n      if (!runFastDraw) {\n        this.rowsRenderCalculator = this.createRowsCalculator(RENDER_TYPE);\n        this.columnsRenderCalculator = this.createColumnsCalculator(RENDER_TYPE);\n      } // delete temporarily to make sure that renderers always use rowsRenderCalculator, not rowsVisibleCalculator\n\n\n      this.rowsVisibleCalculator = null;\n      this.columnsVisibleCalculator = null;\n      return runFastDraw;\n    }\n    /**\n     * Creates rowsVisibleCalculator and columnsVisibleCalculator (after draw, to determine what are\n     * the actually fully visible rows and columns).\n     */\n\n  }, {\n    key: \"createVisibleCalculators\",\n    value: function createVisibleCalculators() {\n      this.rowsVisibleCalculator = this.createRowsCalculator(FULLY_VISIBLE_TYPE);\n      this.columnsVisibleCalculator = this.createColumnsCalculator(FULLY_VISIBLE_TYPE);\n    }\n    /**\n     * Returns information whether proposedRowsVisibleCalculator viewport\n     * is contained inside rows rendered in previous draw (cached in rowsRenderCalculator).\n     *\n     * @param {ViewportRowsCalculator} proposedRowsVisibleCalculator The instance of the viewport calculator to compare with.\n     * @returns {boolean} Returns `true` if all proposed visible rows are already rendered (meaning: redraw is not needed).\n     *                    Returns `false` if at least one proposed visible row is not already rendered (meaning: redraw is needed).\n     */\n\n  }, {\n    key: \"areAllProposedVisibleRowsAlreadyRendered\",\n    value: function areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) {\n      if (!this.rowsVisibleCalculator) {\n        return false;\n      }\n\n      var startRow = proposedRowsVisibleCalculator.startRow,\n          endRow = proposedRowsVisibleCalculator.endRow;\n      var _this$rowsRenderCalcu = this.rowsRenderCalculator,\n          renderedStartRow = _this$rowsRenderCalcu.startRow,\n          renderedEndRow = _this$rowsRenderCalcu.endRow;\n\n      if (startRow < renderedStartRow || startRow === renderedStartRow && startRow > 0) {\n        return false;\n      } else if (endRow > renderedEndRow || endRow === renderedEndRow && endRow < this.wot.getSetting('totalRows') - 1) {\n        return false;\n      }\n\n      return true;\n    }\n    /**\n     * Returns information whether proposedColumnsVisibleCalculator viewport\n     * is contained inside column rendered in previous draw (cached in columnsRenderCalculator).\n     *\n     * @param {ViewportRowsCalculator} proposedColumnsVisibleCalculator The instance of the viewport calculator to compare with.\n     * @returns {boolean} Returns `true` if all proposed visible columns are already rendered (meaning: redraw is not needed).\n     *                    Returns `false` if at least one proposed visible column is not already rendered (meaning: redraw is needed).\n     */\n\n  }, {\n    key: \"areAllProposedVisibleColumnsAlreadyRendered\",\n    value: function areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator) {\n      if (!this.columnsVisibleCalculator) {\n        return false;\n      }\n\n      var startColumn = proposedColumnsVisibleCalculator.startColumn,\n          endColumn = proposedColumnsVisibleCalculator.endColumn;\n      var _this$columnsRenderCa = this.columnsRenderCalculator,\n          renderedStartColumn = _this$columnsRenderCa.startColumn,\n          renderedEndColumn = _this$columnsRenderCa.endColumn;\n\n      if (startColumn < renderedStartColumn || startColumn === renderedStartColumn && startColumn > 0) {\n        return false;\n      } else if (endColumn > renderedEndColumn || endColumn === renderedEndColumn && endColumn < this.wot.getSetting('totalColumns') - 1) {\n        return false;\n      }\n\n      return true;\n    }\n    /**\n     * Resets values in keys of the hasOversizedColumnHeadersMarked object after updateSettings.\n     */\n\n  }, {\n    key: \"resetHasOversizedColumnHeadersMarked\",\n    value: function resetHasOversizedColumnHeadersMarked() {\n      objectEach(this.hasOversizedColumnHeadersMarked, function (value, key, object) {\n        object[key] = void 0;\n      });\n    }\n  }]);\n\n  return Viewport;\n}();\n\nexport default Viewport;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { addClass, fastInnerText, removeClass } from \"./../../../helpers/dom/element.mjs\";\nimport { objectEach } from \"./../../../helpers/object.mjs\";\nimport { randomString } from \"./../../../helpers/string.mjs\";\nimport Event from \"./event.mjs\";\nimport Overlays from \"./overlays.mjs\";\nimport Scroll from \"./scroll.mjs\";\nimport Settings from \"./settings.mjs\";\nimport MasterTable from \"./table/master.mjs\";\nimport Viewport from \"./viewport.mjs\";\n/**\n * @class Walkontable\n */\n\nvar Walkontable = /*#__PURE__*/function () {\n  /**\n   * @param {object} settings The Walkontable settings.\n   */\n  function Walkontable(settings) {\n    _classCallCheck(this, Walkontable);\n\n    var originalHeaders = []; // this is the namespace for global events\n\n    this.guid = \"wt_\".concat(randomString());\n    this.rootDocument = settings.table.ownerDocument;\n    this.rootWindow = this.rootDocument.defaultView; // bootstrap from settings\n\n    if (settings.cloneSource) {\n      this.cloneSource = settings.cloneSource;\n      this.cloneOverlay = settings.cloneOverlay;\n      this.wtSettings = settings.cloneSource.wtSettings;\n      this.wtTable = this.cloneOverlay.createTable(this, settings.table);\n      this.wtScroll = new Scroll(this);\n      this.wtViewport = settings.cloneSource.wtViewport;\n      this.wtEvent = new Event(this);\n      this.selections = this.cloneSource.selections;\n    } else {\n      this.wtSettings = new Settings(this, settings);\n      this.wtTable = new MasterTable(this, settings.table);\n      this.wtScroll = new Scroll(this);\n      this.wtViewport = new Viewport(this);\n      this.wtEvent = new Event(this);\n      this.selections = this.getSetting('selections');\n      this.wtOverlays = new Overlays(this);\n      this.exportSettingsAsClassNames();\n    } // find original headers\n\n\n    if (this.wtTable.THEAD.childNodes.length && this.wtTable.THEAD.childNodes[0].childNodes.length) {\n      for (var c = 0, clen = this.wtTable.THEAD.childNodes[0].childNodes.length; c < clen; c++) {\n        originalHeaders.push(this.wtTable.THEAD.childNodes[0].childNodes[c].innerHTML);\n      }\n\n      if (!this.getSetting('columnHeaders').length) {\n        this.update('columnHeaders', [function (column, TH) {\n          fastInnerText(TH, originalHeaders[column]);\n        }]);\n      }\n    }\n\n    this.drawn = false;\n    this.drawInterrupted = false;\n  }\n  /**\n   * Force rerender of Walkontable.\n   *\n   * @param {boolean} [fastDraw=false] When `true`, try to refresh only the positions of borders without rerendering\n   *                                   the data. It will only work if Table.draw() does not force\n   *                                   rendering anyway.\n   * @returns {Walkontable}\n   */\n\n\n  _createClass(Walkontable, [{\n    key: \"draw\",\n    value: function draw() {\n      var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      this.drawInterrupted = false;\n\n      if (!fastDraw && !this.wtTable.isVisible()) {\n        // draw interrupted because TABLE is not visible\n        this.drawInterrupted = true;\n      } else {\n        this.wtTable.draw(fastDraw);\n      }\n\n      return this;\n    }\n    /**\n     * Returns the TD at coords. If topmost is set to true, returns TD from the topmost overlay layer,\n     * if not set or set to false, returns TD from the master table.\n     *\n     * @param {CellCoords} coords The cell coordinates.\n     * @param {boolean} [topmost=false] If set to `true`, it returns the TD element from the topmost overlay. For example,\n     *                                  if the wanted cell is in the range of fixed rows, it will return a TD element\n     *                                  from the top overlay.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"getCell\",\n    value: function getCell(coords) {\n      var topmost = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (!topmost) {\n        return this.wtTable.getCell(coords);\n      }\n\n      var totalRows = this.wtSettings.getSetting('totalRows');\n      var fixedRowsTop = this.wtSettings.getSetting('fixedRowsTop');\n      var fixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');\n      var fixedColumns = this.wtSettings.getSetting('fixedColumnsLeft');\n\n      if (coords.row < fixedRowsTop && coords.col < fixedColumns) {\n        return this.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell(coords);\n      } else if (coords.row < fixedRowsTop) {\n        return this.wtOverlays.topOverlay.clone.wtTable.getCell(coords);\n      } else if (coords.col < fixedColumns && coords.row >= totalRows - fixedRowsBottom) {\n        if (this.wtOverlays.bottomLeftCornerOverlay && this.wtOverlays.bottomLeftCornerOverlay.clone) {\n          return this.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.getCell(coords);\n        }\n      } else if (coords.col < fixedColumns) {\n        return this.wtOverlays.leftOverlay.clone.wtTable.getCell(coords);\n      } else if (coords.row < totalRows && coords.row >= totalRows - fixedRowsBottom) {\n        if (this.wtOverlays.bottomOverlay && this.wtOverlays.bottomOverlay.clone) {\n          return this.wtOverlays.bottomOverlay.clone.wtTable.getCell(coords);\n        }\n      }\n\n      return this.wtTable.getCell(coords);\n    }\n    /**\n     * @param {object} settings The singular settings to update or if passed as object to merge with.\n     * @param {*} value The value to set if the first argument is passed as string.\n     * @returns {Walkontable}\n     */\n\n  }, {\n    key: \"update\",\n    value: function update(settings, value) {\n      return this.wtSettings.update(settings, value);\n    }\n    /**\n     * Scrolls the viewport to a cell (rerenders if needed).\n     *\n     * @param {CellCoords} coords The cell coordinates to scroll to.\n     * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n     * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.\n     * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n     * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"scrollViewport\",\n    value: function scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n      if (coords.col < 0 || coords.row < 0) {\n        return false;\n      }\n\n      return this.wtScroll.scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft);\n    }\n    /**\n     * Scrolls the viewport to a column (rerenders if needed).\n     *\n     * @param {number} column Visual column index.\n     * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.\n     * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"scrollViewportHorizontally\",\n    value: function scrollViewportHorizontally(column, snapToRight, snapToLeft) {\n      if (column < 0) {\n        return false;\n      }\n\n      return this.wtScroll.scrollViewportHorizontally(column, snapToRight, snapToLeft);\n    }\n    /**\n     * Scrolls the viewport to a row (rerenders if needed).\n     *\n     * @param {number} row Visual row index.\n     * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n     * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"scrollViewportVertically\",\n    value: function scrollViewportVertically(row, snapToTop, snapToBottom) {\n      if (row < 0) {\n        return false;\n      }\n\n      return this.wtScroll.scrollViewportVertically(row, snapToTop, snapToBottom);\n    }\n    /**\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getViewport\",\n    value: function getViewport() {\n      return [this.wtTable.getFirstVisibleRow(), this.wtTable.getFirstVisibleColumn(), this.wtTable.getLastVisibleRow(), this.wtTable.getLastVisibleColumn()];\n    }\n    /**\n     * Get overlay name.\n     *\n     * @returns {string}\n     */\n\n  }, {\n    key: \"getOverlayName\",\n    value: function getOverlayName() {\n      return this.cloneOverlay ? this.cloneOverlay.type : 'master';\n    }\n    /**\n     * Export settings as class names added to the parent element of the table.\n     */\n\n  }, {\n    key: \"exportSettingsAsClassNames\",\n    value: function exportSettingsAsClassNames() {\n      var _this = this;\n\n      var toExport = {\n        rowHeaders: 'htRowHeaders',\n        columnHeaders: 'htColumnHeaders'\n      };\n      var allClassNames = [];\n      var newClassNames = [];\n      objectEach(toExport, function (className, key) {\n        if (_this.getSetting(key).length) {\n          newClassNames.push(className);\n        }\n\n        allClassNames.push(className);\n      });\n      removeClass(this.wtTable.wtRootElement.parentNode, allClassNames);\n      addClass(this.wtTable.wtRootElement.parentNode, newClassNames);\n    }\n    /**\n     * Get/Set Walkontable instance setting.\n     *\n     * @param {string} key The settings key to retrieve.\n     * @param {*} [param1] Additional parameter passed to the options defined as function.\n     * @param {*} [param2] Additional parameter passed to the options defined as function.\n     * @param {*} [param3] Additional parameter passed to the options defined as function.\n     * @param {*} [param4] Additional parameter passed to the options defined as function.\n     * @returns {*}\n     */\n\n  }, {\n    key: \"getSetting\",\n    value: function getSetting(key, param1, param2, param3, param4) {\n      // this is faster than .apply - https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n      return this.wtSettings.getSetting(key, param1, param2, param3, param4);\n    }\n    /**\n     * Checks if setting exists.\n     *\n     * @param {string} key The settings key to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"hasSetting\",\n    value: function hasSetting(key) {\n      return this.wtSettings.has(key);\n    }\n    /**\n     * Destroy instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.wtOverlays.destroy();\n      this.wtEvent.destroy();\n    }\n  }]);\n\n  return Walkontable;\n}();\n\nexport default Walkontable;", "var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n  values: function values(O) {\n    return $values(O);\n  }\n});\n", "function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.values.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { addClass, hasClass } from \"./../../../helpers/dom/element.mjs\";\nimport Border from \"./border.mjs\";\nimport CellCoords from \"./cell/coords.mjs\";\nimport CellRange from \"./cell/range.mjs\";\n/**\n * @class Selection\n */\n\nvar Selection = /*#__PURE__*/function () {\n  /**\n   * @param {object} settings The selection settings object.\n   * @param {CellRange} cellRange The cell range instance.\n   */\n  function Selection(settings, cellRange) {\n    _classCallCheck(this, Selection);\n\n    this.settings = settings;\n    this.cellRange = cellRange || null;\n    this.instanceBorders = {};\n    this.classNames = [this.settings.className];\n    this.classNameGenerator = this.linearClassNameGenerator(this.settings.className, this.settings.layerLevel);\n  }\n  /**\n   * Each Walkontable clone requires it's own border for every selection. This method creates and returns selection\n   * borders per instance.\n   *\n   * @param {Walkontable} wotInstance The Walkontable instance.\n   * @returns {Border}\n   */\n\n\n  _createClass(Selection, [{\n    key: \"getBorder\",\n    value: function getBorder(wotInstance) {\n      if (!this.instanceBorders[wotInstance.guid]) {\n        this.instanceBorders[wotInstance.guid] = new Border(wotInstance, this.settings);\n      }\n\n      return this.instanceBorders[wotInstance.guid];\n    }\n    /**\n     * Checks if selection is empty.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return this.cellRange === null;\n    }\n    /**\n     * Adds a cell coords to the selection.\n     *\n     * @param {CellCoords} coords The cell coordinates to add.\n     * @returns {Selection}\n     */\n\n  }, {\n    key: \"add\",\n    value: function add(coords) {\n      if (this.isEmpty()) {\n        this.cellRange = new CellRange(coords);\n      } else {\n        this.cellRange.expand(coords);\n      }\n\n      return this;\n    }\n    /**\n     * If selection range from or to property equals oldCoords, replace it with newCoords. Return boolean\n     * information about success.\n     *\n     * @param {CellCoords} oldCoords An old cell coordinates to replace.\n     * @param {CellCoords} newCoords The new cell coordinates.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"replace\",\n    value: function replace(oldCoords, newCoords) {\n      if (!this.isEmpty()) {\n        if (this.cellRange.from.isEqual(oldCoords)) {\n          this.cellRange.from = newCoords;\n          return true;\n        }\n\n        if (this.cellRange.to.isEqual(oldCoords)) {\n          this.cellRange.to = newCoords;\n          return true;\n        }\n      }\n\n      return false;\n    }\n    /**\n     * Clears selection.\n     *\n     * @returns {Selection}\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.cellRange = null;\n      return this;\n    }\n    /**\n     * Returns the top left (TL) and bottom right (BR) selection coordinates.\n     *\n     * @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]`.\n     */\n\n  }, {\n    key: \"getCorners\",\n    value: function getCorners() {\n      var topLeft = this.cellRange.getOuterTopLeftCorner();\n      var bottomRight = this.cellRange.getOuterBottomRightCorner();\n      return [topLeft.row, topLeft.col, bottomRight.row, bottomRight.col];\n    }\n    /**\n     * Adds class name to cell element at given coords.\n     *\n     * @param {Walkontable} wotInstance Walkontable instance.\n     * @param {number} sourceRow Cell row coord.\n     * @param {number} sourceColumn Cell column coord.\n     * @param {string} className Class name.\n     * @param {boolean} [markIntersections=false] If `true`, linear className generator will be used to add CSS classes\n     *                                            in a continuous way.\n     * @returns {Selection}\n     */\n\n  }, {\n    key: \"addClassAtCoords\",\n    value: function addClassAtCoords(wotInstance, sourceRow, sourceColumn, className) {\n      var markIntersections = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n      var TD = wotInstance.wtTable.getCell(new CellCoords(sourceRow, sourceColumn));\n\n      if (_typeof(TD) === 'object') {\n        var cellClassName = className;\n\n        if (markIntersections) {\n          cellClassName = this.classNameGenerator(TD);\n\n          if (!this.classNames.includes(cellClassName)) {\n            this.classNames.push(cellClassName);\n          }\n        }\n\n        addClass(TD, cellClassName);\n      }\n\n      return this;\n    }\n    /**\n     * Generate helper for calculating classNames based on previously added base className.\n     * The generated className is always generated as a continuation of the previous className. For example, when\n     * the currently checked element has 'area-2' className the generated new className will be 'area-3'. When\n     * the element doesn't have any classNames than the base className will be returned ('area');.\n     *\n     * @param {string} baseClassName Base className to be used.\n     * @param {number} layerLevelOwner Layer level which the instance of the Selection belongs to.\n     * @returns {Function}\n     */\n\n  }, {\n    key: \"linearClassNameGenerator\",\n    value: function linearClassNameGenerator(baseClassName, layerLevelOwner) {\n      // TODO: Make this recursive function Proper Tail Calls (TCO/PTC) friendly.\n      return function calcClassName(element) {\n        var previousIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;\n\n        if (layerLevelOwner === 0 || previousIndex === 0) {\n          return baseClassName;\n        }\n\n        var index = previousIndex >= 0 ? previousIndex : layerLevelOwner;\n        var className = baseClassName;\n        index -= 1;\n        var previousClassName = index === 0 ? baseClassName : \"\".concat(baseClassName, \"-\").concat(index);\n\n        if (hasClass(element, previousClassName)) {\n          var currentLayer = index + 1;\n          className = \"\".concat(baseClassName, \"-\").concat(currentLayer);\n        } else {\n          className = calcClassName(element, index);\n        }\n\n        return className;\n      };\n    }\n    /**\n     * @param {Walkontable} wotInstance The Walkontable instance.\n     */\n\n  }, {\n    key: \"draw\",\n    value: function draw(wotInstance) {\n      if (this.isEmpty()) {\n        if (this.settings.border) {\n          this.getBorder(wotInstance).disappear();\n        }\n\n        return;\n      }\n\n      var renderedRows = wotInstance.wtTable.getRenderedRowsCount();\n      var renderedColumns = wotInstance.wtTable.getRenderedColumnsCount();\n      var corners = this.getCorners();\n\n      var _corners = _slicedToArray(corners, 4),\n          topRow = _corners[0],\n          topColumn = _corners[1],\n          bottomRow = _corners[2],\n          bottomColumn = _corners[3];\n\n      var _this$settings = this.settings,\n          highlightHeaderClassName = _this$settings.highlightHeaderClassName,\n          highlightColumnClassName = _this$settings.highlightColumnClassName,\n          highlightRowClassName = _this$settings.highlightRowClassName,\n          highlightOnlyClosestHeader = _this$settings.highlightOnlyClosestHeader,\n          selectionType = _this$settings.selectionType;\n      var isHeaderSelectionType = selectionType === void 0 || ['active-header', 'header'].includes(selectionType);\n\n      if (isHeaderSelectionType && topColumn !== null && bottomColumn !== null) {\n        var selectionColumnCursor = 0;\n\n        for (var column = 0; column < renderedColumns; column += 1) {\n          var sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column);\n\n          if (sourceCol >= topColumn && sourceCol <= bottomColumn) {\n            var THs = wotInstance.wtTable.getColumnHeaders(sourceCol);\n            var closestHeaderLevel = THs.length - 1;\n\n            if (highlightOnlyClosestHeader && THs.length > 1) {\n              THs = [THs[closestHeaderLevel]];\n            }\n\n            for (var headerLevel = 0; headerLevel < THs.length; headerLevel += 1) {\n              var newClasses = [];\n              var TH = THs[headerLevel];\n\n              if (highlightHeaderClassName) {\n                newClasses.push(highlightHeaderClassName);\n              }\n\n              if (highlightColumnClassName) {\n                newClasses.push(highlightColumnClassName);\n              }\n\n              headerLevel = highlightOnlyClosestHeader ? closestHeaderLevel : headerLevel;\n              var newSourceCol = wotInstance.getSetting('onBeforeHighlightingColumnHeader', sourceCol, headerLevel, {\n                selectionType: selectionType,\n                columnCursor: selectionColumnCursor,\n                selectionWidth: bottomColumn - topColumn + 1,\n                classNames: newClasses\n              });\n\n              if (newSourceCol !== sourceCol) {\n                TH = wotInstance.wtTable.getColumnHeader(newSourceCol, headerLevel);\n              }\n\n              addClass(TH, newClasses);\n            }\n\n            selectionColumnCursor += 1;\n          }\n        }\n      }\n\n      if (topRow !== null && bottomRow !== null) {\n        var selectionRowCursor = 0;\n\n        for (var row = 0; row < renderedRows; row += 1) {\n          var sourceRow = wotInstance.wtTable.rowFilter.renderedToSource(row);\n\n          if (isHeaderSelectionType && sourceRow >= topRow && sourceRow <= bottomRow) {\n            var _THs = wotInstance.wtTable.getRowHeaders(sourceRow);\n\n            var _closestHeaderLevel = _THs.length - 1;\n\n            if (highlightOnlyClosestHeader && _THs.length > 1) {\n              _THs = [_THs[_closestHeaderLevel]];\n            }\n\n            for (var _headerLevel = 0; _headerLevel < _THs.length; _headerLevel += 1) {\n              var _newClasses = [];\n              var _TH = _THs[_headerLevel];\n\n              if (highlightHeaderClassName) {\n                _newClasses.push(highlightHeaderClassName);\n              }\n\n              if (highlightRowClassName) {\n                _newClasses.push(highlightRowClassName);\n              }\n\n              _headerLevel = highlightOnlyClosestHeader ? _closestHeaderLevel : _headerLevel;\n              var newSourceRow = wotInstance.getSetting('onBeforeHighlightingRowHeader', sourceRow, _headerLevel, {\n                selectionType: selectionType,\n                rowCursor: selectionRowCursor,\n                selectionHeight: bottomRow - topRow + 1,\n                classNames: _newClasses\n              });\n\n              if (newSourceRow !== sourceRow) {\n                _TH = wotInstance.wtTable.getRowHeader(newSourceRow, _headerLevel);\n              }\n\n              addClass(_TH, _newClasses);\n            }\n\n            selectionRowCursor += 1;\n          }\n\n          if (topColumn !== null && bottomColumn !== null) {\n            for (var _column = 0; _column < renderedColumns; _column += 1) {\n              var _sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(_column);\n\n              if (sourceRow >= topRow && sourceRow <= bottomRow && _sourceCol >= topColumn && _sourceCol <= bottomColumn) {\n                // selected cell\n                if (this.settings.className) {\n                  this.addClassAtCoords(wotInstance, sourceRow, _sourceCol, this.settings.className, this.settings.markIntersections);\n                }\n              } else if (sourceRow >= topRow && sourceRow <= bottomRow) {\n                // selection is in this row\n                if (highlightRowClassName) {\n                  this.addClassAtCoords(wotInstance, sourceRow, _sourceCol, highlightRowClassName);\n                }\n              } else if (_sourceCol >= topColumn && _sourceCol <= bottomColumn) {\n                // selection is in this column\n                if (highlightColumnClassName) {\n                  this.addClassAtCoords(wotInstance, sourceRow, _sourceCol, highlightColumnClassName);\n                }\n              }\n\n              var additionalSelectionClass = wotInstance.getSetting('onAfterDrawSelection', sourceRow, _sourceCol, this.settings.layerLevel);\n\n              if (typeof additionalSelectionClass === 'string') {\n                this.addClassAtCoords(wotInstance, sourceRow, _sourceCol, additionalSelectionClass);\n              }\n            }\n          }\n        }\n      }\n\n      wotInstance.getSetting('onBeforeDrawBorders', corners, this.settings.className);\n\n      if (this.settings.border) {\n        // warning! border.appear modifies corners!\n        this.getBorder(wotInstance).appear(corners);\n      }\n    }\n    /**\n     * Cleans up all the DOM state related to a Selection instance. Call this prior to deleting a Selection instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      Object.values(this.instanceBorders).forEach(function (border) {\n        return border.destroy();\n      });\n    }\n  }]);\n\n  return Selection;\n}();\n\nexport default Selection;", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\n/**\n * Utility to register editors and common namespace for keeping reference to all editor classes.\n */\nimport Hooks from \"../pluginHooks.mjs\";\nimport staticRegister from \"../utils/staticRegister.mjs\";\nvar registeredEditorClasses = new WeakMap();\n\nvar _staticRegister = staticRegister('editors'),\n    register = _staticRegister.register,\n    getItem = _staticRegister.getItem,\n    hasItem = _staticRegister.hasItem,\n    getNames = _staticRegister.getNames,\n    getValues = _staticRegister.getValues;\n/**\n * @param {BaseEditor} editorClass The editor constructor.\n */\n\n\nexport function RegisteredEditor(editorClass) {\n  var instances = {};\n  var Clazz = editorClass;\n\n  this.getConstructor = function () {\n    return editorClass;\n  };\n\n  this.getInstance = function (hotInstance) {\n    if (!(hotInstance.guid in instances)) {\n      instances[hotInstance.guid] = new Clazz(hotInstance);\n    }\n\n    return instances[hotInstance.guid];\n  };\n\n  Hooks.getSingleton().add('afterDestroy', function () {\n    instances[this.guid] = null;\n  });\n}\n/**\n * Returns instance (singleton) of editor class.\n *\n * @param {string} name Name of an editor under which it has been stored.\n * @param {object} hotInstance Instance of Handsontable.\n * @returns {Function} Returns instance of editor.\n */\n\nexport function _getEditorInstance(name, hotInstance) {\n  var editor;\n\n  if (typeof name === 'function') {\n    if (!registeredEditorClasses.get(name)) {\n      _register(null, name);\n    }\n\n    editor = registeredEditorClasses.get(name);\n  } else if (typeof name === 'string') {\n    editor = getItem(name);\n  } else {\n    throw Error('Only strings and functions can be passed as \"editor\" parameter');\n  }\n\n  if (!editor) {\n    throw Error(\"No editor registered under name \\\"\".concat(name, \"\\\"\"));\n  }\n\n  return editor.getInstance(hotInstance);\n}\n/**\n * Retrieve editor class.\n *\n * @param {string} name Editor identification.\n * @returns {Function} Returns editor class.\n */\n\nfunction _getItem(name) {\n  if (!hasItem(name)) {\n    throw Error(\"No registered editor found under \\\"\".concat(name, \"\\\" name\"));\n  }\n\n  return getItem(name).getConstructor();\n}\n/**\n * Register editor class under specified name.\n *\n * @param {string} name Editor identification.\n * @param {Function} editorClass Editor class.\n */\n\n\nfunction _register(name, editorClass) {\n  if (name && typeof name !== 'string') {\n    editorClass = name;\n    name = editorClass.EDITOR_TYPE;\n  }\n\n  var editorWrapper = new RegisteredEditor(editorClass);\n\n  if (typeof name === 'string') {\n    register(name, editorWrapper);\n  }\n\n  registeredEditorClasses.set(editorClass, editorWrapper);\n}\n\nexport { _register as registerEditor, _getItem as getEditor, _getEditorInstance as getEditorInstance, hasItem as hasEditor, getNames as getRegisteredEditorNames, getValues as getRegisteredEditors };", "import \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\n\nvar _templateObject;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.splice.js\";\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nimport { arrayEach } from \"./helpers/array.mjs\";\nimport { objectEach } from \"./helpers/object.mjs\";\nimport { substitute } from \"./helpers/string.mjs\";\nimport { warn } from \"./helpers/console.mjs\";\nimport { toSingleLine } from \"./helpers/templateLiteralTag.mjs\";\nimport { fastCall } from \"./helpers/function.mjs\";\n/**\n * @description\n * Handsontable events are the common interface that function in 2 ways: as __callbacks__ and as __hooks__.\n *\n * @example\n *\n * ```js\n * // Using events as callbacks:\n * ...\n * const hot1 = new Handsontable(document.getElementById('example1'), {\n *   afterChange: function(changes, source) {\n *     $.ajax({\n *       url: \"save.php',\n *       data: change\n *     });\n *   }\n * });\n * ...\n * ```\n *\n * ```js\n * // Using events as plugin hooks:\n * ...\n * const hot1 = new Handsontable(document.getElementById('example1'), {\n *   myPlugin: true\n * });\n *\n * const hot2 = new Handsontable(document.getElementById('example2'), {\n *   myPlugin: false\n * });\n *\n * // global hook\n * Handsontable.hooks.add('afterChange', function() {\n *   // Fired twice - for hot1 and hot2\n *   if (this.getSettings().myPlugin) {\n *     // function body - will only run for hot1\n *   }\n * });\n *\n * // local hook (has same effect as a callback)\n * hot2.addHook('afterChange', function() {\n *   // function body - will only run in #example2\n * });\n * ```\n * ...\n */\n// @TODO: Move plugin description hooks to plugin?\n\nvar REGISTERED_HOOKS = [\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * Fired after resetting a cell's meta. This happens when the {@link Core#updateSettings} method is called.\n *\n * @event Hooks#afterCellMetaReset\n */\n'afterCellMetaReset',\n/**\n * Fired after one or more cells has been changed. The changes are triggered in any situation when the\n * value is entered using an editor or changed using API (e.q setDataAtCell).\n *\n * __Note:__ For performance reasons, the `changes` array is null for `\"loadData\"` source.\n *\n * @event Hooks#afterChange\n * @param {Array} changes 2D array containing information about each of the edited cells `[[row, prop, oldVal, newVal], ...]`.\n * @param {string} [source] String that identifies source of hook call ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n * @example\n * ```js\n * new Handsontable(element, {\n *   afterChange: (changes) => {\n *     changes.forEach(([row, prop, oldValue, newValue]) => {\n *       // Some logic...\n *     });\n *   }\n * })\n * ```\n */\n'afterChange',\n/**\n * Fired each time user opens {@link ContextMenu} and after setting up the Context Menu's default options. These options are a collection\n * which user can select by setting an array of keys or an array of objects in {@link Options#contextMenu} option.\n *\n * @event Hooks#afterContextMenuDefaultOptions\n * @param {Array} predefinedItems An array of objects containing information about the pre-defined Context Menu items.\n */\n'afterContextMenuDefaultOptions',\n/**\n * Fired each time user opens {@link ContextMenu} plugin before setting up the Context Menu's items but after filtering these options by\n * user (`contextMenu` option). This hook can by helpful to determine if user use specified menu item or to set up\n * one of the menu item to by always visible.\n *\n * @event Hooks#beforeContextMenuSetItems\n * @param {object[]} menuItems An array of objects containing information about to generated Context Menu items.\n */\n'beforeContextMenuSetItems',\n/**\n * Fired by {@link DropdownMenu} plugin after setting up the Dropdown Menu's default options. These options are a\n * collection which user can select by setting an array of keys or an array of objects in {@link Options#dropdownMenu}\n * option.\n *\n * @event Hooks#afterDropdownMenuDefaultOptions\n * @param {object[]} predefinedItems An array of objects containing information about the pre-defined Context Menu items.\n */\n'afterDropdownMenuDefaultOptions',\n/**\n * Fired by {@link DropdownMenu} plugin before setting up the Dropdown Menu's items but after filtering these options\n * by user (`dropdownMenu` option). This hook can by helpful to determine if user use specified menu item or to set\n * up one of the menu item to by always visible.\n *\n * @event Hooks#beforeDropdownMenuSetItems\n * @param {object[]} menuItems An array of objects containing information about to generated Dropdown Menu items.\n */\n'beforeDropdownMenuSetItems',\n/**\n * Fired by {@link ContextMenu} plugin after hiding the Context Menu. This hook is fired when {@link Options#contextMenu}\n * option is enabled.\n *\n * @event Hooks#afterContextMenuHide\n * @param {object} context The Context Menu plugin instance.\n */\n'afterContextMenuHide',\n/**\n * Fired by {@link ContextMenu} plugin before opening the Context Menu. This hook is fired when {@link Options#contextMenu}\n * option is enabled.\n *\n * @event Hooks#beforeContextMenuShow\n * @param {object} context The Context Menu instance.\n */\n'beforeContextMenuShow',\n/**\n * Fired by {@link ContextMenu} plugin after opening the Context Menu. This hook is fired when {@link Options#contextMenu}\n * option is enabled.\n *\n * @event Hooks#afterContextMenuShow\n * @param {object} context The Context Menu plugin instance.\n */\n'afterContextMenuShow',\n/**\n * Fired by {@link CopyPaste} plugin after reaching the copy limit while copying data. This hook is fired when\n * {@link Options#copyPaste} option is enabled.\n *\n * @event Hooks#afterCopyLimit\n * @param {number} selectedRows Count of selected copyable rows.\n * @param {number} selectedColumns Count of selected copyable columns.\n * @param {number} copyRowsLimit Current copy rows limit.\n * @param {number} copyColumnsLimit Current copy columns limit.\n */\n'afterCopyLimit',\n/**\n * Fired before created a new column.\n *\n * @event Hooks#beforeCreateCol\n * @param {number} index Represents the visual index of first newly created column in the data source array.\n * @param {number} amount Number of newly created columns in the data source array.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n * @returns {*} If `false` then creating columns is cancelled.\n * @example\n * ```js\n * // Return `false` to cancel column inserting.\n * new Handsontable(element, {\n *   beforeCreateCol: function(data, coords) {\n *     return false;\n *   }\n * });\n * ```\n */\n'beforeCreateCol',\n/**\n * Fired after created a new column.\n *\n * @event Hooks#afterCreateCol\n * @param {number} index Represents the visual index of first newly created column in the data source.\n * @param {number} amount Number of newly created columns in the data source.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n */\n'afterCreateCol',\n/**\n * Fired before created a new row.\n *\n * @event Hooks#beforeCreateRow\n * @param {number} index Represents the visual index of first newly created row in the data source array.\n * @param {number} amount Number of newly created rows in the data source array.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n * @returns {*|boolean} If false is returned the action is canceled.\n */\n'beforeCreateRow',\n/**\n * Fired after created a new row.\n *\n * @event Hooks#afterCreateRow\n * @param {number} index Represents the visual index of first newly created row in the data source array.\n * @param {number} amount Number of newly created rows in the data source array.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n */\n'afterCreateRow',\n/**\n * Fired after the current cell is deselected.\n *\n * @event Hooks#afterDeselect\n */\n'afterDeselect',\n/**\n * Fired after destroying the Handsontable instance.\n *\n * @event Hooks#afterDestroy\n */\n'afterDestroy',\n/**\n * General hook which captures `keydown` events attached to the document body. These events are delegated to the\n * hooks system and consumed by Core and internal modules (e.g plugins, editors).\n *\n * @event Hooks#afterDocumentKeyDown\n * @param {Event} event A native `keydown` event object.\n */\n'afterDocumentKeyDown',\n/**\n * Fired inside the Walkontable's selection `draw` method. Can be used to add additional class names to cells, depending on the current selection.\n *\n * @event Hooks#afterDrawSelection\n * @param {number} currentRow Row index of the currently processed cell.\n * @param {number} currentColumn Column index of the currently cell.\n * @param {number[]} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow, endColumn]`.\n * @param {number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n * @since 0.38.1\n * @returns {string|undefined} Can return a `String`, which will act as an additional `className` to be added to the currently processed cell.\n */\n'afterDrawSelection',\n/**\n * Fired inside the Walkontable's `refreshSelections` method. Can be used to remove additional class names from all cells in the table.\n *\n * @event Hooks#beforeRemoveCellClassNames\n * @since 0.38.1\n * @returns {string[]|undefined} Can return an `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.\n */\n'beforeRemoveCellClassNames',\n/**\n * Fired after getting the cell settings.\n *\n * @event Hooks#afterGetCellMeta\n * @param {number} row Visual row index.\n * @param {number} column Visual column index.\n * @param {object} cellProperties Object containing the cell properties.\n */\n'afterGetCellMeta',\n/**\n * Fired after retrieving information about a column header and appending it to the table header.\n *\n * @event Hooks#afterGetColHeader\n * @param {number} column Visual column index.\n * @param {HTMLTableCellElement} TH Header's TH element.\n */\n'afterGetColHeader',\n/**\n * Fired after retrieving information about a row header and appending it to the table header.\n *\n * @event Hooks#afterGetRowHeader\n * @param {number} row Visual row index.\n * @param {HTMLTableCellElement} TH Header's TH element.\n */\n'afterGetRowHeader',\n/**\n * Fired after the Handsontable instance is initiated.\n *\n * @event Hooks#afterInit\n */\n'afterInit',\n/**\n * Fired after Handsontable's [`data`](@/api/options.md#data)\n * gets modified by the [`loadData()`](@/api/core.md#loaddata) method\n * or the [`updateSettings()`](@/api/core.md#updatesettings) method.\n *\n * Read more:\n * - [Binding to data &#8594;](@/guides/getting-started/binding-to-data.md)\n * - [Saving data &#8594;](@/guides/getting-started/saving-data.md)\n *\n * @event Hooks#afterLoadData\n * @param {Array} sourceData An [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects), that contains Handsontable's data\n * @param {boolean} initialLoad A flag that indicates whether the data was loaded at Handsontable's initialization (`true`) or later (`false`)\n * @param {string} source The source of the call\n */\n'afterLoadData',\n/**\n * Fired after the [`updateData()`](@/api/core.md#updatedata) method\n * modifies Handsontable's [`data`](@/api/options.md#data).\n *\n * Read more:\n * - [Binding to data &#8594;](@/guides/getting-started/binding-to-data.md)\n * - [Saving data &#8594;](@/guides/getting-started/saving-data.md)\n *\n * @event Hooks#afterUpdateData\n * @since 11.1.0\n * @param {Array} sourceData An [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects), that contains Handsontable's data\n * @param {boolean} initialLoad A flag that indicates whether the data was loaded at Handsontable's initialization (`true`) or later (`false`)\n * @param {string} source The source of the call\n */\n'afterUpdateData',\n/**\n * Fired after a scroll event, which is identified as a momentum scroll (e.g. On an iPad).\n *\n * @event Hooks#afterMomentumScroll\n */\n'afterMomentumScroll',\n/**\n * Fired after a `mousedown` event is triggered on the cell corner (the drag handle).\n *\n * @event Hooks#afterOnCellCornerMouseDown\n * @param {Event} event `mousedown` event object.\n */\n'afterOnCellCornerMouseDown',\n/**\n * Fired after a `dblclick` event is triggered on the cell corner (the drag handle).\n *\n * @event Hooks#afterOnCellCornerDblClick\n * @param {Event} event `dblclick` event object.\n */\n'afterOnCellCornerDblClick',\n/**\n * Fired after clicking on a cell or row/column header. In case the row/column header was clicked, the coordinate\n * indexes are negative.\n *\n * For example clicking on the row header of cell (0, 0) results with `afterOnCellMouseDown` called\n * with coordinates `{row: 0, col: -1}`.\n *\n * @event Hooks#afterOnCellMouseDown\n * @param {Event} event `mousedown` event object.\n * @param {CellCoords} coords Coordinates object containing the visual row and visual column indexes of the clicked cell.\n * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n */\n'afterOnCellMouseDown',\n/**\n * Fired after clicking on a cell or row/column header. In case the row/column header was clicked, the coordinate\n * indexes are negative.\n *\n * For example clicking on the row header of cell (0, 0) results with `afterOnCellMouseUp` called\n * with coordinates `{row: 0, col: -1}`.\n *\n * @event Hooks#afterOnCellMouseUp\n * @param {Event} event `mouseup` event object.\n * @param {CellCoords} coords Coordinates object containing the visual row and visual column indexes of the clicked cell.\n * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n */\n'afterOnCellMouseUp',\n/**\n * Fired after clicking right mouse button on a cell or row/column header.\n *\n * For example clicking on the row header of cell (0, 0) results with `afterOnCellContextMenu` called\n * with coordinates `{row: 0, col: -1}`.\n *\n * @event Hooks#afterOnCellContextMenu\n * @since 4.1.0\n * @param {Event} event `contextmenu` event object.\n * @param {CellCoords} coords Coordinates object containing the visual row and visual column indexes of the clicked cell.\n * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n */\n'afterOnCellContextMenu',\n/**\n * Fired after hovering a cell or row/column header with the mouse cursor. In case the row/column header was\n * hovered, the index is negative.\n *\n * For example, hovering over the row header of cell (0, 0) results with `afterOnCellMouseOver` called\n * with coords `{row: 0, col: -1}`.\n *\n * @event Hooks#afterOnCellMouseOver\n * @param {Event} event `mouseover` event object.\n * @param {CellCoords} coords Hovered cell's visual coordinate object.\n * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n */\n'afterOnCellMouseOver',\n/**\n * Fired after leaving a cell or row/column header with the mouse cursor.\n *\n * @event Hooks#afterOnCellMouseOut\n * @param {Event} event `mouseout` event object.\n * @param {CellCoords} coords Leaved cell's visual coordinate object.\n * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n */\n'afterOnCellMouseOut',\n/**\n * Fired after one or more columns are removed.\n *\n * @event Hooks#afterRemoveCol\n * @param {number} index Visual index of starter column.\n * @param {number} amount An amount of removed columns.\n * @param {number[]} physicalColumns An array of physical columns removed from the data source.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n */\n'afterRemoveCol',\n/**\n * Fired after one or more rows are removed.\n *\n * @event Hooks#afterRemoveRow\n * @param {number} index Visual index of starter row.\n * @param {number} amount An amount of removed rows.\n * @param {number[]} physicalRows An array of physical rows removed from the data source.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n */\n'afterRemoveRow',\n/**\n * Fired before starting rendering the cell.\n *\n * @event Hooks#beforeRenderer\n * @param {HTMLTableCellElement} TD Currently rendered cell's TD element.\n * @param {number} row Visual row index.\n * @param {number} column Visual column index.\n * @param {string|number} prop Column property name or a column index, if datasource is an array of arrays.\n * @param {*} value Value of the rendered cell.\n * @param {object} cellProperties Object containing the cell's properties.\n */\n'beforeRenderer',\n/**\n * Fired after finishing rendering the cell (after the renderer finishes).\n *\n * @event Hooks#afterRenderer\n * @param {HTMLTableCellElement} TD Currently rendered cell's TD element.\n * @param {number} row Visual row index.\n * @param {number} column Visual column index.\n * @param {string|number} prop Column property name or a column index, if datasource is an array of arrays.\n * @param {*} value Value of the rendered cell.\n * @param {object} cellProperties Object containing the cell's properties.\n */\n'afterRenderer',\n/**\n * Fired after the horizontal scroll event.\n *\n * @event Hooks#afterScrollHorizontally\n */\n'afterScrollHorizontally',\n/**\n * Fired after the vertical scroll event.\n *\n * @event Hooks#afterScrollVertically\n */\n'afterScrollVertically',\n/**\n * Fired after one or more cells are selected (e.g. During mouse move).\n *\n * @event Hooks#afterSelection\n * @param {number} row Selection start visual row index.\n * @param {number} column Selection start visual column index.\n * @param {number} row2 Selection end visual row index.\n * @param {number} column2 Selection end visual column index.\n * @param {object} preventScrolling A reference to the observable object with the `value` property.\n *                                  Property `preventScrolling.value` expects a boolean value that\n *                                  Handsontable uses to control scroll behavior after selection.\n * @param {object} preventScrolling Object with `value` property where its value change will be observed.\n * @param {number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n * @example\n * ```js\n * new Handsontable(element, {\n *   afterSelection: (row, column, row2, column2, preventScrolling, selectionLayerLevel) => {\n *     // If set to `false` (default): when cell selection is outside the viewport,\n *     // Handsontable scrolls the viewport to cell selection's end corner.\n *     // If set to `true`: when cell selection is outside the viewport,\n *     // Handsontable doesn't scroll to cell selection's end corner.\n *     preventScrolling.value = true;\n *   }\n * })\n * ```\n */\n'afterSelection',\n/**\n * Fired after one or more cells are selected.\n *\n * The `prop` and `prop2` arguments represent the source object property name instead of the column number.\n *\n * @event Hooks#afterSelectionByProp\n * @param {number} row Selection start visual row index.\n * @param {string} prop Selection start data source object property name.\n * @param {number} row2 Selection end visual row index.\n * @param {string} prop2 Selection end data source object property name.\n * @param {object} preventScrolling Object with `value` property where its value change will be observed.\n * @param {number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n * @example\n * ```js\n * new Handsontable(element, {\n *   afterSelectionByProp: (row, column, row2, column2, preventScrolling, selectionLayerLevel) => {\n *     // setting if prevent scrolling after selection\n *     preventScrolling.value = true;\n *   }\n * })\n * ```\n */\n'afterSelectionByProp',\n/**\n * Fired after one or more cells are selected (e.g. On mouse up).\n *\n * @event Hooks#afterSelectionEnd\n * @param {number} row Selection start visual row index.\n * @param {number} column Selection start visual column index.\n * @param {number} row2 Selection end visual row index.\n * @param {number} column2 Selection end visual column index.\n * @param {number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n */\n'afterSelectionEnd',\n/**\n * Fired after one or more cells are selected (e.g. On mouse up).\n *\n * The `prop` and `prop2` arguments represent the source object property name instead of the column number.\n *\n * @event Hooks#afterSelectionEndByProp\n * @param {number} row Selection start visual row index.\n * @param {string} prop Selection start data source object property index.\n * @param {number} row2 Selection end visual row index.\n * @param {string} prop2 Selection end data source object property index.\n * @param {number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n */\n'afterSelectionEndByProp',\n/**\n * Fired after cell meta is changed.\n *\n * @event Hooks#afterSetCellMeta\n * @param {number} row Visual row index.\n * @param {number} column Visual column index.\n * @param {string} key The updated meta key.\n * @param {*} value The updated meta value.\n */\n'afterSetCellMeta',\n/**\n * Fired after cell meta is removed.\n *\n * @event Hooks#afterRemoveCellMeta\n * @param {number} row Visual row index.\n * @param {number} column Visual column index.\n * @param {string} key The removed meta key.\n * @param {*} value Value which was under removed key of cell meta.\n */\n'afterRemoveCellMeta',\n/**\n * Fired after cell data was changed.\n *\n * @event Hooks#afterSetDataAtCell\n * @param {Array} changes An array of changes in format `[[row, column, oldValue, value], ...]`.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n */\n'afterSetDataAtCell',\n/**\n * Fired after cell data was changed.\n * Called only when `setDataAtRowProp` was executed.\n *\n * @event Hooks#afterSetDataAtRowProp\n * @param {Array} changes An array of changes in format `[[row, prop, oldValue, value], ...]`.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n */\n'afterSetDataAtRowProp',\n/**\n * Fired after cell source data was changed.\n *\n * @event Hooks#afterSetSourceDataAtCell\n * @since 8.0.0\n * @param {Array} changes An array of changes in format `[[row, column, oldValue, value], ...]`.\n * @param {string} [source] String that identifies source of hook call.\n */\n'afterSetSourceDataAtCell',\n/**\n * Fired after calling the `updateSettings` method.\n *\n * @event Hooks#afterUpdateSettings\n * @param {object} newSettings New settings object.\n */\n'afterUpdateSettings',\n/**\n * @description\n * A plugin hook executed after validator function, only if validator function is defined.\n * Validation result is the first parameter. This can be used to determinate if validation passed successfully or not.\n *\n * __Returning false from the callback will mark the cell as invalid__.\n *\n * @event Hooks#afterValidate\n * @param {boolean} isValid `true` if valid, `false` if not.\n * @param {*} value The value in question.\n * @param {number} row Visual row index.\n * @param {string|number} prop Property name / visual column index.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n * @returns {void | boolean} If `false` the cell will be marked as invalid, `true` otherwise.\n */\n'afterValidate',\n/**\n * Fired before successful change of language (when proper language code was set).\n *\n * @event Hooks#beforeLanguageChange\n * @since 0.35.0\n * @param {string} languageCode New language code.\n */\n'beforeLanguageChange',\n/**\n * Fired after successful change of language (when proper language code was set).\n *\n * @event Hooks#afterLanguageChange\n * @since 0.35.0\n * @param {string} languageCode New language code.\n */\n'afterLanguageChange',\n/**\n * Fired by {@link Autofill} plugin before populating the data in the autofill feature. This hook is fired when\n * {@link Options#fillHandle} option is enabled.\n *\n * @event Hooks#beforeAutofill\n * @param {Array[]} selectionData Data the autofill operation will start from.\n * @param {CellRange} sourceRange The range values will be filled from.\n * @param {CellRange} targetRange The range new values will be filled into.\n * @param {string} direction Declares the direction of the autofill. Possible values: `up`, `down`, `left`, `right`.\n *\n * @returns {boolean|Array[]} If false, the operation is cancelled. If array of arrays, the returned data\n *                              will be passed into `populateFromArray` instead of the default autofill\n *                              algorithm's result.\n */\n'beforeAutofill',\n/**\n * Fired by {@link Autofill} plugin after populating the data in the autofill feature. This hook is fired when\n * {@link Options#fillHandle} option is enabled.\n *\n * @event Hooks#afterAutofill\n * @since 8.0.0\n * @param {Array[]} fillData The data that was used to fill the `targetRange`. If `beforeAutofill` was used\n *                            and returned `[[]]`, this will be the same object that was returned from `beforeAutofill`.\n * @param {CellRange} sourceRange The range values will be filled from.\n * @param {CellRange} targetRange The range new values will be filled into.\n * @param {string} direction Declares the direction of the autofill. Possible values: `up`, `down`, `left`, `right`.\n */\n'afterAutofill',\n/**\n * Fired before aligning the cell contents.\n *\n * @event Hooks#beforeCellAlignment\n * @param {object} stateBefore An object with class names defining the cell alignment.\n * @param {CellRange[]} range An array of CellRange coordinates where the alignment will be applied.\n * @param {string} type Type of the alignment - either `horizontal` or `vertical`.\n * @param {string} alignmentClass String defining the alignment class added to the cell.\n * Possible values:\n * * `htLeft`\n * * `htCenter`\n * * `htRight`\n * * `htJustify`\n * * `htTop`\n * * `htMiddle`\n * * `htBottom`.\n */\n'beforeCellAlignment',\n/**\n * Fired before one or more cells is changed. Its main purpose is to alter changes silently after input and before\n * table rendering.\n *\n * @event Hooks#beforeChange\n * @param {Array[]} changes 2D array containing information about each of the edited cells.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n * @returns {void | boolean} If `false` all changes were cancelled, `true` otherwise.\n * @example\n * ```js\n * // To disregard a single change, set changes[i] to null or remove it from array using changes.splice(i, 1).\n * new Handsontable(element, {\n *   beforeChange: (changes, source) => {\n *     // [[row, prop, oldVal, newVal], ...]\n *     changes[0] = null;\n *   }\n * });\n * // To alter a single change, overwrite the desired value to changes[i][3].\n * new Handsontable(element, {\n *   beforeChange: (changes, source) => {\n *     // [[row, prop, oldVal, newVal], ...]\n *     changes[0][3] = 10;\n *   }\n * });\n * // To cancel all edit, return false from the callback or set array length to 0 (changes.length = 0).\n * new Handsontable(element, {\n *   beforeChange: (changes, source) => {\n *     // [[row, prop, oldVal, newVal], ...]\n *     return false;\n *   }\n * });\n * ```\n */\n'beforeChange',\n/**\n * Fired right before rendering the changes.\n *\n * @event Hooks#beforeChangeRender\n * @param {Array[]} changes Array in form of `[row, prop, oldValue, newValue]`.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n */\n'beforeChangeRender',\n/**\n * Fired before drawing the borders.\n *\n * @event Hooks#beforeDrawBorders\n * @param {Array} corners Array specifying the current selection borders.\n * @param {string} borderClassName Specifies the border class name.\n */\n'beforeDrawBorders',\n/**\n * Fired before getting cell settings.\n *\n * @event Hooks#beforeGetCellMeta\n * @param {number} row Visual row index.\n * @param {number} column Visual column index.\n * @param {object} cellProperties Object containing the cell's properties.\n */\n'beforeGetCellMeta',\n/**\n * Fired before cell meta is removed.\n *\n * @event Hooks#beforeRemoveCellMeta\n * @param {number} row Visual row index.\n * @param {number} column Visual column index.\n * @param {string} key The removed meta key.\n * @param {*} value Value which is under removed key of cell meta.\n * @returns {*|boolean} If false is returned the action is canceled.\n */\n'beforeRemoveCellMeta',\n/**\n * Fired before the Handsontable instance is initiated.\n *\n * @event Hooks#beforeInit\n */\n'beforeInit',\n/**\n * Fired before the Walkontable instance is initiated.\n *\n * @event Hooks#beforeInitWalkontable\n * @param {object} walkontableConfig Walkontable configuration object.\n */\n'beforeInitWalkontable',\n/**\n * Fired before Handsontable's [`data`](@/api/options.md#data)\n * gets modified by the [`loadData()`](@/api/core.md#loaddata) method\n * or the [`updateSettings()`](@/api/core.md#updatesettings) method.\n *\n * Read more:\n * - [Binding to data &#8594;](@/guides/getting-started/binding-to-data.md)\n * - [Saving data &#8594;](@/guides/getting-started/saving-data.md)\n *\n * @event Hooks#beforeLoadData\n * @since 8.0.0\n * @param {Array} sourceData An [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects), that contains Handsontable's data\n * @param {boolean} initialLoad A flag that indicates whether the data was loaded at Handsontable's initialization (`true`) or later (`false`)\n * @param {string} source The source of the call\n * @returns {Array} The returned array will be used as Handsontable's new dataset.\n */\n'beforeLoadData',\n/**\n * Fired before the [`updateData()`](@/api/core.md#updatedata) method\n * modifies Handsontable's [`data`](@/api/options.md#data).\n *\n * Read more:\n * - [Binding to data &#8594;](@/guides/getting-started/binding-to-data.md)\n * - [Saving data &#8594;](@/guides/getting-started/saving-data.md)\n *\n * @event Hooks#beforeUpdateData\n * @since 11.1.0\n * @param {Array} sourceData An [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects), that contains Handsontable's data\n * @param {boolean} initialLoad A flag that indicates whether the data was loaded at Handsontable's initialization (`true`) or later (`false`)\n * @param {string} source The source of the call\n * @returns {Array} The returned array will be used as Handsontable's new dataset.\n */\n'beforeUpdateData',\n/**\n * Fired before keydown event is handled. It can be used to overwrite default key bindings.\n *\n * __Note__: To prevent default behavior you need to call `event.stopImmediatePropagation()` in your `beforeKeyDown`\n * handler.\n *\n * @event Hooks#beforeKeyDown\n * @param {Event} event Original DOM event.\n */\n'beforeKeyDown',\n/**\n * Fired after the user clicked a cell, but before all the calculations related with it.\n *\n * @event Hooks#beforeOnCellMouseDown\n * @param {Event} event The `mousedown` event object.\n * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n * @param {HTMLTableCellElement} TD TD element.\n * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n *                            a boolean value that allows or disallows changing the selection for that particular area.\n */\n'beforeOnCellMouseDown',\n/**\n * Fired after the user clicked a cell.\n *\n * @event Hooks#beforeOnCellMouseUp\n * @param {Event} event The `mouseup` event object.\n * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n * @param {HTMLTableCellElement} TD TD element.\n */\n'beforeOnCellMouseUp',\n/**\n * Fired after the user clicked a cell, but before all the calculations related with it.\n *\n * @event Hooks#beforeOnCellContextMenu\n * @since 4.1.0\n * @param {Event} event The `contextmenu` event object.\n * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n * @param {HTMLTableCellElement} TD TD element.\n */\n'beforeOnCellContextMenu',\n/**\n * Fired after the user moved cursor over a cell, but before all the calculations related with it.\n *\n * @event Hooks#beforeOnCellMouseOver\n * @param {Event} event The `mouseover` event object.\n * @param {CellCoords} coords CellCoords object containing the visual coordinates of the clicked cell.\n * @param {HTMLTableCellElement} TD TD element.\n * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n *                            a boolean value that allows or disallows changing the selection for that particular area.\n */\n'beforeOnCellMouseOver',\n/**\n * Fired after the user moved cursor out from a cell, but before all the calculations related with it.\n *\n * @event Hooks#beforeOnCellMouseOut\n * @param {Event} event The `mouseout` event object.\n * @param {CellCoords} coords CellCoords object containing the visual coordinates of the leaved cell.\n * @param {HTMLTableCellElement} TD TD element.\n */\n'beforeOnCellMouseOut',\n/**\n * Fired before one or more columns are about to be removed.\n *\n * @event Hooks#beforeRemoveCol\n * @param {number} index Visual index of starter column.\n * @param {number} amount Amount of columns to be removed.\n * @param {number[]} physicalColumns An array of physical columns removed from the data source.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n * @returns {*|boolean} If false is returned the action is canceled.\n */\n'beforeRemoveCol',\n/**\n * Fired when one or more rows are about to be removed.\n *\n * @event Hooks#beforeRemoveRow\n * @param {number} index Visual index of starter row.\n * @param {number} amount Amount of rows to be removed.\n * @param {number[]} physicalRows An array of physical rows removed from the data source.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n * @returns {*|boolean} If false is returned the action is canceled.\n */\n'beforeRemoveRow',\n/**\n * Fired before Handsontable's view-rendering engine is rendered.\n *\n * __Note:__ In Handsontable 9.x and earlier, the `beforeViewRender` hook was named `beforeRender`.\n *\n * @event Hooks#beforeViewRender\n * @since 10.0.0\n * @param {boolean} isForced If set to `true`, the rendering gets triggered by a change of settings, a change of\n *                           data, or a logic that needs a full Handsontable render cycle.\n *                           If set to `false`, the rendering gets triggered by scrolling or moving the selection.\n * @param {object} skipRender Object with `skipRender` property, if it is set to `true ` the next rendering cycle will be skipped.\n */\n'beforeViewRender',\n/**\n * Fired after Handsontable's view-rendering engine is rendered,\n * but before redrawing the selection borders and before scroll syncing.\n *\n * __Note:__ In Handsontable 9.x and earlier, the `afterViewRender` hook was named `afterRender`.\n *\n * @event Hooks#afterViewRender\n * @since 10.0.0\n * @param {boolean} isForced If set to `true`, the rendering gets triggered by a change of settings, a change of\n *                           data, or a logic that needs a full Handsontable render cycle.\n *                           If set to `false`, the rendering gets triggered by scrolling or moving the selection.\n */\n'afterViewRender',\n/**\n * Fired before Handsontable's view-rendering engine updates the view.\n *\n * The `beforeRender` event is fired right after the Handsontable\n * business logic is executed and right before the rendering engine starts calling\n * the Core logic, renderers, cell meta objects etc. to update the view.\n *\n * @event Hooks#beforeRender\n * @param {boolean} isForced If set to `true`, the rendering gets triggered by a change of settings, a change of\n *                           data, or a logic that needs a full Handsontable render cycle.\n *                           If set to `false`, the rendering gets triggered by scrolling or moving the selection.\n */\n'beforeRender',\n/**\n * Fired after Handsontable's view-rendering engine updates the view.\n *\n * @event Hooks#afterRender\n * @param {boolean} isForced If set to `true`, the rendering gets triggered by a change of settings, a change of\n *                           data, or a logic that needs a full Handsontable render cycle.\n *                           If set to `false`, the rendering gets triggered by scrolling or moving the selection.\n */\n'afterRender',\n/**\n * Fired before cell meta is changed.\n *\n * @event Hooks#beforeSetCellMeta\n * @since 8.0.0\n * @param {number} row Visual row index.\n * @param {number} column Visual column index.\n * @param {string} key The updated meta key.\n * @param {*} value The updated meta value.\n * @returns {*|boolean} If false is returned the action is canceled.\n */\n'beforeSetCellMeta',\n/**\n * Fired before setting range is started but not finished yet.\n *\n * @event Hooks#beforeSetRangeStartOnly\n * @param {CellCoords} coords CellCoords instance.\n */\n'beforeSetRangeStartOnly',\n/**\n * Fired before setting range is started.\n *\n * @event Hooks#beforeSetRangeStart\n * @param {CellCoords} coords CellCoords instance.\n */\n'beforeSetRangeStart',\n/**\n * Fired before setting range is ended.\n *\n * @event Hooks#beforeSetRangeEnd\n * @param {CellCoords} coords CellCoords instance.\n */\n'beforeSetRangeEnd',\n/**\n * Fired before the logic of handling a touch scroll, when user started scrolling on a touch-enabled device.\n *\n * @event Hooks#beforeTouchScroll\n */\n'beforeTouchScroll',\n/**\n * Fired before cell validation, only if validator function is defined. This can be used to manipulate the value\n * of changed cell before it is applied to the validator function.\n *\n * __Note:__ this will not affect values of changes. This will change value *ONLY* for validation.\n *\n * @event Hooks#beforeValidate\n * @param {*} value Value of the cell.\n * @param {number} row Visual row index.\n * @param {string|number} prop Property name / column index.\n * @param {string} [source] String that identifies source of hook call\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n */\n'beforeValidate',\n/**\n * Fired before cell value is rendered into the DOM (through renderer function). This can be used to manipulate the\n * value which is passed to the renderer without modifying the renderer itself.\n *\n * @event Hooks#beforeValueRender\n * @param {*} value Cell value to render.\n * @param {object} cellProperties An object containing the cell properties.\n */\n'beforeValueRender',\n/**\n * Fired after Handsontable instance is constructed (using `new` operator).\n *\n * @event Hooks#construct\n */\n'construct',\n/**\n * Fired after Handsontable instance is initiated but before table is rendered.\n *\n * @event Hooks#init\n */\n'init',\n/**\n * Fired when a column header index is about to be modified by a callback function.\n *\n * @event Hooks#modifyColHeader\n * @param {number} column Visual column header index.\n */\n'modifyColHeader',\n/**\n * Fired when a column width is about to be modified by a callback function.\n *\n * @event Hooks#modifyColWidth\n * @param {number} width Current column width.\n * @param {number} column Visual column index.\n */\n'modifyColWidth',\n/**\n * Fired when a row header index is about to be modified by a callback function.\n *\n * @event Hooks#modifyRowHeader\n * @param {number} row Visual row header index.\n */\n'modifyRowHeader',\n/**\n * Fired when a row height is about to be modified by a callback function.\n *\n * @event Hooks#modifyRowHeight\n * @param {number} height Row height.\n * @param {number} row Visual row index.\n */\n'modifyRowHeight',\n/**\n * Fired when a data was retrieved or modified.\n *\n * @event Hooks#modifyData\n * @param {number} row Physical row height.\n * @param {number} column Physical column index.\n * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value` property.\n * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n */\n'modifyData',\n/**\n * Fired when a data was retrieved or modified from the source data set.\n *\n * @event Hooks#modifySourceData\n * @since 8.0.0\n * @param {number} row Physical row index.\n * @param {number} column Physical column index.\n * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value` property.\n * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n */\n'modifySourceData',\n/**\n * Fired when a data was retrieved or modified.\n *\n * @event Hooks#modifyRowData\n * @param {number} row Physical row index.\n */\n'modifyRowData',\n/**\n * Used to modify the cell coordinates when using the `getCell` method, opening editor, getting value from the editor\n * and saving values from the closed editor.\n *\n * @event Hooks#modifyGetCellCoords\n * @since 0.36.0\n * @param {number} row Visual row index.\n * @param {number} column Visual column index.\n * @param {boolean} topmost If set to `true`, it returns the TD element from the topmost overlay. For example,\n *                          if the wanted cell is in the range of fixed rows, it will return a TD element\n *                          from the `top` overlay.\n */\n'modifyGetCellCoords',\n/**\n * Allows modify the visual row index that is used to retrieve the row header element (TH) before it's\n * highlighted (proper CSS class names are added). Modifying the visual row index allows building a custom\n * implementation of the nested headers feature or other features that require highlighting other DOM\n * elements than that the rendering engine, by default, would have highlighted.\n *\n * @event Hooks#beforeHighlightingRowHeader\n * @since 8.4.0\n * @param {number} row Visual row index.\n * @param {number} headerLevel Column header level (0 = most distant to the table).\n * @param {object} highlightMeta An object that contains additional information about processed selection.\n * @returns {number|undefined}\n */\n'beforeHighlightingRowHeader',\n/**\n * Allows modify the visual column index that is used to retrieve the column header element (TH) before it's\n * highlighted (proper CSS class names are added). Modifying the visual column index allows building a custom\n * implementation of the nested headers feature or other features that require highlighting other DOM\n * elements than that the rendering engine, by default, would have highlighted.\n *\n * @event Hooks#beforeHighlightingColumnHeader\n * @since 8.4.0\n * @param {number} column Visual column index.\n * @param {number} headerLevel Row header level (0 = most distant to the table).\n * @param {object} highlightMeta An object that contains additional information about processed selection.\n * @returns {number|undefined}\n */\n'beforeHighlightingColumnHeader',\n/**\n * Fired by {@link PersistentState} plugin, after loading value, saved under given key, from browser local storage. This hook is fired when\n * {@link Options#persistentState} option is enabled.\n *\n * @event Hooks#persistentStateLoad\n * @param {string} key Key.\n * @param {object} valuePlaceholder Object containing the loaded value under `valuePlaceholder.value` (if no value have been saved, `value` key will be undefined).\n */\n'persistentStateLoad',\n/**\n * Fired by {@link PersistentState} plugin after resetting data from local storage. If no key is given, all values associated with table will be cleared.\n * This hook is fired when {@link Options#persistentState} option is enabled.\n *\n * @event Hooks#persistentStateReset\n * @param {string} [key] Key.\n */\n'persistentStateReset',\n/**\n * Fired by {@link PersistentState} plugin, after saving value under given key in browser local storage. This hook is fired when\n * {@link Options#persistentState} option is enabled.\n *\n * @event Hooks#persistentStateSave\n * @param {string} key Key.\n * @param {Mixed} value Value to save.\n */\n'persistentStateSave',\n/**\n * Fired by {@link ColumnSorting} and {@link MultiColumnSorting} plugins before sorting the column. If you return `false` value inside callback for hook, then sorting\n * will be not applied by the Handsontable (useful for server-side sorting).\n *\n * This hook is fired when {@link Options#columnSorting} or {@link Options#multiColumnSorting} option is enabled.\n *\n * @event Hooks#beforeColumnSort\n * @param {Array} currentSortConfig Current sort configuration (for all sorted columns).\n * @param {Array} destinationSortConfigs Destination sort configuration (for all sorted columns).\n * @returns {boolean | void} If `false` the column will not be sorted, `true` otherwise.\n */\n'beforeColumnSort',\n/**\n * Fired by {@link ColumnSorting} and {@link MultiColumnSorting} plugins after sorting the column. This hook is fired when {@link Options#columnSorting}\n * or {@link Options#multiColumnSorting} option is enabled.\n *\n * @event Hooks#afterColumnSort\n * @param {Array} currentSortConfig Current sort configuration (for all sorted columns).\n * @param {Array} destinationSortConfigs Destination sort configuration (for all sorted columns).\n */\n'afterColumnSort',\n/**\n * Fired by {@link Autofill} plugin after setting range of autofill. This hook is fired when {@link Options#fillHandle}\n * option is enabled.\n *\n * @event Hooks#modifyAutofillRange\n * @param {Array} startArea Array of visual coordinates of the starting point for the drag-down operation (`[startRow, startColumn, endRow, endColumn]`).\n * @param {Array} entireArea Array of visual coordinates of the entire area of the drag-down operation (`[startRow, startColumn, endRow, endColumn]`).\n */\n'modifyAutofillRange',\n/**\n * Fired to allow modifying the copyable range with a callback function.\n *\n * @event Hooks#modifyCopyableRange\n * @param {Array[]} copyableRanges Array of objects defining copyable cells.\n */\n'modifyCopyableRange',\n/**\n * Fired by {@link CopyPaste} plugin before copying the values into clipboard and before clearing values of\n * the selected cells. This hook is fired when {@link Options#copyPaste} option is enabled.\n *\n * @event Hooks#beforeCut\n * @param {Array[]} data An array of arrays which contains data to cut.\n * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n *                       which will be cut out.\n * @returns {*} If returns `false` then operation of the cutting out is canceled.\n * @example\n * ```js\n * // To disregard a single row, remove it from the array using data.splice(i, 1).\n * new Handsontable(element, {\n *   beforeCut: function(data, coords) {\n *     // data -> [[1, 2, 3], [4, 5, 6]]\n *     data.splice(0, 1);\n *     // data -> [[4, 5, 6]]\n *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n *   }\n * });\n * // To cancel a cutting action, just return `false`.\n * new Handsontable(element, {\n *   beforeCut: function(data, coords) {\n *     return false;\n *   }\n * });\n * ```\n */\n'beforeCut',\n/**\n * Fired by {@link CopyPaste} plugin after data was cut out from the table. This hook is fired when\n * {@link Options#copyPaste} option is enabled.\n *\n * @event Hooks#afterCut\n * @param {Array[]} data An array of arrays which contains the cutted out data.\n * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n *                       which was cut out.\n */\n'afterCut',\n/**\n * Fired before values are copied into clipboard.\n *\n * @event Hooks#beforeCopy\n * @param {Array[]} data An array of arrays which contains data to copied.\n * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n *                         which will copied.\n * @returns {*} If returns `false` then copying is canceled.\n *\n * @example\n * ```js\n * // To disregard a single row, remove it from array using data.splice(i, 1).\n * ...\n * new Handsontable(document.getElementById('example'), {\n *   beforeCopy: (data, coords) => {\n *     // data -> [[1, 2, 3], [4, 5, 6]]\n *     data.splice(0, 1);\n *     // data -> [[4, 5, 6]]\n *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n *   }\n * });\n * ...\n *\n * // To cancel copying, return false from the callback.\n * ...\n * new Handsontable(document.getElementById('example'), {\n *   beforeCopy: (data, coords) => {\n *     return false;\n *   }\n * });\n * ...\n * ```\n */\n'beforeCopy',\n/**\n * Fired by {@link CopyPaste} plugin after data are pasted into table. This hook is fired when {@link Options#copyPaste}\n * option is enabled.\n *\n * @event Hooks#afterCopy\n * @param {Array[]} data An array of arrays which contains the copied data.\n * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n *                         which was copied.\n */\n'afterCopy',\n/**\n * Fired by {@link CopyPaste} plugin before values are pasted into table. This hook is fired when\n * {@link Options#copyPaste} option is enabled.\n *\n * @event Hooks#beforePaste\n * @param {Array[]} data An array of arrays which contains data to paste.\n * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n *                       that correspond to the previously selected area.\n * @returns {*} If returns `false` then pasting is canceled.\n * @example\n * ```js\n * // To disregard a single row, remove it from array using data.splice(i, 1).\n * new Handsontable(example, {\n *   beforePaste: (data, coords) => {\n *     // data -> [[1, 2, 3], [4, 5, 6]]\n *     data.splice(0, 1);\n *     // data -> [[4, 5, 6]]\n *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n *   }\n * });\n * // To cancel pasting, return false from the callback.\n * new Handsontable(example, {\n *   beforePaste: (data, coords) => {\n *     return false;\n *   }\n * });\n * ```\n */\n'beforePaste',\n/**\n * Fired by {@link CopyPaste} plugin after values are pasted into table. This hook is fired when\n * {@link Options#copyPaste} option is enabled.\n *\n * @event Hooks#afterPaste\n * @param {Array[]} data An array of arrays which contains the pasted data.\n * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n *                       that correspond to the previously selected area.\n */\n'afterPaste',\n/**\n * Fired by {@link ManualColumnMove} plugin before change order of the visual indexes. This hook is fired when\n * {@link Options#manualColumnMove} option is enabled.\n *\n * @event Hooks#beforeColumnMove\n * @param {Array} movedColumns Array of visual column indexes to be moved.\n * @param {number} finalIndex Visual column index, being a start index for the moved columns.\n *                            Points to where the elements will be placed after the moving action.\n *                            To check visualization of final index please take a look at\n *                            [documentation](@/guides/columns/column-moving.md).\n * @param {number|undefined} dropIndex Visual column index, being a drop index for the moved columns.\n *                                     Points to where we are going to drop the moved elements. To check\n *                                     visualization of drop index please take a look at\n *                                     [documentation](@/guides/columns/column-moving.md).\n *                                     It's `undefined` when `dragColumns` function wasn't called.\n * @param {boolean} movePossible Indicates if it's possible to move rows to the desired position.\n * @returns {void | boolean} If `false` the column will not be moved, `true` otherwise.\n */\n'beforeColumnMove',\n/**\n * Fired by {@link ManualColumnMove} plugin after changing order of the visual indexes.\n * This hook is fired when {@link Options#manualColumnMove} option is enabled.\n *\n * @event Hooks#afterColumnMove\n * @param {Array} movedColumns Array of visual column indexes to be moved.\n * @param {number} finalIndex Visual column index, being a start index for the moved columns.\n *                            Points to where the elements will be placed after the moving action.\n *                            To check visualization of final index please take a look at\n *                            [documentation](@/guides/columns/column-moving.md).\n * @param {number|undefined} dropIndex Visual column index, being a drop index for the moved columns.\n *                                     Points to where we are going to drop the moved elements.\n *                                     To check visualization of drop index please take a look at\n *                                     [documentation](@/guides/columns/column-moving.md).\n *                                     It's `undefined` when `dragColumns` function wasn't called.\n * @param {boolean} movePossible Indicates if it was possible to move columns to the desired position.\n * @param {boolean} orderChanged Indicates if order of columns was changed by move.\n */\n'afterColumnMove',\n/**\n * Fired by {@link ManualRowMove} plugin before changing the order of the visual indexes. This hook is fired when\n * {@link Options#manualRowMove} option is enabled.\n *\n * @event Hooks#beforeRowMove\n * @param {Array} movedRows Array of visual row indexes to be moved.\n * @param {number} finalIndex Visual row index, being a start index for the moved rows.\n *                            Points to where the elements will be placed after the moving action.\n *                            To check visualization of final index please take a look at\n *                            [documentation](@/guides/rows/row-moving.md).\n * @param {number|undefined} dropIndex Visual row index, being a drop index for the moved rows.\n *                                     Points to where we are going to drop the moved elements.\n *                                     To check visualization of drop index please take a look at\n *                                     [documentation](@/guides/rows/row-moving.md).\n *                                     It's `undefined` when `dragRows` function wasn't called.\n * @param {boolean} movePossible Indicates if it's possible to move rows to the desired position.\n * @returns {*|boolean} If false is returned the action is canceled.\n */\n'beforeRowMove',\n/**\n * Fired by {@link ManualRowMove} plugin after changing the order of the visual indexes.\n * This hook is fired when {@link Options#manualRowMove} option is enabled.\n *\n * @event Hooks#afterRowMove\n * @param {Array} movedRows Array of visual row indexes to be moved.\n * @param {number} finalIndex Visual row index, being a start index for the moved rows.\n *                            Points to where the elements will be placed after the moving action.\n *                            To check visualization of final index please take a look at\n *                            [documentation](@/guides/rows/row-moving.md).\n * @param {number|undefined} dropIndex Visual row index, being a drop index for the moved rows.\n *                                     Points to where we are going to drop the moved elements.\n *                                     To check visualization of drop index please take a look at\n *                                     [documentation](@/guides/rows/row-moving.md).\n *                                     It's `undefined` when `dragRows` function wasn't called.\n * @param {boolean} movePossible Indicates if it was possible to move rows to the desired position.\n * @param {boolean} orderChanged Indicates if order of rows was changed by move.\n */\n'afterRowMove',\n/**\n * Fired by {@link ManualColumnResize} plugin before rendering the table with modified column sizes. This hook is\n * fired when {@link Options#manualColumnResize} option is enabled.\n *\n * @event Hooks#beforeColumnResize\n * @param {number} newSize Calculated new column width.\n * @param {number} column Visual index of the resized column.\n * @param {boolean} isDoubleClick Flag that determines whether there was a double-click.\n * @returns {number} Returns a new column size or `undefined`, if column size should be calculated automatically.\n */\n'beforeColumnResize',\n/**\n * Fired by {@link ManualColumnResize} plugin after rendering the table with modified column sizes. This hook is\n * fired when {@link Options#manualColumnResize} option is enabled.\n *\n * @event Hooks#afterColumnResize\n * @param {number} newSize Calculated new column width.\n * @param {number} column Visual index of the resized column.\n * @param {boolean} isDoubleClick Flag that determines whether there was a double-click.\n */\n'afterColumnResize',\n/**\n * Fired by {@link ManualRowResize} plugin before rendering the table with modified row sizes. This hook is\n * fired when {@link Options#manualRowResize} option is enabled.\n *\n * @event Hooks#beforeRowResize\n * @param {number} newSize Calculated new row height.\n * @param {number} row Visual index of the resized row.\n * @param {boolean} isDoubleClick Flag that determines whether there was a double-click.\n * @returns {number} Returns the new row size or `undefined` if row size should be calculated automatically.\n */\n'beforeRowResize',\n/**\n * Fired by {@link ManualRowResize} plugin after rendering the table with modified row sizes. This hook is\n * fired when {@link Options#manualRowResize} option is enabled.\n *\n * @event Hooks#afterRowResize\n * @param {number} newSize Calculated new row height.\n * @param {number} row Visual index of the resized row.\n * @param {boolean} isDoubleClick Flag that determines whether there was a double-click.\n */\n'afterRowResize',\n/**\n * Fired after getting the column header renderers.\n *\n * @event Hooks#afterGetColumnHeaderRenderers\n * @param {Function[]} renderers An array of the column header renderers.\n */\n'afterGetColumnHeaderRenderers',\n/**\n * Fired after getting the row header renderers.\n *\n * @event Hooks#afterGetRowHeaderRenderers\n * @param {Function[]} renderers An array of the row header renderers.\n */\n'afterGetRowHeaderRenderers',\n/**\n * Fired before applying stretched column width to column.\n *\n * @event Hooks#beforeStretchingColumnWidth\n * @param {number} stretchedWidth Calculated width.\n * @param {number} column Visual column index.\n * @returns {number} Returns new width which will be applied to the column element.\n */\n'beforeStretchingColumnWidth',\n/**\n * Fired by {@link Filters} plugin before applying [filtering](@/guides/columns/column-filter.md).\n * This hook is fired when {@link Options#filters} option is enabled.\n *\n * @event Hooks#beforeFilter\n * @param {object[]} conditionsStack An array of objects with added formulas.\n * ```js\n * // Example format of the conditionsStack argument:\n * [\n *   {\n *     column: 2,\n *     conditions: [\n *       {name: 'begins_with', args: [['S']]}\n *     ],\n *     operation: 'conjunction'\n *   },\n *   {\n *     column: 4,\n *     conditions: [\n *       {name: 'not_empty', args: []}\n *     ],\n *     operation: 'conjunction'\n *   },\n * ]\n * ```\n * @returns {boolean} If hook returns `false` value then filtering won't be applied on the UI side (server-side filtering).\n */\n'beforeFilter',\n/**\n * Fired by {@link Filters} plugin after applying [filtering](@/guides/columns/column-filter.md).\n * This hook is fired when {@link Options#filters} option is enabled.\n *\n * @event Hooks#afterFilter\n * @param {object[]} conditionsStack An array of objects with added conditions.\n * ```js\n * // Example format of the conditionsStack argument:\n * [\n *   {\n *     column: 2,\n *     conditions: [\n *       {name: 'begins_with', args: [['S']]}\n *     ],\n *     operation: 'conjunction'\n *   },\n *   {\n *     column: 4,\n *     conditions: [\n *       {name: 'not_empty', args: []}\n *     ],\n *     operation: 'conjunction'\n *   },\n * ]\n * ```\n */\n'afterFilter',\n/**\n * Called when a value is updated in the engine.\n *\n * @since 9.0.0\n * @event Hooks#afterFormulasValuesUpdate\n * @param {Array} changes The values and location of applied changes.\n */\n'afterFormulasValuesUpdate',\n/**\n * Called when a named expression is added to the Formulas' engine instance.\n *\n * @since 9.0.0\n * @event Hooks#afterNamedExpressionAdded\n * @param {string} namedExpressionName The name of the added expression.\n * @param {Array} changes The values and location of applied changes.\n */\n'afterNamedExpressionAdded',\n/**\n * Called when a named expression is removed from the Formulas' engine instance.\n *\n * @since 9.0.0\n * @event Hooks#afterNamedExpressionRemoved\n * @param {string} namedExpressionName The name of the removed expression.\n * @param {Array} changes The values and location of applied changes.\n */\n'afterNamedExpressionRemoved',\n/**\n * Called when a new sheet is added to the Formulas' engine instance.\n *\n * @since 9.0.0\n * @event Hooks#afterSheetAdded\n * @param {string} addedSheetDisplayName The name of the added sheet.\n */\n'afterSheetAdded',\n/**\n * Called when a sheet in the Formulas' engine instance is renamed.\n *\n * @since 9.0.0\n * @event Hooks#afterSheetRenamed\n * @param {string} oldDisplayName The old name of the sheet.\n * @param {string} newDisplayName The new name of the sheet.\n */\n'afterSheetRenamed',\n/**\n * Called when a sheet is removed from the Formulas' engine instance.\n *\n * @since 9.0.0\n * @event Hooks#afterSheetRemoved\n * @param {string} removedSheetDisplayName The removed sheet name.\n * @param {Array} changes The values and location of applied changes.\n */\n'afterSheetRemoved',\n/**\n * Fired while retrieving the column header height.\n *\n * @event Hooks#modifyColumnHeaderHeight\n */\n'modifyColumnHeaderHeight',\n/**\n * Fired by {@link UndoRedo} plugin before the undo action. Contains information about the action that is being undone.\n * This hook is fired when {@link Options#undo} option is enabled.\n *\n * @event Hooks#beforeUndo\n * @param {object} action The action object. Contains information about the action being undone. The `actionType`\n *                        property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`).\n * @returns {*|boolean} If false is returned the action is canceled.\n */\n'beforeUndo',\n/**\n * Fired by {@link UndoRedo} plugin before changing undo stack.\n *\n * @event Hooks#beforeUndoStackChange\n * @since 8.4.0\n * @param {Array} doneActions Stack of actions which may be undone.\n * @param {string} [source] String that identifies source of action\n *                          ([list of all available sources](@/guides/getting-started/events-and-hooks.md#definition-for-source-argument)).\n * @returns {*|boolean} If false is returned the action of changing undo stack is canceled.\n */\n'beforeUndoStackChange',\n/**\n * Fired by {@link UndoRedo} plugin after the undo action. Contains information about the action that is being undone.\n * This hook is fired when {@link Options#undo} option is enabled.\n *\n * @event Hooks#afterUndo\n * @param {object} action The action object. Contains information about the action being undone. The `actionType`\n *                        property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`).\n */\n'afterUndo',\n/**\n * Fired by {@link UndoRedo} plugin after changing undo stack.\n *\n * @event Hooks#afterUndoStackChange\n * @since 8.4.0\n * @param {Array} doneActionsBefore Stack of actions which could be undone before performing new action.\n * @param {Array} doneActionsAfter Stack of actions which can be undone after performing new action.\n */\n'afterUndoStackChange',\n/**\n * Fired by {@link UndoRedo} plugin before the redo action. Contains information about the action that is being redone.\n * This hook is fired when {@link Options#undo} option is enabled.\n *\n * @event Hooks#beforeRedo\n * @param {object} action The action object. Contains information about the action being redone. The `actionType`\n *                        property of the object specifies the type of the action in a String format (e.g. `'remove_row'`).\n * @returns {*|boolean} If false is returned the action is canceled.\n */\n'beforeRedo',\n/**\n * Fired by {@link UndoRedo} plugin before changing redo stack.\n *\n * @event Hooks#beforeRedoStackChange\n * @since 8.4.0\n * @param {Array} undoneActions Stack of actions which may be redone.\n */\n'beforeRedoStackChange',\n/**\n * Fired by {@link UndoRedo} plugin after the redo action. Contains information about the action that is being redone.\n * This hook is fired when {@link Options#undo} option is enabled.\n *\n * @event Hooks#afterRedo\n * @param {object} action The action object. Contains information about the action being redone. The `actionType`\n *                        property of the object specifies the type of the action in a String format (e.g. `'remove_row'`).\n */\n'afterRedo',\n/**\n * Fired by {@link UndoRedo} plugin after changing redo stack.\n *\n * @event Hooks#afterRedoStackChange\n * @since 8.4.0\n * @param {Array} undoneActionsBefore Stack of actions which could be redone before performing new action.\n * @param {Array} undoneActionsAfter Stack of actions which can be redone after performing new action.\n */\n'afterRedoStackChange',\n/**\n * Fired while retrieving the row header width.\n *\n * @event Hooks#modifyRowHeaderWidth\n * @param {number} rowHeaderWidth Row header width.\n */\n'modifyRowHeaderWidth',\n/**\n * Fired from the `populateFromArray` method during the `autofill` process. Fired for each \"autofilled\" cell individually.\n *\n * @deprecated\n * @event Hooks#beforeAutofillInsidePopulate\n * @param {object} index Object containing `row` and `col` properties, defining the number of rows/columns from the initial cell of the autofill.\n * @param {string} direction Declares the direction of the autofill. Possible values: `up`, `down`, `left`, `right`.\n * @param {Array[]} input Contains an array of rows with data being used in the autofill.\n * @param {Array} deltas The deltas array passed to the `populateFromArray` method.\n */\n'beforeAutofillInsidePopulate',\n/**\n * Fired when the start of the selection is being modified (e.g. Moving the selection with the arrow keys).\n *\n * @event Hooks#modifyTransformStart\n * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one.\n */\n'modifyTransformStart',\n/**\n * Fired when the end of the selection is being modified (e.g. Moving the selection with the arrow keys).\n *\n * @event Hooks#modifyTransformEnd\n * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one.\n */\n'modifyTransformEnd',\n/**\n * Fired after the start of the selection is being modified (e.g. Moving the selection with the arrow keys).\n *\n * @event Hooks#afterModifyTransformStart\n * @param {CellCoords} coords Coords of the freshly selected cell.\n * @param {number} rowTransformDir `-1` if trying to select a cell with a negative row index. `0` otherwise.\n * @param {number} colTransformDir `-1` if trying to select a cell with a negative column index. `0` otherwise.\n */\n'afterModifyTransformStart',\n/**\n * Fired after the end of the selection is being modified (e.g. Moving the selection with the arrow keys).\n *\n * @event Hooks#afterModifyTransformEnd\n * @param {CellCoords} coords Visual coords of the freshly selected cell.\n * @param {number} rowTransformDir `-1` if trying to select a cell with a negative row index. `0` otherwise.\n * @param {number} colTransformDir `-1` if trying to select a cell with a negative column index. `0` otherwise.\n */\n'afterModifyTransformEnd',\n/**\n * Fired inside the `viewportRowCalculatorOverride` method. Allows modifying the row calculator parameters.\n *\n * @event Hooks#afterViewportRowCalculatorOverride\n * @param {object} calc The row calculator.\n */\n'afterViewportRowCalculatorOverride',\n/**\n * Fired inside the `viewportColumnCalculatorOverride` method. Allows modifying the row calculator parameters.\n *\n * @event Hooks#afterViewportColumnCalculatorOverride\n * @param {object} calc The row calculator.\n */\n'afterViewportColumnCalculatorOverride',\n/**\n * Fired after initializing all the plugins.\n * This hook should be added before Handsontable is initialized.\n *\n * @event Hooks#afterPluginsInitialized\n *\n * @example\n * ```js\n * Handsontable.hooks.add('afterPluginsInitialized', myCallback);\n * ```\n */\n'afterPluginsInitialized',\n/**\n * Fired by {@link HiddenRows} plugin before marking the rows as hidden. Fired only if the {@link Options#hiddenRows} option is enabled.\n * Returning `false` in the callback will prevent the hiding action from completing.\n *\n * @event Hooks#beforeHideRows\n * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical row indexes.\n * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical row indexes.\n * @param {boolean} actionPossible `true`, if provided row indexes are valid, `false` otherwise.\n * @returns {undefined|boolean} If the callback returns `false`, the hiding action will not be completed.\n */\n'beforeHideRows',\n/**\n * Fired by {@link HiddenRows} plugin after marking the rows as hidden. Fired only if the {@link Options#hiddenRows} option is enabled.\n *\n * @event Hooks#afterHideRows\n * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical row indexes.\n * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical row indexes.\n * @param {boolean} actionPossible `true`, if provided row indexes are valid, `false` otherwise.\n * @param {boolean} stateChanged `true`, if the action affected any non-hidden rows, `false` otherwise.\n */\n'afterHideRows',\n/**\n * Fired by {@link HiddenRows} plugin before marking the rows as not hidden. Fired only if the {@link Options#hiddenRows} option is enabled.\n * Returning `false` in the callback will prevent the row revealing action from completing.\n *\n * @event Hooks#beforeUnhideRows\n * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical row indexes.\n * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical row indexes.\n * @param {boolean} actionPossible `true`, if provided row indexes are valid, `false` otherwise.\n * @returns {undefined|boolean} If the callback returns `false`, the revealing action will not be completed.\n */\n'beforeUnhideRows',\n/**\n * Fired by {@link HiddenRows} plugin after marking the rows as not hidden. Fired only if the {@link Options#hiddenRows} option is enabled.\n *\n * @event Hooks#afterUnhideRows\n * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical row indexes.\n * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical row indexes.\n * @param {boolean} actionPossible `true`, if provided row indexes are valid, `false` otherwise.\n * @param {boolean} stateChanged `true`, if the action affected any hidden rows, `false` otherwise.\n */\n'afterUnhideRows',\n/**\n * Fired by {@link HiddenColumns} plugin before marking the columns as hidden. Fired only if the {@link Options#hiddenColumns} option is enabled.\n * Returning `false` in the callback will prevent the hiding action from completing.\n *\n * @event Hooks#beforeHideColumns\n * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical column indexes.\n * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical column indexes.\n * @param {boolean} actionPossible `true`, if the provided column indexes are valid, `false` otherwise.\n * @returns {undefined|boolean} If the callback returns `false`, the hiding action will not be completed.\n */\n'beforeHideColumns',\n/**\n * Fired by {@link HiddenColumns} plugin after marking the columns as hidden. Fired only if the {@link Options#hiddenColumns} option is enabled.\n *\n * @event Hooks#afterHideColumns\n * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical column indexes.\n * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical column indexes.\n * @param {boolean} actionPossible `true`, if the provided column indexes are valid, `false` otherwise.\n * @param {boolean} stateChanged `true`, if the action affected any non-hidden columns, `false` otherwise.\n */\n'afterHideColumns',\n/**\n * Fired by {@link HiddenColumns} plugin before marking the columns as not hidden. Fired only if the {@link Options#hiddenColumns} option is enabled.\n * Returning `false` in the callback will prevent the column revealing action from completing.\n *\n * @event Hooks#beforeUnhideColumns\n * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical column indexes.\n * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical column indexes.\n * @param {boolean} actionPossible `true`, if the provided column indexes are valid, `false` otherwise.\n * @returns {undefined|boolean} If the callback returns `false`, the hiding action will not be completed.\n */\n'beforeUnhideColumns',\n/**\n * Fired by {@link HiddenColumns} plugin after marking the columns as not hidden. Fired only if the {@link Options#hiddenColumns} option is enabled.\n *\n * @event Hooks#afterUnhideColumns\n * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical column indexes.\n * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical column indexes.\n * @param {boolean} actionPossible `true`, if the provided column indexes are valid, `false` otherwise.\n * @param {boolean} stateChanged `true`, if the action affected any hidden columns, `false` otherwise.\n */\n'afterUnhideColumns',\n/**\n * Fired by {@link TrimRows} plugin before trimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n *\n * @event Hooks#beforeTrimRow\n * @param {Array} currentTrimConfig Current trim configuration - a list of trimmed physical row indexes.\n * @param {Array} destinationTrimConfig Destination trim configuration - a list of trimmed physical row indexes.\n * @param {boolean} actionPossible `true`, if all of the row indexes are withing the bounds of the table, `false` otherwise.\n * @returns {undefined|boolean} If the callback returns `false`, the trimming action will not be completed.\n */\n'beforeTrimRow',\n/**\n * Fired by {@link TrimRows} plugin after trimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n *\n * @event Hooks#afterTrimRow\n * @param {Array} currentTrimConfig Current trim configuration - a list of trimmed physical row indexes.\n * @param {Array} destinationTrimConfig Destination trim configuration - a list of trimmed physical row indexes.\n * @param {boolean} actionPossible `true`, if all of the row indexes are withing the bounds of the table, `false` otherwise.\n * @param {boolean} stateChanged `true`, if the action affected any non-trimmed rows, `false` otherwise.\n * @returns {undefined|boolean} If the callback returns `false`, the trimming action will not be completed.\n */\n'afterTrimRow',\n/**\n * Fired by {@link TrimRows} plugin before untrimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n *\n * @event Hooks#beforeUntrimRow\n * @param {Array} currentTrimConfig Current trim configuration - a list of trimmed physical row indexes.\n * @param {Array} destinationTrimConfig Destination trim configuration - a list of trimmed physical row indexes.\n * @param {boolean} actionPossible `true`, if all of the row indexes are withing the bounds of the table, `false` otherwise.\n * @returns {undefined|boolean} If the callback returns `false`, the untrimming action will not be completed.\n */\n'beforeUntrimRow',\n/**\n * Fired by {@link TrimRows} plugin after untrimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n *\n * @event Hooks#afterUntrimRow\n * @param {Array} currentTrimConfig Current trim configuration - a list of trimmed physical row indexes.\n * @param {Array} destinationTrimConfig Destination trim configuration - a list of trimmed physical row indexes.\n * @param {boolean} actionPossible `true`, if all of the row indexes are withing the bounds of the table, `false` otherwise.\n * @param {boolean} stateChanged `true`, if the action affected any trimmed rows, `false` otherwise.\n * @returns {undefined|boolean} If the callback returns `false`, the untrimming action will not be completed.\n */\n'afterUntrimRow',\n/**\n * Fired by {@link DropdownMenu} plugin before opening the dropdown menu. This hook is fired when {@link Options#dropdownMenu}\n * option is enabled.\n *\n * @event Hooks#beforeDropdownMenuShow\n * @param {DropdownMenu} dropdownMenu The DropdownMenu instance.\n */\n'beforeDropdownMenuShow',\n/**\n * Fired by {@link DropdownMenu} plugin after opening the Dropdown Menu. This hook is fired when {@link Options#dropdownMenu}\n * option is enabled.\n *\n * @event Hooks#afterDropdownMenuShow\n * @param {DropdownMenu} dropdownMenu The DropdownMenu instance.\n */\n'afterDropdownMenuShow',\n/**\n * Fired by {@link DropdownMenu} plugin after hiding the Dropdown Menu. This hook is fired when {@link Options#dropdownMenu}\n * option is enabled.\n *\n * @event Hooks#afterDropdownMenuHide\n * @param {DropdownMenu} instance The DropdownMenu instance.\n */\n'afterDropdownMenuHide',\n/**\n * Fired by {@link NestedRows} plugin before adding a children to the NestedRows structure. This hook is fired when\n * {@link Options#nestedRows} option is enabled.\n *\n * @event Hooks#beforeAddChild\n * @param {object} parent The parent object.\n * @param {object|undefined} element The element added as a child. If `undefined`, a blank child was added.\n * @param {number|undefined} index The index within the parent where the new child was added. If `undefined`, the element was added as the last child.\n */\n'beforeAddChild',\n/**\n * Fired by {@link NestedRows} plugin after adding a children to the NestedRows structure. This hook is fired when\n * {@link Options#nestedRows} option is enabled.\n *\n * @event Hooks#afterAddChild\n * @param {object} parent The parent object.\n * @param {object|undefined} element The element added as a child. If `undefined`, a blank child was added.\n * @param {number|undefined} index The index within the parent where the new child was added. If `undefined`, the element was added as the last child.\n */\n'afterAddChild',\n/**\n * Fired by {@link NestedRows} plugin before detaching a child from its parent. This hook is fired when\n * {@link Options#nestedRows} option is enabled.\n *\n * @event Hooks#beforeDetachChild\n * @param {object} parent An object representing the parent from which the element is to be detached.\n * @param {object} element The detached element.\n */\n'beforeDetachChild',\n/**\n * Fired by {@link NestedRows} plugin after detaching a child from its parent. This hook is fired when\n * {@link Options#nestedRows} option is enabled.\n *\n * @event Hooks#afterDetachChild\n * @param {object} parent An object representing the parent from which the element was detached.\n * @param {object} element The detached element.\n * @param {number} finalElementPosition The final row index of the detached element.\n */\n'afterDetachChild',\n/**\n * Fired after the editor is opened and rendered.\n *\n * @event Hooks#afterBeginEditing\n * @param {number} row Visual row index of the edited cell.\n * @param {number} column Visual column index of the edited cell.\n */\n'afterBeginEditing',\n/**\n * Fired by {@link MergeCells} plugin before cell merging. This hook is fired when {@link Options#mergeCells}\n * option is enabled.\n *\n * @event Hooks#beforeMergeCells\n * @param {CellRange} cellRange Selection cell range.\n * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n */\n'beforeMergeCells',\n/**\n * Fired by {@link MergeCells} plugin after cell merging. This hook is fired when {@link Options#mergeCells}\n * option is enabled.\n *\n * @event Hooks#afterMergeCells\n * @param {CellRange} cellRange Selection cell range.\n * @param {object} mergeParent The parent collection of the provided cell range.\n * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n */\n'afterMergeCells',\n/**\n * Fired by {@link MergeCells} plugin before unmerging the cells. This hook is fired when {@link Options#mergeCells}\n * option is enabled.\n *\n * @event Hooks#beforeUnmergeCells\n * @param {CellRange} cellRange Selection cell range.\n * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n */\n'beforeUnmergeCells',\n/**\n * Fired by {@link MergeCells} plugin after unmerging the cells. This hook is fired when {@link Options#mergeCells}\n * option is enabled.\n *\n * @event Hooks#afterUnmergeCells\n * @param {CellRange} cellRange Selection cell range.\n * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n */\n'afterUnmergeCells',\n/**\n * Fired after the table was switched into listening mode. This allows Handsontable to capture keyboard events and\n * respond in the right way.\n *\n * @event Hooks#afterListen\n */\n'afterListen',\n/**\n * Fired after the table was switched off from the listening mode. This makes the Handsontable inert for any\n * keyboard events.\n *\n * @event Hooks#afterUnlisten\n */\n'afterUnlisten',\n/**\n * Fired after the window was resized.\n *\n * @event Hooks#afterRefreshDimensions\n * @param {object} previousDimensions Previous dimensions of the container.\n * @param {object} currentDimensions Current dimensions of the container.\n * @param {boolean} stateChanged `true`, if the container was re-render, `false` otherwise.\n */\n'afterRefreshDimensions',\n/**\n * Cancellable hook, called after resizing a window, but before redrawing a table.\n *\n * @event Hooks#beforeRefreshDimensions\n * @param {object} previousDimensions Previous dimensions of the container.\n * @param {object} currentDimensions Current dimensions of the container.\n * @param {boolean} actionPossible `true`, if current and previous dimensions are different, `false` otherwise.\n * @returns {undefined|boolean} If the callback returns `false`, the refresh action will not be completed.\n */\n'beforeRefreshDimensions',\n/**\n * Fired by {@link CollapsibleColumns} plugin before columns collapse. This hook is fired when {@link Options#collapsibleColumns} option is enabled.\n *\n * @event Hooks#beforeColumnCollapse\n * @since 8.0.0\n * @param {Array} currentCollapsedColumns Current collapsible configuration - a list of collapsible physical column indexes.\n * @param {Array} destinationCollapsedColumns Destination collapsible configuration - a list of collapsible physical column indexes.\n * @param {boolean} collapsePossible `true`, if all of the column indexes are withing the bounds of the collapsed sections, `false` otherwise.\n * @returns {undefined|boolean} If the callback returns `false`, the collapsing action will not be completed.\n */\n'beforeColumnCollapse',\n/**\n * Fired by {@link CollapsibleColumns} plugin before columns collapse. This hook is fired when {@link Options#collapsibleColumns} option is enabled.\n *\n * @event Hooks#afterColumnCollapse\n * @since 8.0.0\n * @param {Array} currentCollapsedColumns Current collapsible configuration - a list of collapsible physical column indexes.\n * @param {Array} destinationCollapsedColumns Destination collapsible configuration - a list of collapsible physical column indexes.\n * @param {boolean} collapsePossible `true`, if all of the column indexes are withing the bounds of the collapsed sections, `false` otherwise.\n * @param {boolean} successfullyCollapsed `true`, if the action affected any non-collapsible column, `false` otherwise.\n */\n'afterColumnCollapse',\n/**\n * Fired by {@link CollapsibleColumns} plugin before columns expand. This hook is fired when {@link Options#collapsibleColumns} option is enabled.\n *\n * @event Hooks#beforeColumnExpand\n * @since 8.0.0\n * @param {Array} currentCollapsedColumns Current collapsible configuration - a list of collapsible physical column indexes.\n * @param {Array} destinationCollapsedColumns Destination collapsible configuration - a list of collapsible physical column indexes.\n * @param {boolean} expandPossible `true`, if all of the column indexes are withing the bounds of the collapsed sections, `false` otherwise.\n * @returns {undefined|boolean} If the callback returns `false`, the expanding action will not be completed.\n */\n'beforeColumnExpand',\n/**\n * Fired by {@link CollapsibleColumns} plugin before columns expand. This hook is fired when {@link Options#collapsibleColumns} option is enabled.\n *\n * @event Hooks#afterColumnExpand\n * @since 8.0.0\n * @param {Array} currentCollapsedColumns Current collapsible configuration - a list of collapsible physical column indexes.\n * @param {Array} destinationCollapsedColumns Destination collapsible configuration - a list of collapsible physical column indexes.\n * @param {boolean} expandPossible `true`, if all of the column indexes are withing the bounds of the collapsed sections, `false` otherwise.\n * @param {boolean} successfullyExpanded `true`, if the action affected any non-collapsible column, `false` otherwise.\n */\n'afterColumnExpand',\n/**\n * Fired by {@link AutoColumnSize} plugin within SampleGenerator utility.\n *\n * @event Hooks#modifyAutoColumnSizeSeed\n * @since 8.4.0\n * @param {string|undefined} seed Seed ID, unique name to categorize samples.\n * @param {object} cellProperties Object containing the cell properties.\n * @param {*} cellValue Value of the cell.\n */\n'modifyAutoColumnSizeSeed'];\n/**\n * Template warning message for removed hooks.\n *\n * @type {string}\n */\n\nvar REMOVED_MESSAGE = toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"The plugin hook \\\"[hookName]\\\" was removed in Handsontable [removedInVersion]. \\n  Please consult release notes https://github.com/handsontable/handsontable/releases/tag/[removedInVersion] to \\n  learn about the migration path.\"], [\"The plugin hook \\\"[hookName]\\\" was removed in Handsontable [removedInVersion].\\\\x20\\n  Please consult release notes https://github.com/handsontable/handsontable/releases/tag/[removedInVersion] to\\\\x20\\n  learn about the migration path.\"])));\n/**\n * The list of the hooks which are removed from the API. The warning message is printed out in\n * the developer console when the hook is used.\n *\n * The Map key is represented by hook name and its value points to the Handsontable version\n * in which it was removed.\n *\n * @type {Map<string, string>}\n */\n\nvar REMOVED_HOOKS = new Map([['modifyRow', '8.0.0'], ['modifyCol', '8.0.0'], ['unmodifyRow', '8.0.0'], ['unmodifyCol', '8.0.0'], ['skipLengthCache', '8.0.0'], ['hiddenColumn', '8.0.0'], ['hiddenRow', '8.0.0']]);\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * The list of the hooks which are deprecated. The warning message is printed out in\n * the developer console when the hook is used.\n *\n * The Map key is represented by hook name and its value keeps message which whould be\n * printed out when the hook is used.\n *\n * Usage:\n * ```js\n * ...\n * New Map([\n *   ['beforeColumnExpand', 'The plugin hook \"beforeColumnExpand\" is deprecated. Use \"beforeColumnExpand2\" instead.'],\n * ])\n * ...\n * ```\n *\n *\n * @type {Map<string, string>}\n */\n\n/* eslint-enable jsdoc/require-description-complete-sentence */\n\nvar DEPRECATED_HOOKS = new Map([['beforeAutofillInsidePopulate', 'The plugin hook \"beforeAutofillInsidePopulate\" is deprecated and will be removed in the next major release.']]);\n\nvar Hooks = /*#__PURE__*/function () {\n  /**\n   *\n   */\n  function Hooks() {\n    _classCallCheck(this, Hooks);\n\n    this.globalBucket = this.createEmptyBucket();\n  }\n  /**\n   * Returns a new object with empty handlers related to every registered hook name.\n   *\n   * @returns {object} The empty bucket object.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.createEmptyBucket();\n   * // Results:\n   * {\n   * ...\n   * afterCreateCol: [],\n   * afterCreateRow: [],\n   * beforeInit: [],\n   * ...\n   * }\n   * ```\n   */\n\n\n  _createClass(Hooks, [{\n    key: \"createEmptyBucket\",\n    value: function createEmptyBucket() {\n      var bucket = Object.create(null); // eslint-disable-next-line no-return-assign\n\n      arrayEach(REGISTERED_HOOKS, function (hook) {\n        return bucket[hook] = [];\n      });\n      return bucket;\n    }\n    /**\n     * Get hook bucket based on the context of the object or if argument is `undefined`, get the global hook bucket.\n     *\n     * @param {object} [context=null] A Handsontable instance.\n     * @returns {object} Returns a global or Handsontable instance bucket.\n     */\n\n  }, {\n    key: \"getBucket\",\n    value: function getBucket() {\n      var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (context) {\n        if (!context.pluginHookBucket) {\n          context.pluginHookBucket = this.createEmptyBucket();\n        }\n\n        return context.pluginHookBucket;\n      }\n\n      return this.globalBucket;\n    }\n    /**\n     * Adds a listener (globally or locally) to a specified hook name.\n     * If the `context` parameter is provided, the hook will be added only to the instance it references.\n     * Otherwise, the callback will be used everytime the hook fires on any Handsontable instance.\n     * You can provide an array of callback functions as the `callback` argument, this way they will all be fired\n     * once the hook is triggered.\n     *\n     * @see Core#addHook\n     * @param {string} key Hook name.\n     * @param {Function|Array} callback Callback function or an array of functions.\n     * @param {object} [context=null] The context for the hook callback to be added - a Handsontable instance or leave empty.\n     * @returns {Hooks} Instance of Hooks.\n     *\n     * @example\n     * ```js\n     * // single callback, added locally\n     * Handsontable.hooks.add('beforeInit', myCallback, hotInstance);\n     *\n     * // single callback, added globally\n     * Handsontable.hooks.add('beforeInit', myCallback);\n     *\n     * // multiple callbacks, added locally\n     * Handsontable.hooks.add('beforeInit', [myCallback, anotherCallback], hotInstance);\n     *\n     * // multiple callbacks, added globally\n     * Handsontable.hooks.add('beforeInit', [myCallback, anotherCallback]);\n     * ```\n     */\n\n  }, {\n    key: \"add\",\n    value: function add(key, callback) {\n      var _this = this;\n\n      var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n      if (Array.isArray(callback)) {\n        arrayEach(callback, function (c) {\n          return _this.add(key, c, context);\n        });\n      } else {\n        if (REMOVED_HOOKS.has(key)) {\n          warn(substitute(REMOVED_MESSAGE, {\n            hookName: key,\n            removedInVersion: REMOVED_HOOKS.get(key)\n          }));\n        }\n\n        if (DEPRECATED_HOOKS.has(key)) {\n          warn(DEPRECATED_HOOKS.get(key));\n        }\n\n        var bucket = this.getBucket(context);\n\n        if (typeof bucket[key] === 'undefined') {\n          this.register(key);\n          bucket[key] = [];\n        }\n\n        callback.skip = false;\n\n        if (bucket[key].indexOf(callback) === -1) {\n          // only add a hook if it has not already been added (adding the same hook twice is now silently ignored)\n          var foundInitialHook = false;\n\n          if (callback.initialHook) {\n            arrayEach(bucket[key], function (cb, i) {\n              if (cb.initialHook) {\n                bucket[key][i] = callback;\n                foundInitialHook = true;\n                return false;\n              }\n            });\n          }\n\n          if (!foundInitialHook) {\n            bucket[key].push(callback);\n          }\n        }\n      }\n\n      return this;\n    }\n    /**\n     * Adds a listener to a specified hook. After the hook runs this listener will be automatically removed from the bucket.\n     *\n     * @see Core#addHookOnce\n     * @param {string} key Hook/Event name.\n     * @param {Function|Array} callback Callback function.\n     * @param {object} [context=null] A Handsontable instance.\n     *\n     * @example\n     * ```js\n     * Handsontable.hooks.once('beforeInit', myCallback, hotInstance);\n     * ```\n     */\n\n  }, {\n    key: \"once\",\n    value: function once(key, callback) {\n      var _this2 = this;\n\n      var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n      if (Array.isArray(callback)) {\n        arrayEach(callback, function (c) {\n          return _this2.once(key, c, context);\n        });\n      } else {\n        callback.runOnce = true;\n        this.add(key, callback, context);\n      }\n    }\n    /**\n     * Removes a listener from a hook with a given name. If the `context` argument is provided, it removes a listener from a local hook assigned to the given Handsontable instance.\n     *\n     * @see Core#removeHook\n     * @param {string} key Hook/Event name.\n     * @param {Function} callback Callback function (needs the be the function that was previously added to the hook).\n     * @param {object} [context=null] Handsontable instance.\n     * @returns {boolean} Returns `true` if hook was removed, `false` otherwise.\n     *\n     * @example\n     * ```js\n     * Handsontable.hooks.remove('beforeInit', myCallback);\n     * ```\n     */\n\n  }, {\n    key: \"remove\",\n    value: function remove(key, callback) {\n      var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      var bucket = this.getBucket(context);\n\n      if (typeof bucket[key] !== 'undefined') {\n        if (bucket[key].indexOf(callback) >= 0) {\n          callback.skip = true;\n          return true;\n        }\n      }\n\n      return false;\n    }\n    /**\n     * Checks whether there are any registered listeners for the provided hook name.\n     * If the `context` parameter is provided, it only checks for listeners assigned to the given Handsontable instance.\n     *\n     * @param {string} key Hook name.\n     * @param {object} [context=null] A Handsontable instance.\n     * @returns {boolean} `true` for success, `false` otherwise.\n     */\n\n  }, {\n    key: \"has\",\n    value: function has(key) {\n      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var bucket = this.getBucket(context);\n      return !!(bucket[key] !== void 0 && bucket[key].length);\n    }\n    /**\n     * Runs all local and global callbacks assigned to the hook identified by the `key` parameter.\n     * It returns either a return value from the last called callback or the first parameter (`p1`) passed to the `run` function.\n     *\n     * @see Core#runHooks\n     * @param {object} context Handsontable instance.\n     * @param {string} key Hook/Event name.\n     * @param {*} [p1] Parameter to be passed as an argument to the callback function.\n     * @param {*} [p2] Parameter to be passed as an argument to the callback function.\n     * @param {*} [p3] Parameter to be passed as an argument to the callback function.\n     * @param {*} [p4] Parameter to be passed as an argument to the callback function.\n     * @param {*} [p5] Parameter to be passed as an argument to the callback function.\n     * @param {*} [p6] Parameter to be passed as an argument to the callback function.\n     * @returns {*} Either a return value from the last called callback or `p1`.\n     *\n     * @example\n     * ```js\n     * Handsontable.hooks.run(hot, 'beforeInit');\n     * ```\n     */\n\n  }, {\n    key: \"run\",\n    value: function run(context, key, p1, p2, p3, p4, p5, p6) {\n      {\n        var globalHandlers = this.globalBucket[key];\n        var length = globalHandlers ? globalHandlers.length : 0;\n        var index = 0;\n\n        if (length) {\n          // Do not optimise this loop with arrayEach or arrow function! If you do You'll decrease perf because of GC.\n          while (index < length) {\n            if (!globalHandlers[index] || globalHandlers[index].skip) {\n              index += 1;\n              /* eslint-disable no-continue */\n\n              continue;\n            }\n\n            var res = fastCall(globalHandlers[index], context, p1, p2, p3, p4, p5, p6);\n\n            if (res !== void 0) {\n              // eslint-disable-next-line no-param-reassign\n              p1 = res;\n            }\n\n            if (globalHandlers[index] && globalHandlers[index].runOnce) {\n              this.remove(key, globalHandlers[index]);\n            }\n\n            index += 1;\n          }\n        }\n      }\n      {\n        var localHandlers = this.getBucket(context)[key];\n\n        var _length = localHandlers ? localHandlers.length : 0;\n\n        var _index = 0;\n\n        if (_length) {\n          // Do not optimise this loop with arrayEach or arrow function! If you do You'll decrease perf because of GC.\n          while (_index < _length) {\n            if (!localHandlers[_index] || localHandlers[_index].skip) {\n              _index += 1;\n              /* eslint-disable no-continue */\n\n              continue;\n            }\n\n            var _res = fastCall(localHandlers[_index], context, p1, p2, p3, p4, p5, p6);\n\n            if (_res !== void 0) {\n              // eslint-disable-next-line no-param-reassign\n              p1 = _res;\n            }\n\n            if (localHandlers[_index] && localHandlers[_index].runOnce) {\n              this.remove(key, localHandlers[_index], context);\n            }\n\n            _index += 1;\n          }\n        }\n      }\n      return p1;\n    }\n    /**\n     * Destroy all listeners connected to the context. If no context is provided, the global listeners will be destroyed.\n     *\n     * @param {object} [context=null] A Handsontable instance.\n     * @example\n     * ```js\n     * // destroy the global listeners\n     * Handsontable.hooks.destroy();\n     *\n     * // destroy the local listeners\n     * Handsontable.hooks.destroy(hotInstance);\n     * ```\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      // eslint-disable-next-line no-return-assign\n      objectEach(this.getBucket(context), function (value, key, bucket) {\n        return bucket[key].length = 0;\n      });\n    }\n    /**\n     * Registers a hook name (adds it to the list of the known hook names). Used by plugins.\n     * It is not necessary to call register, but if you use it, your plugin hook will be used returned by\n     * the `getRegistered` method. (which itself is used in the [demo](@/guides/getting-started/events-and-hooks.md)).\n     *\n     * @param {string} key The hook name.\n     *\n     * @example\n     * ```js\n     * Handsontable.hooks.register('myHook');\n     * ```\n     */\n\n  }, {\n    key: \"register\",\n    value: function register(key) {\n      if (!this.isRegistered(key)) {\n        REGISTERED_HOOKS.push(key);\n      }\n    }\n    /**\n     * Deregisters a hook name (removes it from the list of known hook names).\n     *\n     * @param {string} key The hook name.\n     *\n     * @example\n     * ```js\n     * Handsontable.hooks.deregister('myHook');\n     * ```\n     */\n\n  }, {\n    key: \"deregister\",\n    value: function deregister(key) {\n      if (this.isRegistered(key)) {\n        REGISTERED_HOOKS.splice(REGISTERED_HOOKS.indexOf(key), 1);\n      }\n    }\n    /**\n     * Returns a boolean value depending on if a hook by such name has been removed or deprecated.\n     *\n     * @param {string} hookName The hook name to check.\n     * @returns {boolean} Returns `true` if the provided hook name was marked as deprecated or\n     * removed from API, `false` otherwise.\n     * @example\n     * ```js\n     * Handsontable.hooks.isDeprecated('skipLengthCache');\n     *\n     * // Results:\n     * true\n     * ```\n     */\n\n  }, {\n    key: \"isDeprecated\",\n    value: function isDeprecated(hookName) {\n      return DEPRECATED_HOOKS.has(hookName) || REMOVED_HOOKS.has(hookName);\n    }\n    /**\n     * Returns a boolean depending on if a hook by such name has been registered.\n     *\n     * @param {string} hookName The hook name to check.\n     * @returns {boolean} `true` for success, `false` otherwise.\n     * @example\n     * ```js\n     * Handsontable.hooks.isRegistered('beforeInit');\n     *\n     * // Results:\n     * true\n     * ```\n     */\n\n  }, {\n    key: \"isRegistered\",\n    value: function isRegistered(hookName) {\n      return REGISTERED_HOOKS.indexOf(hookName) >= 0;\n    }\n    /**\n     * Returns an array of registered hooks.\n     *\n     * @returns {Array} An array of registered hooks.\n     *\n     * @example\n     * ```js\n     * Handsontable.hooks.getRegistered();\n     *\n     * // Results:\n     * [\n     * ...\n     *   'beforeInit',\n     *   'beforeRender',\n     *   'beforeSetRangeEnd',\n     *   'beforeDrawBorders',\n     *   'beforeChange',\n     * ...\n     * ]\n     * ```\n     */\n\n  }, {\n    key: \"getRegistered\",\n    value: function getRegistered() {\n      return REGISTERED_HOOKS;\n    }\n  }], [{\n    key: \"getSingleton\",\n    value: function getSingleton() {\n      return getGlobalSingleton();\n    }\n  }]);\n\n  return Hooks;\n}();\n\nvar globalSingleton = new Hooks();\n/**\n * @returns {Hooks}\n */\n\nfunction getGlobalSingleton() {\n  return globalSingleton;\n}\n\nexport default Hooks;", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nexport var collection = new Map();\n/**\n * @param {string} namespace The namespace for the storage.\n * @returns {object}\n */\n\nexport default function staticRegister() {\n  var namespace = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'common';\n\n  if (!collection.has(namespace)) {\n    collection.set(namespace, new Map());\n  }\n\n  var subCollection = collection.get(namespace);\n  /**\n   * Register an item to the collection. If the item under the same was exist earlier then this item will be replaced with new one.\n   *\n   * @param {string} name Identification of the item.\n   * @param {*} item Item to save in the collection.\n   */\n\n  function register(name, item) {\n    subCollection.set(name, item);\n  }\n  /**\n   * Retrieve the item from the collection.\n   *\n   * @param {string} name Identification of the item.\n   * @returns {*} Returns item which was saved in the collection.\n   */\n\n\n  function getItem(name) {\n    return subCollection.get(name);\n  }\n  /**\n   * Check if item under specified name is exists.\n   *\n   * @param {string} name Identification of the item.\n   * @returns {boolean} Returns `true` or `false` depends on if element exists in the collection.\n   */\n\n\n  function hasItem(name) {\n    return subCollection.has(name);\n  }\n  /**\n   * Retrieve list of names registered from the collection.\n   *\n   * @returns {Array} Returns an array of strings with all names under which objects are stored.\n   */\n\n\n  function getNames() {\n    return _toConsumableArray(subCollection.keys());\n  }\n  /**\n   * Retrieve all registered values from the collection.\n   *\n   * @returns {Array} Returns an array with all values stored in the collection.\n   */\n\n\n  function getValues() {\n    return _toConsumableArray(subCollection.values());\n  }\n\n  return {\n    register: register,\n    getItem: getItem,\n    hasItem: hasItem,\n    getNames: getNames,\n    getValues: getValues\n  };\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport \"core-js/modules/es.object.freeze.js\";\nimport \"core-js/modules/es.string.trim.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport { CellCoords } from \"../../3rdparty/walkontable/src/index.mjs\";\nimport { stringify } from \"../../helpers/mixed.mjs\";\nimport { mixin } from \"../../helpers/object.mjs\";\nimport hooksRefRegisterer from \"../../mixins/hooksRefRegisterer.mjs\";\nexport var EDITOR_TYPE = 'base';\nexport var EDITOR_STATE = Object.freeze({\n  VIRGIN: 'STATE_VIRGIN',\n  // before editing\n  EDITING: 'STATE_EDITING',\n  WAITING: 'STATE_WAITING',\n  // waiting for async validation\n  FINISHED: 'STATE_FINISHED'\n});\n/**\n * @class BaseEditor\n */\n\nexport var BaseEditor = /*#__PURE__*/function () {\n  /**\n   * @param {Handsontable} instance A reference to the source instance of the Handsontable.\n   */\n  function BaseEditor(instance) {\n    _classCallCheck(this, BaseEditor);\n\n    /**\n     * A reference to the source instance of the Handsontable.\n     *\n     * @type {Handsontable}\n     */\n    this.hot = instance;\n    /**\n     * A reference to the source instance of the Handsontable.\n     *\n     * @deprecated\n     *\n     * @type {Handsontable}\n     */\n\n    this.instance = instance;\n    /**\n     * Editor's state.\n     *\n     * @type {string}\n     */\n\n    this.state = EDITOR_STATE.VIRGIN;\n    /**\n     * Flag to store information about editor's opening status.\n     *\n     * @private\n     *\n     * @type {boolean}\n     */\n\n    this._opened = false;\n    /**\n     * Defines the editor's editing mode. When false, then an editor works in fast editing mode.\n     *\n     * @private\n     *\n     * @type {boolean}\n     */\n\n    this._fullEditMode = false;\n    /**\n     * Callback to call after closing editor.\n     *\n     * @type {Function}\n     */\n\n    this._closeCallback = null;\n    /**\n     * Currently rendered cell's TD element.\n     *\n     * @type {HTMLTableCellElement}\n     */\n\n    this.TD = null;\n    /**\n     * Visual row index.\n     *\n     * @type {number}\n     */\n\n    this.row = null;\n    /**\n     * Visual column index.\n     *\n     * @type {number}\n     */\n\n    this.col = null;\n    /**\n     * Column property name or a column index, if datasource is an array of arrays.\n     *\n     * @type {number|string}\n     */\n\n    this.prop = null;\n    /**\n     * Original cell's value.\n     *\n     * @type {*}\n     */\n\n    this.originalValue = null;\n    /**\n     * Object containing the cell's properties.\n     *\n     * @type {object}\n     */\n\n    this.cellProperties = null;\n    this.init();\n  }\n  /**\n   * Fires callback after closing editor.\n   *\n   * @private\n   * @param {boolean} result The editor value.\n   */\n\n\n  _createClass(BaseEditor, [{\n    key: \"_fireCallbacks\",\n    value: function _fireCallbacks(result) {\n      if (this._closeCallback) {\n        this._closeCallback(result);\n\n        this._closeCallback = null;\n      }\n    }\n    /**\n     * Initializes an editor's intance.\n     */\n\n  }, {\n    key: \"init\",\n    value: function init() {}\n    /**\n     * Required method to get current value from editable element.\n     */\n\n  }, {\n    key: \"getValue\",\n    value: function getValue() {\n      throw Error('Editor getValue() method unimplemented');\n    }\n    /**\n     * Required method to set new value into editable element.\n     */\n\n  }, {\n    key: \"setValue\",\n    value: function setValue() {\n      throw Error('Editor setValue() method unimplemented');\n    }\n    /**\n     * Required method to open editor.\n     */\n\n  }, {\n    key: \"open\",\n    value: function open() {\n      throw Error('Editor open() method unimplemented');\n    }\n    /**\n     * Required method to close editor.\n     */\n\n  }, {\n    key: \"close\",\n    value: function close() {\n      throw Error('Editor close() method unimplemented');\n    }\n    /**\n     * Prepares editor's meta data.\n     *\n     * @param {number} row The visual row index.\n     * @param {number} col The visual column index.\n     * @param {number|string} prop The column property (passed when datasource is an array of objects).\n     * @param {HTMLTableCellElement} td The rendered cell element.\n     * @param {*} value The rendered value.\n     * @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).\n     */\n\n  }, {\n    key: \"prepare\",\n    value: function prepare(row, col, prop, td, value, cellProperties) {\n      this.TD = td;\n      this.row = row;\n      this.col = col;\n      this.prop = prop;\n      this.originalValue = value;\n      this.cellProperties = cellProperties;\n      this.state = EDITOR_STATE.VIRGIN;\n    }\n    /**\n     * Fallback method to provide extendable editors in ES5.\n     *\n     * @returns {Function}\n     */\n\n  }, {\n    key: \"extend\",\n    value: function extend() {\n      return /*#__PURE__*/function (_this$constructor) {\n        _inherits(Editor, _this$constructor);\n\n        var _super = _createSuper(Editor);\n\n        function Editor() {\n          _classCallCheck(this, Editor);\n\n          return _super.apply(this, arguments);\n        }\n\n        return _createClass(Editor);\n      }(this.constructor);\n    }\n    /**\n     * Saves value from editor into data storage.\n     *\n     * @param {*} value The editor value.\n     * @param {boolean} ctrlDown If `true`, applies value to each cell in the last selected range.\n     */\n\n  }, {\n    key: \"saveValue\",\n    value: function saveValue(value, ctrlDown) {\n      var visualRowFrom;\n      var visualColumnFrom;\n      var visualRowTo;\n      var visualColumnTo; // if ctrl+enter and multiple cells selected, behave like Excel (finish editing and apply to all cells)\n\n      if (ctrlDown) {\n        var selectedLast = this.hot.getSelectedLast();\n        visualRowFrom = Math.max(Math.min(selectedLast[0], selectedLast[2]), 0); // Math.max eliminate headers coords.\n\n        visualColumnFrom = Math.max(Math.min(selectedLast[1], selectedLast[3]), 0); // Math.max eliminate headers coords.\n\n        visualRowTo = Math.max(selectedLast[0], selectedLast[2]);\n        visualColumnTo = Math.max(selectedLast[1], selectedLast[3]);\n      } else {\n        var _ref = [this.row, this.col, null, null];\n        visualRowFrom = _ref[0];\n        visualColumnFrom = _ref[1];\n        visualRowTo = _ref[2];\n        visualColumnTo = _ref[3];\n      }\n\n      var modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', visualRowFrom, visualColumnFrom);\n\n      if (Array.isArray(modifiedCellCoords)) {\n        var _modifiedCellCoords = _slicedToArray(modifiedCellCoords, 2);\n\n        visualRowFrom = _modifiedCellCoords[0];\n        visualColumnFrom = _modifiedCellCoords[1];\n      } // Saving values using the modified coordinates.\n\n\n      this.hot.populateFromArray(visualRowFrom, visualColumnFrom, value, visualRowTo, visualColumnTo, 'edit');\n    }\n    /**\n     * Begins editing on a highlighted cell and hides fillHandle corner if was present.\n     *\n     * @param {*} newInitialValue The initial editor value.\n     * @param {Event} event The keyboard event object.\n     */\n\n  }, {\n    key: \"beginEditing\",\n    value: function beginEditing(newInitialValue, event) {\n      if (this.state !== EDITOR_STATE.VIRGIN) {\n        return;\n      }\n\n      var hotInstance = this.hot; // We have to convert visual indexes into renderable indexes\n      // due to hidden columns don't participate in the rendering process\n\n      var renderableRowIndex = hotInstance.rowIndexMapper.getRenderableFromVisualIndex(this.row);\n      var renderableColumnIndex = hotInstance.columnIndexMapper.getRenderableFromVisualIndex(this.col);\n      hotInstance.view.scrollViewport(new CellCoords(renderableRowIndex, renderableColumnIndex));\n      this.state = EDITOR_STATE.EDITING; // Set the editor value only in the full edit mode. In other mode the focusable element has to be empty,\n      // otherwise IME (editor for Asia users) doesn't work.\n\n      if (this.isInFullEditMode()) {\n        var stringifiedInitialValue = typeof newInitialValue === 'string' ? newInitialValue : stringify(this.originalValue);\n        this.setValue(stringifiedInitialValue);\n      }\n\n      this.open(event);\n      this._opened = true;\n      this.focus(); // only rerender the selections (FillHandle should disappear when beginEditing is triggered)\n\n      hotInstance.view.render();\n      hotInstance.runHooks('afterBeginEditing', this.row, this.col);\n    }\n    /**\n     * Finishes editing and start saving or restoring process for editing cell or last selected range.\n     *\n     * @param {boolean} restoreOriginalValue If true, then closes editor without saving value from the editor into a cell.\n     * @param {boolean} ctrlDown If true, then saveValue will save editor's value to each cell in the last selected range.\n     * @param {Function} callback The callback function, fired after editor closing.\n     */\n\n  }, {\n    key: \"finishEditing\",\n    value: function finishEditing(restoreOriginalValue, ctrlDown, callback) {\n      var _this = this;\n\n      var val;\n\n      if (callback) {\n        var previousCloseCallback = this._closeCallback;\n\n        this._closeCallback = function (result) {\n          if (previousCloseCallback) {\n            previousCloseCallback(result);\n          }\n\n          callback(result);\n\n          _this.hot.view.render();\n        };\n      }\n\n      if (this.isWaiting()) {\n        return;\n      }\n\n      if (this.state === EDITOR_STATE.VIRGIN) {\n        this.hot._registerTimeout(function () {\n          _this._fireCallbacks(true);\n        });\n\n        return;\n      }\n\n      if (this.state === EDITOR_STATE.EDITING) {\n        if (restoreOriginalValue) {\n          this.cancelChanges();\n          this.hot.view.render();\n          return;\n        }\n\n        var value = this.getValue();\n\n        if (this.hot.getSettings().trimWhitespace) {\n          // We trim only string values\n          val = [[typeof value === 'string' ? String.prototype.trim.call(value || '') : value]];\n        } else {\n          val = [[value]];\n        }\n\n        this.state = EDITOR_STATE.WAITING;\n        this.saveValue(val, ctrlDown);\n\n        if (this.hot.getCellValidator(this.cellProperties)) {\n          this.hot.addHookOnce('postAfterValidate', function (result) {\n            _this.state = EDITOR_STATE.FINISHED;\n\n            _this.discardEditor(result);\n          });\n        } else {\n          this.state = EDITOR_STATE.FINISHED;\n          this.discardEditor(true);\n        }\n      }\n    }\n    /**\n     * Finishes editing without singout saving value.\n     */\n\n  }, {\n    key: \"cancelChanges\",\n    value: function cancelChanges() {\n      this.state = EDITOR_STATE.FINISHED;\n      this.discardEditor();\n    }\n    /**\n     * Verifies result of validation or closes editor if user's cancelled changes.\n     *\n     * @param {boolean|undefined} result If `false` and the cell using allowInvalid option,\n     *                                   then an editor won't be closed until validation is passed.\n     */\n\n  }, {\n    key: \"discardEditor\",\n    value: function discardEditor(result) {\n      if (this.state !== EDITOR_STATE.FINISHED) {\n        return;\n      } // validator was defined and failed\n\n\n      if (result === false && this.cellProperties.allowInvalid !== true) {\n        this.hot.selectCell(this.row, this.col);\n        this.focus();\n        this.state = EDITOR_STATE.EDITING;\n\n        this._fireCallbacks(false);\n      } else {\n        this.close();\n        this._opened = false;\n        this._fullEditMode = false;\n        this.state = EDITOR_STATE.VIRGIN;\n\n        this._fireCallbacks(true);\n      }\n    }\n    /**\n     * Switch editor into full edit mode. In this state navigation keys don't close editor. This mode is activated\n     * automatically after hit ENTER or F2 key on the cell or while editing cell press F2 key.\n     */\n\n  }, {\n    key: \"enableFullEditMode\",\n    value: function enableFullEditMode() {\n      this._fullEditMode = true;\n    }\n    /**\n     * Checks if editor is in full edit mode.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isInFullEditMode\",\n    value: function isInFullEditMode() {\n      return this._fullEditMode;\n    }\n    /**\n     * Returns information whether the editor is open.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isOpened\",\n    value: function isOpened() {\n      return this._opened;\n    }\n    /**\n     * Returns information whether the editor is waiting, eg.: for async validation.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isWaiting\",\n    value: function isWaiting() {\n      return this.state === EDITOR_STATE.WAITING;\n    }\n    /**\n     * Gets className of the edited cell if exist.\n     *\n     * @returns {string}\n     */\n\n  }, {\n    key: \"getEditedCellsLayerClass\",\n    value: function getEditedCellsLayerClass() {\n      var editorSection = this.checkEditorSection();\n\n      switch (editorSection) {\n        case 'right':\n          return 'ht_clone_right';\n\n        case 'left':\n          return 'ht_clone_left';\n\n        case 'bottom':\n          return 'ht_clone_bottom';\n\n        case 'bottom-right-corner':\n          return 'ht_clone_bottom_right_corner';\n\n        case 'bottom-left-corner':\n          return 'ht_clone_bottom_left_corner';\n\n        case 'top':\n          return 'ht_clone_top';\n\n        case 'top-right-corner':\n          return 'ht_clone_top_right_corner';\n\n        case 'top-left-corner':\n          return 'ht_clone_top_left_corner';\n\n        default:\n          return 'ht_clone_master';\n      }\n    }\n    /**\n     * Gets HTMLTableCellElement of the edited cell if exist.\n     *\n     * @returns {HTMLTableCellElement|null}\n     */\n\n  }, {\n    key: \"getEditedCell\",\n    value: function getEditedCell() {\n      return this.hot.getCell(this.row, this.col, true);\n    }\n    /**\n     * Returns name of the overlay, where editor is placed.\n     *\n     * @private\n     * @returns {string}\n     */\n\n  }, {\n    key: \"checkEditorSection\",\n    value: function checkEditorSection() {\n      var totalRows = this.hot.countRows();\n      var section = '';\n\n      if (this.row < this.hot.getSettings().fixedRowsTop) {\n        if (this.col < this.hot.getSettings().fixedColumnsLeft) {\n          section = 'top-left-corner';\n        } else {\n          section = 'top';\n        }\n      } else if (this.hot.getSettings().fixedRowsBottom && this.row >= totalRows - this.hot.getSettings().fixedRowsBottom) {\n        if (this.col < this.hot.getSettings().fixedColumnsLeft) {\n          section = 'bottom-left-corner';\n        } else {\n          section = 'bottom';\n        }\n      } else if (this.col < this.hot.getSettings().fixedColumnsLeft) {\n        section = 'left';\n      }\n\n      return section;\n    }\n  }], [{\n    key: \"EDITOR_TYPE\",\n    get: function get() {\n      return EDITOR_TYPE;\n    }\n  }]);\n\n  return BaseEditor;\n}();\nmixin(BaseEditor, hooksRefRegisterer);", "import { arrayEach } from \"./../helpers/array.mjs\";\nimport { defineGetter, objectEach } from \"./../helpers/object.mjs\";\nvar MIXIN_NAME = 'hooksRefRegisterer';\n/**\n * Mixin object to extend objects functionality for auto registering hooks in an Handsontable instance.\n *\n * @type {object}\n */\n\nvar hooksRefRegisterer = {\n  /**\n   * Internal hooks storage.\n   */\n  _hooksStorage: Object.create(null),\n\n  /**\n   * Add hook to the collection.\n   *\n   * @param {string} key The hook name.\n   * @param {Function} callback The hook callback.\n   * @returns {object}\n   */\n  addHook: function addHook(key, callback) {\n    if (!this._hooksStorage[key]) {\n      this._hooksStorage[key] = [];\n    }\n\n    this.hot.addHook(key, callback);\n\n    this._hooksStorage[key].push(callback);\n\n    return this;\n  },\n\n  /**\n   * Remove all hooks listeners by hook name.\n   *\n   * @param {string} key The hook name.\n   */\n  removeHooksByKey: function removeHooksByKey(key) {\n    var _this = this;\n\n    arrayEach(this._hooksStorage[key] || [], function (callback) {\n      _this.hot.removeHook(key, callback);\n    });\n  },\n\n  /**\n   * Clear all added hooks.\n   */\n  clearHooks: function clearHooks() {\n    var _this2 = this;\n\n    objectEach(this._hooksStorage, function (callbacks, name) {\n      return _this2.removeHooksByKey(name);\n    });\n    this._hooksStorage = {};\n  }\n};\ndefineGetter(hooksRefRegisterer, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false\n});\nexport default hooksRefRegisterer;", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport \"core-js/modules/es.regexp.constructor.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.string.match.js\";\nimport \"core-js/modules/es.array.last-index-of.js\";\nimport \"core-js/modules/es.array.reduce.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.find-index.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport { isEmpty } from \"./../helpers/mixed.mjs\";\nvar ESCAPED_HTML_CHARS = {\n  '&nbsp;': '\\x20',\n  '&amp;': '&',\n  '&lt;': '<',\n  '&gt;': '>'\n};\nvar regEscapedChars = new RegExp(Object.keys(ESCAPED_HTML_CHARS).map(function (key) {\n  return \"(\".concat(key, \")\");\n}).join('|'), 'gi');\n/**\n * Verifies if node is an HTMLTable element.\n *\n * @param {Node} element Node to verify if it's an HTMLTable.\n * @returns {boolean}\n */\n\nfunction isHTMLTable(element) {\n  return (element && element.nodeName || '') === 'TABLE';\n}\n/**\n * Converts Handsontable into HTMLTableElement.\n *\n * @param {Core} instance The Handsontable instance.\n * @returns {string} OuterHTML of the HTMLTableElement.\n */\n\n\nexport function instanceToHTML(instance) {\n  var hasColumnHeaders = instance.hasColHeaders();\n  var hasRowHeaders = instance.hasRowHeaders();\n  var coords = [hasColumnHeaders ? -1 : 0, hasRowHeaders ? -1 : 0, instance.countRows() - 1, instance.countCols() - 1];\n  var data = instance.getData.apply(instance, coords);\n  var countRows = data.length;\n  var countCols = countRows > 0 ? data[0].length : 0;\n  var TABLE = ['<table>', '</table>'];\n  var THEAD = hasColumnHeaders ? ['<thead>', '</thead>'] : [];\n  var TBODY = ['<tbody>', '</tbody>'];\n  var rowModifier = hasRowHeaders ? 1 : 0;\n  var columnModifier = hasColumnHeaders ? 1 : 0;\n\n  for (var row = 0; row < countRows; row += 1) {\n    var isColumnHeadersRow = hasColumnHeaders && row === 0;\n    var CELLS = [];\n\n    for (var column = 0; column < countCols; column += 1) {\n      var isRowHeadersColumn = !isColumnHeadersRow && hasRowHeaders && column === 0;\n      var cell = '';\n\n      if (isColumnHeadersRow) {\n        cell = \"<th>\".concat(instance.getColHeader(column - rowModifier), \"</th>\");\n      } else if (isRowHeadersColumn) {\n        cell = \"<th>\".concat(instance.getRowHeader(row - columnModifier), \"</th>\");\n      } else {\n        var cellData = data[row][column];\n\n        var _instance$getCellMeta = instance.getCellMeta(row - columnModifier, column - rowModifier),\n            hidden = _instance$getCellMeta.hidden,\n            rowspan = _instance$getCellMeta.rowspan,\n            colspan = _instance$getCellMeta.colspan;\n\n        if (!hidden) {\n          var attrs = [];\n\n          if (rowspan) {\n            attrs.push(\"rowspan=\\\"\".concat(rowspan, \"\\\"\"));\n          }\n\n          if (colspan) {\n            attrs.push(\"colspan=\\\"\".concat(colspan, \"\\\"\"));\n          }\n\n          if (isEmpty(cellData)) {\n            cell = \"<td \".concat(attrs.join(' '), \"></td>\");\n          } else {\n            var value = cellData.toString().replace('<', '&lt;').replace('>', '&gt;').replace(/(<br(\\s*|\\/)>(\\r\\n|\\n)?|\\r\\n|\\n)/g, '<br>\\r\\n').replace(/\\x20/gi, '&nbsp;').replace(/\\t/gi, '&#9;');\n            cell = \"<td \".concat(attrs.join(' '), \">\").concat(value, \"</td>\");\n          }\n        }\n      }\n\n      CELLS.push(cell);\n    }\n\n    var TR = ['<tr>'].concat(CELLS, ['</tr>']).join('');\n\n    if (isColumnHeadersRow) {\n      THEAD.splice(1, 0, TR);\n    } else {\n      TBODY.splice(-1, 0, TR);\n    }\n  }\n\n  TABLE.splice(1, 0, THEAD.join(''), TBODY.join(''));\n  return TABLE.join('');\n}\n/**\n * Converts 2D array into HTMLTableElement.\n *\n * @param {Array} input Input array which will be converted to HTMLTable.\n * @returns {string} OuterHTML of the HTMLTableElement.\n */\n// eslint-disable-next-line no-restricted-globals\n\nexport function _dataToHTML(input) {\n  var inputLen = input.length;\n  var result = ['<table>'];\n\n  for (var row = 0; row < inputLen; row += 1) {\n    var rowData = input[row];\n    var columnsLen = rowData.length;\n    var columnsResult = [];\n\n    if (row === 0) {\n      result.push('<tbody>');\n    }\n\n    for (var column = 0; column < columnsLen; column += 1) {\n      var cellData = rowData[column];\n      var parsedCellData = isEmpty(cellData) ? '' : cellData.toString().replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/(<br(\\s*|\\/)>(\\r\\n|\\n)?|\\r\\n|\\n)/g, '<br>\\r\\n').replace(/\\x20/gi, '&nbsp;').replace(/\\t/gi, '&#9;');\n      columnsResult.push(\"<td>\".concat(parsedCellData, \"</td>\"));\n    }\n\n    result.push.apply(result, ['<tr>'].concat(columnsResult, ['</tr>']));\n\n    if (row + 1 === inputLen) {\n      result.push('</tbody>');\n    }\n  }\n\n  result.push('</table>');\n  return result.join('');\n}\n/**\n * Converts HTMLTable or string into Handsontable configuration object.\n *\n * @param {Element|string} element Node element which should contain `<table>...</table>`.\n * @param {Document} [rootDocument] The document window owner.\n * @returns {object} Return configuration object. Contains keys as DefaultSettings.\n */\n// eslint-disable-next-line no-restricted-globals\n\nexport function htmlToGridSettings(element) {\n  var rootDocument = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n  var settingsObj = {};\n  var fragment = rootDocument.createDocumentFragment();\n  var tempElem = rootDocument.createElement('div');\n  fragment.appendChild(tempElem);\n  var checkElement = element;\n\n  if (typeof checkElement === 'string') {\n    var escapedAdjacentHTML = checkElement.replace(/<td\\b[^>]*?>([\\s\\S]*?)<\\/\\s*td>/g, function (cellFragment) {\n      var openingTag = cellFragment.match(/<td\\b[^>]*?>/g)[0];\n      var cellValue = cellFragment.substring(openingTag.length, cellFragment.lastIndexOf('<')).replace(/(<(?!br)([^>]+)>)/gi, '');\n      var closingTag = '</td>';\n      return \"\".concat(openingTag).concat(cellValue).concat(closingTag);\n    });\n    tempElem.insertAdjacentHTML('afterbegin', \"\".concat(escapedAdjacentHTML));\n    checkElement = tempElem.querySelector('table');\n  }\n\n  if (!checkElement || !isHTMLTable(checkElement)) {\n    return;\n  }\n\n  var generator = tempElem.querySelector('meta[name$=\"enerator\"]');\n  var hasRowHeaders = checkElement.querySelector('tbody th') !== null;\n  var trElement = checkElement.querySelector('tr');\n  var countCols = !trElement ? 0 : Array.from(trElement.cells).reduce(function (cols, cell) {\n    return cols + cell.colSpan;\n  }, 0) - (hasRowHeaders ? 1 : 0);\n  var fixedRowsBottom = checkElement.tFoot && Array.from(checkElement.tFoot.rows) || [];\n  var fixedRowsTop = [];\n  var hasColHeaders = false;\n  var thRowsLen = 0;\n  var countRows = 0;\n\n  if (checkElement.tHead) {\n    var thRows = Array.from(checkElement.tHead.rows).filter(function (tr) {\n      var isDataRow = tr.querySelector('td') !== null;\n\n      if (isDataRow) {\n        fixedRowsTop.push(tr);\n      }\n\n      return !isDataRow;\n    });\n    thRowsLen = thRows.length;\n    hasColHeaders = thRowsLen > 0;\n\n    if (thRowsLen > 1) {\n      settingsObj.nestedHeaders = Array.from(thRows).reduce(function (rows, row) {\n        var headersRow = Array.from(row.cells).reduce(function (headers, header, currentIndex) {\n          if (hasRowHeaders && currentIndex === 0) {\n            return headers;\n          }\n\n          var colspan = header.colSpan,\n              innerHTML = header.innerHTML;\n          var nextHeader = colspan > 1 ? {\n            label: innerHTML,\n            colspan: colspan\n          } : innerHTML;\n          headers.push(nextHeader);\n          return headers;\n        }, []);\n        rows.push(headersRow);\n        return rows;\n      }, []);\n    } else if (hasColHeaders) {\n      settingsObj.colHeaders = Array.from(thRows[0].children).reduce(function (headers, header, index) {\n        if (hasRowHeaders && index === 0) {\n          return headers;\n        }\n\n        headers.push(header.innerHTML);\n        return headers;\n      }, []);\n    }\n  }\n\n  if (fixedRowsTop.length) {\n    settingsObj.fixedRowsTop = fixedRowsTop.length;\n  }\n\n  if (fixedRowsBottom.length) {\n    settingsObj.fixedRowsBottom = fixedRowsBottom.length;\n  }\n\n  var dataRows = [].concat(fixedRowsTop, _toConsumableArray(Array.from(checkElement.tBodies).reduce(function (sections, section) {\n    sections.push.apply(sections, _toConsumableArray(Array.from(section.rows)));\n    return sections;\n  }, [])), _toConsumableArray(fixedRowsBottom));\n  countRows = dataRows.length;\n  var dataArr = new Array(countRows);\n\n  for (var r = 0; r < countRows; r++) {\n    dataArr[r] = new Array(countCols);\n  }\n\n  var mergeCells = [];\n  var rowHeaders = [];\n\n  for (var row = 0; row < countRows; row++) {\n    var tr = dataRows[row];\n    var cells = Array.from(tr.cells);\n    var cellsLen = cells.length;\n\n    for (var cellId = 0; cellId < cellsLen; cellId++) {\n      var cell = cells[cellId];\n      var nodeName = cell.nodeName,\n          innerHTML = cell.innerHTML,\n          rowspan = cell.rowSpan,\n          colspan = cell.colSpan;\n      var col = dataArr[row].findIndex(function (value) {\n        return value === void 0;\n      });\n\n      if (nodeName === 'TD') {\n        if (rowspan > 1 || colspan > 1) {\n          for (var rstart = row; rstart < row + rowspan; rstart++) {\n            if (rstart < countRows) {\n              for (var cstart = col; cstart < col + colspan; cstart++) {\n                dataArr[rstart][cstart] = null;\n              }\n            }\n          }\n\n          var styleAttr = cell.getAttribute('style');\n          var ignoreMerge = styleAttr && styleAttr.includes('mso-ignore:colspan');\n\n          if (!ignoreMerge) {\n            mergeCells.push({\n              col: col,\n              row: row,\n              rowspan: rowspan,\n              colspan: colspan\n            });\n          }\n        }\n\n        var cellValue = '';\n\n        if (generator && /excel/gi.test(generator.content)) {\n          cellValue = innerHTML.replace(/[\\r\\n][\\x20]{0,2}/g, '\\x20').replace(/<br(\\s*|\\/)>[\\r\\n]?[\\x20]{0,3}/gim, '\\r\\n');\n        } else {\n          cellValue = innerHTML.replace(/<br(\\s*|\\/)>[\\r\\n]?/gim, '\\r\\n');\n        }\n\n        dataArr[row][col] = cellValue.replace(regEscapedChars, function (match) {\n          return ESCAPED_HTML_CHARS[match];\n        });\n      } else {\n        rowHeaders.push(innerHTML);\n      }\n    }\n  }\n\n  if (mergeCells.length) {\n    settingsObj.mergeCells = mergeCells;\n  }\n\n  if (rowHeaders.length) {\n    settingsObj.rowHeaders = rowHeaders;\n  }\n\n  if (dataArr.length) {\n    settingsObj.data = dataArr;\n  }\n\n  return settingsObj;\n}", "var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n  keys: function keys(it) {\n    return nativeKeys(toObject(it));\n  }\n});\n", "'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n  return [\n    // `String.prototype.match` method\n    // https://tc39.es/ecma262/#sec-string.prototype.match\n    function match(regexp) {\n      var O = requireObjectCoercible(this);\n      var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);\n      return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n    },\n    // `RegExp.prototype[@@match]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n    function (string) {\n      var rx = anObject(this);\n      var S = toString(string);\n      var res = maybeCallNative(nativeMatch, rx, S);\n\n      if (res.done) return res.value;\n\n      if (!rx.global) return regExpExec(rx, S);\n\n      var fullUnicode = rx.unicode;\n      rx.lastIndex = 0;\n      var A = [];\n      var n = 0;\n      var result;\n      while ((result = regExpExec(rx, S)) !== null) {\n        var matchStr = toString(result[0]);\n        A[n] = matchStr;\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n        n++;\n      }\n      return n === 0 ? null : A;\n    }\n  ];\n});\n", "var $ = require('../internals/export');\nvar lastIndexOf = require('../internals/array-last-index-of');\n\n// `Array.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\n// eslint-disable-next-line es/no-array-prototype-lastindexof -- required for testing\n$({ target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf }, {\n  lastIndexOf: lastIndexOf\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar CHROME_VERSION = require('../internals/engine-v8-version');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduce');\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\n\n// `Array.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || CHROME_BUG }, {\n  reduce: function reduce(callbackfn /* , initialValue */) {\n    var length = arguments.length;\n    return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : undefined);\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n  findIndex: function findIndex(callbackfn /* , that = undefined */) {\n    return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n", "function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/**\n * Utility to register plugins and common namespace for keeping the reference to all plugins classes.\n */\nimport { toUpperCaseFirst } from \"../helpers/string.mjs\";\nimport { createPriorityMap } from \"../utils/dataStructures/priorityMap.mjs\";\nimport { createUniqueMap } from \"../utils/dataStructures/uniqueMap.mjs\";\nimport { createUniqueSet } from \"../utils/dataStructures/uniqueSet.mjs\";\n\nvar ERROR_PLUGIN_REGISTERED = function ERROR_PLUGIN_REGISTERED(pluginName) {\n  return \"There is already registered \\\"\".concat(pluginName, \"\\\" plugin.\");\n};\n\nvar ERROR_PRIORITY_REGISTERED = function ERROR_PRIORITY_REGISTERED(priority) {\n  return \"There is already registered plugin on priority \\\"\".concat(priority, \"\\\".\");\n};\n\nvar ERROR_PRIORITY_NAN = function ERROR_PRIORITY_NAN(priority) {\n  return \"The priority \\\"\".concat(priority, \"\\\" is not a number.\");\n};\n/**\n * Stores plugins' names' queue with their priorities.\n */\n\n\nvar priorityPluginsQueue = createPriorityMap({\n  errorPriorityExists: ERROR_PRIORITY_REGISTERED,\n  errorPriorityNaN: ERROR_PRIORITY_NAN\n});\n/**\n * Stores plugins names' queue by registration order.\n */\n\nvar uniquePluginsQueue = createUniqueSet({\n  errorItemExists: ERROR_PLUGIN_REGISTERED\n});\n/**\n * Stores plugins references between their name and class.\n */\n\nvar uniquePluginsList = createUniqueMap({\n  errorIdExists: ERROR_PLUGIN_REGISTERED\n});\n/**\n * Gets registered plugins' names in the following order:\n * 1) Plugins registered with a defined priority attribute, in the ascending order of priority.\n * 2) Plugins registered without a defined priority attribute, in the registration order.\n *\n * @returns {string[]}\n */\n\nexport function getPluginsNames() {\n  return [].concat(_toConsumableArray(priorityPluginsQueue.getItems()), _toConsumableArray(uniquePluginsQueue.getItems()));\n}\n/**\n * Gets registered plugin's class based on the given name.\n *\n * @param {string} pluginName Plugin's name.\n * @returns {BasePlugin}\n */\n\nexport function getPlugin(pluginName) {\n  var unifiedPluginName = toUpperCaseFirst(pluginName);\n  return uniquePluginsList.getItem(unifiedPluginName);\n}\n/**\n * Checks if the plugin under the name is already registered.\n *\n * @param {string} pluginName Plugin's name.\n * @returns {boolean}\n */\n\nexport function hasPlugin(pluginName) {\n  /* eslint-disable no-unneeded-ternary */\n  return getPlugin(pluginName) ? true : false;\n}\n/**\n * Registers plugin under the given name only once.\n *\n * @param {string|Function} pluginName The plugin name or plugin class.\n * @param {Function} [pluginClass] The plugin class.\n * @param {number} [priority] The plugin priority.\n */\n\nexport function registerPlugin(pluginName, pluginClass, priority) {\n  var _unifyPluginArguments = unifyPluginArguments(pluginName, pluginClass, priority);\n\n  var _unifyPluginArguments2 = _slicedToArray(_unifyPluginArguments, 3);\n\n  pluginName = _unifyPluginArguments2[0];\n  pluginClass = _unifyPluginArguments2[1];\n  priority = _unifyPluginArguments2[2];\n\n  if (getPlugin(pluginName) === void 0) {\n    _registerPlugin(pluginName, pluginClass, priority);\n  }\n}\n/**\n * Registers plugin under the given name.\n *\n * @param {string|Function} pluginName The plugin name or plugin class.\n * @param {Function} [pluginClass] The plugin class.\n * @param {number} [priority] The plugin priority.\n */\n\nfunction _registerPlugin(pluginName, pluginClass, priority) {\n  var unifiedPluginName = toUpperCaseFirst(pluginName);\n\n  if (uniquePluginsList.hasItem(unifiedPluginName)) {\n    throw new Error(ERROR_PLUGIN_REGISTERED(unifiedPluginName));\n  }\n\n  if (priority === void 0) {\n    uniquePluginsQueue.addItem(unifiedPluginName);\n  } else {\n    priorityPluginsQueue.addItem(priority, unifiedPluginName);\n  }\n\n  uniquePluginsList.addItem(unifiedPluginName, pluginClass);\n}\n/**\n * Unifies arguments to register the plugin.\n *\n * @param {string|Function} pluginName The plugin name or plugin class.\n * @param {Function} [pluginClass] The plugin class.\n * @param {number} [priority] The plugin priority.\n * @returns {Array}\n */\n\n\nfunction unifyPluginArguments(pluginName, pluginClass, priority) {\n  if (typeof pluginName === 'function') {\n    pluginClass = pluginName;\n    pluginName = pluginClass.PLUGIN_KEY;\n    priority = pluginClass.PLUGIN_PRIORITY;\n  }\n\n  return [pluginName, pluginClass, priority];\n}", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport { isNumeric } from \"../../helpers/number.mjs\";\nimport { isFunction } from \"../../helpers/function.mjs\";\nexport var ASC = 'asc';\nexport var DESC = 'desc';\nvar ORDER_MAP = new Map([[ASC, [-1, 1]], [DESC, [1, -1]]]);\n\nvar DEFAULT_ERROR_PRIORITY_EXISTS = function DEFAULT_ERROR_PRIORITY_EXISTS(priority) {\n  return \"The priority '\".concat(priority, \"' is already declared in a map.\");\n};\n\nvar DEFAULT_ERROR_PRIORITY_NAN = function DEFAULT_ERROR_PRIORITY_NAN(priority) {\n  return \"The priority '\".concat(priority, \"' is not a number.\");\n};\n/**\n * @typedef {object} PriorityMap\n * @property {Function} addItem Adds items to the priority map.\n * @property {Function} getItems Gets items from the passed map in a ASC or DESC order of priorities.\n */\n\n/**\n * Creates a new priority map.\n *\n * @param {object} config The config for priority map.\n * @param {Function} config.errorPriorityExists The function to generate a custom error message if priority is already taken.\n * @param {Function} config.errorPriorityNaN The function to generate a custom error message if priority is not a number.\n * @returns {PriorityMap}\n */\n\n\nexport function createPriorityMap() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      errorPriorityExists = _ref.errorPriorityExists,\n      errorPriorityNaN = _ref.errorPriorityNaN;\n\n  var priorityMap = new Map();\n  errorPriorityExists = isFunction(errorPriorityExists) ? errorPriorityExists : DEFAULT_ERROR_PRIORITY_EXISTS;\n  errorPriorityNaN = isFunction(errorPriorityNaN) ? errorPriorityNaN : DEFAULT_ERROR_PRIORITY_NAN;\n  /**\n   * Adds items to priority map. Throws an error if `priority` is not a number or if is already added.\n   *\n   * @param {number} priority The priority for adding item.\n   * @param {*} item The adding item.\n   */\n\n  function addItem(priority, item) {\n    if (!isNumeric(priority)) {\n      throw new Error(errorPriorityNaN(priority));\n    }\n\n    if (priorityMap.has(priority)) {\n      throw new Error(errorPriorityExists(priority));\n    }\n\n    priorityMap.set(priority, item);\n  }\n  /**\n   * Gets items from the passed map in a ASC or DESC order of priorities.\n   *\n   * @param {string} [order] The order for getting items. ASC is an default.\n   * @returns {*}\n   */\n\n\n  function getItems() {\n    var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ASC;\n\n    var _ref2 = ORDER_MAP.get(order) || ORDER_MAP.get(ASC),\n        _ref3 = _slicedToArray(_ref2, 2),\n        left = _ref3[0],\n        right = _ref3[1];\n\n    return _toConsumableArray(priorityMap) // we want to be sure we sort over a priority key\n    // if we are sure we can remove custom compare function\n    // then we should replace next line with a default `.sort()`\n    .sort(function (a, b) {\n      return a[0] < b[0] ? left : right;\n    }).map(function (item) {\n      return item[1];\n    });\n  }\n\n  return {\n    addItem: addItem,\n    getItems: getItems\n  };\n}", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.regexp.constructor.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.string.trim.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * Checks if the passed value is numeric one. For example these values (passed as string or number)\n * are considered as numeric values:\n *  - 0.001\n *  - .001\n *  - - 10000\n *  - 10000\n *  - 1e+26\n *  - 22e-26\n *  - .45e+26\n *  - 0xabcdef (hex)\n *  - 0x1 (hex)\n *\n * @param {*} value The value to check.\n * @param {string[]} additionalDelimiters An additional delimiters to be used while checking the numeric value.\n * @returns {boolean}\n */\nexport function isNumeric(value) {\n  var additionalDelimiters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n  var type = _typeof(value);\n\n  if (type === 'number') {\n    return !isNaN(value) && isFinite(value);\n  } else if (type === 'string') {\n    if (value.length === 0) {\n      return false;\n    } else if (value.length === 1) {\n      return /\\d/.test(value);\n    }\n\n    var delimiter = Array.from(new Set(['.'].concat(_toConsumableArray(additionalDelimiters)))).map(function (d) {\n      return \"\\\\\".concat(d);\n    }).join('|');\n    return new RegExp(\"^[+-]?\\\\s*(((\".concat(delimiter, \")?\\\\d+((\").concat(delimiter, \")\\\\d+)?(e[+-]?\\\\d+)?)|(0x[a-f\\\\d]+))$\"), 'i').test(value.trim());\n  } else if (type === 'object') {\n    return !!value && typeof value.valueOf() === 'number' && !(value instanceof Date);\n  }\n\n  return false;\n}\n/* eslint-enable jsdoc/require-description-complete-sentence */\n\n/**\n * Checks if the passed value is numeric-like value. The helper returns `true` for the same\n * values as for the `isNumeric` function plus `true` for numbers delimited by comma.\n *\n * @param {*} value The value to check.\n * @returns {boolean}\n */\n\nexport function isNumericLike(value) {\n  return isNumeric(value, [',']);\n}\n/**\n * A specialized version of `.forEach` defined by ranges.\n *\n * @param {number} rangeFrom The number from start iterate.\n * @param {number|Function} rangeTo The number where finish iterate or function as a iteratee.\n * @param {Function} [iteratee] The function invoked per iteration.\n */\n\nexport function rangeEach(rangeFrom, rangeTo, iteratee) {\n  var index = -1;\n\n  if (typeof rangeTo === 'function') {\n    iteratee = rangeTo;\n    rangeTo = rangeFrom;\n  } else {\n    index = rangeFrom - 1;\n  }\n  /* eslint-disable-next-line no-plusplus */\n\n\n  while (++index <= rangeTo) {\n    if (iteratee(index) === false) {\n      break;\n    }\n  }\n}\n/**\n * A specialized version of `.forEach` defined by ranges iterable in reverse order.\n *\n * @param {number} rangeFrom The number from start iterate.\n * @param {number|Function} rangeTo The number where finish iterate or function as a iteratee.\n * @param {Function} [iteratee] The function invoked per iteration.\n */\n\nexport function rangeEachReverse(rangeFrom, rangeTo, iteratee) {\n  var index = rangeFrom + 1;\n\n  if (typeof rangeTo === 'function') {\n    iteratee = rangeTo;\n    rangeTo = 0;\n  }\n  /* eslint-disable-next-line no-plusplus */\n\n\n  while (--index >= rangeTo) {\n    if (iteratee(index) === false) {\n      break;\n    }\n  }\n}\n/**\n * Calculate value from percent.\n *\n * @param {number} value Base value from percent will be calculated.\n * @param {string|number} percent Can be number or string (eq. `'33%'`).\n * @returns {number}\n */\n\nexport function valueAccordingPercent(value, percent) {\n  percent = parseInt(percent.toString().replace('%', ''), 10);\n  percent = isNaN(percent) ? 0 : percent;\n  return parseInt(value * percent / 100, 10);\n}", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.find.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport { isFunction } from \"../../helpers/function.mjs\";\n\nvar DEFAULT_ERROR_ID_EXISTS = function DEFAULT_ERROR_ID_EXISTS(id) {\n  return \"The id '\".concat(id, \"' is already declared in a map.\");\n};\n/**\n * @typedef {object} UniqueMap\n * @property {Function} addItem Adds a new item to the unique map.\n * @property {Function} clear Clears the map.\n * @property {Function} getId Returns ID for the passed item.\n * @property {Function} getItem Gets item from the passed ID.\n * @property {Function} getItems Gets all items from the map.\n * @property {Function} hasItem Verifies if the passed ID exists in a map.\n */\n\n/**\n * Creates a new unique map.\n *\n * @param {object} config The config for priority queue.\n * @param {Function} config.errorIdExists The function to generate custom message if ID is already taken.\n * @returns {UniqueMap}\n */\n\n\nexport function createUniqueMap() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      errorIdExists = _ref.errorIdExists;\n\n  var uniqueMap = new Map();\n  errorIdExists = isFunction(errorIdExists) ? errorIdExists : DEFAULT_ERROR_ID_EXISTS;\n  /**\n   * Adds a new item to the unique map. Throws error if `id` is already added.\n   *\n   * @param {*} id The ID of the adding item.\n   * @param {*} item The adding item.\n   */\n\n  function addItem(id, item) {\n    if (hasItem(id)) {\n      throw new Error(errorIdExists(id));\n    }\n\n    uniqueMap.set(id, item);\n  }\n  /**\n   * Clears the map.\n   */\n\n\n  function clear() {\n    uniqueMap.clear();\n  }\n  /**\n   * Returns ID for the passed item.\n   *\n   * @param {*} item The item of the getting ID.\n   * @returns {*}\n   */\n\n\n  function getId(item) {\n    var _ref2 = getItems().find(function (_ref4) {\n      var _ref5 = _slicedToArray(_ref4, 2),\n          id = _ref5[0],\n          element = _ref5[1];\n\n      if (item === element) {\n        return id;\n      }\n\n      return false;\n    }) || [null],\n        _ref3 = _slicedToArray(_ref2, 1),\n        itemId = _ref3[0];\n\n    return itemId;\n  }\n  /**\n   * Returns item from the passed ID.\n   *\n   * @param {*} id The ID of the getting item.\n   * @returns {*}\n   */\n\n\n  function getItem(id) {\n    return uniqueMap.get(id);\n  }\n  /**\n   * Gets all items from the map.\n   *\n   * @returns {Array}\n   */\n\n\n  function getItems() {\n    return _toConsumableArray(uniqueMap);\n  }\n  /**\n   * Verifies if the passed ID exists in a map.\n   *\n   * @param {*} id The ID to check if registered.\n   * @returns {boolean}\n   */\n\n\n  function hasItem(id) {\n    return uniqueMap.has(id);\n  }\n\n  return {\n    addItem: addItem,\n    clear: clear,\n    getId: getId,\n    getItem: getItem,\n    getItems: getItems,\n    hasItem: hasItem\n  };\n}", "'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n  find: function find(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport { isFunction } from \"../../helpers/function.mjs\";\n\nvar DEFAULT_ERROR_ITEM_EXISTS = function DEFAULT_ERROR_ITEM_EXISTS(item) {\n  return \"'\".concat(item, \"' value is already declared in a unique set.\");\n};\n/**\n * @typedef {object} UniqueSet\n * @property {Function} addItem Adds items to the priority set.\n * @property {Function} getItems Gets items from the set in order of addition.\n */\n\n/**\n * Creates a new unique set.\n *\n * @param {object} config The config for priority set.\n * @param {Function} config.errorItemExists The function to generate custom error message if item is already in the set.\n * @returns {UniqueSet}\n */\n\n\nexport function createUniqueSet() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      errorItemExists = _ref.errorItemExists;\n\n  var uniqueSet = new Set();\n  errorItemExists = isFunction(errorItemExists) ? errorItemExists : DEFAULT_ERROR_ITEM_EXISTS;\n  /**\n   * Adds items to the unique set. Throws an error if `item` is already added.\n   *\n   * @param {*} item The adding item.\n   */\n\n  function addItem(item) {\n    if (uniqueSet.has(item)) {\n      throw new Error(errorItemExists(item));\n    }\n\n    uniqueSet.add(item);\n  }\n  /**\n   * Gets items from the set in order of addition.\n   *\n   * @returns {*}\n   */\n\n\n  function getItems() {\n    return _toConsumableArray(uniqueSet);\n  }\n\n  return {\n    addItem: addItem,\n    getItems: getItems\n  };\n}", "import staticRegister from \"../utils/staticRegister.mjs\";\n\nvar _staticRegister = staticRegister('renderers'),\n    register = _staticRegister.register,\n    getItem = _staticRegister.getItem,\n    hasItem = _staticRegister.hasItem,\n    getNames = _staticRegister.getNames,\n    getValues = _staticRegister.getValues;\n/**\n * Retrieve renderer function.\n *\n * @param {string} name Renderer identification.\n * @returns {Function} Returns renderer function.\n */\n\n\nfunction _getItem(name) {\n  if (typeof name === 'function') {\n    return name;\n  }\n\n  if (!hasItem(name)) {\n    throw Error(\"No registered renderer found under \\\"\".concat(name, \"\\\" name\"));\n  }\n\n  return getItem(name);\n}\n/**\n * Register renderer under its alias.\n *\n * @param {string|Function} name Renderer's alias or renderer function with its descriptor.\n * @param {Function} [renderer] Renderer function.\n */\n\n\nfunction _register(name, renderer) {\n  if (typeof name !== 'string') {\n    renderer = name;\n    name = renderer.RENDERER_TYPE;\n  }\n\n  register(name, renderer);\n}\n\nexport { _register as registerRenderer, _getItem as getRenderer, hasItem as hasRenderer, getNames as getRegisteredRendererNames, getValues as getRegisteredRenderers };", "import staticRegister from \"../utils/staticRegister.mjs\";\n\nvar _staticRegister = staticRegister('validators'),\n    register = _staticRegister.register,\n    getItem = _staticRegister.getItem,\n    hasItem = _staticRegister.hasItem,\n    getNames = _staticRegister.getNames,\n    getValues = _staticRegister.getValues;\n/**\n * Retrieve validator function.\n *\n * @param {string} name Validator identification.\n * @returns {Function} Returns validator function.\n */\n\n\nfunction _getItem(name) {\n  if (typeof name === 'function') {\n    return name;\n  }\n\n  if (!hasItem(name)) {\n    throw Error(\"No registered validator found under \\\"\".concat(name, \"\\\" name\"));\n  }\n\n  return getItem(name);\n}\n/**\n * Register validator under its alias.\n *\n * @param {string|Function} name Validator's alias or validator function with its descriptor.\n * @param {Function} [validator] Validator function.\n */\n\n\nfunction _register(name, validator) {\n  if (typeof name !== 'string') {\n    validator = name;\n    name = validator.VALIDATOR_TYPE;\n  }\n\n  register(name, validator);\n}\n\nexport { _register as registerValidator, _getItem as getValidator, hasItem as hasValidator, getNames as getRegisteredValidatorNames, getValues as getRegisteredValidators };", "function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport { addClass, clearTextSelection, empty, fastInnerHTML, fastInnerText, getScrollbarWidth, hasClass, isChildOf, isInput, isOutsideInput } from \"./helpers/dom/element.mjs\";\nimport EventManager from \"./eventManager.mjs\";\nimport { isImmediatePropagationStopped, isRightClick, isLeftClick } from \"./helpers/dom/event.mjs\";\nimport Walkontable, { CellCoords } from \"./3rdparty/walkontable/src/index.mjs\";\nimport { handleMouseEvent } from \"./selection/mouseEventHandler.mjs\";\nimport { isRootInstance } from \"./utils/rootInstance.mjs\";\nvar privatePool = new WeakMap();\n/**\n * @class TableView\n * @private\n */\n\nvar TableView = /*#__PURE__*/function () {\n  /**\n   * @param {Hanstontable} instance Instance of {@link Handsontable}.\n   */\n  function TableView(instance) {\n    _classCallCheck(this, TableView);\n\n    /**\n     * Instance of {@link Handsontable}.\n     *\n     * @private\n     * @type {Handsontable}\n     */\n    this.instance = instance;\n    /**\n     * Instance of {@link EventManager}.\n     *\n     * @private\n     * @type {EventManager}\n     */\n\n    this.eventManager = new EventManager(instance);\n    /**\n     * Current Handsontable's GridSettings object.\n     *\n     * @private\n     * @type {GridSettings}\n     */\n\n    this.settings = instance.getSettings();\n    /**\n     * Main <THEAD> element.\n     *\n     * @type {HTMLTableSectionElement}\n     */\n\n    this.THEAD = void 0;\n    /**\n     * Main <TBODY> element.\n     *\n     * @type {HTMLTableSectionElement}\n     */\n\n    this.TBODY = void 0;\n    /**\n     * Main Walkontable instance.\n     *\n     * @type {Walkontable}\n     */\n\n    this.wt = void 0;\n    /**\n     * Main Walkontable instance.\n     *\n     * @private\n     * @type {Walkontable}\n     */\n\n    this.activeWt = void 0;\n    /**\n     * The flag determines if the `adjustElementsSize` method call was made during\n     * the render suspending. If true, the method has to be triggered once after render\n     * resuming.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    this.postponedAdjustElementsSize = false;\n    privatePool.set(this, {\n      /**\n       * Defines if the text should be selected during mousemove.\n       *\n       * @private\n       * @type {boolean}\n       */\n      selectionMouseDown: false,\n\n      /**\n       * @private\n       * @type {boolean}\n       */\n      mouseDown: void 0,\n\n      /**\n       * Main <TABLE> element.\n       *\n       * @private\n       * @type {HTMLTableElement}\n       */\n      table: void 0,\n\n      /**\n       * Cached width of the rootElement.\n       *\n       * @type {number}\n       */\n      lastWidth: 0,\n\n      /**\n       * Cached height of the rootElement.\n       *\n       * @type {number}\n       */\n      lastHeight: 0\n    });\n    this.createElements();\n    this.registerEvents();\n    this.initializeWalkontable();\n  }\n  /**\n   * Renders WalkontableUI.\n   */\n\n\n  _createClass(TableView, [{\n    key: \"render\",\n    value: function render() {\n      if (!this.instance.isRenderSuspended()) {\n        this.instance.runHooks('beforeRender', this.instance.forceFullRender);\n\n        if (this.postponedAdjustElementsSize) {\n          this.postponedAdjustElementsSize = false;\n          this.adjustElementsSize(true);\n        }\n\n        this.wt.draw(!this.instance.forceFullRender);\n        this.instance.runHooks('afterRender', this.instance.forceFullRender);\n        this.instance.forceFullRender = false;\n        this.instance.renderCall = false;\n      }\n    }\n    /**\n     * Adjust overlays elements size and master table size.\n     *\n     * @param {boolean} [force=false] When `true`, it adjust the DOM nodes sizes for all overlays.\n     */\n\n  }, {\n    key: \"adjustElementsSize\",\n    value: function adjustElementsSize() {\n      var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (this.instance.isRenderSuspended()) {\n        this.postponedAdjustElementsSize = true;\n      } else {\n        this.wt.wtOverlays.adjustElementsSize(force);\n      }\n    }\n    /**\n     * Returns td object given coordinates.\n     *\n     * @param {CellCoords} coords Renderable cell coordinates.\n     * @param {boolean} topmost Indicates whether the cell should be calculated from the topmost.\n     * @returns {HTMLTableCellElement|null}\n     */\n\n  }, {\n    key: \"getCellAtCoords\",\n    value: function getCellAtCoords(coords, topmost) {\n      var td = this.wt.getCell(coords, topmost);\n\n      if (td < 0) {\n        // there was an exit code (cell is out of bounds)\n        return null;\n      }\n\n      return td;\n    }\n    /**\n     * Scroll viewport to a cell.\n     *\n     * @param {CellCoords} coords Renderable cell coordinates.\n     * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n     * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right side of the table.\n     * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom side of the table.\n     * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left side of the table.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"scrollViewport\",\n    value: function scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n      return this.wt.scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft);\n    }\n    /**\n     * Scroll viewport to a column.\n     *\n     * @param {number} column Renderable column index.\n     * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right side of the table.\n     * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left side of the table.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"scrollViewportHorizontally\",\n    value: function scrollViewportHorizontally(column, snapToRight, snapToLeft) {\n      return this.wt.scrollViewportHorizontally(column, snapToRight, snapToLeft);\n    }\n    /**\n     * Scroll viewport to a row.\n     *\n     * @param {number} row Renderable row index.\n     * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n     * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom side of the table.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"scrollViewportVertically\",\n    value: function scrollViewportVertically(row, snapToTop, snapToBottom) {\n      return this.wt.scrollViewportVertically(row, snapToTop, snapToBottom);\n    }\n    /**\n     * Prepares DOMElements and adds correct className to the root element.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"createElements\",\n    value: function createElements() {\n      var priv = privatePool.get(this);\n      var _this$instance = this.instance,\n          rootElement = _this$instance.rootElement,\n          rootDocument = _this$instance.rootDocument;\n      var originalStyle = rootElement.getAttribute('style');\n\n      if (originalStyle) {\n        rootElement.setAttribute('data-originalstyle', originalStyle); // needed to retrieve original style in jsFiddle link generator in HT examples. may be removed in future versions\n      }\n\n      addClass(rootElement, 'handsontable');\n      priv.table = rootDocument.createElement('TABLE');\n      addClass(priv.table, 'htCore');\n\n      if (this.instance.getSettings().tableClassName) {\n        addClass(priv.table, this.instance.getSettings().tableClassName);\n      }\n\n      this.THEAD = rootDocument.createElement('THEAD');\n      priv.table.appendChild(this.THEAD);\n      this.TBODY = rootDocument.createElement('TBODY');\n      priv.table.appendChild(this.TBODY);\n      this.instance.table = priv.table;\n      this.instance.container.insertBefore(priv.table, this.instance.container.firstChild);\n    }\n    /**\n     * Attaches necessary listeners.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"registerEvents\",\n    value: function registerEvents() {\n      var _this = this;\n\n      var priv = privatePool.get(this);\n      var _this$instance2 = this.instance,\n          rootElement = _this$instance2.rootElement,\n          rootDocument = _this$instance2.rootDocument,\n          selection = _this$instance2.selection;\n      var documentElement = rootDocument.documentElement;\n      this.eventManager.addEventListener(rootElement, 'mousedown', function (event) {\n        priv.selectionMouseDown = true;\n\n        if (!_this.isTextSelectionAllowed(event.target)) {\n          var rootWindow = _this.instance.rootWindow;\n          clearTextSelection(rootWindow);\n          event.preventDefault();\n          rootWindow.focus(); // make sure that window that contains HOT is active. Important when HOT is in iframe.\n        }\n      });\n      this.eventManager.addEventListener(rootElement, 'mouseup', function () {\n        priv.selectionMouseDown = false;\n      });\n      this.eventManager.addEventListener(rootElement, 'mousemove', function (event) {\n        if (priv.selectionMouseDown && !_this.isTextSelectionAllowed(event.target)) {\n          // Clear selection only when fragmentSelection is enabled, otherwise clearing selection breakes the IME editor.\n          if (_this.settings.fragmentSelection) {\n            clearTextSelection(_this.instance.rootWindow);\n          }\n\n          event.preventDefault();\n        }\n      });\n      this.eventManager.addEventListener(documentElement, 'keyup', function (event) {\n        if (selection.isInProgress() && !event.shiftKey) {\n          selection.finish();\n        }\n      });\n      this.eventManager.addEventListener(documentElement, 'mouseup', function (event) {\n        if (selection.isInProgress() && isLeftClick(event)) {\n          // is left mouse button\n          selection.finish();\n        }\n\n        priv.mouseDown = false;\n\n        if (isOutsideInput(rootDocument.activeElement) || !selection.isSelected() && !selection.isSelectedByAnyHeader() && !rootElement.contains(event.target) && !isRightClick(event)) {\n          _this.instance.unlisten();\n        }\n      });\n      this.eventManager.addEventListener(documentElement, 'contextmenu', function (event) {\n        if (selection.isInProgress() && isRightClick(event)) {\n          selection.finish();\n          priv.mouseDown = false;\n        }\n      });\n      this.eventManager.addEventListener(documentElement, 'touchend', function () {\n        if (selection.isInProgress()) {\n          selection.finish();\n        }\n\n        priv.mouseDown = false;\n      });\n      this.eventManager.addEventListener(documentElement, 'mousedown', function (event) {\n        var originalTarget = event.target;\n        var eventX = event.x || event.clientX;\n        var eventY = event.y || event.clientY;\n        var next = event.target;\n\n        if (priv.mouseDown || !rootElement || !_this.instance.view) {\n          return; // it must have been started in a cell\n        } // immediate click on \"holder\" means click on the right side of vertical scrollbar\n\n\n        var holder = _this.instance.view.wt.wtTable.holder;\n\n        if (next === holder) {\n          var scrollbarWidth = getScrollbarWidth(rootDocument);\n\n          if (rootDocument.elementFromPoint(eventX + scrollbarWidth, eventY) !== holder || rootDocument.elementFromPoint(eventX, eventY + scrollbarWidth) !== holder) {\n            return;\n          }\n        } else {\n          while (next !== documentElement) {\n            if (next === null) {\n              if (event.isTargetWebComponent) {\n                break;\n              } // click on something that was a row but now is detached (possibly because your click triggered a rerender)\n\n\n              return;\n            }\n\n            if (next === rootElement) {\n              // click inside container\n              return;\n            }\n\n            next = next.parentNode;\n          }\n        } // function did not return until here, we have an outside click!\n\n\n        var outsideClickDeselects = typeof _this.settings.outsideClickDeselects === 'function' ? _this.settings.outsideClickDeselects(originalTarget) : _this.settings.outsideClickDeselects;\n\n        if (outsideClickDeselects) {\n          _this.instance.deselectCell();\n        } else {\n          _this.instance.destroyEditor(false, false);\n        }\n      });\n      this.eventManager.addEventListener(priv.table, 'selectstart', function (event) {\n        if (_this.settings.fragmentSelection || isInput(event.target)) {\n          return;\n        } // https://github.com/handsontable/handsontable/issues/160\n        // Prevent text from being selected when performing drag down.\n\n\n        event.preventDefault();\n      });\n    }\n    /**\n     * Translate renderable cell coordinates to visual coordinates.\n     *\n     * @param {CellCoords} coords The cell coordinates.\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"translateFromRenderableToVisualCoords\",\n    value: function translateFromRenderableToVisualCoords(_ref) {\n      var row = _ref.row,\n          col = _ref.col;\n      // TODO: To consider an idea to reusing the CellCoords instance instead creating new one.\n      return _construct(CellCoords, _toConsumableArray(this.translateFromRenderableToVisualIndex(row, col)));\n    }\n    /**\n     * Translate renderable row and column indexes to visual row and column indexes.\n     *\n     * @param {number} renderableRow Renderable row index.\n     * @param {number} renderableColumn Renderable columnIndex.\n     * @returns {number[]}\n     */\n\n  }, {\n    key: \"translateFromRenderableToVisualIndex\",\n    value: function translateFromRenderableToVisualIndex(renderableRow, renderableColumn) {\n      // TODO: Some helper may be needed.\n      // We perform translation for indexes (without headers).\n      var visualRow = renderableRow >= 0 ? this.instance.rowIndexMapper.getVisualFromRenderableIndex(renderableRow) : renderableRow;\n      var visualColumn = renderableColumn >= 0 ? this.instance.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn) : renderableColumn;\n\n      if (visualRow === null) {\n        visualRow = renderableRow;\n      }\n\n      if (visualColumn === null) {\n        visualColumn = renderableColumn;\n      }\n\n      return [visualRow, visualColumn];\n    }\n    /**\n     * Returns the number of renderable indexes.\n     *\n     * @private\n     * @param {IndexMapper} indexMapper The IndexMapper instance for specific axis.\n     * @param {number} maxElements Maximum number of elements (rows or columns).\n     *\n     * @returns {number|*}\n     */\n\n  }, {\n    key: \"countRenderableIndexes\",\n    value: function countRenderableIndexes(indexMapper, maxElements) {\n      var consideredElements = Math.min(indexMapper.getNotTrimmedIndexesLength(), maxElements); // Don't take hidden indexes into account. We are looking just for renderable indexes.\n\n      var firstNotHiddenIndex = indexMapper.getFirstNotHiddenIndex(consideredElements - 1, -1); // There are no renderable indexes.\n\n      if (firstNotHiddenIndex === null) {\n        return 0;\n      }\n\n      return indexMapper.getRenderableFromVisualIndex(firstNotHiddenIndex) + 1;\n    }\n    /**\n     * Returns the number of renderable columns.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"countRenderableColumns\",\n    value: function countRenderableColumns() {\n      return this.countRenderableIndexes(this.instance.columnIndexMapper, this.settings.maxCols);\n    }\n    /**\n     * Returns the number of renderable rows.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"countRenderableRows\",\n    value: function countRenderableRows() {\n      return this.countRenderableIndexes(this.instance.rowIndexMapper, this.settings.maxRows);\n    }\n    /**\n     * Returns number of not hidden row indexes counting from the passed starting index.\n     * The counting direction can be controlled by `incrementBy` argument.\n     *\n     * @param {number} visualIndex The visual index from which the counting begins.\n     * @param {number} incrementBy If `-1` then counting is backwards or forward when `1`.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"countNotHiddenRowIndexes\",\n    value: function countNotHiddenRowIndexes(visualIndex, incrementBy) {\n      return this.countNotHiddenIndexes(visualIndex, incrementBy, this.instance.rowIndexMapper, this.countRenderableRows());\n    }\n    /**\n     * Returns number of not hidden column indexes counting from the passed starting index.\n     * The counting direction can be controlled by `incrementBy` argument.\n     *\n     * @param {number} visualIndex The visual index from which the counting begins.\n     * @param {number} incrementBy If `-1` then counting is backwards or forward when `1`.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"countNotHiddenColumnIndexes\",\n    value: function countNotHiddenColumnIndexes(visualIndex, incrementBy) {\n      return this.countNotHiddenIndexes(visualIndex, incrementBy, this.instance.columnIndexMapper, this.countRenderableColumns());\n    }\n    /**\n     * Returns number of not hidden indexes counting from the passed starting index.\n     * The counting direction can be controlled by `incrementBy` argument.\n     *\n     * @param {number} visualIndex The visual index from which the counting begins.\n     * @param {number} incrementBy If `-1` then counting is backwards or forward when `1`.\n     * @param {IndexMapper} indexMapper The IndexMapper instance for specific axis.\n     * @param {number} renderableIndexesCount Total count of renderable indexes for specific axis.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"countNotHiddenIndexes\",\n    value: function countNotHiddenIndexes(visualIndex, incrementBy, indexMapper, renderableIndexesCount) {\n      if (isNaN(visualIndex) || visualIndex < 0) {\n        return 0;\n      }\n\n      var firstVisibleIndex = indexMapper.getFirstNotHiddenIndex(visualIndex, incrementBy);\n      var renderableIndex = indexMapper.getRenderableFromVisualIndex(firstVisibleIndex);\n\n      if (!Number.isInteger(renderableIndex)) {\n        return 0;\n      }\n\n      var notHiddenIndexes = 0;\n\n      if (incrementBy < 0) {\n        // Zero-based numbering for renderable indexes corresponds to a number of not hidden indexes.\n        notHiddenIndexes = renderableIndex + 1;\n      } else if (incrementBy > 0) {\n        notHiddenIndexes = renderableIndexesCount - renderableIndex;\n      }\n\n      return notHiddenIndexes;\n    }\n    /**\n     * Defines default configuration and initializes WalkOnTable intance.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"initializeWalkontable\",\n    value: function initializeWalkontable() {\n      var _this2 = this;\n\n      var priv = privatePool.get(this);\n      var walkontableConfig = {\n        externalRowCalculator: this.instance.getPlugin('autoRowSize') && this.instance.getPlugin('autoRowSize').isEnabled(),\n        table: priv.table,\n        isDataViewInstance: function isDataViewInstance() {\n          return isRootInstance(_this2.instance);\n        },\n        preventOverflow: function preventOverflow() {\n          return _this2.settings.preventOverflow;\n        },\n        preventWheel: function preventWheel() {\n          return _this2.settings.preventWheel;\n        },\n        stretchH: function stretchH() {\n          return _this2.settings.stretchH;\n        },\n        data: function data(renderableRow, renderableColumn) {\n          var _this2$instance;\n\n          return (_this2$instance = _this2.instance).getDataAtCell.apply(_this2$instance, _toConsumableArray(_this2.translateFromRenderableToVisualIndex(renderableRow, renderableColumn)));\n        },\n        totalRows: function totalRows() {\n          return _this2.countRenderableRows();\n        },\n        totalColumns: function totalColumns() {\n          return _this2.countRenderableColumns();\n        },\n        // Number of renderable columns for the left overlay.\n        fixedColumnsLeft: function fixedColumnsLeft() {\n          var countCols = _this2.instance.countCols();\n\n          var visualFixedColumnsLeft = Math.min(parseInt(_this2.settings.fixedColumnsLeft, 10), countCols) - 1;\n          return _this2.countNotHiddenColumnIndexes(visualFixedColumnsLeft, -1);\n        },\n        // Number of renderable rows for the top overlay.\n        fixedRowsTop: function fixedRowsTop() {\n          var countRows = _this2.instance.countRows();\n\n          var visualFixedRowsTop = Math.min(parseInt(_this2.settings.fixedRowsTop, 10), countRows) - 1;\n          return _this2.countNotHiddenRowIndexes(visualFixedRowsTop, -1);\n        },\n        // Number of renderable rows for the bottom overlay.\n        fixedRowsBottom: function fixedRowsBottom() {\n          var countRows = _this2.instance.countRows();\n\n          var visualFixedRowsBottom = Math.max(countRows - parseInt(_this2.settings.fixedRowsBottom, 10), 0);\n          return _this2.countNotHiddenRowIndexes(visualFixedRowsBottom, 1);\n        },\n        // Enable the left overlay when conditions are met.\n        shouldRenderLeftOverlay: function shouldRenderLeftOverlay() {\n          return _this2.settings.fixedColumnsLeft > 0 || walkontableConfig.rowHeaders().length > 0;\n        },\n        // Enable the top overlay when conditions are met.\n        shouldRenderTopOverlay: function shouldRenderTopOverlay() {\n          return _this2.settings.fixedRowsTop > 0 || walkontableConfig.columnHeaders().length > 0;\n        },\n        // Enable the bottom overlay when conditions are met.\n        shouldRenderBottomOverlay: function shouldRenderBottomOverlay() {\n          return _this2.settings.fixedRowsBottom > 0;\n        },\n        minSpareRows: function minSpareRows() {\n          return _this2.settings.minSpareRows;\n        },\n        renderAllRows: this.settings.renderAllRows,\n        rowHeaders: function rowHeaders() {\n          var headerRenderers = [];\n\n          if (_this2.instance.hasRowHeaders()) {\n            headerRenderers.push(function (renderableRowIndex, TH) {\n              // TODO: Some helper may be needed.\n              // We perform translation for row indexes (without row headers).\n              var visualRowIndex = renderableRowIndex >= 0 ? _this2.instance.rowIndexMapper.getVisualFromRenderableIndex(renderableRowIndex) : renderableRowIndex;\n\n              _this2.appendRowHeader(visualRowIndex, TH);\n            });\n          }\n\n          _this2.instance.runHooks('afterGetRowHeaderRenderers', headerRenderers);\n\n          return headerRenderers;\n        },\n        columnHeaders: function columnHeaders() {\n          var headerRenderers = [];\n\n          if (_this2.instance.hasColHeaders()) {\n            headerRenderers.push(function (renderedColumnIndex, TH) {\n              // TODO: Some helper may be needed.\n              // We perform translation for columns indexes (without column headers).\n              var visualColumnsIndex = renderedColumnIndex >= 0 ? _this2.instance.columnIndexMapper.getVisualFromRenderableIndex(renderedColumnIndex) : renderedColumnIndex;\n\n              _this2.appendColHeader(visualColumnsIndex, TH);\n            });\n          }\n\n          _this2.instance.runHooks('afterGetColumnHeaderRenderers', headerRenderers);\n\n          return headerRenderers;\n        },\n        columnWidth: function columnWidth(renderedColumnIndex) {\n          var visualIndex = _this2.instance.columnIndexMapper.getVisualFromRenderableIndex(renderedColumnIndex); // It's not a bug that we can't find visual index for some handled by method indexes. The function is called also\n          // for not displayed indexes (beyond the table boundaries), i.e. when `fixedColumnsLeft` > `startCols` (wrong config?) or\n          // scrolling and dataset is empty (scroll should handle that?).\n\n\n          return _this2.instance.getColWidth(visualIndex === null ? renderedColumnIndex : visualIndex);\n        },\n        rowHeight: function rowHeight(renderedRowIndex) {\n          var visualIndex = _this2.instance.rowIndexMapper.getVisualFromRenderableIndex(renderedRowIndex);\n\n          return _this2.instance.getRowHeight(visualIndex === null ? renderedRowIndex : visualIndex);\n        },\n        cellRenderer: function cellRenderer(renderedRowIndex, renderedColumnIndex, TD) {\n          var _this2$translateFromR = _this2.translateFromRenderableToVisualIndex(renderedRowIndex, renderedColumnIndex),\n              _this2$translateFromR2 = _slicedToArray(_this2$translateFromR, 2),\n              visualRowIndex = _this2$translateFromR2[0],\n              visualColumnIndex = _this2$translateFromR2[1]; // Coords may be modified. For example, by the `MergeCells` plugin. It should affect cell value and cell meta.\n\n\n          var modifiedCellCoords = _this2.instance.runHooks('modifyGetCellCoords', visualRowIndex, visualColumnIndex);\n\n          var visualRowToCheck = visualRowIndex;\n          var visualColumnToCheck = visualColumnIndex;\n\n          if (Array.isArray(modifiedCellCoords)) {\n            var _modifiedCellCoords = _slicedToArray(modifiedCellCoords, 2);\n\n            visualRowToCheck = _modifiedCellCoords[0];\n            visualColumnToCheck = _modifiedCellCoords[1];\n          }\n\n          var cellProperties = _this2.instance.getCellMeta(visualRowToCheck, visualColumnToCheck);\n\n          var prop = _this2.instance.colToProp(visualColumnToCheck);\n\n          var value = _this2.instance.getDataAtRowProp(visualRowToCheck, prop);\n\n          if (_this2.instance.hasHook('beforeValueRender')) {\n            value = _this2.instance.runHooks('beforeValueRender', value, cellProperties);\n          }\n\n          _this2.instance.runHooks('beforeRenderer', TD, visualRowIndex, visualColumnIndex, prop, value, cellProperties);\n\n          _this2.instance.getCellRenderer(cellProperties)(_this2.instance, TD, visualRowIndex, visualColumnIndex, prop, value, cellProperties);\n\n          _this2.instance.runHooks('afterRenderer', TD, visualRowIndex, visualColumnIndex, prop, value, cellProperties);\n        },\n        selections: this.instance.selection.highlight,\n        hideBorderOnMouseDownOver: function hideBorderOnMouseDownOver() {\n          return _this2.settings.fragmentSelection;\n        },\n        onWindowResize: function onWindowResize() {\n          if (!_this2.instance || _this2.instance.isDestroyed) {\n            return;\n          }\n\n          _this2.instance.refreshDimensions();\n        },\n        onCellMouseDown: function onCellMouseDown(event, coords, TD, wt) {\n          var visualCoords = _this2.translateFromRenderableToVisualCoords(coords);\n\n          var controller = {\n            row: false,\n            column: false,\n            cell: false\n          };\n\n          _this2.instance.listen();\n\n          _this2.activeWt = wt;\n          priv.mouseDown = true;\n\n          _this2.instance.runHooks('beforeOnCellMouseDown', event, visualCoords, TD, controller);\n\n          if (isImmediatePropagationStopped(event)) {\n            return;\n          }\n\n          handleMouseEvent(event, {\n            coords: visualCoords,\n            selection: _this2.instance.selection,\n            controller: controller\n          });\n\n          _this2.instance.runHooks('afterOnCellMouseDown', event, visualCoords, TD);\n\n          _this2.activeWt = _this2.wt;\n        },\n        onCellContextMenu: function onCellContextMenu(event, coords, TD, wt) {\n          var visualCoords = _this2.translateFromRenderableToVisualCoords(coords);\n\n          _this2.activeWt = wt;\n          priv.mouseDown = false;\n\n          if (_this2.instance.selection.isInProgress()) {\n            _this2.instance.selection.finish();\n          }\n\n          _this2.instance.runHooks('beforeOnCellContextMenu', event, visualCoords, TD);\n\n          if (isImmediatePropagationStopped(event)) {\n            return;\n          }\n\n          _this2.instance.runHooks('afterOnCellContextMenu', event, visualCoords, TD);\n\n          _this2.activeWt = _this2.wt;\n        },\n        onCellMouseOut: function onCellMouseOut(event, coords, TD, wt) {\n          var visualCoords = _this2.translateFromRenderableToVisualCoords(coords);\n\n          _this2.activeWt = wt;\n\n          _this2.instance.runHooks('beforeOnCellMouseOut', event, visualCoords, TD);\n\n          if (isImmediatePropagationStopped(event)) {\n            return;\n          }\n\n          _this2.instance.runHooks('afterOnCellMouseOut', event, visualCoords, TD);\n\n          _this2.activeWt = _this2.wt;\n        },\n        onCellMouseOver: function onCellMouseOver(event, coords, TD, wt) {\n          var visualCoords = _this2.translateFromRenderableToVisualCoords(coords);\n\n          var controller = {\n            row: false,\n            column: false,\n            cell: false\n          };\n          _this2.activeWt = wt;\n\n          _this2.instance.runHooks('beforeOnCellMouseOver', event, visualCoords, TD, controller);\n\n          if (isImmediatePropagationStopped(event)) {\n            return;\n          }\n\n          if (priv.mouseDown) {\n            handleMouseEvent(event, {\n              coords: visualCoords,\n              selection: _this2.instance.selection,\n              controller: controller\n            });\n          }\n\n          _this2.instance.runHooks('afterOnCellMouseOver', event, visualCoords, TD);\n\n          _this2.activeWt = _this2.wt;\n        },\n        onCellMouseUp: function onCellMouseUp(event, coords, TD, wt) {\n          var visualCoords = _this2.translateFromRenderableToVisualCoords(coords);\n\n          _this2.activeWt = wt;\n\n          _this2.instance.runHooks('beforeOnCellMouseUp', event, visualCoords, TD); // TODO: The second condition check is a workaround. Callback corresponding the method `updateSettings`\n          // disable plugin and enable it again. Disabling plugin closes the menu. Thus, calling the\n          // `updateSettings` in a body of any callback executed right after some context-menu action\n          // breaks the table (#7231).\n\n\n          if (isImmediatePropagationStopped(event) || _this2.instance.isDestroyed) {\n            return;\n          }\n\n          _this2.instance.runHooks('afterOnCellMouseUp', event, visualCoords, TD);\n\n          _this2.activeWt = _this2.wt;\n        },\n        onCellCornerMouseDown: function onCellCornerMouseDown(event) {\n          event.preventDefault();\n\n          _this2.instance.runHooks('afterOnCellCornerMouseDown', event);\n        },\n        onCellCornerDblClick: function onCellCornerDblClick(event) {\n          event.preventDefault();\n\n          _this2.instance.runHooks('afterOnCellCornerDblClick', event);\n        },\n        beforeDraw: function beforeDraw(force, skipRender) {\n          return _this2.beforeRender(force, skipRender);\n        },\n        onDraw: function onDraw(force) {\n          return _this2.afterRender(force);\n        },\n        onScrollVertically: function onScrollVertically() {\n          return _this2.instance.runHooks('afterScrollVertically');\n        },\n        onScrollHorizontally: function onScrollHorizontally() {\n          return _this2.instance.runHooks('afterScrollHorizontally');\n        },\n        onBeforeRemoveCellClassNames: function onBeforeRemoveCellClassNames() {\n          return _this2.instance.runHooks('beforeRemoveCellClassNames');\n        },\n        onBeforeHighlightingRowHeader: function onBeforeHighlightingRowHeader(renderableRow, headerLevel, highlightMeta) {\n          var rowMapper = _this2.instance.rowIndexMapper;\n          var visualRow = rowMapper.getVisualFromRenderableIndex(renderableRow);\n\n          var newVisualRow = _this2.instance.runHooks('beforeHighlightingRowHeader', visualRow, headerLevel, highlightMeta);\n\n          return rowMapper.getRenderableFromVisualIndex(rowMapper.getFirstNotHiddenIndex(newVisualRow, 1));\n        },\n        onBeforeHighlightingColumnHeader: function onBeforeHighlightingColumnHeader(renderableColumn, headerLevel, highlightMeta) {\n          var columnMapper = _this2.instance.columnIndexMapper;\n          var visualColumn = columnMapper.getVisualFromRenderableIndex(renderableColumn);\n\n          var newVisualColumn = _this2.instance.runHooks('beforeHighlightingColumnHeader', visualColumn, headerLevel, highlightMeta);\n\n          return columnMapper.getRenderableFromVisualIndex(columnMapper.getFirstNotHiddenIndex(newVisualColumn, 1));\n        },\n        onAfterDrawSelection: function onAfterDrawSelection(currentRow, currentColumn, layerLevel) {\n          var cornersOfSelection;\n\n          var _this2$translateFromR3 = _this2.translateFromRenderableToVisualIndex(currentRow, currentColumn),\n              _this2$translateFromR4 = _slicedToArray(_this2$translateFromR3, 2),\n              visualRowIndex = _this2$translateFromR4[0],\n              visualColumnIndex = _this2$translateFromR4[1];\n\n          var selectedRange = _this2.instance.selection.getSelectedRange();\n\n          var selectionRangeSize = selectedRange.size();\n\n          if (selectionRangeSize > 0) {\n            // Selection layers are stored from the \"oldest\" to the \"newest\". We should calculate the offset.\n            // Please look at the `SelectedRange` class and it's method for getting selection's layer for more information.\n            var selectionOffset = (layerLevel !== null && layerLevel !== void 0 ? layerLevel : 0) + 1 - selectionRangeSize;\n            var selectionForLayer = selectedRange.peekByIndex(selectionOffset);\n            cornersOfSelection = [selectionForLayer.from.row, selectionForLayer.from.col, selectionForLayer.to.row, selectionForLayer.to.col];\n          }\n\n          return _this2.instance.runHooks('afterDrawSelection', visualRowIndex, visualColumnIndex, cornersOfSelection, layerLevel);\n        },\n        onBeforeDrawBorders: function onBeforeDrawBorders(corners, borderClassName) {\n          var _corners = _slicedToArray(corners, 4),\n              startRenderableRow = _corners[0],\n              startRenderableColumn = _corners[1],\n              endRenderableRow = _corners[2],\n              endRenderableColumn = _corners[3];\n\n          var visualCorners = [_this2.instance.rowIndexMapper.getVisualFromRenderableIndex(startRenderableRow), _this2.instance.columnIndexMapper.getVisualFromRenderableIndex(startRenderableColumn), _this2.instance.rowIndexMapper.getVisualFromRenderableIndex(endRenderableRow), _this2.instance.columnIndexMapper.getVisualFromRenderableIndex(endRenderableColumn)];\n          return _this2.instance.runHooks('beforeDrawBorders', visualCorners, borderClassName);\n        },\n        onBeforeTouchScroll: function onBeforeTouchScroll() {\n          return _this2.instance.runHooks('beforeTouchScroll');\n        },\n        onAfterMomentumScroll: function onAfterMomentumScroll() {\n          return _this2.instance.runHooks('afterMomentumScroll');\n        },\n        onBeforeStretchingColumnWidth: function onBeforeStretchingColumnWidth(stretchedWidth, renderedColumnIndex) {\n          var visualColumnIndex = _this2.instance.columnIndexMapper.getVisualFromRenderableIndex(renderedColumnIndex);\n\n          return _this2.instance.runHooks('beforeStretchingColumnWidth', stretchedWidth, visualColumnIndex);\n        },\n        onModifyRowHeaderWidth: function onModifyRowHeaderWidth(rowHeaderWidth) {\n          return _this2.instance.runHooks('modifyRowHeaderWidth', rowHeaderWidth);\n        },\n        onModifyGetCellCoords: function onModifyGetCellCoords(renderableRowIndex, renderableColumnIndex, topmost) {\n          var rowMapper = _this2.instance.rowIndexMapper;\n          var columnMapper = _this2.instance.columnIndexMapper; // Callback handle also headers. We shouldn't translate them.\n\n          var visualColumnIndex = renderableColumnIndex >= 0 ? columnMapper.getVisualFromRenderableIndex(renderableColumnIndex) : renderableColumnIndex;\n          var visualRowIndex = renderableRowIndex >= 0 ? rowMapper.getVisualFromRenderableIndex(renderableRowIndex) : renderableRowIndex;\n\n          var visualIndexes = _this2.instance.runHooks('modifyGetCellCoords', visualRowIndex, visualColumnIndex, topmost);\n\n          if (Array.isArray(visualIndexes)) {\n            var _visualIndexes = _slicedToArray(visualIndexes, 4),\n                visualRowFrom = _visualIndexes[0],\n                visualColumnFrom = _visualIndexes[1],\n                visualRowTo = _visualIndexes[2],\n                visualColumnTo = _visualIndexes[3]; // Result of the hook is handled by the Walkontable (renderable indexes).\n\n\n            return [visualRowFrom >= 0 ? rowMapper.getRenderableFromVisualIndex(rowMapper.getFirstNotHiddenIndex(visualRowFrom, 1)) : visualRowFrom, visualColumnFrom >= 0 ? columnMapper.getRenderableFromVisualIndex(columnMapper.getFirstNotHiddenIndex(visualColumnFrom, 1)) : visualColumnFrom, visualRowTo >= 0 ? rowMapper.getRenderableFromVisualIndex(rowMapper.getFirstNotHiddenIndex(visualRowTo, -1)) : visualRowTo, visualColumnTo >= 0 ? columnMapper.getRenderableFromVisualIndex(columnMapper.getFirstNotHiddenIndex(visualColumnTo, -1)) : visualColumnTo];\n          }\n        },\n        viewportRowCalculatorOverride: function viewportRowCalculatorOverride(calc) {\n          var viewportOffset = _this2.settings.viewportRowRenderingOffset;\n\n          if (viewportOffset === 'auto' && _this2.settings.fixedRowsTop) {\n            viewportOffset = 10;\n          }\n\n          if (viewportOffset > 0 || viewportOffset === 'auto') {\n            var renderableRows = _this2.countRenderableRows();\n\n            var firstRenderedRow = calc.startRow;\n            var lastRenderedRow = calc.endRow;\n\n            if (typeof viewportOffset === 'number') {\n              calc.startRow = Math.max(firstRenderedRow - viewportOffset, 0);\n              calc.endRow = Math.min(lastRenderedRow + viewportOffset, renderableRows - 1);\n            } else if (viewportOffset === 'auto') {\n              var offset = Math.ceil(lastRenderedRow / renderableRows * 12);\n              calc.startRow = Math.max(firstRenderedRow - offset, 0);\n              calc.endRow = Math.min(lastRenderedRow + offset, renderableRows - 1);\n            }\n          }\n\n          _this2.instance.runHooks('afterViewportRowCalculatorOverride', calc);\n        },\n        viewportColumnCalculatorOverride: function viewportColumnCalculatorOverride(calc) {\n          var viewportOffset = _this2.settings.viewportColumnRenderingOffset;\n\n          if (viewportOffset === 'auto' && _this2.settings.fixedColumnsLeft) {\n            viewportOffset = 10;\n          }\n\n          if (viewportOffset > 0 || viewportOffset === 'auto') {\n            var renderableColumns = _this2.countRenderableColumns();\n\n            var firstRenderedColumn = calc.startColumn;\n            var lastRenderedColumn = calc.endColumn;\n\n            if (typeof viewportOffset === 'number') {\n              calc.startColumn = Math.max(firstRenderedColumn - viewportOffset, 0);\n              calc.endColumn = Math.min(lastRenderedColumn + viewportOffset, renderableColumns - 1);\n            }\n\n            if (viewportOffset === 'auto') {\n              var offset = Math.ceil(lastRenderedColumn / renderableColumns * 6);\n              calc.startColumn = Math.max(firstRenderedColumn - offset, 0);\n              calc.endColumn = Math.min(lastRenderedColumn + offset, renderableColumns - 1);\n            }\n          }\n\n          _this2.instance.runHooks('afterViewportColumnCalculatorOverride', calc);\n        },\n        rowHeaderWidth: function rowHeaderWidth() {\n          return _this2.settings.rowHeaderWidth;\n        },\n        columnHeaderHeight: function columnHeaderHeight() {\n          var columnHeaderHeight = _this2.instance.runHooks('modifyColumnHeaderHeight');\n\n          return _this2.settings.columnHeaderHeight || columnHeaderHeight;\n        }\n      };\n      this.instance.runHooks('beforeInitWalkontable', walkontableConfig);\n      this.wt = new Walkontable(walkontableConfig);\n      this.activeWt = this.wt;\n      var spreader = this.wt.wtTable.spreader; // We have to cache width and height after Walkontable initialization.\n\n      var _this$instance$rootEl = this.instance.rootElement.getBoundingClientRect(),\n          width = _this$instance$rootEl.width,\n          height = _this$instance$rootEl.height;\n\n      this.setLastSize(width, height);\n      this.eventManager.addEventListener(spreader, 'mousedown', function (event) {\n        // right mouse button exactly on spreader means right click on the right hand side of vertical scrollbar\n        if (event.target === spreader && event.which === 3) {\n          event.stopPropagation();\n        }\n      });\n      this.eventManager.addEventListener(spreader, 'contextmenu', function (event) {\n        // right mouse button exactly on spreader means right click on the right hand side of vertical scrollbar\n        if (event.target === spreader && event.which === 3) {\n          event.stopPropagation();\n        }\n      });\n      this.eventManager.addEventListener(this.instance.rootDocument.documentElement, 'click', function () {\n        if (_this2.settings.observeDOMVisibility) {\n          if (_this2.wt.drawInterrupted) {\n            _this2.instance.forceFullRender = true;\n\n            _this2.render();\n          }\n        }\n      });\n    }\n    /**\n     * Checks if it's possible to create text selection in element.\n     *\n     * @private\n     * @param {HTMLElement} el The element to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isTextSelectionAllowed\",\n    value: function isTextSelectionAllowed(el) {\n      if (isInput(el)) {\n        return true;\n      }\n\n      var isChildOfTableBody = isChildOf(el, this.instance.view.wt.wtTable.spreader);\n\n      if (this.settings.fragmentSelection === true && isChildOfTableBody) {\n        return true;\n      }\n\n      if (this.settings.fragmentSelection === 'cell' && this.isSelectedOnlyCell() && isChildOfTableBody) {\n        return true;\n      }\n\n      if (!this.settings.fragmentSelection && this.isCellEdited() && this.isSelectedOnlyCell()) {\n        return true;\n      }\n\n      return false;\n    }\n    /**\n     * Checks if user's been called mousedown.\n     *\n     * @private\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isMouseDown\",\n    value: function isMouseDown() {\n      return privatePool.get(this).mouseDown;\n    }\n    /**\n     * Check if selected only one cell.\n     *\n     * @private\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSelectedOnlyCell\",\n    value: function isSelectedOnlyCell() {\n      var _this$instance$getSel, _this$instance$getSel2;\n\n      return (_this$instance$getSel = (_this$instance$getSel2 = this.instance.getSelectedRangeLast()) === null || _this$instance$getSel2 === void 0 ? void 0 : _this$instance$getSel2.isSingle()) !== null && _this$instance$getSel !== void 0 ? _this$instance$getSel : false;\n    }\n    /**\n     * Checks if active cell is editing.\n     *\n     * @private\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isCellEdited\",\n    value: function isCellEdited() {\n      var activeEditor = this.instance.getActiveEditor();\n      return activeEditor && activeEditor.isOpened();\n    }\n    /**\n     * `beforeDraw` callback.\n     *\n     * @private\n     * @param {boolean} force If `true` rendering was triggered by a change of settings or data or `false` if\n     *                        rendering was triggered by scrolling or moving selection.\n     * @param {object} skipRender Object with `skipRender` property, if it is set to `true ` the next rendering\n     *                            cycle will be skipped.\n     */\n\n  }, {\n    key: \"beforeRender\",\n    value: function beforeRender(force, skipRender) {\n      if (force) {\n        // this.instance.forceFullRender = did Handsontable request full render?\n        this.instance.runHooks('beforeViewRender', this.instance.forceFullRender, skipRender);\n      }\n    }\n    /**\n     * `afterRender` callback.\n     *\n     * @private\n     * @param {boolean} force If `true` rendering was triggered by a change of settings or data or `false` if\n     *                        rendering was triggered by scrolling or moving selection.\n     */\n\n  }, {\n    key: \"afterRender\",\n    value: function afterRender(force) {\n      if (force) {\n        // this.instance.forceFullRender = did Handsontable request full render?\n        this.instance.runHooks('afterViewRender', this.instance.forceFullRender);\n      }\n    }\n    /**\n     * Append row header to a TH element.\n     *\n     * @private\n     * @param {number} visualRowIndex The visual row index.\n     * @param {HTMLTableHeaderCellElement} TH The table header element.\n     */\n\n  }, {\n    key: \"appendRowHeader\",\n    value: function appendRowHeader(visualRowIndex, TH) {\n      if (TH.firstChild) {\n        var container = TH.firstChild;\n\n        if (!hasClass(container, 'relative')) {\n          empty(TH);\n          this.appendRowHeader(visualRowIndex, TH);\n          return;\n        }\n\n        this.updateCellHeader(container.querySelector('.rowHeader'), visualRowIndex, this.instance.getRowHeader);\n      } else {\n        var _this$instance3 = this.instance,\n            rootDocument = _this$instance3.rootDocument,\n            getRowHeader = _this$instance3.getRowHeader;\n        var div = rootDocument.createElement('div');\n        var span = rootDocument.createElement('span');\n        div.className = 'relative';\n        span.className = 'rowHeader';\n        this.updateCellHeader(span, visualRowIndex, getRowHeader);\n        div.appendChild(span);\n        TH.appendChild(div);\n      }\n\n      this.instance.runHooks('afterGetRowHeader', visualRowIndex, TH);\n    }\n    /**\n     * Append column header to a TH element.\n     *\n     * @private\n     * @param {number} visualColumnIndex Visual column index.\n     * @param {HTMLTableHeaderCellElement} TH The table header element.\n     */\n\n  }, {\n    key: \"appendColHeader\",\n    value: function appendColHeader(visualColumnIndex, TH) {\n      if (TH.firstChild) {\n        var container = TH.firstChild;\n\n        if (hasClass(container, 'relative')) {\n          this.updateCellHeader(container.querySelector('.colHeader'), visualColumnIndex, this.instance.getColHeader);\n        } else {\n          empty(TH);\n          this.appendColHeader(visualColumnIndex, TH);\n        }\n      } else {\n        var rootDocument = this.instance.rootDocument;\n        var div = rootDocument.createElement('div');\n        var span = rootDocument.createElement('span');\n        div.className = 'relative';\n        span.className = 'colHeader';\n        this.updateCellHeader(span, visualColumnIndex, this.instance.getColHeader);\n        div.appendChild(span);\n        TH.appendChild(div);\n      }\n\n      this.instance.runHooks('afterGetColHeader', visualColumnIndex, TH);\n    }\n    /**\n     * Updates header cell content.\n     *\n     * @since 0.15.0-beta4\n     * @param {HTMLElement} element Element to update.\n     * @param {number} index Row index or column index.\n     * @param {Function} content Function which should be returns content for this cell.\n     */\n\n  }, {\n    key: \"updateCellHeader\",\n    value: function updateCellHeader(element, index, content) {\n      var renderedIndex = index;\n      var parentOverlay = this.wt.wtOverlays.getParentOverlay(element) || this.wt; // prevent wrong calculations from SampleGenerator\n\n      if (element.parentNode) {\n        if (hasClass(element, 'colHeader')) {\n          renderedIndex = parentOverlay.wtTable.columnFilter.sourceToRendered(index);\n        } else if (hasClass(element, 'rowHeader')) {\n          renderedIndex = parentOverlay.wtTable.rowFilter.sourceToRendered(index);\n        }\n      }\n\n      if (renderedIndex > -1) {\n        fastInnerHTML(element, content(index));\n      } else {\n        // workaround for https://github.com/handsontable/handsontable/issues/1946\n        fastInnerText(element, String.fromCharCode(160));\n        addClass(element, 'cornerHeader');\n      }\n    }\n    /**\n     * Given a element's left position relative to the viewport, returns maximum element width until the right\n     * edge of the viewport (before scrollbar).\n     *\n     * @private\n     * @param {number} leftOffset The left offset.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"maximumVisibleElementWidth\",\n    value: function maximumVisibleElementWidth(leftOffset) {\n      var workspaceWidth = this.wt.wtViewport.getWorkspaceWidth();\n      var maxWidth = workspaceWidth - leftOffset;\n      return maxWidth > 0 ? maxWidth : 0;\n    }\n    /**\n     * Given a element's top position relative to the viewport, returns maximum element height until the bottom\n     * edge of the viewport (before scrollbar).\n     *\n     * @private\n     * @param {number} topOffset The top offset.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"maximumVisibleElementHeight\",\n    value: function maximumVisibleElementHeight(topOffset) {\n      var workspaceHeight = this.wt.wtViewport.getWorkspaceHeight();\n      var maxHeight = workspaceHeight - topOffset;\n      return maxHeight > 0 ? maxHeight : 0;\n    }\n    /**\n     * Sets new dimensions of the container.\n     *\n     * @param {number} width The table width.\n     * @param {number} height The table height.\n     */\n\n  }, {\n    key: \"setLastSize\",\n    value: function setLastSize(width, height) {\n      var priv = privatePool.get(this);\n      var _ref2 = [width, height];\n      priv.lastWidth = _ref2[0];\n      priv.lastHeight = _ref2[1];\n    }\n    /**\n     * Returns cached dimensions.\n     *\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getLastSize\",\n    value: function getLastSize() {\n      var priv = privatePool.get(this);\n      return {\n        width: priv.lastWidth,\n        height: priv.lastHeight\n      };\n    }\n    /**\n     * Checks if master overlay is active.\n     *\n     * @private\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"mainViewIsActive\",\n    value: function mainViewIsActive() {\n      return this.wt === this.activeWt;\n    }\n    /**\n     * Destroyes internal WalkOnTable's instance. Detaches all of the bonded listeners.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.wt.destroy();\n      this.eventManager.destroy();\n    }\n  }]);\n\n  return TableView;\n}();\n\nexport default TableView;", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport { isRightClick as isRightClickEvent, isLeftClick as isLeftClickEvent } from \"./../helpers/dom/event.mjs\";\nimport { CellCoords } from \"./../3rdparty/walkontable/src/index.mjs\";\n/**\n * MouseDown handler.\n *\n * @param {object} options The handler options.\n * @param {boolean} options.isShiftKey The flag which indicates if the shift key is pressed.\n * @param {boolean} options.isLeftClick The flag which indicates if the left mouse button is pressed.\n * @param {boolean} options.isRightClick The flag which indicates if the right mouse button is pressed.\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n *                                    operation will be performed in later selection stages.\n */\n\nexport function mouseDown(_ref) {\n  var isShiftKey = _ref.isShiftKey,\n      isLeftClick = _ref.isLeftClick,\n      isRightClick = _ref.isRightClick,\n      coords = _ref.coords,\n      selection = _ref.selection,\n      controller = _ref.controller;\n  var currentSelection = selection.isSelected() ? selection.getSelectedRange().current() : null;\n  var selectedCorner = selection.isSelectedByCorner();\n  var selectedRow = selection.isSelectedByRowHeader();\n\n  if (isShiftKey && currentSelection) {\n    if (coords.row >= 0 && coords.col >= 0 && !controller.cell) {\n      selection.setRangeEnd(coords);\n    } else if ((selectedCorner || selectedRow) && coords.row >= 0 && coords.col >= 0 && !controller.cell) {\n      selection.setRangeEnd(new CellCoords(coords.row, coords.col));\n    } else if (selectedCorner && coords.row < 0 && !controller.column) {\n      selection.setRangeEnd(new CellCoords(currentSelection.to.row, coords.col));\n    } else if (selectedRow && coords.col < 0 && !controller.row) {\n      selection.setRangeEnd(new CellCoords(coords.row, currentSelection.to.col));\n    } else if ((!selectedCorner && !selectedRow && coords.col < 0 || selectedCorner && coords.col < 0) && !controller.row) {\n      selection.selectRows(Math.max(currentSelection.from.row, 0), coords.row, coords.col);\n    } else if ((!selectedCorner && !selectedRow && coords.row < 0 || selectedRow && coords.row < 0) && !controller.column) {\n      selection.selectColumns(Math.max(currentSelection.from.col, 0), coords.col, coords.row);\n    }\n  } else {\n    var allowRightClickSelection = !selection.inInSelection(coords);\n    var performSelection = isLeftClick || isRightClick && allowRightClickSelection; // clicked row header and when some column was selected\n\n    if (coords.row < 0 && coords.col >= 0 && !controller.column) {\n      if (performSelection) {\n        selection.selectColumns(coords.col, coords.col, coords.row);\n      } // clicked column header and when some row was selected\n\n    } else if (coords.col < 0 && coords.row >= 0 && !controller.row) {\n      if (performSelection) {\n        selection.selectRows(coords.row, coords.row, coords.col);\n      }\n    } else if (coords.col >= 0 && coords.row >= 0 && !controller.cell) {\n      if (performSelection) {\n        selection.setRangeStart(coords);\n      }\n    } else if (coords.col < 0 && coords.row < 0) {\n      selection.selectAll(true, true);\n    }\n  }\n}\n/**\n * MouseOver handler.\n *\n * @param {object} options The handler options.\n * @param {boolean} options.isLeftClick Indicates that event was fired using the left mouse button.\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n *                                    operation will be performed in later selection stages.\n */\n\nexport function mouseOver(_ref2) {\n  var isLeftClick = _ref2.isLeftClick,\n      coords = _ref2.coords,\n      selection = _ref2.selection,\n      controller = _ref2.controller;\n\n  if (!isLeftClick) {\n    return;\n  }\n\n  var selectedRow = selection.isSelectedByRowHeader();\n  var selectedColumn = selection.isSelectedByColumnHeader();\n  var countCols = selection.tableProps.countCols();\n  var countRows = selection.tableProps.countRows();\n\n  if (selectedColumn && !controller.column) {\n    selection.setRangeEnd(new CellCoords(countRows - 1, coords.col));\n  } else if (selectedRow && !controller.row) {\n    selection.setRangeEnd(new CellCoords(coords.row, countCols - 1));\n  } else if (!controller.cell) {\n    selection.setRangeEnd(coords);\n  }\n}\nvar handlers = new Map([['mousedown', mouseDown], ['mouseover', mouseOver], ['touchstart', mouseDown]]);\n/**\n * Mouse handler for selection functionality.\n *\n * @param {Event} event An native event to handle.\n * @param {object} options The handler options.\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n *                                    operation will be performed in later selection stages.\n */\n\nexport function handleMouseEvent(event, _ref3) {\n  var coords = _ref3.coords,\n      selection = _ref3.selection,\n      controller = _ref3.controller;\n  handlers.get(event.type)({\n    coords: coords,\n    selection: selection,\n    controller: controller,\n    isShiftKey: event.shiftKey,\n    isLeftClick: isLeftClickEvent(event) || event.type === 'touchstart',\n    isRightClick: isRightClickEvent(event)\n  });\n}", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nexport var holder = new WeakMap();\nexport var rootInstanceSymbol = Symbol('rootInstance');\n/**\n * Register an object as a root instance.\n *\n * @param  {object} object An object to associate with root instance flag.\n */\n\nexport function registerAsRootInstance(object) {\n  holder.set(object, true);\n}\n/**\n * Check if the source of the root indication call is valid.\n *\n * @param  {symbol} rootSymbol A symbol as a source of truth.\n * @returns {boolean}\n */\n\nexport function hasValidParameter(rootSymbol) {\n  return rootSymbol === rootInstanceSymbol;\n}\n/**\n * Check if passed an object was flagged as a root instance.\n *\n * @param  {object} object An object to check.\n * @returns {boolean}\n */\n\nexport function isRootInstance(object) {\n  return holder.has(object);\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport { getCellType } from \"./../cellTypes/registry.mjs\";\nimport { deepObjectSize, hasOwnProperty, isObject } from \"./object.mjs\";\nvar COLUMN_LABEL_BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nvar COLUMN_LABEL_BASE_LENGTH = COLUMN_LABEL_BASE.length;\n/**\n * Generates spreadsheet-like column names: A, B, C, ..., Z, AA, AB, etc.\n *\n * @param {number} index Column index.\n * @returns {string}\n */\n\nexport function spreadsheetColumnLabel(index) {\n  var dividend = index + 1;\n  var columnLabel = '';\n  var modulo;\n\n  while (dividend > 0) {\n    modulo = (dividend - 1) % COLUMN_LABEL_BASE_LENGTH;\n    columnLabel = String.fromCharCode(65 + modulo) + columnLabel;\n    dividend = parseInt((dividend - modulo) / COLUMN_LABEL_BASE_LENGTH, 10);\n  }\n\n  return columnLabel;\n}\n/**\n * Generates spreadsheet-like column index from theirs labels: A, B, C ...., Z, AA, AB, etc.\n *\n * @param {string} label Column label.\n * @returns {number}\n */\n\nexport function spreadsheetColumnIndex(label) {\n  var result = 0;\n\n  if (label) {\n    for (var i = 0, j = label.length - 1; i < label.length; i += 1, j -= 1) {\n      result += Math.pow(COLUMN_LABEL_BASE_LENGTH, j) * (COLUMN_LABEL_BASE.indexOf(label[i]) + 1);\n    }\n  }\n\n  result -= 1;\n  return result;\n}\n/**\n * Creates 2D array of Excel-like values \"A1\", \"A2\", ...\n *\n * @param {number} rows Number of rows to generate.\n * @param {number} columns Number of columns to generate.\n * @returns {Array}\n */\n\nexport function createSpreadsheetData() {\n  var rows = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;\n  var columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4;\n  var _rows = [];\n  var i;\n  var j;\n\n  for (i = 0; i < rows; i++) {\n    var row = [];\n\n    for (j = 0; j < columns; j++) {\n      row.push(spreadsheetColumnLabel(j) + (i + 1));\n    }\n\n    _rows.push(row);\n  }\n\n  return _rows;\n}\n/**\n * Creates 2D array of Excel-like values \"A1\", \"A2\", as an array of objects.\n *\n * @param {number} rows Number of rows to generate.\n * @param {number} colCount Number of columns to generate.\n * @returns {Array}\n */\n\nexport function createSpreadsheetObjectData() {\n  var rows = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;\n  var colCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4;\n  var _rows = [];\n  var i;\n  var j;\n\n  for (i = 0; i < rows; i++) {\n    var row = {};\n\n    for (j = 0; j < colCount; j++) {\n      row[\"prop\".concat(j)] = spreadsheetColumnLabel(j) + (i + 1);\n    }\n\n    _rows.push(row);\n  }\n\n  return _rows;\n}\n/**\n * Generates an empty data object.\n *\n * @param {number} rows Number of rows to generate.\n * @param {number} columns Number of columns to generate.\n * @returns {Array}\n */\n\nexport function createEmptySpreadsheetData(rows, columns) {\n  var data = [];\n  var row;\n\n  for (var i = 0; i < rows; i++) {\n    row = [];\n\n    for (var j = 0; j < columns; j++) {\n      row.push('');\n    }\n\n    data.push(row);\n  }\n\n  return data;\n}\n/**\n * Factory that produces a function for searching methods (or any properties) which could be defined directly in\n * table configuration or implicitly, within cell type definition.\n *\n * For example: renderer can be defined explicitly using \"renderer\" property in column configuration or it can be\n * defined implicitly using \"type\" property.\n *\n * Methods/properties defined explicitly always takes precedence over those defined through \"type\".\n *\n * If the method/property is not found in an object, searching is continued recursively through prototype chain, until\n * it reaches the Object.prototype.\n *\n * @param {string} methodName Name of the method/property to search (i.e. 'renderer', 'validator', 'copyable').\n * @param {boolean} [allowUndefined] If `false`, the search is continued if methodName has not been found in cell\n *   \"type\".\n * @returns {Function}\n */\n\nexport function cellMethodLookupFactory(methodName, allowUndefined) {\n  var isUndefinedAllowed = typeof allowUndefined === 'undefined' ? true : allowUndefined;\n  return function cellMethodLookup(row, col) {\n    return function getMethodFromProperties(properties) {\n      if (!properties) {\n        return; // method or property not found\n      }\n\n      if (hasOwnProperty(properties, methodName) && properties[methodName] !== void 0) {\n        // check if it is own and is not empty\n        return properties[methodName]; // method defined directly\n      } else if (hasOwnProperty(properties, 'type') && properties.type) {\n        // check if it is own and is not empty\n        if (typeof properties.type !== 'string') {\n          throw new Error('Cell \"type\" must be a string');\n        }\n\n        var type = getCellType(properties.type);\n\n        if (hasOwnProperty(type, methodName)) {\n          return type[methodName]; // method defined in type.\n        } else if (isUndefinedAllowed) {\n          return; // method does not defined in type (eg. validator), returns undefined\n        }\n      }\n\n      return getMethodFromProperties(Object.getPrototypeOf(properties));\n    }(typeof row === 'number' ? this.getCellMeta(row, col) : row);\n  };\n}\n/**\n * Transform a data row (either an array or an object) or an array of data rows to array of changes in a form of `[row,\n * prop/col, value]`. Convenient to use with `setDataAtRowProp` and `setSourceDataAtCell` methods.\n *\n * @param {Array|object} dataRow Object of row data, array of row data or an array of either.\n * @param {number} rowOffset Row offset to be passed to the resulting change list. Defaults to `0`.\n * @returns {Array} Array of changes (in a form of an array).\n */\n\nexport function dataRowToChangesArray(dataRow) {\n  var rowOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var dataRows = dataRow;\n  var changesArray = [];\n\n  if (!Array.isArray(dataRow) || !Array.isArray(dataRow[0])) {\n    dataRows = [dataRow];\n  }\n\n  dataRows.forEach(function (row, rowIndex) {\n    if (Array.isArray(row)) {\n      row.forEach(function (value, column) {\n        changesArray.push([rowIndex + rowOffset, column, value]);\n      });\n    } else {\n      Object.keys(row).forEach(function (propName) {\n        changesArray.push([rowIndex + rowOffset, propName, row[propName]]);\n      });\n    }\n  });\n  return changesArray;\n}\n/**\n * Count the number of keys (or, basically, columns when the data is an array or arrays) in the first row of the\n * provided dataset.\n *\n * @param {Array} data The dataset.\n * @returns {number} Number of keys in the first row of the dataset.\n */\n\nexport function countFirstRowKeys(data) {\n  var result = 0;\n\n  if (Array.isArray(data)) {\n    if (data[0] && Array.isArray(data[0])) {\n      result = data[0].length;\n    } else if (data[0] && isObject(data[0])) {\n      result = deepObjectSize(data[0]);\n    }\n  }\n\n  return result;\n}\n/**\n * Check whether the provided dataset is a *non-empty* array of arrays.\n *\n * @param {Array} data Dataset to be checked.\n * @returns {boolean} `true` if data is an array of arrays, `false` otherwise.\n */\n\nexport function isArrayOfArrays(data) {\n  return !!(Array.isArray(data) && data.length && data.every(function (el) {\n    return Array.isArray(el);\n  }));\n}\n/**\n * Check whether the provided dataset is a *non-empty* array of objects.\n *\n * @param {Array} data Dataset to be checked.\n * @returns {boolean} `true` if data is an array of objects, `false` otherwise.\n */\n\nexport function isArrayOfObjects(data) {\n  return !!(Array.isArray(data) && data.length && data.every(function (el) {\n    return _typeof(el) === 'object' && !Array.isArray(el) && el !== null;\n  }));\n}", "import staticRegister from \"../utils/staticRegister.mjs\";\nimport { registerEditor } from \"../editors/registry.mjs\";\nimport { registerRenderer } from \"../renderers/registry.mjs\";\nimport { registerValidator } from \"../validators/registry.mjs\";\n\nvar _staticRegister = staticRegister('cellTypes'),\n    register = _staticRegister.register,\n    getItem = _staticRegister.getItem,\n    hasItem = _staticRegister.hasItem,\n    getNames = _staticRegister.getNames,\n    getValues = _staticRegister.getValues;\n/**\n * Retrieve cell type object.\n *\n * @param {string} name Cell type identification.\n * @returns {object} Returns cell type object.\n */\n\n\nfunction _getItem(name) {\n  if (!hasItem(name)) {\n    throw Error(\"You declared cell type \\\"\".concat(name, \"\\\" as a string that is not mapped to a known object.\\n                 Cell type must be an object or a string mapped to an object registered by\\n                 \\\"Handsontable.cellTypes.registerCellType\\\" method\"));\n  }\n\n  return getItem(name);\n}\n/**\n * Register cell type under specified name.\n *\n * @param {string} name Cell type identification.\n * @param {object} type An object with contains keys (eq: `editor`, `renderer`, `validator`) which describes specified behaviour of the cell.\n */\n\n\nfunction _register(name, type) {\n  if (typeof name !== 'string') {\n    type = name;\n    name = type.CELL_TYPE;\n  }\n\n  var _type = type,\n      editor = _type.editor,\n      renderer = _type.renderer,\n      validator = _type.validator;\n\n  if (editor) {\n    registerEditor(name, editor);\n  }\n\n  if (renderer) {\n    registerRenderer(name, renderer);\n  }\n\n  if (validator) {\n    registerValidator(name, validator);\n  }\n\n  register(name, type);\n}\n\nexport { _register as registerCellType, _getItem as getCellType, hasItem as hasCellType, getNames as getRegisteredCellTypeNames, getValues as getRegisteredCellTypes };", "import \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { createObjectPropListener, getProperty, isObject, objectEach, setProperty } from \"./helpers/object.mjs\";\nimport { countFirstRowKeys as _countFirstRowKeys } from \"./helpers/data.mjs\";\nimport { arrayEach } from \"./helpers/array.mjs\";\nimport { rangeEach } from \"./helpers/number.mjs\";\nimport { isFunction } from \"./helpers/function.mjs\";\n/**\n * @class DataSource\n * @private\n */\n\nvar DataSource = /*#__PURE__*/function () {\n  function DataSource(hotInstance) {\n    var dataSource = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n    _classCallCheck(this, DataSource);\n\n    /**\n     * Instance of Handsontable.\n     *\n     * @type {Handsontable}\n     */\n    this.hot = hotInstance;\n    /**\n     * Data source.\n     *\n     * @type {Array}\n     */\n\n    this.data = dataSource;\n    /**\n     * Type of data source.\n     *\n     * @type {string}\n     * @default 'array'\n     */\n\n    this.dataType = 'array';\n\n    this.colToProp = function () {};\n\n    this.propToCol = function () {};\n  }\n  /**\n   * Run the `modifyRowData` hook and return either the modified or the source data for the provided row.\n   *\n   * @private\n   * @param {number} rowIndex Row index.\n   * @returns {Array|object} Source or modified row of data.\n   */\n\n\n  _createClass(DataSource, [{\n    key: \"modifyRowData\",\n    value: function modifyRowData(rowIndex) {\n      var modifyRowData;\n\n      if (this.hot.hasHook('modifyRowData')) {\n        modifyRowData = this.hot.runHooks('modifyRowData', rowIndex);\n      }\n\n      return modifyRowData !== void 0 && !Number.isInteger(modifyRowData) ? modifyRowData : this.data[rowIndex];\n    }\n    /**\n     * Get all data.\n     *\n     * @param {boolean} [toArray=false] If `true` return source data as an array of arrays even when source data was provided\n     *                                  in another format.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getData\",\n    value: function getData() {\n      var toArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!this.data || this.data.length === 0) {\n        return this.data;\n      }\n\n      return this.getByRange(null, null, toArray);\n    }\n    /**\n     * Set new data source.\n     *\n     * @param {Array} data The new data.\n     */\n\n  }, {\n    key: \"setData\",\n    value: function setData(data) {\n      this.data = data;\n    }\n    /**\n     * Returns array of column values from the data source. `column` is the index of the row in the data source.\n     *\n     * @param {number} column Visual column index.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getAtColumn\",\n    value: function getAtColumn(column) {\n      var _this = this;\n\n      var result = [];\n      arrayEach(this.data, function (row, rowIndex) {\n        var value = _this.getAtCell(rowIndex, column);\n\n        result.push(value);\n      });\n      return result;\n    }\n    /**\n     * Returns a single row of the data or a subset of its columns. If a column range or `toArray` arguments are provided, it\n     * operates only on the columns declared by the `columns` setting or the data schema.\n     *\n     * @param {number} row Physical row index.\n     * @param {number} [startColumn] Starting index for the column range (optional).\n     * @param {number} [endColumn] Ending index for the column range (optional).\n     * @param {boolean} [toArray=false] `true` if the returned value should be forced to be presented as an array.\n     * @returns {Array|object}\n     */\n\n  }, {\n    key: \"getAtRow\",\n    value: function getAtRow(row, startColumn, endColumn) {\n      var _this2 = this;\n\n      var toArray = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n      var getAllProps = startColumn === void 0 && endColumn === void 0;\n      var dataRow = null;\n      var newDataRow = null;\n      dataRow = this.modifyRowData(row);\n\n      if (Array.isArray(dataRow)) {\n        newDataRow = [];\n\n        if (getAllProps) {\n          dataRow.forEach(function (cell, column) {\n            newDataRow[column] = _this2.getAtPhysicalCell(row, column, dataRow);\n          });\n        } else {\n          // Only the columns from the provided range\n          rangeEach(startColumn, endColumn, function (column) {\n            newDataRow[column - startColumn] = _this2.getAtPhysicalCell(row, column, dataRow);\n          });\n        }\n      } else if (isObject(dataRow) || isFunction(dataRow)) {\n        if (toArray) {\n          newDataRow = [];\n        } else {\n          newDataRow = {};\n        }\n\n        if (!getAllProps || toArray) {\n          var rangeStart = 0;\n          var rangeEnd = this.countFirstRowKeys() - 1;\n          rangeEach(rangeStart, rangeEnd, function (column) {\n            var prop = _this2.colToProp(column);\n\n            if (column >= (startColumn || rangeStart) && column <= (endColumn || rangeEnd) && !Number.isInteger(prop)) {\n              var cellValue = _this2.getAtPhysicalCell(row, prop, dataRow);\n\n              if (toArray) {\n                newDataRow.push(cellValue);\n              } else {\n                setProperty(newDataRow, prop, cellValue);\n              }\n            }\n          });\n        } else {\n          objectEach(dataRow, function (value, prop) {\n            setProperty(newDataRow, prop, _this2.getAtPhysicalCell(row, prop, dataRow));\n          });\n        }\n      }\n\n      return newDataRow;\n    }\n    /**\n     * Set the provided value in the source data set at the provided coordinates.\n     *\n     * @param {number} row Physical row index.\n     * @param {number|string} column Property name / physical column index.\n     * @param {*} value The value to be set at the provided coordinates.\n     */\n\n  }, {\n    key: \"setAtCell\",\n    value: function setAtCell(row, column, value) {\n      if (row >= this.countRows() || column >= this.countFirstRowKeys()) {\n        // Not enough rows and/or columns.\n        return;\n      }\n\n      if (this.hot.hasHook('modifySourceData')) {\n        var valueHolder = createObjectPropListener(value);\n        this.hot.runHooks('modifySourceData', row, this.propToCol(column), valueHolder, 'set');\n\n        if (valueHolder.isTouched()) {\n          value = valueHolder.value;\n        }\n      }\n\n      if (!Number.isInteger(column)) {\n        // column argument is the prop name\n        setProperty(this.data[row], column, value);\n      } else {\n        this.data[row][column] = value;\n      }\n    }\n    /**\n     * Get data from the source data set using the physical indexes.\n     *\n     * @private\n     * @param {number} row Physical row index.\n     * @param {string|number|Function} column Physical column index / property / function.\n     * @param {Array|object} dataRow A representation of a data row.\n     * @returns {*} Value at the provided coordinates.\n     */\n\n  }, {\n    key: \"getAtPhysicalCell\",\n    value: function getAtPhysicalCell(row, column, dataRow) {\n      var result = null;\n\n      if (dataRow) {\n        if (typeof column === 'string') {\n          result = getProperty(dataRow, column);\n        } else if (typeof column === 'function') {\n          result = column(dataRow);\n        } else {\n          result = dataRow[column];\n        }\n      }\n\n      if (this.hot.hasHook('modifySourceData')) {\n        var valueHolder = createObjectPropListener(result);\n        this.hot.runHooks('modifySourceData', row, this.colToProp(column), valueHolder, 'get');\n\n        if (valueHolder.isTouched()) {\n          result = valueHolder.value;\n        }\n      }\n\n      return result;\n    }\n    /**\n     * Returns a single value from the data.\n     *\n     * @param {number} row Physical row index.\n     * @param {number} column Visual column index.\n     * @returns {*}\n     */\n\n  }, {\n    key: \"getAtCell\",\n    value: function getAtCell(row, column) {\n      var dataRow = this.modifyRowData(row);\n      return this.getAtPhysicalCell(row, this.colToProp(column), dataRow);\n    }\n    /**\n     * Returns source data by passed range.\n     *\n     * @param {object} [start] Object with physical `row` and `col` keys (or visual column index, if data type is an array of objects).\n     * @param {object} [end] Object with physical `row` and `col` keys (or visual column index, if data type is an array of objects).\n     * @param {boolean} [toArray=false] If `true` return source data as an array of arrays even when source data was provided\n     *                                  in another format.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getByRange\",\n    value: function getByRange() {\n      var _this3 = this;\n\n      var start = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      var end = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var toArray = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var getAllProps = false;\n      var startRow = null;\n      var startCol = null;\n      var endRow = null;\n      var endCol = null;\n\n      if (start === null || end === null) {\n        getAllProps = true;\n        startRow = 0;\n        endRow = this.countRows() - 1;\n      } else {\n        startRow = Math.min(start.row, end.row);\n        startCol = Math.min(start.col, end.col);\n        endRow = Math.max(start.row, end.row);\n        endCol = Math.max(start.col, end.col);\n      }\n\n      var result = [];\n      rangeEach(startRow, endRow, function (currentRow) {\n        result.push(getAllProps ? _this3.getAtRow(currentRow, void 0, void 0, toArray) : _this3.getAtRow(currentRow, startCol, endCol, toArray));\n      });\n      return result;\n    }\n    /**\n     * Count number of rows.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"countRows\",\n    value: function countRows() {\n      if (this.hot.hasHook('modifySourceLength')) {\n        var modifiedSourceLength = this.hot.runHooks('modifySourceLength');\n\n        if (Number.isInteger(modifiedSourceLength)) {\n          return modifiedSourceLength;\n        }\n      }\n\n      return this.data.length;\n    }\n    /**\n     * Count number of columns.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"countFirstRowKeys\",\n    value: function countFirstRowKeys() {\n      return _countFirstRowKeys(this.data);\n    }\n    /**\n     * Destroy instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.data = null;\n      this.hot = null;\n    }\n  }]);\n\n  return DataSource;\n}();\n\nexport default DataSource;", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.array.fill.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { arrayMap } from \"../helpers/array.mjs\";\nimport { createIndexMap, getListWithInsertedItems, getListWithRemovedItems, HidingMap, IndexesSequence, TrimmingMap } from \"./maps/index.mjs\";\nimport { AggregatedCollection, MapCollection } from \"./mapCollections/index.mjs\";\nimport localHooks from \"../mixins/localHooks.mjs\";\nimport { mixin } from \"../helpers/object.mjs\";\nimport { isDefined } from \"../helpers/mixed.mjs\";\nimport { ChangesObservable } from \"./changesObservable/observable.mjs\";\n/**\n * @class IndexMapper\n * @description\n *\n * Index mapper stores, registers and manages the indexes on the basis of calculations collected from the subsidiary maps.\n * It should be seen as a single source of truth (regarding row and column indexes, for example, their sequence, information if they are skipped in the process of rendering (hidden or trimmed), values linked to them)\n * for any operation that considers CRUD actions such as **insertion**, **movement**, **removal** etc, and is used to properly calculate physical and visual indexes translations in both ways.\n * It has a built-in cache that is updated only when the data or structure changes.\n *\n * **Physical index** is a type of an index from the sequence of indexes assigned to the data source rows or columns\n *  (from 0 to n, where n is number of the cells on the axis of data set).\n * **Visual index** is a type of an index from the sequence of indexes assigned to rows or columns existing in {@link DataMap} (from 0 to n, where n is number of the cells on the axis of data set).\n * **Renderable index** is a type of an index from the sequence of indexes assigned to rows or columns whose may be rendered (when they are in a viewport; from 0 to n, where n is number of the cells renderable on the axis).\n *\n * There are different kinds of index maps which may be registered in the collections and can be used by a reference.\n * They also expose public API and trigger two local hooks such as `init` (on initialization) and `change` (on change).\n *\n * These are: {@link IndexesSequence}, {@link PhysicalIndexToValueMap}, {@link HidingMap}, and {@link TrimmingMap}.\n */\n\nexport var IndexMapper = /*#__PURE__*/function () {\n  function IndexMapper() {\n    var _this = this;\n\n    _classCallCheck(this, IndexMapper);\n\n    /**\n     * Map for storing the sequence of indexes.\n     *\n     * It is registered by default and may be used from API methods.\n     *\n     * @private\n     * @type {IndexesSequence}\n     */\n    this.indexesSequence = new IndexesSequence();\n    /**\n     * Collection for different trimming maps. Indexes marked as trimmed in any map WILL NOT be included in\n     * the {@link DataMap} and won't be rendered.\n     *\n     * @private\n     * @type {MapCollection}\n     */\n\n    this.trimmingMapsCollection = new AggregatedCollection(function (valuesForIndex) {\n      return valuesForIndex.some(function (value) {\n        return value === true;\n      });\n    }, false);\n    /**\n     * Collection for different hiding maps. Indexes marked as hidden in any map WILL be included in the {@link DataMap},\n     * but won't be rendered.\n     *\n     * @private\n     * @type {MapCollection}\n     */\n\n    this.hidingMapsCollection = new AggregatedCollection(function (valuesForIndex) {\n      return valuesForIndex.some(function (value) {\n        return value === true;\n      });\n    }, false);\n    /**\n     * Collection for another kind of maps. There are stored mappings from indexes (visual or physical) to values.\n     *\n     * @private\n     * @type {MapCollection}\n     */\n\n    this.variousMapsCollection = new MapCollection();\n    /**\n     * The class instance collects row and column index changes that happen while the Handsontable\n     * is running. The object allows creating observers that you can subscribe. Each event represents\n     * the index change (e.g., insert, removing, change index value), which can be consumed by a\n     * developer to update its logic.\n     *\n     * @private\n     * @type {ChangesObservable}\n     */\n\n    this.hidingChangesObservable = new ChangesObservable({\n      initialIndexValue: false\n    });\n    /**\n     * Cache for list of not trimmed indexes, respecting the indexes sequence (physical indexes).\n     *\n     * Note: Please keep in mind that trimmed index can be also hidden.\n     *\n     * @private\n     * @type {Array}\n     */\n\n    this.notTrimmedIndexesCache = [];\n    /**\n     * Cache for list of not hidden indexes, respecting the indexes sequence (physical indexes).\n     *\n     * Note: Please keep in mind that hidden index can be also trimmed.\n     *\n     * @private\n     * @type {Array}\n     */\n\n    this.notHiddenIndexesCache = [];\n    /**\n     * Flag determining whether actions performed on index mapper have been batched. It's used for cache management.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    this.isBatched = false;\n    /**\n     * Flag determining whether any action on indexes sequence has been performed. It's used for cache management.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    this.indexesSequenceChanged = false;\n    /**\n     * Flag determining whether any action on trimmed indexes has been performed. It's used for cache management.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    this.trimmedIndexesChanged = false;\n    /**\n     * Flag determining whether any action on hidden indexes has been performed. It's used for cache management.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    this.hiddenIndexesChanged = false;\n    /**\n     * Physical indexes (respecting the sequence of indexes) which may be rendered (when they are in a viewport).\n     *\n     * @private\n     * @type {Array}\n     */\n\n    this.renderablePhysicalIndexesCache = [];\n    /**\n     * Visual indexes (native map's value) corresponding to physical indexes (native map's index).\n     *\n     * @private\n     * @type {Map}\n     */\n\n    this.fromPhysicalToVisualIndexesCache = new Map();\n    /**\n     * Visual indexes (native map's value) corresponding to physical indexes (native map's index).\n     *\n     * @private\n     * @type {Map}\n     */\n\n    this.fromVisualToRenderableIndexesCache = new Map();\n    this.indexesSequence.addLocalHook('change', function () {\n      _this.indexesSequenceChanged = true; // Sequence of stored indexes might change.\n\n      _this.updateCache();\n\n      _this.runLocalHooks('change', _this.indexesSequence, null);\n    });\n    this.trimmingMapsCollection.addLocalHook('change', function (changedMap) {\n      _this.trimmedIndexesChanged = true; // Number of trimmed indexes might change.\n\n      _this.updateCache();\n\n      _this.runLocalHooks('change', changedMap, _this.trimmingMapsCollection);\n    });\n    this.hidingMapsCollection.addLocalHook('change', function (changedMap) {\n      _this.hiddenIndexesChanged = true; // Number of hidden indexes might change.\n\n      _this.updateCache();\n\n      _this.runLocalHooks('change', changedMap, _this.hidingMapsCollection);\n    });\n    this.variousMapsCollection.addLocalHook('change', function (changedMap) {\n      _this.runLocalHooks('change', changedMap, _this.variousMapsCollection);\n    });\n  }\n  /**\n   * Suspends the cache update for this map. The method is helpful to group multiple\n   * operations, which affects the cache. In this case, the cache will be updated once after\n   * calling the `resumeOperations` method.\n   */\n\n\n  _createClass(IndexMapper, [{\n    key: \"suspendOperations\",\n    value: function suspendOperations() {\n      this.isBatched = true;\n    }\n    /**\n     * Resumes the cache update for this map. It recalculates the cache and restores the\n     * default behavior where each map modification updates the cache.\n     */\n\n  }, {\n    key: \"resumeOperations\",\n    value: function resumeOperations() {\n      this.isBatched = false;\n      this.updateCache();\n    }\n    /**\n     * It creates and returns the new instance of the ChangesObserver object. The object\n     * allows listening to the index changes that happen while the Handsontable is running.\n     *\n     * @param {string} indexMapType The index map type which we want to observe.\n     *                              Currently, only the 'hiding' index map types are observable.\n     * @returns {ChangesObserver}\n     */\n\n  }, {\n    key: \"createChangesObserver\",\n    value: function createChangesObserver(indexMapType) {\n      if (indexMapType !== 'hiding') {\n        throw new Error(\"Unsupported index map type \\\"\".concat(indexMapType, \"\\\".\"));\n      }\n\n      return this.hidingChangesObservable.createObserver();\n    }\n    /**\n     * Creates and register the new IndexMap for specified IndexMapper instance.\n     *\n     * @param {string} indexName The uniq index name.\n     * @param {string} mapType The index map type (e.q. \"hiding, \"trimming\", \"physicalIndexToValue\").\n     * @param {*} [initValueOrFn] The initial value for the index map.\n     * @returns {IndexMap}\n     */\n\n  }, {\n    key: \"createAndRegisterIndexMap\",\n    value: function createAndRegisterIndexMap(indexName, mapType, initValueOrFn) {\n      return this.registerMap(indexName, createIndexMap(mapType, initValueOrFn));\n    }\n    /**\n     * Register map which provide some index mappings. Type of map determining to which collection it will be added.\n     *\n     * @param {string} uniqueName Name of the index map. It should be unique.\n     * @param {IndexMap} indexMap Registered index map updated on items removal and insertion.\n     * @returns {IndexMap}\n     */\n\n  }, {\n    key: \"registerMap\",\n    value: function registerMap(uniqueName, indexMap) {\n      if (this.trimmingMapsCollection.get(uniqueName) || this.hidingMapsCollection.get(uniqueName) || this.variousMapsCollection.get(uniqueName)) {\n        throw Error(\"Map with name \\\"\".concat(uniqueName, \"\\\" has been already registered.\"));\n      }\n\n      if (indexMap instanceof TrimmingMap) {\n        this.trimmingMapsCollection.register(uniqueName, indexMap);\n      } else if (indexMap instanceof HidingMap) {\n        this.hidingMapsCollection.register(uniqueName, indexMap);\n      } else {\n        this.variousMapsCollection.register(uniqueName, indexMap);\n      }\n\n      var numberOfIndexes = this.getNumberOfIndexes();\n      /*\n        We initialize map ony when we have full information about number of indexes and the dataset is not empty.\n        Otherwise it's unnecessary. Initialization of empty array would not give any positive changes. After initializing\n        it with number of indexes equal to 0 the map would be still empty. What's more there would be triggered\n        not needed hook (no real change have occurred). Number of indexes is known after loading data (the `loadData`\n        function from the `Core`).\n       */\n\n      if (numberOfIndexes > 0) {\n        indexMap.init(numberOfIndexes);\n      }\n\n      return indexMap;\n    }\n    /**\n     * Unregister a map with given name.\n     *\n     * @param {string} name Name of the index map.\n     */\n\n  }, {\n    key: \"unregisterMap\",\n    value: function unregisterMap(name) {\n      this.trimmingMapsCollection.unregister(name);\n      this.hidingMapsCollection.unregister(name);\n      this.variousMapsCollection.unregister(name);\n    }\n    /**\n     * Unregisters all collected index map instances from all map collection types.\n     */\n\n  }, {\n    key: \"unregisterAll\",\n    value: function unregisterAll() {\n      this.trimmingMapsCollection.unregisterAll();\n      this.hidingMapsCollection.unregisterAll();\n      this.variousMapsCollection.unregisterAll();\n    }\n    /**\n     * Get a physical index corresponding to the given visual index.\n     *\n     * @param {number} visualIndex Visual index.\n     * @returns {number|null} Returns translated index mapped by passed visual index.\n     */\n\n  }, {\n    key: \"getPhysicalFromVisualIndex\",\n    value: function getPhysicalFromVisualIndex(visualIndex) {\n      // Index in the table boundaries provided by the `DataMap`.\n      var physicalIndex = this.notTrimmedIndexesCache[visualIndex];\n\n      if (isDefined(physicalIndex)) {\n        return physicalIndex;\n      }\n\n      return null;\n    }\n    /**\n     * Get a physical index corresponding to the given renderable index.\n     *\n     * @param {number} renderableIndex Renderable index.\n     * @returns {null|number}\n     */\n\n  }, {\n    key: \"getPhysicalFromRenderableIndex\",\n    value: function getPhysicalFromRenderableIndex(renderableIndex) {\n      var physicalIndex = this.renderablePhysicalIndexesCache[renderableIndex]; // Index in the renderable table boundaries.\n\n      if (isDefined(physicalIndex)) {\n        return physicalIndex;\n      }\n\n      return null;\n    }\n    /**\n     * Get a visual index corresponding to the given physical index.\n     *\n     * @param {number} physicalIndex Physical index to search.\n     * @returns {number|null} Returns a visual index of the index mapper.\n     */\n\n  }, {\n    key: \"getVisualFromPhysicalIndex\",\n    value: function getVisualFromPhysicalIndex(physicalIndex) {\n      var visualIndex = this.fromPhysicalToVisualIndexesCache.get(physicalIndex); // Index in the table boundaries provided by the `DataMap`.\n\n      if (isDefined(visualIndex)) {\n        return visualIndex;\n      }\n\n      return null;\n    }\n    /**\n     * Get a visual index corresponding to the given renderable index.\n     *\n     * @param {number} renderableIndex Renderable index.\n     * @returns {null|number}\n     */\n\n  }, {\n    key: \"getVisualFromRenderableIndex\",\n    value: function getVisualFromRenderableIndex(renderableIndex) {\n      return this.getVisualFromPhysicalIndex(this.getPhysicalFromRenderableIndex(renderableIndex));\n    }\n    /**\n     * Get a renderable index corresponding to the given visual index.\n     *\n     * @param {number} visualIndex Visual index.\n     * @returns {null|number}\n     */\n\n  }, {\n    key: \"getRenderableFromVisualIndex\",\n    value: function getRenderableFromVisualIndex(visualIndex) {\n      var renderableIndex = this.fromVisualToRenderableIndexesCache.get(visualIndex); // Index in the renderable table boundaries.\n\n      if (isDefined(renderableIndex)) {\n        return renderableIndex;\n      }\n\n      return null;\n    }\n    /**\n     * Search for the first visible, not hidden index (represented by a visual index).\n     *\n     * @param {number} fromVisualIndex Visual start index. Starting point for finding destination index. Start point may be destination\n     * point when handled index is NOT hidden.\n     * @param {number} incrementBy We are searching for a next visible indexes by increasing (to be precise, or decreasing) indexes.\n     * This variable represent indexes shift. We are looking for an index:\n     * - for rows: from the left to the right (increasing indexes, then variable should have value 1) or\n     * other way around (decreasing indexes, then variable should have the value -1)\n     * - for columns: from the top to the bottom (increasing indexes, then variable should have value 1)\n     * or other way around (decreasing indexes, then variable should have the value -1).\n     * @param {boolean} searchAlsoOtherWayAround The argument determine if an additional other way around search should be\n     * performed, when the search in the first direction had no effect in finding visual index.\n     * @param {number} indexForNextSearch Visual index for next search, when the flag is truthy.\n     *\n     * @returns {number|null} Visual column index or `null`.\n     */\n\n  }, {\n    key: \"getFirstNotHiddenIndex\",\n    value: function getFirstNotHiddenIndex(fromVisualIndex, incrementBy) {\n      var searchAlsoOtherWayAround = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var indexForNextSearch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : fromVisualIndex - incrementBy;\n      var physicalIndex = this.getPhysicalFromVisualIndex(fromVisualIndex); // First or next (it may be end of the table) index is beyond the table boundaries.\n\n      if (physicalIndex === null) {\n        // Looking for the next index in the opposite direction. This conditional won't be fulfilled when we STARTED\n        // the search from the index beyond the table boundaries.\n        if (searchAlsoOtherWayAround === true && indexForNextSearch !== fromVisualIndex - incrementBy) {\n          return this.getFirstNotHiddenIndex(indexForNextSearch, -incrementBy, false, indexForNextSearch);\n        }\n\n        return null;\n      }\n\n      if (this.isHidden(physicalIndex) === false) {\n        return fromVisualIndex;\n      } // Looking for the next index, as the current isn't visible.\n\n\n      return this.getFirstNotHiddenIndex(fromVisualIndex + incrementBy, incrementBy, searchAlsoOtherWayAround, indexForNextSearch);\n    }\n    /**\n     * Set default values for all indexes in registered index maps.\n     *\n     * @param {number} [length] Destination length for all stored index maps.\n     */\n\n  }, {\n    key: \"initToLength\",\n    value: function initToLength() {\n      var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getNumberOfIndexes();\n      this.notTrimmedIndexesCache = _toConsumableArray(new Array(length).keys());\n      this.notHiddenIndexesCache = _toConsumableArray(new Array(length).keys());\n      this.suspendOperations();\n      this.indexesSequence.init(length);\n      this.trimmingMapsCollection.initEvery(length);\n      this.resumeOperations(); // We move initialization of hidden collection to next batch for purpose of working on sequence of already trimmed indexes.\n\n      this.suspendOperations();\n      this.hidingMapsCollection.initEvery(length); // It shouldn't reset the cache.\n\n      this.variousMapsCollection.initEvery(length);\n      this.resumeOperations();\n      this.runLocalHooks('init');\n    }\n    /**\n     * Trim/extend the mappers to fit the desired length.\n     *\n     * @param {number} length New mapper length.\n     */\n\n  }, {\n    key: \"fitToLength\",\n    value: function fitToLength(length) {\n      var currentIndexCount = this.getNumberOfIndexes();\n\n      if (length < currentIndexCount) {\n        var indexesToBeRemoved = _toConsumableArray(Array(this.getNumberOfIndexes() - length).keys()).map(function (i) {\n          return i + length;\n        });\n\n        this.removeIndexes(indexesToBeRemoved);\n      } else {\n        this.insertIndexes(currentIndexCount, length - currentIndexCount);\n      }\n    }\n    /**\n     * Get sequence of indexes.\n     *\n     * @returns {Array} Physical indexes.\n     */\n\n  }, {\n    key: \"getIndexesSequence\",\n    value: function getIndexesSequence() {\n      return this.indexesSequence.getValues();\n    }\n    /**\n     * Set completely new indexes sequence.\n     *\n     * @param {Array} indexes Physical indexes.\n     */\n\n  }, {\n    key: \"setIndexesSequence\",\n    value: function setIndexesSequence(indexes) {\n      this.indexesSequence.setValues(indexes);\n    }\n    /**\n     * Get all NOT trimmed indexes.\n     *\n     * Note: Indexes marked as trimmed aren't included in a {@link DataMap} and aren't rendered.\n     *\n     * @param {boolean} [readFromCache=true] Determine if read indexes from cache.\n     * @returns {Array} List of physical indexes. Index of this native array is a \"visual index\",\n     * value of this native array is a \"physical index\".\n     */\n\n  }, {\n    key: \"getNotTrimmedIndexes\",\n    value: function getNotTrimmedIndexes() {\n      var _this2 = this;\n\n      var readFromCache = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      if (readFromCache === true) {\n        return this.notTrimmedIndexesCache;\n      }\n\n      var indexesSequence = this.getIndexesSequence();\n      return indexesSequence.filter(function (physicalIndex) {\n        return _this2.isTrimmed(physicalIndex) === false;\n      });\n    }\n    /**\n     * Get length of all NOT trimmed indexes.\n     *\n     * Note: Indexes marked as trimmed aren't included in a {@link DataMap} and aren't rendered.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getNotTrimmedIndexesLength\",\n    value: function getNotTrimmedIndexesLength() {\n      return this.getNotTrimmedIndexes().length;\n    }\n    /**\n     * Get all NOT hidden indexes.\n     *\n     * Note: Indexes marked as hidden are included in a {@link DataMap}, but aren't rendered.\n     *\n     * @param {boolean} [readFromCache=true] Determine if read indexes from cache.\n     * @returns {Array} List of physical indexes. Please keep in mind that index of this native array IS NOT a \"visual index\".\n     */\n\n  }, {\n    key: \"getNotHiddenIndexes\",\n    value: function getNotHiddenIndexes() {\n      var _this3 = this;\n\n      var readFromCache = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      if (readFromCache === true) {\n        return this.notHiddenIndexesCache;\n      }\n\n      var indexesSequence = this.getIndexesSequence();\n      return indexesSequence.filter(function (physicalIndex) {\n        return _this3.isHidden(physicalIndex) === false;\n      });\n    }\n    /**\n     * Get length of all NOT hidden indexes.\n     *\n     * Note: Indexes marked as hidden are included in a {@link DataMap}, but aren't rendered.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getNotHiddenIndexesLength\",\n    value: function getNotHiddenIndexesLength() {\n      return this.getNotHiddenIndexes().length;\n    }\n    /**\n     * Get list of physical indexes (respecting the sequence of indexes) which may be rendered (when they are in a viewport).\n     *\n     * @param {boolean} [readFromCache=true] Determine if read indexes from cache.\n     * @returns {Array} List of physical indexes. Index of this native array is a \"renderable index\",\n     * value of this native array is a \"physical index\".\n     */\n\n  }, {\n    key: \"getRenderableIndexes\",\n    value: function getRenderableIndexes() {\n      var _this4 = this;\n\n      var readFromCache = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      if (readFromCache === true) {\n        return this.renderablePhysicalIndexesCache;\n      }\n\n      var notTrimmedIndexes = this.getNotTrimmedIndexes();\n      return notTrimmedIndexes.filter(function (physicalIndex) {\n        return _this4.isHidden(physicalIndex) === false;\n      });\n    }\n    /**\n     * Get length of all NOT trimmed and NOT hidden indexes.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getRenderableIndexesLength\",\n    value: function getRenderableIndexesLength() {\n      return this.getRenderableIndexes().length;\n    }\n    /**\n     * Get number of all indexes.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getNumberOfIndexes\",\n    value: function getNumberOfIndexes() {\n      return this.getIndexesSequence().length;\n    }\n    /**\n     * Move indexes in the index mapper.\n     *\n     * @param {number|Array} movedIndexes Visual index(es) to move.\n     * @param {number} finalIndex Visual index being a start index for the moved elements.\n     */\n\n  }, {\n    key: \"moveIndexes\",\n    value: function moveIndexes(movedIndexes, finalIndex) {\n      var _this5 = this;\n\n      if (typeof movedIndexes === 'number') {\n        movedIndexes = [movedIndexes];\n      }\n\n      var physicalMovedIndexes = arrayMap(movedIndexes, function (visualIndex) {\n        return _this5.getPhysicalFromVisualIndex(visualIndex);\n      });\n      var notTrimmedIndexesLength = this.getNotTrimmedIndexesLength();\n      var movedIndexesLength = movedIndexes.length; // Removing indexes without re-indexing.\n\n      var listWithRemovedItems = getListWithRemovedItems(this.getIndexesSequence(), physicalMovedIndexes); // When item(s) are moved after the last visible item we assign the last possible index.\n\n      var destinationPosition = notTrimmedIndexesLength - movedIndexesLength; // Otherwise, we find proper index for inserted item(s).\n\n      if (finalIndex + movedIndexesLength < notTrimmedIndexesLength) {\n        // Physical index at final index position.\n        var physicalIndex = listWithRemovedItems.filter(function (index) {\n          return _this5.isTrimmed(index) === false;\n        })[finalIndex];\n        destinationPosition = listWithRemovedItems.indexOf(physicalIndex);\n      } // Adding indexes without re-indexing.\n\n\n      this.setIndexesSequence(getListWithInsertedItems(listWithRemovedItems, destinationPosition, physicalMovedIndexes));\n    }\n    /**\n     * Get whether index is trimmed. Index marked as trimmed isn't included in a {@link DataMap} and isn't rendered.\n     *\n     * @param {number} physicalIndex Physical index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isTrimmed\",\n    value: function isTrimmed(physicalIndex) {\n      return this.trimmingMapsCollection.getMergedValueAtIndex(physicalIndex);\n    }\n    /**\n     * Get whether index is hidden. Index marked as hidden is included in a {@link DataMap}, but isn't rendered.\n     *\n     * @param {number} physicalIndex Physical index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isHidden\",\n    value: function isHidden(physicalIndex) {\n      return this.hidingMapsCollection.getMergedValueAtIndex(physicalIndex);\n    }\n    /**\n     * Insert new indexes and corresponding mapping and update values of the others, for all stored index maps.\n     *\n     * @private\n     * @param {number} firstInsertedVisualIndex First inserted visual index.\n     * @param {number} amountOfIndexes Amount of inserted indexes.\n     */\n\n  }, {\n    key: \"insertIndexes\",\n    value: function insertIndexes(firstInsertedVisualIndex, amountOfIndexes) {\n      var nthVisibleIndex = this.getNotTrimmedIndexes()[firstInsertedVisualIndex];\n      var firstInsertedPhysicalIndex = isDefined(nthVisibleIndex) ? nthVisibleIndex : this.getNumberOfIndexes();\n      var insertionIndex = this.getIndexesSequence().includes(nthVisibleIndex) ? this.getIndexesSequence().indexOf(nthVisibleIndex) : this.getNumberOfIndexes();\n      var insertedIndexes = arrayMap(new Array(amountOfIndexes).fill(firstInsertedPhysicalIndex), function (nextIndex, stepsFromStart) {\n        return nextIndex + stepsFromStart;\n      });\n      this.suspendOperations();\n      this.indexesSequence.insert(insertionIndex, insertedIndexes);\n      this.trimmingMapsCollection.insertToEvery(insertionIndex, insertedIndexes);\n      this.hidingMapsCollection.insertToEvery(insertionIndex, insertedIndexes);\n      this.variousMapsCollection.insertToEvery(insertionIndex, insertedIndexes);\n      this.resumeOperations();\n    }\n    /**\n     * Remove some indexes and corresponding mappings and update values of the others, for all stored index maps.\n     *\n     * @private\n     * @param {Array} removedIndexes List of removed indexes.\n     */\n\n  }, {\n    key: \"removeIndexes\",\n    value: function removeIndexes(removedIndexes) {\n      this.suspendOperations();\n      this.indexesSequence.remove(removedIndexes);\n      this.trimmingMapsCollection.removeFromEvery(removedIndexes);\n      this.hidingMapsCollection.removeFromEvery(removedIndexes);\n      this.variousMapsCollection.removeFromEvery(removedIndexes);\n      this.resumeOperations();\n    }\n    /**\n     * Rebuild cache for some indexes. Every action on indexes sequence or indexes skipped in the process of rendering\n     * by default reset cache, thus batching some index maps actions is recommended.\n     *\n     * @private\n     * @param {boolean} [force=false] Determine if force cache update.\n     */\n\n  }, {\n    key: \"updateCache\",\n    value: function updateCache() {\n      var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var anyCachedIndexChanged = this.indexesSequenceChanged || this.trimmedIndexesChanged || this.hiddenIndexesChanged;\n\n      if (force === true || this.isBatched === false && anyCachedIndexChanged === true) {\n        this.trimmingMapsCollection.updateCache();\n        this.hidingMapsCollection.updateCache();\n        this.notTrimmedIndexesCache = this.getNotTrimmedIndexes(false);\n        this.notHiddenIndexesCache = this.getNotHiddenIndexes(false);\n        this.renderablePhysicalIndexesCache = this.getRenderableIndexes(false);\n        this.cacheFromPhysicalToVisualIndexes();\n        this.cacheFromVisualToRenderabIendexes(); // Currently there's support only for the \"hiding\" map type.\n\n        if (this.hiddenIndexesChanged) {\n          this.hidingChangesObservable.emit(this.hidingMapsCollection.getMergedValues());\n        }\n\n        this.runLocalHooks('cacheUpdated', {\n          indexesSequenceChanged: this.indexesSequenceChanged,\n          trimmedIndexesChanged: this.trimmedIndexesChanged,\n          hiddenIndexesChanged: this.hiddenIndexesChanged\n        });\n        this.indexesSequenceChanged = false;\n        this.trimmedIndexesChanged = false;\n        this.hiddenIndexesChanged = false;\n      }\n    }\n    /**\n     * Update cache for translations from physical to visual indexes.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"cacheFromPhysicalToVisualIndexes\",\n    value: function cacheFromPhysicalToVisualIndexes() {\n      var nrOfNotTrimmedIndexes = this.getNotTrimmedIndexesLength();\n      this.fromPhysicalToVisualIndexesCache.clear();\n\n      for (var visualIndex = 0; visualIndex < nrOfNotTrimmedIndexes; visualIndex += 1) {\n        var physicalIndex = this.getPhysicalFromVisualIndex(visualIndex); // Every visual index have corresponding physical index, but some physical indexes may don't have\n        // corresponding visual indexes (physical indexes may represent trimmed indexes, beyond the table boundaries)\n\n        this.fromPhysicalToVisualIndexesCache.set(physicalIndex, visualIndex);\n      }\n    }\n    /**\n     * Update cache for translations from visual to renderable indexes.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"cacheFromVisualToRenderabIendexes\",\n    value: function cacheFromVisualToRenderabIendexes() {\n      var nrOfRenderableIndexes = this.getRenderableIndexesLength();\n      this.fromVisualToRenderableIndexesCache.clear();\n\n      for (var renderableIndex = 0; renderableIndex < nrOfRenderableIndexes; renderableIndex += 1) {\n        // Can't use getRenderableFromVisualIndex here because we're building the cache here\n        var physicalIndex = this.getPhysicalFromRenderableIndex(renderableIndex);\n        var visualIndex = this.getVisualFromPhysicalIndex(physicalIndex);\n        this.fromVisualToRenderableIndexesCache.set(visualIndex, renderableIndex);\n      }\n    }\n  }]);\n\n  return IndexMapper;\n}();\nmixin(IndexMapper, localHooks);", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport { HidingMap } from \"./hidingMap.mjs\";\nimport { IndexMap } from \"./indexMap.mjs\";\nimport { LinkedPhysicalIndexToValueMap } from \"./linkedPhysicalIndexToValueMap.mjs\";\nimport { PhysicalIndexToValueMap } from \"./physicalIndexToValueMap.mjs\";\nimport { TrimmingMap } from \"./trimmingMap.mjs\";\nexport * from \"./indexesSequence.mjs\";\nexport * from \"./utils/indexesSequence.mjs\";\nexport { HidingMap, IndexMap, LinkedPhysicalIndexToValueMap, PhysicalIndexToValueMap, TrimmingMap };\nvar availableIndexMapTypes = new Map([['hiding', HidingMap], ['index', IndexMap], ['linkedPhysicalIndexToValue', LinkedPhysicalIndexToValueMap], ['physicalIndexToValue', PhysicalIndexToValueMap], ['trimming', TrimmingMap]]);\n/**\n * Creates and returns new IndexMap instance.\n *\n * @param {string} mapType The type of the map.\n * @param {*} [initValueOrFn=null] Initial value or function for index map.\n * @returns {IndexMap}\n */\n\nexport function createIndexMap(mapType) {\n  var initValueOrFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n  if (!availableIndexMapTypes.has(mapType)) {\n    throw new Error(\"The provided map type (\\\"\".concat(mapType, \"\\\") does not exist.\"));\n  }\n\n  return new (availableIndexMapTypes.get(mapType))(initValueOrFn);\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { PhysicalIndexToValueMap } from \"./physicalIndexToValueMap.mjs\";\nimport { arrayReduce } from \"../../helpers/array.mjs\";\n/**\n * Map for storing mappings from an physical index to a boolean value. It stores information whether physical index is\n * included in a dataset, but skipped in the process of rendering.\n */\n\nexport var HidingMap = /*#__PURE__*/function (_PhysicalIndexToValue) {\n  _inherits(HidingMap, _PhysicalIndexToValue);\n\n  var _super = _createSuper(HidingMap);\n\n  function HidingMap() {\n    var initValueOrFn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    _classCallCheck(this, HidingMap);\n\n    return _super.call(this, initValueOrFn);\n  }\n  /**\n   * Get physical indexes which are hidden.\n   *\n   * Note: Indexes marked as hidden are included in a {@link DataMap}, but aren't rendered.\n   *\n   * @returns {Array}\n   */\n\n\n  _createClass(HidingMap, [{\n    key: \"getHiddenIndexes\",\n    value: function getHiddenIndexes() {\n      return arrayReduce(this.getValues(), function (indexesList, isHidden, physicalIndex) {\n        if (isHidden) {\n          indexesList.push(physicalIndex);\n        }\n\n        return indexesList;\n      }, []);\n    }\n  }]);\n\n  return HidingMap;\n}(PhysicalIndexToValueMap);", "var $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar isDataDescriptor = require('../internals/is-data-descriptor');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\n\n// `Reflect.get` method\n// https://tc39.es/ecma262/#sec-reflect.get\nfunction get(target, propertyKey /* , receiver */) {\n  var receiver = arguments.length < 3 ? target : arguments[2];\n  var descriptor, prototype;\n  if (anObject(target) === receiver) return target[propertyKey];\n  descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey);\n  if (descriptor) return isDataDescriptor(descriptor)\n    ? descriptor.value\n    : descriptor.get === undefined ? undefined : call(descriptor.get, receiver);\n  if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver);\n}\n\n$({ target: 'Reflect', stat: true }, {\n  get: get\n});\n", "var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n    return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n  }\n});\n", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { IndexMap } from \"./indexMap.mjs\";\nimport { getListWithRemovedItems, getListWithInsertedItems } from \"./utils/physicallyIndexed.mjs\";\n/**\n * Map for storing mappings from an physical index to a value.\n *\n * Does not update stored values on remove/add row or column action.\n */\n\nexport var PhysicalIndexToValueMap = /*#__PURE__*/function (_IndexMap) {\n  _inherits(PhysicalIndexToValueMap, _IndexMap);\n\n  var _super = _createSuper(PhysicalIndexToValueMap);\n\n  function PhysicalIndexToValueMap() {\n    _classCallCheck(this, PhysicalIndexToValueMap);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(PhysicalIndexToValueMap, [{\n    key: \"insert\",\n    value:\n    /**\n     * Add values to list and reorganize.\n     *\n     * @private\n     * @param {number} insertionIndex Position inside the list.\n     * @param {Array} insertedIndexes List of inserted indexes.\n     */\n    function insert(insertionIndex, insertedIndexes) {\n      this.indexedValues = getListWithInsertedItems(this.indexedValues, insertionIndex, insertedIndexes, this.initValueOrFn);\n\n      _get(_getPrototypeOf(PhysicalIndexToValueMap.prototype), \"insert\", this).call(this, insertionIndex, insertedIndexes);\n    }\n    /**\n     * Remove values from the list and reorganize.\n     *\n     * @private\n     * @param {Array} removedIndexes List of removed indexes.\n     */\n\n  }, {\n    key: \"remove\",\n    value: function remove(removedIndexes) {\n      this.indexedValues = getListWithRemovedItems(this.indexedValues, removedIndexes);\n\n      _get(_getPrototypeOf(PhysicalIndexToValueMap.prototype), \"remove\", this).call(this, removedIndexes);\n    }\n  }]);\n\n  return PhysicalIndexToValueMap;\n}(IndexMap);", "import { defineGetter } from \"./../helpers/object.mjs\";\nimport { fastCall } from \"./../helpers/function.mjs\";\nvar MIXIN_NAME = 'localHooks';\n/**\n * Mixin object to extend objects functionality for local hooks.\n *\n * @type {object}\n */\n\nvar localHooks = {\n  /**\n   * Internal hooks storage.\n   */\n  _localHooks: Object.create(null),\n\n  /**\n   * Add hook to the collection.\n   *\n   * @param {string} key The hook name.\n   * @param {Function} callback The hook callback.\n   * @returns {object}\n   */\n  addLocalHook: function addLocalHook(key, callback) {\n    if (!this._localHooks[key]) {\n      this._localHooks[key] = [];\n    }\n\n    this._localHooks[key].push(callback);\n\n    return this;\n  },\n\n  /**\n   * Run hooks.\n   *\n   * @param {string} key The name of the hook to run.\n   * @param {*} [arg1] An additional parameter passed to the callback function.\n   * @param {*} [arg2] An additional parameter passed to the callback function.\n   * @param {*} [arg3] An additional parameter passed to the callback function.\n   * @param {*} [arg4] An additional parameter passed to the callback function.\n   * @param {*} [arg5] An additional parameter passed to the callback function.\n   * @param {*} [arg6] An additional parameter passed to the callback function.\n   */\n  runLocalHooks: function runLocalHooks(key, arg1, arg2, arg3, arg4, arg5, arg6) {\n    if (this._localHooks[key]) {\n      var length = this._localHooks[key].length; // don't optimize this loop with the `arrayEach()` method or arrow functions\n      // otherwise, performance will decrease because of garbage collection\n      // using the `...rest` syntax (ES6 and later) will decrease performance as well\n\n      for (var i = 0; i < length; i++) {\n        fastCall(this._localHooks[key][i], this, arg1, arg2, arg3, arg4, arg5, arg6);\n      }\n    }\n  },\n\n  /**\n   * Clear all added hooks.\n   *\n   * @returns {object}\n   */\n  clearLocalHooks: function clearLocalHooks() {\n    this._localHooks = {};\n    return this;\n  }\n};\ndefineGetter(localHooks, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false\n});\nexport default localHooks;", "import \"core-js/modules/es.array.slice.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport { mixin } from \"../../helpers/object.mjs\";\nimport { isFunction } from \"../../helpers/function.mjs\";\nimport localHooks from \"../../mixins/localHooks.mjs\";\n/**\n * Map for storing mappings from an index to a value.\n */\n\nexport var IndexMap = /*#__PURE__*/function () {\n  function IndexMap() {\n    var initValueOrFn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n    _classCallCheck(this, IndexMap);\n\n    /**\n     * List of values for particular indexes.\n     *\n     * @private\n     * @type {Array}\n     */\n    this.indexedValues = [];\n    /**\n     * Initial value or function for each existing index.\n     *\n     * @private\n     * @type {*}\n     */\n\n    this.initValueOrFn = initValueOrFn;\n  }\n  /**\n   * Get full list of values for particular indexes.\n   *\n   * @returns {Array}\n   */\n\n\n  _createClass(IndexMap, [{\n    key: \"getValues\",\n    value: function getValues() {\n      return this.indexedValues;\n    }\n    /**\n     * Get value for the particular index.\n     *\n     * @param {number} index Index for which value is got.\n     * @returns {*}\n     */\n\n  }, {\n    key: \"getValueAtIndex\",\n    value: function getValueAtIndex(index) {\n      var values = this.indexedValues;\n\n      if (index < values.length) {\n        return values[index];\n      }\n    }\n    /**\n     * Set new values for particular indexes.\n     *\n     * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n     *\n     * @param {Array} values List of set values.\n     */\n\n  }, {\n    key: \"setValues\",\n    value: function setValues(values) {\n      this.indexedValues = values.slice();\n      this.runLocalHooks('change');\n    }\n    /**\n     * Set new value for the particular index.\n     *\n     * @param {number} index The index.\n     * @param {*} value The value to save.\n     *\n     * Note: Please keep in mind that it is not possible to set value beyond the map (not respecting already set\n     * map's size). Please use the `setValues` method when you would like to extend the map.\n     * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"setValueAtIndex\",\n    value: function setValueAtIndex(index, value) {\n      if (index < this.indexedValues.length) {\n        this.indexedValues[index] = value;\n        this.runLocalHooks('change');\n        return true;\n      }\n\n      return false;\n    }\n    /**\n     * Clear all values to the defaults.\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.setDefaultValues();\n    }\n    /**\n     * Get length of the index map.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getLength\",\n    value: function getLength() {\n      return this.getValues().length;\n    }\n    /**\n     * Set default values for elements from `0` to `n`, where `n` is equal to the handled variable.\n     *\n     * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n     *\n     * @private\n     * @param {number} [length] Length of list.\n     */\n\n  }, {\n    key: \"setDefaultValues\",\n    value: function setDefaultValues() {\n      var _this = this;\n\n      var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.indexedValues.length;\n      this.indexedValues.length = 0;\n\n      if (isFunction(this.initValueOrFn)) {\n        rangeEach(length - 1, function (index) {\n          return _this.indexedValues.push(_this.initValueOrFn(index));\n        });\n      } else {\n        rangeEach(length - 1, function () {\n          return _this.indexedValues.push(_this.initValueOrFn);\n        });\n      }\n\n      this.runLocalHooks('change');\n    }\n    /**\n     * Initialize list with default values for particular indexes.\n     *\n     * @private\n     * @param {number} length New length of indexed list.\n     * @returns {IndexMap}\n     */\n\n  }, {\n    key: \"init\",\n    value: function init(length) {\n      this.setDefaultValues(length);\n      this.runLocalHooks('init');\n      return this;\n    }\n    /**\n     * Add values to the list.\n     *\n     * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"insert\",\n    value: function insert() {\n      this.runLocalHooks('change');\n    }\n    /**\n     * Remove values from the list.\n     *\n     * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"remove\",\n    value: function remove() {\n      this.runLocalHooks('change');\n    }\n    /**\n     * Destroys the Map instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.clearLocalHooks();\n      this.indexedValues = null;\n      this.initValueOrFn = null;\n    }\n  }]);\n\n  return IndexMap;\n}();\nmixin(IndexMap, localHooks);", "import \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { isFunction } from \"../../../helpers/function.mjs\";\nimport { arrayFilter } from \"../../../helpers/array.mjs\";\n/**\n * Insert new items to the list.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {number} insertionIndex Position inside the actual list.\n * @param {Array} insertedIndexes List of inserted indexes.\n * @param {*} insertedValuesMapping Mapping which may provide value or function returning value for the specific parameters.\n * @returns {Array} List with new mappings.\n */\n\nexport function getListWithInsertedItems(indexedValues, insertionIndex, insertedIndexes, insertedValuesMapping) {\n  var firstInsertedIndex = insertedIndexes.length ? insertedIndexes[0] : void 0;\n  return [].concat(_toConsumableArray(indexedValues.slice(0, firstInsertedIndex)), _toConsumableArray(insertedIndexes.map(function (insertedIndex, ordinalNumber) {\n    if (isFunction(insertedValuesMapping)) {\n      return insertedValuesMapping(insertedIndex, ordinalNumber);\n    }\n\n    return insertedValuesMapping;\n  })), _toConsumableArray(firstInsertedIndex === void 0 ? [] : indexedValues.slice(firstInsertedIndex)));\n}\n/**\n * Filter items from the list.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {Array} removedIndexes List of removed indexes.\n * @returns {Array} Reduced list of mappings.\n */\n\nexport function getListWithRemovedItems(indexedValues, removedIndexes) {\n  return arrayFilter(indexedValues, function (_, index) {\n    return removedIndexes.includes(index) === false;\n  });\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { IndexMap } from \"./indexMap.mjs\";\nimport { getListWithRemovedItems, getListWithInsertedItems } from \"./utils/physicallyIndexed.mjs\";\nimport { getListWithRemovedItems as getListWithoutIndexes } from \"./utils/indexesSequence.mjs\";\nimport { getDecreasedIndexes, getIncreasedIndexes } from \"./utils/actionsOnIndexes.mjs\";\nimport { isFunction } from \"../../helpers/function.mjs\";\n/**\n * Map for storing mappings from an physical index to a value. Those entries are linked and stored in a certain order.\n *\n * It does not update stored values on remove/add row or column action. Otherwise, order of entries is updated after\n * such changes.\n */\n\nexport var LinkedPhysicalIndexToValueMap = /*#__PURE__*/function (_IndexMap) {\n  _inherits(LinkedPhysicalIndexToValueMap, _IndexMap);\n\n  var _super = _createSuper(LinkedPhysicalIndexToValueMap);\n\n  function LinkedPhysicalIndexToValueMap() {\n    var _this;\n\n    _classCallCheck(this, LinkedPhysicalIndexToValueMap);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"orderOfIndexes\", []);\n\n    return _this;\n  }\n\n  _createClass(LinkedPhysicalIndexToValueMap, [{\n    key: \"getValues\",\n    value:\n    /**\n     * Get full list of ordered values for particular indexes.\n     *\n     * @returns {Array}\n     */\n    function getValues() {\n      var _this2 = this;\n\n      return this.orderOfIndexes.map(function (physicalIndex) {\n        return _this2.indexedValues[physicalIndex];\n      });\n    }\n    /**\n     * Set new values for particular indexes. Entries are linked and stored in a certain order.\n     *\n     * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n     *\n     * @param {Array} values List of set values.\n     */\n\n  }, {\n    key: \"setValues\",\n    value: function setValues(values) {\n      this.orderOfIndexes = _toConsumableArray(Array(values.length).keys());\n\n      _get(_getPrototypeOf(LinkedPhysicalIndexToValueMap.prototype), \"setValues\", this).call(this, values);\n    }\n    /**\n     * Set value at index and add it to the linked list of entries. Entries are stored in a certain order.\n     *\n     * Note: Value will be added at the end of the queue.\n     *\n     * @param {number} index The index.\n     * @param {*} value The value to save.\n     * @param {number} position Position to which entry will be added.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"setValueAtIndex\",\n    value: function setValueAtIndex(index, value) {\n      var position = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.orderOfIndexes.length;\n\n      if (index < this.indexedValues.length) {\n        this.indexedValues[index] = value;\n\n        if (this.orderOfIndexes.includes(index) === false) {\n          this.orderOfIndexes.splice(position, 0, index);\n        }\n\n        this.runLocalHooks('change');\n        return true;\n      }\n\n      return false;\n    }\n    /**\n     * Clear value for particular index.\n     *\n     * @param {number} physicalIndex Physical index.\n     */\n\n  }, {\n    key: \"clearValue\",\n    value: function clearValue(physicalIndex) {\n      this.orderOfIndexes = getListWithoutIndexes(this.orderOfIndexes, [physicalIndex]);\n\n      if (isFunction(this.initValueOrFn)) {\n        _get(_getPrototypeOf(LinkedPhysicalIndexToValueMap.prototype), \"setValueAtIndex\", this).call(this, physicalIndex, this.initValueOrFn(physicalIndex));\n      } else {\n        _get(_getPrototypeOf(LinkedPhysicalIndexToValueMap.prototype), \"setValueAtIndex\", this).call(this, physicalIndex, this.initValueOrFn);\n      }\n    }\n    /**\n     * Get length of the index map.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getLength\",\n    value: function getLength() {\n      return this.orderOfIndexes.length;\n    }\n    /**\n     * Set default values for elements from `0` to `n`, where `n` is equal to the handled variable.\n     *\n     * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n     *\n     * @private\n     * @param {number} [length] Length of list.\n     */\n\n  }, {\n    key: \"setDefaultValues\",\n    value: function setDefaultValues() {\n      var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.indexedValues.length;\n      this.orderOfIndexes.length = 0;\n\n      _get(_getPrototypeOf(LinkedPhysicalIndexToValueMap.prototype), \"setDefaultValues\", this).call(this, length);\n    }\n    /**\n     * Add values to list and reorganize. It updates list of indexes related to ordered values.\n     *\n     * @private\n     * @param {number} insertionIndex Position inside the list.\n     * @param {Array} insertedIndexes List of inserted indexes.\n     */\n\n  }, {\n    key: \"insert\",\n    value: function insert(insertionIndex, insertedIndexes) {\n      this.indexedValues = getListWithInsertedItems(this.indexedValues, insertionIndex, insertedIndexes, this.initValueOrFn);\n      this.orderOfIndexes = getIncreasedIndexes(this.orderOfIndexes, insertedIndexes);\n\n      _get(_getPrototypeOf(LinkedPhysicalIndexToValueMap.prototype), \"insert\", this).call(this, insertionIndex, insertedIndexes);\n    }\n    /**\n     * Remove values from the list and reorganize. It updates list of indexes related to ordered values.\n     *\n     * @private\n     * @param {Array} removedIndexes List of removed indexes.\n     */\n\n  }, {\n    key: \"remove\",\n    value: function remove(removedIndexes) {\n      this.indexedValues = getListWithRemovedItems(this.indexedValues, removedIndexes);\n      this.orderOfIndexes = getListWithoutIndexes(this.orderOfIndexes, removedIndexes);\n      this.orderOfIndexes = getDecreasedIndexes(this.orderOfIndexes, removedIndexes);\n\n      _get(_getPrototypeOf(LinkedPhysicalIndexToValueMap.prototype), \"remove\", this).call(this, removedIndexes);\n    }\n    /**\n     * Get every entry containing index and value, respecting order of indexes.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getEntries\",\n    value: function getEntries() {\n      var _this3 = this;\n\n      return this.orderOfIndexes.map(function (physicalIndex) {\n        return [physicalIndex, _this3.getValueAtIndex(physicalIndex)];\n      });\n    }\n  }]);\n\n  return LinkedPhysicalIndexToValueMap;\n}(IndexMap);", "import \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { arrayFilter } from \"../../../helpers/array.mjs\";\n/**\n * Insert new items to the list.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {number} insertionIndex Position inside the actual list.\n * @param {Array} insertedIndexes List of inserted indexes.\n * @returns {Array} List with new mappings.\n */\n\nexport function getListWithInsertedItems(indexedValues, insertionIndex, insertedIndexes) {\n  return [].concat(_toConsumableArray(indexedValues.slice(0, insertionIndex)), _toConsumableArray(insertedIndexes), _toConsumableArray(indexedValues.slice(insertionIndex)));\n}\n/**\n * Filter items from the list.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {Array} removedIndexes List of removed indexes.\n * @returns {Array} Reduced list of mappings.\n */\n\nexport function getListWithRemovedItems(indexedValues, removedIndexes) {\n  return arrayFilter(indexedValues, function (index) {\n    return removedIndexes.includes(index) === false;\n  });\n}", "import \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport { arrayMap } from \"../../../helpers/array.mjs\";\n/**\n * Transform mappings after removal.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {Array} removedIndexes List of removed indexes.\n * @returns {Array} List with decreased indexes.\n */\n\nexport function getDecreasedIndexes(indexedValues, removedIndexes) {\n  return arrayMap(indexedValues, function (index) {\n    return index - removedIndexes.filter(function (removedIndex) {\n      return removedIndex < index;\n    }).length;\n  });\n}\n/**\n * Transform mappings after insertion.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {Array} insertedIndexes List of inserted indexes.\n * @returns {Array} List with increased indexes.\n */\n\nexport function getIncreasedIndexes(indexedValues, insertedIndexes) {\n  var firstInsertedIndex = insertedIndexes[0];\n  var amountOfIndexes = insertedIndexes.length;\n  return arrayMap(indexedValues, function (index) {\n    if (index >= firstInsertedIndex) {\n      return index + amountOfIndexes;\n    }\n\n    return index;\n  });\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { PhysicalIndexToValueMap } from \"./physicalIndexToValueMap.mjs\";\nimport { arrayReduce } from \"../../helpers/array.mjs\";\n/**\n * Map for storing mappings from an physical index to a boolean value. It stores information whether physical index is\n * NOT included in a dataset and skipped in the process of rendering.\n */\n\nexport var TrimmingMap = /*#__PURE__*/function (_PhysicalIndexToValue) {\n  _inherits(TrimmingMap, _PhysicalIndexToValue);\n\n  var _super = _createSuper(TrimmingMap);\n\n  function TrimmingMap() {\n    var initValueOrFn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    _classCallCheck(this, TrimmingMap);\n\n    return _super.call(this, initValueOrFn);\n  }\n  /**\n   * Get physical indexes which are trimmed.\n   *\n   * Note: Indexes marked as trimmed aren't included in a {@link DataMap} and aren't rendered.\n   *\n   * @returns {Array}\n   */\n\n\n  _createClass(TrimmingMap, [{\n    key: \"getTrimmedIndexes\",\n    value: function getTrimmedIndexes() {\n      return arrayReduce(this.getValues(), function (indexesList, isTrimmed, physicalIndex) {\n        if (isTrimmed) {\n          indexesList.push(physicalIndex);\n        }\n\n        return indexesList;\n      }, []);\n    }\n  }]);\n\n  return TrimmingMap;\n}(PhysicalIndexToValueMap);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { IndexMap } from \"./indexMap.mjs\";\nimport { getListWithRemovedItems, getListWithInsertedItems } from \"./utils/indexesSequence.mjs\";\nimport { getDecreasedIndexes, getIncreasedIndexes } from \"./utils/index.mjs\";\n/**\n * Map for storing mappings from an index to a physical index.\n *\n * It also updates the physical indexes (remaining in the map) on remove/add row or column action.\n */\n\nexport var IndexesSequence = /*#__PURE__*/function (_IndexMap) {\n  _inherits(IndexesSequence, _IndexMap);\n\n  var _super = _createSuper(IndexesSequence);\n\n  function IndexesSequence() {\n    _classCallCheck(this, IndexesSequence);\n\n    // Not handling custom init function or init value.\n    return _super.call(this, function (index) {\n      return index;\n    });\n  }\n  /**\n   * Add values to list and reorganize.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n\n\n  _createClass(IndexesSequence, [{\n    key: \"insert\",\n    value: function insert(insertionIndex, insertedIndexes) {\n      var listAfterUpdate = getIncreasedIndexes(this.indexedValues, insertedIndexes);\n      this.indexedValues = getListWithInsertedItems(listAfterUpdate, insertionIndex, insertedIndexes);\n\n      _get(_getPrototypeOf(IndexesSequence.prototype), \"insert\", this).call(this, insertionIndex, insertedIndexes);\n    }\n    /**\n     * Remove values from the list and reorganize.\n     *\n     * @private\n     * @param {Array} removedIndexes List of removed indexes.\n     */\n\n  }, {\n    key: \"remove\",\n    value: function remove(removedIndexes) {\n      var listAfterUpdate = getListWithRemovedItems(this.indexedValues, removedIndexes);\n      this.indexedValues = getDecreasedIndexes(listAfterUpdate, removedIndexes);\n\n      _get(_getPrototypeOf(IndexesSequence.prototype), \"remove\", this).call(this, removedIndexes);\n    }\n  }]);\n\n  return IndexesSequence;\n}(IndexMap);", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport { getDecreasedIndexes, getIncreasedIndexes } from \"./actionsOnIndexes.mjs\";\nimport { getListWithInsertedItems as sequenceStrategyInsert, getListWithRemovedItems as sequenceStrategyRemove } from \"./indexesSequence.mjs\";\nimport { getListWithInsertedItems as physicalStrategyInsert, getListWithRemovedItems as physicalStrategyRemove } from \"./physicallyIndexed.mjs\";\nvar alterStrategies = new Map([['indexesSequence', {\n  getListWithInsertedItems: sequenceStrategyInsert,\n  getListWithRemovedItems: sequenceStrategyRemove\n}], ['physicallyIndexed', {\n  getListWithInsertedItems: physicalStrategyInsert,\n  getListWithRemovedItems: physicalStrategyRemove\n}]]);\n\nvar alterUtilsFactory = function alterUtilsFactory(indexationStrategy) {\n  if (alterStrategies.has(indexationStrategy) === false) {\n    throw new Error(\"Alter strategy with ID '\".concat(indexationStrategy, \"' does not exist.\"));\n  }\n\n  return alterStrategies.get(indexationStrategy);\n};\n\nexport { getDecreasedIndexes, getIncreasedIndexes, alterUtilsFactory };", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { MapCollection } from \"./mapCollection.mjs\";\nimport { arrayMap } from \"../../helpers/array.mjs\";\nimport { isDefined } from \"../../helpers/mixed.mjs\";\n/**\n * Collection of maps. This collection aggregate maps with the same type of values. Values from the registered maps\n * can be used to calculate a single result for particular index.\n */\n\nexport var AggregatedCollection = /*#__PURE__*/function (_MapCollection) {\n  _inherits(AggregatedCollection, _MapCollection);\n\n  var _super = _createSuper(AggregatedCollection);\n\n  function AggregatedCollection(aggregationFunction, fallbackValue) {\n    var _this;\n\n    _classCallCheck(this, AggregatedCollection);\n\n    _this = _super.call(this);\n    /**\n     * List of merged values. Value for each index is calculated using values inside registered maps.\n     *\n     * @type {Array}\n     */\n\n    _this.mergedValuesCache = [];\n    /**\n     * Function which do aggregation on the values for particular index.\n     */\n\n    _this.aggregationFunction = aggregationFunction;\n    /**\n     * Fallback value when there is no calculated value for particular index.\n     */\n\n    _this.fallbackValue = fallbackValue;\n    return _this;\n  }\n  /**\n   * Get merged values for all indexes.\n   *\n   * @param {boolean} [readFromCache=true] Determine if read results from the cache.\n   * @returns {Array}\n   */\n\n\n  _createClass(AggregatedCollection, [{\n    key: \"getMergedValues\",\n    value: function getMergedValues() {\n      var readFromCache = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      if (readFromCache === true) {\n        return this.mergedValuesCache;\n      }\n\n      if (this.getLength() === 0) {\n        return [];\n      } // Below variable stores values for every particular map. Example describing situation when we have 2 registered maps,\n      // with length equal to 5.\n      //\n      // +---------+---------------------------------------------+\n      // |         |                  indexes                    |\n      // +---------+---------------------------------------------+\n      // |   maps  |     0    |   1   |    2  |   3   |    4     |\n      // +---------+----------+-------+-------+-------+----------+\n      // |    0    | [[ value,  value,  value,  value,  value ], |\n      // |    1    | [  value,  value,  value,  value,  value ]] |\n      // +---------+----------+-------+-------+-------+----------+\n\n\n      var mapsValuesMatrix = arrayMap(this.get(), function (map) {\n        return map.getValues();\n      }); // Below variable stores values for every particular index. Example describing situation when we have 2 registered maps,\n      // with length equal to 5.\n      //\n      // +---------+---------------------+\n      // |         |         maps        |\n      // +---------+---------------------+\n      // | indexes |     0    |    1     |\n      // +---------+----------+----------+\n      // |    0    | [[ value,  value ], |\n      // |    1    | [  value,  value ], |\n      // |    2    | [  value,  value ], |\n      // |    3    | [  value,  value ], |\n      // |    4    | [  value,  value ]] |\n      // +---------+----------+----------+\n\n      var indexesValuesMatrix = [];\n      var mapsLength = isDefined(mapsValuesMatrix[0]) && mapsValuesMatrix[0].length || 0;\n\n      for (var index = 0; index < mapsLength; index += 1) {\n        var valuesForIndex = [];\n\n        for (var mapIndex = 0; mapIndex < this.getLength(); mapIndex += 1) {\n          valuesForIndex.push(mapsValuesMatrix[mapIndex][index]);\n        }\n\n        indexesValuesMatrix.push(valuesForIndex);\n      }\n\n      return arrayMap(indexesValuesMatrix, this.aggregationFunction);\n    }\n    /**\n     * Get merged value for particular index.\n     *\n     * @param {number} index Index for which we calculate single result.\n     * @param {boolean} [readFromCache=true] Determine if read results from the cache.\n     * @returns {*}\n     */\n\n  }, {\n    key: \"getMergedValueAtIndex\",\n    value: function getMergedValueAtIndex(index, readFromCache) {\n      var valueAtIndex = this.getMergedValues(readFromCache)[index];\n      return isDefined(valueAtIndex) ? valueAtIndex : this.fallbackValue;\n    }\n    /**\n     * Rebuild cache for the collection.\n     */\n\n  }, {\n    key: \"updateCache\",\n    value: function updateCache() {\n      this.mergedValuesCache = this.getMergedValues(false);\n    }\n  }]);\n\n  return AggregatedCollection;\n}(MapCollection);", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.array.from.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { isUndefined, isDefined } from \"../../helpers/mixed.mjs\";\nimport { mixin } from \"../../helpers/object.mjs\";\nimport localHooks from \"../../mixins/localHooks.mjs\"; // Counter for checking if there is a memory leak.\n\nvar registeredMaps = 0;\n/**\n * Collection of index maps having unique names. It allow us to perform bulk operations such as init, remove, insert on all index maps that have been registered in the collection.\n */\n\nexport var MapCollection = /*#__PURE__*/function () {\n  function MapCollection() {\n    _classCallCheck(this, MapCollection);\n\n    /**\n     * Collection of index maps.\n     *\n     * @type {Map<string, IndexMap>}\n     */\n    this.collection = new Map();\n  }\n  /**\n   * Register custom index map.\n   *\n   * @param {string} uniqueName Unique name of the index map.\n   * @param {IndexMap} indexMap Index map containing miscellaneous (i.e. Meta data, indexes sequence), updated after remove and insert data actions.\n   */\n\n\n  _createClass(MapCollection, [{\n    key: \"register\",\n    value: function register(uniqueName, indexMap) {\n      var _this = this;\n\n      if (this.collection.has(uniqueName) === false) {\n        this.collection.set(uniqueName, indexMap);\n        indexMap.addLocalHook('change', function () {\n          return _this.runLocalHooks('change', indexMap);\n        });\n        registeredMaps += 1;\n      }\n    }\n    /**\n     * Unregister custom index map.\n     *\n     * @param {string} name Name of the index map.\n     */\n\n  }, {\n    key: \"unregister\",\n    value: function unregister(name) {\n      var indexMap = this.collection.get(name);\n\n      if (isDefined(indexMap)) {\n        indexMap.destroy();\n        this.collection.delete(name);\n        this.runLocalHooks('change', indexMap);\n        registeredMaps -= 1;\n      }\n    }\n    /**\n     * Unregisters and destroys all collected index map instances.\n     */\n\n  }, {\n    key: \"unregisterAll\",\n    value: function unregisterAll() {\n      var _this2 = this;\n\n      this.collection.forEach(function (indexMap, name) {\n        return _this2.unregister(name);\n      });\n      this.collection.clear();\n    }\n    /**\n     * Get index map for the provided name.\n     *\n     * @param {string} [name] Name of the index map.\n     * @returns {Array|IndexMap}\n     */\n\n  }, {\n    key: \"get\",\n    value: function get(name) {\n      if (isUndefined(name)) {\n        return Array.from(this.collection.values());\n      }\n\n      return this.collection.get(name);\n    }\n    /**\n     * Get collection size.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getLength\",\n    value: function getLength() {\n      return this.collection.size;\n    }\n    /**\n     * Remove some indexes and corresponding mappings and update values of the others within all collection's index maps.\n     *\n     * @private\n     * @param {Array} removedIndexes List of removed indexes.\n     */\n\n  }, {\n    key: \"removeFromEvery\",\n    value: function removeFromEvery(removedIndexes) {\n      this.collection.forEach(function (indexMap) {\n        indexMap.remove(removedIndexes);\n      });\n    }\n    /**\n     * Insert new indexes and corresponding mapping and update values of the others all collection's index maps.\n     *\n     * @private\n     * @param {number} insertionIndex Position inside the actual list.\n     * @param {Array} insertedIndexes List of inserted indexes.\n     */\n\n  }, {\n    key: \"insertToEvery\",\n    value: function insertToEvery(insertionIndex, insertedIndexes) {\n      this.collection.forEach(function (indexMap) {\n        indexMap.insert(insertionIndex, insertedIndexes);\n      });\n    }\n    /**\n     * Set default values to index maps within collection.\n     *\n     * @param {number} length Destination length for all stored maps.\n     */\n\n  }, {\n    key: \"initEvery\",\n    value: function initEvery(length) {\n      this.collection.forEach(function (indexMap) {\n        indexMap.init(length);\n      });\n    }\n  }]);\n\n  return MapCollection;\n}();\nmixin(MapCollection, localHooks);\n/**\n * @returns {number}\n */\n\nexport function getRegisteredMapsCounter() {\n  return registeredMaps;\n}", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.fill.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.weak-map.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\n\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\n\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\n\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\nimport { ChangesObserver } from \"./observer.mjs\";\nimport { arrayDiff } from \"./utils.mjs\";\n/**\n * The ChangesObservable module is an object that represents a resource that provides\n * the ability to observe the changes that happened in the index map indexes during\n * the code running.\n *\n * @private\n * @class ChangesObservable\n */\n\nvar _observers = /*#__PURE__*/new WeakMap();\n\nvar _indexMatrix = /*#__PURE__*/new WeakMap();\n\nvar _currentIndexState = /*#__PURE__*/new WeakMap();\n\nvar _isMatrixIndexesInitialized = /*#__PURE__*/new WeakMap();\n\nvar _initialIndexValue = /*#__PURE__*/new WeakMap();\n\nexport var ChangesObservable = /*#__PURE__*/function () {\n  /**\n   * The list of registered ChangesObserver instances.\n   *\n   * @type {ChangesObserver[]}\n   */\n\n  /**\n   * An array with default values that act as a base array that will be compared with\n   * the last saved index state. The changes are generated and immediately send through\n   * the newly created ChangesObserver object. Thanks to that, the observer initially has\n   * all information about what indexes are currently changed.\n   *\n   * @type {Array}\n   */\n\n  /**\n   * An array that holds the indexes state that is currently valid. The value is changed on every\n   * index mapper cache update.\n   *\n   * @type {Array}\n   */\n\n  /**\n   * The flag determines if the observable is initialized or not. Not initialized object creates\n   * index matrix once while emitting new changes.\n   *\n   * @type {boolean}\n   */\n\n  /**\n   * The initial index value allows control from what value the index matrix array will be created.\n   * Changing that value changes how the array diff generates the changes for the initial data\n   * sent to the subscribers. For example, the changes can be triggered by detecting the changes\n   * from `false` to `true` value or vice versa. Generally, it depends on which index map type\n   * the Observable will work with. For \"hiding\" or \"trimming\" index types, it will be boolean\n   * values. For various index maps, it can be anything, but I suspect that the most appropriate\n   * initial value will be \"undefined\" in that case.\n   *\n   * @type {boolean}\n   */\n  function ChangesObservable() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        initialIndexValue = _ref.initialIndexValue;\n\n    _classCallCheck(this, ChangesObservable);\n\n    _classPrivateFieldInitSpec(this, _observers, {\n      writable: true,\n      value: new Set()\n    });\n\n    _classPrivateFieldInitSpec(this, _indexMatrix, {\n      writable: true,\n      value: []\n    });\n\n    _classPrivateFieldInitSpec(this, _currentIndexState, {\n      writable: true,\n      value: []\n    });\n\n    _classPrivateFieldInitSpec(this, _isMatrixIndexesInitialized, {\n      writable: true,\n      value: false\n    });\n\n    _classPrivateFieldInitSpec(this, _initialIndexValue, {\n      writable: true,\n      value: false\n    });\n\n    _classPrivateFieldSet(this, _initialIndexValue, initialIndexValue !== null && initialIndexValue !== void 0 ? initialIndexValue : false);\n  }\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n\n  /**\n   * Creates and returns a new instance of the ChangesObserver object. The resource\n   * allows subscribing to the index changes that during the code running may change.\n   * Changes are emitted as an array of the index change. Each change is represented\n   * separately as an object with `op`, `index`, `oldValue`, and `newValue` props.\n   *\n   * For example:\n   * ```\n   * [\n   *   { op: 'replace', index: 1, oldValue: false, newValue: true },\n   *   { op: 'replace', index: 3, oldValue: false, newValue: true },\n   *   { op: 'insert', index: 4, oldValue: false, newValue: true },\n   * ]\n   * // or when the new index map changes have less indexes\n   * [\n   *   { op: 'replace', index: 1, oldValue: false, newValue: true },\n   *   { op: 'remove', index: 4, oldValue: false, newValue: true },\n   * ]\n   * ```\n   *\n   * @returns {ChangesObserver}\n   */\n\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n\n\n  _createClass(ChangesObservable, [{\n    key: \"createObserver\",\n    value: function createObserver() {\n      var _this = this;\n\n      var observer = new ChangesObserver();\n\n      _classPrivateFieldGet(this, _observers).add(observer);\n\n      observer.addLocalHook('unsubscribe', function () {\n        _classPrivateFieldGet(_this, _observers).delete(observer);\n      });\n\n      observer._writeInitialChanges(arrayDiff(_classPrivateFieldGet(this, _indexMatrix), _classPrivateFieldGet(this, _currentIndexState)));\n\n      return observer;\n    }\n    /**\n     * The method is an entry point for triggering new index map changes. Emitting the\n     * changes triggers comparing algorithm which compares last saved state with a new\n     * state. When there are some differences, the changes are sent to all subscribers.\n     *\n     * @param {Array} indexesState An array with index map state.\n     */\n\n  }, {\n    key: \"emit\",\n    value: function emit(indexesState) {\n      var currentIndexState = _classPrivateFieldGet(this, _currentIndexState);\n\n      if (!_classPrivateFieldGet(this, _isMatrixIndexesInitialized) || _classPrivateFieldGet(this, _indexMatrix).length !== indexesState.length) {\n        if (indexesState.length === 0) {\n          indexesState = new Array(currentIndexState.length).fill(_classPrivateFieldGet(this, _initialIndexValue));\n        } else {\n          _classPrivateFieldSet(this, _indexMatrix, new Array(indexesState.length).fill(_classPrivateFieldGet(this, _initialIndexValue)));\n        }\n\n        if (!_classPrivateFieldGet(this, _isMatrixIndexesInitialized)) {\n          _classPrivateFieldSet(this, _isMatrixIndexesInitialized, true);\n\n          currentIndexState = _classPrivateFieldGet(this, _indexMatrix);\n        }\n      }\n\n      var changes = arrayDiff(currentIndexState, indexesState);\n\n      _classPrivateFieldGet(this, _observers).forEach(function (observer) {\n        return observer._write(changes);\n      });\n\n      _classPrivateFieldSet(this, _currentIndexState, indexesState);\n    }\n  }]);\n\n  return ChangesObservable;\n}();", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\n\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\n\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\n\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n\nimport { mixin } from \"../../helpers/object.mjs\";\nimport localHooks from \"../../mixins/localHooks.mjs\";\n/**\n * The ChangesObserver module is an object that represents a disposable resource\n * provided by the ChangesObservable module.\n *\n * @private\n * @class ChangesObserver\n */\n\nvar _currentInitialChanges = /*#__PURE__*/new WeakMap();\n\nexport var ChangesObserver = /*#__PURE__*/function () {\n  function ChangesObserver() {\n    _classCallCheck(this, ChangesObserver);\n\n    _classPrivateFieldInitSpec(this, _currentInitialChanges, {\n      writable: true,\n      value: []\n    });\n  }\n\n  _createClass(ChangesObserver, [{\n    key: \"subscribe\",\n    value:\n    /**\n     * Subscribes to the observer.\n     *\n     * @param {Function} callback A function that will be called when the new changes will appear.\n     * @returns {ChangesObserver}\n     */\n    function subscribe(callback) {\n      this.addLocalHook('change', callback);\n\n      this._write(_classPrivateFieldGet(this, _currentInitialChanges));\n\n      return this;\n    }\n    /**\n     * Unsubscribes all subscriptions. After the method call, the observer would not produce\n     * any new events.\n     *\n     * @returns {ChangesObserver}\n     */\n\n  }, {\n    key: \"unsubscribe\",\n    value: function unsubscribe() {\n      this.runLocalHooks('unsubscribe');\n      this.clearLocalHooks();\n      return this;\n    }\n    /**\n     * The write method is executed by the ChangesObservable module. The module produces all\n     * changes events that are distributed further by the observer.\n     *\n     * @private\n     * @param {object} changes The chunk of changes produced by the ChangesObservable module.\n     * @returns {ChangesObserver}\n     */\n\n  }, {\n    key: \"_write\",\n    value: function _write(changes) {\n      if (changes.length > 0) {\n        this.runLocalHooks('change', changes);\n      }\n\n      return this;\n    }\n    /**\n     * The write method is executed by the ChangesObservable module. The module produces initial\n     * changes that will be used to notify new subscribers.\n     *\n     * @private\n     * @param {object} initialChanges The chunk of changes produced by the ChangesObservable module.\n     */\n\n  }, {\n    key: \"_writeInitialChanges\",\n    value: function _writeInitialChanges(initialChanges) {\n      _classPrivateFieldSet(this, _currentInitialChanges, initialChanges);\n    }\n  }]);\n\n  return ChangesObserver;\n}();\nmixin(ChangesObserver, localHooks);", "/**\n * An array diff implementation. The function iterates through the arrays and depends\n * on the diff results, collect the changes as a list of the objects.\n *\n * Each object contains information about the differences in the indexes of the arrays.\n * The changes also contain data about the new and previous array values.\n *\n * @private\n * @param {Array} baseArray The base array to diff from.\n * @param {Array} newArray The new array to compare with.\n * @returns {Array}\n */\nexport function arrayDiff(baseArray, newArray) {\n  var changes = [];\n  var i = 0;\n  var j = 0;\n  /* eslint-disable no-plusplus */\n\n  for (; i < baseArray.length && j < newArray.length; i++, j++) {\n    if (baseArray[i] !== newArray[j]) {\n      changes.push({\n        op: 'replace',\n        index: j,\n        oldValue: baseArray[i],\n        newValue: newArray[j]\n      });\n    }\n  }\n\n  for (; i < newArray.length; i++) {\n    changes.push({\n      op: 'insert',\n      index: i,\n      oldValue: void 0,\n      newValue: newArray[i]\n    });\n  }\n\n  for (; j < baseArray.length; j++) {\n    changes.push({\n      op: 'remove',\n      index: j,\n      oldValue: baseArray[j],\n      newValue: void 0\n    });\n  }\n\n  return changes;\n}", "var _templateObject;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\nimport { isUndefined, isDefined } from \"./../helpers/mixed.mjs\";\nimport { objectEach } from \"./../helpers/object.mjs\";\nimport { error } from \"./../helpers/console.mjs\";\nimport { toSingleLine } from \"./../helpers/templateLiteralTag.mjs\";\n/**\n * Perform shallow extend of a target object with only this extension's properties which doesn't exist in the target.\n *\n * TODO: Maybe it should be moved to global helpers? It's changed `extend` function.\n *\n * @param {object} target An object that will receive the new properties.\n * @param {object} extension An object containing additional properties to merge into the target.\n * @returns {object}\n */\n\nexport function extendNotExistingKeys(target, extension) {\n  objectEach(extension, function (value, key) {\n    if (isUndefined(target[key])) {\n      target[key] = value;\n    }\n  });\n  return target;\n}\n/**\n * Create range of values basing on cell indexes. For example, it will create below ranges for specified function arguments:\n *\n * createCellHeadersRange(2, 7) => `2-7`\n * createCellHeadersRange(7, 2) => `2-7`\n * createCellHeadersRange(0, 4, 'A', 'D') => `A-D`\n * createCellHeadersRange(4, 0, 'D', 'A') => `A-D`.\n *\n * @param {number} firstRowIndex Index of \"first\" cell.\n * @param {number} nextRowIndex Index of \"next\" cell.\n * @param {*} fromValue Value which will represent \"first\" cell.\n * @param {*} toValue Value which will represent \"next\" cell.\n * @returns {string} Value representing range i.e. A-Z, 11-15.\n */\n\nexport function createCellHeadersRange(firstRowIndex, nextRowIndex) {\n  var fromValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : firstRowIndex;\n  var toValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : nextRowIndex;\n  // Will swap `fromValue` with `toValue` if it's necessary.\n  var from = fromValue,\n      to = toValue;\n\n  if (firstRowIndex > nextRowIndex) {\n    var _ref = [to, from];\n    from = _ref[0];\n    to = _ref[1];\n  }\n\n  return \"\".concat(from, \"-\").concat(to);\n}\n/**\n * Normalize language code. It takes handled languageCode proposition and change it to proper languageCode.\n * For example, when it takes `eN-us` as parameter it return `en-US`.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {string}\n */\n\nexport function normalizeLanguageCode(languageCode) {\n  var languageCodePattern = /^([a-zA-Z]{2})-([a-zA-Z]{2})$/;\n  var partsOfLanguageCode = languageCodePattern.exec(languageCode);\n\n  if (partsOfLanguageCode) {\n    return \"\".concat(partsOfLanguageCode[1].toLowerCase(), \"-\").concat(partsOfLanguageCode[2].toUpperCase());\n  }\n\n  return languageCode;\n}\n/**\n *\n * Warn user if there is no registered language.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n */\n\nexport function warnUserAboutLanguageRegistration(languageCode) {\n  if (isDefined(languageCode)) {\n    error(toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"Language with code \\\"\", \"\\\" was not found. You should register particular language \\n    before using it. Read more about this issue at: https://docs.handsontable.com/i18n/missing-language-code.\"], [\"Language with code \\\"\", \"\\\" was not found. You should register particular language\\\\x20\\n    before using it. Read more about this issue at: https://docs.handsontable.com/i18n/missing-language-code.\"])), languageCode));\n  }\n}", "import \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\n\n/**\n * Try to choose plural form from available phrase propositions.\n *\n * @param {Array} phrasePropositions List of phrases propositions.\n * @param {number} pluralForm Number determining which phrase form should be used.\n *\n * @returns {string|Array} One particular phrase if it's possible, list of unchanged phrase propositions otherwise.\n */\nexport default function pluralize(phrasePropositions, pluralForm) {\n  var isPluralizable = Array.isArray(phrasePropositions) && Number.isInteger(pluralForm);\n\n  if (isPluralizable) {\n    return phrasePropositions[pluralForm];\n  }\n\n  return phrasePropositions;\n}", "import staticRegister from \"./../../utils/staticRegister.mjs\";\nimport pluralizeFn from \"./pluralize.mjs\";\n\nvar _staticRegister = staticRegister('phraseFormatters'),\n    registerGloballyPhraseFormatter = _staticRegister.register,\n    getGlobalPhraseFormatters = _staticRegister.getValues;\n/**\n * Register phrase formatter.\n *\n * @param {string} name Name of formatter.\n * @param {Function} formatterFn Function which will be applied on phrase propositions. It will transform them if it's possible.\n */\n\n\nexport function register(name, formatterFn) {\n  registerGloballyPhraseFormatter(name, formatterFn);\n}\n/**\n * Get all registered previously formatters.\n *\n * @returns {Array}\n */\n\nexport function getAll() {\n  return getGlobalPhraseFormatters();\n}\nexport { register as registerPhraseFormatter, getAll as getPhraseFormatters };\nregister('pluralize', pluralizeFn);", "/**\n * Constants for parts of translation.\n */\nexport var CONTEXT_MENU_ITEMS_NAMESPACE = 'ContextMenu:items';\nexport var CONTEXTMENU_ITEMS_NO_ITEMS = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".noItems\");\nexport var CONTEXTMENU_ITEMS_ROW_ABOVE = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".insertRowAbove\");\nexport var CONTEXTMENU_ITEMS_ROW_BELOW = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".insertRowBelow\");\nexport var CONTEXTMENU_ITEMS_INSERT_LEFT = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".insertColumnOnTheLeft\");\nexport var CONTEXTMENU_ITEMS_INSERT_RIGHT = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".insertColumnOnTheRight\");\nexport var CONTEXTMENU_ITEMS_REMOVE_ROW = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".removeRow\");\nexport var CONTEXTMENU_ITEMS_REMOVE_COLUMN = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".removeColumn\");\nexport var CONTEXTMENU_ITEMS_UNDO = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".undo\");\nexport var CONTEXTMENU_ITEMS_REDO = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".redo\");\nexport var CONTEXTMENU_ITEMS_READ_ONLY = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".readOnly\");\nexport var CONTEXTMENU_ITEMS_CLEAR_COLUMN = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".clearColumn\");\nexport var CONTEXTMENU_ITEMS_COPY = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".copy\");\nexport var CONTEXTMENU_ITEMS_CUT = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".cut\");\nexport var CONTEXTMENU_ITEMS_FREEZE_COLUMN = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".freezeColumn\");\nexport var CONTEXTMENU_ITEMS_UNFREEZE_COLUMN = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".unfreezeColumn\");\nexport var CONTEXTMENU_ITEMS_MERGE_CELLS = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".mergeCells\");\nexport var CONTEXTMENU_ITEMS_UNMERGE_CELLS = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".unmergeCells\");\nexport var CONTEXTMENU_ITEMS_ADD_COMMENT = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".addComment\");\nexport var CONTEXTMENU_ITEMS_EDIT_COMMENT = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".editComment\");\nexport var CONTEXTMENU_ITEMS_REMOVE_COMMENT = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".removeComment\");\nexport var CONTEXTMENU_ITEMS_READ_ONLY_COMMENT = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".readOnlyComment\");\nexport var CONTEXTMENU_ITEMS_ALIGNMENT = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".align\");\nexport var CONTEXTMENU_ITEMS_ALIGNMENT_LEFT = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".align.left\");\nexport var CONTEXTMENU_ITEMS_ALIGNMENT_CENTER = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".align.center\");\nexport var CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".align.right\");\nexport var CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".align.justify\");\nexport var CONTEXTMENU_ITEMS_ALIGNMENT_TOP = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".align.top\");\nexport var CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".align.middle\");\nexport var CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".align.bottom\");\nexport var CONTEXTMENU_ITEMS_BORDERS = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".borders\");\nexport var CONTEXTMENU_ITEMS_BORDERS_TOP = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".borders.top\");\nexport var CONTEXTMENU_ITEMS_BORDERS_RIGHT = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".borders.right\");\nexport var CONTEXTMENU_ITEMS_BORDERS_BOTTOM = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".borders.bottom\");\nexport var CONTEXTMENU_ITEMS_BORDERS_LEFT = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".borders.left\");\nexport var CONTEXTMENU_ITEMS_REMOVE_BORDERS = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".borders.remove\");\nexport var CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".nestedHeaders.insertChildRow\"); // eslint-disable-line max-len\n\nexport var CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".nestedHeaders.detachFromParent\"); // eslint-disable-line max-len\n\nexport var CONTEXTMENU_ITEMS_HIDE_COLUMN = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".hideColumn\");\nexport var CONTEXTMENU_ITEMS_SHOW_COLUMN = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".showColumn\");\nexport var CONTEXTMENU_ITEMS_HIDE_ROW = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".hideRow\");\nexport var CONTEXTMENU_ITEMS_SHOW_ROW = \"\".concat(CONTEXT_MENU_ITEMS_NAMESPACE, \".showRow\");\nexport var FILTERS_NAMESPACE = 'Filters:';\nexport var FILTERS_CONDITIONS_NAMESPACE = \"\".concat(FILTERS_NAMESPACE, \"conditions\");\nexport var FILTERS_CONDITIONS_NONE = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".none\");\nexport var FILTERS_CONDITIONS_EMPTY = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".isEmpty\");\nexport var FILTERS_CONDITIONS_NOT_EMPTY = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".isNotEmpty\");\nexport var FILTERS_CONDITIONS_EQUAL = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".isEqualTo\");\nexport var FILTERS_CONDITIONS_NOT_EQUAL = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".isNotEqualTo\");\nexport var FILTERS_CONDITIONS_BEGINS_WITH = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".beginsWith\");\nexport var FILTERS_CONDITIONS_ENDS_WITH = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".endsWith\");\nexport var FILTERS_CONDITIONS_CONTAINS = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".contains\");\nexport var FILTERS_CONDITIONS_NOT_CONTAIN = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".doesNotContain\");\nexport var FILTERS_CONDITIONS_BY_VALUE = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".byValue\");\nexport var FILTERS_CONDITIONS_GREATER_THAN = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".greaterThan\");\nexport var FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".greaterThanOrEqualTo\");\nexport var FILTERS_CONDITIONS_LESS_THAN = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".lessThan\");\nexport var FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".lessThanOrEqualTo\");\nexport var FILTERS_CONDITIONS_BETWEEN = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".isBetween\");\nexport var FILTERS_CONDITIONS_NOT_BETWEEN = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".isNotBetween\");\nexport var FILTERS_CONDITIONS_AFTER = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".after\");\nexport var FILTERS_CONDITIONS_BEFORE = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".before\");\nexport var FILTERS_CONDITIONS_TODAY = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".today\");\nexport var FILTERS_CONDITIONS_TOMORROW = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".tomorrow\");\nexport var FILTERS_CONDITIONS_YESTERDAY = \"\".concat(FILTERS_CONDITIONS_NAMESPACE, \".yesterday\");\nexport var FILTERS_DIVS_FILTER_BY_CONDITION = \"\".concat(FILTERS_NAMESPACE, \"labels.filterByCondition\");\nexport var FILTERS_DIVS_FILTER_BY_VALUE = \"\".concat(FILTERS_NAMESPACE, \"labels.filterByValue\");\nexport var FILTERS_LABELS_CONJUNCTION = \"\".concat(FILTERS_NAMESPACE, \"labels.conjunction\");\nexport var FILTERS_LABELS_DISJUNCTION = \"\".concat(FILTERS_NAMESPACE, \"labels.disjunction\");\nexport var FILTERS_VALUES_BLANK_CELLS = \"\".concat(FILTERS_NAMESPACE, \"values.blankCells\");\nexport var FILTERS_BUTTONS_SELECT_ALL = \"\".concat(FILTERS_NAMESPACE, \"buttons.selectAll\");\nexport var FILTERS_BUTTONS_CLEAR = \"\".concat(FILTERS_NAMESPACE, \"buttons.clear\");\nexport var FILTERS_BUTTONS_OK = \"\".concat(FILTERS_NAMESPACE, \"buttons.ok\");\nexport var FILTERS_BUTTONS_CANCEL = \"\".concat(FILTERS_NAMESPACE, \"buttons.cancel\");\nexport var FILTERS_BUTTONS_PLACEHOLDER_SEARCH = \"\".concat(FILTERS_NAMESPACE, \"buttons.placeholder.search\");\nexport var FILTERS_BUTTONS_PLACEHOLDER_VALUE = \"\".concat(FILTERS_NAMESPACE, \"buttons.placeholder.value\");\nexport var FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE = \"\".concat(FILTERS_NAMESPACE, \"buttons.placeholder.secondValue\");", "var _dictionary;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * @preserve\n * Authors: Handsoncode\n * Last updated: Nov 15, 2017\n *\n * Description: Definition file for English - United States language-country.\n */\nimport * as C from \"../constants.mjs\";\nvar dictionary = (_dictionary = {\n  languageCode: 'en-US'\n}, _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_NO_ITEMS, 'No available options'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ROW_ABOVE, 'Insert row above'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ROW_BELOW, 'Insert row below'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_INSERT_LEFT, 'Insert column left'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_INSERT_RIGHT, 'Insert column right'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_REMOVE_ROW, ['Remove row', 'Remove rows']), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_REMOVE_COLUMN, ['Remove column', 'Remove columns']), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_UNDO, 'Undo'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_REDO, 'Redo'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_READ_ONLY, 'Read only'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_CLEAR_COLUMN, 'Clear column'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT, 'Alignment'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT, 'Left'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER, 'Center'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT, 'Right'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY, 'Justify'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_TOP, 'Top'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE, 'Middle'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM, 'Bottom'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_FREEZE_COLUMN, 'Freeze column'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN, 'Unfreeze column'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_BORDERS, 'Borders'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_BORDERS_TOP, 'Top'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_BORDERS_RIGHT, 'Right'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_BORDERS_BOTTOM, 'Bottom'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_BORDERS_LEFT, 'Left'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_REMOVE_BORDERS, 'Remove border(s)'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ADD_COMMENT, 'Add comment'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_EDIT_COMMENT, 'Edit comment'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_REMOVE_COMMENT, 'Delete comment'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT, 'Read-only comment'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_MERGE_CELLS, 'Merge cells'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_UNMERGE_CELLS, 'Unmerge cells'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_COPY, 'Copy'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_CUT, 'Cut'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD, 'Insert child row'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD, 'Detach from parent'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_HIDE_COLUMN, ['Hide column', 'Hide columns']), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_SHOW_COLUMN, ['Show column', 'Show columns']), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_HIDE_ROW, ['Hide row', 'Hide rows']), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_SHOW_ROW, ['Show row', 'Show rows']), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_NONE, 'None'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_EMPTY, 'Is empty'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_NOT_EMPTY, 'Is not empty'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_EQUAL, 'Is equal to'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_NOT_EQUAL, 'Is not equal to'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_BEGINS_WITH, 'Begins with'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_ENDS_WITH, 'Ends with'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_CONTAINS, 'Contains'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_NOT_CONTAIN, 'Does not contain'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_GREATER_THAN, 'Greater than'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL, 'Greater than or equal to'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_LESS_THAN, 'Less than'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL, 'Less than or equal to'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_BETWEEN, 'Is between'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_NOT_BETWEEN, 'Is not between'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_AFTER, 'After'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_BEFORE, 'Before'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_TODAY, 'Today'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_TOMORROW, 'Tomorrow'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_YESTERDAY, 'Yesterday'), _defineProperty(_dictionary, C.FILTERS_VALUES_BLANK_CELLS, 'Blank cells'), _defineProperty(_dictionary, C.FILTERS_DIVS_FILTER_BY_CONDITION, 'Filter by condition'), _defineProperty(_dictionary, C.FILTERS_DIVS_FILTER_BY_VALUE, 'Filter by value'), _defineProperty(_dictionary, C.FILTERS_LABELS_CONJUNCTION, 'And'), _defineProperty(_dictionary, C.FILTERS_LABELS_DISJUNCTION, 'Or'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_SELECT_ALL, 'Select all'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_CLEAR, 'Clear'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_OK, 'OK'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_CANCEL, 'Cancel'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_PLACEHOLDER_SEARCH, 'Search'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_PLACEHOLDER_VALUE, 'Value'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE, 'Second value'), _dictionary);\nexport default dictionary;", "import { isObject, deepClone } from \"../helpers/object.mjs\";\nimport { arrayEach } from \"./../helpers/array.mjs\";\nimport { isUndefined } from \"../helpers/mixed.mjs\";\nimport { extendNotExistingKeys, normalizeLanguageCode, warnUserAboutLanguageRegistration } from \"./utils.mjs\";\nimport staticRegister from \"../utils/staticRegister.mjs\";\nimport { getPhraseFormatters } from \"./phraseFormatters/index.mjs\";\nimport DEFAULT_DICTIONARY from \"./languages/en-US.mjs\";\nimport * as _dictionaryKeys from \"./constants.mjs\";\nexport { _dictionaryKeys as dictionaryKeys };\nexport var DEFAULT_LANGUAGE_CODE = DEFAULT_DICTIONARY.languageCode;\n\nvar _staticRegister = staticRegister('languagesDictionaries'),\n    registerGloballyLanguageDictionary = _staticRegister.register,\n    getGlobalLanguageDictionary = _staticRegister.getItem,\n    hasGlobalLanguageDictionary = _staticRegister.hasItem,\n    getGlobalLanguagesDictionaries = _staticRegister.getValues;\n/**\n * Register automatically the default language dictionary.\n */\n\n\nregisterLanguageDictionary(DEFAULT_DICTIONARY);\n/**\n * Register language dictionary for specific language code.\n *\n * @param {string|object} languageCodeOrDictionary Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE' or object representing dictionary.\n * @param {object} dictionary Dictionary for specific language (optional if first parameter has already dictionary).\n * @returns {object}\n */\n\nexport function registerLanguageDictionary(languageCodeOrDictionary, dictionary) {\n  var languageCode = languageCodeOrDictionary;\n  var dictionaryObject = dictionary; // Dictionary passed as first argument.\n\n  if (isObject(languageCodeOrDictionary)) {\n    dictionaryObject = languageCodeOrDictionary;\n    languageCode = dictionaryObject.languageCode;\n  }\n\n  extendLanguageDictionary(languageCode, dictionaryObject);\n  registerGloballyLanguageDictionary(languageCode, deepClone(dictionaryObject)); // We do not allow user to work with dictionary by reference, it can cause lot of bugs.\n\n  return deepClone(dictionaryObject);\n}\n/**\n * Extend handled dictionary by default language dictionary. As result, if any dictionary key isn't defined for specific language, it will be filled with default language value (\"dictionary gaps\" are supplemented).\n *\n * @private\n * @param {string} languageCode Language code.\n * @param {object} dictionary Dictionary which is extended.\n */\n\nfunction extendLanguageDictionary(languageCode, dictionary) {\n  if (languageCode !== DEFAULT_LANGUAGE_CODE) {\n    extendNotExistingKeys(dictionary, getGlobalLanguageDictionary(DEFAULT_LANGUAGE_CODE));\n  }\n}\n/**\n * Get language dictionary for specific language code.\n *\n * @param {string} languageCode Language code.\n * @returns {object} Object with constants representing identifiers for translation (as keys) and corresponding translation phrases (as values).\n */\n\n\nexport function getLanguageDictionary(languageCode) {\n  if (!hasLanguageDictionary(languageCode)) {\n    return null;\n  }\n\n  return deepClone(getGlobalLanguageDictionary(languageCode));\n}\n/**\n *\n * Get if language with specified language code was registered.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {boolean}\n */\n\nexport function hasLanguageDictionary(languageCode) {\n  return hasGlobalLanguageDictionary(languageCode);\n}\n/**\n * Get default language dictionary.\n *\n * @returns {object} Object with constants representing identifiers for translation (as keys) and corresponding translation phrases (as values).\n */\n\nexport function getDefaultLanguageDictionary() {\n  return DEFAULT_DICTIONARY;\n}\n/**\n * Get registered language dictionaries.\n *\n * @returns {Array}\n */\n\nexport function getLanguagesDictionaries() {\n  return getGlobalLanguagesDictionaries();\n}\n/**\n * Get phrase for specified dictionary key.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @param {string} dictionaryKey Constant which is dictionary key.\n * @param {*} argumentsForFormatters Arguments which will be handled by formatters.\n *\n * @returns {string}\n */\n\nexport function getTranslatedPhrase(languageCode, dictionaryKey, argumentsForFormatters) {\n  var languageDictionary = getLanguageDictionary(languageCode);\n\n  if (languageDictionary === null) {\n    return null;\n  }\n\n  var phrasePropositions = languageDictionary[dictionaryKey];\n\n  if (isUndefined(phrasePropositions)) {\n    return null;\n  }\n\n  var formattedPhrase = getFormattedPhrase(phrasePropositions, argumentsForFormatters);\n\n  if (Array.isArray(formattedPhrase)) {\n    return formattedPhrase[0];\n  }\n\n  return formattedPhrase;\n}\n/**\n * Get formatted phrase from phrases propositions for specified dictionary key.\n *\n * @private\n * @param {Array|string} phrasePropositions List of phrase propositions.\n * @param {*} argumentsForFormatters Arguments which will be handled by formatters.\n *\n * @returns {Array|string}\n */\n\nfunction getFormattedPhrase(phrasePropositions, argumentsForFormatters) {\n  var formattedPhrasePropositions = phrasePropositions;\n  arrayEach(getPhraseFormatters(), function (formatter) {\n    formattedPhrasePropositions = formatter(phrasePropositions, argumentsForFormatters);\n  });\n  return formattedPhrasePropositions;\n}\n/**\n * Returns valid language code. If the passed language code doesn't exist default one will be used.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {string}\n */\n\n\nexport function getValidLanguageCode(languageCode) {\n  var normalizedLanguageCode = normalizeLanguageCode(languageCode);\n\n  if (!hasLanguageDictionary(normalizedLanguageCode)) {\n    normalizedLanguageCode = DEFAULT_LANGUAGE_CODE;\n    warnUserAboutLanguageRegistration(languageCode);\n  }\n\n  return normalizedLanguageCode;\n}", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport EventManager from \"../eventManager.mjs\";\nimport { isCtrlMetaKey, isKey } from \"../helpers/unicode.mjs\";\nvar eventManager = new EventManager();\nvar pressedKeys = new Set();\nvar refCount = 0;\n/**\n * Begins observing keyboard keys states.\n *\n * @param {Document} rootDocument The document owner.\n */\n\nfunction startObserving(rootDocument) {\n  if (refCount === 0) {\n    eventManager.addEventListener(rootDocument, 'keydown', function (event) {\n      if (!pressedKeys.has(event.keyCode)) {\n        pressedKeys.add(event.keyCode);\n      }\n    });\n    eventManager.addEventListener(rootDocument, 'keyup', function (event) {\n      if (pressedKeys.has(event.keyCode)) {\n        pressedKeys.delete(event.keyCode);\n      }\n    });\n    eventManager.addEventListener(rootDocument, 'visibilitychange', function () {\n      if (rootDocument.hidden) {\n        pressedKeys.clear();\n      }\n    });\n    eventManager.addEventListener(rootDocument.defaultView, 'blur', function () {\n      pressedKeys.clear();\n    });\n  }\n\n  refCount += 1;\n}\n/**\n * Stops observing keyboard keys states and clear all previously saved states.\n */\n\n\nfunction stopObserving() {\n  if (refCount > 0) {\n    refCount -= 1;\n  }\n\n  if (refCount === 0) {\n    _resetState();\n  }\n}\n/**\n * Remove all listeners attached to the DOM and clear all previously saved states.\n */\n\n\nfunction _resetState() {\n  eventManager.clearEvents();\n  pressedKeys.clear();\n  refCount = 0;\n}\n/**\n * Checks if provided keyCode or keyCodes are pressed.\n *\n * @param {string} keyCodes The key codes passed as a string defined in helpers/unicode.js file delimited with '|'.\n * @returns {boolean}\n */\n\n\nfunction isPressed(keyCodes) {\n  return Array.from(pressedKeys.values()).some(function (_keyCode) {\n    return isKey(_keyCode, keyCodes);\n  });\n}\n/**\n * Checks if ctrl keys are pressed.\n *\n * @returns {boolean}\n */\n\n\nfunction isPressedCtrlKey() {\n  var values = Array.from(pressedKeys.values());\n  return values.some(function (_keyCode) {\n    return isCtrlMetaKey(_keyCode);\n  });\n}\n/**\n * Returns reference count. Useful for debugging and testing purposes.\n *\n * @returns {number}\n */\n\n\nfunction _getRefCount() {\n  return refCount;\n}\n\nexport { _getRefCount, _resetState, isPressed, isPressedCtrlKey, startObserving, stopObserving };", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport \"core-js/modules/es.array.fill.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { createHighlight } from \"./types/index.mjs\";\nimport { ACTIVE_HEADER_TYPE, AREA_TYPE, CELL_TYPE, CUSTOM_SELECTION_TYPE, FILL_TYPE, HEADER_TYPE } from \"./constants.mjs\";\nimport { arrayEach } from \"./../../helpers/array.mjs\";\n/**\n * Highlight class responsible for managing Walkontable Selection classes.\n *\n * With Highlight object you can manipulate four different highlight types:\n *  - `cell` can be added only to a single cell at a time and it defines currently selected cell;\n *  - `fill` can occur only once and its highlight defines selection of autofill functionality (managed by the plugin with the same name);\n *  - `areas` can be added to multiple cells at a time. This type highlights selected cell or multiple cells.\n *    The multiple cells have to be defined as an uninterrupted order (regular shape). Otherwise, the new layer of\n *    that type should be created to manage not-consecutive selection;\n *  - `header` can occur multiple times. This type is designed to highlight only headers. Like `area` type it\n *    can appear with multiple highlights (accessed under different level layers).\n *\n * @class Highlight\n * @util\n */\n\nvar Highlight = /*#__PURE__*/function (_Symbol$iterator) {\n  function Highlight(options) {\n    _classCallCheck(this, Highlight);\n\n    /**\n     * Options consumed by Highlight class and Walkontable Selection classes.\n     *\n     * @type {object}\n     */\n    this.options = options;\n    /**\n     * The property which describes which layer level of the visual selection will be modified.\n     * This option is valid only for `area` and `header` highlight types which occurs multiple times on\n     * the table (as a non-consecutive selection).\n     *\n     * An order of the layers is the same as the order of added new non-consecutive selections.\n     *\n     * @type {number}\n     * @default 0\n     */\n\n    this.layerLevel = 0;\n    /**\n     * `cell` highlight object which describes attributes for the currently selected cell.\n     * It can only occur only once on the table.\n     *\n     * @type {Selection}\n     */\n\n    this.cell = createHighlight(CELL_TYPE, options);\n    /**\n     * `fill` highlight object which describes attributes for the borders for autofill functionality.\n     * It can only occur only once on the table.\n     *\n     * @type {Selection}\n     */\n\n    this.fill = createHighlight(FILL_TYPE, options);\n    /**\n     * Collection of the `area` highlights. That objects describes attributes for the borders and selection of\n     * the multiple selected cells. It can occur multiple times on the table.\n     *\n     * @type {Map.<number, Selection>}\n     */\n\n    this.areas = new Map();\n    /**\n     * Collection of the `header` highlights. That objects describes attributes for the selection of\n     * the multiple selected rows and columns in the table header. It can occur multiple times on the table.\n     *\n     * @type {Map.<number, Selection>}\n     */\n\n    this.headers = new Map();\n    /**\n     * Collection of the `active-header` highlights. That objects describes attributes for the selection of\n     * the multiple selected rows and columns in the table header. The table headers which have selected all items in\n     * a row will be marked as `active-header`.\n     *\n     * @type {Map.<number, Selection>}\n     */\n\n    this.activeHeaders = new Map();\n    /**\n     * Collection of the `custom-selection`, holder for example borders added through CustomBorders plugin.\n     *\n     * @type {Selection[]}\n     */\n\n    this.customSelections = [];\n  }\n  /**\n   * Check if highlight cell rendering is disabled for specified highlight type.\n   *\n   * @param {string} highlightType Highlight type. Possible values are: `cell`, `area`, `fill` or `header`.\n   * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n   * @returns {boolean}\n   */\n\n\n  _createClass(Highlight, [{\n    key: \"isEnabledFor\",\n    value: function isEnabledFor(highlightType, coords) {\n      var type = highlightType; // Legacy compatibility.\n\n      if (highlightType === CELL_TYPE) {\n        type = 'current'; // One from settings for `disableVisualSelection` up to Handsontable 0.36/Handsontable Pro 1.16.0.\n      }\n\n      var disableHighlight = this.options.disabledCellSelection(coords.row, coords.col);\n\n      if (typeof disableHighlight === 'string') {\n        disableHighlight = [disableHighlight];\n      }\n\n      return disableHighlight === false || Array.isArray(disableHighlight) && !disableHighlight.includes(type);\n    }\n    /**\n     * Set a new layer level to make access to the desire `area` and `header` highlights.\n     *\n     * @param {number} [level=0] Layer level to use.\n     * @returns {Highlight}\n     */\n\n  }, {\n    key: \"useLayerLevel\",\n    value: function useLayerLevel() {\n      var level = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      this.layerLevel = level;\n      return this;\n    }\n    /**\n     * Get Walkontable Selection instance created for controlling highlight of the currently selected/edited cell.\n     *\n     * @returns {Selection}\n     */\n\n  }, {\n    key: \"getCell\",\n    value: function getCell() {\n      return this.cell;\n    }\n    /**\n     * Get Walkontable Selection instance created for controlling highlight of the autofill functionality.\n     *\n     * @returns {Selection}\n     */\n\n  }, {\n    key: \"getFill\",\n    value: function getFill() {\n      return this.fill;\n    }\n    /**\n     * Get or create (if not exist in the cache) Walkontable Selection instance created for controlling highlight\n     * of the multiple selected cells.\n     *\n     * @returns {Selection}\n     */\n\n  }, {\n    key: \"createOrGetArea\",\n    value: function createOrGetArea() {\n      var layerLevel = this.layerLevel;\n      var area;\n\n      if (this.areas.has(layerLevel)) {\n        area = this.areas.get(layerLevel);\n      } else {\n        area = createHighlight(AREA_TYPE, _objectSpread({\n          layerLevel: layerLevel\n        }, this.options));\n        this.areas.set(layerLevel, area);\n      }\n\n      return area;\n    }\n    /**\n     * Get all Walkontable Selection instances which describes the state of the visual highlight of the cells.\n     *\n     * @returns {Selection[]}\n     */\n\n  }, {\n    key: \"getAreas\",\n    value: function getAreas() {\n      return _toConsumableArray(this.areas.values());\n    }\n    /**\n     * Get or create (if not exist in the cache) Walkontable Selection instance created for controlling highlight\n     * of the multiple selected header cells.\n     *\n     * @returns {Selection}\n     */\n\n  }, {\n    key: \"createOrGetHeader\",\n    value: function createOrGetHeader() {\n      var layerLevel = this.layerLevel;\n      var header;\n\n      if (this.headers.has(layerLevel)) {\n        header = this.headers.get(layerLevel);\n      } else {\n        header = createHighlight(HEADER_TYPE, _objectSpread({}, this.options));\n        this.headers.set(layerLevel, header);\n      }\n\n      return header;\n    }\n    /**\n     * Get all Walkontable Selection instances which describes the state of the visual highlight of the headers.\n     *\n     * @returns {Selection[]}\n     */\n\n  }, {\n    key: \"getHeaders\",\n    value: function getHeaders() {\n      return _toConsumableArray(this.headers.values());\n    }\n    /**\n     * Get or create (if not exist in the cache) Walkontable Selection instance created for controlling highlight\n     * of the multiple selected active header cells.\n     *\n     * @returns {Selection}\n     */\n\n  }, {\n    key: \"createOrGetActiveHeader\",\n    value: function createOrGetActiveHeader() {\n      var layerLevel = this.layerLevel;\n      var header;\n\n      if (this.activeHeaders.has(layerLevel)) {\n        header = this.activeHeaders.get(layerLevel);\n      } else {\n        header = createHighlight(ACTIVE_HEADER_TYPE, _objectSpread({}, this.options));\n        this.activeHeaders.set(layerLevel, header);\n      }\n\n      return header;\n    }\n    /**\n     * Get all Walkontable Selection instances which describes the state of the visual highlight of the active headers.\n     *\n     * @returns {Selection[]}\n     */\n\n  }, {\n    key: \"getActiveHeaders\",\n    value: function getActiveHeaders() {\n      return _toConsumableArray(this.activeHeaders.values());\n    }\n    /**\n     * Get Walkontable Selection instance created for controlling highlight of the custom selection functionality.\n     *\n     * @returns {Selection}\n     */\n\n  }, {\n    key: \"getCustomSelections\",\n    value: function getCustomSelections() {\n      return _toConsumableArray(this.customSelections.values());\n    }\n    /**\n     * Add selection to the custom selection instance. The new selection are added to the end of the selection collection.\n     *\n     * @param {object} selectionInstance The selection instance.\n     */\n\n  }, {\n    key: \"addCustomSelection\",\n    value: function addCustomSelection(selectionInstance) {\n      this.customSelections.push(createHighlight(CUSTOM_SELECTION_TYPE, _objectSpread(_objectSpread({}, this.options), selectionInstance)));\n    }\n    /**\n     * Perform cleaning visual highlights for the whole table.\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.cell.clear();\n      this.fill.clear();\n      arrayEach(this.areas.values(), function (highlight) {\n        return void highlight.clear();\n      });\n      arrayEach(this.headers.values(), function (highlight) {\n        return void highlight.clear();\n      });\n      arrayEach(this.activeHeaders.values(), function (highlight) {\n        return void highlight.clear();\n      });\n    }\n    /**\n     * This object can be iterate over using `for of` syntax or using internal `arrayEach` helper.\n     *\n     * @returns {Selection[]}\n     */\n\n  }, {\n    key: _Symbol$iterator,\n    value: function value() {\n      return [this.cell, this.fill].concat(_toConsumableArray(this.areas.values()), _toConsumableArray(this.headers.values()), _toConsumableArray(this.activeHeaders.values()), _toConsumableArray(this.customSelections))[Symbol.iterator]();\n    }\n  }]);\n\n  return Highlight;\n}(Symbol.iterator);\n\nexport default Highlight;", "var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIndexedObject(object);\n    var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var index = 0;\n    var key, descriptor;\n    while (keys.length > index) {\n      descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n      if (descriptor !== undefined) createProperty(result, key, descriptor);\n    }\n    return result;\n  }\n});\n", "export var ACTIVE_HEADER_TYPE = 'active-header';\nexport var AREA_TYPE = 'area';\nexport var CELL_TYPE = 'cell';\nexport var FILL_TYPE = 'fill';\nexport var HEADER_TYPE = 'header';\nexport var CUSTOM_SELECTION_TYPE = 'custom-selection';", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { Selection, CellCoords, CellRange } from \"./../../3rdparty/walkontable/src/index.mjs\";\n\nvar VisualSelection = /*#__PURE__*/function (_Selection) {\n  _inherits(VisualSelection, _Selection);\n\n  var _super = _createSuper(VisualSelection);\n\n  function VisualSelection(settings, visualCellRange) {\n    var _this;\n\n    _classCallCheck(this, VisualSelection);\n\n    _this = _super.call(this, settings, null);\n    /**\n     * Range of selection visually. Visual representation may have representation in a rendered selection.\n     *\n     * @type {null|CellRange}\n     */\n\n    _this.visualCellRange = visualCellRange || null;\n\n    _this.commit();\n\n    return _this;\n  }\n  /**\n   * Adds a cell coords to the selection.\n   *\n   * @param {CellCoords} coords Visual coordinates of a cell.\n   * @returns {VisualSelection}\n   */\n\n\n  _createClass(VisualSelection, [{\n    key: \"add\",\n    value: function add(coords) {\n      if (this.visualCellRange === null) {\n        this.visualCellRange = new CellRange(coords);\n      } else {\n        this.visualCellRange.expand(coords);\n      }\n\n      return this;\n    }\n    /**\n     * Clears visual and renderable selection.\n     *\n     * @returns {VisualSelection}\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.visualCellRange = null;\n      return _get(_getPrototypeOf(VisualSelection.prototype), \"clear\", this).call(this);\n    }\n    /**\n     * Search for the first visible coordinates in the range as range may start and/or end with the hidden index.\n     *\n     * @private\n     * @param {CellCoords} startCoords Visual start coordinates for the range. Starting point for finding destination coordinates\n     * with visible coordinates (we are going from the starting coordinates to the end coordinates until the criteria are met).\n     * @param {CellCoords} endCoords Visual end coordinates for the range.\n     * @param {number} incrementByRow We are searching for a next visible rows by increasing (to be precise, or decreasing) indexes.\n     * This variable represent indexes shift. We are looking for an index:\n     * - for rows: from the left to the right (increasing indexes, then variable should have value 1) or\n     * other way around (decreasing indexes, then variable should have the value -1)\n     * - for columns: from the top to the bottom (increasing indexes, then variable should have value 1)\n     * or other way around (decreasing indexes, then variable should have the value -1).\n     * @param {number} incrementByColumn As above, just indexes shift for columns.\n     * @returns {null|CellCoords} Visual cell coordinates.\n     */\n\n  }, {\n    key: \"findVisibleCoordsInRange\",\n    value: function findVisibleCoordsInRange(startCoords, endCoords, incrementByRow) {\n      var incrementByColumn = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : incrementByRow;\n      var nextVisibleRow = this.findVisibleCoordsInRowsRange(startCoords.row, endCoords.row, incrementByRow); // There are no more visual rows in the range.\n\n      if (nextVisibleRow === null) {\n        return null;\n      }\n\n      var nextVisibleColumn = this.findVisibleCoordsInColumnsRange(startCoords.col, endCoords.col, incrementByColumn); // There are no more visual columns in the range.\n\n      if (nextVisibleColumn === null) {\n        return null;\n      }\n\n      return new CellCoords(nextVisibleRow, nextVisibleColumn);\n    }\n    /**\n     * Searches the nearest visible row index, which is not hidden (is renderable).\n     *\n     * @private\n     * @param {CellCoords} startVisibleRow Visual row index which starts the range. Starting point for finding\n     * destination coordinates with visible coordinates (we are going from the starting coordinates to the end\n     * coordinates until the criteria are met).\n     * @param {CellCoords} endVisibleRow Visual row index which ends the range.\n     * @param {number} incrementBy We are searching for a next visible rows by increasing (to be precise, or decreasing)\n     * indexes. This variable represent indexes shift. From the left to the right (increasing indexes, then variable\n     * should have value 1) or other way around (decreasing indexes, then variable should have the value -1).\n     * @returns {number|null} The visual row index.\n     */\n\n  }, {\n    key: \"findVisibleCoordsInRowsRange\",\n    value: function findVisibleCoordsInRowsRange(startVisibleRow, endVisibleRow, incrementBy) {\n      var _this$settings$visual = this.settings.visualToRenderableCoords({\n        row: startVisibleRow,\n        col: -1\n      }),\n          startRowRenderable = _this$settings$visual.row; // There are no more visual rows in the range.\n\n\n      if (endVisibleRow === startVisibleRow && startRowRenderable === null) {\n        return null;\n      } // We are looking for a next visible row in the range.\n\n\n      if (startRowRenderable === null) {\n        return this.findVisibleCoordsInRowsRange(startVisibleRow + incrementBy, endVisibleRow, incrementBy);\n      } // We found visible row index in the range.\n\n\n      return startVisibleRow;\n    }\n    /**\n     * Searches the nearest visible column index, which is not hidden (is renderable).\n     *\n     * @private\n     * @param {CellCoords} startVisibleColumn Visual column index which starts the range. Starting point for finding\n     * destination coordinates with visible coordinates (we are going from the starting coordinates to the end\n     * coordinates until the criteria are met).\n     * @param {CellCoords} endVisibleColumn Visual column index which ends the range.\n     * @param {number} incrementBy We are searching for a next visible columns by increasing (to be precise, or decreasing)\n     * indexes. This variable represent indexes shift. From the top to the bottom (increasing indexes, then variable\n     * should have value 1) or other way around (decreasing indexes, then variable should have the value -1).\n     * @returns {number|null} The visual column index.\n     */\n\n  }, {\n    key: \"findVisibleCoordsInColumnsRange\",\n    value: function findVisibleCoordsInColumnsRange(startVisibleColumn, endVisibleColumn, incrementBy) {\n      var _this$settings$visual2 = this.settings.visualToRenderableCoords({\n        row: -1,\n        col: startVisibleColumn\n      }),\n          startColumnRenderable = _this$settings$visual2.col; // There are no more visual columns in the range.\n\n\n      if (endVisibleColumn === startVisibleColumn && startColumnRenderable === null) {\n        return null;\n      } // We are looking for a next visible column in the range.\n\n\n      if (startColumnRenderable === null) {\n        return this.findVisibleCoordsInColumnsRange(startVisibleColumn + incrementBy, endVisibleColumn, incrementBy);\n      } // We found visible column index in the range.\n\n\n      return startVisibleColumn;\n    }\n    /**\n     * Searches the nearest visible column and row index, which is not hidden (is renderable). If one\n     * of the axes' range is entirely hidden, then created CellCoords object will hold the `null` value\n     * under a specific axis. For example, when we select the hidden column, then the calculated `col`\n     * prop will be `null`. In that case, rows are calculated further (regardless of the column result)\n     * to make rows header highlightable.\n     *\n     * @private\n     * @param {CellCoords} visualFromCoords Visual start coordinates for the range. Starting point for finding destination coordinates\n     * with visible coordinates (we are going from the starting coordinates to the end coordinates until the criteria are met).\n     * @param {CellCoords} visualToCoords Visual end coordinates for the range.\n     * @param {number} incrementByRow We are searching for a next visible rows by increasing (to be precise, or decreasing) indexes.\n     * This variable represent indexes shift. We are looking for an index:\n     * - for rows: from the left to the right (increasing indexes, then variable should have value 1) or\n     * other way around (decreasing indexes, then variable should have the value -1)\n     * - for columns: from the top to the bottom (increasing indexes, then variable should have value 1)\n     * or other way around (decreasing indexes, then variable should have the value -1).\n     * @param {number} incrementByColumn As above, just indexes shift for columns.\n     * @returns {CellCoords[]|null} Visual cell coordinates.\n     */\n\n  }, {\n    key: \"findVisibleHeaderRange\",\n    value: function findVisibleHeaderRange(visualFromCoords, visualToCoords, incrementByRow, incrementByColumn) {\n      var fromRangeVisualRow = this.findVisibleCoordsInRowsRange(visualFromCoords.row, visualToCoords.row, incrementByRow);\n      var toRangeVisualRow = this.findVisibleCoordsInRowsRange(visualToCoords.row, visualFromCoords.row, -incrementByRow);\n      var fromRangeVisualColumn = this.findVisibleCoordsInColumnsRange(visualFromCoords.col, visualToCoords.col, incrementByColumn);\n      var toRangeVisualColumn = this.findVisibleCoordsInColumnsRange(visualToCoords.col, visualFromCoords.col, -incrementByColumn); // All rows and columns ranges are hidden.\n\n      if (fromRangeVisualRow === null && toRangeVisualRow === null && fromRangeVisualColumn === null && toRangeVisualColumn === null) {\n        return null;\n      }\n\n      return [new CellCoords(fromRangeVisualRow, fromRangeVisualColumn), new CellCoords(toRangeVisualRow, toRangeVisualColumn)];\n    }\n    /**\n     * Override internally stored visual indexes added by the Selection's `add` function. It should be executed\n     * at the end of process of adding visual selection coordinates.\n     *\n     * @returns {VisualSelection}\n     */\n\n  }, {\n    key: \"commit\",\n    value: function commit() {\n      // There is no information about visual ranges, thus no selection may be displayed.\n      if (this.visualCellRange === null) {\n        return this;\n      }\n\n      var _this$visualCellRange = this.visualCellRange,\n          visualFromCoords = _this$visualCellRange.from,\n          visualToCoords = _this$visualCellRange.to; // We may move in two different directions while searching for visible rows and visible columns.\n\n      var incrementByRow = this.getRowSearchDirection(this.visualCellRange);\n      var incrementByColumn = this.getColumnSearchDirection(this.visualCellRange);\n      var fromRangeVisual = this.findVisibleCoordsInRange(visualFromCoords, visualToCoords, incrementByRow, incrementByColumn);\n      var toRangeVisual = this.findVisibleCoordsInRange(visualToCoords, visualFromCoords, -incrementByRow, -incrementByColumn); // There is no visual start point (and also visual end point) in the range.\n      // We are looking for the first visible cell in a broader range.\n\n      if (fromRangeVisual === null || toRangeVisual === null) {\n        var isHeaderSelectionType = this.settings.type === 'header';\n        var cellRange = null; // For the \"header\" selection type, find rows and column indexes, which should be\n        // highlighted, although one of the axes is completely hidden.\n\n        if (isHeaderSelectionType) {\n          var _this$findVisibleHead = this.findVisibleHeaderRange(visualFromCoords, visualToCoords, incrementByRow, incrementByColumn),\n              _this$findVisibleHead2 = _slicedToArray(_this$findVisibleHead, 2),\n              fromRangeVisualHeader = _this$findVisibleHead2[0],\n              toRangeVisualHeader = _this$findVisibleHead2[1];\n\n          cellRange = this.createRenderableCellRange(fromRangeVisualHeader, toRangeVisualHeader);\n        }\n\n        this.cellRange = cellRange;\n      } else {\n        this.cellRange = this.createRenderableCellRange(fromRangeVisual, toRangeVisual);\n      }\n\n      return this;\n    }\n    /**\n     * Some selection may be a part of broader cell range. This function adjusting coordinates of current selection\n     * and the broader cell range when needed (current selection can't be presented visually).\n     *\n     * @param {CellRange} broaderCellRange Visual range. Actual cell range may be contained in the broader cell range.\n     * When there is no way to represent some cell range visually we try to find range containing just the first visible cell.\n     *\n     * Warn: Please keep in mind that this function may change coordinates of the handled broader range.\n     *\n     * @returns {VisualSelection}\n     */\n\n  }, {\n    key: \"adjustCoordinates\",\n    value: function adjustCoordinates(broaderCellRange) {\n      // We may move in two different directions while searching for visible rows and visible columns.\n      var incrementByRow = this.getRowSearchDirection(broaderCellRange);\n      var incrementByColumn = this.getColumnSearchDirection(broaderCellRange);\n      var normFromCoords = broaderCellRange.from.clone().normalize();\n      var normToCoords = broaderCellRange.to.clone().normalize();\n      var singleCellRangeVisual = this.findVisibleCoordsInRange(normFromCoords, normToCoords, incrementByRow, incrementByColumn);\n\n      if (singleCellRangeVisual !== null) {\n        // We can't show selection visually now, but we found fist visible range in the broader cell range.\n        if (this.cellRange === null) {\n          var singleCellRangeRenderable = this.settings.visualToRenderableCoords(singleCellRangeVisual);\n          this.cellRange = new CellRange(singleCellRangeRenderable);\n        } // We set new highlight as it might change (for example, when showing/hiding some cells from the broader selection range)\n        // TODO: It is also handled by the `MergeCells` plugin while adjusting already modified coordinates. Should it?\n\n\n        broaderCellRange.setHighlight(singleCellRangeVisual);\n        return this;\n      } // Fallback to the start of the range. It resets the previous highlight (for example, when all columns have been hidden).\n\n\n      broaderCellRange.setHighlight(broaderCellRange.from);\n      return this;\n    }\n    /**\n     * Returns the top left (TL) and bottom right (BR) selection coordinates (renderable indexes).\n     * The method overwrites the original method to support header selection for hidden cells.\n     * To make the header selection working, the CellCoords and CellRange have to support not\n     * complete coordinates (`null` values for example, `row: null`, `col: 2`).\n     *\n     * @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]`.\n     */\n\n  }, {\n    key: \"getCorners\",\n    value: function getCorners() {\n      var _this$cellRange = this.cellRange,\n          from = _this$cellRange.from,\n          to = _this$cellRange.to;\n      var isRowUndefined = from.row === null || to.row === null;\n      var isColumnUndefined = from.col === null || to.col === null;\n      var topLeftCorner = new CellCoords(isRowUndefined ? null : Math.min(from.row, to.row), isColumnUndefined ? null : Math.min(from.col, to.col));\n      var bottomRightCorner = new CellCoords(isRowUndefined ? null : Math.max(from.row, to.row), isColumnUndefined ? null : Math.max(from.col, to.col));\n      return [topLeftCorner.row, topLeftCorner.col, bottomRightCorner.row, bottomRightCorner.col];\n    }\n    /**\n     * Returns the top left (TL) and bottom right (BR) selection coordinates (visual indexes).\n     *\n     * @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]`.\n     */\n\n  }, {\n    key: \"getVisualCorners\",\n    value: function getVisualCorners() {\n      var topLeft = this.settings.renderableToVisualCoords(this.cellRange.getTopLeftCorner());\n      var bottomRight = this.settings.renderableToVisualCoords(this.cellRange.getBottomRightCorner());\n      return [topLeft.row, topLeft.col, bottomRight.row, bottomRight.col];\n    }\n    /**\n     * Creates a new CellRange object based on visual coordinates which before object creation are\n     * translated to renderable indexes.\n     *\n     * @param {CellCoords} visualFromCoords The CellCoords object which contains coordinates that\n     *                                      points to the begining of the selection.\n     * @param {CellCoords} visualToCoords The CellCoords object which contains coordinates that\n     *                                    points to the end of the selection.\n     * @returns {CellRange}\n     */\n\n  }, {\n    key: \"createRenderableCellRange\",\n    value: function createRenderableCellRange(visualFromCoords, visualToCoords) {\n      var renderableFromCoords = this.settings.visualToRenderableCoords(visualFromCoords);\n      var renderableToCoords = this.settings.visualToRenderableCoords(visualToCoords);\n      return new CellRange(renderableFromCoords, renderableFromCoords, renderableToCoords);\n    }\n    /**\n     * It returns rows shift needed for searching visual row.\n     *\n     * @private\n     * @param {CellRange} cellRange Selection range.\n     * @returns {number} Rows shift. It return 1 when we should increase indexes (moving from the top to the bottom) or\n     * -1 when we should decrease indexes (moving other way around).\n     */\n\n  }, {\n    key: \"getRowSearchDirection\",\n    value: function getRowSearchDirection(cellRange) {\n      if (cellRange.from.row < cellRange.to.row) {\n        return 1; // Increasing row indexes.\n      }\n\n      return -1; // Decreasing row indexes.\n    }\n    /**\n     * It returns columns shift needed for searching visual column.\n     *\n     * @private\n     * @param {CellRange} cellRange Selection range.\n     * @returns {number} Columns shift. It return 1 when we should increase indexes (moving from the left to the right) or\n     * -1 when we should decrease indexes (moving other way around).\n     */\n\n  }, {\n    key: \"getColumnSearchDirection\",\n    value: function getColumnSearchDirection(cellRange) {\n      if (cellRange.from.col < cellRange.to.col) {\n        return 1; // Increasing column indexes.\n      }\n\n      return -1; // Decreasing column indexes.\n    }\n  }]);\n\n  return VisualSelection;\n}(Selection);\n\nexport default VisualSelection;", "import \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\nvar _excluded = [\"activeHeaderClassName\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport { ACTIVE_HEADER_TYPE } from \"../constants.mjs\";\nimport VisualSelection from \"../visualSelection.mjs\";\n/**\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {string} highlightParams.activeHeaderClassName Highlighted headers' class name.\n * @returns {Selection}\n */\n\nfunction createHighlight(_ref) {\n  var activeHeaderClassName = _ref.activeHeaderClassName,\n      restOptions = _objectWithoutProperties(_ref, _excluded);\n\n  var s = new VisualSelection(_objectSpread(_objectSpread({\n    highlightHeaderClassName: activeHeaderClassName\n  }, restOptions), {}, {\n    selectionType: ACTIVE_HEADER_TYPE\n  }));\n  return s;\n}\n\nexport default createHighlight;", "import \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\nvar _excluded = [\"layerLevel\", \"areaCornerVisible\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport { AREA_TYPE } from \"../constants.mjs\";\nimport VisualSelection from \"../visualSelection.mjs\";\n/**\n * Creates the new instance of Selection responsible for highlighting area of the selected multiple cells.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {number} highlightParams.layerLevel Layer level.\n * @param {object} highlightParams.areaCornerVisible Function to determine if area's corner should be visible.\n * @returns {Selection}\n */\n\nfunction createHighlight(_ref) {\n  var layerLevel = _ref.layerLevel,\n      areaCornerVisible = _ref.areaCornerVisible,\n      restOptions = _objectWithoutProperties(_ref, _excluded);\n\n  var s = new VisualSelection(_objectSpread(_objectSpread({\n    className: 'area',\n    markIntersections: true,\n    layerLevel: Math.min(layerLevel, 7),\n    border: {\n      width: 1,\n      color: '#4b89ff',\n      cornerVisible: areaCornerVisible\n    }\n  }, restOptions), {}, {\n    selectionType: AREA_TYPE\n  }));\n  return s;\n}\n\nexport default createHighlight;", "import \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\nvar _excluded = [\"cellCornerVisible\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport { CELL_TYPE } from \"../constants.mjs\";\nimport VisualSelection from \"../visualSelection.mjs\";\n/**\n * Creates the new instance of Selection responsible for highlighting currently selected cell. This type of selection\n * can present on the table only one at the time.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {Function} highlightParams.cellCornerVisible Function to determine if cell's corner should be visible.\n * @returns {Selection}\n */\n\nfunction createHighlight(_ref) {\n  var cellCornerVisible = _ref.cellCornerVisible,\n      restOptions = _objectWithoutProperties(_ref, _excluded);\n\n  var s = new VisualSelection(_objectSpread(_objectSpread({\n    className: 'current',\n    border: {\n      width: 2,\n      color: '#4b89ff',\n      cornerVisible: cellCornerVisible\n    }\n  }, restOptions), {}, {\n    selectionType: CELL_TYPE\n  }));\n  return s;\n}\n\nexport default createHighlight;", "import \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\nvar _excluded = [\"border\", \"visualCellRange\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport { CUSTOM_SELECTION_TYPE } from \"../constants.mjs\";\nimport VisualSelection from \"../visualSelection.mjs\";\n/**\n * Creates the new instance of Selection responsible for highlighting currently selected cell. This type of selection\n * can present on the table only one at the time.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {object} highlightParams.border Border configuration.\n * @param {object} highlightParams.visualCellRange Function to translate visual to renderable coords.\n * @returns {Selection}\n */\n\nfunction createHighlight(_ref) {\n  var border = _ref.border,\n      visualCellRange = _ref.visualCellRange,\n      restOptions = _objectWithoutProperties(_ref, _excluded);\n\n  var s = new VisualSelection(_objectSpread(_objectSpread(_objectSpread({}, border), restOptions), {}, {\n    selectionType: CUSTOM_SELECTION_TYPE\n  }), visualCellRange);\n  return s;\n}\n\nexport default createHighlight;", "var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n  assign: assign\n});\n", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport \"core-js/modules/es.object.assign.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\nimport { FILL_TYPE } from \"../constants.mjs\";\nimport VisualSelection from \"../visualSelection.mjs\";\n/**\n * Creates the new instance of Selection, responsible for highlighting cells which are covered by fill handle\n * functionality. This type of selection can present on the table only one at the time.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @returns {Selection}\n */\n\nfunction createHighlight(_ref) {\n  var restOptions = Object.assign({}, _ref);\n  var s = new VisualSelection(_objectSpread(_objectSpread({\n    className: 'fill',\n    border: {\n      width: 1,\n      color: '#ff0000'\n    }\n  }, restOptions), {}, {\n    selectionType: FILL_TYPE\n  }));\n  return s;\n}\n\nexport default createHighlight;", "import \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\nvar _excluded = [\"headerClassName\", \"rowClassName\", \"columnClassName\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport { HEADER_TYPE } from \"../constants.mjs\";\nimport VisualSelection from \"../visualSelection.mjs\";\n/**\n * Creates the new instance of Selection, responsible for highlighting row and column headers. This type of selection\n * can occur multiple times.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {string} highlightParams.headerClassName Highlighted headers' class name.\n * @param {string} highlightParams.rowClassName Highlighted row' class name.\n * @param {string} highlightParams.columnClassName Highlighted column' class name.\n * @returns {Selection}\n */\n\nfunction createHighlight(_ref) {\n  var headerClassName = _ref.headerClassName,\n      rowClassName = _ref.rowClassName,\n      columnClassName = _ref.columnClassName,\n      restOptions = _objectWithoutProperties(_ref, _excluded);\n\n  var s = new VisualSelection(_objectSpread(_objectSpread({\n    className: 'highlight',\n    highlightHeaderClassName: headerClassName,\n    highlightRowClassName: rowClassName,\n    highlightColumnClassName: columnClassName\n  }, restOptions), {}, {\n    highlightOnlyClosestHeader: true,\n    selectionType: HEADER_TYPE\n  }));\n  return s;\n}\n\nexport default createHighlight;", "import \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport staticRegister from \"./../../../utils/staticRegister.mjs\";\nimport { ACTIVE_HEADER_TYPE, AREA_TYPE, CELL_TYPE, CUSTOM_SELECTION_TYPE, FILL_TYPE, HEADER_TYPE } from \"../constants.mjs\";\nimport activeHeaderHighlight from \"./activeHeader.mjs\";\nimport areaHighlight from \"./area.mjs\";\nimport cellHighlight from \"./cell.mjs\";\nimport customSelection from \"./customSelection.mjs\";\nimport fillHighlight from \"./fill.mjs\";\nimport headerHighlight from \"./header.mjs\";\n\nvar _staticRegister = staticRegister('highlight/types'),\n    register = _staticRegister.register,\n    getItem = _staticRegister.getItem;\n\nregister(ACTIVE_HEADER_TYPE, activeHeaderHighlight);\nregister(AREA_TYPE, areaHighlight);\nregister(CELL_TYPE, cellHighlight);\nregister(CUSTOM_SELECTION_TYPE, customSelection);\nregister(FILL_TYPE, fillHighlight);\nregister(HEADER_TYPE, headerHighlight);\n/**\n * @param {string} highlightType The selection type.\n * @param {object} options The selection options.\n * @returns {Selection}\n */\n\nfunction createHighlight(highlightType, options) {\n  return getItem(highlightType)(_objectSpread({\n    type: highlightType\n  }, options));\n}\n\nexport { createHighlight };", "import \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nvar _templateObject;\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport Highlight from \"./highlight/highlight.mjs\";\nimport { AREA_TYPE, HEADER_TYPE, CELL_TYPE } from \"./highlight/constants.mjs\";\nimport SelectionRange from \"./range.mjs\";\nimport { CellCoords } from \"./../3rdparty/walkontable/src/index.mjs\";\nimport { isPressedCtrlKey } from \"./../utils/keyStateObserver.mjs\";\nimport { createObjectPropListener, mixin } from \"./../helpers/object.mjs\";\nimport { isUndefined } from \"./../helpers/mixed.mjs\";\nimport { arrayEach } from \"./../helpers/array.mjs\";\nimport localHooks from \"./../mixins/localHooks.mjs\";\nimport Transformation from \"./transformation.mjs\";\nimport { detectSelectionType, isValidCoord, normalizeSelectionFactory, SELECTION_TYPE_EMPTY, SELECTION_TYPE_UNRECOGNIZED } from \"./utils.mjs\";\nimport { toSingleLine } from \"./../helpers/templateLiteralTag.mjs\";\n/**\n * @class Selection\n * @util\n */\n\nvar Selection = /*#__PURE__*/function () {\n  function Selection(settings, tableProps) {\n    var _this = this;\n\n    _classCallCheck(this, Selection);\n\n    /**\n     * Handsontable settings instance.\n     *\n     * @type {GridSettings}\n     */\n    this.settings = settings;\n    /**\n     * An additional object with dynamically defined properties which describes table state.\n     *\n     * @type {object}\n     */\n\n    this.tableProps = tableProps;\n    /**\n     * The flag which determines if the selection is in progress.\n     *\n     * @type {boolean}\n     */\n\n    this.inProgress = false;\n    /**\n     * The flag indicates that selection was performed by clicking the corner overlay.\n     *\n     * @type {boolean}\n     */\n\n    this.selectedByCorner = false;\n    /**\n     * The collection of the selection layer levels where the whole row was selected using the row header or\n     * the corner header.\n     *\n     * @type {Set.<number>}\n     */\n\n    this.selectedByRowHeader = new Set();\n    /**\n     * The collection of the selection layer levels where the whole column was selected using the column header or\n     * the corner header.\n     *\n     * @type {Set.<number>}\n     */\n\n    this.selectedByColumnHeader = new Set();\n    /**\n     * Selection data layer (handle visual coordinates).\n     *\n     * @type {SelectionRange}\n     */\n\n    this.selectedRange = new SelectionRange();\n    /**\n     * Visualization layer.\n     *\n     * @type {Highlight}\n     */\n\n    this.highlight = new Highlight({\n      headerClassName: settings.currentHeaderClassName,\n      activeHeaderClassName: settings.activeHeaderClassName,\n      rowClassName: settings.currentRowClassName,\n      columnClassName: settings.currentColClassName,\n      disabledCellSelection: function disabledCellSelection(row, column) {\n        return _this.tableProps.isDisabledCellSelection(row, column);\n      },\n      cellCornerVisible: function cellCornerVisible() {\n        return _this.isCellCornerVisible.apply(_this, arguments);\n      },\n      areaCornerVisible: function areaCornerVisible() {\n        return _this.isAreaCornerVisible.apply(_this, arguments);\n      },\n      visualToRenderableCoords: function visualToRenderableCoords(coords) {\n        return _this.tableProps.visualToRenderableCoords(coords);\n      },\n      renderableToVisualCoords: function renderableToVisualCoords(coords) {\n        return _this.tableProps.renderableToVisualCoords(coords);\n      }\n    });\n    /**\n     * The module for modifying coordinates.\n     *\n     * @type {Transformation}\n     */\n\n    this.transformation = new Transformation(this.selectedRange, {\n      countRows: function countRows() {\n        return _this.tableProps.countRowsTranslated();\n      },\n      countCols: function countCols() {\n        return _this.tableProps.countColsTranslated();\n      },\n      visualToRenderableCoords: function visualToRenderableCoords(coords) {\n        return _this.tableProps.visualToRenderableCoords(coords);\n      },\n      renderableToVisualCoords: function renderableToVisualCoords(coords) {\n        return _this.tableProps.renderableToVisualCoords(coords);\n      },\n      fixedRowsBottom: function fixedRowsBottom() {\n        return settings.fixedRowsBottom;\n      },\n      minSpareRows: function minSpareRows() {\n        return settings.minSpareRows;\n      },\n      minSpareCols: function minSpareCols() {\n        return settings.minSpareCols;\n      },\n      autoWrapRow: function autoWrapRow() {\n        return settings.autoWrapRow;\n      },\n      autoWrapCol: function autoWrapCol() {\n        return settings.autoWrapCol;\n      }\n    });\n    this.transformation.addLocalHook('beforeTransformStart', function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _this.runLocalHooks.apply(_this, ['beforeModifyTransformStart'].concat(args));\n    });\n    this.transformation.addLocalHook('afterTransformStart', function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return _this.runLocalHooks.apply(_this, ['afterModifyTransformStart'].concat(args));\n    });\n    this.transformation.addLocalHook('beforeTransformEnd', function () {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      return _this.runLocalHooks.apply(_this, ['beforeModifyTransformEnd'].concat(args));\n    });\n    this.transformation.addLocalHook('afterTransformEnd', function () {\n      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n\n      return _this.runLocalHooks.apply(_this, ['afterModifyTransformEnd'].concat(args));\n    });\n    this.transformation.addLocalHook('insertRowRequire', function () {\n      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        args[_key5] = arguments[_key5];\n      }\n\n      return _this.runLocalHooks.apply(_this, ['insertRowRequire'].concat(args));\n    });\n    this.transformation.addLocalHook('insertColRequire', function () {\n      for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n        args[_key6] = arguments[_key6];\n      }\n\n      return _this.runLocalHooks.apply(_this, ['insertColRequire'].concat(args));\n    });\n  }\n  /**\n   * Get data layer for current selection.\n   *\n   * @returns {SelectionRange}\n   */\n\n\n  _createClass(Selection, [{\n    key: \"getSelectedRange\",\n    value: function getSelectedRange() {\n      return this.selectedRange;\n    }\n    /**\n     * Indicate that selection process began. It sets internaly `.inProgress` property to `true`.\n     */\n\n  }, {\n    key: \"begin\",\n    value: function begin() {\n      this.inProgress = true;\n    }\n    /**\n     * Indicate that selection process finished. It sets internaly `.inProgress` property to `false`.\n     */\n\n  }, {\n    key: \"finish\",\n    value: function finish() {\n      this.runLocalHooks('afterSelectionFinished', Array.from(this.selectedRange));\n      this.inProgress = false;\n    }\n    /**\n     * Check if the process of selecting the cell/cells is in progress.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isInProgress\",\n    value: function isInProgress() {\n      return this.inProgress;\n    }\n    /**\n     * Starts selection range on given coordinate object.\n     *\n     * @param {CellCoords} coords Visual coords.\n     * @param {boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works\n     *                                      only when 'selectionMode' is set as 'multiple'. If the argument is not defined\n     *                                      the default trigger will be used (isPressedCtrlKey() helper).\n     * @param {boolean} [fragment=false] If `true`, the selection will be treated as a partial selection where the\n     *                                   `setRangeEnd` method won't be called on every `setRangeStart` call.\n     */\n\n  }, {\n    key: \"setRangeStart\",\n    value: function setRangeStart(coords, multipleSelection) {\n      var fragment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var isMultipleMode = this.settings.selectionMode === 'multiple';\n      var isMultipleSelection = isUndefined(multipleSelection) ? isPressedCtrlKey() : multipleSelection;\n      var isRowNegative = coords.row < 0;\n      var isColumnNegative = coords.col < 0;\n      var selectedByCorner = isRowNegative && isColumnNegative; // We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords\n      // should be handled by next methods.\n\n      var coordsClone = coords.clone();\n      this.selectedByCorner = selectedByCorner;\n      this.runLocalHooks(\"beforeSetRangeStart\".concat(fragment ? 'Only' : ''), coordsClone);\n\n      if (!isMultipleMode || isMultipleMode && !isMultipleSelection && isUndefined(multipleSelection)) {\n        this.selectedRange.clear();\n      }\n\n      this.selectedRange.add(coordsClone);\n\n      if (this.getLayerLevel() === 0) {\n        this.selectedByRowHeader.clear();\n        this.selectedByColumnHeader.clear();\n      }\n\n      if (!selectedByCorner && isColumnNegative) {\n        this.selectedByRowHeader.add(this.getLayerLevel());\n      }\n\n      if (!selectedByCorner && isRowNegative) {\n        this.selectedByColumnHeader.add(this.getLayerLevel());\n      }\n\n      if (!fragment) {\n        this.setRangeEnd(coords);\n      }\n    }\n    /**\n     * Starts selection range on given coordinate object.\n     *\n     * @param {CellCoords} coords Visual coords.\n     * @param {boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works\n     *                                      only when 'selectionMode' is set as 'multiple'. If the argument is not defined\n     *                                      the default trigger will be used (isPressedCtrlKey() helper).\n     */\n\n  }, {\n    key: \"setRangeStartOnly\",\n    value: function setRangeStartOnly(coords, multipleSelection) {\n      this.setRangeStart(coords, multipleSelection, true);\n    }\n    /**\n     * Ends selection range on given coordinate object.\n     *\n     * @param {CellCoords} coords Visual coords.\n     */\n\n  }, {\n    key: \"setRangeEnd\",\n    value: function setRangeEnd(coords) {\n      if (this.selectedRange.isEmpty()) {\n        return;\n      } // We are creating copy. We would like to modify just the end of the selection by below hook. Then original coords\n      // should be handled by next methods.\n\n\n      var coordsClone = coords.clone();\n      this.runLocalHooks('beforeSetRangeEnd', coordsClone);\n      this.begin();\n      var cellRange = this.selectedRange.current();\n\n      if (this.settings.selectionMode !== 'single') {\n        cellRange.setTo(new CellCoords(coordsClone.row, coordsClone.col));\n      } // Set up current selection.\n\n\n      this.highlight.getCell().clear();\n\n      if (this.highlight.isEnabledFor(CELL_TYPE, cellRange.highlight)) {\n        this.highlight.getCell().add(this.selectedRange.current().highlight).commit().adjustCoordinates(cellRange);\n      }\n\n      var layerLevel = this.getLayerLevel(); // If the next layer level is lower than previous then clear all area and header highlights. This is the\n      // indication that the new selection is performing.\n\n      if (layerLevel < this.highlight.layerLevel) {\n        arrayEach(this.highlight.getAreas(), function (highlight) {\n          return void highlight.clear();\n        });\n        arrayEach(this.highlight.getHeaders(), function (highlight) {\n          return void highlight.clear();\n        });\n        arrayEach(this.highlight.getActiveHeaders(), function (highlight) {\n          return void highlight.clear();\n        });\n      }\n\n      this.highlight.useLayerLevel(layerLevel);\n      var areaHighlight = this.highlight.createOrGetArea();\n      var headerHighlight = this.highlight.createOrGetHeader();\n      var activeHeaderHighlight = this.highlight.createOrGetActiveHeader();\n      areaHighlight.clear();\n      headerHighlight.clear();\n      activeHeaderHighlight.clear();\n\n      if (this.highlight.isEnabledFor(AREA_TYPE, cellRange.highlight) && (this.isMultiple() || layerLevel >= 1)) {\n        areaHighlight.add(cellRange.from).add(cellRange.to).commit();\n\n        if (layerLevel === 1) {\n          // For single cell selection in the same layer, we do not create area selection to prevent blue background.\n          // When non-consecutive selection is performed we have to add that missing area selection to the previous layer\n          // based on previous coordinates. It only occurs when the previous selection wasn't select multiple cells.\n          var previousRange = this.selectedRange.previous();\n          this.highlight.useLayerLevel(layerLevel - 1).createOrGetArea().add(previousRange.from).commit() // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).\n          .adjustCoordinates(previousRange);\n          this.highlight.useLayerLevel(layerLevel);\n        }\n      }\n\n      if (this.highlight.isEnabledFor(HEADER_TYPE, cellRange.highlight)) {\n        // The header selection generally contains cell selection. In a case when all rows (or columns)\n        // are hidden that visual coordinates are translated to renderable coordinates that do not exist.\n        // Hence no header highlight is generated. In that case, to make a column (or a row) header\n        // highlight, the row and column index has to point to the header (the negative value). See #7052.\n        var areAnyRowsRendered = this.tableProps.countRowsTranslated() === 0;\n        var areAnyColumnsRendered = this.tableProps.countColsTranslated() === 0;\n        var headerCellRange = cellRange;\n\n        if (areAnyRowsRendered || areAnyColumnsRendered) {\n          headerCellRange = cellRange.clone();\n        }\n\n        if (areAnyRowsRendered) {\n          headerCellRange.from.row = -1;\n        }\n\n        if (areAnyColumnsRendered) {\n          headerCellRange.from.col = -1;\n        }\n\n        if (this.settings.selectionMode === 'single') {\n          if (this.isSelectedByAnyHeader()) {\n            headerCellRange.from.normalize();\n          }\n\n          headerHighlight.add(headerCellRange.from).commit();\n        } else {\n          headerHighlight.add(headerCellRange.from).add(headerCellRange.to).commit();\n        }\n\n        if (this.isEntireRowSelected()) {\n          var isRowSelected = this.tableProps.countCols() === cellRange.getWidth(); // Make sure that the whole row is selected (in case where selectionMode is set to 'single')\n\n          if (isRowSelected) {\n            activeHeaderHighlight.add(new CellCoords(cellRange.from.row, -1)).add(new CellCoords(cellRange.to.row, -1)).commit();\n          }\n        }\n\n        if (this.isEntireColumnSelected()) {\n          var isColumnSelected = this.tableProps.countRows() === cellRange.getHeight(); // Make sure that the whole column is selected (in case where selectionMode is set to 'single')\n\n          if (isColumnSelected) {\n            activeHeaderHighlight.add(new CellCoords(-1, cellRange.from.col)).add(new CellCoords(-1, cellRange.to.col)).commit();\n          }\n        }\n      }\n\n      this.runLocalHooks('afterSetRangeEnd', coords);\n    }\n    /**\n     * Returns information if we have a multiselection. This method check multiselection only on the latest layer of\n     * the selection.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isMultiple\",\n    value: function isMultiple() {\n      var isMultipleListener = createObjectPropListener(!this.selectedRange.current().isSingle());\n      this.runLocalHooks('afterIsMultipleSelection', isMultipleListener);\n      return isMultipleListener.value;\n    }\n    /**\n     * Selects cell relative to the current cell (if possible).\n     *\n     * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n     * @param {number} colDelta Columns number to move, value can be passed as negative number.\n     * @param {boolean} [force=false] If `true` the new rows/columns will be created if necessary. Otherwise, row/column will\n     *                        be created according to `minSpareRows/minSpareCols` settings of Handsontable.\n     */\n\n  }, {\n    key: \"transformStart\",\n    value: function transformStart(rowDelta, colDelta) {\n      var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, force));\n    }\n    /**\n     * Sets selection end cell relative to the current selection end cell (if possible).\n     *\n     * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n     * @param {number} colDelta Columns number to move, value can be passed as negative number.\n     */\n\n  }, {\n    key: \"transformEnd\",\n    value: function transformEnd(rowDelta, colDelta) {\n      this.setRangeEnd(this.transformation.transformEnd(rowDelta, colDelta));\n    }\n    /**\n     * Returns currently used layer level.\n     *\n     * @returns {number} Returns layer level starting from 0. If no selection was added to the table -1 is returned.\n     */\n\n  }, {\n    key: \"getLayerLevel\",\n    value: function getLayerLevel() {\n      return this.selectedRange.size() - 1;\n    }\n    /**\n     * Returns `true` if currently there is a selection on the screen, `false` otherwise.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSelected\",\n    value: function isSelected() {\n      return !this.selectedRange.isEmpty();\n    }\n    /**\n     * Returns `true` if the selection was applied by clicking to the row header. If the `layerLevel`\n     * argument is passed then only that layer will be checked. Otherwise, it checks if any row header\n     * was clicked on any selection layer level.\n     *\n     * @param {number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSelectedByRowHeader\",\n    value: function isSelectedByRowHeader() {\n      var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();\n      return !this.isSelectedByCorner(layerLevel) && this.isEntireRowSelected(layerLevel);\n    }\n    /**\n     * Returns `true` if the selection consists of entire rows (including their headers). If the `layerLevel`\n     * argument is passed then only that layer will be checked. Otherwise, it checks the selection for all layers.\n     *\n     * @param {number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isEntireRowSelected\",\n    value: function isEntireRowSelected() {\n      var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();\n      return layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel);\n    }\n    /**\n     * Returns `true` if the selection was applied by clicking to the column header. If the `layerLevel`\n     * argument is passed then only that layer will be checked. Otherwise, it checks if any column header\n     * was clicked on any selection layer level.\n     *\n     * @param {number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSelectedByColumnHeader\",\n    value: function isSelectedByColumnHeader() {\n      var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();\n      return !this.isSelectedByCorner() && this.isEntireColumnSelected(layerLevel);\n    }\n    /**\n     * Returns `true` if the selection consists of entire columns (including their headers). If the `layerLevel`\n     * argument is passed then only that layer will be checked. Otherwise, it checks the selection for all layers.\n     *\n     * @param {number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isEntireColumnSelected\",\n    value: function isEntireColumnSelected() {\n      var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();\n      return layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel);\n    }\n    /**\n     * Returns `true` if the selection was applied by clicking on the row or column header on any layer level.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSelectedByAnyHeader\",\n    value: function isSelectedByAnyHeader() {\n      return this.isSelectedByRowHeader(-1) || this.isSelectedByColumnHeader(-1) || this.isSelectedByCorner();\n    }\n    /**\n     * Returns `true` if the selection was applied by clicking on the left-top corner overlay.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSelectedByCorner\",\n    value: function isSelectedByCorner() {\n      return this.selectedByCorner;\n    }\n    /**\n     * Returns `true` if coords is within selection coords. This method iterates through all selection layers to check if\n     * the coords object is within selection range.\n     *\n     * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"inInSelection\",\n    value: function inInSelection(coords) {\n      return this.selectedRange.includes(coords);\n    }\n    /**\n     * Returns `true` if the cell corner should be visible.\n     *\n     * @private\n     * @returns {boolean} `true` if the corner element has to be visible, `false` otherwise.\n     */\n\n  }, {\n    key: \"isCellCornerVisible\",\n    value: function isCellCornerVisible() {\n      return this.settings.fillHandle && !this.tableProps.isEditorOpened() && !this.isMultiple();\n    }\n    /**\n     * Returns `true` if the area corner should be visible.\n     *\n     * @param {number} layerLevel The layer level.\n     * @returns {boolean} `true` if the corner element has to be visible, `false` otherwise.\n     */\n\n  }, {\n    key: \"isAreaCornerVisible\",\n    value: function isAreaCornerVisible(layerLevel) {\n      if (Number.isInteger(layerLevel) && layerLevel !== this.getLayerLevel()) {\n        return false;\n      }\n\n      return this.settings.fillHandle && !this.tableProps.isEditorOpened() && this.isMultiple();\n    }\n    /**\n     * Clear the selection by resetting the collected ranges and highlights.\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      // TODO: collections selectedByColumnHeader and selectedByRowHeader should be clear too.\n      this.selectedRange.clear();\n      this.highlight.clear();\n    }\n    /**\n     * Deselects all selected cells.\n     */\n\n  }, {\n    key: \"deselect\",\n    value: function deselect() {\n      if (!this.isSelected()) {\n        return;\n      }\n\n      this.inProgress = false;\n      this.clear();\n      this.runLocalHooks('afterDeselect');\n    }\n    /**\n     * Select all cells.\n     *\n     * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers, `false`\n     * otherwise.\n     * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column headers, `false`\n     * otherwise.\n     */\n\n  }, {\n    key: \"selectAll\",\n    value: function selectAll() {\n      var includeRowHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var includeColumnHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var nrOfRows = this.tableProps.countRows();\n      var nrOfColumns = this.tableProps.countCols(); // We can't select cells when there is no data.\n\n      if (!includeRowHeaders && !includeColumnHeaders && (nrOfRows === 0 || nrOfColumns === 0)) {\n        return;\n      }\n\n      var startCoords = new CellCoords(includeColumnHeaders ? -1 : 0, includeRowHeaders ? -1 : 0);\n      this.clear();\n      this.setRangeStartOnly(startCoords);\n      this.selectedByRowHeader.add(this.getLayerLevel());\n      this.selectedByColumnHeader.add(this.getLayerLevel());\n      this.setRangeEnd(new CellCoords(nrOfRows - 1, nrOfColumns - 1));\n      this.finish();\n    }\n    /**\n     * Make multiple, non-contiguous selection specified by `row` and `column` values or a range of cells\n     * finishing at `endRow`, `endColumn`. The method supports two input formats, first as an array of arrays such\n     * as `[[rowStart, columnStart, rowEnd, columnEnd]]` and second format as an array of CellRange objects.\n     * If the passed ranges have another format the exception will be thrown.\n     *\n     * @param {Array[]|CellRange[]} selectionRanges The coordinates which define what the cells should be selected.\n     * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.\n     */\n\n  }, {\n    key: \"selectCells\",\n    value: function selectCells(selectionRanges) {\n      var _this2 = this;\n\n      var selectionType = detectSelectionType(selectionRanges);\n\n      if (selectionType === SELECTION_TYPE_EMPTY) {\n        return false;\n      } else if (selectionType === SELECTION_TYPE_UNRECOGNIZED) {\n        throw new Error(toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"Unsupported format of the selection ranges was passed. To select cells pass \\n        the coordinates as an array of arrays ([[rowStart, columnStart/columnPropStart, rowEnd, \\n        columnEnd/columnPropEnd]]) or as an array of CellRange objects.\"], [\"Unsupported format of the selection ranges was passed. To select cells pass\\\\x20\\n        the coordinates as an array of arrays ([[rowStart, columnStart/columnPropStart, rowEnd,\\\\x20\\n        columnEnd/columnPropEnd]]) or as an array of CellRange objects.\"]))));\n      }\n\n      var selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {\n        propToCol: function propToCol(prop) {\n          return _this2.tableProps.propToCol(prop);\n        },\n        keepDirection: true\n      });\n      var nrOfRows = this.tableProps.countRows();\n      var nrOfColumns = this.tableProps.countCols(); // Check if every layer of the coordinates are valid.\n\n      var isValid = !selectionRanges.some(function (selection) {\n        var _selectionSchemaNorma = selectionSchemaNormalizer(selection),\n            _selectionSchemaNorma2 = _slicedToArray(_selectionSchemaNorma, 4),\n            rowStart = _selectionSchemaNorma2[0],\n            columnStart = _selectionSchemaNorma2[1],\n            rowEnd = _selectionSchemaNorma2[2],\n            columnEnd = _selectionSchemaNorma2[3];\n\n        var _isValid = isValidCoord(rowStart, nrOfRows) && isValidCoord(columnStart, nrOfColumns) && isValidCoord(rowEnd, nrOfRows) && isValidCoord(columnEnd, nrOfColumns);\n\n        return !_isValid;\n      });\n\n      if (isValid) {\n        this.clear();\n        arrayEach(selectionRanges, function (selection) {\n          var _selectionSchemaNorma3 = selectionSchemaNormalizer(selection),\n              _selectionSchemaNorma4 = _slicedToArray(_selectionSchemaNorma3, 4),\n              rowStart = _selectionSchemaNorma4[0],\n              columnStart = _selectionSchemaNorma4[1],\n              rowEnd = _selectionSchemaNorma4[2],\n              columnEnd = _selectionSchemaNorma4[3];\n\n          _this2.setRangeStartOnly(new CellCoords(rowStart, columnStart), false);\n\n          _this2.setRangeEnd(new CellCoords(rowEnd, columnEnd));\n\n          _this2.finish();\n        });\n      }\n\n      return isValid;\n    }\n    /**\n     * Select column specified by `startColumn` visual index or column property or a range of columns finishing at\n     * `endColumn`.\n     *\n     * @param {number|string} startColumn Visual column index or column property from which the selection starts.\n     * @param {number|string} [endColumn] Visual column index or column property from to the selection finishes.\n     * @param {number} [headerLevel=-1] A row header index that triggers the column selection. The value can\n     *                                  take -1 to -N, where -1 means the header closest to the cells.\n     *\n     * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.\n     */\n\n  }, {\n    key: \"selectColumns\",\n    value: function selectColumns(startColumn) {\n      var endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;\n      var headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;\n      var start = typeof startColumn === 'string' ? this.tableProps.propToCol(startColumn) : startColumn;\n      var end = typeof endColumn === 'string' ? this.tableProps.propToCol(endColumn) : endColumn;\n      var nrOfColumns = this.tableProps.countCols();\n      var nrOfRows = this.tableProps.countRows();\n      var isValid = isValidCoord(start, nrOfColumns) && isValidCoord(end, nrOfColumns);\n\n      if (isValid) {\n        this.setRangeStartOnly(new CellCoords(headerLevel, start));\n        this.setRangeEnd(new CellCoords(nrOfRows - 1, end));\n        this.finish();\n      }\n\n      return isValid;\n    }\n    /**\n     * Select row specified by `startRow` visual index or a range of rows finishing at `endRow`.\n     *\n     * @param {number} startRow Visual row index from which the selection starts.\n     * @param {number} [endRow] Visual row index from to the selection finishes.\n     * @param {number} [headerLevel=-1] A column header index that triggers the row selection.\n     *                                  The value can take -1 to -N, where -1 means the header\n     *                                  closest to the cells.\n     * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.\n     */\n\n  }, {\n    key: \"selectRows\",\n    value: function selectRows(startRow) {\n      var endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;\n      var headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;\n      var nrOfRows = this.tableProps.countRows();\n      var nrOfColumns = this.tableProps.countCols();\n      var isValid = isValidCoord(startRow, nrOfRows) && isValidCoord(endRow, nrOfRows);\n\n      if (isValid) {\n        this.setRangeStartOnly(new CellCoords(startRow, headerLevel));\n        this.setRangeEnd(new CellCoords(endRow, nrOfColumns - 1));\n        this.finish();\n      }\n\n      return isValid;\n    }\n    /**\n     * Rewrite the rendered state of the selection as visual selection may have a new representation in the DOM.\n     */\n\n  }, {\n    key: \"refresh\",\n    value: function refresh() {\n      var customSelections = this.highlight.getCustomSelections();\n      customSelections.forEach(function (customSelection) {\n        customSelection.commit();\n      });\n\n      if (!this.isSelected()) {\n        return;\n      }\n\n      var cellHighlight = this.highlight.getCell();\n      var currentLayer = this.getLayerLevel();\n      cellHighlight.commit().adjustCoordinates(this.selectedRange.current()); // Rewriting rendered ranges going through all layers.\n\n      for (var layerLevel = 0; layerLevel < this.selectedRange.size(); layerLevel += 1) {\n        this.highlight.useLayerLevel(layerLevel);\n        var areaHighlight = this.highlight.createOrGetArea();\n        var headerHighlight = this.highlight.createOrGetHeader();\n        var activeHeaderHighlight = this.highlight.createOrGetActiveHeader();\n        areaHighlight.commit();\n        headerHighlight.commit();\n        activeHeaderHighlight.commit();\n      } // Reverting starting layer for the Highlight.\n\n\n      this.highlight.useLayerLevel(currentLayer);\n    }\n  }]);\n\n  return Selection;\n}();\n\nmixin(Selection, localHooks);\nexport default Selection;", "import \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { CellRange } from \"./../3rdparty/walkontable/src/index.mjs\";\n/**\n * The SelectionRange class is a simple CellRanges collection designed for easy manipulation of the multiple\n * consecutive and non-consecutive selections.\n *\n * @class SelectionRange\n * @util\n */\n\nvar SelectionRange = /*#__PURE__*/function (_Symbol$iterator) {\n  function SelectionRange() {\n    _classCallCheck(this, SelectionRange);\n\n    /**\n     * List of all CellRanges added to the class instance.\n     *\n     * @type {CellRange[]}\n     */\n    this.ranges = [];\n  }\n  /**\n   * Check if selected range is empty.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(SelectionRange, [{\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return this.size() === 0;\n    }\n    /**\n     * Set coordinates to the class instance. It clears all previously added coordinates and push `coords`\n     * to the collection.\n     *\n     * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n     * @returns {SelectionRange}\n     */\n\n  }, {\n    key: \"set\",\n    value: function set(coords) {\n      this.clear();\n      this.ranges.push(new CellRange(coords));\n      return this;\n    }\n    /**\n     * Add coordinates to the class instance. The new coordinates are added to the end of the range collection.\n     *\n     * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n     * @returns {SelectionRange}\n     */\n\n  }, {\n    key: \"add\",\n    value: function add(coords) {\n      this.ranges.push(new CellRange(coords));\n      return this;\n    }\n    /**\n     * Removes from the stack the last added coordinates.\n     *\n     * @returns {SelectionRange}\n     */\n\n  }, {\n    key: \"pop\",\n    value: function pop() {\n      this.ranges.pop();\n      return this;\n    }\n    /**\n     * Get last added coordinates from ranges, it returns a CellRange instance.\n     *\n     * @returns {CellRange|undefined}\n     */\n\n  }, {\n    key: \"current\",\n    value: function current() {\n      return this.peekByIndex(0);\n    }\n    /**\n     * Get previously added coordinates from ranges, it returns a CellRange instance.\n     *\n     * @returns {CellRange|undefined}\n     */\n\n  }, {\n    key: \"previous\",\n    value: function previous() {\n      return this.peekByIndex(-1);\n    }\n    /**\n     * Returns `true` if coords is within selection coords. This method iterates through all selection layers to check if\n     * the coords object is within selection range.\n     *\n     * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"includes\",\n    value: function includes(coords) {\n      return this.ranges.some(function (cellRange) {\n        return cellRange.includes(coords);\n      });\n    }\n    /**\n     * Clear collection.\n     *\n     * @returns {SelectionRange}\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.ranges.length = 0;\n      return this;\n    }\n    /**\n     * Get count of added all coordinates added to the selection.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"size\",\n    value: function size() {\n      return this.ranges.length;\n    }\n    /**\n     * Peek the coordinates based on the offset where that coordinate resides in the collection.\n     *\n     * @param {number} [offset=0] An offset where the coordinate will be retrieved from.\n     * @returns {CellRange|undefined}\n     */\n\n  }, {\n    key: \"peekByIndex\",\n    value: function peekByIndex() {\n      var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var rangeIndex = this.size() + offset - 1;\n      var cellRange;\n\n      if (rangeIndex >= 0) {\n        cellRange = this.ranges[rangeIndex];\n      }\n\n      return cellRange;\n    }\n  }, {\n    key: _Symbol$iterator,\n    value: function value() {\n      return this.ranges[Symbol.iterator]();\n    }\n  }]);\n\n  return SelectionRange;\n}(Symbol.iterator);\n\nexport default SelectionRange;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { CellCoords } from \"./../3rdparty/walkontable/src/index.mjs\";\nimport { mixin } from \"../helpers/object.mjs\";\nimport localHooks from \"./../mixins/localHooks.mjs\";\n/**\n * The Transformation class implements algorithms for transforming coordinates based on current settings\n * passed to the Handsontable.\n *\n * Transformation is always applied relative to the current selection.\n *\n * @class Transformation\n * @util\n */\n\nvar Transformation = /*#__PURE__*/function () {\n  function Transformation(range, options) {\n    _classCallCheck(this, Transformation);\n\n    /**\n     * Instance of the SelectionRange, holder for visual coordinates applied to the table.\n     *\n     * @type {SelectionRange}\n     */\n    this.range = range;\n    /**\n     * Additional options which define the state of the settings which can infer transformation and\n     * give the possibility to translate indexes.\n     *\n     * @type {object}\n     */\n\n    this.options = options;\n  }\n  /**\n   * Selects cell relative to current cell (if possible).\n   *\n   * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n   * @param {number} colDelta Columns number to move, value can be passed as negative number.\n   * @param {boolean} [force=false] If `true` the new rows/columns will be created if necessary. Otherwise, row/column will\n   *                        be created according to `minSpareRows/minSpareCols` settings of Handsontable.\n   * @returns {CellCoords} Visual coordinates after transformation.\n   */\n\n\n  _createClass(Transformation, [{\n    key: \"transformStart\",\n    value: function transformStart(rowDelta, colDelta) {\n      var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var delta = new CellCoords(rowDelta, colDelta);\n      var highlightCoords = this.range.current().highlight;\n\n      var _this$options$visualT = this.options.visualToRenderableCoords(highlightCoords),\n          renderableRow = _this$options$visualT.row,\n          renderableColumn = _this$options$visualT.col;\n\n      var visualCoords = highlightCoords;\n      var rowTransformDir = 0;\n      var colTransformDir = 0;\n      this.runLocalHooks('beforeTransformStart', delta);\n\n      if (renderableRow !== null && renderableColumn !== null) {\n        var totalRows = this.options.countRows();\n        var totalCols = this.options.countCols();\n        var fixedRowsBottom = this.options.fixedRowsBottom();\n        var minSpareRows = this.options.minSpareRows();\n        var minSpareCols = this.options.minSpareCols();\n        var autoWrapRow = this.options.autoWrapRow();\n        var autoWrapCol = this.options.autoWrapCol();\n\n        if (renderableRow + rowDelta > totalRows - 1) {\n          if (force && minSpareRows > 0 && !(fixedRowsBottom && renderableRow >= totalRows - fixedRowsBottom - 1)) {\n            this.runLocalHooks('insertRowRequire', totalRows);\n            totalRows = this.options.countRows();\n          } else if (autoWrapCol) {\n            delta.row = 1 - totalRows;\n            delta.col = renderableColumn + delta.col === totalCols - 1 ? 1 - totalCols : 1;\n          }\n        } else if (autoWrapCol && renderableRow + delta.row < 0 && renderableColumn + delta.col >= 0) {\n          delta.row = totalRows - 1;\n          delta.col = renderableColumn + delta.col === 0 ? totalCols - 1 : -1;\n        }\n\n        if (renderableColumn + delta.col > totalCols - 1) {\n          if (force && minSpareCols > 0) {\n            this.runLocalHooks('insertColRequire', totalCols);\n            totalCols = this.options.countCols();\n          } else if (autoWrapRow) {\n            delta.row = renderableRow + delta.row === totalRows - 1 ? 1 - totalRows : 1;\n            delta.col = 1 - totalCols;\n          }\n        } else if (autoWrapRow && renderableColumn + delta.col < 0 && renderableRow + delta.row >= 0) {\n          delta.row = renderableRow + delta.row === 0 ? totalRows - 1 : -1;\n          delta.col = totalCols - 1;\n        }\n\n        var coords = new CellCoords(renderableRow + delta.row, renderableColumn + delta.col);\n        rowTransformDir = 0;\n        colTransformDir = 0;\n\n        if (coords.row < 0) {\n          rowTransformDir = -1;\n          coords.row = 0;\n        } else if (coords.row > 0 && coords.row >= totalRows) {\n          rowTransformDir = 1;\n          coords.row = totalRows - 1;\n        }\n\n        if (coords.col < 0) {\n          colTransformDir = -1;\n          coords.col = 0;\n        } else if (coords.col > 0 && coords.col >= totalCols) {\n          colTransformDir = 1;\n          coords.col = totalCols - 1;\n        }\n\n        visualCoords = this.options.renderableToVisualCoords(coords);\n      }\n\n      this.runLocalHooks('afterTransformStart', visualCoords, rowTransformDir, colTransformDir);\n      return visualCoords;\n    }\n    /**\n     * Sets selection end cell relative to current selection end cell (if possible).\n     *\n     * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n     * @param {number} colDelta Columns number to move, value can be passed as negative number.\n     * @returns {CellCoords} Visual coordinates after transformation.\n     */\n\n  }, {\n    key: \"transformEnd\",\n    value: function transformEnd(rowDelta, colDelta) {\n      var delta = new CellCoords(rowDelta, colDelta);\n      var cellRange = this.range.current();\n      var visualCoords = cellRange.to;\n      var rowTransformDir = 0;\n      var colTransformDir = 0;\n      this.runLocalHooks('beforeTransformEnd', delta);\n\n      var _this$options$visualT2 = this.options.visualToRenderableCoords(cellRange.highlight),\n          rowHighlight = _this$options$visualT2.row,\n          colHighlight = _this$options$visualT2.col; // We have highlight (start point for the selection).\n\n\n      if (rowHighlight !== null && colHighlight !== null) {\n        var totalRows = this.options.countRows();\n        var totalCols = this.options.countCols();\n\n        var _this$options$visualT3 = this.options.visualToRenderableCoords(cellRange.to),\n            rowTo = _this$options$visualT3.row,\n            colTo = _this$options$visualT3.col;\n\n        var coords = new CellCoords(rowTo + delta.row, colTo + delta.col);\n        rowTransformDir = 0;\n        colTransformDir = 0;\n\n        if (coords.row < 0) {\n          rowTransformDir = -1;\n          coords.row = 0;\n        } else if (coords.row > 0 && coords.row >= totalRows) {\n          rowTransformDir = 1;\n          coords.row = totalRows - 1;\n        }\n\n        if (coords.col < 0) {\n          colTransformDir = -1;\n          coords.col = 0;\n        } else if (coords.col > 0 && coords.col >= totalCols) {\n          colTransformDir = 1;\n          coords.col = totalCols - 1;\n        }\n\n        visualCoords = this.options.renderableToVisualCoords(coords);\n      }\n\n      this.runLocalHooks('afterTransformEnd', visualCoords, rowTransformDir, colTransformDir);\n      return visualCoords;\n    }\n  }]);\n\n  return Transformation;\n}();\n\nmixin(Transformation, localHooks);\nexport default Transformation;", "function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport { CellRange } from \"./../3rdparty/walkontable/src/index.mjs\";\nimport { arrayEach, arrayReduce } from \"./../helpers/array.mjs\";\nimport { isUndefined } from \"./../helpers/mixed.mjs\";\nexport var SELECTION_TYPE_UNRECOGNIZED = 0;\nexport var SELECTION_TYPE_EMPTY = 1;\nexport var SELECTION_TYPE_ARRAY = 2;\nexport var SELECTION_TYPE_OBJECT = 3;\nexport var SELECTION_TYPES = [SELECTION_TYPE_OBJECT, SELECTION_TYPE_ARRAY];\nvar ARRAY_TYPE_PATTERN = [['number'], ['number', 'string'], ['number', 'undefined'], ['number', 'string', 'undefined']];\nvar rootCall = Symbol('root');\nvar childCall = Symbol('child');\n/**\n * Detect selection schema structure.\n *\n * @param {*} selectionRanges The selected range or and array of selected ranges. This type of data is produced by\n * `hot.getSelected()`, `hot.getSelectedLast()`, `hot.getSelectedRange()`\n * and `hot.getSelectedRangeLast()` methods.\n * @param {symbol} _callSymbol The symbol object which indicates source of the helper invocation.\n * @returns {number} Returns a number that specifies the type of detected selection schema. If selection schema type\n * is unrecognized than it returns `0`.\n */\n\nexport function detectSelectionType(selectionRanges) {\n  var _callSymbol = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : rootCall;\n\n  if (_callSymbol !== rootCall && _callSymbol !== childCall) {\n    throw new Error('The second argument is used internally only and cannot be overwritten.');\n  }\n\n  var isArray = Array.isArray(selectionRanges);\n  var isRootCall = _callSymbol === rootCall;\n  var result = SELECTION_TYPE_UNRECOGNIZED;\n\n  if (isArray) {\n    var firstItem = selectionRanges[0];\n\n    if (selectionRanges.length === 0) {\n      result = SELECTION_TYPE_EMPTY;\n    } else if (isRootCall && firstItem instanceof CellRange) {\n      result = SELECTION_TYPE_OBJECT;\n    } else if (isRootCall && Array.isArray(firstItem)) {\n      result = detectSelectionType(firstItem, childCall);\n    } else if (selectionRanges.length >= 2 && selectionRanges.length <= 4) {\n      var isArrayType = !selectionRanges.some(function (value, index) {\n        return !ARRAY_TYPE_PATTERN[index].includes(_typeof(value));\n      });\n\n      if (isArrayType) {\n        result = SELECTION_TYPE_ARRAY;\n      }\n    }\n  }\n\n  return result;\n}\n/**\n * Factory function designed for normalization data schema from different data structures of the selection ranges.\n *\n * @param {number} type Selection type which will be processed.\n * @param {object} [options] The normalization options.\n * @param {boolean} [options.keepDirection=false] If `true`, the coordinates which contain the direction of the\n *                                                selected cells won't be changed. Otherwise, the selection will be\n *                                                normalized to values starting from top-left to bottom-right.\n * @param {Function} [options.propToCol] Pass the converting function (usually `datamap.propToCol`) if the column\n *                                       defined as props should be normalized to the numeric values.\n * @returns {number[]} Returns normalized data about selected range as an array (`[rowStart, columnStart, rowEnd, columnEnd]`).\n */\n\nexport function normalizeSelectionFactory(type) {\n  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      _ref$keepDirection = _ref.keepDirection,\n      keepDirection = _ref$keepDirection === void 0 ? false : _ref$keepDirection,\n      propToCol = _ref.propToCol;\n\n  if (!SELECTION_TYPES.includes(type)) {\n    throw new Error('Unsupported selection ranges schema type was provided.');\n  }\n\n  return function (selection) {\n    var isObjectType = type === SELECTION_TYPE_OBJECT;\n    var rowStart = isObjectType ? selection.from.row : selection[0];\n    var columnStart = isObjectType ? selection.from.col : selection[1];\n    var rowEnd = isObjectType ? selection.to.row : selection[2];\n    var columnEnd = isObjectType ? selection.to.col : selection[3];\n\n    if (typeof propToCol === 'function') {\n      if (typeof columnStart === 'string') {\n        columnStart = propToCol(columnStart);\n      }\n\n      if (typeof columnEnd === 'string') {\n        columnEnd = propToCol(columnEnd);\n      }\n    }\n\n    if (isUndefined(rowEnd)) {\n      rowEnd = rowStart;\n    }\n\n    if (isUndefined(columnEnd)) {\n      columnEnd = columnStart;\n    }\n\n    if (!keepDirection) {\n      var origRowStart = rowStart;\n      var origColumnStart = columnStart;\n      var origRowEnd = rowEnd;\n      var origColumnEnd = columnEnd;\n      rowStart = Math.min(origRowStart, origRowEnd);\n      columnStart = Math.min(origColumnStart, origColumnEnd);\n      rowEnd = Math.max(origRowStart, origRowEnd);\n      columnEnd = Math.max(origColumnStart, origColumnEnd);\n    }\n\n    return [rowStart, columnStart, rowEnd, columnEnd];\n  };\n}\n/**\n * Function transform selection ranges (produced by `hot.getSelected()` and `hot.getSelectedRange()`) to normalized\n * data structure. It merges repeated ranges into consecutive coordinates. The returned structure\n * contains an array of arrays. The single item contains at index 0 visual column index from the selection was\n * started and at index 1 distance as a count of selected columns.\n *\n * @param {Array[]|CellRange[]} selectionRanges Selection ranges produced by Handsontable.\n * @returns {Array[]} Returns an array of arrays with ranges defines in that schema:\n *                   `[[visualColumnStart, distance], [visualColumnStart, distance], ...]`.\n *                   The column distances are always created starting from the left (zero index) to the\n *                   right (the latest column index).\n */\n\nexport function transformSelectionToColumnDistance(selectionRanges) {\n  var selectionType = detectSelectionType(selectionRanges);\n\n  if (selectionType === SELECTION_TYPE_UNRECOGNIZED || selectionType === SELECTION_TYPE_EMPTY) {\n    return [];\n  }\n\n  var selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);\n  var unorderedIndexes = new Set(); // Iterate through all ranges and collect all column indexes which are not saved yet.\n\n  arrayEach(selectionRanges, function (selection) {\n    var _selectionSchemaNorma = selectionSchemaNormalizer(selection),\n        _selectionSchemaNorma2 = _slicedToArray(_selectionSchemaNorma, 4),\n        columnStart = _selectionSchemaNorma2[1],\n        columnEnd = _selectionSchemaNorma2[3];\n\n    var columnNonHeaderStart = Math.max(columnStart, 0);\n    var amount = columnEnd - columnNonHeaderStart + 1;\n    arrayEach(Array.from(new Array(amount), function (_, i) {\n      return columnNonHeaderStart + i;\n    }), function (index) {\n      if (!unorderedIndexes.has(index)) {\n        unorderedIndexes.add(index);\n      }\n    });\n  }); // Sort indexes in ascending order to easily detecting non-consecutive columns.\n\n  var orderedIndexes = Array.from(unorderedIndexes).sort(function (a, b) {\n    return a - b;\n  });\n  var normalizedColumnRanges = arrayReduce(orderedIndexes, function (acc, visualColumnIndex, index, array) {\n    if (index !== 0 && visualColumnIndex === array[index - 1] + 1) {\n      acc[acc.length - 1][1] += 1;\n    } else {\n      acc.push([visualColumnIndex, 1]);\n    }\n\n    return acc;\n  }, []);\n  return normalizedColumnRanges;\n}\n/**\n * Function transform selection ranges (produced by `hot.getSelected()` and `hot.getSelectedRange()`) to normalized\n * data structure. It merges repeated ranges into consecutive coordinates. The returned structure\n * contains an array of arrays. The single item contains at index 0 visual column index from the selection was\n * started and at index 1 distance as a count of selected columns.\n *\n * @param {Array[]|CellRange[]} selectionRanges Selection ranges produced by Handsontable.\n * @returns {Array[]} Returns an array of arrays with ranges defines in that schema:\n *                   `[[visualColumnStart, distance], [visualColumnStart, distance], ...]`.\n *                   The column distances are always created starting from the left (zero index) to the\n *                   right (the latest column index).\n */\n\nexport function transformSelectionToRowDistance(selectionRanges) {\n  var selectionType = detectSelectionType(selectionRanges);\n\n  if (selectionType === SELECTION_TYPE_UNRECOGNIZED || selectionType === SELECTION_TYPE_EMPTY) {\n    return [];\n  }\n\n  var selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);\n  var unorderedIndexes = new Set(); // Iterate through all ranges and collect all column indexes which are not saved yet.\n\n  arrayEach(selectionRanges, function (selection) {\n    var _selectionSchemaNorma3 = selectionSchemaNormalizer(selection),\n        _selectionSchemaNorma4 = _slicedToArray(_selectionSchemaNorma3, 3),\n        rowStart = _selectionSchemaNorma4[0],\n        rowEnd = _selectionSchemaNorma4[2];\n\n    var rowNonHeaderStart = Math.max(rowStart, 0);\n    var amount = rowEnd - rowNonHeaderStart + 1;\n    arrayEach(Array.from(new Array(amount), function (_, i) {\n      return rowNonHeaderStart + i;\n    }), function (index) {\n      if (!unorderedIndexes.has(index)) {\n        unorderedIndexes.add(index);\n      }\n    });\n  }); // Sort indexes in ascending order to easily detecting non-consecutive columns.\n\n  var orderedIndexes = Array.from(unorderedIndexes).sort(function (a, b) {\n    return a - b;\n  });\n  var normalizedRowRanges = arrayReduce(orderedIndexes, function (acc, rowIndex, index, array) {\n    if (index !== 0 && rowIndex === array[index - 1] + 1) {\n      acc[acc.length - 1][1] += 1;\n    } else {\n      acc.push([rowIndex, 1]);\n    }\n\n    return acc;\n  }, []);\n  return normalizedRowRanges;\n}\n/**\n * Check if passed value can be treated as valid cell coordinate. The second argument is\n * used to check if the value doesn't exceed the defined max table rows/columns count.\n *\n * @param {number} coord The coordinate to validate (row index or column index).\n * @param {number} maxTableItemsCount The value that declares the maximum coordinate that is still validatable.\n * @returns {boolean}\n */\n\nexport function isValidCoord(coord) {\n  var maxTableItemsCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Infinity;\n  return typeof coord === 'number' && coord >= 0 && coord < maxTableItemsCount;\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { stringify } from \"../3rdparty/SheetClip/index.mjs\";\nimport { cellMethodLookupFactory, countFirstRowKeys as _countFirstRowKeys } from \"../helpers/data.mjs\";\nimport { createObjectPropListener, deepClone, deepExtend, deepObjectSize, duckSchema, hasOwnProperty, isObject, objectEach } from \"../helpers/object.mjs\";\nimport { extendArray, to2dArray } from \"../helpers/array.mjs\";\nimport { rangeEach } from \"../helpers/number.mjs\";\nimport { isDefined } from \"../helpers/mixed.mjs\";\nvar copyableLookup = cellMethodLookupFactory('copyable', false);\n/*\nThis class contains open-source contributions covered by the MIT license.\n\n1) In the `createRow` method: Row creation using functional `dataSchema` value\n2) In the `set` method: Data setting using functional `prop` value\n3) in the `get` method: Data getting using functional `prop` value\n\nThe remaining part of this code comment contains the full license text of these contributions.\n\n======\n\nThe MIT License\n\nCopyright 2013 Nicholas Bollweg\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n/**\n * Utility class that gets and saves data from/to the data source using mapping of columns numbers to object property names.\n *\n * @todo Refactor arguments of methods getRange, getText to be numbers (not objects).\n * @todo Remove priv, GridSettings from object constructor.\n *\n * @class DataMap\n * @private\n */\n\nvar DataMap = /*#__PURE__*/function () {\n  /**\n   * @param {object} instance Instance of Handsontable.\n   * @param {Array} data Array of arrays or array of objects containing data.\n   * @param {TableMeta} tableMeta The table meta instance.\n   */\n  function DataMap(instance, data, tableMeta) {\n    _classCallCheck(this, DataMap);\n\n    /**\n     * Instance of {@link Handsontable}.\n     *\n     * @private\n     * @type {Handsontable}\n     */\n    this.instance = instance;\n    /**\n     * Instance of {@link TableMeta}.\n     *\n     * @private\n     * @type {TableMeta}\n     */\n\n    this.tableMeta = tableMeta;\n    /**\n     * Reference to the original dataset.\n     *\n     * @type {*}\n     */\n\n    this.dataSource = data;\n    /**\n     * Generated schema based on the first row from the source data.\n     *\n     * @type {object}\n     */\n\n    this.duckSchema = this.dataSource && this.dataSource[0] ? duckSchema(this.dataSource[0]) : {};\n    /**\n     * Cached array of properties to columns.\n     *\n     * @type {Array}\n     */\n\n    this.colToPropCache = void 0;\n    /**\n     * Cached map of properties to columns.\n     *\n     * @type {Map}\n     */\n\n    this.propToColCache = void 0;\n    this.createMap();\n  }\n  /**\n   * Generates cache for property to and from column addressation.\n   */\n\n\n  _createClass(DataMap, [{\n    key: \"createMap\",\n    value: function createMap() {\n      var schema = this.getSchema();\n\n      if (typeof schema === 'undefined') {\n        throw new Error('trying to create `columns` definition but you didn\\'t provide `schema` nor `data`');\n      }\n\n      var columns = this.tableMeta.columns;\n      var i;\n      this.colToPropCache = [];\n      this.propToColCache = new Map();\n\n      if (columns) {\n        var columnsLen = 0;\n        var filteredIndex = 0;\n        var columnsAsFunc = false;\n\n        if (typeof columns === 'function') {\n          var schemaLen = deepObjectSize(schema);\n          columnsLen = schemaLen > 0 ? schemaLen : this.countFirstRowKeys();\n          columnsAsFunc = true;\n        } else {\n          var maxCols = this.tableMeta.maxCols;\n          columnsLen = Math.min(maxCols, columns.length);\n        }\n\n        for (i = 0; i < columnsLen; i++) {\n          var column = columnsAsFunc ? columns(i) : columns[i];\n\n          if (isObject(column)) {\n            if (typeof column.data !== 'undefined') {\n              var index = columnsAsFunc ? filteredIndex : i;\n              this.colToPropCache[index] = column.data;\n              this.propToColCache.set(column.data, index);\n            }\n\n            filteredIndex += 1;\n          }\n        }\n      } else {\n        this.recursiveDuckColumns(schema);\n      }\n    }\n    /**\n     * Get the amount of physical columns in the first data row.\n     *\n     * @returns {number} Amount of physical columns in the first data row.\n     */\n\n  }, {\n    key: \"countFirstRowKeys\",\n    value: function countFirstRowKeys() {\n      return _countFirstRowKeys(this.dataSource);\n    }\n    /**\n     * Generates columns' translation cache.\n     *\n     * @param {object} schema An object to generate schema from.\n     * @param {number} lastCol The column index.\n     * @param {number} parent The property cache for recursive calls.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"recursiveDuckColumns\",\n    value: function recursiveDuckColumns(schema, lastCol, parent) {\n      var _this = this;\n\n      var lastColumn = lastCol;\n      var propertyParent = parent;\n      var prop;\n\n      if (typeof lastColumn === 'undefined') {\n        lastColumn = 0;\n        propertyParent = '';\n      }\n\n      if (_typeof(schema) === 'object' && !Array.isArray(schema)) {\n        objectEach(schema, function (value, key) {\n          if (value === null) {\n            prop = propertyParent + key;\n\n            _this.colToPropCache.push(prop);\n\n            _this.propToColCache.set(prop, lastColumn);\n\n            lastColumn += 1;\n          } else {\n            lastColumn = _this.recursiveDuckColumns(value, lastColumn, \"\".concat(key, \".\"));\n          }\n        });\n      }\n\n      return lastColumn;\n    }\n    /**\n     * Returns property name that corresponds with the given column index.\n     *\n     * @param {string|number} column Visual column index or another passed argument.\n     * @returns {string|number} Column property, physical column index or passed argument.\n     */\n\n  }, {\n    key: \"colToProp\",\n    value: function colToProp(column) {\n      // TODO: Should it work? Please, look at the test:\n      // \"it should return the provided property name, when the user passes a property name as a column number\".\n      if (Number.isInteger(column) === false) {\n        return column;\n      }\n\n      var physicalColumn = this.instance.toPhysicalColumn(column); // Out of range, not visible column index.\n\n      if (physicalColumn === null) {\n        return column;\n      } // Cached property.\n\n\n      if (this.colToPropCache && isDefined(this.colToPropCache[physicalColumn])) {\n        return this.colToPropCache[physicalColumn];\n      }\n\n      return physicalColumn;\n    }\n    /**\n     * Translates property into visual column index.\n     *\n     * @param {string|number} prop Column property which may be also a physical column index.\n     * @returns {string|number} Visual column index or passed argument.\n     */\n\n  }, {\n    key: \"propToCol\",\n    value: function propToCol(prop) {\n      var cachedPhysicalIndex = this.propToColCache.get(prop);\n\n      if (isDefined(cachedPhysicalIndex)) {\n        return this.instance.toVisualColumn(cachedPhysicalIndex);\n      } // Property may be a physical column index.\n\n\n      var visualColumn = this.instance.toVisualColumn(prop);\n\n      if (visualColumn === null) {\n        return prop;\n      }\n\n      return visualColumn;\n    }\n    /**\n     * Returns data's schema.\n     *\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getSchema\",\n    value: function getSchema() {\n      var schema = this.tableMeta.dataSchema;\n\n      if (schema) {\n        if (typeof schema === 'function') {\n          return schema();\n        }\n\n        return schema;\n      }\n\n      return this.duckSchema;\n    }\n    /**\n     * Creates row at the bottom of the data array.\n     *\n     * @param {number} [index] Physical index of the row before which the new row will be inserted.\n     * @param {number} [amount=1] An amount of rows to add.\n     * @param {string} [source] Source of method call.\n     * @fires Hooks#afterCreateRow\n     * @returns {number} Returns number of created rows.\n     */\n\n  }, {\n    key: \"createRow\",\n    value: function createRow(index) {\n      var _this2 = this;\n\n      var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      var source = arguments.length > 2 ? arguments[2] : undefined;\n      var sourceRowsCount = this.instance.countSourceRows();\n      var physicalRowIndex = sourceRowsCount;\n      var numberOfCreatedRows = 0;\n      var rowIndex = index;\n\n      if (typeof rowIndex !== 'number' || rowIndex >= sourceRowsCount) {\n        rowIndex = sourceRowsCount;\n      }\n\n      if (rowIndex < this.instance.countRows()) {\n        physicalRowIndex = this.instance.toPhysicalRow(rowIndex);\n      }\n\n      var continueProcess = this.instance.runHooks('beforeCreateRow', rowIndex, amount, source);\n\n      if (continueProcess === false || physicalRowIndex === null) {\n        return 0;\n      }\n\n      var maxRows = this.tableMeta.maxRows;\n      var columnCount = this.instance.countCols();\n      var rowsToAdd = [];\n\n      var _loop = function _loop() {\n        var row = null;\n\n        if (_this2.instance.dataType === 'array') {\n          if (_this2.tableMeta.dataSchema) {\n            // Clone template array\n            row = deepClone(_this2.getSchema());\n          } else {\n            row = [];\n            /* eslint-disable no-loop-func */\n\n            rangeEach(columnCount - 1, function () {\n              return row.push(null);\n            });\n          }\n        } else if (_this2.instance.dataType === 'function') {\n          row = _this2.tableMeta.dataSchema(rowIndex + numberOfCreatedRows);\n        } else {\n          row = {};\n          deepExtend(row, _this2.getSchema());\n        }\n\n        rowsToAdd.push(row);\n        numberOfCreatedRows += 1;\n      };\n\n      while (numberOfCreatedRows < amount && sourceRowsCount + numberOfCreatedRows < maxRows) {\n        _loop();\n      }\n\n      this.instance.rowIndexMapper.insertIndexes(rowIndex, numberOfCreatedRows);\n      this.spliceData.apply(this, [physicalRowIndex, 0].concat(rowsToAdd));\n      this.instance.runHooks('afterCreateRow', rowIndex, numberOfCreatedRows, source);\n      this.instance.forceFullRender = true; // used when data was changed\n\n      return numberOfCreatedRows;\n    }\n    /**\n     * Creates column at the right of the data array.\n     *\n     * @param {number} [index] Visual index of the column before which the new column will be inserted.\n     * @param {number} [amount=1] An amount of columns to add.\n     * @param {string} [source] Source of method call.\n     * @fires Hooks#afterCreateCol\n     * @returns {number} Returns number of created columns.\n     */\n\n  }, {\n    key: \"createCol\",\n    value: function createCol(index) {\n      var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      var source = arguments.length > 2 ? arguments[2] : undefined;\n\n      if (!this.instance.isColumnModificationAllowed()) {\n        throw new Error('Cannot create new column. When data source in an object, ' + 'you can only have as much columns as defined in first data row, data schema or in the \\'columns\\' setting.' + 'If you want to be able to add new columns, you have to use array datasource.');\n      }\n\n      var dataSource = this.dataSource;\n      var maxCols = this.tableMeta.maxCols;\n      var columnIndex = index;\n\n      if (typeof columnIndex !== 'number' || columnIndex >= this.instance.countSourceCols()) {\n        columnIndex = this.instance.countSourceCols();\n      }\n\n      var continueProcess = this.instance.runHooks('beforeCreateCol', columnIndex, amount, source);\n\n      if (continueProcess === false) {\n        return 0;\n      }\n\n      var physicalColumnIndex = this.instance.countSourceCols();\n\n      if (columnIndex < this.instance.countCols()) {\n        physicalColumnIndex = this.instance.toPhysicalColumn(columnIndex);\n      }\n\n      var numberOfSourceRows = this.instance.countSourceRows();\n      var nrOfColumns = this.instance.countCols();\n      var numberOfCreatedCols = 0;\n      var currentIndex = physicalColumnIndex;\n\n      while (numberOfCreatedCols < amount && nrOfColumns < maxCols) {\n        if (typeof columnIndex !== 'number' || columnIndex >= nrOfColumns) {\n          if (numberOfSourceRows > 0) {\n            for (var row = 0; row < numberOfSourceRows; row += 1) {\n              if (typeof dataSource[row] === 'undefined') {\n                dataSource[row] = [];\n              }\n\n              dataSource[row].push(null);\n            }\n          } else {\n            dataSource.push([null]);\n          }\n        } else {\n          for (var _row = 0; _row < numberOfSourceRows; _row++) {\n            dataSource[_row].splice(currentIndex, 0, null);\n          }\n        }\n\n        numberOfCreatedCols += 1;\n        currentIndex += 1;\n        nrOfColumns += 1;\n      }\n\n      this.instance.columnIndexMapper.insertIndexes(columnIndex, numberOfCreatedCols);\n      this.instance.runHooks('afterCreateCol', columnIndex, numberOfCreatedCols, source);\n      this.instance.forceFullRender = true; // used when data was changed\n\n      return numberOfCreatedCols;\n    }\n    /**\n     * Removes row from the data array.\n     *\n     * @fires Hooks#beforeRemoveRow\n     * @fires Hooks#afterRemoveRow\n     * @param {number} [index] Visual index of the row to be removed. If not provided, the last row will be removed.\n     * @param {number} [amount=1] Amount of the rows to be removed. If not provided, one row will be removed.\n     * @param {string} [source] Source of method call.\n     * @returns {boolean} Returns `false` when action was cancelled, otherwise `true`.\n     */\n\n  }, {\n    key: \"removeRow\",\n    value: function removeRow(index) {\n      var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      var source = arguments.length > 2 ? arguments[2] : undefined;\n      var rowIndex = Number.isInteger(index) ? index : -amount; // -amount = taking indexes from the end.\n\n      var removedPhysicalIndexes = this.visualRowsToPhysical(rowIndex, amount);\n      var sourceRowsLength = this.instance.countSourceRows();\n      rowIndex = (sourceRowsLength + rowIndex) % sourceRowsLength; // It handle also callback from the `NestedRows` plugin. Removing parent node has effect in removing children nodes.\n\n      var actionWasNotCancelled = this.instance.runHooks('beforeRemoveRow', rowIndex, removedPhysicalIndexes.length, removedPhysicalIndexes, source);\n\n      if (actionWasNotCancelled === false) {\n        return false;\n      } // List of removed indexes might be changed in the `beforeRemoveRow` hook. There may be new values.\n\n\n      var numberOfRemovedIndexes = removedPhysicalIndexes.length;\n      this.filterData(rowIndex, numberOfRemovedIndexes, removedPhysicalIndexes); // TODO: Function `removeRow` should validate fully, probably above.\n\n      if (rowIndex < this.instance.countRows()) {\n        this.instance.rowIndexMapper.removeIndexes(removedPhysicalIndexes);\n        var customDefinedColumns = isDefined(this.tableMeta.columns) || isDefined(this.tableMeta.dataSchema); // All rows have been removed. There shouldn't be any columns.\n\n        if (this.instance.rowIndexMapper.getNotTrimmedIndexesLength() === 0 && customDefinedColumns === false) {\n          this.instance.columnIndexMapper.setIndexesSequence([]);\n        }\n      }\n\n      this.instance.runHooks('afterRemoveRow', rowIndex, numberOfRemovedIndexes, removedPhysicalIndexes, source);\n      this.instance.forceFullRender = true; // used when data was changed\n\n      return true;\n    }\n    /**\n     * Removes column from the data array.\n     *\n     * @fires Hooks#beforeRemoveCol\n     * @fires Hooks#afterRemoveCol\n     * @param {number} [index] Visual index of the column to be removed. If not provided, the last column will be removed.\n     * @param {number} [amount=1] Amount of the columns to be removed. If not provided, one column will be removed.\n     * @param {string} [source] Source of method call.\n     * @returns {boolean} Returns `false` when action was cancelled, otherwise `true`.\n     */\n\n  }, {\n    key: \"removeCol\",\n    value: function removeCol(index) {\n      var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      var source = arguments.length > 2 ? arguments[2] : undefined;\n\n      if (this.instance.dataType === 'object' || this.tableMeta.columns) {\n        throw new Error('cannot remove column with object data source or columns option specified');\n      }\n\n      var columnIndex = typeof index !== 'number' ? -amount : index;\n      columnIndex = (this.instance.countCols() + columnIndex) % this.instance.countCols();\n      var logicColumns = this.visualColumnsToPhysical(columnIndex, amount);\n      var descendingLogicColumns = logicColumns.slice(0).sort(function (a, b) {\n        return b - a;\n      });\n      var actionWasNotCancelled = this.instance.runHooks('beforeRemoveCol', columnIndex, amount, logicColumns, source);\n\n      if (actionWasNotCancelled === false) {\n        return false;\n      }\n\n      var isTableUniform = true;\n      var removedColumnsCount = descendingLogicColumns.length;\n      var data = this.dataSource;\n\n      for (var c = 0; c < removedColumnsCount; c++) {\n        if (isTableUniform && logicColumns[0] !== logicColumns[c] - c) {\n          isTableUniform = false;\n        }\n      }\n\n      if (isTableUniform) {\n        for (var r = 0, rlen = this.instance.countSourceRows(); r < rlen; r++) {\n          data[r].splice(logicColumns[0], amount);\n        }\n      } else {\n        for (var _r = 0, _rlen = this.instance.countSourceRows(); _r < _rlen; _r++) {\n          for (var _c = 0; _c < removedColumnsCount; _c++) {\n            data[_r].splice(descendingLogicColumns[_c], 1);\n          }\n        }\n      } // TODO: Function `removeCol` should validate fully, probably above.\n\n\n      if (columnIndex < this.instance.countCols()) {\n        this.instance.columnIndexMapper.removeIndexes(logicColumns); // All columns have been removed. There shouldn't be any rows.\n\n        if (this.instance.columnIndexMapper.getNotTrimmedIndexesLength() === 0) {\n          this.instance.rowIndexMapper.setIndexesSequence([]);\n        }\n      }\n\n      this.instance.runHooks('afterRemoveCol', columnIndex, amount, logicColumns, source);\n      this.instance.forceFullRender = true; // used when data was changed\n\n      return true;\n    }\n    /**\n     * Add/Removes data from the column.\n     *\n     * @param {number} col Physical index of column in which do you want to do splice.\n     * @param {number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n     * @param {number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n     * @param {Array} [elements] The new columns to add.\n     * @returns {Array} Returns removed portion of columns.\n     */\n\n  }, {\n    key: \"spliceCol\",\n    value: function spliceCol(col, index, amount) {\n      var colData = this.instance.getDataAtCol(col);\n      var removed = colData.slice(index, index + amount);\n      var after = colData.slice(index + amount);\n\n      for (var _len = arguments.length, elements = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n        elements[_key - 3] = arguments[_key];\n      }\n\n      extendArray(elements, after);\n      var i = 0;\n\n      while (i < amount) {\n        elements.push(null); // add null in place of removed elements\n\n        i += 1;\n      }\n\n      to2dArray(elements);\n      this.instance.populateFromArray(index, col, elements, null, null, 'spliceCol');\n      return removed;\n    }\n    /**\n     * Add/Removes data from the row.\n     *\n     * @param {number} row Physical index of row in which do you want to do splice.\n     * @param {number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n     * @param {number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n     * @param {Array} [elements] The new rows to add.\n     * @returns {Array} Returns removed portion of rows.\n     */\n\n  }, {\n    key: \"spliceRow\",\n    value: function spliceRow(row, index, amount) {\n      var rowData = this.instance.getSourceDataAtRow(row);\n      var removed = rowData.slice(index, index + amount);\n      var after = rowData.slice(index + amount);\n\n      for (var _len2 = arguments.length, elements = new Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {\n        elements[_key2 - 3] = arguments[_key2];\n      }\n\n      extendArray(elements, after);\n      var i = 0;\n\n      while (i < amount) {\n        elements.push(null); // add null in place of removed elements\n\n        i += 1;\n      }\n\n      this.instance.populateFromArray(row, index, [elements], null, null, 'spliceRow');\n      return removed;\n    }\n    /**\n     * Add/remove row(s) to/from the data source.\n     *\n     * @param {number} index Physical index of the element to add/remove.\n     * @param {number} amount Number of rows to add/remove.\n     * @param {...object} elements Row elements to be added.\n     */\n\n  }, {\n    key: \"spliceData\",\n    value: function spliceData(index, amount) {\n      for (var _len3 = arguments.length, elements = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n        elements[_key3 - 2] = arguments[_key3];\n      }\n\n      var continueSplicing = this.instance.runHooks('beforeDataSplice', index, amount, elements);\n\n      if (continueSplicing !== false) {\n        var _this$dataSource;\n\n        (_this$dataSource = this.dataSource).splice.apply(_this$dataSource, [index, amount].concat(elements));\n      }\n    }\n    /**\n     * Filter unwanted data elements from the data source.\n     *\n     * @param {number} index Visual index of the element to remove.\n     * @param {number} amount Number of rows to add/remove.\n     * @param {number} physicalRows Physical row indexes.\n     */\n\n  }, {\n    key: \"filterData\",\n    value: function filterData(index, amount, physicalRows) {\n      // Custom data filtering (run as a consequence of calling the below hook) provide an array containing new data.\n      var data = this.instance.runHooks('filterData', index, amount, physicalRows); // Hooks by default returns first argument (when there is no callback changing execution result).\n\n      if (Array.isArray(data) === false) {\n        data = this.dataSource.filter(function (row, rowIndex) {\n          return physicalRows.indexOf(rowIndex) === -1;\n        });\n      }\n\n      this.dataSource.length = 0;\n      Array.prototype.push.apply(this.dataSource, data);\n    }\n    /**\n     * Returns single value from the data array.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} prop The column property.\n     * @returns {*}\n     */\n\n  }, {\n    key: \"get\",\n    value: function get(row, prop) {\n      var physicalRow = this.instance.toPhysicalRow(row);\n      var dataRow = this.dataSource[physicalRow]; // TODO: To remove, use 'modifyData' hook instead (see below)\n\n      var modifiedRowData = this.instance.runHooks('modifyRowData', physicalRow);\n      dataRow = isNaN(modifiedRowData) ? modifiedRowData : dataRow; //\n\n      var value = null; // try to get value under property `prop` (includes dot)\n\n      if (dataRow && dataRow.hasOwnProperty && hasOwnProperty(dataRow, prop)) {\n        value = dataRow[prop];\n      } else if (typeof prop === 'string' && prop.indexOf('.') > -1) {\n        var sliced = prop.split('.');\n        var out = dataRow;\n\n        if (!out) {\n          return null;\n        }\n\n        for (var i = 0, ilen = sliced.length; i < ilen; i++) {\n          out = out[sliced[i]];\n\n          if (typeof out === 'undefined') {\n            return null;\n          }\n        }\n\n        value = out;\n      } else if (typeof prop === 'function') {\n        value = prop(this.dataSource.slice(physicalRow, physicalRow + 1)[0]);\n      }\n\n      if (this.instance.hasHook('modifyData')) {\n        var valueHolder = createObjectPropListener(value);\n        this.instance.runHooks('modifyData', physicalRow, this.propToCol(prop), valueHolder, 'get');\n\n        if (valueHolder.isTouched()) {\n          value = valueHolder.value;\n        }\n      }\n\n      return value;\n    }\n    /**\n     * Returns single value from the data array (intended for clipboard copy to an external application).\n     *\n     * @param {number} row Physical row index.\n     * @param {number} prop The column property.\n     * @returns {string}\n     */\n\n  }, {\n    key: \"getCopyable\",\n    value: function getCopyable(row, prop) {\n      if (copyableLookup.call(this.instance, row, this.propToCol(prop))) {\n        return this.get(row, prop);\n      }\n\n      return '';\n    }\n    /**\n     * Saves single value to the data array.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} prop The column property.\n     * @param {string} value The value to set.\n     */\n\n  }, {\n    key: \"set\",\n    value: function set(row, prop, value) {\n      var physicalRow = this.instance.toPhysicalRow(row);\n      var newValue = value;\n      var dataRow = this.dataSource[physicalRow]; // TODO: To remove, use 'modifyData' hook instead (see below)\n\n      var modifiedRowData = this.instance.runHooks('modifyRowData', physicalRow);\n      dataRow = isNaN(modifiedRowData) ? modifiedRowData : dataRow; //\n\n      if (this.instance.hasHook('modifyData')) {\n        var valueHolder = createObjectPropListener(newValue);\n        this.instance.runHooks('modifyData', physicalRow, this.propToCol(prop), valueHolder, 'set');\n\n        if (valueHolder.isTouched()) {\n          newValue = valueHolder.value;\n        }\n      } // try to set value under property `prop` (includes dot)\n\n\n      if (dataRow && dataRow.hasOwnProperty && hasOwnProperty(dataRow, prop)) {\n        dataRow[prop] = newValue;\n      } else if (typeof prop === 'string' && prop.indexOf('.') > -1) {\n        var sliced = prop.split('.');\n        var out = dataRow;\n        var i = 0;\n        var ilen;\n\n        for (i = 0, ilen = sliced.length - 1; i < ilen; i++) {\n          if (typeof out[sliced[i]] === 'undefined') {\n            out[sliced[i]] = {};\n          }\n\n          out = out[sliced[i]];\n        }\n\n        out[sliced[i]] = newValue;\n      } else if (typeof prop === 'function') {\n        prop(this.dataSource.slice(physicalRow, physicalRow + 1)[0], newValue);\n      } else {\n        dataRow[prop] = newValue;\n      }\n    }\n    /**\n     * This ridiculous piece of code maps rows Id that are present in table data to those displayed for user.\n     * The trick is, the physical row id (stored in settings.data) is not necessary the same\n     * as the visual (displayed) row id (e.g. When sorting is applied).\n     *\n     * @param {number} index Visual row index.\n     * @param {number} amount An amount of rows to translate.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"visualRowsToPhysical\",\n    value: function visualRowsToPhysical(index, amount) {\n      var totalRows = this.instance.countSourceRows();\n      var logicRows = [];\n      var physicRow = (totalRows + index) % totalRows;\n      var rowsToRemove = amount;\n      var row;\n\n      while (physicRow < totalRows && rowsToRemove) {\n        row = this.instance.toPhysicalRow(physicRow);\n        logicRows.push(row);\n        rowsToRemove -= 1;\n        physicRow += 1;\n      }\n\n      return logicRows;\n    }\n    /**\n     *\n     * @param {number} index Visual column index.\n     * @param {number} amount An amount of rows to translate.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"visualColumnsToPhysical\",\n    value: function visualColumnsToPhysical(index, amount) {\n      var totalCols = this.instance.countCols();\n      var visualCols = [];\n      var physicalCol = (totalCols + index) % totalCols;\n      var colsToRemove = amount;\n\n      while (physicalCol < totalCols && colsToRemove) {\n        var col = this.instance.toPhysicalColumn(physicalCol);\n        visualCols.push(col);\n        colsToRemove -= 1;\n        physicalCol += 1;\n      }\n\n      return visualCols;\n    }\n    /**\n     * Clears the data array.\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      for (var r = 0; r < this.instance.countSourceRows(); r++) {\n        for (var c = 0; c < this.instance.countCols(); c++) {\n          this.set(r, this.colToProp(c), '');\n        }\n      }\n    }\n    /**\n     * Get data length.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getLength\",\n    value: function getLength() {\n      var maxRowsFromSettings = this.tableMeta.maxRows;\n      var maxRows;\n\n      if (maxRowsFromSettings < 0 || maxRowsFromSettings === 0) {\n        maxRows = 0;\n      } else {\n        maxRows = maxRowsFromSettings || Infinity;\n      }\n\n      var length = this.instance.rowIndexMapper.getNotTrimmedIndexesLength();\n      return Math.min(length, maxRows);\n    }\n    /**\n     * Returns the data array.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getAll\",\n    value: function getAll() {\n      var start = {\n        row: 0,\n        col: 0\n      };\n      var end = {\n        row: Math.max(this.instance.countRows() - 1, 0),\n        col: Math.max(this.instance.countCols() - 1, 0)\n      };\n\n      if (start.row - end.row === 0 && !this.instance.countSourceRows()) {\n        return [];\n      }\n\n      return this.getRange(start, end, DataMap.DESTINATION_RENDERER);\n    }\n    /**\n     * Count the number of columns cached in the `colToProp` cache.\n     *\n     * @returns {number} Amount of cached columns.\n     */\n\n  }, {\n    key: \"countCachedColumns\",\n    value: function countCachedColumns() {\n      return this.colToPropCache.length;\n    }\n    /**\n     * Returns data range as array.\n     *\n     * @param {object} [start] Start selection position. Visual indexes.\n     * @param {object} [end] End selection position. Visual indexes.\n     * @param {number} destination Destination of datamap.get.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getRange\",\n    value: function getRange(start, end, destination) {\n      var output = [];\n      var r;\n      var c;\n      var row;\n      var maxRows = this.tableMeta.maxRows;\n      var maxCols = this.tableMeta.maxCols;\n\n      if (maxRows === 0 || maxCols === 0) {\n        return [];\n      }\n\n      var getFn = destination === DataMap.DESTINATION_CLIPBOARD_GENERATOR ? this.getCopyable : this.get;\n      var rlen = Math.min(Math.max(maxRows - 1, 0), Math.max(start.row, end.row));\n      var clen = Math.min(Math.max(maxCols - 1, 0), Math.max(start.col, end.col));\n\n      for (r = Math.min(start.row, end.row); r <= rlen; r++) {\n        row = []; // We just store indexes for rows without headers.\n\n        var physicalRow = r >= 0 ? this.instance.toPhysicalRow(r) : r;\n\n        for (c = Math.min(start.col, end.col); c <= clen; c++) {\n          if (physicalRow === null) {\n            break;\n          }\n\n          row.push(getFn.call(this, r, this.colToProp(c)));\n        }\n\n        if (physicalRow !== null) {\n          output.push(row);\n        }\n      }\n\n      return output;\n    }\n    /**\n     * Return data as text (tab separated columns).\n     *\n     * @param {object} [start] Start selection position. Visual indexes.\n     * @param {object} [end] End selection position. Visual indexes.\n     * @returns {string}\n     */\n\n  }, {\n    key: \"getText\",\n    value: function getText(start, end) {\n      return stringify(this.getRange(start, end, DataMap.DESTINATION_RENDERER));\n    }\n    /**\n     * Return data as copyable text (tab separated columns intended for clipboard copy to an external application).\n     *\n     * @param {object} [start] Start selection position. Visual indexes.\n     * @param {object} [end] End selection position. Visual indexes.\n     * @returns {string}\n     */\n\n  }, {\n    key: \"getCopyableText\",\n    value: function getCopyableText(start, end) {\n      return stringify(this.getRange(start, end, DataMap.DESTINATION_CLIPBOARD_GENERATOR));\n    }\n    /**\n     * Destroy instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.instance = null;\n      this.tableMeta = null;\n      this.dataSource = null;\n      this.duckSchema = null;\n      this.colToPropCache.length = 0;\n      this.propToColCache.clear();\n      this.propToColCache = void 0;\n    }\n  }], [{\n    key: \"DESTINATION_RENDERER\",\n    get:\n    /**\n     * @type {number}\n     */\n    function get() {\n      return 1;\n    }\n    /**\n     * @type {number}\n     */\n\n  }, {\n    key: \"DESTINATION_CLIPBOARD_GENERATOR\",\n    get: function get() {\n      return 2;\n    }\n  }]);\n\n  return DataMap;\n}();\n\nexport default DataMap;", "import \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.match.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.string.starts-with.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.fill.js\";\nimport \"core-js/modules/es.array.index-of.js\";\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * SheetClip - Spreadsheet Clipboard Parser.\n * version 0.2\n *\n * This tiny library transforms JavaScript arrays to strings that are pasteable by LibreOffice, OpenOffice,\n * Google Docs and Microsoft Excel.\n *\n * Copyright 2012, Marcin Warpechowski\n * Licensed under the MIT license.\n * http://github.com/warpech/sheetclip/\n */\nvar regUniversalNewLine = /^(\\r\\n|\\n\\r|\\r|\\n)/;\nvar regNextCellNoQuotes = /^[^\\t\\r\\n]+/;\nvar regNextEmptyCell = /^\\t/;\n/**\n * Decode spreadsheet string into array.\n *\n * @param {string} str The string to parse.\n * @returns {Array}\n */\n\nexport function parse(str) {\n  var arr = [['']];\n\n  if (str.length === 0) {\n    return arr;\n  }\n\n  var column = 0;\n  var row = 0;\n  var lastLength;\n\n  while (str.length > 0) {\n    if (lastLength === str.length) {\n      // In the case If in last cycle we didn't match anything, we have to leave the infinite loop\n      break;\n    }\n\n    lastLength = str.length;\n\n    if (str.match(regNextEmptyCell)) {\n      str = str.replace(regNextEmptyCell, '');\n      column += 1;\n      arr[row][column] = '';\n    } else if (str.match(regUniversalNewLine)) {\n      str = str.replace(regUniversalNewLine, '');\n      column = 0;\n      row += 1;\n      arr[row] = [''];\n    } else {\n      var nextCell = '';\n\n      if (str.startsWith('\"')) {\n        var quoteNo = 0;\n        var isStillCell = true;\n\n        while (isStillCell) {\n          var nextChar = str.slice(0, 1);\n\n          if (nextChar === '\"') {\n            quoteNo += 1;\n          }\n\n          nextCell += nextChar;\n          str = str.slice(1);\n\n          if (str.length === 0 || str.match(/^[\\t\\r\\n]/) && quoteNo % 2 === 0) {\n            isStillCell = false;\n          }\n        }\n\n        nextCell = nextCell.replace(/^\"/, '').replace(/\"$/, '').replace(/[\"]*/g, function (match) {\n          return new Array(Math.floor(match.length / 2)).fill('\"').join('');\n        });\n      } else {\n        var matchedText = str.match(regNextCellNoQuotes);\n        nextCell = matchedText ? matchedText[0] : '';\n        str = str.slice(nextCell.length);\n      }\n\n      arr[row][column] = nextCell;\n    }\n  }\n\n  return arr;\n}\n/**\n * Encode array into valid spreadsheet string.\n *\n * @param {Array} arr An array of arrays to stringify.\n * @returns {string}\n */\n\nexport function stringify(arr) {\n  var r;\n  var rLen;\n  var c;\n  var cLen;\n  var str = '';\n  var val;\n\n  for (r = 0, rLen = arr.length; r < rLen; r += 1) {\n    cLen = arr[r].length;\n\n    for (c = 0; c < cLen; c += 1) {\n      if (c > 0) {\n        str += '\\t';\n      }\n\n      val = arr[r][c];\n\n      if (typeof val === 'string') {\n        if (val.indexOf('\\n') > -1) {\n          str += \"\\\"\".concat(val.replace(/\"/g, '\"\"'), \"\\\"\");\n        } else {\n          str += val;\n        }\n      } else if (val === null || val === void 0) {\n        // void 0 resolves to undefined\n        str += '';\n      } else {\n        str += val;\n      }\n    }\n\n    if (r !== rLen - 1) {\n      str += '\\n';\n    }\n  }\n\n  return str;\n}", "'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\n// eslint-disable-next-line es/no-string-prototype-startswith -- safe\nvar un$StartsWith = uncurryThis(''.startsWith);\nvar stringSlice = uncurryThis(''.slice);\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n  var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\n  return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.startsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.startswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = toString(requireObjectCoercible(this));\n    notARegExp(searchString);\n    var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = toString(searchString);\n    return un$StartsWith\n      ? un$StartsWith(that, search, index)\n      : stringSlice(that, index, index + search.length) === search;\n  }\n});\n", "import \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport { hasOwnProperty, isObject, objectEach, inherit } from \"../../helpers/object.mjs\";\nimport { getCellType } from \"../../cellTypes/registry.mjs\";\n/**\n * Expands \"type\" property of the meta object to single values. For example `type: 'numeric'` sets\n * \"renderer\", \"editor\", \"validator\" properties to specific functions designed for numeric values.\n * If \"type\" is passed as an object that object will be returned, excluding properties that\n * already exist in the \"metaObject\" if passed.\n *\n * @param {object|string} type Type to expand;.\n * @param {object|undefined} [metaObject] Source meta object.\n * @returns {object|undefined}\n */\n\nexport function expandMetaType(type, metaObject) {\n  var validType = typeof type === 'string' ? getCellType(type) : type;\n\n  if (!isObject(validType)) {\n    return;\n  }\n\n  var preventSourceOverwrite = isObject(metaObject);\n  var expandedType = {};\n  objectEach(validType, function (value, property) {\n    if (property !== 'CELL_TYPE' && (!preventSourceOverwrite || preventSourceOverwrite && !hasOwnProperty(metaObject, property))) {\n      expandedType[property] = value;\n    }\n  });\n  return expandedType;\n}\n/**\n * Creates new class which extends properties from TableMeta layer class.\n *\n * @param {TableMeta} TableMeta The TableMeta which the new ColumnMeta is created from.\n * @param {string[]} [conflictList] List of the properties which are conflicted with the column meta layer.\n *                                  Conflicted properties are overwritten by `undefined` value, to separate them\n *                                  from the TableMeta layer.\n * @returns {ColumnMeta} Returns constructor ready to initialize with `new` operator.\n */\n\nexport function columnFactory(TableMeta) {\n  var conflictList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n  // Do not use ES6 \"class extends\" syntax here. It seems that the babel produces code\n  // which drastically decreases the performance of the ColumnMeta class creation.\n\n  /**\n   * Base \"class\" for column meta.\n   */\n  function ColumnMeta() {}\n\n  inherit(ColumnMeta, TableMeta); // Clear conflict settings\n\n  for (var i = 0; i < conflictList.length; i++) {\n    ColumnMeta.prototype[conflictList[i]] = void 0;\n  }\n\n  return ColumnMeta;\n}\n/**\n * Helper which checks if the provided argument is an unsigned number.\n *\n * @param {*} value Value to check.\n * @returns {boolean}\n */\n\nexport function isUnsignedNumber(value) {\n  return Number.isInteger(value) && value >= 0;\n}\n/**\n * Function which makes assertion by custom condition. Function throws an error when assertion doesn't meet the spec.\n *\n * @param {Function} condition Function with custom logic. The condition has to return boolean values.\n * @param {string} errorMessage String which describes assertion error.\n */\n\nexport function assert(condition, errorMessage) {\n  if (!condition()) {\n    throw new Error(\"Assertion failed: \".concat(errorMessage));\n  }\n}\n/**\n * Check if given variable is null or undefined.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\n\nexport function isNullish(variable) {\n  return variable === null || variable === void 0;\n}", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport { isEmpty } from \"../../helpers/mixed.mjs\";\nimport { isObjectEqual } from \"../../helpers/object.mjs\";\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @alias Options\n * @class Options\n * @description\n *\n * [Configuration options](@/guides/getting-started/setting-options.md) let you heavily customize your Handsontable instance. For example, you can:\n *\n * - Enable and disable built-in features\n * - Enable and configure additional [plugins](@/guides/building-and-testing/plugins.md)\n * - Personalize Handsontable's look\n * - Adjust Handsontable's behavior\n * - Implement your own custom features\n *\n * To apply [configuration options](@/guides/getting-started/setting-options.md), pass them as\n * a second argument of the [Handsontable constructor](@/guides/getting-started/installation.md#initialize-the-grid),\n * using the [object literal notation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer):\n *\n * ```js\n * const container = document.getElementById('example');\n *\n * const hot = new Handsontable(container, {\n *   // configuration options, in the object literal notation\n *   licenseKey: 'non-commercial-and-evaluation',\n *   data: Handsontable.helper.createSpreadsheetData(5, 10),\n *   width: 400,\n *   height: 300,\n *   colHeaders: true,\n *   rowHeaders: true,\n *   customBorders: true,\n *   dropdownMenu: true,\n *   multiColumnSorting: true,\n *   filters: true,\n *   manualRowMove: true,\n * });\n * ```\n *\n * Depending on your needs, you can apply [configuration options](@/api/options.md) to different elements of your grid:\n * - [The entire grid](@/guides/getting-started/setting-options.md#setting-grid-options)\n * - [Individual columns](@/guides/getting-started/setting-options.md#setting-column-options)\n * - [Individual rows](@/guides/getting-started/setting-options.md#setting-row-options)\n * - [Individual cells](@/guides/getting-started/setting-options.md#setting-cell-options)\n * - [Individual grid elements, based on any logic you implement](@/guides/getting-started/setting-options.md#implementing-custom-logic)\n *\n * Read more:\n * - [Configuration options &#8594;](@/guides/getting-started/setting-options.md)\n */\n\nexport default (function () {\n  return {\n    /* eslint-disable jsdoc/require-description-complete-sentence */\n\n    /**\n     * The `activeHeaderClassName` option lets you add a CSS class name\n     * to every currently-active, currently-selected header (when a whole column or row is selected).\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @since 0.38.2\n     * @default 'ht__active_highlight'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add an `ht__active_highlight` CSS class name\n     * // to every currently-active, currently-selected header\n     * activeHeaderClassName: 'ht__active_highlight',\n     * ```\n     */\n    activeHeaderClassName: 'ht__active_highlight',\n\n    /**\n     * The `allowEmpty` option determines whether Handsontable accepts the following values:\n     * - `null`\n     * - `undefined`\n     * - `''`\n     *\n     * You can set the `allowEmpty` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                                           |\n     * | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | - Accept `null`, `undefined` and `''` values<br>- Mark cells that contain `null`, `undefined` and `''` values as `valid`              |\n     * | `false`          | - Don't accept `null`, `undefined` and `''` values<br>- Mark cells that contain `null`, `undefined` and `''` values with as `invalid` |\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // allow empty values in every cell of the entire grid\n     * allowEmpty: true,\n     *\n     * // or\n     * columns: [\n     *   {\n     *     data: 'date',\n     *     dateFormat: 'DD/MM/YYYY',\n     *     // allow empty values in every cell of the 'date' column\n     *     allowEmpty: true\n     *   }\n     * ],\n     * ```\n     */\n    allowEmpty: true,\n\n    /**\n     * The `allowHtml` option configures whether [`autocomplete`](@/guides/cell-types/autocomplete-cell-type.md)\n     * and [`dropdown`](@/guides/cell-types/dropdown-cell-type.md) cells' [`source`](#source) data\n     * is treated as HTML.\n     *\n     * You can set the `allowHtml` option to one of the following:\n     *\n     * | Setting           | Description                                         |\n     * | ----------------- | --------------------------------------------------- |\n     * | `false` (default) | The [`source`](#source) data is not treated as HTML |\n     * | `true`            | The [`source`](#source) data is treated as HTML     |\n     *\n     * __Warning:__ Setting the `allowHtml` option to `true` can cause serious XSS vulnerabilities.\n     *\n     * Read more:\n     * - [Autocomplete cell type &#8594;](@/guides/cell-types/autocomplete-cell-type.md)\n     * - [Dropdown cell type &#8594;](@/guides/cell-types/dropdown-cell-type.md)\n     * - [`source`](#source)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of every cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['<strong>foo</strong>', '<strong>bar</strong>']\n     *   // use HTML in the `source` list\n     *   allowHtml: true,\n     *   },\n     * ],\n     * ```\n     */\n    allowHtml: false,\n\n    /**\n     * If set to `true`, the `allowInsertColumn` option adds the following menu items to the [context menu](@/guides/accessories-and-menus/context-menu.md):\n     * - **Insert column left**\n     * - **Insert column right**\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // hide the 'Insert column left' and 'Insert column right' menu items from the context menu\n     * allowInsertColumn: false,\n     * ```\n     */\n    allowInsertColumn: true,\n\n    /**\n     * If set to `true`, the `allowInsertRow` option adds the following menu items to the [context menu](@/guides/accessories-and-menus/context-menu.md):\n     * - **Insert row above**\n     * - **Insert row below**\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // hide the 'Insert row above' and 'Insert row below' menu items from the context menu\n     * allowInsertRow: false,\n     * ```\n     */\n    allowInsertRow: true,\n\n    /**\n     * The `allowInvalid` option determines whether Handsontable accepts values\n     * that were marked as `invalid` by the [cell validator](@/guides/cell-functions/cell-validator.md).\n     *\n     * You can set the `allowInvalid` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                                                                                        |\n     * | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | - Accept `invalid` values<br>- Allow the user to close the [cell editor](@/guides/cell-functions/cell-editor.md) with `invalid` values<br>- Save `invalid` values into the data source                   |\n     * | `false`          | - Don't accept `invalid` values<br>- Don't allow the user to close the [cell editor](@/guides/cell-functions/cell-editor.md) with `invalid` values<br>- Don't save `invalid` values into the data source |\n     *\n     * Setting the `allowInvalid` option to `false` can be useful when used with the [Autocomplete strict mode](@/guides/cell-types/autocomplete-cell-type.md#autocomplete-strict-mode).\n     *\n     * Read more:\n     * - [Cell validator &#8594;](@/guides/cell-functions/cell-validator.md)\n     * - [Cell editor &#8594;](@/guides/cell-functions/cell-editor.md)\n     * - [Autocomplete strict mode &#8594;](@/guides/cell-types/autocomplete-cell-type.md#autocomplete-strict-mode)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // don't accept `invalid` values\n     * // don't allow the user to close the cell editor\n     * // don't save `invalid` values into the data source\n     * allowInvalid: false,\n     * ```\n     */\n    allowInvalid: true,\n\n    /**\n     * If set to `true`, the `allowRemoveColumn` option adds the following menu items to the [context menu](@/guides/accessories-and-menus/context-menu.md):\n     * - **Remove column**\n     *\n     * Read more:\n     * - [Context menu &#8594;](@/guides/accessories-and-menus/context-menu.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // hide the 'Remove column' menu item from the context menu\n     * allowRemoveColumn: false,\n     * ```\n     */\n    allowRemoveColumn: true,\n\n    /**\n     * If set to `true`, the `allowRemoveRow` option adds the following menu items to the [context menu](@/guides/accessories-and-menus/context-menu.md):\n     * - **Remove row**\n     *\n     * Read more:\n     * - [Context menu &#8594;](@/guides/accessories-and-menus/context-menu.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // hide the 'Remove row' menu item from the context menu\n     * allowRemoveRow: false,\n     * ```\n     */\n    allowRemoveRow: true,\n\n    /**\n     * The `autoColumnSize` option configures the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin.\n     *\n     * You can set the `autoColumnSize` option to one of the following:\n     *\n     * | Setting   | Description                                                                                  |\n     * | --------- | -------------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin                               |\n     * | `true`    | Enable the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin with the default configuration |\n     * | An object | Enable the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin and modify the plugin options  |\n     *\n     * If you set the `autoColumnSize` option to an object, you can set the following [`AutoColumnSize`](@/api/autoColumnSize.md) plugin options:\n     *\n     * | Property                | Possible values                 | Description                                                                                                    |\n     * | ----------------------- | ------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n     * | `syncLimit`             | A number \\| A percentage string | The number/percentage of columns to keep in sync<br>(default: `50`)                                            |\n     * | `useHeaders`            | `true` \\| `false`               | When calculating column widths:<br>`true`: use column headers<br>`false`: don't use column headers          |\n     * | `samplingRatio`         | A number                        | The number of samples of the same length to be used in column width calculations                               |\n     * | `allowSampleDuplicates` | `true` \\| `false`               | When calculating column widths:<br>`true`: Allow duplicate samples<br>`false`: Don't allow duplicate samples |\n     *\n     * By default, the `autoColumnSize` option is set to `undefined`,\n     * but the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin acts as enabled.\n     * To disable the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin completely,\n     * set the `autoColumnSize` option to `false`.\n     *\n     * Using the [`colWidths`](#colWidths) option forcibly disables the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin.\n     *\n     * Read more:\n     * - [Plugins: `AutoColumnSize` &#8594;](@/api/autoColumnSize.md)\n     *\n     * @memberof Options#\n     * @type {object|boolean}\n     * @default undefined\n     * @category AutoColumnSize\n     *\n     * @example\n     * ```js\n     * autoColumnSize: {\n     *   // keep 40% of columns in sync (the rest of columns: async)\n     *   syncLimit: '40%',\n     *   // when calculating column widths, use column headers\n     *   useHeaders: true,\n     *   // when calculating column widths, use 10 samples of the same length\n     *   samplingRatio: 10,\n     *   // when calculating column widths, allow duplicate samples\n     *   allowSampleDuplicates: true\n     * },\n     * ```\n     */\n    autoColumnSize: void 0,\n\n    /**\n     * The `autoRowSize` option configures the [`AutoRowSize`](@/api/autoRowSize.md) plugin.\n     *\n     * You can set the `autoRowSize` option to one of the following:\n     *\n     * | Setting   | Description                                                                            |\n     * | --------- | -------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`AutoRowSize`](@/api/autoRowSize.md) plugin                               |\n     * | `true`    | Enable the [`AutoRowSize`](@/api/autoRowSize.md) plugin with the default configuration |\n     * | An object | Enable the [`AutoRowSize`](@/api/autoRowSize.md) plugin and modify the plugin options  |\n     *\n     * To give Handsontable's [scrollbar](https://handsontable.com/docs/8.0.0/demo-scrolling.html)\n     * a proper size, set the `autoRowSize` option to `true`.\n     *\n     * If you set the `autoRowSize` option to an object, you can set the following [`AutoRowSize`](@/api/autoRowSize.md) plugin options:\n     *\n     * | Property    | Possible values                 | Description                                                       |\n     * | ----------- | ------------------------------- | ----------------------------------------------------------------- |\n     * | `syncLimit` | A number \\| A percentage string | The number/percentage of rows to keep in sync<br>(default: `500`) |\n     *\n     * Using the [`rowHeights`](#rowHeights) option forcibly disables the [`AutoRowSize`](@/api/autoRowSize.md) plugin.\n     *\n     * Read more:\n     * - [Plugins: `AutoRowSize` &#8594;](@/api/autoRowSize.md)\n     *\n     * @memberof Options#\n     * @type {object|boolean}\n     * @default undefined\n     * @category AutoRowSize\n     *\n     * @example\n     * ```js\n     * autoRowSize: {\n     *   // keep 40% of rows in sync (the rest of rows: async)\n     *   syncLimit: '40%'\n     * },\n     * ```\n     */\n    autoRowSize: void 0,\n\n    /**\n     * The `autoWrapCol` option determines what happens to current cell selection when you navigate to the grid's top or bottom edge.\n     *\n     * You can set the `autoWrapCol` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                             |\n     * | ----------------- | ----------------------------------------------------------------------------------------------------------------------- |\n     * | `true`            | On reaching the grid's top or bottom edge<br>- Jump to the opposite edge<br>- Select a cell in the previous/next column |\n     * | `false` (default) | On reaching the grid's top or bottom edge, stop                                                                         |\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // on reaching the grid's top or bottom edge, jump to the opposite edge\n     * autoWrapCol: true,\n     * ```\n     */\n    autoWrapCol: false,\n\n    /**\n     * The `autoWrapRow` option determines what happens to current cell selection when you navigate to the grid's left or right edge.\n     *\n     * You can set the `autoWrapRow` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                                  |\n     * | ----------------- | ---------------------------------------------------------------------------------------------------------------------------- |\n     * | `true`            | On reaching the grid's left or right edge:<br>- Jump to the grid's opposite edge<br>- Select a cell in the previous/next row |\n     * | `false` (default) | On reaching the grid's left or right edge, stop                                                                              |\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // on reaching the grid's left or right edge, jump to the opposite edge\n     * autoWrapRow: true,\n     * ```\n     */\n    autoWrapRow: false,\n\n    /**\n     * @description\n     * The `bindRowsWithHeaders` option configures the [`BindRowsWithHeaders`](@/api/bindRowsWithHeaders.md) plugin.\n     *\n     * You can set the `bindRowsWithHeaders` option to one of the following:\n     *\n     * | Setting | Description                                                                  |\n     * | ------- | ---------------------------------------------------------------------------- |\n     * | `false` | Disable the the [`BindRowsWithHeaders`](@/api/bindRowsWithHeaders.md) plugin |\n     * | `true`  | Enable the the [`BindRowsWithHeaders`](@/api/bindRowsWithHeaders.md) plugin  |\n     *\n     * Read more:\n     * - [Plugins: `BindRowsWithHeaders` &#8594;](@/api/bindRowsWithHeaders.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string}\n     * @default undefined\n     * @category BindRowsWithHeaders\n     *\n     * @example\n     * ```js\n     * // enable the `BindRowsWithHeaders` plugin\n     * bindRowsWithHeaders: true\n     * ```\n     */\n    bindRowsWithHeaders: void 0,\n\n    /**\n     * The `cell` option lets you apply [configuration options](@/guides/getting-started/setting-options.md) to individual cells.\n     *\n     * The `cell` option overwrites the [top-level grid options](@/guides/getting-started/setting-options.md#setting-grid-options),\n     * and the [`columns`](#columns) options.\n     *\n     * Read more:\n     * - [Configuration options: Setting cell options &#8594;](@/guides/getting-started/setting-options.md#setting-cell-options)\n     * - [`columns`](#columns)\n     *\n     * @memberof Options#\n     * @type {Array[]}\n     * @default []\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the `cell` option to an array of objects\n     * cell: [\n     *   // make the cell with coordinates (0, 0) read-only\n     *   {\n     *     row: 0,\n     *     col: 0,\n     *     readOnly: true\n     *   }\n     * ],\n     * ```\n     */\n    cell: [],\n\n    /**\n     * @description\n     * The `cells` option lets you apply [configuration options](@/guides/getting-started/setting-options.md) to\n     * individual grid elements (columns, rows, cells), based on any logic you implement.\n     *\n     * The `cells` option overwrites all other options (including options set by [`columns`](#columns) and [`cell`](#cell)).\n     * It takes the following parameters:\n     *\n     * | Parameter | Required | Type             | Description                                                                                                                                                                                                                                                                                                                             |\n     * | --------- | -------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `row`     | Yes      | Number           | A physical row index                                                                                                                                                                                                                                                                                                                    |\n     * | `column`  | Yes      | Number           | A physical column index                                                                                                                                                                                                                                                                                                                 |\n     * | `prop`    | No       | String \\| Number | If [`data`](#data) is set to an [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays), `prop` is the same number as `column`.<br><br>If [`data`](#data) is set to an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects), `prop` is a property name for the column's data object. |\n     *\n     * Read more:\n     * - [Configuration options: Implementing custom logic &#8594;](@/guides/getting-started/setting-options.md#implementing-custom-logic)\n     * - [Configuration options: Setting row options &#8594;](@/guides/getting-started/setting-options.md#setting-row-options)\n     * - [`columns`](#columns)\n     * - [`cell`](#cell)\n     *\n     * @memberof Options#\n     * @type {Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the `cells` option to your custom function\n     * cells(row, column, prop) {\n     *   const cellProperties = { readOnly: false };\n     *   const visualRowIndex = this.instance.toVisualRow(row);\n     *   const visualColIndex = this.instance.toVisualColumn(column);\n     *\n     *   if (visualRowIndex === 0 && visualColIndex === 0) {\n     *     cellProperties.readOnly = true;\n     *   }\n     *\n     *   return cellProperties;\n     * },\n     * ```\n     */\n    cells: void 0,\n\n    /**\n     * The `checkedTemplate` option lets you configure what value\n     * a checked [`checkbox`](@/guides/cell-types/checkbox-cell-type.md) cell has.\n     *\n     * You can set the `checkedTemplate` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                                                                                              |\n     * | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | If a [`checkbox`](@/guides/cell-types/checkbox-cell-type.md) cell is checked,<br>the [`getDataAtCell`](@/api/core.md#getDataAtCell) method for this cell returns `true`                  |\n     * | A string         | If a [`checkbox`](@/guides/cell-types/checkbox-cell-type.md) cell is checked,<br>the [`getDataAtCell`](@/api/core.md#getDataAtCell) method for this cell returns a string of your choice |\n     *\n     * Read more:\n     * - [Checkbox cell type: Checkbox template &#8594;](@/guides/cell-types/checkbox-cell-type.md#checkbox-template)\n     * - [`getDataAtCell()` &#8594;](@/api/core.md#getDataAtCell)\n     * - [`uncheckedTemplate`](#uncheckedTemplate)\n     *\n     * @memberof Options#\n     * @type {boolean|string|number}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of every cell in this column to `checkbox`\n     *     // when checked, the cell's value is `true`\n     *     // when unchecked, the cell's value is `false`\n     *     type: 'checkbox',\n     *   },\n     *   {\n     *     // set the `type` of every cell in this column to `checkbox`\n     *     type: 'checkbox',\n     *     // when checked, the cell's value is `'Yes'`\n     *     checkedTemplate: 'Yes',\n     *     // when unchecked, the cell's value is `'No'`\n     *     uncheckedTemplate: 'No'\n     *  }\n     * ],\n     * ```\n     */\n    checkedTemplate: void 0,\n\n    /**\n     * The `className` option lets you add CSS class names to every currently-selected element.\n     *\n     * You can set the `className` option to one of the following:\n     *\n     * | Setting             | Description                                                      |\n     * | ------------------- | ---------------------------------------------------------------- |\n     * | A string            | Add a single CSS class name to every currently-selected element  |\n     * | An array of strings | Add multiple CSS class names to every currently-selected element |\n     *\n     * To apply different CSS class names on different levels, use Handsontable's [cascading configuration](@/guides/getting-started/setting-options.md#cascading-configuration).\n     *\n     * Read more:\n     * - [Configuration options: Cascading configuration &#8594;](@/guides/getting-started/setting-options.md#cascading-configuration)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`TableClassName`](#TableClassName)\n     *\n     * @memberof Options#\n     * @type {string|string[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `your-class-name` CSS class name\n     * // to every currently-selected element\n     * className: 'your-class-name',\n     *\n     * // add `first-class-name` and `second-class-name` CSS class names\n     * // to every currently-selected element\n     * className: ['first-class-name', 'second-class-name'],\n     * ```\n     */\n    className: void 0,\n\n    /**\n     * The `colHeaders` option configures your grid's column headers.\n     *\n     * You can set the `colHeaders` option to one of the following:\n     *\n     * | Setting  | Description                                                          |\n     * | -------- | -------------------------------------------------------------------- |\n     * | `true`   | Enable the default column headers ('A', 'B', 'C', ...)               |\n     * | `false`  | Disable column headers                                               |\n     * | An array | Define your own column headers (e.g. `['One', 'Two', 'Three', ...]`) |\n     * | A function | Define your own column headers, using a function                     |\n     *\n     * Read more:\n     * - [Column header &#8594;](@/guides/columns/column-header.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string[]|Function}\n     * @default null\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable the default column headers\n     * colHeaders: true,\n     *\n     * // set your own column headers\n     * colHeaders: ['One', 'Two', 'Three'],\n     *\n     * // set your own column headers, using a function\n     * colHeaders: function(visualColumnIndex) {\n     *   return `${visualColumnIndex} + : AB`;\n     * },\n     * ```\n     */\n    colHeaders: null,\n\n    /**\n     * @description\n     * The `collapsibleColumns` option configures the [`CollapsibleColumns`](@/api/collapsibleColumns.md) plugin.\n     *\n     * You can set the `collapsibleColumns` option to one of the following:\n     *\n     * | Setting              | Description                                                                                       |\n     * | -------------------- | ------------------------------------------------------------------------------------------------- |\n     * | `false`              | Disable the [`CollapsibleColumns`](@/api/collapsibleColumns.md) plugin                            |\n     * | `true`               | Enable the [`CollapsibleColumns`](@/api/collapsibleColumns.md) plugin                             |\n     * | An array of objects  | Enable the [`CollapsibleColumns`](@/api/collapsibleColumns.md) plugin for selected column headers |\n     *\n     * Read more:\n     * - [Plugins: `CollapsibleColumns` &#8594;](@/api/collapsibleColumns.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object[]}\n     * @default undefined\n     * @category CollapsibleColumns\n     *\n     * @example\n     * ```js\n     * // enable column collapsing for all headers\n     * collapsibleColumns: true,\n     *\n     * // enable column collapsing for selected headers\n     * collapsibleColumns: [\n     *   {row: -4, col: 1, collapsible: true},\n     *   {row: -3, col: 5, collapsible: true}\n     * ],\n     * ```\n     */\n    collapsibleColumns: void 0,\n\n    /**\n     * @description\n     * The `columnHeaderHeight` option configures the height of column headers.\n     *\n     * You can set the `columnHeaderHeight` option to one of the following:\n     *\n     * | Setting  | Description                                         |\n     * | -------- | --------------------------------------------------- |\n     * | A number | Set the same height for every column header         |\n     * | An array | Set different heights for individual column headers |\n     *\n     * @memberof Options#\n     * @type {number|number[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the same height for every column header\n     * columnHeaderHeight: 25,\n     *\n     * // set different heights for individual column headers\n     * columnHeaderHeight: [25, 30, 55],\n     * ```\n     */\n    columnHeaderHeight: void 0,\n\n    /**\n     * @description\n     * The `columns` option lets you apply [configuration options](@/guides/getting-started/setting-options.md) to individual columns (or ranges of columns).\n     *\n     * You can set the `columns` option to one of the following:\n     * - An array of objects (each object represents one column)\n     * - A function that returns an array of objects\n     *\n     * The `columns` option overwrites the [top-level grid options](@/guides/getting-started/setting-options.md#setting-grid-options).\n     *\n     * When you use the `columns` option, the [`startCols`](#startCols), [`minCols`](#minCols), and [`maxCols`](#maxCols) are ignored.\n     *\n     * Read more:\n     * - [Configuration options: Setting column options &#8594;](@/guides/getting-started/setting-options.md#setting-column-options)\n     * - [`startCols`](#startCols)\n     * - [`minCols`](#minCols)\n     * - [`maxCols`](#maxCols)\n     *\n     * @memberof Options#\n     * @type {object[]|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the `columns` option to an array of objects\n     * // each object represents one column\n     * columns: [\n     *   {\n     *     // column options for the first (by physical index) column\n     *     type: 'numeric',\n     *     numericFormat: {\n     *       pattern: '0,0.00 $'\n     *     }\n     *   },\n     *   {\n     *     // column options for the second (by physical index) column\n     *     type: 'text',\n     *     readOnly: true\n     *   }\n     * ],\n     *\n     * // or set the `columns` option to a function, based on physical indexes\n     * columns(index) {\n     *   return {\n     *     type: index > 0 ? 'numeric' : 'text',\n     *     readOnly: index < 1\n     *   }\n     * }\n     * ```\n     */\n    columns: void 0,\n\n    /**\n     * @description\n     * The `columnSorting` option configures the [`ColumnSorting`](@/api/columnSorting.md) plugin.\n     *\n     * You can set the `columnSorting` option to one of the following:\n     *\n     * | Setting    | Description                                                                                                                            |\n     * | ---------- | -------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true`     | Enable the [`ColumnSorting`](@/api/columnSorting.md) plugin with the default configuration                                             |\n     * | `false`    | Disable the [`ColumnSorting`](@/api/columnSorting.md) plugin                                                                           |\n     * | An object  | - Enable the [`ColumnSorting`](@/api/columnSorting.md) plugin<br>- Modify the [`ColumnSorting`](@/api/columnSorting.md) plugin options |\n     *\n     * If you set the `columnSorting` option to an object,\n     * you can set the following [`ColumnSorting`](@/api/columnSorting.md) plugin options:\n     *\n     * | Option                   | Possible settings                                                                                                                                |\n     * | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |\n     * | `indicator`              | `true`: Display an arrow icon in the column header, to indicate a sortable column<br>`false`: Don't display the arrow icon in the column header  |\n     * | `headerAction`           | `true`: Enable clicking on the column header to sort the column<br>`false`: Disable clicking on the column header to sort the column             |\n     * | `sortEmptyCells`         | `true`: Sort empty cells as well<br>`false`: Place empty cells at the end                                                                        |\n     * | `compareFunctionFactory` | A [custom compare function](@/guides/rows/row-sorting.md#custom-compare-functions)                                                                |\n     *\n     * If you set the `columnSorting` option to an object,\n     * you can also sort individual columns at Handsontable's initialization.\n     * In the `columnSorting` object, add an object named `initialConfig`,\n     * with the following properties:\n     *\n     * | Option      | Possible settings   | Description                                                      |\n     * | ----------- | ------------------- | ---------------------------------------------------------------- |\n     * | `column`    | A number            | The index of the column that you want to sort at initialization  |\n     * | `sortOrder` | `'asc'` \\| `'desc'` | The sorting order:<br>`'asc'`: ascending<br>`'desc'`: descending |\n     *\n     * Read more:\n     * - [Row sorting &#8594;](@/guides/rows/row-sorting.md)\n     * - [Row sorting: Custom compare functions &#8594;](@/guides/rows/row-sorting.md#custom-compare-functions)\n     * - [`multiColumnSorting`](#multiColumnSorting)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default undefined\n     * @category ColumnSorting\n     *\n     * @example\n     * ```js\n     * // enable the `ColumnSorting` plugin\n     * columnSorting: true\n     *\n     * // enable the `ColumnSorting` plugin with custom configuration\n     * columnSorting: {\n     *   // sort empty cells as well\n     *   sortEmptyCells: true,\n     *   // display an arrow icon in the column header\n     *   indicator: true,\n     *   // disable clicking on the column header to sort the column\n     *   headerAction: false,\n     *   // add a custom compare function\n     *   compareFunctionFactory(sortOrder, columnMeta) {\n     *     return function(value, nextValue) {\n     *       // some value comparisons which will return -1, 0 or 1...\n     *     }\n     *   }\n     * }\n     *\n     * // enable the `ColumnSorting` plugin\n     * columnSorting: {\n     *   // at initialization, sort column 1 in ascending order\n     *   initialConfig: {\n     *     column: 1,\n     *     sortOrder: 'asc'\n     *   },\n     *   // at initialization, sort column 2 in descending order\n     *   initialConfig: {\n     *     column: 2,\n     *     sortOrder: 'desc'\n     *   }\n     * }\n     * ```\n     */\n    columnSorting: void 0,\n\n    /**\n     * @description\n     * The `columnSummary` option configures the [`ColumnSummary`](@/api/columnSummary.md) plugin.\n     *\n     * You can set the `columnSummary` option to an array of objects.\n     * Each object configures a single column summary, using the following properties:\n     *\n     * | Property                 | Possible values                                                         | Description                                                                                                                  |\n     * | ------------------------ | ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |\n     * | `sourceColumn`           | A number                                                                | [Column to summarize](@/guides/columns/column-summary.md#step-2-select-cells-that-you-want-to-summarize)                     |\n     * | `ranges`                 | An array                                                                | [Ranges of rows to summarize](@/guides/columns/column-summary.md#step-2-select-cells-that-you-want-to-summarize)             |\n     * | `type`                   | `'sum'` \\| `'min'` \\| `'max'` \\| `'count'` \\| `'average'` \\| `'custom'` | [Summary function](@/guides/columns/column-summary.md#step-3-calculate-your-summary)                                         |\n     * | `destinationRow`         | A number                                                                | [Destination cell's row coordinate](@/guides/columns/column-summary.md#step-4-provide-the-destination-cell-s-coordinates)    |\n     * | `destinationColumn`      | A number                                                                | [Destination cell's column coordinate](@/guides/columns/column-summary.md#step-4-provide-the-destination-cell-s-coordinates) |\n     * | `forceNumeric`           | `true`  \\| `false`                                                      | [Treat non-numerics as numerics](@/guides/columns/column-summary.md#forcing-numeric-values)                                  |\n     * | `reversedRowCoords`      | `true`  \\| `false`                                                      | [Reverse row coordinates](@/guides/columns/column-summary.md#step-5-make-room-for-the-destination-cell)                      |\n     * | `suppressDataTypeErrors` | `true`  \\| `false`                                                      | [Suppress data type errors](@/guides/columns/column-summary.md#throwing-data-type-errors)                                    |\n     * | `readOnly`               | `true`  \\| `false`                                                      | Make summary cell read-only                                                                                                  |\n     * | `roundFloat`             | `true`  \\| `false`                                                      | [Round summary result](@/guides/columns/column-summary.md#rounding-a-column-summary-result)                                  |\n     * | `customFunction`         | A function                                                              | [Custom summary function](@/guides/columns/column-summary.md#implementing-a-custom-summary-function)                         |\n     *\n     * Read more:\n     * - [Column summary &#8594;](@/guides/columns/column-summary.md)\n     * - [Plugins: `ColumnSummary` &#8594;](@/api/columnSummary.md)\n     *\n     * @memberof Options#\n     * @type {object[]|Function}\n     * @default undefined\n     * @category ColumnSummary\n     *\n     * @example\n     * ```js\n     * columnSummary: [\n     *   {\n     *     sourceColumn: 0,\n     *     ranges: [\n     *       [0, 2], [4], [6, 8]\n     *     ],\n     *     type: 'custom',\n     *     destinationRow: 4,\n     *     destinationColumn: 1,\n     *     forceNumeric: true,\n     *     reversedRowCoords: true,\n     *     suppressDataTypeErrors: false,\n     *     readOnly: true,\n     *     roundFloat: false,\n     *     customFunction(endpoint) {\n     *        return 100;\n     *     }\n     *   }\n     * ],\n     * ```\n     */\n    columnSummary: void 0,\n\n    /**\n     * The `colWidths` option sets columns' widths, in pixels.\n     *\n     * In the rendering process, the default column width is 50px. To change it,\n     * set the `colWidths` option to one of the following:\n     *\n     * | Setting     | Description                                                                                          | Example                                                           |\n     * | ----------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |\n     * | A number    | Set the same width for every column                                                                  | `colWidths: 100`                                                  |\n     * | A string    | Set the same width for every column                                                                  | `colWidths: '100px'`                                              |\n     * | An array    | Set widths separately for each column                                                                | `colWidths: [100, 120, undefined]`                                |\n     * | A function  | Set column widths dynamically,<br>on each render                                                     | `colWidths(visualColumnIndex) { return visualColumnIndex * 10; }` |\n     * | `undefined` | Used by the [modifyColWidth](@/api/hooks.md#modifyColWidth) hook,<br>to detect column width changes. | `colWidths: undefined`                                            |\n     *\n     * Setting the `colWidths` option disables the {@link AutoColumnSize} plugin.\n     *\n     * Read more:\n     * - [Column width &#8594;](@/guides/columns/column-width.md)\n     * - [Hooks: `modifyColWidth` &#8594;](@/api/hooks.md#modifyColWidth)\n     * - [`autoColumnSize`](#autoColumnSize)\n     *\n     * @memberof Options#\n     * @type {number|number[]|string|string[]|Array<undefined>|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set every column's width to 100px\n     * colWidths: 100,\n     *\n     * // set every column's width to 100px\n     * colWidths: '100px',\n     *\n     * // set the first (by visual index) column's width to 100\n     * // set the second (by visual index) column's width to 120\n     * // set the third (by visual index) column's width to `undefined`\n     * // set any other column's width to the default 50px\n     * colWidths: [100, 120, undefined],\n     *\n     * // set each column's width individually, using a function\n     * colWidths(visualColumnIndex) {\n     *   return visualColumnIndex * 10;\n     * },\n     * ```\n     */\n    colWidths: void 0,\n\n    /**\n     * The `commentedCellClassName` option lets you add a CSS class name to cells\n     * that have comments.\n     *\n     * Read more:\n     * - [Comments &#8594;](@/guides/cell-features/comments.md)\n     * - [`comments`](#comments)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htCommentCell'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `has-comment` CSS class name\n     * // to every cell that has a comment\n     * commentedCellClassName: 'has-comment',\n     * ```\n     */\n    commentedCellClassName: 'htCommentCell',\n\n    /**\n     * @description\n     * The `comments` option configures the [`Comments`](@/api/comments.md) plugin.\n     *\n     * You can set the `comments` option to one of the following:\n     *\n     * | Setting   | Description                                                                                                                                                                           |\n     * | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true`    | - Enable the [`Comments`](@/api/comments.md) plugin<br>- Add comment menu items to the [context menu](@/guides/accessories-and-menus/context-menu.md)                                 |\n     * | `false`   | Disable the [`Comments`](@/api/comments.md) plugin                                                                                                                                    |\n     * | An object | - Enable the [`Comments`](@/api/comments.md) plugin<br>- Add comment menu items to the [context menu](@/guides/accessories-and-menus/context-menu.md)<br>- Configure comment settings |\n     *\n     * If you set the `comments` option to an object, you can configure the following comment options:\n     *\n     * | Option         | Possible settings           | Description                                         |\n     * | -------------- | --------------------------- | --------------------------------------------------- |\n     * | `displayDelay` | A number (default: `250`)   | Display comments after a delay (in milliseconds)    |\n     * | `readOnly`     | `true` \\| `false` (default) | `true`: Make comments read-only                     |\n     * | `style`        | An object                   | Set comment boxes' `width` and `height` (in pixels) |\n     *\n     * Read more:\n     * - [Comments &#8594;](@/guides/cell-features/comments.md)\n     * - [Context menu &#8594;](@/guides/accessories-and-menus/context-menu.md)\n     * - [`width`](#width)\n     * - [`height`](#height)\n     * - [`readOnly`](#readOnly)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     *\n     * @memberof Options#\n     * @type {boolean|object[]}\n     * @default false\n     * @category Comments\n     *\n     * @example\n     * ```js\n     * // enable the `Comments` plugin\n     * comments: true,\n     *\n     * // enable the `Comments` plugin\n     * // and configure its settings\n     * comments: {\n     *   // display all comments with a 1-second delay\n     *   displayDelay: 1000,\n     *   // make all comments read-only\n     *   readOnly: true,\n     *   // set the default size of all comment boxes\n     *   style: {\n     *     width: 300,\n     *     height: 100\n     *   }\n     * }\n     * ```\n     */\n    comments: false,\n\n    /**\n     * @description\n     * The `contextMenu` option configures the [`ContextMenu`](@/api/contextMenu.md) plugin.\n     *\n     * You can set the `contextMenu` option to one of the following:\n     *\n     * | Setting   | Description                                                                                                                                                                                             |\n     * | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`ContextMenu`](@/api/contextMenu.md) plugin                                                                                                                                                |\n     * | `true`    | - Enable the [`ContextMenu`](@/api/contextMenu.md) plugin<br>- Use the [default context menu options](@/guides/accessories-and-menus/context-menu.md#context-menu-with-default-options)                 |\n     * | An array  | - Enable the [`ContextMenu`](@/api/contextMenu.md) plugin<br>- Modify [individual context menu options](@/guides/accessories-and-menus/context-menu.md#context-menu-with-specific-options)              |\n     * | An object | - Enable the [`ContextMenu`](@/api/contextMenu.md) plugin<br>- Apply a [custom context menu configuration](@/guides/accessories-and-menus/context-menu.md#context-menu-with-fully-custom-configuration) |\n     *\n     * Read more:\n     * - [Context menu &#8594;](@/guides/accessories-and-menus/context-menu.md)\n     * - [Context menu: Context menu with default options &#8594;](@/guides/accessories-and-menus/context-menu.md#context-menu-with-default-options)\n     * - [Context menu: Context menu with specific options &#8594;](@/guides/accessories-and-menus/context-menu.md#context-menu-with-specific-options)\n     * - [Context menu: Context menu with fully custom configuration options &#8594;](@/guides/accessories-and-menus/context-menu.md#context-menu-with-fully-custom-configuration)\n     * - [Plugins: `ContextMenu` &#8594;](@/api/contextMenu.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string[]|object}\n     * @default undefined\n     * @category ContextMenu\n     *\n     * @example\n     * ```js\n     * // enable the `ContextMenu` plugin\n     * // use the default context menu options\n     * contextMenu: true,\n     *\n     * // enable the `ContextMenu` plugin\n     * // and modify individual context menu options\n     * contextMenu: ['row_above', 'row_below', '---------', 'undo', 'redo'],\n     *\n     * // enable the `ContextMenu` plugin\n     * // and apply a custom context menu configuration\n     * contextMenu: {\n     *   items: {\n     *     'option1': {\n     *       name: 'option1'\n     *     },\n     *     'option2': {\n     *       name: 'option2',\n     *       submenu: {\n     *         items: [\n     *           {\n     *             key: 'option2:suboption1',\n     *             name: 'option2:suboption1',\n     *             callback: function(key, options) {\n     *               ...\n     *             }\n     *           },\n     *           ...\n     *         ]\n     *       }\n     *     }\n     *   }\n     * },\n     * ```\n     */\n    contextMenu: void 0,\n\n    /**\n     * @description\n     * The `copyable` option determines whether a cell's value can be copied to the clipboard or not.\n     *\n     * You can set the `copyable` option to one of the following:\n     *\n     * | Setting                                                                                                        | Description                                                                                                                        |\n     * | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default)                                                                                               | - Enable copying for this cell<br>- On pressing <kbd>Ctrl</kbd>/<kbd>Cmd</kbd>+<kbd>C</kbd>, add the cell's value to the clipboard |\n     * | `false`<br>(default for the [`password`](@/guides/cell-types/password-cell-type.md) [cell type](#type))        | - Disable copying for this cell                                                                                                    |\n     *\n     * Read more:\n     * - [Clipboard &#8594;](@/guides/cell-features/clipboard.md)\n     * - [Configuration options: Cascading configuration &#8594;](@/guides/getting-started/setting-options.md#cascading-configuration)\n     * - [Password cell type &#8594;](@/guides/cell-types/password-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable copying for every cell of the entire grid\n     * copyable: true,\n     *\n     * // enable copying for individual columns\n     * columns: [\n     *   {\n     *     // enable copying for every cell of this column\n     *     copyable: true\n     *   },\n     *   {\n     *     // disable copying for every cell of this column\n     *     copyable: false\n     *   }\n     * ]\n     *\n     * // enable copying for specific cells\n     * cells: [\n     *   {\n     *     cell: 0,\n     *     row: 0,\n     *     // disable copying for cell (0, 0)\n     *     copyable: false,\n     *   }\n     * ],\n     * ```\n     */\n    copyable: true,\n\n    /**\n     * The `copyPaste` option configures the [`CopyPaste`](@/api/copyPaste.md) plugin.\n     *\n     * You can set the `copyPaste` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                            |\n     * | ----------------- | ---------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default)  | Enable the [`CopyPaste`](@/api/copyPaste.md) plugin with the default configuration                                     |\n     * | `false`           | Disable the [`CopyPaste`](@/api/copyPaste.md) plugin                                                                   |\n     * | An object         | - Enable the [`CopyPaste`](@/api/copyPaste.md) plugin<br>- Modify the [`CopyPaste`](@/api/copyPaste.md) plugin options |\n     *\n     * If you set the `copyPaste` option to an object, you can set the following `CopyPaste` plugin options:\n     *\n     * | Option         | Possible settings                                  | Description                                                                                                                                                                             |\n     * | -------------- | -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `columnsLimit` | A number (default: `Infinity`)                       | A maximum number of columns that can be copied                                                                                                                                        |\n     * | `rowsLimit`    | A number (default: `Infinity`)                       | A maximum number of columns that can be copied                                                                                                                                        |\n     * | `pasteMode`    | `'overwrite'` \\| `'shift_down'` \\| `'shift_right'` | When pasting:<br>`'overwrite'`: overwrite currently-selected cells<br>`'shift_down'`: move currently-selected cells down<br>`'shift_right'`: move currently-selected cells to the right |\n     * | `uiContainer`  | An HTML element                                    | A UI container for the secondary focusable element                                                                                                                                      |\n     *\n     * Read more:\n     * - [Plugins: `CopyPaste` &#8594;](@/api/copyPaste.md)\n     *\n     * @memberof Options#\n     * @type {object|boolean}\n     * @default true\n     * @category CopyPaste\n     *\n     * @example\n     * ```js\n     * // disable the `CopyPaste` plugin\n     * copyPaste: false,\n     *\n     * // enable the `CopyPaste` plugin\n     * // and modify the `CopyPaste` plugin options\n     * copyPaste: {\n     *   // set the maximum number of columns that can be copied\n     *   columnsLimit: 25,\n     *   // set the maximum number of rows that can be copied\n     *   rowsLimit: 50,\n     *   // set the paste behavior\n     *   pasteMode: 'shift_down',\n     *   // set the UI container\n     *   uiContainer: document.body,\n     * },\n     * ```\n     */\n    copyPaste: true,\n\n    /**\n     * The `correctFormat` option configures [`date`](@/guides/cell-types/date-cell-type.md) cells' date format correction.\n     *\n     * You can set the `correctFormat` option to one of the following\n     *\n     * | Setting           | Description                                                           |\n     * | ----------------- | --------------------------------------------------------------------- |\n     * | `false` (default) | Don't correct dates                                                   |\n     * | `true`            | Enforce the date format set by the [`dateFormat`](#dateFormat) option |\n     *\n     * Read more:\n     * - [Date cell type &#8594;](@/guides/cell-types/date-cell-type.md)\n     * - [`dateFormat`](#dateFormat)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of every cell in this column to `date`\n     *   type: 'date',\n     *   // for every `date` cell of this column, set the date format to `YYYY-MM-DD`\n     *   dateFormat: 'YYYY-MM-DD',\n     *   // enforce the `YYYY-MM-DD` date format\n     *   correctFormat: true\n     *   },\n     * ],\n     * ```\n     */\n    correctFormat: false,\n\n    /**\n     * The `currentColClassName` option lets you add a CSS class name\n     * to every cell of the currently-visible, currently-selected columns.\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `your-class-name` CSS class name\n     * // to every cell of the currently-visible, currently-selected columns\n     * currentColClassName: 'your-class-name',\n     * ```\n     */\n    currentColClassName: void 0,\n\n    /**\n     * The `currentHeaderClassName` option lets you add a CSS class name\n     * to every currently-visible, currently-selected header.\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'ht__highlight'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add an `ht__highlight` CSS class name\n     * // to every currently-visible, currently-selected header\n     * currentHeaderClassName: 'ht__highlight',\n     * ```\n     */\n    currentHeaderClassName: 'ht__highlight',\n\n    /**\n     * The `currentRowClassName` option lets you add a CSS class name\n     * to every cell of the currently-visible, currently-selected rows.\n     *\n     * Read more:\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `your-class-name` CSS class name\n     * // to every cell of the currently-visible, currently-selected rows\n     * currentRowClassName: 'your-class-name',\n     * ```\n     */\n    currentRowClassName: void 0,\n\n    /**\n     * @description\n     * The `customBorders` option configures the [`CustomBorders`](@/api/customBorders.md) plugin.\n     *\n     * To enable the [`CustomBorders`](@/api/customBorders.md) plugin\n     * (and add its menu items to the [context menu](@/guides/accessories-and-menus/context-menu.md)),\n     * set the `customBorders` option to `true`.\n     *\n     * To enable the [`CustomBorders`](@/api/customBorders.md) plugin\n     * and add a predefined border around a particular cell,\n     * set the `customBorders` option to an array of objects.\n     * Each object represents a border configuration for one cell, and has the following properties:\n     *\n     * | Property | Sub-properties     | Types                              | Description                                                       |\n     * | -------- | ------------------ | ---------------------------------- | ----------------------------------------------------------------- |\n     * | `row`    | -                  | `row`: Number                      | The cell's row coordinate.                                        |\n     * | `col`    | -                  | `col`: Number                      | The cell's column coordinate.                                     |\n     * | `left`   | `width`<br>`color` | `width`: Number<br>`color`: String | Sets the left border's width (`width`)<br> and color (`color`).   |\n     * | `right`  | `width`<br>`color` | `width`: Number<br>`color`: String | Sets the right border's width (`width`)<br> and color (`color`).  |\n     * | `top`    | `width`<br>`color` | `width`: Number<br>`color`: String | Sets the top border's width (`width`)<br> and color (`color`).    |\n     * | `bottom` | `width`<br>`color` | `width`: Number<br>`color`: String | Sets the bottom border's width (`width`)<br> and color (`color`). |\n     *\n     * To enable the [`CustomBorders`](@/api/customBorders.md) plugin\n     * and add a predefined border around a range of cells,\n     * set the `customBorders` option to an array of objects.\n     * Each object represents a border configuration for a single range of cells, and has the following properties:\n     *\n     * | Property | Sub-properties                               | Types                                                            | Description                                                                                  |\n     * | -------- | -------------------------------------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |\n     * | `range`  | `from` {`row`, `col`}<br>`to` {`row`, `col`} | `from`: Object<br>`to`: Object<br>`row`: Number<br>`col`: Number | `from` selects the range's top-left corner.<br>`to` selects the range's bottom-right corner. |\n     * | `left`   | `width`<br>`color`                           | `width`: Number<br>`color`: String                               | Sets the left border's `width` and `color`.                                                  |\n     * | `right`  | `width`<br>`color`                           | `width`: Number<br>`color`: String                               | Sets the right border's `width` and `color`.                                                 |\n     * | `top`    | `width`<br>`color`                           | `width`: Number<br>`color`: String                               | Sets the top border's `width` and `color`.                                                   |\n     * | `bottom` | `width`<br>`color`                           | `width`: Number<br>`color`: String                               | Sets the bottom border's `width` and `color`.                                                |\n     *\n     * Read more:\n     * - [Formatting cells: Custom cell borders &#8594;](@/guides/cell-features/formatting-cells.md#custom-cell-borders)\n     * - [Context menu &#8594;](@/guides/accessories-and-menus/context-menu.md)\n     * - [Plugins: `CustomBorders` &#8594;](@/api/customBorders.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object[]}\n     * @default false\n     * @category CustomBorders\n     *\n     * @example\n     * ```js\n     * // enable the `CustomBorders` plugin\n     * customBorders: true,\n     *\n     * // enable the `CustomBorders` plugin\n     * // and add a predefined border for a particular cell\n     * customBorders: [\n     *   // add an object with a border configuration for one cell\n     *   {\n     *     // set the cell's row coordinate\n     *     row: 2,\n     *     // set the cell's column coordinate\n     *     col: 2,\n     *     // set the left border's width and color\n     *     left: {\n     *       width: 2,\n     *       color: 'red'\n     *     },\n     *     // set the right border's width and color\n     *     right: {\n     *       width: 1,\n     *       color: 'green'\n     *     },\n     *     // set the top border's width and color\n     *     top: '',\n     *     // set the bottom border's width and color\n     *     bottom: ''\n     *   }\n     * ],\n     *\n     * // enable the `CustomBorders` plugin\n     * // and add a predefined border for a range of cells\n     * customBorders: [\n     *   // add an object with a border configuration for one range of cells\n     *   {\n     *     // select a range of cells\n     *     range: {\n     *       // set the range's top-left corner\n     *       from: {\n     *         row: 1,\n     *         col: 1\n     *       },\n     *       // set the range's bottom-right corner\n     *       to: {\n     *         row: 3,\n     *         col: 4\n     *       }\n     *     },\n     *     // set the left border's width and color\n     *     left: {\n     *       width: 2,\n     *       color: 'red'\n     *     },\n     *     // set the right border's width and color\n     *     right: {},\n     *     // set the top border's width and color\n     *     top: {},\n     *     // set the bottom border's width and color\n     *     bottom: {}\n     *   }\n     * ],\n     * ```\n     */\n    customBorders: false,\n\n    /**\n     * @description\n     * The `data` option sets the initial [data](@/guides/getting-started/binding-to-data.md) of your Handsontable instance.\n     *\n     * Handsontable's data is bound to your source data __by reference__ (i.e. when you edit Handsontable's data, your source data alters as well).\n     *\n     * You can set the `data` option:\n     * - Either to an [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays).\n     * - Or to an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects).\n     *\n     * Read more:\n     * - [Binding to data &#8594;](@/guides/getting-started/binding-to-data.md)\n     * - [`dataSchema`](#dataSchema)\n     *\n     * @memberof Options#\n     * @type {Array[]|object[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // as an array of arrays\n     * data: [\n     *   ['A', 'B', 'C'],\n     *   ['D', 'E', 'F'],\n     *   ['G', 'H', 'J']\n     * ]\n     *\n     * // as an array of objects\n     * data: [\n     *   {id: 1, name: 'Ted Right'},\n     *   {id: 2, name: 'Frank Honest'},\n     *   {id: 3, name: 'Joan Well'},\n     *   {id: 4, name: 'Gail Polite'},\n     *   {id: 5, name: 'Michael Fair'},\n     * ]\n     * ```\n     */\n    data: void 0,\n\n    /**\n     * @description\n     * If the [`data`](#data) option is set to an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects)\n     * (or is empty), the `dataSchema` option defines the structure of new rows.\n     *\n     * Read more:\n     * - [Binding to data: Array of objects with custom data schema &#8594;](@/guides/getting-started/binding-to-data.md#array-of-objects-with-custom-data-schema)\n     * - [`data`](#data)\n     *\n     * @memberof Options#\n     * @type {object}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // with `dataSchema`, you can start with an empty grid\n     * data: null,\n     * dataSchema: {id: null, name: {first: null, last: null}, address: null},\n     * colHeaders: ['ID', 'First Name', 'Last Name', 'Address'],\n     * columns: [\n     *   {data: 'id'},\n     *   {data: 'name.first'},\n     *   {data: 'name.last'},\n     *   {data: 'address'}\n     * ],\n     * startRows: 5,\n     * minSpareRows: 1\n     * ```\n     */\n    dataSchema: void 0,\n\n    /**\n     * The `dateFormat` option configures [`date`](@/guides/cell-types/date-cell-type.md) cells' date format.\n     *\n     * You can set the `dateFormat` option to a date format string. The default value is: `'DD/MM/YYYY'`.\n     *\n     * To enforce the date format set by the `dateFormat` option,\n     * use the [`correctFormat`](#correctFormat) option.\n     *\n     * Read more:\n     * - [Date cell type &#8594;](@/guides/cell-types/date-cell-type.md)\n     * - [`correctFormat`](#correctFormat)\n     * - [`defaultDate`](#defaultDate)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'DD/MM/YYYY'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of every cell in this column to `date`\n     *   type: 'date',\n     *   // for every `date` cell of this column, set the date format to `YYYY-MM-DD`\n     *   dateFormat: 'YYYY-MM-DD',\n     *   },\n     * ],\n     * ```\n     */\n    dateFormat: 'DD/MM/YYYY',\n\n    /**\n     * The `datePickerConfig` option configures the `date` [cell editor](@/guides/cell-functions/cell-editor.md)'s date picker, which uses an external dependency: [Pikaday](https://github.com/Pikaday/Pikaday/tree/1.8.0).\n     *\n     * You can set the `datePickerConfig` option to an object with any of the available [Pikaday options](https://github.com/Pikaday/Pikaday/tree/1.8.0#configuration),\n     * except for the following, which are always overwritten by the `date` [cell editor](@/guides/cell-functions/cell-editor.md):\n     * - `bound`\n     * - `container`\n     * - `field`\n     * - `trigger`\n     *\n     * If the `datePickerConfig` option is not defined, the `date` [cell editor](@/guides/cell-functions/cell-editor.md) overwrites the following [Pikaday options](https://github.com/Pikaday/Pikaday/tree/1.8.0#configuration) as well:\n     *\n     * | Pikaday option       | Handsontable's setting |\n     * | -------------------- | ---------------------- |\n     * | `format`             | `'DD/MM/YYYY'`         |\n     * | `reposition`         | `false`                |\n     *\n     * Read more:\n     * - [`editor`](#editor)\n     * - [`dateFormat`](#dateFormat)\n     * - [Cell editor &#8594;](@/guides/cell-functions/cell-editor.md)\n     * - [All Pikaday options &#8594;](https://github.com/Pikaday/Pikaday/tree/1.8.0#configuration)\n     *\n     * @memberof Options#\n     * @type {object}\n     * @default undefined\n     * @category Core\n     */\n    datePickerConfig: void 0,\n\n    /**\n     * The `defaultDate` option configures the date displayed\n     * in empty [`date`](@/guides/cell-types/date-cell-type.md) cells.\n     *\n     * You can set the `defaultDate` option to a string.\n     *\n     * Read more:\n     * - [Date cell type &#8594;](@/guides/cell-types/date-cell-type.md)\n     * - [`dateFormat`](#dateFormat)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of every cell in this column to `date`\n     *     type: 'date',\n     *     // in every empty `date` cell of this column, display `2015-02-02`\n     *     defaultDate: '2015-02-02'\n     *   }\n     * ],\n     * ```\n     */\n    defaultDate: void 0,\n\n    /**\n     * @description\n     * The `disableVisualSelection` option configures how\n     * [selection](@/guides/cell-features/selection.md) is shown.\n     *\n     * You can set the `disableVisualSelection` option to one of the following:\n     *\n     * | Setting           | Description                                                                                         |\n     * | ----------------- | --------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | - Show single-cell selection<br>- Show range selection<br>- Show header selection                   |\n     * | `true`            | - Don't show single-cell selection<br>- Don't show range selection<br>- Don't show header selection |\n     * | `'current'`       | - Don't show single-cell selection<br>- Show range selection<br>- Show header selection             |\n     * | `'area'`          | - Show single-cell selection<br>- Don't show range selection<br>- Show header selection             |\n     * | `'header'`        | - Show single-cell selection<br>- Show range selection<br>- Don't show header selection             |\n     * | An array          | A combination of `'current'`, `'area'`, and/or `'header'`                                           |\n     *\n     * Read more:\n     * - [Selection &#8594;](@/guides/cell-features/selection.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string|string[]}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // don't show single-cell selection\n     * // don't show range selection\n     * // don't show header selection\n     * disableVisualSelection: true,\n     *\n     * // don't show single-cell selection\n     * // show range selection\n     * // show header selection\n     * disableVisualSelection: 'current',\n     *\n     * // don't show single-cell selection\n     * // don't show range selection\n     * // show header selection\n     * disableVisualSelection: ['current', 'area'],\n     * ```\n     */\n    disableVisualSelection: false,\n\n    /**\n     * @description\n     * The `dragToScroll` option configures the [`DragToScroll`](@/api/dragToScroll.md) plugin.\n     *\n     * You can set the `dragToScroll` option to one of the following:\n     *\n     * | Setting          | Description                                                                 |\n     * | ---------------- | --------------------------------------------------------------------------- |\n     * | `true` (default) | When selection reaches the edge of the grid's viewport, scroll the viewport |\n     * | `false`          | Don't scroll the viewport                                                   |\n     *\n     * Read more:\n     * - [Plugins: `DragToScroll` &#8594;](@/api/dragToScroll.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category DragToScroll\n     *\n     * @example\n     * ```js\n     * // when selection reaches the edge of the grid's viewport, scroll the viewport\n     * dragToScroll: true,\n     * ```\n     */\n    dragToScroll: true,\n\n    /**\n     * The `dropdownMenu` option configures the [`DropdownMenu`](@/api/dropdownMenu.md) plugin.\n     *\n     * You can set the `dropdownMenu` option to one of the following:\n     *\n     * | Setting   | Description                                                                                                                                                                                  |\n     * | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`DropdownMenu`](@/api/dropdownMenu.md) plugin                                                                                                                                   |\n     * | `true`    | - Enable the [`DropdownMenu`](@/api/dropdownMenu.md) plugin<br>- Use the [default context menu options](@/guides/accessories-and-menus/context-menu.md#context-menu-with-default-options)    |\n     * | An array  | - Enable the [`DropdownMenu`](@/api/dropdownMenu.md) plugin<br>- Modify [individual context menu options](@/guides/accessories-and-menus/context-menu.md#context-menu-with-specific-options) |\n     * | An object | - Enable the [`DropdownMenu`](@/api/dropdownMenu.md) plugin<br>- Apply a custom dropdown menu configuration                                                                                  |\n     *\n     * Read more:\n     * - [Context menu &#8594;](@/guides/accessories-and-menus/context-menu.md)\n     * - [Plugins: `DropdownMenu` &#8594;](@/api/dropdownMenu.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object|string[]}\n     * @default undefined\n     * @category DropdownMenu\n     *\n     * @example\n     * ```js\n     * // enable the `DropdownMenu` plugin\n     * // use the default context menu options\n     * dropdownMenu: true,\n     *\n     * // enable the `DropdownMenu` plugin\n     * // and modify individual context menu options\n     * dropdownMenu: ['row_above', 'row_below', '---------', 'undo', 'redo'],\n     *\n     * // enable the `DropdownMenu` plugin\n     * // and apply a custom dropdown menu configuration\n     * dropdownMenu: {\n     *   items: {\n     *     'option1': {\n     *       name: 'option1'\n     *     },\n     *     'option2': {\n     *       name: 'option2',\n     *       submenu: {\n     *         items: [\n     *           {\n     *             key: 'option2:suboption1',\n     *             name: 'option2:suboption1',\n     *             callback(key, options) {\n     *               ...\n     *             }\n     *           },\n     *           ...\n     *         ]\n     *       }\n     *     }\n     *   }\n     * },\n     * ```\n     */\n    dropdownMenu: void 0,\n\n    /**\n     * The `editor` option sets a [cell editor](@/guides/cell-functions/cell-editor.md) for a cell.\n     *\n     * You can set the `editor` option to one of the following [cell editor aliases](@/guides/cell-functions/cell-editor.md):\n     *\n     * | Alias               | Cell editor function                                                       |\n     * | ------------------- | -------------------------------------------------------------------------- |\n     * | A custom alias      | Your [custom cell editor](@/guides/cell-functions/cell-editor.md) function |\n     * | `'autocomplete'`    | `AutocompleteEditor`                                                       |\n     * | `'base'`            | `BaseEditor`                                                               |\n     * | `'checkbox'`        | `CheckboxEditor`                                                           |\n     * | `'date'`            | `DateEditor`                                                               |\n     * | `'dropdown'`        | `DropdownEditor`                                                           |\n     * | `'handsontable'`    | `HandsontableEditor`                                                       |\n     * | `'numeric'`         | `NumericEditor`                                                            |\n     * | `'password'`        | `PasswordEditor`                                                           |\n     * | `'select'`          | `SelectEditor`                                                             |\n     * | `'text'`            | `TextEditor`                                                               |\n     * | `'time'`            | `TimeEditor`                                                               |\n     *\n     * To disable editing cells through cell editors,\n     * set the `editor` option to `false`.\n     * You'll still be able to change cells' content through Handsontable's API\n     * or through plugins (e.g. [`CopyPaste`](@/api/copyPaste.md)), though.\n     *\n     * To set the [`editor`](#editor), [`renderer`](#renderer), and [`validator`](#validator)\n     * options all at once, use the [`type`](#type) option.\n     *\n     * Read more:\n     * - [Cell editor &#8594;](@/guides/cell-functions/cell-editor.md)\n     * - [Cell type &#8594;](@/guides/cell-types/cell-type.md)\n     * - [Configuration options: Cascading configuration &#8594;](@/guides/getting-started/setting-options.md#cascading-configuration)\n     * - [`type`](#type)\n     *\n     * @memberof Options#\n     * @type {string|Function|boolean}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // use the `numeric` editor for every cell of the entire grid\n     * editor: 'numeric',\n     *\n     * // apply the `editor` option to individual columns\n     * columns: [\n     *   {\n     *     // use the `autocomplete` editor for every cell of this column\n     *     editor: 'autocomplete'\n     *   },\n     *   {\n     *     // disable editing cells through cell editors for every cell of this column\n     *     editor: false\n     *   }\n     * ]\n     * ```\n     */\n    editor: void 0,\n\n    /**\n     * The `enterBeginsEditing` option configures the action of the <kbd>Enter</kbd> key.\n     *\n     * You can set the `enterBeginsEditing` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                                                                                                               |\n     * | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | - On pressing <kbd>Enter</kbd> once, start editing the currently-selected cell<br>- On pressing <kbd>Enter</kbd> twice, move to another cell,<br>as configured by the [`enterMoves`](#enterMoves) setting |\n     * | `false`          | - On pressing <kbd>Enter</kbd> once, move to another cell,<br>as configured by the [`enterMoves`](#enterMoves) setting                                                                                    |\n     *\n     * Read more:\n     * - [`enterMoves`](#enterMoves)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // press Enter once to start editing\n     * // press Enter twice to move to another cell\n     * enterBeginsEditing: true,\n     *\n     * // press Enter once to move to another cell\n     * enterBeginsEditing: false,\n     * ```\n     */\n    enterBeginsEditing: true,\n\n    /**\n     * The `enterMoves` option configures the action of the <kbd>Enter</kbd> key.\n     *\n     * If the [`enterBeginsEditing`](#enterBeginsEditing) option is set to `true`,\n     * the `enterMoves` setting applies to the **second** pressing of the <kbd>Enter</kbd> key.\n     *\n     * If the [`enterBeginsEditing`](#enterBeginsEditing) option is set to `false`,\n     * the `enterMoves` setting applies to the **first** pressing of the <kbd>Enter</kbd> key.\n     *\n     * You can set the `enterMoves` option to an object with the following properties\n     * (or to a function that returns such an object):\n     *\n     * | Property | Type   | Description                                                                                                                                              |\n     * | -------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `col`    | Number | - On pressing <kbd>Enter</kbd>, move selection `col` columns right<br>- On pressing <kbd>Shift</kbd>+<kbd>Enter</kbd>, move selection `col` columns left |\n     * | `row`    | Number | - On pressing <kbd>Enter</kbd>, move selection `row` rows down<br>- On pressing <kbd>Shift</kbd>+<kbd>Enter</kbd>, move selection `row` rows up          |\n     *\n     * Read more:\n     * - [`enterBeginsEditing`](#enterBeginsEditing)\n     *\n     * @memberof Options#\n     * @type {object|Function}\n     * @default {col: 0, row: 1}\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // on pressing Enter, move selection 1 column right and 1 row down\n     * // on pressing Shift+Enter, move selection 1 column left and 1 row up\n     * enterMoves: {col: 1, row: 1},\n     *\n     * // the same setting, as a function\n     * // `event` is a DOM Event object received on pressing Enter\n     * // you can use it to check whether the user pressed Enter or Shift+Enter\n     * enterMoves(event) {\n     *   return {col: 1, row: 1};\n     * },\n     * ```\n     */\n    enterMoves: {\n      col: 0,\n      row: 1\n    },\n\n    /**\n     * The `fillHandle` option configures the [Autofill](@/api/autofill.md) plugin.\n     *\n     * You can set the `fillHandle` option to one the following:\n     *\n     * | Setting        | Description                                                                |\n     * | -------------- | -------------------------------------------------------------------------- |\n     * | `true`         | - Enable autofill in all directions<br>- Add the fill handle               |\n     * | `false`        | Disable autofill                                                           |\n     * | `'vertical'`   | - Enable vertical autofill<br>- Add the fill handle                        |\n     * | `'horizontal'` | - Enable horizontal autofill<br>- Add the fill handle                      |\n     * | An object      | - Enable autofill<br>- Add the fill handle<br>- Configure autofill options |\n     *\n     * If you set the `fillHandle` option to an object, you can configure the following autofill options:\n     *\n     * | Option          | Possible settings              | Description                                                                                               |\n     * | --------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------- |\n     * | `autoInsertRow` | `true` (default) \\| `false`    | `true`: When you reach the grid's bottom, add new rows<br>`false`: When you reach the grid's bottom, stop |\n     * | `direction`     | `'vertical'` \\| `'horizontal'` | `'vertical'`: Enable vertical autofill<br>`'horizontal'`: Enable horizontal autofill                      |\n     *\n     * Read more:\n     * - [AutoFill values &#8594;](@/guides/cell-features/autofill-values.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string|object}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable autofill in all directions\n     * // with `autoInsertRow` enabled\n     * fillHandle: true,\n     *\n     * // enable vertical autofill\n     * // with `autoInsertRow` enabled\n     * fillHandle: 'vertical',\n     *\n     * // enable horizontal autofill\n     * // with `autoInsertRow` enabled\n     * fillHandle: 'horizontal',\n     *\n     * // enable autofill in all directions\n     * // with `autoInsertRow` disabled\n     * fillHandle: {\n     *   autoInsertRow: false,\n     * },\n     *\n     * // enable vertical autofill\n     * // with `autoInsertRow` disabled\n     * fillHandle: {\n     *   autoInsertRow: false,\n     *   direction: 'vertical'\n     * },\n     * ```\n     */\n    fillHandle: {\n      autoInsertRow: false\n    },\n\n    /**\n     * The `filter` option configures whether [`autocomplete`](@/guides/cell-types/autocomplete-cell-type.md) cells'\n     * lists are updated by the end user's input.\n     *\n     * You can set the `filter` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                           |\n     * | ---------------- | --------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | When the end user types into the input area, only options matching the input are displayed                            |\n     * | `false`          | When the end user types into the input area, all options are displayed<br>(options matching the input are put in bold |\n     *\n     * Read more:\n     * - [Autocomplete cell type &#8594;](@/guides/cell-types/autocomplete-cell-type.md)\n     * - [`source`](#source)\n     * - [`filteringCaseSensitive`](#filteringCaseSensitive)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [{\n     *   // set the `type` of every cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['A', 'B', 'C'],\n     *   // when the end user types in `A`, display only the A option\n     *   // when the end user types in `B`, display only the B option\n     *   // when the end user types in `C`, display only the C option\n     *   filter: true\n     * }],\n     * ```\n     */\n    filter: true,\n\n    /**\n     * The `filteringCaseSensitive` option configures whether [`autocomplete`](@/guides/cell-types/autocomplete-cell-type.md) cells'\n     * input is case-sensitive.\n     *\n     * You can set the `filteringCaseSensitive` option to one of the following:\n     *\n     * | Setting           | Description                                                                                        |\n     * | ----------------- | -------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | [`autocomplete`](@/guides/cell-types/autocomplete-cell-type.md) cells' input is not case-sensitive |\n     * | `true`            | [`autocomplete`](@/guides/cell-types/autocomplete-cell-type.md) cells' input is case-sensitive     |\n     *\n     * Read more:\n     * - [Autocomplete cell type &#8594;](@/guides/cell-types/autocomplete-cell-type.md)\n     * - [`source`](#source)\n     * - [`filter`](#filter)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     type: 'autocomplete',\n     *     source: [ ... ],\n     *     // match case while searching autocomplete options\n     *     filteringCaseSensitive: true\n     *   }\n     * ],\n     * ```\n     */\n    filteringCaseSensitive: false,\n\n    /**\n     * The `filters` option configures the [`Filters`](@/api/filters.md) plugin.\n     *\n     * You can set the `filters` option to one of the following:\n     *\n     * | Setting | Description                                      |\n     * | ------- | ------------------------------------------------ |\n     * | `false` | Disable the [`Filters`](@/api/filters.md) plugin |\n     * | `true`  | Enable the [`Filters`](@/api/filters.md) plugin  |\n     *\n     * Read more:\n     * - [Column filter &#8594;](@/guides/columns/column-filter.md)\n     * - [Plugins: `Filters` &#8594;](@/api/filters.md)\n     * - [`dropdownMenu`](#dropdownMenu)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default undefined\n     * @category Filters\n     *\n     * @example\n     * ```js\n     * // enable the `Filters` plugin\n     * filters: true,\n     * ```\n     */\n    filters: void 0,\n\n    /**\n     * The `fixedColumnsLeft` option sets the number of [frozen columns](@/guides/columns/column-freezing.md)\n     * at the left-hand side of the grid.\n     *\n     * Read more:\n     * - [Column freezing &#8594;](@/guides/columns/column-freezing.md)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // freeze the first 3 columns from the left\n     * fixedColumnsLeft: 3,\n     * ```\n     */\n    fixedColumnsLeft: 0,\n\n    /**\n     * The `fixedRowsBottom` option sets the number of [frozen rows](@/guides/rows/row-freezing.md)\n     * at the bottom of the grid.\n     *\n     * Read more:\n     * - [Row freezing &#8594;](@/guides/rows/row-freezing.md)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // freeze the bottom 3 rows\n     * fixedRowsBottom: 3,\n     * ```\n     */\n    fixedRowsBottom: 0,\n\n    /**\n     * The `fixedRowsTop` option sets the number of [frozen rows](@/guides/rows/row-freezing.md) at the top of the grid.\n     *\n     * Read more:\n     * - [Row freezing &#8594;](@/guides/rows/row-freezing.md)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // freeze the top 3 rows\n     * fixedRowsTop: 3,\n     * ```\n     */\n    fixedRowsTop: 0,\n\n    /**\n     * The `formulas` option configures the [`Formulas`](@/api/formulas.md) plugin.\n     *\n     * The [`Formulas`](@/api/formulas.md) plugin uses the [HyperFormula](https://handsontable.github.io/hyperformula/) calculation engine.\n     * To install [HyperFormula](https://handsontable.github.io/hyperformula/), read the following:\n     * - [Formula calculation: Initialization methods &#8594;](@/guides/formulas/formula-calculation.md#initialization-methods)\n     *\n     * You can set the `formulas` option to an object with the following properties:\n     *\n     * | Property    | Possible values                                                                                                                                                                                                        |\n     * | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `engine`    | `HyperFormula` \\|<br>A [HyperFormula](https://handsontable.github.io/hyperformula/) instance \\|<br>A [HyperFormula configuration](https://handsontable.github.io/hyperformula/api/interfaces/configparams.html) object |\n     * | `sheetId`   | A number                                                                                                                                                                                                               |\n     * | `sheetName` | A string                                                                                                                                                                                                               |\n     *\n     * Read more:\n     * - [Plugins: `Formulas` &#8594;](@/api/formulas.md)\n     * - [Formula calculation &#8594;](@/guides/formulas/formula-calculation.md)\n     * - [HyperFormula documentation: Client-side installation](https://handsontable.github.io/hyperformula/guide/client-side-installation)\n     * - [HyperFormula documentation: Configuration options](https://handsontable.github.io/hyperformula/api/interfaces/configparams.html)\n     *\n     * @memberof Options#\n     * @type {object}\n     * @default undefined\n     * @category Formulas\n     *\n     * @example\n     * ```js\n     * // either add the `HyperFormula` class\n     * formulas: {\n     *   // set `engine` to `HyperFormula`\n     *   engine: HyperFormula,\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     *\n     * // or, add a HyperFormula instance\n     * // initialized with the `'internal-use-in-handsontable'` license key\n     * const hyperformulaInstance = HyperFormula.buildEmpty({\n     *   licenseKey: 'internal-use-in-handsontable',\n     * });\n     *\n     * formulas: {\n     *   // set `engine` to a HyperFormula instance\n     *   engine: hyperFormulaInstance,\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     *\n     * // or, add a HyperFormula configuration object\n     * formulas: {\n     *   // set `engine` to a HyperFormula configuration object\n     *   engine: {\n     *     hyperformula: HyperFormula // or `engine: hyperFormulaInstance`\n     *     leapYear1900: false,       // this option comes from HyperFormula\n     *     // add more HyperFormula configuration options\n     *   },\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     *\n     * // use the same HyperFormula instance in multiple Handsontable instances\n     *\n     * // a Handsontable instance `hot1`\n     * formulas: {\n     *   engine: HyperFormula,\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     *\n     * // a Handsontable instance `hot2`\n     * formulas: {\n     *   engine: hot1.getPlugin('formulas').engine,\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     * ```\n     */\n    formulas: void 0,\n\n    /**\n     * The `fragmentSelection` option configures text selection settings.\n     *\n     * You can set the `fragmentSelection` option to one of the following:\n     *\n     * | Setting           | Decription                                        |\n     * | ----------------- | ------------------------------------------------- |\n     * | `false` (default) | Disable text selection                            |\n     * | `true`            | Enable text selection in multiple cells at a time |\n     * | `'cell'`          | Enable text selection in one cell at a time       |\n     *\n     * @memberof Options#\n     * @type {boolean|string}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable text selection in multiple cells at a time\n     * fragmentSelection: true,\n     *\n     * // enable text selection in one cell a time\n     * fragmentSelection: 'cell',\n     * ```\n     */\n    fragmentSelection: false,\n\n    /**\n     * The `height` option configures the height of your grid.\n     *\n     * You can set `height` option to one of the following:\n     *\n     * | Setting                                                                    | Example                    |\n     * | -------------------------------------------------------------------------- | -------------------------- |\n     * | A number of pixels                                                         | `height: 500`              |\n     * | A string with a [CSS unit](https://www.w3schools.com/cssref/css_units.asp) | `height: '75vw'`           |\n     * | A function that returns a valid number or string                           | `height() { return 500; }` |\n     *\n     * Read more:\n     * - [Grid size &#8594;](@/guides/getting-started/grid-size.md)\n     *\n     * @memberof Options#\n     * @type {number|string|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the grid's height to 500px\n     * height: 500,\n     *\n     * // set the grid's height to 75vh\n     * height: '75vh',\n     *\n     * // set the grid's height to 500px, using a function\n     * height() {\n     *   return 500;\n     * },\n     * ```\n     */\n    height: void 0,\n\n    /**\n     * The `hiddenColumns` option configures the [`HiddenColumns`](@/api/hiddenColumns.md) plugin.\n     *\n     * You can set the `hiddenColumns` option to one of the following:\n     *\n     * | Setting   | Description                                                                                  |\n     * | --------- | -------------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`HiddenColumns`](@/api/hiddenColumns.md) plugin                                 |\n     * | `true`    | Enable the [`HiddenColumns`](@/api/hiddenColumns.md) plugin with the default plugin options  |\n     * | An object | - Enable the [`HiddenColumns`](@/api/hiddenColumns.md) plugin<br>- Modify the plugin options |\n     *\n     * If you set the `hiddenColumns` to an object, you can set the following [`HiddenColumns`](@/api/hiddenColumns.md) plugin options:\n     *\n     * | Property           | Possible values     | Description                                                                                                                                             |\n     * | ------------------ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `columns`          | An array of indexes | An array of indexes of columns that are hidden at initialization                                                                                        |\n     * | `copyPasteEnabled` | `true` \\| `false`   | `true`: when copying or pasting data, take hidden columns into account<br>`false`: when copying or pasting data, don't take hidden columns into account |\n     * | `indicators`       | `true` \\| `false`   | `true`: display UI markers to indicate the presence of hidden columns<br>`false`: display UI markers                                                    |\n     *\n     * Read more:\n     * - [Plugins: `HiddenColumns` &#8594;](@/api/hiddenColumns.md)\n     * - [Column hiding &#8594;](@/guides/columns/column-hiding.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default undefined\n     * @category HiddenColumns\n     *\n     * @example\n     * ```js\n     * // enable the `HiddenColumns` plugin\n     * hiddenColumns: true,\n     *\n     * // enable `HiddenColumns` plugin, and modify the plugin options\n     * hiddenColumns: {\n     *   // set columns that are hidden by default\n     *   columns: [5, 10, 15],\n     *   // when copying or pasting data, take hidden columns into account\n     *   copyPasteEnabled: true,\n     *   // show where hidden columns are\n     *   indicators: true\n     * }\n     * ```\n     */\n    hiddenColumns: void 0,\n\n    /**\n     * The `hiddenRows` option configures the [`HiddenRows`](@/api/hiddenRows.md) plugin.\n     *\n     * You can set the `hiddenRows` option to one of the following:\n     *\n     * | Setting   | Description                                                                            |\n     * | --------- | -------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`HiddenRows`](@/api/hiddenRows.md) plugin                                 |\n     * | `true`    | Enable the [`HiddenRows`](@/api/hiddenRows.md) plugin with the default plugin options  |\n     * | An object | - Enable the [`HiddenRows`](@/api/hiddenRows.md) plugin<br>- Modify the plugin options |\n     *\n     * If you set the `hiddenRows` to an object, you can set the following [`HiddenRows`](@/api/hiddenRows.md) plugin options:\n     *\n     * | Property           | Possible values     | Description                                                                                                                                       |\n     * | ------------------ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `rows   `          | An array of indexes | An array of indexes of rows that are hidden at initialization                                                                                     |\n     * | `copyPasteEnabled` | `true` \\| `false`   | `true`: when copying or pasting data, take hidden rows into account<br>`false`: when copying or pasting data, don't take hidden rows into account |\n     * | `indicators`       | `true` \\| `false`   | `true`: display UI markers to indicate the presence of hidden rows<br>`false`: display UI markers                                                 |\n     *\n     * Read more:\n     * - [Plugins: `HiddenRows` &#8594;](@/api/hiddenRows.md)\n     * - [Row hiding &#8594;](@/guides/rows/row-hiding.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default undefined\n     * @category HiddenRows\n     *\n     * @example\n     * ```js\n     * // enable the `HiddenRows` plugin\n     * hiddenRows: true,\n     *\n     * // enable `HiddenRows` plugin, and modify the plugin options\n     * hiddenRows: {\n     *   // set rows that are hidden by default\n     *   rows: [5, 10, 15],\n     *   // when copying or pasting data, take hidden rows into account\n     *   copyPasteEnabled: true,\n     *   // show where hidden rows are\n     *   indicators: true\n     * }\n     * ```\n     */\n    hiddenRows: void 0,\n\n    /**\n     * The `invalidCellClassName` option lets you add a CSS class name to cells\n     * that were marked as `invalid` by the [cell validator](@/guides/cell-functions/cell-validator.md).\n     *\n     * Read more:\n     * - [Cell validator &#8594;](@/guides/cell-functions/cell-validator.md)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htInvalid'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `highlight-error` CSS class name\n     * // to every `invalid` cell`\n     * invalidCellClassName: 'highlight-error',\n     * ```\n     */\n    invalidCellClassName: 'htInvalid',\n\n    /**\n     * The `isEmptyCol` option lets you define your own custom method\n     * for checking if a column at a given visual index is empty.\n     *\n     * The `isEmptyCol` setting overwrites the built-in [`isEmptyCol`](@/api/core.md#isEmptyCol) method.\n     *\n     * @memberof Options#\n     * @type {Function}\n     * @param {number} col Visual column index.\n     * @returns {boolean}\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // overwrite the built-in `isEmptyCol` method\n     * isEmptyCol(visualColumnIndex) {\n     *    // your custom method\n     *    ...\n     * },\n     * ```\n     */\n    isEmptyCol: function isEmptyCol(col) {\n      var row;\n      var rowLen;\n      var value;\n\n      for (row = 0, rowLen = this.countRows(); row < rowLen; row++) {\n        value = this.getDataAtCell(row, col);\n\n        if (isEmpty(value) === false) {\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    /**\n     * The `isEmptyRow` option lets you define your own custom method\n     * for checking if a row at a given visual index is empty.\n     *\n     * The `isEmptyRow` setting overwrites the built-in [`isEmptyRow`](@/api/core.md#isEmptyRow) method.\n     *\n     * @memberof Options#\n     * @type {Function}\n     * @param {number} row Visual row index.\n     * @returns {boolean}\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // overwrite the built-in `isEmptyRow` method\n     * isEmptyRow(visualRowIndex) {\n     *    // your custom method\n     *    ...\n     * },\n     * ```\n     */\n    isEmptyRow: function isEmptyRow(row) {\n      var col;\n      var colLen;\n      var value;\n      var meta;\n\n      for (col = 0, colLen = this.countCols(); col < colLen; col++) {\n        value = this.getDataAtCell(row, col);\n\n        if (isEmpty(value) === false) {\n          if (_typeof(value) === 'object') {\n            meta = this.getCellMeta(row, col);\n            return isObjectEqual(this.getSchema()[meta.prop], value);\n          }\n\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    /**\n     * @description\n     * The `label` option configures [`checkbox`](@/guides/cell-types/checkbox-cell-type.md) cells` labels.\n     *\n     * You can set the `label` option to an object with the following properties:\n     *\n     * | Property    | Possible values                   | Description                                                                                                                                                                                                             |\n     * | ----------- | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `position`  | `'after'` (default) \\| `'before'` | `'after'`: place the label to the right of the checkbox<br>`'before'`: place the label to the left of the checkbox                                                                                                      |\n     * | `value`     | A string \\| A function            | The label's text                                                                                                                                                                                                        |\n     * | `separated` | `false` (default) \\| `true`       | `false`: don't separate the label from the checkbox<br>`true`: separate the label from the checkbox                                                                                                                     |\n     * | `property`  | A string                          | - A [`data`](#data) object property name that's used as the label's text <br>- Works only when the [`data`](#data) option is set to an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects) |\n     *\n     * Read more:\n     * - [Checkbox cell type: Checkbox labels &#8594;](@/guides/cell-types/checkbox-cell-type.md#checkbox-labels)\n     *\n     * @memberof Options#\n     * @type {object}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [{\n     *   type: 'checkbox',\n     *   // add 'My label:' after the checkbox\n     *   label: { position: 'after', value: 'My label: ', separated: true }\n     * }],\n     * ```\n     */\n    label: void 0,\n\n    /**\n     * The `language` option configures Handsontable's language.\n     *\n     * You can set the `language` option to one of the following:\n     *\n     * | Setting             | Description                 |\n     * | ------------------- | --------------------------- |\n     * | `'en-US'` (default) | English - United States     |\n     * | `'de-DE'`           | German - Germany            |\n     * | `'es-MX'`           | Spanish - Mexico            |\n     * | `'fr-FR'`           | French - France             |\n     * | `'it-IT'`           | Italian - Italy             |\n     * | `'ja-JP'`           | Japanese - Japan            |\n     * | `'ko-KR'`           | Korean - Korea              |\n     * | `'lv-LV'`           | Latvian - Latvia            |\n     * | `'nb-NO'`           | Norwegian (Bokm\u00E5l) - Norway |\n     * | `'nl-NL'`           | Dutch - Netherlands         |\n     * | `'pl-PL'`           | Polish - Poland             |\n     * | `'pt-BR'`           | Portuguese - Brazil         |\n     * | `'ru-RU'`           | Russian - Russia            |\n     * | `'zh-CN'`           | Chinese - China             |\n     * | `'zh-TW'`           | Chinese - Taiwan            |\n     *\n     * Read more:\n     * - [Internationalization (i18n) &#8594;](@/guides/internationalization/internationalization-i18n.md)\n     * - [`locale`](#locale)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'en-US'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set Handsontable's language to Polish\n     * language: 'pl-PL',\n     * ```\n     */\n    language: 'en-US',\n\n    /**\n     * The `licenseKey` option sets your Handsontable license key.\n     *\n     * You can set the `licenseKey` option to one of the following:\n     *\n     * | Setting                                                                                                 | Description                                                                                       |\n     * | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |\n     * | A string with your [commercial license key](@/guides/getting-started/license-key.md#commercial-license) | For [commercial use](@/guides/technical-specification/software-license.md#commercial-use)         |\n     * | `'non-commercial-and-evaluation'`                                                                       | For [non-commercial use](@/guides/technical-specification/software-license.md#non-commercial-use) |\n     *\n     * Read more:\n     * - [License key &#8594;](@/guides/getting-started/license-key.md)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // for commercial use\n     * licenseKey: 'xxxxx-xxxxx-xxxxx-xxxxx-xxxxx', // your commercial license key\n     *\n     * // for non-commercial use\n     * licenseKey: 'non-commercial-and-evaluation',\n     * ```\n     */\n    licenseKey: void 0,\n\n    /**\n     * The `locale` option configures Handsontable's locale.\n     *\n     * You can set the `locale` option to any valid and canonicalized Unicode BCP 47 locale tag,\n     * both for the entire grid, and for individual columns.\n     *\n     * Read more:\n     * - [Internationalization (i18n) &#8594;](@/guides/internationalization/internationalization-i18n.md)\n     * - [`language`](#language)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'en-US'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the entire grid's locale to Polish\n     * locale: 'pl-PL',\n     *\n     * // set individual columns' locales\n     * columns: [\n     *   {\n     *     // set the first column's locale to Polish\n     *     locale: 'pl-PL',\n     *   },\n     *   {\n     *     // set the second column's locale to German\n     *     locale: 'de-DE',\n     *   },\n     * ],\n     * ```\n     */\n    locale: 'en-US',\n\n    /**\n     * The `manualColumnFreeze` option configures the [`ManualColumnFreeze`](@/api/manualColumnFreeze.md) plugin.\n     *\n     * You can set the `manualColumnFreeze` option to one of the following:\n     *\n     * | Setting  | Description                                                            |\n     * | -------- | ---------------------------------------------------------------------- |\n     * | `true`   | Enable the [`ManualColumnFreeze`](@/api/manualColumnFreeze.md) plugin  |\n     * | `false`  | Disable the [`ManualColumnFreeze`](@/api/manualColumnFreeze.md) plugin |\n     *\n     * Read more:\n     * - [Column freezing &#8594;](@/guides/columns/column-freezing.md#user-triggered-freeze)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default undefined\n     * @category ManualColumnFreeze\n     *\n     * @example\n     * ```js\n     * // enable the `ManualColumnFreeze` plugin\n     * manualColumnFreeze: true,\n     * ```\n     */\n    manualColumnFreeze: void 0,\n\n    /**\n     * The `manualColumnMove` option configures the [`ManualColumnMove`](@/api/manualColumnMove.md) plugin.\n     *\n     * You can set the `manualColumnMove` option to one of the following:\n     *\n     * | Setting  | Description                                                                                                        |\n     * | -------- | ------------------------------------------------------------------------------------------------------------------ |\n     * | `true`   | Enable the [`ManualColumnMove`](@/api/manualColumnMove.md) plugin                                                  |\n     * | `false`  | Disable the [`ManualColumnMove`](@/api/manualColumnMove.md) plugin                                                 |\n     * | An array | - Enable the [`ManualColumnMove`](@/api/manualColumnMove.md) plugin<br>- Move individual columns at initialization |\n     *\n     * Read more:\n     * - [Column moving &#8594;](@/guides/columns/column-moving.md)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category ManualColumnMove\n     *\n     * @example\n     * ```js\n     * // enable the `ManualColumnMove` plugin\n     * manualColumnMove: true,\n     *\n     * // enable the `ManualColumnMove` plugin\n     * // at initialization, move column 0 to 1\n     * // at initialization, move column 1 to 4\n     * // at initialization, move column 2 to 6\n     * manualColumnMove: [1, 4, 6],\n     * ```\n     */\n    manualColumnMove: void 0,\n\n    /**\n     * @description\n     * The `manualColumnResize` option configures the [`ManualColumnResize`](@/api/manualColumnResize.md) plugin.\n     *\n     * You can set the `manualColumnResize` option to one of the following:\n     *\n     * | Setting  | Description                                                                                                           |\n     * | -------- | --------------------------------------------------------------------------------------------------------------------- |\n     * | `true`   | Enable the [`ManualColumnResize`](@/api/manualColumnResize.md) plugin                                                 |\n     * | `false`  | Disable the [`ManualColumnResize`](@/api/manualColumnResize.md) plugin                                                |\n     * | An array | - Enable the [`ManualColumnResize`](@/api/manualColumnResize.md) plugin<br>- Set initial widths of individual columns |\n     *\n     * Read more:\n     * - [Column width: Column stretching &#8594;](@/guides/columns/column-width.md#column-stretching)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category ManualColumnResize\n     *\n     * @example\n     * ```js\n     * // enable the `manualColumnResize` plugin\n     * manualColumnResize: true,\n     *\n     * // enable the `manualColumnResize` plugin\n     * // set the initial width of column 0 to 40 pixels\n     * // set the initial width of column 1 to 50 pixels\n     * // set the initial width of column 2 to 60 pixels\n     * manualColumnResize: [40, 50, 60],\n     * ```\n     */\n    manualColumnResize: void 0,\n\n    /**\n     * @description\n     * The `manualRowMove` option configures the [`ManualRowMove`](@/api/manualRowMove.md) plugin.\n     *\n     * You can set the `manualRowMove` option to one of the following:\n     *\n     * | Setting  | Description                                                                                               |\n     * | -------- | --------------------------------------------------------------------------------------------------------- |\n     * | `true`   | Enable the [`ManualRowMove`](@/api/manualRowMove.md) plugin                                               |\n     * | `false`  | Disable the [`ManualRowMove`](@/api/manualRowMove.md) plugin                                              |\n     * | An array | - Enable the [`ManualRowMove`](@/api/manualRowMove.md) plugin<br>- Move individual rows at initialization |\n     *\n     * Read more:\n     * - [Row moving &#8594;](@/guides/rows/row-moving.md)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category ManualRowMove\n     *\n     * @example\n     * ```js\n     * // enable the `ManualRowMove` plugin\n     * manualRowMove: true,\n     *\n     * // enable the `ManualRowMove` plugin\n     * // at initialization, move row 0 to 1\n     * // at initialization, move row 1 to 4\n     * // at initialization, move row 2 to 6\n     * manualColumnMove: [1, 4, 6],\n     * ```\n     */\n    manualRowMove: void 0,\n\n    /**\n     * @description\n     * The `manualRowResize` option configures the [`ManualRowResize`](@/api/manualRowResize.md) plugin.\n     *\n     * You can set the `manualRowResize` option to one of the following:\n     *\n     * | Setting  | Description                                                                                                   |\n     * | -------- | ------------------------------------------------------------------------------------------------------------- |\n     * | `true`   | Enable the [`ManualRowResize`](@/api/manualRowResize.md) plugin                                               |\n     * | `false`  | Disable the [`ManualRowResize`](@/api/manualRowResize.md) plugin                                              |\n     * | An array | - Enable the [`ManualRowResize`](@/api/manualRowResize.md) plugin<br>- Set initial heights of individual rows |\n     *\n     * Read more:\n     * - [Row height: Adjust the row height manually &#8594;](@/guides/rows/row-height.md#adjust-the-row-height-manually)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category ManualRowResize\n     *\n     * @example\n     * ```js\n     * // enable the `ManualRowResize` plugin\n     * manualColumnResize: true,\n     *\n     * // enable the `ManualRowResize` plugin\n     * // set the initial height of row 0 to 40 pixels\n     * // set the initial height of row 1 to 50 pixels\n     * // set the initial height of row 2 to 60 pixels\n     * manualColumnResize: [40, 50, 60],\n     * ```\n     */\n    manualRowResize: void 0,\n\n    /**\n     * The `maxCols` option sets a maximum number of columns.\n     *\n     * The `maxCols` option is used:\n     * - At initialization: if the `maxCols` value is lower than the initial number of columns,\n     * Handsontable trims columns from the right.\n     * - At runtime: for example, when inserting columns.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default Infinity\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the maximum number of columns to 300\n     * maxCols: 300,\n     * ```\n     */\n    maxCols: Infinity,\n\n    /**\n     * The `maxRows` option sets a maximum number of rows.\n     *\n     * The `maxRows` option is used:\n     * - At initialization: if the `maxRows` value is lower than the initial number of columns,\n     * Handsontable trims rows from the bottom.\n     * - At runtime: for example, when inserting rows.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default Infinity\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the maximum number of rows to 300\n     * maxRows: 300,\n     * ```\n     */\n    maxRows: Infinity,\n\n    /**\n     * @description\n     * The `mergeCells` option configures the [`MergeCells`](@/api/mergeCells.md) plugin.\n     *\n     * You can set the `mergeCells` option to one of the following:\n     *\n     * | Setting             | Description                                                                                         |\n     * | ------------------- | --------------------------------------------------------------------------------------------------- |\n     * | `true`              | Enable the [`MergeCells`](@/api/mergeCells.md) plugin                                               |\n     * | `false`             | Disable the [`MergeCells`](@/api/mergeCells.md) plugin                                              |\n     * | An array of objects | - Enable the [`MergeCells`](@/api/mergeCells.md) plugin<br>- Merge specific cells at initialization |\n     *\n     * To merge specific cells at Handsontable's initialization,\n     * set the `mergeCells` option to an array of objects, with the following properties:\n     *\n     * | Property  | Description                                                |\n     * | --------- | ---------------------------------------------------------- |\n     * | `row`     | The row index of the merged section's beginning            |\n     * | `col`     | The column index of the merged section's beginning         |\n     * | `rowspan` | The width (as a number of rows) of the merged section      |\n     * | `colspan` | The height (as a number of columns ) of the merged section |\n     *\n     * Read more:\n     * - [Merge cells &#8594;](@/guides/cell-features/merge-cells.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object[]}\n     * @default false\n     * @category MergeCells\n     *\n     * @example\n     * ```js\n     * // enable the `MergeCells` plugin\n     * margeCells: true,\n     *\n     * // enable the `MergeCells` plugin\n     * // and merge specific cells at initialization\n     * mergeCells: [\n     *   // merge cells from cell (1,1) to cell (3,3)\n     *   {row: 1, col: 1, rowspan: 3, colspan: 3},\n     *   // merge cells from cell (3,4) to cell (2,2)\n     *   {row: 3, col: 4, rowspan: 2, colspan: 2},\n     *   // merge cells from cell (5,6) to cell (3,3)\n     *   {row: 5, col: 6, rowspan: 3, colspan: 3}\n     * ],\n     * ```\n     */\n    mergeCells: false,\n\n    /**\n     * The `minCols` option sets a minimum number of columns.\n     *\n     * The `minCols` option is used:\n     * - At initialization: if the `minCols` value is higher than the initial number of columns,\n     * Handsontable adds empty columns to the right.\n     * - At runtime: for example, when removing columns.\n     *\n     * The `minCols` option works only when your [`data`](#data) is an [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays).\n     * When your [`data`](#data) is an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects),\n     * you can only have as many columns as defined in:\n     * - The first data row\n     * - The [`dataSchema`](#dataSchema) option\n     * - The [`columns`](#columns) option\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the minimum number of columns to 10\n     * minCols: 10,\n     * ```\n     */\n    minCols: 0,\n\n    /**\n     * The `minRows` option sets a minimum number of rows.\n     *\n     * The `minRows` option is used:\n     * - At initialization: if the `minRows` value is higher than the initial number of rows,\n     * Handsontable adds empty rows at the bottom.\n     * - At runtime: for example, when removing rows.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the minimum number of rows to 10\n     * minRows: 10,\n     * ```\n     */\n    minRows: 0,\n\n    /**\n     * The `minSpareCols` option sets a minimum number of empty columns\n     * at the grid's right-hand end.\n     *\n     * If there already are other empty columns at the grid's right-hand end,\n     * they are counted into the `minSpareCols` value.\n     *\n     * The total number of columns can't exceed the [`maxCols`](#maxCols) value.\n     *\n     * The `minSpareCols` option works only when your [`data`](#data) is an [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays).\n     * When your [`data`](#data) is an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects),\n     * you can only have as many columns as defined in:\n     * - The first data row\n     * - The [`dataSchema`](#dataSchema) option\n     * - The [`columns`](#columns) option\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // at Handsontable's initialization, add at least 3 empty columns on the right\n     * minSpareCols: 3,\n     * ```\n     */\n    minSpareCols: 0,\n\n    /**\n     * The `minSpareRows` option sets a minimum number of empty rows\n     * at the bottom of the grid.\n     *\n     * If there already are other empty rows at the bottom,\n     * they are counted into the `minSpareRows` value.\n     *\n     * The total number of rows can't exceed the [`maxRows`](#maxRows) value.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // at Handsontable's initialization, add at least 3 empty rows at the bottom\n     * minSpareRows: 3,\n     * ```\n     */\n    minSpareRows: 0,\n\n    /**\n     * @description\n     * The `multiColumnSorting` option configures the [`MultiColumnSorting`](@/api/columnSorting.md) plugin.\n     *\n     * You can set the `multiColumnSorting` option to one of the following:\n     *\n     * | Setting    | Description                                                                                                                                                |\n     * | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true`     | Enable the [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin with the default configuration                                                       |\n     * | `false`    | Disable the [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin                                                                                     |\n     * | An object  | - Enable the [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin<br>- Modify the [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin options |\n     *\n     * If you set the `multiColumnSorting` option to an object,\n     * you can set the following [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin options:\n     *\n     * | Option                   | Possible settings                                                                                                                                |\n     * | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |\n     * | `indicator`              | `true`: Display an arrow icon in the column header, to indicate a sortable column<br>`false`: Don't display the arrow icon in the column header  |\n     * | `headerAction`           | `true`: Enable clicking on the column header to sort the column<br>`false`: Disable clicking on the column header to sort the column             |\n     * | `sortEmptyCells`         | `true`: Sort empty cells as well<br>`false`: Place empty cells at the end                                                                        |\n     * | `compareFunctionFactory` | A [custom compare function](@/guides/rows/row-sorting.md#custom-compare-functions)                                                                |\n     *\n     * If you set the `multiColumnSorting` option to an object,\n     * you can also sort individual columns at Handsontable's initialization.\n     * In the `multiColumnSorting` object, add an object named `initialConfig`,\n     * with the following properties:\n     *\n     * | Option      | Possible settings   | Description                                                      |\n     * | ----------- | ------------------- | ---------------------------------------------------------------- |\n     * | `column`    | A number            | The index of the column that you want to sort at initialization  |\n     * | `sortOrder` | `'asc'` \\| `'desc'` | The sorting order:<br>`'asc'`: ascending<br>`'desc'`: descending |\n     *\n     * Read more:\n     * - [Row sorting &#8594;](@/guides/rows/row-sorting.md)\n     * - [`columnSorting`](#columnSorting)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default undefined\n     * @category MultiColumnSorting\n     *\n     * @example\n     * ```js\n     * // enable the `MultiColumnSorting` plugin\n     * multiColumnSorting: true\n     *\n     * // enable the `MultiColumnSorting` plugin with custom configuration\n     * multiColumnSorting: {\n     *   // sort empty cells as well\n     *   sortEmptyCells: true,\n     *   // display an arrow icon in the column header\n     *   indicator: true,\n     *   // disable clicking on the column header to sort the column\n     *   headerAction: false,\n     *   // add a custom compare function\n     *   compareFunctionFactory(sortOrder, columnMeta) {\n     *     return function(value, nextValue) {\n     *       // some value comparisons which will return -1, 0 or 1...\n     *     }\n     *   }\n     * }\n     *\n     * // enable the `MultiColumnSorting` plugin\n     * multiColumnSorting: {\n     *   // at initialization, sort column 1 in ascending order\n     *   initialConfig: {\n     *     column: 1,\n     *     sortOrder: 'asc'\n     *   },\n     *   // at initialization, sort column 2 in descending order\n     *   initialConfig: {\n     *     column: 2,\n     *     sortOrder: 'desc'\n     *   }\n     * }\n     * ```\n     */\n    multiColumnSorting: void 0,\n\n    /**\n     * @description\n     * The `nestedHeaders` option configures the [`NestedHeaders`](@/api/nestedHeaders.md) plugin.\n     *\n     * You can set the `nestedHeaders` option to an array of arrays:\n     * - Each array configures one set of nested headers.\n     * - Each array element configures one header, and can be one of the following:\n     *\n     * | Array element | Description                                                                                  |\n     * | ------------- | -------------------------------------------------------------------------------------------- |\n     * | A string      | The header's label                                                                           |\n     * | An object     | Properties:<br>`label` (string): the header's label<br>`colspan` (integer): the column width |\n     *\n     * Read more:\n     * - [Plugins: `NestedHeaders` &#8594;](@/api/nestedHeaders.md)\n     * - [Column groups: Nested headers &#8594;](@/guides/columns/column-groups.md#nested-headers)\n     *\n     * @memberof Options#\n     * @type {Array[]}\n     * @default undefined\n     * @category NestedHeaders\n     *\n     * @example\n     * ```js\n     * nestedHeaders: [\n     *   ['A', {label: 'B', colspan: 8}, 'C'],\n     *   ['D', {label: 'E', colspan: 4}, {label: 'F', colspan: 4}, 'G'],\n     *   ['H', 'I', 'J', 'K', 'L', 'M', 'N', 'R', 'S', 'T']\n     * ],\n     * ```\n     */\n    nestedHeaders: void 0,\n\n    /**\n     * @description\n     * The `nestedRows` option configures the [`NestedRows`](@/api/nestedRows.md) plugin.\n     *\n     * You can set the `nestedRows` option to one of the following:\n     *\n     * | Setting           | Description                                            |\n     * | ----------------- | ------------------------------------------------------ |\n     * | `false` (default) | Disable the [`NestedRows`](@/api/nestedRows.md) plugin |\n     * | `true`            | Enable the [`NestedRows`](@/api/nestedRows.md) plugin  |\n     *\n     * Read more:\n     * - [Plugins: `NestedRows` &#8594;](@/api/nestedRows.md)\n     *\n     * @example\n     * ```js\n     * // enable the `NestedRows` plugin\n     * nestedRows: true,\n     * ```\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category NestedRows\n     */\n    nestedRows: void 0,\n\n    /**\n     * The `noWordWrapClassName` option lets you add a CSS class name\n     * to every cell that has the [`wordWrap`](#wordWrap) option set to `false`.\n     *\n     * Read more:\n     * - [`wordWrap`](#wordWrap)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htNoWrap'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add an `is-noWrapCell` CSS class name\n     * // to every cell that doesn't wrap content\n     * noWordWrapClassName: 'is-noWrapCell',\n     * ```\n     */\n    noWordWrapClassName: 'htNoWrap',\n\n    /**\n     * The `numericFormat` option configures the number format and the currency format\n     * of [`numeric`](@/guides/cell-types/numeric-cell-type.md) cells` displayed output.\n     *\n     * You can set the `numericFormat` option to an object with the following properties:\n     *\n     * | Property    | Possible values                                                               | Description     |\n     * | ----------- | ----------------------------------------------------------------------------- | --------------- |\n     * | `pattern`   | All [`numbro.js` number formats](https://numbrojs.com/format.html#numbers)    | Number format   |\n     * | `culture`   | All [`numbro.js` currency formats](https://numbrojs.com/format.html#currency) | Currency format |\n     *\n     * The `numericFormat` option as no effect on cells' input data.\n     * To enter numeric data into Handsontable, use:\n     * - Either floats (separated by a dot, or a comma)\n     * - Or integers\n     *\n     * In the source data, numeric data is stored as JavaScript numbers.\n     *\n     * Read more:\n     * - [Numeric cell type &#8594;](@/guides/cell-types/numeric-cell-type.md)\n     * - [Third-party licenses &#8594;](@/guides/technical-specification/third-party-licenses.md)\n     *\n     * @memberof Options#\n     * @since 0.35.0\n     * @type {object}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of every cell in this column to `numeric`\n     *     type: 'numeric',\n     *     // set the `numericFormat` option for every `numeric` cell of this column\n     *     numericFormat: {\n     *       // set the number format\n     *       pattern: '0,00',\n     *       // set the currency format\n     *       culture: 'en-US'\n     *     }\n     *   }\n     * ],\n     * ```\n     */\n    numericFormat: void 0,\n\n    /**\n     * If the `observeDOMVisibility` option is set to `true`,\n     * Handsontable rerenders every time it detects that the grid was made visible in the DOM.\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // don't rerender the grid on visibility changes\n     * observeDOMVisibility: false,\n     * ```\n     */\n    observeDOMVisibility: true,\n\n    /**\n     * The `outsideClickDeselects` option determines what happens to the current [selection](@/guides/cell-features/selection.md)\n     * when you click outside of the grid.\n     *\n     * You can set the `outsideClickDeselects` option to one of the following:\n     *\n     * | Setting          | Description                                                                                              |\n     * | ---------------- | -------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | On a mouse click outside of the grid, clear the current [selection](@/guides/cell-features/selection.md) |\n     * | `false`          | On a mouse click outside of the grid, keep the current [selection](@/guides/cell-features/selection.md)  |\n     * | A function       | A function that takes the click event target and returns a boolean                                       |\n     *\n     * @memberof Options#\n     * @type {boolean|Function}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // on a mouse click outside of the grid, clear the current selection\n     * outsideClickDeselects: true,\n     *\n     * // on a mouse click outside of the grid, keep the current selection\n     * outsideClickDeselects: false,\n     *\n     * // take the click event target and return `false`\n     * outsideClickDeselects(event) {\n     *   return false;\n     * }\n     *\n     * // take the click event target and return `true`\n     * outsideClickDeselects(event) {\n     *   return false;\n     * }\n     * ```\n     */\n    outsideClickDeselects: true,\n\n    /**\n     * @description\n     * The `persistentState` option configures the [`PersistentState`](@/api/persistentState.md) plugin.\n     *\n     * You can set the `persistentState` to one of the following:\n     *\n     * | Setting           | Description                                                      |\n     * | ----------------- | ---------------------------------------------------------------- |\n     * | `false` (default) | Disable the [`PersistentState`](@/api/persistentState.md) plugin |\n     * | `true`            | Enable the [`PersistentState`](@/api/persistentState.md) plugin  |\n     *\n     * Read more:\n     * - [Saving data: Saving data locally &#8594;](@/guides/getting-started/saving-data.md#saving-data-locally)\n     * - [Plugins: `PersistentState` &#8594;](@/api/persistentState.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category PersistentState\n     *\n     * @example\n     * ```js\n     * // enable the `PersistentState` plugin\n     * persistentState: true,\n     * ```\n     */\n    persistentState: void 0,\n\n    /**\n     * The `placeholder` option lets you display placeholder text in every empty cell.\n     *\n     * You can set the `placeholder` option to one of the following:\n     *\n     * | Setting            | Example        | Description                                                           |\n     * | ------------------ | -------------- | --------------------------------------------------------------------- |\n     * | A non-empty string | `'Empty cell'` | Display `Empty cell` text in empty cells                              |\n     * | A non-string value | `000`          | Display `000` text in empty cells (non-string values get stringified) |\n     *\n     * Read more:\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // display 'Empty cell' text\n     * // in every empty cell of the entire grid\n     * placeholder: 'Empty cell',\n     *\n     * // or\n     * columns: [\n     *   {\n     *     data: 'date',\n     *     dateFormat: 'DD/MM/YYYY',\n     *     // display 'Empty date cell' text\n     *     // in every empty cell of the `date` column\n     *     placeholder: 'Empty date cell'\n     *   }\n     * ],\n     * ```\n     */\n    placeholder: void 0,\n\n    /**\n     * The `placeholderCellClassName` option lets you add a CSS class name to cells\n     * that contain [`placeholder`](#placeholder) text.\n     *\n     * Read more:\n     * - [Cell validator &#8594;](@/guides/cell-functions/cell-validator.md)\n     * - [`placeholder`](#placeholder)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htPlaceholder'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `has-placeholder` CSS class name\n     * // to every cell that contains `placeholder` text\n     * placeholderCellClassName: 'has-placeholder',\n     * ```\n     */\n    placeholderCellClassName: 'htPlaceholder',\n\n    /**\n     * The `preventOverflow` option configures preventing Handsontable\n     * from overflowing outside of its parent element.\n     *\n     * You can set the `preventOverflow` option to one of the following:\n     *\n     * | Setting           | Description                      |\n     * | ----------------- | -------------------------------- |\n     * | `false` (default) | Don't prevent overflowing        |\n     * | `'horizontal'`      | Prevent horizontal overflowing |\n     * | `'vertical'`        | Prevent vertical overflowing   |\n     *\n     * @memberof Options#\n     * @type {string|boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // prevent horizontal overflowing\n     * preventOverflow: 'horizontal',\n     * ```\n     */\n    preventOverflow: false,\n\n    /**\n     * The `preventWheel` option configures preventing the `wheel` event's default action\n     * on overlays.\n     *\n     * You can set the `preventOverflow` option to one of the following:\n     *\n     * | Setting           | Description                                      |\n     * | ----------------- | ------------------------------------------------ |\n     * | `false` (default) | Don't prevent the `wheel` event's default action |\n     * | `true`            | Prevent the `wheel` event's default action       |\n     *\n     * @memberof Options#\n     * @private\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // don't prevent the `wheel` event's default action\n     * preventWheel: false,\n     * ```\n     */\n    preventWheel: false,\n\n    /**\n     * @description\n     * The `readOnly` option determines whether a cell, column or comment is editable or not.\n     *\n     * You can set the `readOnly` option to one of the following:\n     *\n     * | Setting           | Decription                                                                                                                |\n     * | ----------------- | ------------------------------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Set as editable                                                                                                           |\n     * | `true`            | - Set as read-only<br>- Add the [`readOnlyCellClassName`](#readOnlyCellClassName) CSS class name (by default: `htDimmed`) |\n     *\n     * Read more:\n     * - [Configuration options: Cascading configuration &#8594;](@/guides/getting-started/setting-options.md#cascading-configuration)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set as read-only\n     * readOnly: true,\n     * ```\n     */\n    readOnly: false,\n\n    /**\n     * The `readOnlyCellClassName` option lets you add a CSS class name to [read-only](#readOnly) cells.\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`TableClassName`](#TableClassName)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htDimmed'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `is-readOnly` CSS class name\n     * // to every read-only cell\n     * readOnlyCellClassName: 'is-readOnly',\n     * ```\n     */\n    readOnlyCellClassName: 'htDimmed',\n\n    /**\n     * The `renderAllRows` option configures Handsontable's [row virtualization](@/guides/rows/row-virtualization.md).\n     *\n     * You can set the `renderAllRows` option to one of the following:\n     *\n     * | Setting           | Description                                                                                        |\n     * | ----------------- | -------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Enable [row virtualization](@/guides/rows/row-virtualization.md)                                   |\n     * | `true`            | Disable [row virtualization](@/guides/rows/row-virtualization.md)<br>(render all rows of the grid) |\n     *\n     * Read more:\n     * - [Row virtualization &#8594;](@/guides/rows/row-virtualization.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // disable row virtualization\n     * renderAllRows: true,\n     * ```\n     */\n    renderAllRows: void 0,\n\n    /**\n     * @description\n     * The `renderer` option sets a [cell renderer](@/guides/cell-functions/cell-renderer.md) for a cell.\n     *\n     * You can set the `renderer` option to one of the following:\n     * - A custom renderer function\n     * - One of the following [cell renderer aliases](@/guides/cell-functions/cell-renderer.md):\n     *\n     * | Alias               | Cell renderer function                                                         |\n     * | ------------------- | ------------------------------------------------------------------------------ |\n     * | A custom alias      | Your [custom cell renderer](@/guides/cell-functions/cell-renderer.md) function |\n     * | `'autocomplete'`    | `AutocompleteRenderer`                                                         |\n     * | `'base'`            | `BaseRenderer`                                                                 |\n     * | `'checkbox'`        | `CheckboxRenderer`                                                             |\n     * | `'date'`            | `DateRenderer`                                                                 |\n     * | `'dropdown'`        | `DropdownRenderer`                                                             |\n     * | `'html'`            | `HtmlRenderer`                                                                 |\n     * | `'numeric'`         | `NumericRenderer`                                                              |\n     * | `'password'`        | `PasswordRenderer`                                                             |\n     * | `'text'`            | `TextRenderer`                                                                 |\n     * | `'time'`            | `TimeRenderer`                                                                 |\n     *\n     * To set the [`renderer`](#renderer), [`editor`](#editor), and [`validator`](#validator)\n     * options all at once, use the [`type`](#type) option.\n     *\n     * Read more:\n     * - [Cell renderer &#8594;](@/guides/cell-functions/cell-renderer.md)\n     * - [Cell type &#8594;](@/guides/cell-types/cell-type.md)\n     * - [Configuration options: Cascading configuration &#8594;](@/guides/getting-started/setting-options.md#cascading-configuration)\n     * - [`type`](#type)\n     *\n     * @memberof Options#\n     * @type {string|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // use the `numeric` renderer for every cell of the entire grid\n     * renderer: `'numeric'`,\n     *\n     * // add a custom renderer function\n     * renderer(hotInstance, td, row, column, prop, value, cellProperties) {\n     *   // your custom renderer's logic\n     *   ...\n     * }\n     *\n     * // apply the `renderer` option to individual columns\n     * columns: [\n     *   {\n     *     // use the `autocomplete` renderer for every cell of this column\n     *     renderer: 'autocomplete'\n     *   },\n     *   {\n     *     // use the `myCustomRenderer` renderer for every cell of this column\n     *     renderer: 'myCustomRenderer'\n     *   }\n     * ]\n     * ```\n     */\n    renderer: void 0,\n\n    /**\n     * The `rowHeaders` option configures your grid's row headers.\n     *\n     * You can set the `rowHeaders` option to one of the following:\n     *\n     * | Setting    | Description                                                       |\n     * | ---------- | ----------------------------------------------------------------- |\n     * | `true`     | Enable the default row headers ('1', '2', '3', ...)               |\n     * | `false`    | Disable row headers                                               |\n     * | An array   | Define your own row headers (e.g. `['One', 'Two', 'Three', ...]`) |\n     * | A function | Define your own row headers, using a function                     |\n     *\n     * Read more:\n     * - [Row header &#8594;](@/guides/rows/row-header.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string[]|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable the default row headers\n     * rowHeaders: true,\n     *\n     * // set your own row headers\n     * rowHeaders: ['One', 'Two', 'Three'],\n     *\n     * // set your own row headers, using a function\n     * rowHeaders: function(visualRowIndex) {\n     *   return `${visualRowIndex}: AB`;\n     * },\n     * ```\n     */\n    rowHeaders: void 0,\n\n    /**\n     * @description\n     * The `rowHeaderWidth` option configures the width of row headers.\n     *\n     * You can set the `rowHeaderWidth` option to one of the following:\n     *\n     * | Setting  | Description                                     |\n     * | -------- | ----------------------------------------------- |\n     * | A number | Set the same width for every row header         |\n     * | An array | Set different widths for individual row headers |\n     *\n     * @memberof Options#\n     * @type {number|number[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the same width for every row header\n     * rowHeaderWidth: 25,\n     *\n     * // set different widths for individual row headers\n     * rowHeaderWidth: [25, 30, 55],\n     * ```\n     */\n    rowHeaderWidth: void 0,\n\n    /**\n     * The `rowHeights` option sets rows' heights, in pixels.\n     *\n     * In the rendering process, the default row height is 23px.\n     * You can change it to equal or greater than 23px, by setting the `rowHeights` option to one of the following:\n     *\n     * | Setting     | Description                                                                                         | Example                                                      |\n     * | ----------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |\n     * | A number    | Set the same height for every row                                                                   | `rowHeights: 100`                                            |\n     * | A string    | Set the same height for every row                                                                   | `rowHeights: '100px'`                                        |\n     * | An array    | Set heights separately for each row                                                                 | `rowHeights: [100, 120, undefined]`                          |\n     * | A function  | Set row heights dynamically,<br>on each render                                                      | `rowHeights(visualRowIndex) { return visualRowIndex * 10; }` |\n     * | `undefined` | Used by the [modifyRowHeight](@/api/hooks.md#modifyRowHeight) hook,<br>to detect row height changes | `rowHeights: undefined`                                      |\n     *\n     * The `rowHeights` option also sets the minimum row height that can be set\n     * via the {@link ManualRowResize} and {@link AutoRowSize} plugins (if they are enabled).\n     *\n     * Read more:\n     * - [Row height &#8594;](@/guides/rows/row-height.md)\n     *\n     * @memberof Options#\n     * @type {number|number[]|string|string[]|Array<undefined>|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set every row's height to 100px\n     * rowHeights: 100,\n     *\n     * // set every row's height to 100px\n     * rowHeights: '100px',\n     *\n     * // set the first (by visual index) row's height to 100\n     * // set the second (by visual index) row's height to 120\n     * // set the third (by visual index) row's height to `undefined`\n     * // set any other row's height to the default 23px\n     * rowHeights: [100, 120, undefined],\n     *\n     * // set each row's height individually, using a function\n     * rowHeights(visualRowIndex) {\n     *   return visualRowIndex * 10;\n     * },\n     * ```\n     */\n    rowHeights: void 0,\n\n    /**\n     * @description\n     * The `search` option configures the [`Search`](@/api/search.md) plugin.\n     *\n     * You can set the `search` option to one of the following:\n     *\n     * | Setting           | Description                                                                          |\n     * | ----------------- | ------------------------------------------------------------------------------------ |\n     * | `false` (default) | Disable the [`Search`](@/api/search.md) plugin                                       |\n     * | `true`            | Enable the [`Search`](@/api/search.md) plugin with the default configuration         |\n     * | An object         | - Enable the [`Search`](@/api/search.md) plugin<br>- Apply your custom configuration |\n     *\n     * If you set the `search` option to an object, you can configure the following search options:\n     *\n     * | Option              | Possible settings | Description                                                                                          |\n     * | ------------------- | ----------------- | ---------------------------------------------------------------------------------------------------- |\n     * | `searchResultClass` | A string          | Add a custom CSS class name to search results                                                        |\n     * | `queryMethod`       | A function        | Add a [custom query method](@/guides/accessories-and-menus/searching-values.md#custom-query-method)  |\n     * | `callback`          | A function        | Add a [custom callback function](@/guides/accessories-and-menus/searching-values.md#custom-callback) |\n     *\n     * Read more:\n     * - [Searching values &#8594;](@/guides/accessories-and-menus/searching-values.md)\n     * - [Searching values: Custom query method &#8594;](@/guides/accessories-and-menus/searching-values.md#custom-query-method)\n     * - [Searching values: Custom callback &#8594;](@/guides/accessories-and-menus/searching-values.md#custom-callback)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default false\n     * @category Search\n     *\n     * @example\n     * ```js\n     * // enable the `Search` plugin with the default configuration\n     * search: true,\n     *\n     * // enable the `Search` plugin with a custom configuration\n     * search: {\n     *   // add a `customClass` CSS class name to search results\n     *   searchResultClass: 'customClass',\n     *   // add a custom query method\n     *   queryMethod(queryStr, value) {\n     *     ...\n     *   },\n     *   // add a custom callback function\n     *   callback(instance, row, column, value, result) {\n     *     ...\n     *   }\n     * }\n     * ```\n     */\n    search: false,\n\n    /**\n     * @description\n     * The `selectionMode` option configures how [selection](@/guides/cell-features/selection.md) works.\n     *\n     * You can set the `selectionMode` option to one of the following:\n     *\n     * | Setting      | Description                                                  |\n     * | ------------ | ------------------------------------------------------------ |\n     * | `'single'`   | Allow the user to select only one cell at a time.            |\n     * | `'range'`    | Allow the user to select one range of cells at a time.       |\n     * | `'multiple'` | Allow the user to select multiple ranges of cells at a time. |\n     *\n     * Read more:\n     * - [Selection: Selecting ranges &#8594;](@/guides/cell-features/selection.md#selecting-ranges)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'multiple'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // you can only select one cell at at a time\n     * selectionMode: 'single',\n     *\n     * // you can select one range of cells at a time\n     * selectionMode: 'range',\n     *\n     * // you can select multiple ranges of cells at a time\n     * selectionMode: 'multiple',\n     * ```\n     */\n    selectionMode: 'multiple',\n\n    /**\n     * The `selectOptions` option configures options that the end user can choose from in [`select`](@/guides/cell-types/select-cell-type.md) cells.\n     *\n     * You can set the `selectOptions` option to one of the following:\n     *\n     * | Setting                         | Description                                                                   |\n     * | ------------------------------- | ----------------------------------------------------------------------------- |\n     * | An array of strings             | Each string is one option's value and label                                   |\n     * | An object with key-string pairs | - Each key is one option's value<br>- The key's string is that option's label |\n     * | A function                      | A function that returns an object with key-string pairs                       |\n     *\n     * Read more:\n     * - [Select cell type &#8594;](@/guides/cell-types/select-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {string[]|object|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of every cell in this column to `select`\n     *     type: 'select',\n     *     // set the first option's value and label to `A`\n     *     // set the second option's value and label to `B`\n     *     // set the third option's value and label to `C`\n     *     selectOptions: ['A', 'B', 'C'],\n     *   },\n     *   {\n     *     // set the `type` of every cell in this column to `select`\n     *     type: 'select',\n     *     selectOptions: {\n     *       // set the first option's value to `value1` and label to `Label 1`\n     *       value1: 'Label 1',\n     *       // set the second option's value to `value2` and label to `Label 2`\n     *       value2: 'Label 2',\n     *       // set the third option's value to `value3` and label to `Label 3`\n     *       value3: 'Label 3',\n     *     },\n     *   },\n     *   {\n     *     // set the `type` of every cell in this column to `select`\n     *     type: 'select',\n     *     // set `selectOption` to a function that returns available options as an object\n     *     selectOptions(visualRow, visualColumn, prop) {\n     *       return {\n     *         value1: 'Label 1',\n     *         value2: 'Label 2',\n     *         value3: 'Label 3',\n     *       };\n     *   },\n     * ],\n     * ```\n     */\n    selectOptions: void 0,\n\n    /**\n     * @description\n     * The `skipColumnOnPaste` option determines whether you can paste data into a given column.\n     *\n     * You can only apply the `skipColumnOnPaste` option to an entire column, using the [`columns`](#columns) option.\n     *\n     * You can set the `skipColumnOnPaste` option to one of the following:\n     *\n     * | Setting           | Description                                                                                           |\n     * | ----------------- | ----------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Enable pasting data into this column                                                                  |\n     * | `true`            | - Disable pasting data into this column<br>- On pasting, paste data into the next column to the right |\n     *\n     * Read more:\n     * - [Configuration options: Setting column options &#8594;](@/guides/getting-started/setting-options.md#setting-column-options)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // disable pasting data into this column\n     *     skipColumnOnPaste: true\n     *   }\n     * ],\n     * ```\n     */\n    skipColumnOnPaste: false,\n\n    /**\n     * @description\n     *\n     * The `skipRowOnPaste` option determines whether you can paste data into a given row.\n     *\n     * You can only apply the `skipRowOnPaste` option to an entire row, using the [`cells`](#cells) option.\n     *\n     * You can set the `skipRowOnPaste` option to one of the following:\n     *\n     * | Setting           | Description                                                                         |\n     * | ----------------- | ----------------------------------------------------------------------------------- |\n     * | `false` (default) | Enable pasting data into this row                                                   |\n     * | `true`            | - Disable pasting data into this row<br>- On pasting, paste data into the row below |\n     *\n     * Read more:\n     * - [Configuration options: Setting row options &#8594;](@/guides/getting-started/setting-options.md#setting-row-options)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * cells(row, column) {\n     *  const cellProperties = {};\n     *\n     *  // disable pasting data into row 1\n     *  if (row === 1) {\n     *    cellProperties.skipRowOnPaste = true;\n     *  }\n     *\n     *  return cellProperties;\n     * }\n     * ```\n     */\n    skipRowOnPaste: false,\n\n    /**\n     * The `sortByRelevance` option configures whether [`autocomplete`](@/guides/cell-types/autocomplete-cell-type.md) cells'\n     * lists are sorted in the same order as provided in the [`source`](#source) option.\n     *\n     * You can set the `sortByRelevance` option to one of the following:\n     *\n     * | Setting          | Description                                                                  |\n     * | ---------------- | ---------------------------------------------------------------------------- |\n     * | `true` (default) | Sort options in the same order as provided in the [`source`](#source) option |\n     * | `false`          | Sort options alphabetically                                                  |\n     *\n     * Read more:\n     * - [`source`](#source)\n     * - [Autocomplete cell type &#8594;](@/guides/cell-types/autocomplete-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [{\n     *   // set the `type` of every cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['D', 'C', 'B', 'A'],\n     *   // sort the `autocomplete` option in this order: D, C, B, A\n     *   sortByRelevance: true\n     * }],\n     * ```\n     */\n    sortByRelevance: true,\n\n    /**\n     * The `source` option sets options available in [`autocomplete`](@/guides/cell-types/autocomplete-cell-type.md)\n     * and [`dropdown`](@/guides/cell-types/dropdown-cell-type.md) cells.\n     *\n     * You can set the `source` option to one of the following:\n     *\n     * - An array\n     * - A function\n     *\n     * Read more:\n     * - [Autocomplete cell type &#8594;](@/guides/cell-types/autocomplete-cell-type.md)\n     * - [Dropdown cell type &#8594;](@/guides/cell-types/dropdown-cell-type.md)\n     * - [`strict`](#strict)\n     * - [`allowHtml`](#allowHtml)\n     * - [`filter`](#filter)\n     * - [`sortByRelevance`](#sortByRelevance)\n     *\n     * @memberof Options#\n     * @type {Array|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set `source` to an array\n     * columns: [{\n     *   // set the `type` of every cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['A', 'B', 'C', 'D']\n     * }],\n     *\n     * // set `source` to a function\n     * columns: [{\n     *   // set the `type` of every cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // for every `autocomplete` cell in this column, fetch data from an external source\n     *   source(query, callback) {\n     *     fetch('https://example.com/query?q=' + query, function(response) {\n     *       callback(response.items);\n     *     })\n     *   }\n     * }],\n     * ```\n     */\n    source: void 0,\n\n    /**\n     * @description\n     * If the [`data`](#data) option is not set, the `startCols` option sets the initial number of empty columns.\n     *\n     * The `startCols` option works only in Handsontable's constructor.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 5\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // start with 15 empty columns\n     * startCols: 15,\n     * ```\n     */\n    startCols: 5,\n\n    /**\n     * @description\n     * If the [`data`](#data) option is not set, the `startRows` option sets the initial number of empty rows.\n     *\n     * The `startRows` option works only in Handsontable's constructor.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 5\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // start with 15 empty rows\n     * startRows: 15,\n     * ```\n     */\n    startRows: 5,\n\n    /**\n     * @description\n     * The `stretchH` option determines what happens when the declared grid width\n     * is different from the calculated sum of all column widths.\n     *\n     * You can set the `stretchH` option to one of the following:\n     *\n     * | Setting            | Description                                                       |\n     * | ------------------ | ----------------------------------------------------------------- |\n     * | `'none'` (default) | Don't fit the grid to the container (disable column stretching)   |\n     * | `'last'`           | Fit the grid to the container, by stretching only the last column |\n     * | `'all'`            | Fit the grid to the container, by stretching all columns evenly   |\n     *\n     * Read more:\n     * - [Column width: Column stretching &#8594;](@/guides/columns/column-width.md#column-stretching)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'none'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // fit the grid to the container\n     * // by stretching all columns evenly\n     * stretchH: 'all',\n     * ```\n     */\n    stretchH: 'none',\n\n    /**\n     * The `strict` option configures [`autocomplete`](@/guides/cell-types/autocomplete-cell-type.md)\n     * cells' strict/lazy mode.\n     *\n     * You can set the `strict` option to one of the following:\n     *\n     * | Setting | Mode                                                                                  | Description                                                                                                                                       |\n     * | ------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true`  | [Strict mode](@/guides/cell-types/autocomplete-cell-type.md#autocomplete-strict-mode) | The value entered must match an autocomplete option (case-sensitive)                                                                              |\n     * | `false` | [Lazy mode](@/guides/cell-types/autocomplete-cell-type.md#autocomplete-lazy-mode)     | The value entered doesn't have to match an autocomplete option.<br>The end user can:<br>- Choose from suggested options<br>- Enter a custom value |\n     *\n     * Read more:\n     * - [Autocomplete cell type &#8594;](@/guides/cell-types/autocomplete-cell-type.md)\n     * - [`source`](#source)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of every cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['A', 'B', 'C'],\n     *   // values entered must match `A`, `B`, or `C`\n     *   strict: true\n     *   },\n     * ],\n     * ```\n     */\n    strict: void 0,\n\n    /**\n     * The `tableClassName` option lets you add CSS class names\n     * to every Handsontable instance inside the `container` element.\n     *\n     * You can set the `tableClassName` option to one of the following:\n     *\n     * | Setting             | Description                                                                                |\n     * | ------------------- | ------------------------------------------------------------------------------------------ |\n     * | A string            | Add a single CSS class name to every Handsontable instance inside the `container` element  |\n     * | An array of strings | Add multiple CSS class names to every Handsontable instance inside the `container` element |\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string|string[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `your-class-name` CSS class name\n     * // to every Handsontable instance inside the `container` element\n     * tableClassName: 'your-class-name',\n     *\n     * // add `first-class-name` and `second-class-name` CSS class names\n     * // to every Handsontable instance inside the `container` element\n     * tableClassName: ['first-class-name', 'second-class-name'],\n     * ```\n     */\n    tableClassName: void 0,\n\n    /**\n     * The `tabMoves` option configures the action of the <kbd>Tab</kbd> key.\n     *\n     * You can set the `tabMoves` option to an object with the following properties\n     * (or to a function that returns such an object):\n     *\n     * | Property | Type   | Description                                                                                                                                              |\n     * | -------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `row`    | Number | - On pressing <kbd>Tab</kbd>, move selection `row` rows down<br>- On pressing <kbd>Shift</kbd>+<kbd>Tab</kbd>, move selection `row` rows up              |\n     * | `col`    | Number | - On pressing <kbd>Tab</kbd>, move selection `col` columns right<br>- On pressing <kbd>Shift</kbd>+<kbd>Tab</kbd>, move selection `col` columns left     |\n     *\n     * @memberof Options#\n     * @type {object|Function}\n     * @default {row: 0, col: 1}\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // on pressing Tab, move selection 2 rows down and 2 columns right\n     * // on pressing Shift+Tab, move selection 2 rows up and 2 columns left\n     * tabMoves: {row: 2, col: 2},\n     *\n     * // the same setting, as a function\n     * // `event` is a DOM Event object received on pressing Tab\n     * // you can use it to check whether the user pressed Tab or Shift+Tab\n     * tabMoves(event) {\n     *   return {row: 2, col: 2};\n     * },\n     * ```\n     */\n    tabMoves: {\n      row: 0,\n      col: 1\n    },\n\n    /**\n     * @description\n     * The `title` option configures [column header](@/guides/columns/column-header.md) names.\n     *\n     * You can set the `title` option to a string.\n     *\n     * Read more:\n     * - [Column header &#8594;](@/guides/columns/column-header.md)\n     * - [`columns`](#columns)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the first column header name to `First name`\n     *     title: 'First name',\n     *     type: 'text',\n     *   },\n     *   {\n     *     // set the second column header name to `Last name`\n     *     title: 'Last name',\n     *     type: 'text',\n     *   }\n     * ],\n     * ```\n     */\n    title: void 0,\n\n    /**\n     * The `trimDropdown` option configures the width of the [`autocomplete`](@/guides/cell-types/autocomplete-cell-type.md)\n     * and [`dropdown`](@/guides/cell-types/dropdown-cell-type.md) lists.\n     *\n     * You can set the `trimDropdown` option to one of the following:\n     *\n     * | Setting          | Description                                                                     |\n     * | ---------------- | ------------------------------------------------------------------------------- |\n     * | `true` (default) | Make the dropdown/autocomplete list's width the same as the edited cell's width |\n     * | `false`          | Scale the dropdown/autocomplete list's width to the list's content              |\n     *\n     * Read more:\n     * - [Autocomplete cell type &#8594;](@/guides/cell-types/autocomplete-cell-type.md)\n     * - [Dropdown cell type &#8594;](@/guides/cell-types/dropdown-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     type: 'autocomplete',\n     *     // for every cell of this column\n     *     // make the `autocomplete` list's width the same as the edited cell's width\n     *     trimDropdown: true,\n     *   },\n     *   {\n     *     type: 'dropdown',\n     *     // for every cell of this column\n     *     // scale the `dropdown` list's width to the list's content\n     *     trimDropdown: false,\n     *   }\n     * ],\n     * ```\n     */\n    trimDropdown: true,\n\n    /**\n     * @description\n     * The `trimRows` option configures the [`TrimRows`](@/api/trimRows.md) plugin.\n     *\n     * You can set the `trimRows` option to one of the following:\n     *\n     * | Setting  | Description                                                                                   |\n     * | -------- | --------------------------------------------------------------------------------------------- |\n     * | `false`  | Disable the [`TrimRows`](@/api/trimRows.md) plugin                                            |\n     * | `true`   | Enable the [`TrimRows`](@/api/trimRows.md) plugin                                             |\n     * | An array | - Enable the [`TrimRows`](@/api/trimRows.md) plugin<br>- Trim selected rows at initialization |\n     *\n     * Read more:\n     * - [Plugins: `TrimRows` &#8594;](@/api/trimRows.md)\n     * - [Row trimming &#8594;](@/guides/rows/row-trimming.md)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category TrimRows\n     *\n     * @example\n     * ```js\n     * // enable the `TrimRows` plugin\n     * trimRows: true,\n     *\n     * // enable the `TrimRows` plugin\n     * // trim rows 5, 10, and 15 at Handsontable's initialization\n     * trimRows: [5, 10, 15],\n     * ```\n     */\n    trimRows: void 0,\n\n    /**\n     * The `trimWhitespace` option configures automatic whitespace removal.\n     *\n     * You can set the `trimWhitespace` option to one of the following:\n     *\n     * | Setting          | Description                                                     |\n     * | ---------------- | --------------------------------------------------------------- |\n     * | `true` (default) | Remove whitespace at the beginning and at the end of every cell |\n     * | `false`          | Don't remove whitespace                                         |\n     *\n     * @memberof Options#tr\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // don't remove whitespace\n     *     // from any cell of this column\n     *     trimWhitespace: false\n     *   }\n     * ]\n     * ```\n     */\n    trimWhitespace: true,\n\n    /**\n     * @description\n     * The `type` option lets you set the [`renderer`](#renderer), [`editor`](#editor), and [`validator`](#validator)\n     * options all at once, by selecting a [cell type](@/guides/cell-types/cell-type.md).\n     *\n     * You can set the `type` option to one of the following:\n     *\n     * | Cell type                                                         | Renderer, editor & validator                                                                                                                                                                                                                       |\n     * | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | A [custom cell type](@/guides/cell-types/cell-type.md)            | Renderer: your [custom cell renderer](@/guides/cell-functions/cell-renderer.md)<br>Editor: your [custom cell editor](@/guides/cell-functions/cell-editor.md)<br>Validator: your [custom cell validator](@/guides/cell-functions/cell-validator.md) |\n     * | [`'autocomplete'`](@/guides/cell-types/autocomplete-cell-type.md) | Renderer: `AutocompleteRenderer`<br>Editor: `AutocompleteEditor`<br>Validator: `AutocompleteValidator`                                                                         |\n     * | [`'checkbox'`](@/guides/cell-types/checkbox-cell-type.md)         | Renderer: `CheckboxRenderer`<br>Editor: `CheckboxEditor`<br>Validator: -                                                                                                                               |\n     * | [`'date'`](@/guides/cell-types/date-cell-type.md)                 | Renderer: `DateRenderer`<br>Editor: `DateEditor`<br>Validator: `DateValidator`                                                                                                 |\n     * | [`'dropdown'`](@/guides/cell-types/dropdown-cell-type.md)         | Renderer: `DropdownRenderer`<br>Editor: `DropdownEditor`<br>Validator: `DropdownValidator`                                                                                     |\n     * | [`'handsontable'`](@/guides/cell-types/handsontable-cell-type.md) | Renderer: `AutocompleteRenderer`<br>Editor: `HandsontableEditor`<br>Validator: -                                                                                                                       |\n     * | [`'numeric'`](@/guides/cell-types/numeric-cell-type.md)           | Renderer: `NumericRenderer`<br>Editor: `NumericEditor`<br>Validator: `NumericValidator`                                                                                        |\n     * | [`'password'`](@/guides/cell-types/password-cell-type.md)         | Renderer: `PasswordRenderer`<br>Editor: `PasswordEditor`<br>Validator: -                                                                                                                               |\n     * | `'text'`                                                          | Renderer: `TextRenderer`<br>Editor: `TextEditor`<br>Validator: -                                                                                                                                       |\n     * | [`'time`'](@/guides/cell-types/time-cell-type.md)                 | Renderer: `TimeRenderer`<br>Editor: `TimeEditor`<br>Validator: `TimeValidator`                                                                                                 |\n     *\n     * Read more:\n     * - [Cell type &#8594;](@/guides/cell-types/cell-type.md)\n     * - [Cell renderer &#8594;](@/guides/cell-functions/cell-renderer.md)\n     * - [Cell editor &#8594;](@/guides/cell-functions/cell-editor.md)\n     * - [Cell validator &#8594;](@/guides/cell-functions/cell-validator.md)\n     * - [Configuration options: Cascading configuration &#8594;](@/guides/getting-started/setting-options.md#cascading-configuration)\n     * - [`renderer`](#renderer)\n     * - [`editor`](#editor)\n     * - [`validator`](#validator)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'text'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // use the `numeric` cell type for every cell of the entire grid\n     * type: `'numeric'`,\n     *\n     * // apply the `type` option to individual columns\n     * columns: [\n     *   {\n     *     // use the `autocomplete` cell type for every cell of this column\n     *     type: 'autocomplete'\n     *   },\n     *   {\n     *     // use the `myCustomCellType` cell type for every cell of this column\n     *     type: 'myCustomCellType'\n     *   }\n     * ]\n     * ```\n     */\n    type: 'text',\n\n    /**\n     * The `uncheckedTemplate` option lets you configure what value\n     * an unchecked [`checkbox`](@/guides/cell-types/checkbox-cell-type.md) cell has.\n     *\n     * You can set the `uncheckedTemplate` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                                                                                                |\n     * | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n     * | `false` (default) | If a [`checkbox`](@/guides/cell-types/checkbox-cell-type.md) cell is unchecked,<br>the [`getDataAtCell`](@/api/core.md#getDataAtCell) method for this cell returns `false`                 |\n     * | A string          | If a [`checkbox`](@/guides/cell-types/checkbox-cell-type.md) cell is unchecked,<br>the [`getDataAtCell`](@/api/core.md#getDataAtCell) method for this cell returns a string of your choice |\n     *\n     * Read more:\n     * - [Checkbox cell type: Checkbox template &#8594;](@/guides/cell-types/checkbox-cell-type.md#checkbox-template)\n     * - [`getDataAtCell()` &#8594;](@/api/core.md#getDataAtCell)\n     * - [`checkedTemplate`](#checkedTemplate)\n     *\n     * @memberof Options#\n     * @type {boolean|string|number}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of every cell in this column to `checkbox`\n     *     // when unchecked, the cell's value is `false`\n     *     // when checked, the cell's value is `true`\n     *     type: 'checkbox',\n     *   },\n     *   {\n     *     // set the `type` of every cell in this column to `checkbox`\n     *     // when unchecked, the cell's value is `'No'`\n     *     // when checked, the cell's value is `'Yes'`\n     *     type: 'checkbox',\n     *     uncheckedTemplate: 'No'\n     *     checkedTemplate: 'Yes',\n     *  }\n     * ],\n     * ```\n     */\n    uncheckedTemplate: void 0,\n\n    /**\n     * The `undo` option configures the [`UndoRedo`](@/api/undoRedo.md) plugin.\n     *\n     * You can set the `undo` option to one of the following:\n     *\n     * | Setting | Description                                        |\n     * | ------- | -------------------------------------------------- |\n     * | `true`  | Enable the [`UndoRedo`](@/api/undoRedo.md) plugin  |\n     * | `false` | Disable the [`UndoRedo`](@/api/undoRedo.md) plugin |\n     *\n     * By default, the `undo` option is set to `undefined`,\n     * but the [`UndoRedo`](@/api/undoRedo.md) plugin acts as enabled.\n     * To disable the [`UndoRedo`](@/api/undoRedo.md) plugin completely,\n     * set the `undo` option to `false`.\n     *\n     * Read more:\n     * - [Undo and redo &#8594;](@/guides/accessories-and-menus/undo-redo.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default undefined\n     * @category UndoRedo\n     *\n     * @example\n     * ```js\n     * // enable the `UndoRedo` plugin\n     * undo: true,\n     * ```\n     */\n    undo: void 0,\n\n    /**\n     * @description\n     * The `validator` option sets a [cell validator](@/guides/cell-functions/cell-validator.md) for a cell.\n     *\n     * You can set the `validator` option to one of the following:\n     *\n     * | Setting              | Description                                                                      |\n     * | -------------------- | -------------------------------------------------------------------------------- |\n     * | A string             | A [cell validator alias](@/guides/cell-functions/cell-validator.md)              |\n     * | A function           | Your [custom cell validator function](@/guides/cell-functions/cell-validator.md) |\n     * | A regular expression | A regular expression used for cell validation                                    |\n     *\n     * By setting the `validator` option to a string,\n     * you can use one of the following [cell validator aliases](@/guides/cell-functions/cell-validator.md):\n     *\n     * | Alias               | Cell validator function                                                 |\n     * | ------------------- | ----------------------------------------------------------------------- |\n     * | A custom alias      | Your [custom cell validator](@/guides/cell-functions/cell-validator.md) |\n     * | `'autocomplete'`    | `AutocompleteValidator`                                                 |\n     * | `'date'`            | `DateValidator`                                                         |\n     * | `'dropdown'`        | `DropdownValidator`                                                     |\n     * | `'numeric'`         | `NumericValidator`                                                      |\n     * | `'time'`            | `TimeValidator`                                                         |\n     *\n     * To set the [`editor`](#editor), [`renderer`](#renderer), and [`validator`](#validator)\n     * options all at once, use the [`type`](#type) option.\n     *\n     * Read more:\n     * - [Cell validator &#8594;](@/guides/cell-functions/cell-validator.md)\n     * - [Cell type &#8594;](@/guides/cell-types/cell-type.md)\n     * - [Configuration options: Cascading configuration &#8594;](@/guides/getting-started/setting-options.md#cascading-configuration)\n     * - [`type`](#type)\n     *\n     * @memberof Options#\n     * @type {Function|RegExp|string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *    {\n     *      // use a built-in `numeric` cell validator\n     *      validator: 'numeric'\n     *    },\n     *    {\n     *      // validate against a regular expression\n     *      validator: /^[0-9]$/\n     *    },\n     *    {\n     *      // add a custom cell validator function\n     *      validator(value, callback) {\n     *          ...\n     *      }\n     *    },\n     * ],\n     * ```\n     */\n    validator: void 0,\n\n    /**\n     * @description\n     * The `viewportColumnRenderingOffset` option configures the number of columns\n     * to be rendered outside of the grid's viewport.\n     *\n     * You can set the `viewportColumnRenderingOffset` option to one of the following:\n     *\n     * | Setting            | Description                                             |\n     * | ------------------ | ------------------------------------------------------- |\n     * | `auto` (default)   | Use the offset calculated automatically by Handsontable |\n     * | A number           | Set the offset manually                                 |\n     *\n     * Read more:\n     * - [Performance: Define the number of pre-rendered rows and columns &#8594;](@/guides/advanced-topics/performance.md#define-the-number-of-pre-rendered-rows-and-columns)\n     *\n     * @memberof Options#\n     * @type {number|string}\n     * @default 'auto'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // render 70 columns outside of the grid's viewport\n     * viewportColumnRenderingOffset: 70,\n     * ```\n     */\n    viewportColumnRenderingOffset: 'auto',\n\n    /**\n     * @description\n     * The `viewportRowRenderingOffset` option configures the number of rows\n     * to be rendered outside of the grid's viewport.\n     *\n     * You can set the `viewportRowRenderingOffset` option to one of the following:\n     *\n     * | Setting            | Description                                             |\n     * | ------------------ | ------------------------------------------------------- |\n     * | `auto` (default)   | Use the offset calculated automatically by Handsontable |\n     * | A number           | Set the offset manually                                 |\n     *\n     * Read more:\n     * - [Performance: Define the number of pre-rendered rows and columns &#8594;](@/guides/advanced-topics/performance.md#define-the-number-of-pre-rendered-rows-and-columns)\n     * - [Column virtualization &#8594;](@/guides/columns/column-virtualization.md)\n     *\n     * @memberof Options#\n     * @type {number|string}\n     * @default 'auto'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // render 70 rows outside of the grid's viewport\n     * viewportRowRenderingOffset: 70,\n     * ```\n     */\n    viewportRowRenderingOffset: 'auto',\n\n    /**\n     * The `visibleRows` option sets the height of the [`autocomplete`](@/guides/cell-types/autocomplete-cell-type.md)\n     * and [`dropdown`](@/guides/cell-types/dropdown-cell-type.md) lists.\n     *\n     * When the number of list options exceeds the `visibleRows` number, a scrollbar appears.\n     *\n     * Read more:\n     * - [Autocomplete cell type &#8594;](@/guides/cell-types/autocomplete-cell-type.md)\n     * - [Dropdown cell type &#8594;](@/guides/cell-types/dropdown-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 10\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     type: 'autocomplete',\n     *     // set the `autocomplete` list's height to 15 options\n     *     // for every cell of this column\n     *     visibleRows: 15,\n     *   },\n     *   {\n     *     type: 'dropdown',\n     *     // set the `dropdown` list's height to 5 options\n     *     // for every cell of this column\n     *     visibleRows: 5,\n     *   }\n     * ],\n     * ```\n     */\n    visibleRows: 10,\n\n    /**\n     * The `width` option configures the width of your grid.\n     *\n     * You can set the `width` option to one of the following:\n     *\n     * | Setting                                                                    | Example                   |\n     * | -------------------------------------------------------------------------- | ------------------------- |\n     * | A number of pixels                                                         | `width: 500`              |\n     * | A string with a [CSS unit](https://www.w3schools.com/cssref/css_units.asp) | `width: '75vw'`           |\n     * | A function that returns a valid number or string                           | `width() { return 500; }` |\n     *\n     * Read more:\n     * - [Grid size &#8594;](@/guides/getting-started/grid-size.md)\n     *\n     * @memberof Options#\n     * @type {number|string|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the grid's width to 500px\n     * width: 500,\n     *\n     * // set the grid's width to 75vw\n     * width: '75vw',\n     *\n     * // set the grid's width to 500px, using a function\n     * width() {\n     *   return 500;\n     * },\n     * ```\n     */\n    width: void 0,\n\n    /**\n     * The `wordWrap` option configures whether content that exceeds a column's width is wrapped or not.\n     *\n     * You can set the `wordWrap` option to one of the following:\n     *\n     * | Setting          | Description                                             |\n     * | ---------------- | ------------------------------------------------------- |\n     * | `true` (default) | If content exceeds the column's width, wrap the content |\n     * | `false`          | Don't wrap content                                      |\n     *\n     * To style cells that don't wrap content, use the [`noWordWrapClassName`](#noWordWrapClassName) option.\n     *\n     * Read more:\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set column width for every column of the entire grid\n     * colWidths: 100,\n     *\n     * columns: [\n     *   {\n     *     // don't wrap content in this column\n     *     wordWrap: false,\n     *   },\n     *   {\n     *     // if content exceeds this column's width, wrap the content\n     *     wordWrap: true,\n     *   }\n     * ],\n     * ```\n     */\n    wordWrap: true\n    /* eslint-enable jsdoc/require-description-complete-sentence */\n\n  };\n});", "function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { extend } from \"../../../helpers/object.mjs\";\nimport { expandMetaType } from \"../utils.mjs\";\nimport metaSchemaFactory from \"../metaSchema.mjs\";\n/**\n * @returns {TableMeta} Returns an empty object. The holder for global meta object.\n */\n\nfunction createTableMetaEmptyClass() {\n  return /*#__PURE__*/_createClass(function TableMeta() {\n    _classCallCheck(this, TableMeta);\n  });\n}\n/**\n * The global meta object is a root of all default settings, which are recognizable by Handsontable.\n * Other layers are inherited from this object. Adding, removing, or changing property in that\n * object has a direct reflection to all layers such as: TableMeta, ColumnMeta, or CellMeta layers.\n *\n * +-------------+.\n * \u2502 GlobalMeta  \u2502\n * \u2502 (prototype) \u2502\n * +-------------+\\\n *       \u2502         \\\n *       \u2502          \\\n *      \\\u2502/         _\\|\n * +-------------+    +-------------+.\n * \u2502 TableMeta   \u2502    \u2502 ColumnMeta  \u2502\n * \u2502 (instance)  \u2502    \u2502 (prototype) \u2502\n * +-------------+    +-------------+.\n *                         \u2502\n *                         \u2502\n *                        \\\u2502/\n *                    +-------------+.\n *                    \u2502  CellMeta   \u2502\n *                    \u2502 (instance)  \u2502\n *                    +-------------+.\n */\n\n\nvar GlobalMeta = /*#__PURE__*/function () {\n  function GlobalMeta(hot) {\n    _classCallCheck(this, GlobalMeta);\n\n    /**\n     * An alias for the constructor. Necessary for inheritance for creating new layers.\n     *\n     * @type {TableMeta}\n     */\n    this.metaCtor = createTableMetaEmptyClass();\n    /**\n     * Main object (prototype of the internal TableMeta class), holder for all default settings.\n     *\n     * @type {object}\n     */\n\n    this.meta = this.metaCtor.prototype;\n    extend(this.meta, metaSchemaFactory());\n    this.meta.instance = hot;\n  }\n  /**\n   * Gets constructor of the global meta object. Necessary for inheritance for creating the next meta layers.\n   *\n   * @returns {Function}\n   */\n\n\n  _createClass(GlobalMeta, [{\n    key: \"getMetaConstructor\",\n    value: function getMetaConstructor() {\n      return this.metaCtor;\n    }\n    /**\n     * Gets settings object for this layer.\n     *\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getMeta\",\n    value: function getMeta() {\n      return this.meta;\n    }\n    /**\n     * Updates global settings object by merging settings with the current state.\n     *\n     * @param {object} settings An object to merge with.\n     */\n\n  }, {\n    key: \"updateMeta\",\n    value: function updateMeta(settings) {\n      extend(this.meta, settings);\n      extend(this.meta, expandMetaType(settings.type, settings));\n    }\n  }]);\n\n  return GlobalMeta;\n}();\n\nexport { GlobalMeta as default };", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { extend } from \"../../../helpers/object.mjs\";\nimport { expandMetaType } from \"../utils.mjs\";\n/**\n * The table meta object is a layer that keeps all settings of the Handsontable that was passed in\n * the constructor. That layer contains all default settings inherited from the GlobalMeta layer\n * merged with settings passed by the developer. Adding, removing, or changing property in that\n * object has no direct reflection on any other layers.\n *\n * +-------------+.\n * \u2502 GlobalMeta  \u2502\n * \u2502 (prototype) \u2502\n * +-------------+\\\n *       \u2502         \\\n *       \u2502          \\\n *      \\\u2502/         _\\|\n * +-------------+    +-------------+.\n * \u2502 TableMeta   \u2502    \u2502 ColumnMeta  \u2502\n * \u2502 (instance)  \u2502    \u2502 (prototype) \u2502\n * +-------------+    +-------------+.\n *                         \u2502\n *                         \u2502\n *                        \\\u2502/\n *                    +-------------+.\n *                    \u2502  CellMeta   \u2502\n *                    \u2502 (instance)  \u2502\n *                    +-------------+.\n */\n\nvar TableMeta = /*#__PURE__*/function () {\n  function TableMeta(globalMeta) {\n    _classCallCheck(this, TableMeta);\n\n    var MetaCtor = globalMeta.getMetaConstructor();\n    /**\n     * Main object (instance of the internal TableMeta class from GlobalMeta), holder for all settings defined in the table scope.\n     *\n     * @type {object}\n     */\n\n    this.meta = new MetaCtor();\n  }\n  /**\n   * Gets settings object for this layer.\n   *\n   * @returns {object}\n   */\n\n\n  _createClass(TableMeta, [{\n    key: \"getMeta\",\n    value: function getMeta() {\n      return this.meta;\n    }\n    /**\n     * Updates table settings object by merging settings with the current state.\n     *\n     * @param {object} settings An object to merge with.\n     */\n\n  }, {\n    key: \"updateMeta\",\n    value: function updateMeta(settings) {\n      extend(this.meta, settings);\n      extend(this.meta, expandMetaType(settings.type, settings));\n    }\n  }]);\n\n  return TableMeta;\n}();\n\nexport { TableMeta as default };", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.array.index-of.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { arrayFilter } from \"../../helpers/array.mjs\";\nimport { assert, isUnsignedNumber, isNullish } from \"./utils.mjs\";\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @class LazyFactoryMap\n *\n * The LazyFactoryMap object holds key-value pairs in the structure similar to the\n * regular Map. Once created, items can be moved around a grid depending on the operations\n * performed on that grid - adding or removing rows. The collection requires \"key\"\n * to be a zero-based index.\n *\n * It's essential to notice that the \"key\" index under which the item was created\n * is volatile. After altering the grid, the \"key\" index can change.\n *\n * Having created N items with corresponding example data where the data has 10\n * holes (`undefined` values) within (that's why internal storage index counts from 10).\n * +------+------+------+------+------+.\n * | 0/10 | 1/11 | 2/12 | 3/13 | 4/14 |  Keys (volatile zero-based index / internal storage index)\n * +------+------+------+------+------+.\n *    \u2502      \u2502      \u2502      \u2502      \u2502\n * +------+------+------+------+------+.\n * | AAA  | BBB  | CCC  | DDD  | EEE  |  Data\n * +------+------+------+------+------+.\n *\n * Map.obtain(0) // returns \"AAA\"\n * map.obtain(2) // returns \"CCC\".\n *\n * After inserting 2 new rows, keys that hold the data positioned after the place\n * where the new rows are added are upshifted by 2.\n *               \u2502\n *               \u2502 Insert 2 rows\n *              \\\u2502/\n * +------+------+------+------+------+.\n * | 0/10 | 1/11 | 2/12 | 3/13 | 4/14 |  Keys before\n * +------+------+------+------+------+.\n *\n *                / 2 new rows \\\n * +------+------+------+------+------+------+------+.\n * | 0/10 | 1/11 | 2/15 | 3/16 | 4/12 | 5/13 | 6/14 |  Keys after\n * +------+------+------+------+------+------+------+.\n *    \u2502       \u2502      \u2502      \u2502      \u2502      \u2502     \u2502\n *    \u2502       \u2502      \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2510    \u2502\n *    \u2502       \u2502             \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u253C\u2500\u2500\u2500\u2500\u253C\u2510\n *    \u2502       \u2502      \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518      \u2502\u2502    \u2502\u2502\n *    \u2502       \u2502      \u2502      \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2502    \u2502\u2502\n *    \u2502       \u2502      \u2502      \u2502      \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2518\u2502\n *    \u2502       \u2502      \u2502      \u2502      \u2502       \u2502     \u2502\n * +------+------+------+------+------+------+------+.\n * | AAA  | BBB  | CCC  | DDD  | EEE  | FFF  | GGG  |  Data\n * +------+------+------+------+------+------+------+\n *\n * Now at index 2 and 3 we have access to new items.\n *\n * map.obtain(2) // returns new value \"FFF\" for newly created row.\n * map.obtain(4) // index shifted by 2 has access to the old \"CCC\" value, as before inserting.\n *\n * after removing 4 rows, keys that hold the data positioned after the place where the\n * rows are removed are downshifted by 4.\n *        \u2502\n *        \u2502 Remove 4 rows\n *        \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n *       \\\u2502/                          \u2502\n * +------+------+------+------+------+------+------+\n * | 0/10 | 1/11 | 2/15 | 3/16 | 4/12 | 5/13 | 6/14 |  Keys after\n * +------+------+------+------+------+------+------+\n *    \u2502       \u2502      \u2502      \u2502      \u2502      \u2502     \u2502\n *    \u2502       \u2502      \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2510    \u2502\n *    \u2502       \u2502             \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u253C\u2500\u2500\u2500\u2500\u253C\u2510\n *    \u2502       \u2502      \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518      \u2502\u2502    \u2502\u2502\n *    \u2502       \u2502      \u2502      \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2502    \u2502\u2502\n *    \u2502       \u2502      \u2502      \u2502      \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2518\u2502\n *    \u2502       \u2502      \u2502      \u2502      \u2502       \u2502     \u2502\n * +------+------+------+------+------+------+------+\n * | AAA  | BBB  | CCC  | DDD  | EEE  | FFF  | GGG  |  Data\n * +------+------+------+------+------+------+------+\n *\n * +------+------+------+\n * | 0/10 | 1/13 | 2/14 |  Keys after\n * +------+------+------+\n *    \u2502       \u2502      \u2502\n *    \u2502       \u2502      \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n *    \u2502       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510       \u2502\n *    \u2502                    \u2502       \u2502\n *    \u2502                    \u2502       \u2502\n *    \u2502                    \u2502       \u2502\n *    \u2502                    \u2502       \u2502\n * +------+------+------+------+------+------+------+\n * | AAA  | BBB  | CCC  | DDD  | EEE  | FFF  | GGG  |  Data\n * +------+------+------+------+------+------+------+\n *           /\u2502\\   /\u2502\\                   /\u2502\\   /\u2502\\\n *            \u2514\u2500\u2500\u252C\u2500\u2500\u2518                     \u2514\u2500\u2500\u252C\u2500\u2500\u2518\n *           This data is marked as \"hole\" which\n *           means that can be replaced by new item\n *           when that will be created.\n *\n * map.obtain(2) // returns the value (\"EEE\") as it should. Access to the value is\n *               // changed (the key was downshifted). However, the internal index has not changed,\n *               // which means that the data does not need to be changed (spliced) too.\n *\n * After previous remove operation which creates some \"holes\" obtaining new\n * items replaces that \"holes\" as follows:\n *\n * // Obtains new item\n * map.obtain(90) // Returns \"NEW\" value\n *\n * +------+------+------+...+------+\n * | 0/10 | 1/13 | 2/14 |   | 90/0 |  Keys after\n * +------+------+------+...+------+\n *    \u2502       \u2502      \u2502          \u2502\n *    \u2502       \u2502      \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n *    \u2502       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2510      \u2502\n *    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510              \u2502     \u2502      \u2502\n *               \u2502              \u2502     \u2502      \u2502\n *    \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518     \u2502      \u2502\n *    \u2502          \u2502                    \u2502      \u2502\n * +------+...+------+------+------+------+------+-----+\n * | NEW  |   | AAA  | BBB  | CCC  | DDD  | EEE  | FFF |  Data\n * +------+...+------+------+------+------+------+-----+\n *   /\u2502\\\n *    \u2502\n * The first \"hole\" (at index 0) item is permanently removed and replaced by a new item.\n * The hole index is taken from the hole collection which act as FIFO (First In First Out).\n */\n\n/* eslint-enable jsdoc/require-description-complete-sentence */\n\nvar LazyFactoryMap = /*#__PURE__*/function (_Symbol$iterator) {\n  function LazyFactoryMap(valueFactory) {\n    _classCallCheck(this, LazyFactoryMap);\n\n    this.valueFactory = valueFactory;\n    /**\n     * An array which contains data.\n     *\n     * @type {Array}\n     */\n\n    this.data = [];\n    /**\n     * An array of indexes where the key of the array is mapped to the value which points to the\n     * specific position of the data array.\n     *\n     * @type {number[]}\n     */\n\n    this.index = [];\n    /**\n     * The collection of indexes that points to the data items which can be replaced by obtaining new\n     * ones. The \"holes\" are an intended effect of deleting entries.\n     *\n     * The idea of \"holes\" generally allows us to not modify the \"data\" structure while removing\n     * items from the collection.\n     *\n     * @type {Set<number>}\n     */\n\n    this.holes = new Set();\n  }\n  /**\n   * Gets or if data not exist creates and returns new data.\n   *\n   * @param {number} key The item key as zero-based index.\n   * @returns {*}\n   */\n\n\n  _createClass(LazyFactoryMap, [{\n    key: \"obtain\",\n    value: function obtain(key) {\n      assert(function () {\n        return isUnsignedNumber(key);\n      }, 'Expecting an unsigned number.');\n\n      var dataIndex = this._getStorageIndexByKey(key);\n\n      var result;\n\n      if (dataIndex >= 0) {\n        result = this.data[dataIndex];\n\n        if (result === void 0) {\n          result = this.valueFactory(key);\n          this.data[dataIndex] = result;\n        }\n      } else {\n        result = this.valueFactory(key);\n\n        if (this.holes.size > 0) {\n          var reuseIndex = this.holes.values().next().value; // Gets first item from the collection\n\n          this.holes.delete(reuseIndex);\n          this.data[reuseIndex] = result;\n          this.index[key] = reuseIndex;\n        } else {\n          this.data.push(result);\n          this.index[key] = this.data.length - 1;\n        }\n      }\n\n      return result;\n    }\n    /**\n     * Inserts an empty data to the map. This method creates an empty space for obtaining\n     * new data.\n     *\n     * @param {number} key The key as volatile zero-based index at which to begin inserting space for new data.\n     * @param {number} [amount=1] Ammount of data to insert.\n     */\n\n  }, {\n    key: \"insert\",\n    value: function insert(key) {\n      var _this$index;\n\n      var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      assert(function () {\n        return isUnsignedNumber(key) || isNullish(key);\n      }, 'Expecting an unsigned number or null/undefined argument.');\n      var newIndexes = [];\n      var dataLength = this.data.length;\n\n      for (var i = 0; i < amount; i++) {\n        newIndexes.push(dataLength + i);\n        this.data.push(void 0);\n      }\n\n      (_this$index = this.index).splice.apply(_this$index, [isNullish(key) ? this.index.length : key, 0].concat(newIndexes));\n    }\n    /**\n     * Removes (soft remove) data from \"index\" and according to the amount of data.\n     *\n     * @param {number} key The key as volatile zero-based index at which to begin removing the data.\n     * @param {number} [amount=1] Ammount data to remove.\n     */\n\n  }, {\n    key: \"remove\",\n    value: function remove(key) {\n      var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      assert(function () {\n        return isUnsignedNumber(key) || isNullish(key);\n      }, 'Expecting an unsigned number or null/undefined argument.');\n      var removed = this.index.splice(isNullish(key) ? this.index.length - amount : key, amount);\n\n      for (var i = 0; i < removed.length; i++) {\n        var removedIndex = removed[i];\n\n        if (typeof removedIndex === 'number') {\n          this.holes.add(removedIndex);\n        }\n      }\n    }\n    /**\n     * Returns the size of the data which this map holds.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"size\",\n    value: function size() {\n      return this.data.length - this.holes.size;\n    }\n    /**\n     * Returns a new Iterator object that contains the values for each item in the LazyMap object.\n     *\n     * @returns {Iterator}\n     */\n\n  }, {\n    key: \"values\",\n    value: function values() {\n      var _this = this;\n\n      return arrayFilter(this.data, function (_, index) {\n        return !_this.holes.has(index);\n      })[Symbol.iterator]();\n    }\n    /**\n     * Returns a new Iterator object that contains an array of `[index, value]` for each item in the LazyMap object.\n     *\n     * @returns {Iterator}\n     */\n\n  }, {\n    key: \"entries\",\n    value: function entries() {\n      var validEntries = [];\n\n      for (var i = 0; i < this.data.length; i++) {\n        var keyIndex = this._getKeyByStorageIndex(i);\n\n        if (keyIndex !== -1) {\n          validEntries.push([keyIndex, this.data[i]]);\n        }\n      }\n\n      var dataIndex = 0;\n      return {\n        next: function next() {\n          if (dataIndex < validEntries.length) {\n            var value = validEntries[dataIndex];\n            dataIndex += 1;\n            return {\n              value: value,\n              done: false\n            };\n          }\n\n          return {\n            done: true\n          };\n        }\n      };\n    }\n    /**\n     * Clears the map.\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.data = [];\n      this.index = [];\n      this.holes.clear();\n    }\n    /**\n     * Gets storage index calculated from the key associated with the specified value.\n     *\n     * @param {number} key Volatile zero-based index.\n     * @returns {number} Returns index 0-N or -1 if no storage index found.\n     */\n\n  }, {\n    key: \"_getStorageIndexByKey\",\n    value: function _getStorageIndexByKey(key) {\n      return this.index.length > key ? this.index[key] : -1;\n    }\n    /**\n     * Gets the key associated with the specified value calculated from storage index.\n     *\n     * @param {number} dataIndex Zero-based storage index.\n     * @returns {number} Returns index 0-N or -1 if no key found.\n     */\n\n  }, {\n    key: \"_getKeyByStorageIndex\",\n    value: function _getKeyByStorageIndex(dataIndex) {\n      return this.index.indexOf(dataIndex);\n    }\n    /**\n     * Makes this object iterable.\n     *\n     * @returns {Iterator}\n     */\n\n  }, {\n    key: _Symbol$iterator,\n    value: function value() {\n      return this.entries();\n    }\n  }]);\n\n  return LazyFactoryMap;\n}(Symbol.iterator);\n\nexport { LazyFactoryMap as default };", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { extend } from \"../../../helpers/object.mjs\";\nimport { columnFactory, expandMetaType } from \"../utils.mjs\";\nimport LazyFactoryMap from \"../lazyFactoryMap.mjs\";\n/**\n * List of props which have to be cleared in the column meta-layer. That props have a\n * different meaning when using in column meta.\n *\n * @type {string[]}\n */\n\nvar COLUMNS_PROPS_CONFLICTS = ['data', 'width'];\n/**\n * The column meta object is a root of all settings defined in the column property of the Handsontable\n * settings. Each column in the Handsontable is associated with a unique meta object which is managed by\n * this layer. Adding, removing, or changing property in that object has a direct reflection only for\n * the CellMeta layer. The reflection will be visible only if the property doesn't exist in the lower\n * layers (prototype lookup).\n *\n * +-------------+.\n * \u2502 GlobalMeta  \u2502\n * \u2502 (prototype) \u2502\n * +-------------+\\\n *       \u2502         \\\n *       \u2502          \\\n *      \\\u2502/         _\\|\n * +-------------+    +-------------+.\n * \u2502 TableMeta   \u2502    \u2502 ColumnMeta  \u2502\n * \u2502 (instance)  \u2502    \u2502 (prototype) \u2502\n * +-------------+    +-------------+.\n *                         \u2502\n *                         \u2502\n *                        \\\u2502/\n *                    +-------------+.\n *                    \u2502  CellMeta   \u2502\n *                    \u2502 (instance)  \u2502\n *                    +-------------+.\n */\n\nvar ColumnMeta = /*#__PURE__*/function () {\n  function ColumnMeta(globalMeta) {\n    var _this = this;\n\n    _classCallCheck(this, ColumnMeta);\n\n    /**\n     * Reference to the GlobalMeta layer. While creating new column meta objects, all new objects\n     * inherit properties from the GlobalMeta layer.\n     *\n     * @type {GlobalMeta}\n     */\n    this.globalMeta = globalMeta;\n    /**\n     * The LazyFactoryMap structure, holder for column meta objects where each column meta is\n     * stored under the physical column index.\n     *\n     * @type {LazyFactoryMap}\n     */\n\n    this.metas = new LazyFactoryMap(function () {\n      return _this._createMeta();\n    });\n  }\n  /**\n   * Updates column meta object by merging settings with the current state.\n   *\n   * @param {number} physicalColumn The physical column index which points what column meta object is updated.\n   * @param {object} settings An object to merge with.\n   */\n\n\n  _createClass(ColumnMeta, [{\n    key: \"updateMeta\",\n    value: function updateMeta(physicalColumn, settings) {\n      var meta = this.getMeta(physicalColumn);\n      extend(meta, settings);\n      extend(meta, expandMetaType(settings.type, meta));\n    }\n    /**\n     * Creates one or more columns at specific position.\n     *\n     * @param {number} physicalColumn The physical column index which points from what position the column is added.\n     * @param {number} amount An amount of columns to add.\n     */\n\n  }, {\n    key: \"createColumn\",\n    value: function createColumn(physicalColumn, amount) {\n      this.metas.insert(physicalColumn, amount);\n    }\n    /**\n     * Removes one or more columns from the collection.\n     *\n     * @param {number} physicalColumn The physical column index which points from what position the column is removed.\n     * @param {number} amount An amount columns to remove.\n     */\n\n  }, {\n    key: \"removeColumn\",\n    value: function removeColumn(physicalColumn, amount) {\n      this.metas.remove(physicalColumn, amount);\n    }\n    /**\n     * Gets settings object for this layer.\n     *\n     * @param {number} physicalColumn The physical column index.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getMeta\",\n    value: function getMeta(physicalColumn) {\n      return this.metas.obtain(physicalColumn);\n    }\n    /**\n     * Gets constructor of the column meta object. Necessary for inheritance - creating the next meta layers.\n     *\n     * @param {number} physicalColumn The physical column index.\n     * @returns {Function}\n     */\n\n  }, {\n    key: \"getMetaConstructor\",\n    value: function getMetaConstructor(physicalColumn) {\n      return this.metas.obtain(physicalColumn).constructor;\n    }\n    /**\n     * Clears all saved column meta objects.\n     */\n\n  }, {\n    key: \"clearCache\",\n    value: function clearCache() {\n      this.metas.clear();\n    }\n    /**\n     * Creates and returns new column meta object with properties inherited from the global meta layer.\n     *\n     * @private\n     * @returns {object}\n     */\n\n  }, {\n    key: \"_createMeta\",\n    value: function _createMeta() {\n      return columnFactory(this.globalMeta.getMetaConstructor(), COLUMNS_PROPS_CONFLICTS).prototype;\n    }\n  }]);\n\n  return ColumnMeta;\n}();\n\nexport { ColumnMeta as default };", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { extend } from \"../../../helpers/object.mjs\";\nimport { expandMetaType, assert, isUnsignedNumber } from \"../utils.mjs\";\nimport LazyFactoryMap from \"../lazyFactoryMap.mjs\";\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @class CellMeta\n *\n * The cell meta object is a root of all settings defined for the specific cell rendered by the\n * Handsontable. Each cell meta inherits settings from higher layers. When a property doesn't\n * exist in that layer, it is looked up through a prototype to the highest layer. Starting\n * from CellMeta -> ColumnMeta and ending to GlobalMeta, which stores default settings. Adding,\n * removing, or changing property in that object has no direct reflection on any other layers.\n *\n * +-------------+\n * \u2502 GlobalMeta  \u2502\n * \u2502 (prototype) \u2502\n * +-------------+\\\n *       \u2502         \\\n *       \u2502          \\\n *      \\\u2502/         _\\|\n * +-------------+    +-------------+\n * \u2502 TableMeta   \u2502    \u2502 ColumnMeta  \u2502\n * \u2502 (instance)  \u2502    \u2502 (prototype) \u2502\n * +-------------+    +-------------+\n *                         \u2502\n *                         \u2502\n *                        \\\u2502/\n *                    +-------------+\n *                    \u2502  CellMeta   \u2502\n *                    \u2502 (instance)  \u2502\n *                    +-------------+\n */\n\n/* eslint-enable jsdoc/require-description-complete-sentence */\n\nvar CellMeta = /*#__PURE__*/function () {\n  function CellMeta(columnMeta) {\n    var _this = this;\n\n    _classCallCheck(this, CellMeta);\n\n    /**\n     * Reference to the ColumnMeta layer. While creating new cell meta objects, all new objects\n     * inherit properties from the ColumnMeta layer.\n     *\n     * @type {ColumnMeta}\n     */\n    this.columnMeta = columnMeta;\n    /**\n     * Holder for cell meta objects, organized as a grid of LazyFactoryMap of LazyFactoryMaps.\n     * The access to the cell meta object is done through access to the row defined by the physical\n     * row index and then by accessing the second LazyFactory Map under the physical column index.\n     *\n     * @type {LazyFactoryMap<number, LazyFactoryMap<number, object>>}\n     */\n\n    this.metas = new LazyFactoryMap(function () {\n      return _this._createRow();\n    });\n  }\n  /**\n   * Updates cell meta object by merging settings with the current state.\n   *\n   * @param {number} physicalRow The physical row index which points what cell meta object is updated.\n   * @param {number} physicalColumn The physical column index which points what cell meta object is updated.\n   * @param {object} settings An object to merge with.\n   */\n\n\n  _createClass(CellMeta, [{\n    key: \"updateMeta\",\n    value: function updateMeta(physicalRow, physicalColumn, settings) {\n      var meta = this.getMeta(physicalRow, physicalColumn);\n      extend(meta, settings);\n      extend(meta, expandMetaType(settings.type, meta));\n    }\n    /**\n     * Creates one or more rows at specific position.\n     *\n     * @param {number} physicalRow The physical row index which points from what position the row is added.\n     * @param {number} amount An amount of rows to add.\n     */\n\n  }, {\n    key: \"createRow\",\n    value: function createRow(physicalRow, amount) {\n      this.metas.insert(physicalRow, amount);\n    }\n    /**\n     * Creates one or more columns at specific position.\n     *\n     * @param {number} physicalColumn The physical column index which points from what position the column is added.\n     * @param {number} amount An amount of columns to add.\n     */\n\n  }, {\n    key: \"createColumn\",\n    value: function createColumn(physicalColumn, amount) {\n      for (var i = 0; i < this.metas.size(); i++) {\n        this.metas.obtain(i).insert(physicalColumn, amount);\n      }\n    }\n    /**\n     * Removes one or more rows from the collection.\n     *\n     * @param {number} physicalRow The physical row index which points from what position the row is removed.\n     * @param {number} amount An amount of rows to remove.\n     */\n\n  }, {\n    key: \"removeRow\",\n    value: function removeRow(physicalRow, amount) {\n      this.metas.remove(physicalRow, amount);\n    }\n    /**\n     * Removes one or more columns from the collection.\n     *\n     * @param {number} physicalColumn The physical column index which points from what position the column is removed.\n     * @param {number} amount An amount of columns to remove.\n     */\n\n  }, {\n    key: \"removeColumn\",\n    value: function removeColumn(physicalColumn, amount) {\n      for (var i = 0; i < this.metas.size(); i++) {\n        this.metas.obtain(i).remove(physicalColumn, amount);\n      }\n    }\n    /**\n     * Gets settings object for this layer.\n     *\n     * @param {number} physicalRow The physical row index.\n     * @param {number} physicalColumn The physical column index.\n     * @param {string} [key] If the key exists its value will be returned, otherwise the whole cell meta object.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getMeta\",\n    value: function getMeta(physicalRow, physicalColumn, key) {\n      var cellMeta = this.metas.obtain(physicalRow).obtain(physicalColumn);\n\n      if (key === void 0) {\n        return cellMeta;\n      }\n\n      return cellMeta[key];\n    }\n    /**\n     * Sets settings object for this layer defined by \"key\" property.\n     *\n     * @param {number} physicalRow The physical row index.\n     * @param {number} physicalColumn The physical column index.\n     * @param {string} key The property name to set.\n     * @param {*} value Value to save.\n     */\n\n  }, {\n    key: \"setMeta\",\n    value: function setMeta(physicalRow, physicalColumn, key, value) {\n      var cellMeta = this.metas.obtain(physicalRow).obtain(physicalColumn);\n      cellMeta[key] = value;\n    }\n    /**\n     * Removes a property defined by the \"key\" argument from the cell meta object.\n     *\n     * @param {number} physicalRow The physical row index.\n     * @param {number} physicalColumn The physical column index.\n     * @param {string} key The property name to remove.\n     */\n\n  }, {\n    key: \"removeMeta\",\n    value: function removeMeta(physicalRow, physicalColumn, key) {\n      var cellMeta = this.metas.obtain(physicalRow).obtain(physicalColumn);\n      delete cellMeta[key];\n    }\n    /**\n     * Returns all cell meta objects that were created during the Handsontable operation. As cell meta\n     * objects are created lazy, the length of the returned collection depends on how and when the\n     * table has asked for access to that meta objects.\n     *\n     * @returns {object[]}\n     */\n\n  }, {\n    key: \"getMetas\",\n    value: function getMetas() {\n      var metas = [];\n      var rows = Array.from(this.metas.values());\n\n      for (var row = 0; row < rows.length; row++) {\n        metas.push.apply(metas, _toConsumableArray(rows[row].values()));\n      }\n\n      return metas;\n    }\n    /**\n     * Returns all cell meta objects that were created during the Handsontable operation but for\n     * specyfic row index.\n     *\n     * @param {number} physicalRow The physical row index.\n     * @returns {object[]}\n     */\n\n  }, {\n    key: \"getMetasAtRow\",\n    value: function getMetasAtRow(physicalRow) {\n      assert(function () {\n        return isUnsignedNumber(physicalRow);\n      }, 'Expecting an unsigned number.');\n      var rowsMeta = new Map(this.metas);\n      return rowsMeta.has(physicalRow) ? Array.from(rowsMeta.get(physicalRow).values()) : [];\n    }\n    /**\n     * Clears all saved cell meta objects.\n     */\n\n  }, {\n    key: \"clearCache\",\n    value: function clearCache() {\n      this.metas.clear();\n    }\n    /**\n     * Creates and returns new structure for cell meta objects stored in columnar axis.\n     *\n     * @private\n     * @returns {object}\n     */\n\n  }, {\n    key: \"_createRow\",\n    value: function _createRow() {\n      var _this2 = this;\n\n      return new LazyFactoryMap(function (physicalColumn) {\n        return _this2._createMeta(physicalColumn);\n      });\n    }\n    /**\n     * Creates and returns new cell meta object with properties inherited from the column meta layer.\n     *\n     * @private\n     * @param {number} physicalColumn The physical column index.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"_createMeta\",\n    value: function _createMeta(physicalColumn) {\n      var ColumnMeta = this.columnMeta.getMetaConstructor(physicalColumn);\n      return new ColumnMeta();\n    }\n  }]);\n\n  return CellMeta;\n}();\n\nexport { CellMeta as default };", "import \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport GlobalMeta from \"./metaLayers/globalMeta.mjs\";\nimport TableMeta from \"./metaLayers/tableMeta.mjs\";\nimport ColumnMeta from \"./metaLayers/columnMeta.mjs\";\nimport CellMeta from \"./metaLayers/cellMeta.mjs\";\nimport localHooks from \"../../mixins/localHooks.mjs\";\nimport { mixin } from \"../../helpers/object.mjs\";\n/**\n * With the Meta Manager class, it can be possible to manage with meta objects for different layers in\n * one place. All coordinates used to fetch, updating, removing, or creating rows or columns have to\n * be passed as physical values.\n *\n * The diagram of the meta layers:\n * +-------------+.\n * \u2502 GlobalMeta  \u2502\n * \u2502 (prototype) \u2502\n * +-------------+\\\n *       \u2502         \\\n *       \u2502          \\\n *      \\\u2502/         _\\|\n * +-------------+    +-------------+.\n * \u2502 TableMeta   \u2502    \u2502 ColumnMeta  \u2502\n * \u2502 (instance)  \u2502    \u2502 (prototype) \u2502\n * +-------------+    +-------------+.\n *                         \u2502\n *                         \u2502\n *                        \\\u2502/\n *                    +-------------+.\n *                    \u2502  CellMeta   \u2502\n *                    \u2502 (instance)  \u2502\n *                    +-------------+.\n *\n * A more detailed description of the specific layers can be found in the \"metaLayers/\" modules description.\n */\n\nvar MetaManager = /*#__PURE__*/function () {\n  function MetaManager(hot) {\n    var _this = this;\n\n    var customSettings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var metaMods = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n    _classCallCheck(this, MetaManager);\n\n    /**\n     * @type {Handsontable}\n     */\n    this.hot = hot;\n    /**\n     * @type {GlobalMeta}\n     */\n\n    this.globalMeta = new GlobalMeta(hot);\n    this.globalMeta.updateMeta(customSettings);\n    /**\n     * @type {TableMeta}\n     */\n\n    this.tableMeta = new TableMeta(this.globalMeta);\n    /**\n     * @type {ColumnMeta}\n     */\n\n    this.columnMeta = new ColumnMeta(this.globalMeta);\n    /**\n     * @type {CellMeta}\n     */\n\n    this.cellMeta = new CellMeta(this.columnMeta);\n    metaMods.forEach(function (ModifierClass) {\n      return new ModifierClass(_this);\n    });\n  }\n  /**\n   * Gets the global meta object that is a root of all default settings, which are recognizable by Handsontable.\n   * Other layers inherites all properties from this. Adding, removing, or changing property in that\n   * object has a direct reflection to all layers.\n   *\n   * @returns {object}\n   */\n\n\n  _createClass(MetaManager, [{\n    key: \"getGlobalMeta\",\n    value: function getGlobalMeta() {\n      return this.globalMeta.getMeta();\n    }\n    /**\n     * Updates global settings object by merging settings with the current state.\n     *\n     * @param {object} settings An object to merge with.\n     */\n\n  }, {\n    key: \"updateGlobalMeta\",\n    value: function updateGlobalMeta(settings) {\n      this.globalMeta.updateMeta(settings);\n    }\n    /**\n     * Gets settings object that was passed in the Handsontable constructor. That layer contains all\n     * default settings inherited from the GlobalMeta layer merged with settings passed by the developer.\n     * Adding, removing, or changing property in that object has no direct reflection on any other layers.\n     *\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getTableMeta\",\n    value: function getTableMeta() {\n      return this.tableMeta.getMeta();\n    }\n    /**\n     * Updates table settings object by merging settings with the current state.\n     *\n     * @param {object} settings An object to merge with.\n     */\n\n  }, {\n    key: \"updateTableMeta\",\n    value: function updateTableMeta(settings) {\n      this.tableMeta.updateMeta(settings);\n    }\n    /**\n     * Gets column meta object that is a root of all settings defined in the column property of the Handsontable\n     * settings. Each column in the Handsontable is associated with a unique meta object which identified by\n     * the physical column index. Adding, removing, or changing property in that object has a direct reflection\n     * only for the CellMeta layer. The reflection will be visible only if the property doesn't exist in the lower\n     * layers (prototype lookup).\n     *\n     * @param {number} physicalColumn The physical column index.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getColumnMeta\",\n    value: function getColumnMeta(physicalColumn) {\n      return this.columnMeta.getMeta(physicalColumn);\n    }\n    /**\n     * Updates column meta object by merging settings with the current state.\n     *\n     * @param {number} physicalColumn The physical column index which points what column meta object is updated.\n     * @param {object} settings An object to merge with.\n     */\n\n  }, {\n    key: \"updateColumnMeta\",\n    value: function updateColumnMeta(physicalColumn, settings) {\n      this.columnMeta.updateMeta(physicalColumn, settings);\n    }\n    /**\n     * Gets the cell meta object that is a root of all settings defined for the specific cell rendered by\n     * the Handsontable. Each cell meta inherits settings from higher layers. When a property doesn't\n     * exist in that layer, it is looked up through a prototype to the highest layer. Starting\n     * from CellMeta -> ColumnMeta and ending to GlobalMeta, which stores default settings. Adding,\n     * removing, or changing property in that object has no direct reflection on any other layers.\n     *\n     * @param {number} physicalRow The physical row index.\n     * @param {number} physicalColumn The physical column index.\n     * @param {object} options Additional options that are used to extend the cell meta object.\n     * @param {number} options.visualRow The visual row index of the currently requested cell meta object.\n     * @param {number} options.visualColumn The visual column index of the currently requested cell meta object.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getCellMeta\",\n    value: function getCellMeta(physicalRow, physicalColumn, _ref) {\n      var visualRow = _ref.visualRow,\n          visualColumn = _ref.visualColumn;\n      var cellMeta = this.cellMeta.getMeta(physicalRow, physicalColumn);\n      cellMeta.visualRow = visualRow;\n      cellMeta.visualCol = visualColumn;\n      cellMeta.row = physicalRow;\n      cellMeta.col = physicalColumn;\n      this.runLocalHooks('afterGetCellMeta', cellMeta);\n      return cellMeta;\n    }\n    /**\n     * Gets a value (defined by the `key` property) from the cell meta object.\n     *\n     * @param {number} physicalRow The physical row index.\n     * @param {number} physicalColumn The physical column index.\n     * @param {string} key Defines the value that will be returned from the cell meta object.\n     * @returns {*}\n     */\n\n  }, {\n    key: \"getCellMetaKeyValue\",\n    value: function getCellMetaKeyValue(physicalRow, physicalColumn, key) {\n      if (typeof key !== 'string') {\n        throw new Error('The passed cell meta object key is not a string');\n      }\n\n      return this.cellMeta.getMeta(physicalRow, physicalColumn, key);\n    }\n    /**\n     * Sets settings object for cell meta object defined by \"key\" property.\n     *\n     * @param {number} physicalRow The physical row index.\n     * @param {number} physicalColumn The physical column index.\n     * @param {string} key The property name to set.\n     * @param {*} value Value to save.\n     */\n\n  }, {\n    key: \"setCellMeta\",\n    value: function setCellMeta(physicalRow, physicalColumn, key, value) {\n      this.cellMeta.setMeta(physicalRow, physicalColumn, key, value);\n    }\n    /**\n     * Updates cell meta object by merging settings with the current state.\n     *\n     * @param {number} physicalRow The physical row index which points what cell meta object is updated.\n     * @param {number} physicalColumn The physical column index which points what cell meta object is updated.\n     * @param {object} settings An object to merge with.\n     */\n\n  }, {\n    key: \"updateCellMeta\",\n    value: function updateCellMeta(physicalRow, physicalColumn, settings) {\n      this.cellMeta.updateMeta(physicalRow, physicalColumn, settings);\n    }\n    /**\n     * Removes a property defined by the \"key\" argument from the cell meta object.\n     *\n     * @param {number} physicalRow The physical row index.\n     * @param {number} physicalColumn The physical column index.\n     * @param {string} key The property name to remove.\n     */\n\n  }, {\n    key: \"removeCellMeta\",\n    value: function removeCellMeta(physicalRow, physicalColumn, key) {\n      this.cellMeta.removeMeta(physicalRow, physicalColumn, key);\n    }\n    /**\n     * Returns all cell meta objects that were created during the Handsontable operation. As cell meta\n     * objects are created lazy, the length of the returned collection depends on how and when the\n     * table has asked for access to that meta objects.\n     *\n     * @returns {object[]}\n     */\n\n  }, {\n    key: \"getCellsMeta\",\n    value: function getCellsMeta() {\n      return this.cellMeta.getMetas();\n    }\n    /**\n     * Returns all cell meta objects that were created during the Handsontable operation but for\n     * specyfic row index.\n     *\n     * @param {number} physicalRow The physical row index.\n     * @returns {object[]}\n     */\n\n  }, {\n    key: \"getCellsMetaAtRow\",\n    value: function getCellsMetaAtRow(physicalRow) {\n      return this.cellMeta.getMetasAtRow(physicalRow);\n    }\n    /**\n     * Creates one or more rows at specific position.\n     *\n     * @param {number} physicalRow The physical row index which points from what position the row is added.\n     * @param {number} [amount=1] An amount of rows to add.\n     */\n\n  }, {\n    key: \"createRow\",\n    value: function createRow(physicalRow) {\n      var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      this.cellMeta.createRow(physicalRow, amount);\n    }\n    /**\n     * Removes one or more rows from the collection.\n     *\n     * @param {number} physicalRow The physical row index which points from what position the row is removed.\n     * @param {number} [amount=1] An amount rows to remove.\n     */\n\n  }, {\n    key: \"removeRow\",\n    value: function removeRow(physicalRow) {\n      var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      this.cellMeta.removeRow(physicalRow, amount);\n    }\n    /**\n     * Creates one or more columns at specific position.\n     *\n     * @param {number} physicalColumn The physical column index which points from what position the column is added.\n     * @param {number} [amount=1] An amount of columns to add.\n     */\n\n  }, {\n    key: \"createColumn\",\n    value: function createColumn(physicalColumn) {\n      var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      this.cellMeta.createColumn(physicalColumn, amount);\n      this.columnMeta.createColumn(physicalColumn, amount);\n    }\n    /**\n     * Removes one or more columns from the collection.\n     *\n     * @param {number} physicalColumn The physical column index which points from what position the column is removed.\n     * @param {number} [amount=1] An amount of columns to remove.\n     */\n\n  }, {\n    key: \"removeColumn\",\n    value: function removeColumn(physicalColumn) {\n      var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      this.cellMeta.removeColumn(physicalColumn, amount);\n      this.columnMeta.removeColumn(physicalColumn, amount);\n    }\n    /**\n     * Clears all saved cell meta objects. It keeps column meta, table meta, and global meta intact.\n     */\n\n  }, {\n    key: \"clearCellsCache\",\n    value: function clearCellsCache() {\n      this.cellMeta.clearCache();\n    }\n    /**\n     * Clears all saved cell and columns meta objects.\n     */\n\n  }, {\n    key: \"clearCache\",\n    value: function clearCache() {\n      this.cellMeta.clearCache();\n      this.columnMeta.clearCache();\n    }\n  }]);\n\n  return MetaManager;\n}();\n\nexport { MetaManager as default };\nmixin(MetaManager, localHooks);", "import \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport { toUpperCaseFirst } from \"../helpers/string.mjs\";\nimport { isFunction } from \"../helpers/function.mjs\";\nimport DataMap from \"./dataMap.mjs\";\nimport { deepClone } from \"../helpers/object.mjs\";\n/**\n * Loads new data to Handsontable.\n *\n * @private\n * @param {Array} data Array of arrays or array of objects containing data.\n * @param {Function} setDataMapFunction Function that updates the datamap instance.\n * @param {Function} callbackFunction Function that takes care of updating Handsontable to the new dataset. Called\n * right before the `after-` hooks.\n * @param {object} config The configuration object containing all the needed dependency references and information.\n * @param {Handsontable.Core} config.hotInstance The Handsontable instance.\n * @param {DataMap} config.dataMap The current `dataMap` instance.\n * @param {DataSource} config.dataSource The current `dataSource` instance.\n * @param {string} config.internalSource The immediate internal source of the `replaceData` call.\n * @param {string} config.source The source of the call.\n * @param {boolean} config.firstRun `true` if it's a first call in the Handsontable lifecycle, `false` otherwise.\n * @fires Hooks#beforeLoadData\n * @fires Hooks#beforeUpdateData\n * @fires Hooks#afterLoadData\n * @fires Hooks#afterUpdateData\n * @fires Hooks#afterChange\n */\n\nfunction replaceData(data, setDataMapFunction, callbackFunction, config) {\n  var hotInstance = config.hotInstance,\n      dataMap = config.dataMap,\n      dataSource = config.dataSource,\n      internalSource = config.internalSource,\n      source = config.source,\n      firstRun = config.firstRun;\n  var capitalizedInternalSource = toUpperCaseFirst(internalSource);\n  var tableMeta = hotInstance.getSettings();\n\n  if (Array.isArray(tableMeta.dataSchema)) {\n    hotInstance.dataType = 'array';\n  } else if (isFunction(tableMeta.dataSchema)) {\n    hotInstance.dataType = 'function';\n  } else {\n    hotInstance.dataType = 'object';\n  }\n\n  if (dataMap) {\n    dataMap.destroy();\n  }\n\n  data = hotInstance.runHooks(\"before\".concat(capitalizedInternalSource), data, firstRun, source); // TODO: deprecated, will be eventually removed, leaving only the `beforeUpdateData` hook.\n  //  Triggers an additional `afterLoadData` hook for the `updateSettings` calls for backward compatibility.\n\n  if (internalSource !== 'loadData' && source === 'updateSettings') {\n    data = hotInstance.runHooks('beforeLoadData', data, firstRun, source);\n  }\n\n  var newDataMap = new DataMap(hotInstance, data, tableMeta); // We need to apply the new dataMap immediately, because of some asynchronous logic in the\n  // `autoRowSize`/`autoColumnSize` plugins.\n\n  setDataMapFunction(newDataMap);\n\n  if (_typeof(data) === 'object' && data !== null) {\n    if (!(data.push && data.splice)) {\n      // check if data is array. Must use duck-type check so Backbone Collections also pass it\n      // when data is not an array, attempt to make a single-row array of it\n      // eslint-disable-next-line no-param-reassign\n      data = [data];\n    }\n  } else if (data === null) {\n    var dataSchema = newDataMap.getSchema(); // eslint-disable-next-line no-param-reassign\n\n    data = [];\n    var row;\n    var r = 0;\n    var rlen = 0;\n\n    for (r = 0, rlen = tableMeta.startRows; r < rlen; r++) {\n      if ((hotInstance.dataType === 'object' || hotInstance.dataType === 'function') && tableMeta.dataSchema) {\n        row = deepClone(dataSchema);\n        data.push(row);\n      } else if (hotInstance.dataType === 'array') {\n        row = deepClone(dataSchema[0]);\n        data.push(row);\n      } else {\n        row = [];\n\n        for (var c = 0, clen = tableMeta.startCols; c < clen; c++) {\n          row.push(null);\n        }\n\n        data.push(row);\n      }\n    }\n  } else {\n    throw new Error(\"\".concat(internalSource, \" only accepts array of objects or array of arrays (\").concat(_typeof(data), \" given)\"));\n  }\n\n  if (Array.isArray(data[0])) {\n    hotInstance.dataType = 'array';\n  }\n\n  tableMeta.data = data;\n  newDataMap.dataSource = data;\n  dataSource.data = data;\n  dataSource.dataType = hotInstance.dataType;\n  dataSource.colToProp = newDataMap.colToProp.bind(newDataMap);\n  dataSource.propToCol = newDataMap.propToCol.bind(newDataMap);\n  dataSource.countCachedColumns = newDataMap.countCachedColumns.bind(newDataMap); // Run the logic for reassuring that the table structure fits the new dataset.\n\n  callbackFunction(newDataMap);\n  hotInstance.runHooks(\"after\".concat(capitalizedInternalSource), data, firstRun, source); // TODO: deprecated, will be eventually removed, leaving only the `afterUpdateData` hook.\n  //  Triggers an additional `afterLoadData` hook for the `updateSettings` calls for backward compatibility.\n\n  if (internalSource !== 'loadData' && source === 'updateSettings') {\n    hotInstance.runHooks('afterLoadData', data, firstRun, source);\n  } // TODO: rethink the way the `afterChange` hook is being run here in the core `init` method.\n\n\n  if (!firstRun) {\n    // TODO: `afterChange` still needs to provide `loadData` as a `source` when called from `updateSettings` to keep\n    //  backward compatibility - to be changed after removing `loadData`.\n    hotInstance.runHooks('afterChange', null, source === 'updateSettings' ? 'loadData' : internalSource);\n    hotInstance.render();\n  }\n}\n\nexport { replaceData };", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.set.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport Hooks from \"../../../pluginHooks.mjs\";\nimport { hasOwnProperty } from \"../../../helpers/object.mjs\";\nimport { isFunction } from \"../../../helpers/function.mjs\";\n/**\n * @class DynamicCellMetaMod\n *\n * The `DynamicCellMetaMod` modifier allows for extending cell meta objects\n * (returned by `getCellMeta()` from `MetaManager`)\n * by user-specific properties.\n *\n * The user-specific properties can be added and changed dynamically,\n * either by Handsontable's hooks (`beforeGetCellMeta` and`afterGetCellMeta`),\n * or by Handsontable's `cells` option.\n *\n * The `getCellMeta()` method is used widely throughout the source code.\n * To boost the method's execution time,\n * the logic is triggered only once per one Handsontable slow render cycle.\n */\n\nexport var DynamicCellMetaMod = /*#__PURE__*/function () {\n  function DynamicCellMetaMod(metaManager) {\n    var _this = this;\n\n    _classCallCheck(this, DynamicCellMetaMod);\n\n    /**\n     * @type {MetaManager}\n     */\n    this.metaManager = metaManager;\n    /**\n     * @type {Map}\n     */\n\n    this.metaSyncMemo = new Map();\n    metaManager.addLocalHook('afterGetCellMeta', function (cellMeta) {\n      return _this.extendCellMeta(cellMeta);\n    });\n    Hooks.getSingleton().add('beforeRender', function (forceFullRender) {\n      if (forceFullRender) {\n        _this.metaSyncMemo.clear();\n      }\n    }, this.metaManager.hot);\n  }\n  /**\n   * Extends the cell meta object by user-specific properties.\n   *\n   * The cell meta object can be extended dynamically,\n   * either by Handsontable's hooks (`beforeGetCellMeta` and`afterGetCellMeta`),\n   * or by Handsontable's `cells` option.\n   *\n   * To boost performance, the extending process is triggered only once per one slow Handsontable render cycle.\n   *\n   * @param {object} cellMeta The cell meta object.\n   */\n\n\n  _createClass(DynamicCellMetaMod, [{\n    key: \"extendCellMeta\",\n    value: function extendCellMeta(cellMeta) {\n      var _this$metaSyncMemo$ge;\n\n      var physicalRow = cellMeta.row,\n          physicalColumn = cellMeta.col;\n\n      if ((_this$metaSyncMemo$ge = this.metaSyncMemo.get(physicalRow)) !== null && _this$metaSyncMemo$ge !== void 0 && _this$metaSyncMemo$ge.has(physicalColumn)) {\n        return;\n      }\n\n      var visualRow = cellMeta.visualRow,\n          visualCol = cellMeta.visualCol;\n      var hot = this.metaManager.hot;\n      var prop = hot.colToProp(visualCol);\n      cellMeta.prop = prop;\n      hot.runHooks('beforeGetCellMeta', visualRow, visualCol, cellMeta); // extend a `type` value, added or changed in the `beforeGetCellMeta` hook\n\n      var cellType = hasOwnProperty(cellMeta, 'type') ? cellMeta.type : null;\n      var cellSettings = isFunction(cellMeta.cells) ? cellMeta.cells(physicalRow, physicalColumn, prop) : null;\n\n      if (cellType) {\n        if (cellSettings) {\n          var _cellSettings$type;\n\n          cellSettings.type = (_cellSettings$type = cellSettings.type) !== null && _cellSettings$type !== void 0 ? _cellSettings$type : cellType;\n        } else {\n          cellSettings = {\n            type: cellType\n          };\n        }\n      }\n\n      if (cellSettings) {\n        this.metaManager.updateCellMeta(physicalRow, physicalColumn, cellSettings);\n      }\n\n      hot.runHooks('afterGetCellMeta', visualRow, visualCol, cellMeta);\n\n      if (!this.metaSyncMemo.has(physicalRow)) {\n        this.metaSyncMemo.set(physicalRow, new Set());\n      }\n\n      this.metaSyncMemo.get(physicalRow).add(physicalColumn);\n    }\n  }]);\n\n  return DynamicCellMetaMod;\n}();", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BaseEditor, EDITOR_STATE } from \"../baseEditor/index.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { isMobileBrowser, isIE, isEdge, isIOS } from \"../../helpers/browser.mjs\";\nimport { addClass, getCaretPosition, getComputedStyle, getCssTransform, getScrollbarWidth, innerWidth, offset, resetCssTransform, setCaretPosition, hasVerticalScrollbar, hasHorizontalScrollbar, hasClass, removeClass } from \"../../helpers/dom/element.mjs\";\nimport { stopImmediatePropagation, isImmediatePropagationStopped } from \"../../helpers/dom/event.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport { KEY_CODES } from \"../../helpers/unicode.mjs\";\nimport { autoResize } from \"../../3rdparty/autoResize/index.mjs\";\nvar EDITOR_VISIBLE_CLASS_NAME = 'ht_editor_visible';\nvar EDITOR_HIDDEN_CLASS_NAME = 'ht_editor_hidden';\nexport var EDITOR_TYPE = 'text';\n/**\n * @private\n * @class TextEditor\n */\n\nexport var TextEditor = /*#__PURE__*/function (_BaseEditor) {\n  _inherits(TextEditor, _BaseEditor);\n\n  var _super = _createSuper(TextEditor);\n\n  /**\n   * @param {Core} instance The Handsontable instance.\n   */\n  function TextEditor(instance) {\n    var _this;\n\n    _classCallCheck(this, TextEditor);\n\n    _this = _super.call(this, instance);\n    /**\n     * Instance of {@link EventManager}.\n     *\n     * @private\n     * @type {EventManager}\n     */\n\n    _this.eventManager = new EventManager(_assertThisInitialized(_this));\n    /**\n     * Autoresize instance. Automagically resizes editor after changes.\n     *\n     * @private\n     * @type {autoResize}\n     */\n\n    _this.autoResize = autoResize();\n    /**\n     * An TEXTAREA element.\n     *\n     * @private\n     * @type {HTMLTextAreaElement}\n     */\n\n    _this.TEXTAREA = void 0;\n    /**\n     * Style declaration object of the TEXTAREA element.\n     *\n     * @private\n     * @type {CSSStyleDeclaration}\n     */\n\n    _this.textareaStyle = void 0;\n    /**\n     * Parent element of the TEXTAREA.\n     *\n     * @private\n     * @type {HTMLDivElement}\n     */\n\n    _this.TEXTAREA_PARENT = void 0;\n    /**\n     * Style declaration object of the TEXTAREA_PARENT element.\n     *\n     * @private\n     * @type {CSSStyleDeclaration}\n     */\n\n    _this.textareaParentStyle = void 0;\n    /**\n     * Z-index class style for the editor.\n     *\n     * @private\n     * @type {string}\n     */\n\n    _this.layerClass = void 0;\n\n    _this.createElements();\n\n    _this.bindEvents();\n\n    _this.hot.addHookOnce('afterDestroy', function () {\n      return _this.destroy();\n    });\n\n    return _this;\n  }\n  /**\n   * Gets current value from editable element.\n   *\n   * @returns {number}\n   */\n\n\n  _createClass(TextEditor, [{\n    key: \"getValue\",\n    value: function getValue() {\n      return this.TEXTAREA.value;\n    }\n    /**\n     * Sets new value into editable element.\n     *\n     * @param {*} newValue The editor value.\n     */\n\n  }, {\n    key: \"setValue\",\n    value: function setValue(newValue) {\n      this.TEXTAREA.value = newValue;\n    }\n    /**\n     * Opens the editor and adjust its size.\n     */\n\n  }, {\n    key: \"open\",\n    value: function open() {\n      var _this2 = this;\n\n      this.refreshDimensions(); // need it instantly, to prevent https://github.com/handsontable/handsontable/issues/348\n\n      this.showEditableElement();\n      this.addHook('beforeKeyDown', function (event) {\n        return _this2.onBeforeKeyDown(event);\n      });\n    }\n    /**\n     * Closes the editor.\n     */\n\n  }, {\n    key: \"close\",\n    value: function close() {\n      this.autoResize.unObserve();\n\n      if (this.hot.rootDocument.activeElement === this.TEXTAREA) {\n        this.hot.listen(); // don't refocus the table if user focused some cell outside of HT on purpose\n      }\n\n      this.hideEditableElement();\n      this.removeHooksByKey('beforeKeyDown');\n    }\n    /**\n     * Prepares editor's meta data.\n     *\n     * @param {number} row The visual row index.\n     * @param {number} col The visual column index.\n     * @param {number|string} prop The column property (passed when datasource is an array of objects).\n     * @param {HTMLTableCellElement} td The rendered cell element.\n     * @param {*} value The rendered value.\n     * @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).\n     */\n\n  }, {\n    key: \"prepare\",\n    value: function prepare(row, col, prop, td, value, cellProperties) {\n      var previousState = this.state;\n\n      _get(_getPrototypeOf(TextEditor.prototype), \"prepare\", this).call(this, row, col, prop, td, value, cellProperties);\n\n      if (!cellProperties.readOnly) {\n        this.refreshDimensions(true);\n        var allowInvalid = cellProperties.allowInvalid,\n            fragmentSelection = cellProperties.fragmentSelection;\n\n        if (allowInvalid) {\n          // Remove an empty space from texarea (added by copyPaste plugin to make copy/paste\n          // functionality work with IME)\n          this.TEXTAREA.value = '';\n        }\n\n        if (previousState !== EDITOR_STATE.FINISHED) {\n          this.hideEditableElement();\n        } // @TODO: The fragmentSelection functionality is conflicted with IME. For this feature\n        // refocus has to be disabled (to make IME working).\n\n\n        var restoreFocus = !fragmentSelection;\n\n        if (restoreFocus && !isMobileBrowser()) {\n          this.focus();\n        }\n      }\n    }\n    /**\n     * Begins editing on a highlighted cell and hides fillHandle corner if was present.\n     *\n     * @param {*} newInitialValue The editor initial value.\n     * @param {Event} event The keyboard event object.\n     */\n\n  }, {\n    key: \"beginEditing\",\n    value: function beginEditing(newInitialValue, event) {\n      if (this.state !== EDITOR_STATE.VIRGIN) {\n        return;\n      }\n\n      this.TEXTAREA.value = ''; // Remove an empty space from texarea (added by copyPaste plugin to make copy/paste functionality work with IME).\n\n      _get(_getPrototypeOf(TextEditor.prototype), \"beginEditing\", this).call(this, newInitialValue, event);\n    }\n    /**\n     * Sets focus state on the select element.\n     */\n\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      // For IME editor textarea element must be focused using \".select\" method.\n      // Using \".focus\" browser automatically scroll into the focused element which\n      // is undesire effect.\n      this.TEXTAREA.select();\n      setCaretPosition(this.TEXTAREA, this.TEXTAREA.value.length);\n    }\n    /**\n     * Creates an editor's elements and adds necessary CSS classnames.\n     */\n\n  }, {\n    key: \"createElements\",\n    value: function createElements() {\n      var rootDocument = this.hot.rootDocument;\n      this.TEXTAREA = rootDocument.createElement('TEXTAREA');\n      this.TEXTAREA.setAttribute('data-hot-input', ''); // Makes the element recognizable by Hot as its own component's element.\n\n      this.TEXTAREA.tabIndex = -1;\n      addClass(this.TEXTAREA, 'handsontableInput');\n      this.textareaStyle = this.TEXTAREA.style;\n      this.textareaStyle.width = 0;\n      this.textareaStyle.height = 0;\n      this.textareaStyle.overflowY = 'visible';\n      this.TEXTAREA_PARENT = rootDocument.createElement('DIV');\n      addClass(this.TEXTAREA_PARENT, 'handsontableInputHolder');\n\n      if (hasClass(this.TEXTAREA_PARENT, this.layerClass)) {\n        removeClass(this.TEXTAREA_PARENT, this.layerClass);\n      }\n\n      addClass(this.TEXTAREA_PARENT, EDITOR_HIDDEN_CLASS_NAME);\n      this.textareaParentStyle = this.TEXTAREA_PARENT.style;\n      this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);\n      this.hot.rootElement.appendChild(this.TEXTAREA_PARENT);\n    }\n    /**\n     * Moves an editable element out of the viewport, but element must be able to hold focus for IME support.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"hideEditableElement\",\n    value: function hideEditableElement() {\n      if (isIE() || isEdge()) {\n        this.textareaStyle.textIndent = '-99999px';\n      }\n\n      this.textareaStyle.overflowY = 'visible';\n      this.textareaParentStyle.opacity = '0';\n      this.textareaParentStyle.height = '1px';\n\n      if (hasClass(this.TEXTAREA_PARENT, this.layerClass)) {\n        removeClass(this.TEXTAREA_PARENT, this.layerClass);\n      }\n\n      addClass(this.TEXTAREA_PARENT, EDITOR_HIDDEN_CLASS_NAME);\n    }\n    /**\n     * Resets an editable element position.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"showEditableElement\",\n    value: function showEditableElement() {\n      this.textareaParentStyle.height = '';\n      this.textareaParentStyle.overflow = '';\n      this.textareaParentStyle.position = '';\n      this.textareaParentStyle.right = 'auto';\n      this.textareaParentStyle.opacity = '1';\n      this.textareaStyle.textIndent = '';\n      this.textareaStyle.overflowY = 'hidden';\n      var childNodes = this.TEXTAREA_PARENT.childNodes;\n      var hasClassHandsontableEditor = false;\n      rangeEach(childNodes.length - 1, function (index) {\n        var childNode = childNodes[index];\n\n        if (hasClass(childNode, 'handsontableEditor')) {\n          hasClassHandsontableEditor = true;\n          return false;\n        }\n      });\n\n      if (hasClass(this.TEXTAREA_PARENT, EDITOR_HIDDEN_CLASS_NAME)) {\n        removeClass(this.TEXTAREA_PARENT, EDITOR_HIDDEN_CLASS_NAME);\n      }\n\n      if (hasClassHandsontableEditor) {\n        this.layerClass = EDITOR_VISIBLE_CLASS_NAME;\n        addClass(this.TEXTAREA_PARENT, this.layerClass);\n      } else {\n        this.layerClass = this.getEditedCellsLayerClass();\n        addClass(this.TEXTAREA_PARENT, this.layerClass);\n      }\n    }\n    /**\n     * Refreshes editor's value using source data.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"refreshValue\",\n    value: function refreshValue() {\n      var physicalRow = this.hot.toPhysicalRow(this.row);\n      var sourceData = this.hot.getSourceDataAtCell(physicalRow, this.col);\n      this.originalValue = sourceData;\n      this.setValue(sourceData);\n      this.refreshDimensions();\n    }\n    /**\n     * Refreshes editor's size and position.\n     *\n     * @private\n     * @param {boolean} force Indicates if the refreshing editor dimensions should be triggered.\n     */\n\n  }, {\n    key: \"refreshDimensions\",\n    value: function refreshDimensions() {\n      var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (this.state !== EDITOR_STATE.EDITING && !force) {\n        return;\n      }\n\n      this.TD = this.getEditedCell(); // TD is outside of the viewport.\n\n      if (!this.TD) {\n        if (!force) {\n          this.close(); // TODO shouldn't it be this.finishEditing() ?\n        }\n\n        return;\n      }\n\n      var _this$hot$view$wt = this.hot.view.wt,\n          wtOverlays = _this$hot$view$wt.wtOverlays,\n          wtViewport = _this$hot$view$wt.wtViewport;\n      var currentOffset = offset(this.TD);\n      var containerOffset = offset(this.hot.rootElement);\n      var scrollableContainerTop = wtOverlays.topOverlay.holder;\n      var scrollableContainerLeft = wtOverlays.leftOverlay.holder;\n      var containerScrollTop = scrollableContainerTop !== this.hot.rootWindow ? scrollableContainerTop.scrollTop : 0;\n      var containerScrollLeft = scrollableContainerLeft !== this.hot.rootWindow ? scrollableContainerLeft.scrollLeft : 0;\n      var editorSection = this.checkEditorSection();\n      var scrollTop = ['', 'left'].includes(editorSection) ? containerScrollTop : 0;\n      var scrollLeft = ['', 'top', 'bottom'].includes(editorSection) ? containerScrollLeft : 0; // If colHeaders is disabled, cells in the first row have border-top\n\n      var editTopModifier = currentOffset.top === containerOffset.top ? 0 : 1;\n      var backgroundColor = this.TD.style.backgroundColor;\n      var editTop = currentOffset.top - containerOffset.top - editTopModifier - scrollTop;\n      var editLeft = currentOffset.left - containerOffset.left - 1 - scrollLeft;\n      var cssTransformOffset; // TODO: Refactor this to the new instance.getCell method (from #ply-59), after 0.12.1 is released\n\n      switch (editorSection) {\n        case 'top':\n          cssTransformOffset = getCssTransform(wtOverlays.topOverlay.clone.wtTable.holder.parentNode);\n          break;\n\n        case 'left':\n          cssTransformOffset = getCssTransform(wtOverlays.leftOverlay.clone.wtTable.holder.parentNode);\n          break;\n\n        case 'top-left-corner':\n          cssTransformOffset = getCssTransform(wtOverlays.topLeftCornerOverlay.clone.wtTable.holder.parentNode);\n          break;\n\n        case 'bottom-left-corner':\n          cssTransformOffset = getCssTransform(wtOverlays.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode);\n          break;\n\n        case 'bottom':\n          cssTransformOffset = getCssTransform(wtOverlays.bottomOverlay.clone.wtTable.holder.parentNode);\n          break;\n\n        default:\n          break;\n      }\n\n      var hasColumnHeaders = this.hot.hasColHeaders();\n      var renderableRow = this.hot.rowIndexMapper.getRenderableFromVisualIndex(this.row);\n      var renderableColumn = this.hot.columnIndexMapper.getRenderableFromVisualIndex(this.col);\n      var nrOfRenderableRowIndexes = this.hot.rowIndexMapper.getRenderableIndexesLength();\n      var firstRowIndexOfTheBottomOverlay = nrOfRenderableRowIndexes - this.hot.view.wt.getSetting('fixedRowsBottom');\n\n      if (hasColumnHeaders && renderableRow <= 0 || renderableRow === firstRowIndexOfTheBottomOverlay) {\n        editTop += 1;\n      }\n\n      if (renderableColumn <= 0) {\n        editLeft += 1;\n      }\n\n      if (cssTransformOffset && cssTransformOffset !== -1) {\n        this.textareaParentStyle[cssTransformOffset[0]] = cssTransformOffset[1];\n      } else {\n        resetCssTransform(this.TEXTAREA_PARENT);\n      }\n\n      this.textareaParentStyle.top = \"\".concat(editTop, \"px\");\n      this.textareaParentStyle.left = \"\".concat(editLeft, \"px\");\n      this.showEditableElement();\n      var firstRowOffset = wtViewport.rowsRenderCalculator.startPosition;\n      var firstColumnOffset = wtViewport.columnsRenderCalculator.startPosition;\n      var horizontalScrollPosition = wtOverlays.leftOverlay.getScrollPosition();\n      var verticalScrollPosition = wtOverlays.topOverlay.getScrollPosition();\n      var scrollbarWidth = getScrollbarWidth(this.hot.rootDocument);\n      var cellTopOffset = this.TD.offsetTop + firstRowOffset - verticalScrollPosition;\n      var cellLeftOffset = this.TD.offsetLeft + firstColumnOffset - horizontalScrollPosition;\n      var width = innerWidth(this.TD) - 8;\n      var actualVerticalScrollbarWidth = hasVerticalScrollbar(scrollableContainerTop) ? scrollbarWidth : 0;\n      var actualHorizontalScrollbarWidth = hasHorizontalScrollbar(scrollableContainerLeft) ? scrollbarWidth : 0;\n      var maxWidth = this.hot.view.maximumVisibleElementWidth(cellLeftOffset) - 9 - actualVerticalScrollbarWidth;\n      var height = this.TD.scrollHeight + 1;\n      var maxHeight = Math.max(this.hot.view.maximumVisibleElementHeight(cellTopOffset) - actualHorizontalScrollbarWidth, 23); // eslint-disable-line max-len\n\n      var cellComputedStyle = getComputedStyle(this.TD, this.hot.rootWindow);\n      this.TEXTAREA.style.fontSize = cellComputedStyle.fontSize;\n      this.TEXTAREA.style.fontFamily = cellComputedStyle.fontFamily;\n      this.TEXTAREA.style.backgroundColor = backgroundColor;\n      this.autoResize.init(this.TEXTAREA, {\n        minHeight: Math.min(height, maxHeight),\n        maxHeight: maxHeight,\n        // TEXTAREA should never be higher than visible part of the viewport (should not cover the scrollbar)\n        minWidth: Math.min(width, maxWidth),\n        maxWidth: maxWidth // TEXTAREA should never be wider than visible part of the viewport (should not cover the scrollbar)\n\n      }, true);\n    }\n    /**\n     * Binds events and hooks.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"bindEvents\",\n    value: function bindEvents() {\n      var _this3 = this;\n\n      this.eventManager.addEventListener(this.TEXTAREA, 'cut', function (event) {\n        return event.stopPropagation();\n      });\n      this.eventManager.addEventListener(this.TEXTAREA, 'paste', function (event) {\n        return event.stopPropagation();\n      });\n\n      if (isIOS()) {\n        // on iOS after click \"Done\" the edit isn't hidden by default, so we need to handle it manually.\n        this.eventManager.addEventListener(this.TEXTAREA, 'focusout', function () {\n          return _this3.finishEditing(false);\n        });\n      }\n\n      this.addHook('afterScrollHorizontally', function () {\n        return _this3.refreshDimensions();\n      });\n      this.addHook('afterScrollVertically', function () {\n        return _this3.refreshDimensions();\n      });\n      this.addHook('afterColumnResize', function () {\n        _this3.refreshDimensions();\n\n        _this3.focus();\n      });\n      this.addHook('afterRowResize', function () {\n        _this3.refreshDimensions();\n\n        _this3.focus();\n      });\n    }\n    /**\n     * Ugly hack for autocompleteEditor.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"allowKeyEventPropagation\",\n    value: function allowKeyEventPropagation() {}\n    /**\n     * Destroys the internal event manager and clears attached hooks.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.eventManager.destroy();\n      this.clearHooks();\n    }\n    /**\n     * OnBeforeKeyDown callback.\n     *\n     * @param {Event} event The keyboard event object.\n     */\n\n  }, {\n    key: \"onBeforeKeyDown\",\n    value: function onBeforeKeyDown(event) {\n      // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL)\n      var ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey; // Process only events that have been fired in the editor\n\n      if (event.target !== this.TEXTAREA || isImmediatePropagationStopped(event)) {\n        return;\n      }\n\n      switch (event.keyCode) {\n        case KEY_CODES.ARROW_RIGHT:\n          if (this.isInFullEditMode()) {\n            if (!this.isWaiting() && !this.allowKeyEventPropagation(event.keyCode)) {\n              stopImmediatePropagation(event);\n            }\n          }\n\n          break;\n\n        case KEY_CODES.ARROW_LEFT:\n          if (this.isInFullEditMode()) {\n            if (!this.isWaiting() && !this.allowKeyEventPropagation(event.keyCode)) {\n              stopImmediatePropagation(event);\n            }\n          }\n\n          break;\n\n        case KEY_CODES.ARROW_UP:\n        case KEY_CODES.ARROW_DOWN:\n          if (this.isInFullEditMode()) {\n            if (!this.isWaiting() && !this.allowKeyEventPropagation(event.keyCode)) {\n              stopImmediatePropagation(event);\n            }\n          }\n\n          break;\n\n        case KEY_CODES.ENTER:\n          {\n            var isMultipleSelection = this.hot.selection.isMultiple();\n\n            if (ctrlDown && !isMultipleSelection || event.altKey) {\n              // if ctrl+enter or alt+enter, add new line\n              if (this.isOpened()) {\n                var caretPosition = getCaretPosition(this.TEXTAREA);\n                var value = this.getValue();\n                var newValue = \"\".concat(value.slice(0, caretPosition), \"\\n\").concat(value.slice(caretPosition));\n                this.setValue(newValue);\n                setCaretPosition(this.TEXTAREA, caretPosition + 1);\n              } else {\n                this.beginEditing(\"\".concat(this.originalValue, \"\\n\"));\n              }\n\n              stopImmediatePropagation(event);\n            }\n\n            event.preventDefault(); // don't add newline to field\n\n            break;\n          }\n\n        case KEY_CODES.BACKSPACE:\n        case KEY_CODES.DELETE:\n        case KEY_CODES.HOME:\n        case KEY_CODES.END:\n          stopImmediatePropagation(event); // backspace, delete, home, end should only work locally when cell is edited (not in table context)\n\n          break;\n\n        default:\n          break;\n      }\n\n      var arrowKeyCodes = [KEY_CODES.ARROW_UP, KEY_CODES.ARROW_RIGHT, KEY_CODES.ARROW_DOWN, KEY_CODES.ARROW_LEFT];\n\n      if (arrowKeyCodes.indexOf(event.keyCode) === -1) {\n        this.autoResize.resize(String.fromCharCode(event.keyCode));\n      }\n    }\n  }], [{\n    key: \"EDITOR_TYPE\",\n    get: function get() {\n      return EDITOR_TYPE;\n    }\n  }]);\n\n  return TextEditor;\n}(BaseEditor);", "import \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/web.timers.js\";\n\n/**\n * autoResize - resizes a DOM element to the width and height of another DOM element\n *\n * Copyright 2014, Marcin Warpechowski\n * Licensed under the MIT license\n */\nexport function autoResize() {\n  var defaults = {\n    minHeight: 200,\n    maxHeight: 300,\n    minWidth: 100,\n    maxWidth: 300\n  },\n      el,\n      body = document.body,\n      text = document.createTextNode(''),\n      span = document.createElement('SPAN'),\n      observe = function observe(element, event, handler) {\n    element.addEventListener(event, handler, false);\n  },\n      _unObserve = function unObserve(element, event, handler) {\n    element.removeEventListener(event, handler, false);\n  },\n      resize = function resize(newChar) {\n    var width, scrollHeight;\n\n    if (!newChar) {\n      newChar = \"\";\n    } else if (!/^[a-zA-Z \\.,\\\\\\/\\|0-9]$/.test(newChar)) {\n      newChar = \".\";\n    }\n\n    if (text.textContent !== void 0) {\n      text.textContent = el.value + newChar;\n    } else {\n      text.data = el.value + newChar; //IE8\n    }\n\n    span.style.fontSize = getComputedStyle(el).fontSize;\n    span.style.fontFamily = getComputedStyle(el).fontFamily;\n    span.style.whiteSpace = \"pre\";\n    body.appendChild(span);\n    width = span.clientWidth + 2;\n    body.removeChild(span);\n    el.style.height = defaults.minHeight + 'px';\n\n    if (defaults.minWidth > width) {\n      el.style.width = defaults.minWidth + 'px';\n    } else if (width > defaults.maxWidth) {\n      el.style.width = defaults.maxWidth + 'px';\n    } else {\n      el.style.width = width + 'px';\n    }\n\n    scrollHeight = el.scrollHeight ? el.scrollHeight - 1 : 0;\n\n    if (defaults.minHeight > scrollHeight) {\n      el.style.height = defaults.minHeight + 'px';\n    } else if (defaults.maxHeight < scrollHeight) {\n      el.style.height = defaults.maxHeight + 'px';\n      el.style.overflowY = 'visible';\n    } else {\n      el.style.height = scrollHeight + 'px';\n    }\n  },\n      delayedResize = function delayedResize() {\n    window.setTimeout(resize, 0);\n  },\n      extendDefaults = function extendDefaults(config) {\n    if (config && config.minHeight) {\n      if (config.minHeight == 'inherit') {\n        defaults.minHeight = el.clientHeight;\n      } else {\n        var minHeight = parseInt(config.minHeight);\n\n        if (!isNaN(minHeight)) {\n          defaults.minHeight = minHeight;\n        }\n      }\n    }\n\n    if (config && config.maxHeight) {\n      if (config.maxHeight == 'inherit') {\n        defaults.maxHeight = el.clientHeight;\n      } else {\n        var maxHeight = parseInt(config.maxHeight);\n\n        if (!isNaN(maxHeight)) {\n          defaults.maxHeight = maxHeight;\n        }\n      }\n    }\n\n    if (config && config.minWidth) {\n      if (config.minWidth == 'inherit') {\n        defaults.minWidth = el.clientWidth;\n      } else {\n        var minWidth = parseInt(config.minWidth);\n\n        if (!isNaN(minWidth)) {\n          defaults.minWidth = minWidth;\n        }\n      }\n    }\n\n    if (config && config.maxWidth) {\n      if (config.maxWidth == 'inherit') {\n        defaults.maxWidth = el.clientWidth;\n      } else {\n        var maxWidth = parseInt(config.maxWidth);\n\n        if (!isNaN(maxWidth)) {\n          defaults.maxWidth = maxWidth;\n        }\n      }\n    }\n\n    if (!span.firstChild) {\n      span.className = \"autoResize\";\n      span.style.display = 'inline-block';\n      span.appendChild(text);\n    }\n  },\n      _init = function init(el_, config, doObserve) {\n    el = el_;\n    extendDefaults(config);\n\n    if (el.nodeName == 'TEXTAREA') {\n      el.style.resize = 'none';\n      el.style.overflowY = '';\n      el.style.height = defaults.minHeight + 'px';\n      el.style.minWidth = defaults.minWidth + 'px';\n      el.style.maxWidth = defaults.maxWidth + 'px';\n      el.style.overflowY = 'hidden';\n    }\n\n    if (doObserve) {\n      observe(el, 'change', resize);\n      observe(el, 'cut', delayedResize);\n      observe(el, 'paste', delayedResize);\n      observe(el, 'drop', delayedResize);\n      observe(el, 'keydown', delayedResize);\n      observe(el, 'focus', resize);\n      observe(el, 'compositionstart', delayedResize);\n      observe(el, 'compositionupdate', delayedResize);\n      observe(el, 'compositionend', delayedResize);\n    }\n\n    resize();\n  };\n\n  function getComputedStyle(element) {\n    return element.currentStyle || document.defaultView.getComputedStyle(element);\n  }\n\n  return {\n    init: function init(el_, config, doObserve) {\n      _init(el_, config, doObserve);\n    },\n    unObserve: function unObserve() {\n      _unObserve(el, 'change', resize);\n\n      _unObserve(el, 'cut', delayedResize);\n\n      _unObserve(el, 'paste', delayedResize);\n\n      _unObserve(el, 'drop', delayedResize);\n\n      _unObserve(el, 'keydown', delayedResize);\n\n      _unObserve(el, 'focus', resize);\n\n      _unObserve(el, 'compositionstart', delayedResize);\n\n      _unObserve(el, 'compositionupdate', delayedResize);\n\n      _unObserve(el, 'compositionend', delayedResize);\n    },\n    resize: resize\n  };\n}", "/**\n * Adds appropriate CSS class to table cell, based on cellProperties.\n */\nimport { addClass, removeClass } from \"../../helpers/dom/element.mjs\";\nexport var RENDERER_TYPE = 'base';\n/**\n * @param {Core} instance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).\n */\n\nexport function baseRenderer(instance, TD, row, col, prop, value, cellProperties) {\n  var classesToAdd = [];\n  var classesToRemove = [];\n\n  if (cellProperties.className) {\n    addClass(TD, cellProperties.className);\n  }\n\n  if (cellProperties.readOnly) {\n    classesToAdd.push(cellProperties.readOnlyCellClassName);\n  }\n\n  if (cellProperties.valid === false && cellProperties.invalidCellClassName) {\n    classesToAdd.push(cellProperties.invalidCellClassName);\n  } else {\n    classesToRemove.push(cellProperties.invalidCellClassName);\n  }\n\n  if (cellProperties.wordWrap === false && cellProperties.noWordWrapClassName) {\n    classesToAdd.push(cellProperties.noWordWrapClassName);\n  }\n\n  if (!value && cellProperties.placeholder) {\n    classesToAdd.push(cellProperties.placeholderCellClassName);\n  }\n\n  removeClass(TD, classesToRemove);\n  addClass(TD, classesToAdd);\n}\nbaseRenderer.RENDERER_TYPE = RENDERER_TYPE;", "import \"core-js/modules/es.string.trim.js\";\nimport { baseRenderer } from \"../baseRenderer/index.mjs\";\nimport { empty, fastInnerText } from \"../../helpers/dom/element.mjs\";\nimport { stringify } from \"../../helpers/mixed.mjs\";\nexport var RENDERER_TYPE = 'text';\n/**\n * Default text renderer.\n *\n * @private\n * @param {Core} instance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).\n */\n\nexport function textRenderer(instance, TD, row, col, prop, value, cellProperties) {\n  baseRenderer.apply(this, [instance, TD, row, col, prop, value, cellProperties]);\n  var escaped = value;\n\n  if (!escaped && cellProperties.placeholder) {\n    escaped = cellProperties.placeholder;\n  }\n\n  escaped = stringify(escaped);\n\n  if (instance.getSettings().trimWhitespace) {\n    escaped = escaped.trim();\n  }\n\n  if (cellProperties.rendererTemplate) {\n    empty(TD);\n    var TEMPLATE = instance.rootDocument.createElement('TEMPLATE');\n    TEMPLATE.setAttribute('bind', '{{}}');\n    TEMPLATE.innerHTML = cellProperties.rendererTemplate;\n    HTMLTemplateElement.decorate(TEMPLATE);\n    TEMPLATE.model = instance.getSourceDataAtRow(row);\n    TD.appendChild(TEMPLATE);\n  } else {\n    // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n    fastInnerText(TD, escaped);\n  }\n}\ntextRenderer.RENDERER_TYPE = RENDERER_TYPE;", "import { TextEditor } from \"../../editors/textEditor/index.mjs\";\nimport { textRenderer } from \"../../renderers/textRenderer/index.mjs\";\nexport var CELL_TYPE = 'text';\nexport var TextCellType = {\n  CELL_TYPE: CELL_TYPE,\n  editor: TextEditor,\n  renderer: textRenderer\n};", "import Core from \"./core.mjs\";\nimport { rootInstanceSymbol } from \"./utils/rootInstance.mjs\";\nimport { metaSchemaFactory } from \"./dataMap/index.mjs\";\nimport Hooks from \"./pluginHooks.mjs\"; // FIXME: Bug in eslint-plugin-import: https://github.com/benmosher/eslint-plugin-import/issues/1883\n\n/* eslint-disable import/named */\n\nimport { dictionaryKeys, getTranslatedPhrase, registerLanguageDictionary, getLanguagesDictionaries, getLanguageDictionary } from \"./i18n/registry.mjs\";\n/* eslint-enable import/named */\n\nimport { registerCellType } from \"./cellTypes/registry.mjs\";\nimport { TextCellType } from \"./cellTypes/textType/index.mjs\";\nimport { BaseEditor } from \"./editors/baseEditor/index.mjs\"; // register default mandatory cell type for the Base package\n\nregisterCellType(TextCellType); // export the `BaseEditor` class to the Handsontable global namespace\n\nHandsontable.editors = {\n  BaseEditor: BaseEditor\n};\n/**\n * @param {HTMLElement} rootElement The element to which the Handsontable instance is injected.\n * @param {object} userSettings The user defined options.\n * @returns {Core}\n */\n\nfunction Handsontable(rootElement, userSettings) {\n  var instance = new Core(rootElement, userSettings || {}, rootInstanceSymbol);\n  instance.init();\n  return instance;\n}\n\nHandsontable.Core = function (rootElement) {\n  var userSettings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return new Core(rootElement, userSettings, rootInstanceSymbol);\n};\n\nHandsontable.DefaultSettings = metaSchemaFactory();\nHandsontable.hooks = Hooks.getSingleton();\nHandsontable.packageName = 'handsontable';\nHandsontable.buildDate = \"13/01/2022 12:30:03\";\nHandsontable.version = \"11.1.0\";\nHandsontable.languages = {\n  dictionaryKeys: dictionaryKeys,\n  getLanguageDictionary: getLanguageDictionary,\n  getLanguagesDictionaries: getLanguagesDictionaries,\n  registerLanguageDictionary: registerLanguageDictionary,\n  getTranslatedPhrase: getTranslatedPhrase\n};\nexport default Handsontable;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.array.find.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport { HandsontableEditor } from \"../handsontableEditor/index.mjs\";\nimport { arrayMap, pivot } from \"../../helpers/array.mjs\";\nimport { addClass, getCaretPosition, getScrollbarWidth, getSelectionEndPosition, getTrimmingContainer, offset, outerHeight, outerWidth, setCaretPosition } from \"../../helpers/dom/element.mjs\";\nimport { isDefined, stringify } from \"../../helpers/mixed.mjs\";\nimport { stripTags } from \"../../helpers/string.mjs\";\nimport { KEY_CODES, isPrintableChar } from \"../../helpers/unicode.mjs\";\nimport { textRenderer } from \"../../renderers/textRenderer/index.mjs\";\nvar privatePool = new WeakMap();\nexport var EDITOR_TYPE = 'autocomplete';\n/**\n * @private\n * @class AutocompleteEditor\n */\n\nexport var AutocompleteEditor = /*#__PURE__*/function (_HandsontableEditor) {\n  _inherits(AutocompleteEditor, _HandsontableEditor);\n\n  var _super = _createSuper(AutocompleteEditor);\n\n  function AutocompleteEditor(instance) {\n    var _this;\n\n    _classCallCheck(this, AutocompleteEditor);\n\n    _this = _super.call(this, instance);\n    /**\n     * Query string to turn available values over.\n     *\n     * @type {string}\n     */\n\n    _defineProperty(_assertThisInitialized(_this), \"sortByRelevance\", function (value, choices, caseSensitive) {\n      var choicesRelevance = [];\n      var result = [];\n      var valueLength = value.length;\n      var choicesCount = choices.length;\n      var charsLeft;\n      var currentItem;\n      var i;\n      var valueIndex;\n\n      if (valueLength === 0) {\n        for (i = 0; i < choicesCount; i++) {\n          result.push(i);\n        }\n\n        return result;\n      }\n\n      for (i = 0; i < choicesCount; i++) {\n        currentItem = stripTags(stringify(choices[i]));\n\n        if (caseSensitive) {\n          valueIndex = currentItem.indexOf(value);\n        } else {\n          var locale = this.cellProperties.locale;\n          valueIndex = currentItem.toLocaleLowerCase(locale).indexOf(value.toLocaleLowerCase(locale));\n        }\n\n        if (valueIndex !== -1) {\n          charsLeft = currentItem.length - valueIndex - valueLength;\n          choicesRelevance.push({\n            baseIndex: i,\n            index: valueIndex,\n            charsLeft: charsLeft,\n            value: currentItem\n          });\n        }\n      }\n\n      choicesRelevance.sort(function (a, b) {\n        if (b.index === -1) {\n          return -1;\n        }\n\n        if (a.index === -1) {\n          return 1;\n        }\n\n        if (a.index < b.index) {\n          return -1;\n        } else if (b.index < a.index) {\n          return 1;\n        } else if (a.index === b.index) {\n          if (a.charsLeft < b.charsLeft) {\n            return -1;\n          } else if (a.charsLeft > b.charsLeft) {\n            return 1;\n          }\n        }\n\n        return 0;\n      });\n\n      for (i = 0, choicesCount = choicesRelevance.length; i < choicesCount; i++) {\n        result.push(choicesRelevance[i].baseIndex);\n      }\n\n      return result;\n    });\n\n    _this.query = null;\n    /**\n     * Contains stripped choices.\n     *\n     * @type {string[]}\n     */\n\n    _this.strippedChoices = [];\n    /**\n     * Contains raw choices.\n     *\n     * @type {Array}\n     */\n\n    _this.rawChoices = [];\n    privatePool.set(_assertThisInitialized(_this), {\n      skipOne: false,\n      isMacOS: _this.hot.rootWindow.navigator.platform.indexOf('Mac') > -1\n    });\n    return _this;\n  }\n  /**\n   * Gets current value from editable element.\n   *\n   * @returns {string}\n   */\n\n\n  _createClass(AutocompleteEditor, [{\n    key: \"getValue\",\n    value: function getValue() {\n      var _this2 = this;\n\n      var selectedValue = this.rawChoices.find(function (value) {\n        var strippedValue = _this2.stripValueIfNeeded(value);\n\n        return strippedValue === _this2.TEXTAREA.value;\n      });\n\n      if (isDefined(selectedValue)) {\n        return selectedValue;\n      }\n\n      return this.TEXTAREA.value;\n    }\n    /**\n     * Creates an editor's elements and adds necessary CSS classnames.\n     */\n\n  }, {\n    key: \"createElements\",\n    value: function createElements() {\n      _get(_getPrototypeOf(AutocompleteEditor.prototype), \"createElements\", this).call(this);\n\n      addClass(this.htContainer, 'autocompleteEditor');\n      addClass(this.htContainer, this.hot.rootWindow.navigator.platform.indexOf('Mac') === -1 ? '' : 'htMacScroll');\n    }\n    /**\n     * Opens the editor and adjust its size and internal Handsontable's instance.\n     */\n\n  }, {\n    key: \"open\",\n    value: function open() {\n      var _this3 = this;\n\n      var priv = privatePool.get(this);\n\n      _get(_getPrototypeOf(AutocompleteEditor.prototype), \"open\", this).call(this);\n\n      var choicesListHot = this.htEditor.getInstance();\n      var trimDropdown = this.cellProperties.trimDropdown === void 0 ? true : this.cellProperties.trimDropdown;\n      this.showEditableElement();\n      this.focus();\n      var scrollbarWidth = getScrollbarWidth();\n\n      if (scrollbarWidth === 0 && priv.isMacOS) {\n        scrollbarWidth += 15; // default scroll bar width if scroll bars are visible only when scrolling\n      }\n\n      choicesListHot.updateSettings({\n        colWidths: trimDropdown ? [outerWidth(this.TEXTAREA) - 2] : void 0,\n        width: trimDropdown ? outerWidth(this.TEXTAREA) + scrollbarWidth : void 0,\n        renderer: function renderer(instance, TD, row, col, prop, value, cellProperties) {\n          textRenderer(instance, TD, row, col, prop, value, cellProperties);\n          var _this3$cellProperties = _this3.cellProperties,\n              filteringCaseSensitive = _this3$cellProperties.filteringCaseSensitive,\n              allowHtml = _this3$cellProperties.allowHtml,\n              locale = _this3$cellProperties.locale;\n          var query = _this3.query;\n          var cellValue = stringify(value);\n          var indexOfMatch;\n          var match;\n\n          if (cellValue && !allowHtml) {\n            indexOfMatch = filteringCaseSensitive === true ? cellValue.indexOf(query) : cellValue.toLocaleLowerCase(locale).indexOf(query.toLocaleLowerCase(locale));\n\n            if (indexOfMatch !== -1) {\n              match = cellValue.substr(indexOfMatch, query.length);\n              cellValue = cellValue.replace(match, \"<strong>\".concat(match, \"</strong>\"));\n            }\n          }\n\n          TD.innerHTML = cellValue;\n        },\n        autoColumnSize: true\n      });\n\n      if (priv.skipOne) {\n        priv.skipOne = false;\n      }\n\n      this.hot._registerTimeout(function () {\n        _this3.queryChoices(_this3.TEXTAREA.value);\n      });\n    }\n    /**\n     * Closes the editor.\n     */\n\n  }, {\n    key: \"close\",\n    value: function close() {\n      this.removeHooksByKey('beforeKeyDown');\n\n      _get(_getPrototypeOf(AutocompleteEditor.prototype), \"close\", this).call(this);\n    }\n    /**\n     * Verifies result of validation or closes editor if user's cancelled changes.\n     *\n     * @param {boolean|undefined} result If `false` and the cell using allowInvalid option,\n     *                                   then an editor won't be closed until validation is passed.\n     */\n\n  }, {\n    key: \"discardEditor\",\n    value: function discardEditor(result) {\n      _get(_getPrototypeOf(AutocompleteEditor.prototype), \"discardEditor\", this).call(this, result);\n\n      this.hot.view.render();\n    }\n    /**\n     * Prepares choices list based on applied argument.\n     *\n     * @private\n     * @param {string} query The query.\n     */\n\n  }, {\n    key: \"queryChoices\",\n    value: function queryChoices(query) {\n      var _this4 = this;\n\n      var source = this.cellProperties.source;\n      this.query = query;\n\n      if (typeof source === 'function') {\n        source.call(this.cellProperties, query, function (choices) {\n          _this4.rawChoices = choices;\n\n          _this4.updateChoicesList(_this4.stripValuesIfNeeded(choices));\n        });\n      } else if (Array.isArray(source)) {\n        this.rawChoices = source;\n        this.updateChoicesList(this.stripValuesIfNeeded(source));\n      } else {\n        this.updateChoicesList([]);\n      }\n    }\n    /**\n     * Updates list of the possible completions to choose.\n     *\n     * @private\n     * @param {Array} choicesList The choices list to process.\n     */\n\n  }, {\n    key: \"updateChoicesList\",\n    value: function updateChoicesList(choicesList) {\n      var pos = getCaretPosition(this.TEXTAREA);\n      var endPos = getSelectionEndPosition(this.TEXTAREA);\n      var sortByRelevanceSetting = this.cellProperties.sortByRelevance;\n      var filterSetting = this.cellProperties.filter;\n      var orderByRelevance = null;\n      var highlightIndex = null;\n      var choices = choicesList;\n\n      if (sortByRelevanceSetting) {\n        orderByRelevance = this.sortByRelevance(this.stripValueIfNeeded(this.getValue()), choices, this.cellProperties.filteringCaseSensitive);\n      }\n\n      var orderByRelevanceLength = Array.isArray(orderByRelevance) ? orderByRelevance.length : 0;\n\n      if (filterSetting === false) {\n        if (orderByRelevanceLength) {\n          highlightIndex = orderByRelevance[0];\n        }\n      } else {\n        var sorted = [];\n\n        for (var i = 0, choicesCount = choices.length; i < choicesCount; i++) {\n          if (sortByRelevanceSetting && orderByRelevanceLength <= i) {\n            break;\n          }\n\n          if (orderByRelevanceLength) {\n            sorted.push(choices[orderByRelevance[i]]);\n          } else {\n            sorted.push(choices[i]);\n          }\n        }\n\n        highlightIndex = 0;\n        choices = sorted;\n      }\n\n      this.strippedChoices = choices;\n      this.htEditor.loadData(pivot([choices]));\n      this.updateDropdownHeight();\n      this.flipDropdownIfNeeded();\n\n      if (this.cellProperties.strict === true) {\n        this.highlightBestMatchingChoice(highlightIndex);\n      }\n\n      this.hot.listen();\n      setCaretPosition(this.TEXTAREA, pos, pos === endPos ? void 0 : endPos);\n    }\n    /**\n     * Checks where is enough place to open editor.\n     *\n     * @private\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"flipDropdownIfNeeded\",\n    value: function flipDropdownIfNeeded() {\n      var textareaOffset = offset(this.TEXTAREA);\n      var textareaHeight = outerHeight(this.TEXTAREA);\n      var dropdownHeight = this.getDropdownHeight();\n      var trimmingContainer = getTrimmingContainer(this.hot.view.wt.wtTable.TABLE);\n      var trimmingContainerScrollTop = trimmingContainer.scrollTop;\n      var headersHeight = outerHeight(this.hot.view.wt.wtTable.THEAD);\n      var containerOffset = {\n        row: 0,\n        col: 0\n      };\n\n      if (trimmingContainer !== this.hot.rootWindow) {\n        containerOffset = offset(trimmingContainer);\n      }\n\n      var spaceAbove = textareaOffset.top - containerOffset.top - headersHeight + trimmingContainerScrollTop;\n      var spaceBelow = trimmingContainer.scrollHeight - spaceAbove - headersHeight - textareaHeight;\n      var flipNeeded = dropdownHeight > spaceBelow && spaceAbove > spaceBelow;\n\n      if (flipNeeded) {\n        this.flipDropdown(dropdownHeight);\n      } else {\n        this.unflipDropdown();\n      }\n\n      this.limitDropdownIfNeeded(flipNeeded ? spaceAbove : spaceBelow, dropdownHeight);\n      return flipNeeded;\n    }\n    /**\n     * Checks if the internal table should generate scrollbar or could be rendered without it.\n     *\n     * @private\n     * @param {number} spaceAvailable The free space as height definded in px available for dropdown list.\n     * @param {number} dropdownHeight The dropdown height.\n     */\n\n  }, {\n    key: \"limitDropdownIfNeeded\",\n    value: function limitDropdownIfNeeded(spaceAvailable, dropdownHeight) {\n      if (dropdownHeight > spaceAvailable) {\n        var tempHeight = 0;\n        var i = 0;\n        var lastRowHeight = 0;\n        var height = null;\n\n        do {\n          lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view.wt.wtSettings.settings.defaultRowHeight;\n          tempHeight += lastRowHeight;\n          i += 1;\n        } while (tempHeight < spaceAvailable);\n\n        height = tempHeight - lastRowHeight;\n\n        if (this.htEditor.flipped) {\n          this.htEditor.rootElement.style.top = \"\".concat(parseInt(this.htEditor.rootElement.style.top, 10) + dropdownHeight - height, \"px\"); // eslint-disable-line max-len\n        }\n\n        this.setDropdownHeight(tempHeight - lastRowHeight);\n      }\n    }\n    /**\n     * Configures editor to open it at the top.\n     *\n     * @private\n     * @param {number} dropdownHeight The dropdown height.\n     */\n\n  }, {\n    key: \"flipDropdown\",\n    value: function flipDropdown(dropdownHeight) {\n      var dropdownStyle = this.htEditor.rootElement.style;\n      dropdownStyle.position = 'absolute';\n      dropdownStyle.top = \"\".concat(-dropdownHeight, \"px\");\n      this.htEditor.flipped = true;\n    }\n    /**\n     * Configures editor to open it at the bottom.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"unflipDropdown\",\n    value: function unflipDropdown() {\n      var dropdownStyle = this.htEditor.rootElement.style;\n\n      if (dropdownStyle.position === 'absolute') {\n        dropdownStyle.position = '';\n        dropdownStyle.top = '';\n      }\n\n      this.htEditor.flipped = void 0;\n    }\n    /**\n     * Updates width and height of the internal Handsontable's instance.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"updateDropdownHeight\",\n    value: function updateDropdownHeight() {\n      var currentDropdownWidth = this.htEditor.getColWidth(0) + getScrollbarWidth(this.hot.rootDocument) + 2;\n      var trimDropdown = this.cellProperties.trimDropdown;\n      this.htEditor.updateSettings({\n        height: this.getDropdownHeight(),\n        width: trimDropdown ? void 0 : currentDropdownWidth\n      });\n      this.htEditor.view.wt.wtTable.alignOverlaysWithTrimmingContainer();\n    }\n    /**\n     * Sets new height of the internal Handsontable's instance.\n     *\n     * @private\n     * @param {number} height The new dropdown height.\n     */\n\n  }, {\n    key: \"setDropdownHeight\",\n    value: function setDropdownHeight(height) {\n      this.htEditor.updateSettings({\n        height: height\n      });\n    }\n    /**\n     * Creates new selection on specified row index, or deselects selected cells.\n     *\n     * @private\n     * @param {number|undefined} index The visual row index.\n     */\n\n  }, {\n    key: \"highlightBestMatchingChoice\",\n    value: function highlightBestMatchingChoice(index) {\n      if (typeof index === 'number') {\n        this.htEditor.selectCell(index, 0, void 0, void 0, void 0, false);\n      } else {\n        this.htEditor.deselectCell();\n      }\n    }\n    /**\n     * Calculates and return the internal Handsontable's height.\n     *\n     * @private\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getDropdownHeight\",\n    value: function getDropdownHeight() {\n      var firstRowHeight = this.htEditor.getInstance().getRowHeight(0) || 23;\n      var visibleRows = this.cellProperties.visibleRows;\n      return this.strippedChoices.length >= visibleRows ? visibleRows * firstRowHeight : this.strippedChoices.length * firstRowHeight + 8; // eslint-disable-line max-len\n    }\n    /**\n     * Sanitizes value from potential dangerous tags.\n     *\n     * @private\n     * @param {string} value The value to sanitize.\n     * @returns {string}\n     */\n\n  }, {\n    key: \"stripValueIfNeeded\",\n    value: function stripValueIfNeeded(value) {\n      return this.stripValuesIfNeeded([value])[0];\n    }\n    /**\n     * Sanitizes an array of the values from potential dangerous tags.\n     *\n     * @private\n     * @param {string[]} values The value to sanitize.\n     * @returns {string[]}\n     */\n\n  }, {\n    key: \"stripValuesIfNeeded\",\n    value: function stripValuesIfNeeded(values) {\n      var allowHtml = this.cellProperties.allowHtml;\n      var stringifiedValues = arrayMap(values, function (value) {\n        return stringify(value);\n      });\n      var strippedValues = arrayMap(stringifiedValues, function (value) {\n        return allowHtml ? value : stripTags(value);\n      });\n      return strippedValues;\n    }\n    /**\n     * Captures use of arrow down and up to control their behaviour.\n     *\n     * @private\n     * @param {number} keyCode The keyboard keycode.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"allowKeyEventPropagation\",\n    value: function allowKeyEventPropagation(keyCode) {\n      var selectedRange = this.htEditor.getSelectedRangeLast();\n      var selected = {\n        row: selectedRange ? selectedRange.from.row : -1\n      };\n      var allowed = false;\n\n      if (keyCode === KEY_CODES.ARROW_DOWN && selected.row > 0 && selected.row < this.htEditor.countRows() - 1) {\n        allowed = true;\n      }\n\n      if (keyCode === KEY_CODES.ARROW_UP && selected.row > -1) {\n        allowed = true;\n      }\n\n      return allowed;\n    }\n    /**\n     * OnBeforeKeyDown callback.\n     *\n     * @private\n     * @param {KeyboardEvent} event The keyboard event object.\n     */\n\n  }, {\n    key: \"onBeforeKeyDown\",\n    value: function onBeforeKeyDown(event) {\n      var _this5 = this;\n\n      var priv = privatePool.get(this);\n      priv.skipOne = false;\n\n      if (isPrintableChar(event.keyCode) || event.keyCode === KEY_CODES.BACKSPACE || event.keyCode === KEY_CODES.DELETE || event.keyCode === KEY_CODES.INSERT) {\n        // for Windows 10 + FF86 there is need to add delay to make sure that the value taken from\n        // the textarea is the freshest value. Otherwise the list of choices does not update correctly (see #7570).\n        // On the more modern version of the FF (~ >=91) it seems that the issue is not present or it is\n        // more difficult to induce.\n        var timeOffset = 10; // on ctl+c / cmd+c don't update suggestion list\n\n        if (event.keyCode === KEY_CODES.C && (event.ctrlKey || event.metaKey)) {\n          return;\n        }\n\n        if (!this.isOpened()) {\n          timeOffset += 10;\n        }\n\n        if (this.htEditor) {\n          this.hot._registerTimeout(function () {\n            _this5.queryChoices(_this5.TEXTAREA.value);\n\n            priv.skipOne = true;\n          }, timeOffset);\n        }\n      }\n\n      _get(_getPrototypeOf(AutocompleteEditor.prototype), \"onBeforeKeyDown\", this).call(this, event);\n    }\n    /**\n     * Filters and sorts by relevance.\n     *\n     * @param {*} value The selected value.\n     * @param {string[]} choices The list of available choices.\n     * @param {boolean} caseSensitive Indicates if it's sorted by case.\n     * @returns {number[]} Array of indexes in original choices array.\n     */\n\n  }], [{\n    key: \"EDITOR_TYPE\",\n    get: function get() {\n      return EDITOR_TYPE;\n    }\n  }]);\n\n  return AutocompleteEditor;\n}(HandsontableEditor);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { TextEditor } from \"../textEditor/index.mjs\";\nimport { setCaretPosition } from \"../../helpers/dom/element.mjs\";\nimport { stopImmediatePropagation, isImmediatePropagationStopped } from \"../../helpers/dom/event.mjs\";\nimport { KEY_CODES } from \"../../helpers/unicode.mjs\";\nimport { extend } from \"../../helpers/object.mjs\";\nexport var EDITOR_TYPE = 'handsontable';\n/**\n * @private\n * @class HandsontableEditor\n */\n\nexport var HandsontableEditor = /*#__PURE__*/function (_TextEditor) {\n  _inherits(HandsontableEditor, _TextEditor);\n\n  var _super = _createSuper(HandsontableEditor);\n\n  function HandsontableEditor() {\n    _classCallCheck(this, HandsontableEditor);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(HandsontableEditor, [{\n    key: \"open\",\n    value:\n    /**\n     * Opens the editor and adjust its size.\n     */\n    function open() {\n      // this.addHook('beforeKeyDown', event => this.onBeforeKeyDown(event));\n      _get(_getPrototypeOf(HandsontableEditor.prototype), \"open\", this).call(this);\n\n      if (this.htEditor) {\n        this.htEditor.destroy();\n      }\n\n      if (this.htContainer.style.display === 'none') {\n        this.htContainer.style.display = '';\n      } // Construct and initialise a new Handsontable\n\n\n      this.htEditor = new this.hot.constructor(this.htContainer, this.htOptions);\n      this.htEditor.init();\n      this.htEditor.rootElement.style.display = '';\n\n      if (this.cellProperties.strict) {\n        this.htEditor.selectCell(0, 0);\n      } else {\n        this.htEditor.deselectCell();\n      }\n\n      setCaretPosition(this.TEXTAREA, 0, this.TEXTAREA.value.length);\n    }\n    /**\n     * Closes the editor.\n     */\n\n  }, {\n    key: \"close\",\n    value: function close() {\n      if (this.htEditor) {\n        this.htEditor.rootElement.style.display = 'none';\n      }\n\n      this.removeHooksByKey('beforeKeyDown');\n\n      _get(_getPrototypeOf(HandsontableEditor.prototype), \"close\", this).call(this);\n    }\n    /**\n     * Prepares editor's meta data and configuration of the internal Handsontable's instance.\n     *\n     * @param {number} row The visual row index.\n     * @param {number} col The visual column index.\n     * @param {number|string} prop The column property (passed when datasource is an array of objects).\n     * @param {HTMLTableCellElement} td The rendered cell element.\n     * @param {*} value The rendered value.\n     * @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).\n     */\n\n  }, {\n    key: \"prepare\",\n    value: function prepare(row, col, prop, td, value, cellProperties) {\n      _get(_getPrototypeOf(HandsontableEditor.prototype), \"prepare\", this).call(this, row, col, prop, td, value, cellProperties);\n\n      var parent = this;\n      var options = {\n        startRows: 0,\n        startCols: 0,\n        minRows: 0,\n        minCols: 0,\n        className: 'listbox',\n        copyPaste: false,\n        autoColumnSize: false,\n        autoRowSize: false,\n        readOnly: true,\n        fillHandle: false,\n        autoWrapCol: false,\n        autoWrapRow: false,\n        afterOnCellMouseDown: function afterOnCellMouseDown(_, coords) {\n          var sourceValue = this.getSourceData(coords.row, coords.col); // if the value is undefined then it means we don't want to set the value\n\n          if (sourceValue !== void 0) {\n            parent.setValue(sourceValue);\n          }\n\n          parent.instance.destroyEditor();\n        },\n        preventWheel: true\n      };\n\n      if (this.cellProperties.handsontable) {\n        extend(options, cellProperties.handsontable);\n      }\n\n      this.htOptions = options;\n    }\n    /**\n     * Begins editing on a highlighted cell and hides fillHandle corner if was present.\n     *\n     * @param {*} newInitialValue The editor initial value.\n     * @param {*} event The keyboard event object.\n     */\n\n  }, {\n    key: \"beginEditing\",\n    value: function beginEditing(newInitialValue, event) {\n      var onBeginEditing = this.hot.getSettings().onBeginEditing;\n\n      if (onBeginEditing && onBeginEditing() === false) {\n        return;\n      }\n\n      _get(_getPrototypeOf(HandsontableEditor.prototype), \"beginEditing\", this).call(this, newInitialValue, event);\n    }\n    /**\n     * Creates an editor's elements and adds necessary CSS classnames.\n     */\n\n  }, {\n    key: \"createElements\",\n    value: function createElements() {\n      _get(_getPrototypeOf(HandsontableEditor.prototype), \"createElements\", this).call(this);\n\n      var DIV = this.hot.rootDocument.createElement('DIV');\n      DIV.className = 'handsontableEditor';\n      this.TEXTAREA_PARENT.appendChild(DIV);\n      this.htContainer = DIV;\n      this.assignHooks();\n    }\n    /**\n     * Finishes editing and start saving or restoring process for editing cell or last selected range.\n     *\n     * @param {boolean} restoreOriginalValue If true, then closes editor without saving value from the editor into a cell.\n     * @param {boolean} ctrlDown If true, then saveValue will save editor's value to each cell in the last selected range.\n     * @param {Function} callback The callback function, fired after editor closing.\n     */\n\n  }, {\n    key: \"finishEditing\",\n    value: function finishEditing(restoreOriginalValue, ctrlDown, callback) {\n      if (this.htEditor && this.htEditor.isListening()) {\n        // if focus is still in the HOT editor\n        this.hot.listen(); // return the focus to the parent HOT instance\n      }\n\n      if (this.htEditor && this.htEditor.getSelectedLast()) {\n        var value = this.htEditor.getInstance().getValue();\n\n        if (value !== void 0) {\n          // if the value is undefined then it means we don't want to set the value\n          this.setValue(value);\n        }\n      }\n\n      _get(_getPrototypeOf(HandsontableEditor.prototype), \"finishEditing\", this).call(this, restoreOriginalValue, ctrlDown, callback);\n    }\n    /**\n     * Assings afterDestroy callback to prevent memory leaks.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"assignHooks\",\n    value: function assignHooks() {\n      var _this = this;\n\n      this.hot.addHook('afterDestroy', function () {\n        if (_this.htEditor) {\n          _this.htEditor.destroy();\n        }\n      });\n    }\n    /**\n     * OnBeforeKeyDown callback.\n     *\n     * @private\n     * @param {Event} event The keyboard event object.\n     */\n\n  }, {\n    key: \"onBeforeKeyDown\",\n    value: function onBeforeKeyDown(event) {\n      if (isImmediatePropagationStopped(event)) {\n        return;\n      }\n\n      var innerHOT = this.htEditor.getInstance();\n      var rowToSelect;\n      var selectedRow;\n\n      if (event.keyCode === KEY_CODES.ARROW_DOWN) {\n        if (!innerHOT.getSelectedLast() && !innerHOT.flipped) {\n          rowToSelect = 0;\n        } else if (innerHOT.getSelectedLast()) {\n          if (innerHOT.flipped) {\n            rowToSelect = innerHOT.getSelectedLast()[0] + 1;\n          } else if (!innerHOT.flipped) {\n            var lastRow = innerHOT.countRows() - 1;\n            selectedRow = innerHOT.getSelectedLast()[0];\n            rowToSelect = Math.min(lastRow, selectedRow + 1);\n          }\n        }\n      } else if (event.keyCode === KEY_CODES.ARROW_UP) {\n        if (!innerHOT.getSelectedLast() && innerHOT.flipped) {\n          rowToSelect = innerHOT.countRows() - 1;\n        } else if (innerHOT.getSelectedLast()) {\n          if (innerHOT.flipped) {\n            selectedRow = innerHOT.getSelectedLast()[0];\n            rowToSelect = Math.max(0, selectedRow - 1);\n          } else {\n            selectedRow = innerHOT.getSelectedLast()[0];\n            rowToSelect = selectedRow - 1;\n          }\n        }\n      }\n\n      if (rowToSelect !== void 0) {\n        if (rowToSelect < 0 || innerHOT.flipped && rowToSelect > innerHOT.countRows() - 1) {\n          innerHOT.deselectCell();\n        } else {\n          innerHOT.selectCell(rowToSelect, 0);\n        }\n\n        if (innerHOT.getData().length) {\n          event.preventDefault();\n          stopImmediatePropagation(event);\n          this.hot.listen();\n          this.TEXTAREA.focus();\n        }\n      }\n\n      _get(_getPrototypeOf(HandsontableEditor.prototype), \"onBeforeKeyDown\", this).call(this, event);\n    }\n  }], [{\n    key: \"EDITOR_TYPE\",\n    get: function get() {\n      return EDITOR_TYPE;\n    }\n  }]);\n\n  return HandsontableEditor;\n}(TextEditor);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BaseEditor } from \"../baseEditor/index.mjs\";\nimport { hasClass } from \"../../helpers/dom/element.mjs\";\nexport var EDITOR_TYPE = 'checkbox';\n/**\n * @private\n * @class CheckboxEditor\n */\n\nexport var CheckboxEditor = /*#__PURE__*/function (_BaseEditor) {\n  _inherits(CheckboxEditor, _BaseEditor);\n\n  var _super = _createSuper(CheckboxEditor);\n\n  function CheckboxEditor() {\n    _classCallCheck(this, CheckboxEditor);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(CheckboxEditor, [{\n    key: \"beginEditing\",\n    value: function beginEditing(initialValue, event) {\n      // Just some events connected with checkbox editor are delegated here. Some `keydown` events like `enter` and `space` key press\n      // are handled inside `checkboxRenderer`. Some events come here from `editorManager`. Below `if` statement was created by author\n      // for purpose of handling only `doubleclick` event which may be done on a cell with checkbox.\n      if (event && event.type === 'mouseup') {\n        var checkbox = this.TD.querySelector('input[type=\"checkbox\"]');\n\n        if (!hasClass(checkbox, 'htBadValue')) {\n          checkbox.click();\n        }\n      }\n    }\n  }, {\n    key: \"finishEditing\",\n    value: function finishEditing() {}\n  }, {\n    key: \"init\",\n    value: function init() {}\n  }, {\n    key: \"open\",\n    value: function open() {}\n  }, {\n    key: \"close\",\n    value: function close() {}\n  }, {\n    key: \"getValue\",\n    value: function getValue() {}\n  }, {\n    key: \"setValue\",\n    value: function setValue() {}\n  }, {\n    key: \"focus\",\n    value: function focus() {}\n  }], [{\n    key: \"EDITOR_TYPE\",\n    get: function get() {\n      return EDITOR_TYPE;\n    }\n  }]);\n\n  return CheckboxEditor;\n}(BaseEditor);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport moment from 'moment';\nimport Pikaday from 'pikaday';\nimport { TextEditor } from \"../textEditor/index.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { addClass, outerHeight } from \"../../helpers/dom/element.mjs\";\nimport { deepExtend } from \"../../helpers/object.mjs\";\nimport { isFunctionKey } from \"../../helpers/unicode.mjs\";\nexport var EDITOR_TYPE = 'date';\n/**\n * @private\n * @class DateEditor\n */\n\nexport var DateEditor = /*#__PURE__*/function (_TextEditor) {\n  _inherits(DateEditor, _TextEditor);\n\n  var _super = _createSuper(DateEditor);\n\n  /**\n   * @param {Core} hotInstance Handsontable instance.\n   * @private\n   */\n  function DateEditor(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, DateEditor);\n\n    _this = _super.call(this, hotInstance); // TODO: Move this option to general settings\n\n    _this.defaultDateFormat = 'DD/MM/YYYY';\n    _this.isCellEdited = false;\n    _this.parentDestroyed = false;\n    _this.$datePicker = null;\n    return _this;\n  }\n\n  _createClass(DateEditor, [{\n    key: \"init\",\n    value: function init() {\n      var _this2 = this;\n\n      if (typeof moment !== 'function') {\n        throw new Error('You need to include moment.js to your project.');\n      }\n\n      if (typeof Pikaday !== 'function') {\n        throw new Error('You need to include Pikaday to your project.');\n      }\n\n      _get(_getPrototypeOf(DateEditor.prototype), \"init\", this).call(this);\n\n      this.instance.addHook('afterDestroy', function () {\n        _this2.parentDestroyed = true;\n\n        _this2.destroyElements();\n      });\n    }\n    /**\n     * Create data picker instance.\n     */\n\n  }, {\n    key: \"createElements\",\n    value: function createElements() {\n      _get(_getPrototypeOf(DateEditor.prototype), \"createElements\", this).call(this);\n\n      this.datePicker = this.hot.rootDocument.createElement('DIV');\n      this.datePickerStyle = this.datePicker.style;\n      this.datePickerStyle.position = 'absolute';\n      this.datePickerStyle.top = 0;\n      this.datePickerStyle.left = 0;\n      this.datePickerStyle.zIndex = 9999;\n      addClass(this.datePicker, 'htDatepickerHolder');\n      this.hot.rootDocument.body.appendChild(this.datePicker);\n      var eventManager = new EventManager(this);\n      /**\n       * Prevent recognizing clicking on datepicker as clicking outside of table.\n       */\n\n      eventManager.addEventListener(this.datePicker, 'mousedown', function (event) {\n        return event.stopPropagation();\n      });\n    }\n    /**\n     * Destroy data picker instance.\n     */\n\n  }, {\n    key: \"destroyElements\",\n    value: function destroyElements() {\n      var datePickerParentElement = this.datePicker.parentNode;\n\n      if (this.$datePicker) {\n        this.$datePicker.destroy();\n      }\n\n      if (datePickerParentElement) {\n        datePickerParentElement.removeChild(this.datePicker);\n      }\n    }\n    /**\n     * Prepare editor to appear.\n     *\n     * @param {number} row The visual row index.\n     * @param {number} col The visual column index.\n     * @param {number|string} prop The column property (passed when datasource is an array of objects).\n     * @param {HTMLTableCellElement} td The rendered cell element.\n     * @param {*} value The rendered value.\n     * @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).\n     */\n\n  }, {\n    key: \"prepare\",\n    value: function prepare(row, col, prop, td, value, cellProperties) {\n      _get(_getPrototypeOf(DateEditor.prototype), \"prepare\", this).call(this, row, col, prop, td, value, cellProperties);\n    }\n    /**\n     * Open editor.\n     *\n     * @param {Event} [event=null] The event object.\n     */\n\n  }, {\n    key: \"open\",\n    value: function open() {\n      var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      _get(_getPrototypeOf(DateEditor.prototype), \"open\", this).call(this);\n\n      this.showDatepicker(event);\n    }\n    /**\n     * Close editor.\n     */\n\n  }, {\n    key: \"close\",\n    value: function close() {\n      var _this$$datePicker,\n          _this3 = this;\n\n      this._opened = false; // If the date picker was never initialized (e.g. during autofill), there's nothing to destroy.\n\n      if ((_this$$datePicker = this.$datePicker) !== null && _this$$datePicker !== void 0 && _this$$datePicker.destroy) {\n        this.$datePicker.destroy();\n      }\n\n      this.instance._registerTimeout(function () {\n        _this3.instance._refreshBorders();\n      });\n\n      _get(_getPrototypeOf(DateEditor.prototype), \"close\", this).call(this);\n    }\n    /**\n     * Finishes editing and start saving or restoring process for editing cell or last selected range.\n     *\n     * @param {boolean} restoreOriginalValue If true, then closes editor without saving value from the editor into a cell.\n     * @param {boolean} ctrlDown If true, then saveValue will save editor's value to each cell in the last selected range.\n     */\n\n  }, {\n    key: \"finishEditing\",\n    value: function finishEditing() {\n      var restoreOriginalValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var ctrlDown = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (restoreOriginalValue) {\n        // pressed ESC, restore original value\n        // var value = this.instance.getDataAtCell(this.row, this.col);\n        var value = this.originalValue;\n\n        if (value !== void 0) {\n          this.setValue(value);\n        }\n      }\n\n      _get(_getPrototypeOf(DateEditor.prototype), \"finishEditing\", this).call(this, restoreOriginalValue, ctrlDown);\n    }\n    /**\n     * Show data picker.\n     *\n     * @param {Event} event The event object.\n     */\n\n  }, {\n    key: \"showDatepicker\",\n    value: function showDatepicker(event) {\n      var offset = this.TD.getBoundingClientRect();\n      var dateFormat = this.cellProperties.dateFormat || this.defaultDateFormat;\n      var isMouseDown = this.instance.view.isMouseDown();\n      var isMeta = event ? isFunctionKey(event.keyCode) : false;\n      var dateStr;\n      this.datePickerStyle.top = \"\".concat(this.hot.rootWindow.pageYOffset + offset.top + outerHeight(this.TD), \"px\");\n      this.datePickerStyle.left = \"\".concat(this.hot.rootWindow.pageXOffset + offset.left, \"px\");\n      this.$datePicker = new Pikaday(this.getDatePickerConfig());\n\n      this.$datePicker._onInputFocus = function () {};\n\n      if (this.originalValue) {\n        dateStr = this.originalValue;\n\n        if (moment(dateStr, dateFormat, true).isValid()) {\n          this.$datePicker.setMoment(moment(dateStr, dateFormat), true);\n        } // workaround for date/time cells - pikaday resets the cell value to 12:00 AM by default, this will overwrite the value.\n\n\n        if (this.getValue() !== this.originalValue) {\n          this.setValue(this.originalValue);\n        }\n\n        if (!isMeta && !isMouseDown) {\n          this.setValue('');\n        }\n      } else if (this.cellProperties.defaultDate) {\n        dateStr = this.cellProperties.defaultDate;\n\n        if (moment(dateStr, dateFormat, true).isValid()) {\n          this.$datePicker.setMoment(moment(dateStr, dateFormat), true);\n        }\n\n        if (!isMeta && !isMouseDown) {\n          this.setValue('');\n        }\n      } else {\n        // if a default date is not defined, set a soft-default-date: display the current day and month in the\n        // datepicker, but don't fill the editor input\n        this.$datePicker.gotoToday();\n      }\n\n      this.datePickerStyle.display = 'block';\n    }\n    /**\n     * Hide data picker.\n     */\n\n  }, {\n    key: \"hideDatepicker\",\n    value: function hideDatepicker() {\n      this.datePickerStyle.display = 'none';\n      this.$datePicker.hide();\n    }\n    /**\n     * Get date picker options.\n     *\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getDatePickerConfig\",\n    value: function getDatePickerConfig() {\n      var _this4 = this;\n\n      var htInput = this.TEXTAREA;\n      var options = {};\n\n      if (this.cellProperties && this.cellProperties.datePickerConfig) {\n        deepExtend(options, this.cellProperties.datePickerConfig);\n      }\n\n      var origOnSelect = options.onSelect;\n      var origOnClose = options.onClose;\n      options.field = htInput;\n      options.trigger = htInput;\n      options.container = this.datePicker;\n      options.bound = false;\n      options.format = options.format || this.defaultDateFormat;\n      options.reposition = options.reposition || false;\n\n      options.onSelect = function (value) {\n        var dateStr = value;\n\n        if (!isNaN(dateStr.getTime())) {\n          dateStr = moment(dateStr).format(_this4.cellProperties.dateFormat || _this4.defaultDateFormat);\n        }\n\n        _this4.setValue(dateStr);\n\n        _this4.hideDatepicker();\n\n        if (origOnSelect) {\n          origOnSelect();\n        }\n      };\n\n      options.onClose = function () {\n        if (!_this4.parentDestroyed) {\n          _this4.finishEditing(false);\n        }\n\n        if (origOnClose) {\n          origOnClose();\n        }\n      };\n\n      return options;\n    }\n  }], [{\n    key: \"EDITOR_TYPE\",\n    get: function get() {\n      return EDITOR_TYPE;\n    }\n  }]);\n\n  return DateEditor;\n}(TextEditor);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { AutocompleteEditor } from \"../autocompleteEditor/index.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nexport var EDITOR_TYPE = 'dropdown';\n/**\n * @private\n * @class DropdownEditor\n */\n\nexport var DropdownEditor = /*#__PURE__*/function (_AutocompleteEditor) {\n  _inherits(DropdownEditor, _AutocompleteEditor);\n\n  var _super = _createSuper(DropdownEditor);\n\n  function DropdownEditor() {\n    _classCallCheck(this, DropdownEditor);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(DropdownEditor, [{\n    key: \"prepare\",\n    value:\n    /**\n     * @param {number} row The visual row index.\n     * @param {number} col The visual column index.\n     * @param {number|string} prop The column property (passed when datasource is an array of objects).\n     * @param {HTMLTableCellElement} td The rendered cell element.\n     * @param {*} value The rendered value.\n     * @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).\n     */\n    function prepare(row, col, prop, td, value, cellProperties) {\n      _get(_getPrototypeOf(DropdownEditor.prototype), \"prepare\", this).call(this, row, col, prop, td, value, cellProperties);\n\n      this.cellProperties.filter = false;\n      this.cellProperties.strict = true;\n    }\n  }], [{\n    key: \"EDITOR_TYPE\",\n    get: function get() {\n      return EDITOR_TYPE;\n    }\n  }]);\n\n  return DropdownEditor;\n}(AutocompleteEditor);\nHooks.getSingleton().add('beforeValidate', function (value, row, col) {\n  var cellMeta = this.getCellMeta(row, this.propToCol(col));\n\n  if (cellMeta.editor === DropdownEditor) {\n    if (cellMeta.strict === void 0) {\n      cellMeta.filter = false;\n      cellMeta.strict = true;\n    }\n  }\n});", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { TextEditor } from \"../textEditor/index.mjs\";\nexport var EDITOR_TYPE = 'numeric';\n/**\n * @private\n * @class NumericEditor\n */\n\nexport var NumericEditor = /*#__PURE__*/function (_TextEditor) {\n  _inherits(NumericEditor, _TextEditor);\n\n  var _super = _createSuper(NumericEditor);\n\n  function NumericEditor() {\n    _classCallCheck(this, NumericEditor);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(NumericEditor, null, [{\n    key: \"EDITOR_TYPE\",\n    get: function get() {\n      return EDITOR_TYPE;\n    }\n  }]);\n\n  return NumericEditor;\n}(TextEditor);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { TextEditor } from \"../textEditor/index.mjs\";\nimport { empty } from \"../../helpers/dom/element.mjs\";\nexport var EDITOR_TYPE = 'password';\n/**\n * @private\n * @class PasswordEditor\n */\n\nexport var PasswordEditor = /*#__PURE__*/function (_TextEditor) {\n  _inherits(PasswordEditor, _TextEditor);\n\n  var _super = _createSuper(PasswordEditor);\n\n  function PasswordEditor() {\n    _classCallCheck(this, PasswordEditor);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(PasswordEditor, [{\n    key: \"createElements\",\n    value: function createElements() {\n      _get(_getPrototypeOf(PasswordEditor.prototype), \"createElements\", this).call(this);\n\n      this.TEXTAREA = this.hot.rootDocument.createElement('input');\n      this.TEXTAREA.setAttribute('type', 'password');\n      this.TEXTAREA.setAttribute('data-hot-input', ''); // Makes the element recognizable by Hot as its own component's element.\n\n      this.TEXTAREA.className = 'handsontableInput';\n      this.textareaStyle = this.TEXTAREA.style;\n      this.textareaStyle.width = 0;\n      this.textareaStyle.height = 0;\n      empty(this.TEXTAREA_PARENT);\n      this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);\n    }\n  }], [{\n    key: \"EDITOR_TYPE\",\n    get: function get() {\n      return EDITOR_TYPE;\n    }\n  }]);\n\n  return PasswordEditor;\n}(TextEditor);", "import \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BaseEditor, EDITOR_STATE } from \"../baseEditor/index.mjs\";\nimport { addClass, empty, fastInnerHTML, getComputedStyle, getCssTransform, hasClass, offset, outerHeight, outerWidth, removeClass, resetCssTransform } from \"../../helpers/dom/element.mjs\";\nimport { stopImmediatePropagation } from \"../../helpers/dom/event.mjs\";\nimport { objectEach } from \"../../helpers/object.mjs\";\nimport { KEY_CODES } from \"../../helpers/unicode.mjs\";\nvar EDITOR_VISIBLE_CLASS_NAME = 'ht_editor_visible';\nexport var EDITOR_TYPE = 'select';\n/**\n * @private\n * @class SelectEditor\n */\n\nexport var SelectEditor = /*#__PURE__*/function (_BaseEditor) {\n  _inherits(SelectEditor, _BaseEditor);\n\n  var _super = _createSuper(SelectEditor);\n\n  function SelectEditor() {\n    _classCallCheck(this, SelectEditor);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(SelectEditor, [{\n    key: \"init\",\n    value:\n    /**\n     * Initializes editor instance, DOM Element and mount hooks.\n     */\n    function init() {\n      this.select = this.hot.rootDocument.createElement('SELECT');\n      addClass(this.select, 'htSelectEditor');\n      this.select.style.display = 'none';\n      this.hot.rootElement.appendChild(this.select);\n      this.registerHooks();\n    }\n    /**\n     * Returns select's value.\n     *\n     * @returns {*}\n     */\n\n  }, {\n    key: \"getValue\",\n    value: function getValue() {\n      return this.select.value;\n    }\n    /**\n     * Sets value in the select element.\n     *\n     * @param {*} value A new select's value.\n     */\n\n  }, {\n    key: \"setValue\",\n    value: function setValue(value) {\n      this.select.value = value;\n    }\n    /**\n     * Opens the editor and adjust its size.\n     */\n\n  }, {\n    key: \"open\",\n    value: function open() {\n      var _this = this;\n\n      this._opened = true;\n      this.refreshDimensions();\n      this.select.style.display = '';\n      this.addHook('beforeKeyDown', function () {\n        return _this.onBeforeKeyDown();\n      });\n    }\n    /**\n     * Closes the editor.\n     */\n\n  }, {\n    key: \"close\",\n    value: function close() {\n      this._opened = false;\n      this.select.style.display = 'none';\n\n      if (hasClass(this.select, EDITOR_VISIBLE_CLASS_NAME)) {\n        removeClass(this.select, EDITOR_VISIBLE_CLASS_NAME);\n      }\n\n      this.clearHooks();\n    }\n    /**\n     * Sets focus state on the select element.\n     */\n\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      this.select.focus();\n    }\n    /**\n     * Binds hooks to refresh editor's size after scrolling of the viewport or resizing of columns/rows.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"registerHooks\",\n    value: function registerHooks() {\n      var _this2 = this;\n\n      this.addHook('afterScrollHorizontally', function () {\n        return _this2.refreshDimensions();\n      });\n      this.addHook('afterScrollVertically', function () {\n        return _this2.refreshDimensions();\n      });\n      this.addHook('afterColumnResize', function () {\n        return _this2.refreshDimensions();\n      });\n      this.addHook('afterRowResize', function () {\n        return _this2.refreshDimensions();\n      });\n    }\n    /**\n     * Prepares editor's meta data and a list of available options.\n     *\n     * @param {number} row The visual row index.\n     * @param {number} col The visual column index.\n     * @param {number|string} prop The column property (passed when datasource is an array of objects).\n     * @param {HTMLTableCellElement} td The rendered cell element.\n     * @param {*} value The rendered value.\n     * @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).\n     */\n\n  }, {\n    key: \"prepare\",\n    value: function prepare(row, col, prop, td, value, cellProperties) {\n      var _this3 = this;\n\n      _get(_getPrototypeOf(SelectEditor.prototype), \"prepare\", this).call(this, row, col, prop, td, value, cellProperties);\n\n      var selectOptions = this.cellProperties.selectOptions;\n      var options;\n\n      if (typeof selectOptions === 'function') {\n        options = this.prepareOptions(selectOptions(this.row, this.col, this.prop));\n      } else {\n        options = this.prepareOptions(selectOptions);\n      }\n\n      empty(this.select);\n      objectEach(options, function (optionValue, key) {\n        var optionElement = _this3.hot.rootDocument.createElement('OPTION');\n\n        optionElement.value = key;\n        fastInnerHTML(optionElement, optionValue);\n\n        _this3.select.appendChild(optionElement);\n      });\n    }\n    /**\n     * Creates consistent list of available options.\n     *\n     * @private\n     * @param {Array|object} optionsToPrepare The list of the values to render in the select eleemnt.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"prepareOptions\",\n    value: function prepareOptions(optionsToPrepare) {\n      var preparedOptions = {};\n\n      if (Array.isArray(optionsToPrepare)) {\n        for (var i = 0, len = optionsToPrepare.length; i < len; i++) {\n          preparedOptions[optionsToPrepare[i]] = optionsToPrepare[i];\n        }\n      } else if (_typeof(optionsToPrepare) === 'object') {\n        preparedOptions = optionsToPrepare;\n      }\n\n      return preparedOptions;\n    }\n    /**\n     * Refreshes editor's value using source data.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"refreshValue\",\n    value: function refreshValue() {\n      var sourceData = this.hot.getSourceDataAtCell(this.row, this.prop);\n      this.originalValue = sourceData;\n      this.setValue(sourceData);\n      this.refreshDimensions();\n    }\n    /**\n     * Refreshes editor's size and position.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"refreshDimensions\",\n    value: function refreshDimensions() {\n      if (this.state !== EDITOR_STATE.EDITING) {\n        return;\n      }\n\n      this.TD = this.getEditedCell(); // TD is outside of the viewport.\n\n      if (!this.TD) {\n        this.close();\n        return;\n      }\n\n      var wtOverlays = this.hot.view.wt.wtOverlays;\n      var currentOffset = offset(this.TD);\n      var containerOffset = offset(this.hot.rootElement);\n      var scrollableContainer = wtOverlays.scrollableElement;\n      var editorSection = this.checkEditorSection();\n      var width = outerWidth(this.TD) + 1;\n      var height = outerHeight(this.TD) + 1;\n      var editTop = currentOffset.top - containerOffset.top - 1 - (scrollableContainer.scrollTop || 0);\n      var editLeft = currentOffset.left - containerOffset.left - 1 - (scrollableContainer.scrollLeft || 0);\n      var cssTransformOffset;\n\n      switch (editorSection) {\n        case 'top':\n          cssTransformOffset = getCssTransform(wtOverlays.topOverlay.clone.wtTable.holder.parentNode);\n          break;\n\n        case 'left':\n          cssTransformOffset = getCssTransform(wtOverlays.leftOverlay.clone.wtTable.holder.parentNode);\n          break;\n\n        case 'top-left-corner':\n          cssTransformOffset = getCssTransform(wtOverlays.topLeftCornerOverlay.clone.wtTable.holder.parentNode);\n          break;\n\n        case 'bottom-left-corner':\n          cssTransformOffset = getCssTransform(wtOverlays.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode);\n          break;\n\n        case 'bottom':\n          cssTransformOffset = getCssTransform(wtOverlays.bottomOverlay.clone.wtTable.holder.parentNode);\n          break;\n\n        default:\n          break;\n      }\n\n      var renderableRow = this.hot.rowIndexMapper.getRenderableFromVisualIndex(this.row);\n      var renderableColumn = this.hot.columnIndexMapper.getRenderableFromVisualIndex(this.col);\n      var nrOfRenderableRowIndexes = this.hot.rowIndexMapper.getRenderableIndexesLength();\n      var firstRowIndexOfTheBottomOverlay = nrOfRenderableRowIndexes - this.hot.view.wt.getSetting('fixedRowsBottom');\n\n      if (renderableRow <= 0 || renderableRow === firstRowIndexOfTheBottomOverlay) {\n        editTop += 1;\n      }\n\n      if (renderableColumn <= 0) {\n        editLeft += 1;\n      }\n\n      var selectStyle = this.select.style;\n\n      if (cssTransformOffset && cssTransformOffset !== -1) {\n        selectStyle[cssTransformOffset[0]] = cssTransformOffset[1];\n      } else {\n        resetCssTransform(this.select);\n      }\n\n      var cellComputedStyle = getComputedStyle(this.TD, this.hot.rootWindow);\n\n      if (parseInt(cellComputedStyle.borderTopWidth, 10) > 0) {\n        height -= 1;\n      }\n\n      if (parseInt(cellComputedStyle.borderLeftWidth, 10) > 0) {\n        width -= 1;\n      }\n\n      selectStyle.height = \"\".concat(height, \"px\");\n      selectStyle.minWidth = \"\".concat(width, \"px\");\n      selectStyle.top = \"\".concat(editTop, \"px\");\n      selectStyle.left = \"\".concat(editLeft, \"px\");\n      selectStyle.margin = '0px';\n      addClass(this.select, EDITOR_VISIBLE_CLASS_NAME);\n    }\n    /**\n     * OnBeforeKeyDown callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onBeforeKeyDown\",\n    value: function onBeforeKeyDown() {\n      var previousOptionIndex = this.select.selectedIndex - 1;\n      var nextOptionIndex = this.select.selectedIndex + 1;\n\n      switch (event.keyCode) {\n        case KEY_CODES.ARROW_UP:\n          if (previousOptionIndex >= 0) {\n            this.select[previousOptionIndex].selected = true;\n          }\n\n          stopImmediatePropagation(event);\n          event.preventDefault();\n          break;\n\n        case KEY_CODES.ARROW_DOWN:\n          if (nextOptionIndex <= this.select.length - 1) {\n            this.select[nextOptionIndex].selected = true;\n          }\n\n          stopImmediatePropagation(event);\n          event.preventDefault();\n          break;\n\n        default:\n          break;\n      }\n    }\n  }], [{\n    key: \"EDITOR_TYPE\",\n    get: function get() {\n      return EDITOR_TYPE;\n    }\n  }]);\n\n  return SelectEditor;\n}(BaseEditor);", "import { AutocompleteEditor, EDITOR_TYPE as AUTOCOMPLETE_EDITOR } from \"./autocompleteEditor/index.mjs\";\nimport { BaseEditor, EDITOR_TYPE as BASE_EDITOR } from \"./baseEditor/index.mjs\";\nimport { CheckboxEditor, EDITOR_TYPE as CHECKBOX_EDITOR } from \"./checkboxEditor/index.mjs\";\nimport { DateEditor, EDITOR_TYPE as DATE_EDITOR } from \"./dateEditor/index.mjs\";\nimport { DropdownEditor, EDITOR_TYPE as DROPDOWN_EDITOR } from \"./dropdownEditor/index.mjs\";\nimport { HandsontableEditor, EDITOR_TYPE as HANDSONTABLE_EDITOR } from \"./handsontableEditor/index.mjs\";\nimport { NumericEditor, EDITOR_TYPE as NUMERIC_EDITOR } from \"./numericEditor/index.mjs\";\nimport { PasswordEditor, EDITOR_TYPE as PASSWORD_EDITOR } from \"./passwordEditor/index.mjs\";\nimport { SelectEditor, EDITOR_TYPE as SELECT_EDITOR } from \"./selectEditor/index.mjs\";\nimport { TextEditor, EDITOR_TYPE as TEXT_EDITOR } from \"./textEditor/index.mjs\";\nimport { registerEditor } from \"./registry.mjs\";\n/**\n * Registers all available editors.\n */\n\nexport function registerAllEditors() {\n  registerEditor(BaseEditor);\n  registerEditor(AutocompleteEditor);\n  registerEditor(CheckboxEditor);\n  registerEditor(DateEditor);\n  registerEditor(DropdownEditor);\n  registerEditor(HandsontableEditor);\n  registerEditor(NumericEditor);\n  registerEditor(PasswordEditor);\n  registerEditor(SelectEditor);\n  registerEditor(TextEditor);\n}\nexport { AutocompleteEditor, AUTOCOMPLETE_EDITOR, BaseEditor, BASE_EDITOR, CheckboxEditor, CHECKBOX_EDITOR, DateEditor, DATE_EDITOR, DropdownEditor, DROPDOWN_EDITOR, HandsontableEditor, HANDSONTABLE_EDITOR, NumericEditor, NUMERIC_EDITOR, PasswordEditor, PASSWORD_EDITOR, SelectEditor, SELECT_EDITOR, TextEditor, TEXT_EDITOR };\nexport { RegisteredEditor, _getEditorInstance, getEditor, getEditorInstance, getRegisteredEditorNames, getRegisteredEditors, hasEditor, registerEditor } from \"./registry.mjs\";", "import { baseRenderer } from \"../baseRenderer/index.mjs\";\nimport { fastInnerHTML } from \"../../helpers/dom/element.mjs\";\nexport var RENDERER_TYPE = 'html';\n/**\n * @private\n * @param {Core} instance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).\n */\n\nexport function htmlRenderer(instance, TD, row, col, prop, value, cellProperties) {\n  baseRenderer.apply(this, [instance, TD, row, col, prop, value, cellProperties]);\n  fastInnerHTML(TD, value === null || value === void 0 ? '' : value, false);\n}\nhtmlRenderer.RENDERER_TYPE = RENDERER_TYPE;", "import { htmlRenderer } from \"../htmlRenderer/index.mjs\";\nimport { textRenderer } from \"../textRenderer/index.mjs\";\nimport { CellCoords } from \"../../3rdparty/walkontable/src/index.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { addClass, hasClass } from \"../../helpers/dom/element.mjs\";\nexport var RENDERER_TYPE = 'autocomplete';\n/**\n * Autocomplete renderer.\n *\n * @private\n * @param {Core} instance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).\n */\n\nexport function autocompleteRenderer(instance, TD, row, col, prop, value, cellProperties) {\n  var rootDocument = instance.rootDocument;\n  var rendererFunc = cellProperties.allowHtml ? htmlRenderer : textRenderer;\n  var ARROW = rootDocument.createElement('DIV');\n  ARROW.className = 'htAutocompleteArrow';\n  ARROW.appendChild(rootDocument.createTextNode(String.fromCharCode(9660)));\n  rendererFunc.apply(this, [instance, TD, row, col, prop, value, cellProperties]);\n\n  if (!TD.firstChild) {\n    // http://jsperf.com/empty-node-if-needed\n    // otherwise empty fields appear borderless in demo/renderers.html (IE)\n    TD.appendChild(rootDocument.createTextNode(String.fromCharCode(160))); // workaround for https://github.com/handsontable/handsontable/issues/1946\n    // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n  }\n\n  TD.insertBefore(ARROW, TD.firstChild);\n  addClass(TD, 'htAutocomplete');\n\n  if (!instance.acArrowListener) {\n    var eventManager = new EventManager(instance); // not very elegant but easy and fast\n\n    instance.acArrowListener = function (event) {\n      if (hasClass(event.target, 'htAutocompleteArrow')) {\n        instance.view.wt.getSetting('onCellDblClick', null, new CellCoords(row, col), TD);\n      }\n    };\n\n    eventManager.addEventListener(instance.rootElement, 'mousedown', instance.acArrowListener); // We need to unbind the listener after the table has been destroyed\n\n    instance.addHookOnce('afterDestroy', function () {\n      eventManager.destroy();\n    });\n  }\n}\nautocompleteRenderer.RENDERER_TYPE = RENDERER_TYPE;", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/web.timers.js\";\nimport { baseRenderer } from \"../baseRenderer/index.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { empty, addClass } from \"../../helpers/dom/element.mjs\";\nimport { stopImmediatePropagation, isImmediatePropagationStopped } from \"../../helpers/dom/event.mjs\";\nimport { partial } from \"../../helpers/function.mjs\";\nimport { isEmpty, stringify } from \"../../helpers/mixed.mjs\";\nimport { isKey } from \"../../helpers/unicode.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nvar isListeningKeyDownEvent = new WeakMap();\nvar isCheckboxListenerAdded = new WeakMap();\nvar BAD_VALUE_CLASS = 'htBadValue';\nvar ATTR_ROW = 'data-row';\nvar ATTR_COLUMN = 'data-col';\nexport var RENDERER_TYPE = 'checkbox';\nHooks.getSingleton().add('modifyAutoColumnSizeSeed', function (bundleSeed, cellMeta, cellValue) {\n  var label = cellMeta.label,\n      type = cellMeta.type,\n      row = cellMeta.row,\n      column = cellMeta.column,\n      prop = cellMeta.prop;\n\n  if (type !== RENDERER_TYPE) {\n    return;\n  }\n\n  if (label) {\n    var labelValue = label.value,\n        labelProperty = label.property;\n    var labelText = cellValue;\n\n    if (labelValue) {\n      labelText = typeof labelValue === 'function' ? labelValue(row, column, prop, cellValue) : labelValue;\n    } else if (labelProperty) {\n      var labelData = this.getDataAtRowProp(row, labelProperty);\n      labelText = labelData !== null ? labelData : cellValue;\n    }\n\n    bundleSeed = labelText;\n  }\n\n  return bundleSeed;\n});\n/**\n * Checkbox renderer.\n *\n * @private\n * @param {Core} instance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).\n */\n\nexport function checkboxRenderer(instance, TD, row, col, prop, value, cellProperties) {\n  var rootDocument = instance.rootDocument;\n  baseRenderer.apply(this, [instance, TD, row, col, prop, value, cellProperties]);\n  registerEvents(instance);\n  var input = createInput(rootDocument);\n  var labelOptions = cellProperties.label;\n  var badValue = false;\n\n  if (typeof cellProperties.checkedTemplate === 'undefined') {\n    cellProperties.checkedTemplate = true;\n  }\n\n  if (typeof cellProperties.uncheckedTemplate === 'undefined') {\n    cellProperties.uncheckedTemplate = false;\n  }\n\n  empty(TD); // TODO identify under what circumstances this line can be removed\n\n  if (value === cellProperties.checkedTemplate || stringify(value).toLocaleLowerCase(cellProperties.locale) === stringify(cellProperties.checkedTemplate).toLocaleLowerCase(cellProperties.locale)) {\n    input.checked = true;\n  } else if (value === cellProperties.uncheckedTemplate || stringify(value).toLocaleLowerCase(cellProperties.locale) === stringify(cellProperties.uncheckedTemplate).toLocaleLowerCase(cellProperties.locale)) {\n    input.checked = false;\n  } else if (isEmpty(value)) {\n    // default value\n    addClass(input, 'noValue');\n  } else {\n    input.style.display = 'none';\n    addClass(input, BAD_VALUE_CLASS);\n    badValue = true;\n  }\n\n  input.setAttribute(ATTR_ROW, row);\n  input.setAttribute(ATTR_COLUMN, col);\n\n  if (!badValue && labelOptions) {\n    var labelText = '';\n\n    if (labelOptions.value) {\n      labelText = typeof labelOptions.value === 'function' ? labelOptions.value.call(this, row, col, prop, value) : labelOptions.value;\n    } else if (labelOptions.property) {\n      var labelValue = instance.getDataAtRowProp(row, labelOptions.property);\n      labelText = labelValue !== null ? labelValue : '';\n    }\n\n    var label = createLabel(rootDocument, labelText, labelOptions.separated !== true);\n\n    if (labelOptions.position === 'before') {\n      if (labelOptions.separated) {\n        TD.appendChild(label);\n        TD.appendChild(input);\n      } else {\n        label.appendChild(input);\n        input = label;\n      }\n    } else if (!labelOptions.position || labelOptions.position === 'after') {\n      if (labelOptions.separated) {\n        TD.appendChild(input);\n        TD.appendChild(label);\n      } else {\n        label.insertBefore(input, label.firstChild);\n        input = label;\n      }\n    }\n  }\n\n  if (!labelOptions || labelOptions && !labelOptions.separated) {\n    TD.appendChild(input);\n  }\n\n  if (badValue) {\n    TD.appendChild(rootDocument.createTextNode('#bad-value#'));\n  }\n\n  if (!isListeningKeyDownEvent.has(instance)) {\n    isListeningKeyDownEvent.set(instance, true);\n    instance.addHook('beforeKeyDown', onBeforeKeyDown);\n  }\n  /**\n   * On before key down DOM listener.\n   *\n   * @private\n   * @param {Event} event The keyboard event object.\n   */\n\n\n  function onBeforeKeyDown(event) {\n    var toggleKeys = 'SPACE|ENTER';\n    var switchOffKeys = 'DELETE|BACKSPACE';\n    var isKeyCode = partial(isKey, event.keyCode);\n\n    if (!instance.getSettings().enterBeginsEditing && isKeyCode('ENTER')) {\n      return;\n    }\n\n    if (isKeyCode(\"\".concat(toggleKeys, \"|\").concat(switchOffKeys)) && !isImmediatePropagationStopped(event)) {\n      eachSelectedCheckboxCell(function () {\n        stopImmediatePropagation(event);\n        event.preventDefault();\n      });\n    }\n\n    if (isKeyCode(toggleKeys)) {\n      changeSelectedCheckboxesState();\n    }\n\n    if (isKeyCode(switchOffKeys)) {\n      changeSelectedCheckboxesState(true);\n    }\n  }\n  /**\n   * Change checkbox checked property.\n   *\n   * @private\n   * @param {boolean} [uncheckCheckbox=false] The new \"checked\" state for the checkbox elements.\n   */\n\n\n  function changeSelectedCheckboxesState() {\n    var uncheckCheckbox = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var selRange = instance.getSelectedRange();\n\n    if (!selRange) {\n      return;\n    }\n\n    for (var key = 0; key < selRange.length; key++) {\n      var _selRange$key$getTopL = selRange[key].getTopLeftCorner(),\n          startRow = _selRange$key$getTopL.row,\n          startColumn = _selRange$key$getTopL.col;\n\n      var _selRange$key$getBott = selRange[key].getBottomRightCorner(),\n          endRow = _selRange$key$getBott.row,\n          endColumn = _selRange$key$getBott.col;\n\n      var changes = [];\n\n      for (var visualRow = startRow; visualRow <= endRow; visualRow += 1) {\n        for (var visualColumn = startColumn; visualColumn <= endColumn; visualColumn += 1) {\n          var cachedCellProperties = instance.getCellMeta(visualRow, visualColumn);\n\n          if (cachedCellProperties.type !== 'checkbox') {\n            return;\n          }\n          /* eslint-disable no-continue */\n\n\n          if (cachedCellProperties.readOnly === true) {\n            continue;\n          }\n\n          if (typeof cachedCellProperties.checkedTemplate === 'undefined') {\n            cachedCellProperties.checkedTemplate = true;\n          }\n\n          if (typeof cachedCellProperties.uncheckedTemplate === 'undefined') {\n            cachedCellProperties.uncheckedTemplate = false;\n          }\n\n          var dataAtCell = instance.getDataAtCell(visualRow, visualColumn);\n\n          if (uncheckCheckbox === false) {\n            if ([cachedCellProperties.checkedTemplate, cachedCellProperties.checkedTemplate.toString()].includes(dataAtCell)) {\n              // eslint-disable-line max-len\n              changes.push([visualRow, visualColumn, cachedCellProperties.uncheckedTemplate]);\n            } else if ([cachedCellProperties.uncheckedTemplate, cachedCellProperties.uncheckedTemplate.toString(), null, void 0].includes(dataAtCell)) {\n              // eslint-disable-line max-len\n              changes.push([visualRow, visualColumn, cachedCellProperties.checkedTemplate]);\n            }\n          } else {\n            changes.push([visualRow, visualColumn, cachedCellProperties.uncheckedTemplate]);\n          }\n        }\n      }\n\n      if (changes.length > 0) {\n        instance.setDataAtCell(changes);\n      }\n    }\n  }\n  /**\n   * Call callback for each found selected cell with checkbox type.\n   *\n   * @private\n   * @param {Function} callback The callback function.\n   */\n\n\n  function eachSelectedCheckboxCell(callback) {\n    var selRange = instance.getSelectedRange();\n\n    if (!selRange) {\n      return;\n    }\n\n    for (var key = 0; key < selRange.length; key++) {\n      var topLeft = selRange[key].getTopLeftCorner();\n      var bottomRight = selRange[key].getBottomRightCorner();\n\n      for (var visualRow = topLeft.row; visualRow <= bottomRight.row; visualRow++) {\n        for (var visualColumn = topLeft.col; visualColumn <= bottomRight.col; visualColumn++) {\n          var cachedCellProperties = instance.getCellMeta(visualRow, visualColumn);\n\n          if (cachedCellProperties.type !== 'checkbox') {\n            return;\n          }\n\n          var cell = instance.getCell(visualRow, visualColumn);\n\n          if (cell === null || cell === void 0) {\n            callback(visualRow, visualColumn, cachedCellProperties);\n          } else {\n            var checkboxes = cell.querySelectorAll('input[type=checkbox]');\n\n            if (checkboxes.length > 0 && !cachedCellProperties.readOnly) {\n              callback(checkboxes);\n            }\n          }\n        }\n      }\n    }\n  }\n}\ncheckboxRenderer.RENDERER_TYPE = RENDERER_TYPE;\n/**\n * Register checkbox listeners.\n *\n * @param {Core} instance The Handsontable instance.\n * @returns {EventManager}\n */\n\nfunction registerEvents(instance) {\n  var eventManager = isCheckboxListenerAdded.get(instance);\n\n  if (!eventManager) {\n    var rootElement = instance.rootElement;\n    eventManager = new EventManager(instance);\n    eventManager.addEventListener(rootElement, 'click', function (event) {\n      return onClick(event, instance);\n    });\n    eventManager.addEventListener(rootElement, 'mouseup', function (event) {\n      return onMouseUp(event, instance);\n    });\n    eventManager.addEventListener(rootElement, 'change', function (event) {\n      return onChange(event, instance);\n    });\n    isCheckboxListenerAdded.set(instance, eventManager);\n  }\n\n  return eventManager;\n}\n/**\n * Create input element.\n *\n * @param {Document} rootDocument The document owner.\n * @returns {Node}\n */\n\n\nfunction createInput(rootDocument) {\n  var input = rootDocument.createElement('input');\n  input.className = 'htCheckboxRendererInput';\n  input.type = 'checkbox';\n  input.setAttribute('autocomplete', 'off');\n  input.setAttribute('tabindex', '-1');\n  return input.cloneNode(false);\n}\n/**\n * Create label element.\n *\n * @param {Document} rootDocument The document owner.\n * @param {string} text The label text.\n * @param {boolean} fullWidth Determines whether label should have full width.\n * @returns {Node}\n */\n\n\nfunction createLabel(rootDocument, text, fullWidth) {\n  var label = rootDocument.createElement('label');\n  label.className = \"htCheckboxRendererLabel \".concat(fullWidth ? 'fullWidth' : '');\n  label.appendChild(rootDocument.createTextNode(text));\n  return label.cloneNode(true);\n}\n/**\n * `mouseup` callback.\n *\n * @private\n * @param {Event} event `mouseup` event.\n * @param {Core} instance The Handsontable instance.\n */\n\n\nfunction onMouseUp(event, instance) {\n  var target = event.target;\n\n  if (!isCheckboxInput(target)) {\n    return;\n  }\n\n  if (!target.hasAttribute(ATTR_ROW) || !target.hasAttribute(ATTR_COLUMN)) {\n    return;\n  }\n\n  setTimeout(instance.listen, 10);\n}\n/**\n * `click` callback.\n *\n * @private\n * @param {MouseEvent} event `click` event.\n * @param {Core} instance The Handsontable instance.\n */\n\n\nfunction onClick(event, instance) {\n  var target = event.target;\n\n  if (!isCheckboxInput(target)) {\n    return;\n  }\n\n  if (!target.hasAttribute(ATTR_ROW) || !target.hasAttribute(ATTR_COLUMN)) {\n    return;\n  }\n\n  var row = parseInt(target.getAttribute(ATTR_ROW), 10);\n  var col = parseInt(target.getAttribute(ATTR_COLUMN), 10);\n  var cellProperties = instance.getCellMeta(row, col);\n\n  if (cellProperties.readOnly) {\n    event.preventDefault();\n  }\n}\n/**\n * `change` callback.\n *\n * @param {Event} event `change` event.\n * @param {Core} instance The Handsontable instance.\n */\n\n\nfunction onChange(event, instance) {\n  var target = event.target;\n\n  if (!isCheckboxInput(target)) {\n    return;\n  }\n\n  if (!target.hasAttribute(ATTR_ROW) || !target.hasAttribute(ATTR_COLUMN)) {\n    return;\n  }\n\n  var row = parseInt(target.getAttribute(ATTR_ROW), 10);\n  var col = parseInt(target.getAttribute(ATTR_COLUMN), 10);\n  var cellProperties = instance.getCellMeta(row, col);\n\n  if (!cellProperties.readOnly) {\n    var newCheckboxValue = null;\n\n    if (event.target.checked) {\n      newCheckboxValue = cellProperties.uncheckedTemplate === void 0 ? true : cellProperties.checkedTemplate;\n    } else {\n      newCheckboxValue = cellProperties.uncheckedTemplate === void 0 ? false : cellProperties.uncheckedTemplate;\n    }\n\n    instance.setDataAtCell(row, col, newCheckboxValue);\n  }\n}\n/**\n * Check if the provided element is the checkbox input.\n *\n * @private\n * @param {HTMLElement} element The element in question.\n * @returns {boolean}\n */\n\n\nfunction isCheckboxInput(element) {\n  return element.tagName === 'INPUT' && element.getAttribute('type') === 'checkbox';\n}", "import \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport numbro from 'numbro';\nimport { textRenderer } from \"../textRenderer/index.mjs\";\nimport { isNumeric } from \"../../helpers/number.mjs\";\nexport var RENDERER_TYPE = 'numeric';\n/**\n * Numeric cell renderer.\n *\n * @private\n * @param {Core} instance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).\n */\n\nexport function numericRenderer(instance, TD, row, col, prop, value, cellProperties) {\n  var newValue = value;\n\n  if (isNumeric(newValue)) {\n    var numericFormat = cellProperties.numericFormat;\n    var cellCulture = numericFormat && numericFormat.culture || '-';\n    var cellFormatPattern = numericFormat && numericFormat.pattern;\n    var className = cellProperties.className || '';\n    var classArr = className.length ? className.split(' ') : [];\n\n    if (typeof cellCulture !== 'undefined' && !numbro.languages()[cellCulture]) {\n      var shortTag = cellCulture.replace('-', '');\n      var langData = numbro.allLanguages ? numbro.allLanguages[cellCulture] : numbro[shortTag];\n\n      if (langData) {\n        numbro.registerLanguage(langData);\n      }\n    }\n\n    numbro.setLanguage(cellCulture);\n    newValue = numbro(newValue).format(cellFormatPattern || '0');\n\n    if (classArr.indexOf('htLeft') < 0 && classArr.indexOf('htCenter') < 0 && classArr.indexOf('htRight') < 0 && classArr.indexOf('htJustify') < 0) {\n      classArr.push('htRight');\n    }\n\n    if (classArr.indexOf('htNumeric') < 0) {\n      classArr.push('htNumeric');\n    }\n\n    cellProperties.className = classArr.join(' ');\n  }\n\n  textRenderer(instance, TD, row, col, prop, newValue, cellProperties);\n}\nnumericRenderer.RENDERER_TYPE = RENDERER_TYPE;", "import { textRenderer } from \"../textRenderer/index.mjs\";\nimport { fastInnerHTML } from \"../../helpers/dom/element.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nexport var RENDERER_TYPE = 'password';\n/**\n * @private\n * @param {Core} instance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).\n */\n\nexport function passwordRenderer(instance, TD, row, col, prop, value, cellProperties) {\n  textRenderer.apply(this, [instance, TD, row, col, prop, value, cellProperties]);\n  var hashLength = cellProperties.hashLength || TD.innerHTML.length;\n  var hashSymbol = cellProperties.hashSymbol || '*';\n  var hash = '';\n  rangeEach(hashLength - 1, function () {\n    hash += hashSymbol;\n  });\n  fastInnerHTML(TD, hash);\n}\npasswordRenderer.RENDERER_TYPE = RENDERER_TYPE;", "import { autocompleteRenderer, RENDERER_TYPE as AUTOCOMPLETE_RENDERER } from \"./autocompleteRenderer/index.mjs\";\nimport { baseRenderer, RENDERER_TYPE as BASE_RENDERER } from \"./baseRenderer/index.mjs\";\nimport { checkboxRenderer, RENDERER_TYPE as CHECKBOX_RENDERER } from \"./checkboxRenderer/index.mjs\";\nimport { htmlRenderer, RENDERER_TYPE as HTML_RENDERER } from \"./htmlRenderer/index.mjs\";\nimport { numericRenderer, RENDERER_TYPE as NUMERIC_RENDERER } from \"./numericRenderer/index.mjs\";\nimport { passwordRenderer, RENDERER_TYPE as PASSWORD_RENDERER } from \"./passwordRenderer/index.mjs\";\nimport { textRenderer, RENDERER_TYPE as TEXT_RENDERER } from \"./textRenderer/index.mjs\";\nimport { registerRenderer } from \"./registry.mjs\";\n/**\n * Registers all available renderers.\n */\n\nexport function registerAllRenderers() {\n  registerRenderer(autocompleteRenderer);\n  registerRenderer(baseRenderer);\n  registerRenderer(checkboxRenderer);\n  registerRenderer(htmlRenderer);\n  registerRenderer(numericRenderer);\n  registerRenderer(passwordRenderer);\n  registerRenderer(textRenderer);\n}\nexport { autocompleteRenderer, AUTOCOMPLETE_RENDERER, baseRenderer, BASE_RENDERER, checkboxRenderer, CHECKBOX_RENDERER, htmlRenderer, HTML_RENDERER, numericRenderer, NUMERIC_RENDERER, passwordRenderer, PASSWORD_RENDERER, textRenderer, TEXT_RENDERER };\nexport { getRegisteredRendererNames, getRegisteredRenderers, getRenderer, hasRenderer, registerRenderer } from \"./registry.mjs\";", "export var VALIDATOR_TYPE = 'autocomplete';\n/**\n * The Autocomplete cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\n\nexport function autocompleteValidator(value, callback) {\n  var valueToValidate = value;\n\n  if (valueToValidate === null || valueToValidate === void 0) {\n    valueToValidate = '';\n  }\n\n  if (this.allowEmpty && valueToValidate === '') {\n    callback(true);\n    return;\n  }\n\n  if (this.strict && this.source) {\n    if (typeof this.source === 'function') {\n      this.source(valueToValidate, process(valueToValidate, callback));\n    } else {\n      process(valueToValidate, callback)(this.source);\n    }\n  } else {\n    callback(true);\n  }\n}\nautocompleteValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;\n/**\n * Function responsible for validation of autocomplete value.\n *\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n * @returns {Function}\n */\n\nfunction process(value, callback) {\n  var originalVal = value;\n  return function (source) {\n    var found = false;\n\n    for (var s = 0, slen = source.length; s < slen; s++) {\n      if (originalVal === source[s]) {\n        found = true; // perfect match\n\n        break;\n      }\n    }\n\n    callback(found);\n  };\n}", "import \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.search.js\";\nimport moment from 'moment';\nimport { getEditorInstance } from \"../../editors/registry.mjs\";\nimport { EDITOR_TYPE as DATE_EDITOR_TYPE } from \"../../editors/dateEditor/index.mjs\";\nimport { getNormalizedDate } from \"../../helpers/date.mjs\";\nexport var VALIDATOR_TYPE = 'date';\n/**\n * The Date cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\n\nexport function dateValidator(value, callback) {\n  var dateEditor = getEditorInstance(DATE_EDITOR_TYPE, this.instance);\n  var valueToValidate = value;\n  var valid = true;\n\n  if (valueToValidate === null || valueToValidate === void 0) {\n    valueToValidate = '';\n  }\n\n  var isValidFormat = moment(valueToValidate, this.dateFormat || dateEditor.defaultDateFormat, true).isValid();\n  var isValidDate = moment(new Date(valueToValidate)).isValid() || isValidFormat;\n\n  if (this.allowEmpty && valueToValidate === '') {\n    isValidDate = true;\n    isValidFormat = true;\n  }\n\n  if (!isValidDate) {\n    valid = false;\n  }\n\n  if (!isValidDate && isValidFormat) {\n    valid = true;\n  }\n\n  if (isValidDate && !isValidFormat) {\n    if (this.correctFormat === true) {\n      // if format correction is enabled\n      var correctedValue = correctFormat(valueToValidate, this.dateFormat);\n      var row = this.instance.toVisualRow(this.row);\n      var column = this.instance.toVisualColumn(this.col);\n      this.instance.setDataAtCell(row, column, correctedValue, 'dateValidator');\n      valid = true;\n    } else {\n      valid = false;\n    }\n  }\n\n  callback(valid);\n}\ndateValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;\n/**\n * Format the given string using moment.js' format feature.\n *\n * @param {string} value The value to format.\n * @param {string} dateFormat The date pattern to format to.\n * @returns {string}\n */\n\nexport function correctFormat(value, dateFormat) {\n  var dateFromDate = moment(getNormalizedDate(value));\n  var dateFromMoment = moment(value, dateFormat);\n  var isAlphanumeric = value.search(/[A-z]/g) > -1;\n  var date;\n\n  if (dateFromDate.isValid() && dateFromDate.format('x') === dateFromMoment.format('x') || !dateFromMoment.isValid() || isAlphanumeric) {\n    date = dateFromDate;\n  } else {\n    date = dateFromMoment;\n  }\n\n  return date.format(dateFormat);\n}", "'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar sameValue = require('../internals/same-value');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@search logic\nfixRegExpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCallNative) {\n  return [\n    // `String.prototype.search` method\n    // https://tc39.es/ecma262/#sec-string.prototype.search\n    function search(regexp) {\n      var O = requireObjectCoercible(this);\n      var searcher = regexp == undefined ? undefined : getMethod(regexp, SEARCH);\n      return searcher ? call(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString(O));\n    },\n    // `RegExp.prototype[@@search]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@search\n    function (string) {\n      var rx = anObject(this);\n      var S = toString(string);\n      var res = maybeCallNative(nativeSearch, rx, S);\n\n      if (res.done) return res.value;\n\n      var previousLastIndex = rx.lastIndex;\n      if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n      var result = regExpExec(rx, S);\n      if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n      return result === null ? -1 : result.index;\n    }\n  ];\n});\n", "/**\n * Get normalized Date object for the ISO formatted date strings.\n * Natively, the date object parsed from a ISO 8601 string will be offsetted by the timezone difference, which may result in returning a wrong date.\n * See: Github issue #3338.\n *\n * @param {string} dateString String representing the date.\n * @returns {Date} The proper Date object.\n */\nexport function getNormalizedDate(dateString) {\n  var nativeDate = new Date(dateString); // NaN if dateString is not in ISO format\n\n  if (!isNaN(new Date(\"\".concat(dateString, \"T00:00\")).getDate())) {\n    // Compensate timezone offset\n    return new Date(nativeDate.getTime() + nativeDate.getTimezoneOffset() * 60000);\n  }\n\n  return nativeDate;\n}", "import { isNumeric } from \"../../helpers/number.mjs\";\nexport var VALIDATOR_TYPE = 'numeric';\n/**\n * The Numeric cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\n\nexport function numericValidator(value, callback) {\n  var valueToValidate = value;\n\n  if (valueToValidate === null || valueToValidate === void 0) {\n    valueToValidate = '';\n  }\n\n  if (this.allowEmpty && valueToValidate === '') {\n    callback(true);\n  } else if (valueToValidate === '') {\n    callback(false);\n  } else {\n    callback(isNumeric(value));\n  }\n}\nnumericValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;", "import \"core-js/modules/es.regexp.exec.js\";\nimport moment from 'moment'; // Formats which are correctly parsed to time (supported by momentjs)\n\nvar STRICT_FORMATS = ['YYYY-MM-DDTHH:mm:ss.SSSZ', 'X', // Unix timestamp\n'x' // Unix ms timestamp\n];\nexport var VALIDATOR_TYPE = 'time';\n/**\n * The Time cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\n\nexport function timeValidator(value, callback) {\n  var timeFormat = this.timeFormat || 'h:mm:ss a';\n  var valid = true;\n  var valueToValidate = value;\n\n  if (valueToValidate === null) {\n    valueToValidate = '';\n  }\n\n  valueToValidate = /^\\d{3,}$/.test(valueToValidate) ? parseInt(valueToValidate, 10) : valueToValidate;\n  var twoDigitValue = /^\\d{1,2}$/.test(valueToValidate);\n\n  if (twoDigitValue) {\n    valueToValidate += ':00';\n  }\n\n  var date = moment(valueToValidate, STRICT_FORMATS, true).isValid() ? moment(valueToValidate) : moment(valueToValidate, timeFormat);\n  var isValidTime = date.isValid(); // is it in the specified format\n\n  var isValidFormat = moment(valueToValidate, timeFormat, true).isValid() && !twoDigitValue;\n\n  if (this.allowEmpty && valueToValidate === '') {\n    isValidTime = true;\n    isValidFormat = true;\n  }\n\n  if (!isValidTime) {\n    valid = false;\n  }\n\n  if (!isValidTime && isValidFormat) {\n    valid = true;\n  }\n\n  if (isValidTime && !isValidFormat) {\n    if (this.correctFormat === true) {\n      // if format correction is enabled\n      var correctedValue = date.format(timeFormat);\n      var row = this.instance.toVisualRow(this.row);\n      var column = this.instance.toVisualColumn(this.col);\n      this.instance.setDataAtCell(row, column, correctedValue, 'timeValidator');\n      valid = true;\n    } else {\n      valid = false;\n    }\n  }\n\n  callback(valid);\n}\ntimeValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;", "import { autocompleteValidator, VALIDATOR_TYPE as AUTOCOMPLETE_VALIDATOR } from \"./autocompleteValidator/index.mjs\";\nimport { dateValidator, VALIDATOR_TYPE as DATE_VALIDATOR } from \"./dateValidator/index.mjs\";\nimport { numericValidator, VALIDATOR_TYPE as NUMERIC_VALIDATOR } from \"./numericValidator/index.mjs\";\nimport { timeValidator, VALIDATOR_TYPE as TIME_VALIDATOR } from \"./timeValidator/index.mjs\";\nimport { registerValidator } from \"./registry.mjs\";\n/**\n * Registers all available validators.\n */\n\nexport function registerAllValidators() {\n  registerValidator(autocompleteValidator);\n  registerValidator(dateValidator);\n  registerValidator(numericValidator);\n  registerValidator(timeValidator);\n}\nexport { autocompleteValidator, AUTOCOMPLETE_VALIDATOR, dateValidator, DATE_VALIDATOR, numericValidator, NUMERIC_VALIDATOR, timeValidator, TIME_VALIDATOR };\nexport { getRegisteredValidatorNames, getRegisteredValidators, getValidator, hasValidator, registerValidator } from \"./registry.mjs\";", "import { AutocompleteEditor } from \"../../editors/autocompleteEditor/index.mjs\";\nimport { autocompleteRenderer } from \"../../renderers/autocompleteRenderer/index.mjs\";\nimport { autocompleteValidator } from \"../../validators/autocompleteValidator/index.mjs\";\nexport var CELL_TYPE = 'autocomplete';\nexport var AutocompleteCellType = {\n  CELL_TYPE: CELL_TYPE,\n  editor: AutocompleteEditor,\n  renderer: autocompleteRenderer,\n  validator: autocompleteValidator\n};", "import { CheckboxEditor } from \"../../editors/checkboxEditor/index.mjs\";\nimport { checkboxRenderer } from \"../../renderers/checkboxRenderer/index.mjs\";\nexport var CELL_TYPE = 'checkbox';\nexport var CheckboxCellType = {\n  CELL_TYPE: CELL_TYPE,\n  editor: CheckboxEditor,\n  renderer: checkboxRenderer\n};", "import { DateEditor } from \"../../editors/dateEditor/index.mjs\";\nimport { autocompleteRenderer } from \"../../renderers/autocompleteRenderer/index.mjs\";\nimport { dateValidator } from \"../../validators/dateValidator/index.mjs\";\nexport var CELL_TYPE = 'date';\nexport var DateCellType = {\n  CELL_TYPE: CELL_TYPE,\n  editor: DateEditor,\n  // displays small gray arrow on right side of the cell\n  renderer: autocompleteRenderer,\n  validator: dateValidator\n};", "import { DropdownEditor } from \"../../editors/dropdownEditor/index.mjs\";\nimport { autocompleteRenderer } from \"../../renderers/autocompleteRenderer/index.mjs\";\nimport { autocompleteValidator } from \"../../validators/autocompleteValidator/index.mjs\";\nexport var CELL_TYPE = 'dropdown';\nexport var DropdownCellType = {\n  CELL_TYPE: CELL_TYPE,\n  editor: DropdownEditor,\n  // displays small gray arrow on right side of the cell\n  renderer: autocompleteRenderer,\n  validator: autocompleteValidator\n};", "import { HandsontableEditor } from \"../../editors/handsontableEditor/index.mjs\";\nimport { autocompleteRenderer } from \"../../renderers/autocompleteRenderer/index.mjs\";\nexport var CELL_TYPE = 'handsontable';\nexport var HandsontableCellType = {\n  CELL_TYPE: CELL_TYPE,\n  editor: HandsontableEditor,\n  // displays small gray arrow on right side of the cell\n  renderer: autocompleteRenderer\n};", "import { NumericEditor } from \"../../editors/numericEditor/index.mjs\";\nimport { numericRenderer } from \"../../renderers/numericRenderer/index.mjs\";\nimport { numericValidator } from \"../../validators/numericValidator/index.mjs\";\nexport var CELL_TYPE = 'numeric';\nexport var NumericCellType = {\n  CELL_TYPE: CELL_TYPE,\n  editor: NumericEditor,\n  renderer: numericRenderer,\n  validator: numericValidator,\n  dataType: 'number'\n};", "import { PasswordEditor } from \"../../editors/passwordEditor/index.mjs\";\nimport { passwordRenderer } from \"../../renderers/passwordRenderer/index.mjs\";\nexport var CELL_TYPE = 'password';\nexport var PasswordCellType = {\n  CELL_TYPE: CELL_TYPE,\n  editor: PasswordEditor,\n  renderer: passwordRenderer,\n  copyable: false\n};", "import { TextEditor } from \"../../editors/textEditor/index.mjs\";\nimport { textRenderer } from \"../../renderers/textRenderer/index.mjs\";\nimport { timeValidator } from \"../../validators/timeValidator/index.mjs\";\nexport var CELL_TYPE = 'time';\nexport var TimeCellType = {\n  CELL_TYPE: CELL_TYPE,\n  editor: TextEditor,\n  // displays small gray arrow on right side of the cell\n  renderer: textRenderer,\n  validator: timeValidator\n};", "import { AutocompleteCellType, CELL_TYPE as AUTOCOMPLETE_TYPE } from \"./autocompleteType/index.mjs\";\nimport { CheckboxCellType, CELL_TYPE as CHECKBOX_TYPE } from \"./checkboxType/index.mjs\";\nimport { DateCellType, CELL_TYPE as DATE_TYPE } from \"./dateType/index.mjs\";\nimport { DropdownCellType, CELL_TYPE as DROPDOWN_TYPE } from \"./dropdownType/index.mjs\";\nimport { HandsontableCellType, CELL_TYPE as HANDSONTABLE_TYPE } from \"./handsontableType/index.mjs\";\nimport { NumericCellType, CELL_TYPE as NUMERIC_TYPE } from \"./numericType/index.mjs\";\nimport { PasswordCellType, CELL_TYPE as PASSWORD_TYPE } from \"./passwordType/index.mjs\";\nimport { TextCellType, CELL_TYPE as TEXT_TYPE } from \"./textType/index.mjs\";\nimport { TimeCellType, CELL_TYPE as TIME_TYPE } from \"./timeType/index.mjs\";\nimport { registerCellType } from \"./registry.mjs\";\n/**\n * Registers all available cell types.\n */\n\nexport function registerAllCellTypes() {\n  registerCellType(AutocompleteCellType);\n  registerCellType(CheckboxCellType);\n  registerCellType(DateCellType);\n  registerCellType(DropdownCellType);\n  registerCellType(HandsontableCellType);\n  registerCellType(NumericCellType);\n  registerCellType(PasswordCellType);\n  registerCellType(TextCellType);\n  registerCellType(TimeCellType);\n}\nexport { AutocompleteCellType, AUTOCOMPLETE_TYPE, CheckboxCellType, CHECKBOX_TYPE, DateCellType, DATE_TYPE, DropdownCellType, DROPDOWN_TYPE, HandsontableCellType, HANDSONTABLE_TYPE, NumericCellType, NUMERIC_TYPE, PasswordCellType, PASSWORD_TYPE, TextCellType, TEXT_TYPE, TimeCellType, TIME_TYPE };\nexport { getCellType, getRegisteredCellTypeNames, getRegisteredCellTypes, hasCellType, registerCellType } from \"./registry.mjs\";", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { arrayEach, arrayFilter, arrayReduce, arrayMap } from \"../../helpers/array.mjs\";\nimport { cancelAnimationFrame, requestAnimationFrame } from \"../../helpers/feature.mjs\";\nimport GhostTable from \"../../utils/ghostTable.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nimport { isObject, hasOwnProperty } from \"../../helpers/object.mjs\";\nimport { valueAccordingPercent, rangeEach } from \"../../helpers/number.mjs\";\nimport SamplesGenerator from \"../../utils/samplesGenerator.mjs\";\nimport { isPercentValue } from \"../../helpers/string.mjs\";\nimport { ViewportColumnsCalculator } from \"../../3rdparty/walkontable/src/index.mjs\";\nimport { PhysicalIndexToValueMap as IndexToValueMap } from \"../../translations/index.mjs\";\nimport { isDefined } from \"../../helpers/mixed.mjs\";\nHooks.getSingleton().register('modifyAutoColumnSizeSeed');\nexport var PLUGIN_KEY = 'autoColumnSize';\nexport var PLUGIN_PRIORITY = 10;\nvar privatePool = new WeakMap();\nvar COLUMN_SIZE_MAP_NAME = 'autoColumnSize';\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin AutoColumnSize\n * @class AutoColumnSize\n *\n * @description\n * This plugin allows to set column widths based on their widest cells.\n *\n * By default, the plugin is declared as `undefined`, which makes it enabled (same as if it was declared as `true`).\n * Enabling this plugin may decrease the overall table performance, as it needs to calculate the widths of all cells to\n * resize the columns accordingly.\n * If you experience problems with the performance, try turning this feature off and declaring the column widths manually.\n *\n * Column width calculations are divided into sync and async part. Each of this parts has their own advantages and\n * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous\n * operations don't block the browser UI.\n *\n * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value to a config object:\n *\n * ```js\n * // as a number (300 columns in sync, rest async)\n * autoColumnSize: {syncLimit: 300},.\n *\n * // as a string (percent)\n * autoColumnSize: {syncLimit: '40%'},\n * ```\n *\n * The plugin uses {@link GhostTable} and {@link SamplesGenerator} for calculations.\n * First, {@link SamplesGenerator} prepares samples of data with its coordinates.\n * Next {@link GhostTable} uses coordinates to get cells' renderers and append all to the DOM through DocumentFragment.\n *\n * Sampling accepts additional options:\n * - *samplingRatio* - Defines how many samples for the same length will be used to calculate. Default is `3`.\n *\n * ```js\n *   autoColumnSize: {\n *     samplingRatio: 10,\n *   }\n * ```\n *\n * - *allowSampleDuplicates* - Defines if duplicated values might be used in sampling. Default is `false`.\n *\n * ```js\n *   autoColumnSize: {\n *     allowSampleDuplicates: true,\n *   }\n * ```\n *\n * To configure this plugin see {@link Options#autoColumnSize}.\n *\n * @example\n *\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *   data: getData(),\n *   autoColumnSize: true\n * });\n * // Access to plugin instance:\n * const plugin = hot.getPlugin('autoColumnSize');\n *\n * plugin.getColumnWidth(4);\n *\n * if (plugin.isEnabled()) {\n *   // code...\n * }\n * ```\n */\n\n/* eslint-enable jsdoc/require-description-complete-sentence */\n\nexport var AutoColumnSize = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(AutoColumnSize, _BasePlugin);\n\n  var _super = _createSuper(AutoColumnSize);\n\n  function AutoColumnSize(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, AutoColumnSize);\n\n    _this = _super.call(this, hotInstance);\n    privatePool.set(_assertThisInitialized(_this), {\n      /**\n       * Cached column header names. It is used to diff current column headers with previous state and detect which\n       * columns width should be updated.\n       *\n       * @private\n       * @type {Array}\n       */\n      cachedColumnHeaders: []\n    });\n    /**\n     * Instance of {@link GhostTable} for rows and columns size calculations.\n     *\n     * @private\n     * @type {GhostTable}\n     */\n\n    _this.ghostTable = new GhostTable(_this.hot);\n    /**\n     * Instance of {@link SamplesGenerator} for generating samples necessary for columns width calculations.\n     *\n     * @private\n     * @type {SamplesGenerator}\n     * @fires Hooks#modifyAutoColumnSizeSeed\n     */\n\n    _this.samplesGenerator = new SamplesGenerator(function (row, column) {\n      var cellMeta = _this.hot.getCellMeta(row, column);\n\n      var cellValue = '';\n\n      if (!cellMeta.spanned) {\n        cellValue = _this.hot.getDataAtCell(row, column);\n      }\n\n      var bundleSeed = '';\n\n      if (_this.hot.hasHook('modifyAutoColumnSizeSeed')) {\n        bundleSeed = _this.hot.runHooks('modifyAutoColumnSizeSeed', bundleSeed, cellMeta, cellValue);\n      }\n\n      return {\n        value: cellValue,\n        bundleSeed: bundleSeed\n      };\n    });\n    /**\n     * `true` only if the first calculation was performed.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    _this.firstCalculation = true;\n    /**\n     * `true` if the size calculation is in progress.\n     *\n     * @type {boolean}\n     */\n\n    _this.inProgress = false;\n    /**\n     * Number of already measured columns (we already know their sizes).\n     *\n     * @type {number}\n     */\n\n    _this.measuredColumns = 0;\n    /**\n     * PhysicalIndexToValueMap to keep and track widths for physical column indexes.\n     *\n     * @private\n     * @type {PhysicalIndexToValueMap}\n     */\n\n    _this.columnWidthsMap = new IndexToValueMap();\n\n    _this.hot.columnIndexMapper.registerMap(COLUMN_SIZE_MAP_NAME, _this.columnWidthsMap); // Leave the listener active to allow auto-sizing the columns when the plugin is disabled.\n    // This is necesseary for width recalculation for resize handler doubleclick (ManualColumnResize).\n\n\n    _this.addHook('beforeColumnResize', function (size, column, isDblClick) {\n      return _this.onBeforeColumnResize(size, column, isDblClick);\n    });\n\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link #enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(AutoColumnSize, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return this.hot.getSettings()[PLUGIN_KEY] !== false && !this.hot.getSettings().colWidths;\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      var setting = this.hot.getSettings()[PLUGIN_KEY];\n\n      if (setting && setting.useHeaders !== null && setting.useHeaders !== void 0) {\n        this.ghostTable.setSetting('useHeaders', setting.useHeaders);\n      }\n\n      this.setSamplingOptions();\n      this.addHook('afterLoadData', function () {\n        return _this2.onAfterLoadData.apply(_this2, arguments);\n      });\n      this.addHook('beforeChange', function (changes) {\n        return _this2.onBeforeChange(changes);\n      });\n      this.addHook('afterFormulasValuesUpdate', function (changes) {\n        return _this2.onAfterFormulasValuesUpdate(changes);\n      });\n      this.addHook('beforeViewRender', function (force) {\n        return _this2.onBeforeViewRender(force);\n      });\n      this.addHook('modifyColWidth', function (width, col) {\n        return _this2.getColumnWidth(col, width);\n      });\n      this.addHook('afterInit', function () {\n        return _this2.onAfterInit();\n      });\n\n      _get(_getPrototypeOf(AutoColumnSize.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      var changedColumns = this.findColumnsWhereHeaderWasChanged();\n\n      if (changedColumns.length) {\n        this.clearCache(changedColumns);\n        this.calculateVisibleColumnsWidth();\n      }\n\n      _get(_getPrototypeOf(AutoColumnSize.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      var _this3 = this;\n\n      _get(_getPrototypeOf(AutoColumnSize.prototype), \"disablePlugin\", this).call(this); // Leave the listener active to allow auto-sizing the columns when the plugin is disabled.\n      // This is necesseary for width recalculation for resize handler doubleclick (ManualColumnResize).\n\n\n      this.addHook('beforeColumnResize', function (size, column, isDblClick) {\n        return _this3.onBeforeColumnResize(size, column, isDblClick);\n      });\n    }\n    /**\n     * Calculates visible columns width.\n     */\n\n  }, {\n    key: \"calculateVisibleColumnsWidth\",\n    value: function calculateVisibleColumnsWidth() {\n      var rowsCount = this.hot.countRows(); // Keep last column widths unchanged for situation when all rows was deleted or trimmed (pro #6)\n\n      if (!rowsCount) {\n        return;\n      }\n\n      var force = this.hot.renderCall;\n      var firstVisibleColumn = this.getFirstVisibleColumn();\n      var lastVisibleColumn = this.getLastVisibleColumn();\n\n      if (firstVisibleColumn === -1 || lastVisibleColumn === -1) {\n        return;\n      }\n\n      this.calculateColumnsWidth({\n        from: firstVisibleColumn,\n        to: lastVisibleColumn\n      }, void 0, force);\n    }\n    /**\n     * Calculates a columns width.\n     *\n     * @param {number|object} colRange Visual column index or an object with `from` and `to` visual indexes as a range.\n     * @param {number|object} rowRange Visual row index or an object with `from` and `to` visual indexes as a range.\n     * @param {boolean} [force=false] If `true` the calculation will be processed regardless of whether the width exists in the cache.\n     */\n\n  }, {\n    key: \"calculateColumnsWidth\",\n    value: function calculateColumnsWidth() {\n      var _this4 = this;\n\n      var colRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        from: 0,\n        to: this.hot.countCols() - 1\n      };\n      var rowRange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        from: 0,\n        to: this.hot.countRows() - 1\n      };\n      var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      // eslint-disable-line max-len\n      var columnsRange = typeof colRange === 'number' ? {\n        from: colRange,\n        to: colRange\n      } : colRange;\n      var rowsRange = typeof rowRange === 'number' ? {\n        from: rowRange,\n        to: rowRange\n      } : rowRange;\n      rangeEach(columnsRange.from, columnsRange.to, function (visualColumn) {\n        var physicalColumn = _this4.hot.toPhysicalColumn(visualColumn);\n\n        if (physicalColumn === null) {\n          physicalColumn = visualColumn;\n        }\n\n        if (force || _this4.columnWidthsMap.getValueAtIndex(physicalColumn) === null && !_this4.hot._getColWidthFromSettings(physicalColumn)) {\n          var samples = _this4.samplesGenerator.generateColumnSamples(visualColumn, rowsRange);\n\n          arrayEach(samples, function (_ref) {\n            var _ref2 = _slicedToArray(_ref, 2),\n                column = _ref2[0],\n                sample = _ref2[1];\n\n            return _this4.ghostTable.addColumn(column, sample);\n          });\n        }\n      });\n\n      if (this.ghostTable.columns.length) {\n        this.hot.batchExecution(function () {\n          _this4.ghostTable.getWidths(function (visualColumn, width) {\n            var physicalColumn = _this4.hot.toPhysicalColumn(visualColumn);\n\n            _this4.columnWidthsMap.setValueAtIndex(physicalColumn, width);\n          });\n        }, true);\n        this.measuredColumns = columnsRange.to + 1;\n        this.ghostTable.clean();\n      }\n    }\n    /**\n     * Calculates all columns width. The calculated column will be cached in the {@link AutoColumnSize#widths} property.\n     * To retrieve width for specified column use {@link AutoColumnSize#getColumnWidth} method.\n     *\n     * @param {object|number} rowRange Row index or an object with `from` and `to` properties which define row range.\n     */\n\n  }, {\n    key: \"calculateAllColumnsWidth\",\n    value: function calculateAllColumnsWidth() {\n      var _this5 = this;\n\n      var rowRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        from: 0,\n        to: this.hot.countRows() - 1\n      };\n      var current = 0;\n      var length = this.hot.countCols() - 1;\n      var timer = null;\n      this.inProgress = true;\n\n      var loop = function loop() {\n        // When hot was destroyed after calculating finished cancel frame\n        if (!_this5.hot) {\n          cancelAnimationFrame(timer);\n          _this5.inProgress = false;\n          return;\n        }\n\n        _this5.calculateColumnsWidth({\n          from: current,\n          to: Math.min(current + AutoColumnSize.CALCULATION_STEP, length)\n        }, rowRange);\n\n        current = current + AutoColumnSize.CALCULATION_STEP + 1;\n\n        if (current < length) {\n          timer = requestAnimationFrame(loop);\n        } else {\n          cancelAnimationFrame(timer);\n          _this5.inProgress = false; // @TODO Should call once per render cycle, currently fired separately in different plugins\n\n          _this5.hot.view.adjustElementsSize();\n        }\n      };\n\n      var syncLimit = this.getSyncCalculationLimit(); // sync\n\n      if (this.firstCalculation && syncLimit >= 0) {\n        this.calculateColumnsWidth({\n          from: 0,\n          to: syncLimit\n        }, rowRange);\n        this.firstCalculation = false;\n        current = syncLimit + 1;\n      } // async\n\n\n      if (current < length) {\n        loop();\n      } else {\n        this.inProgress = false;\n      }\n    }\n    /**\n     * Sets the sampling options.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"setSamplingOptions\",\n    value: function setSamplingOptions() {\n      var setting = this.hot.getSettings()[PLUGIN_KEY];\n      var samplingRatio = setting && hasOwnProperty(setting, 'samplingRatio') ? setting.samplingRatio : void 0;\n      var allowSampleDuplicates = setting && hasOwnProperty(setting, 'allowSampleDuplicates') ? setting.allowSampleDuplicates : void 0;\n\n      if (samplingRatio && !isNaN(samplingRatio)) {\n        this.samplesGenerator.setSampleCount(parseInt(samplingRatio, 10));\n      }\n\n      if (allowSampleDuplicates) {\n        this.samplesGenerator.setAllowDuplicates(allowSampleDuplicates);\n      }\n    }\n    /**\n     * Recalculates all columns width (overwrite cache values).\n     */\n\n  }, {\n    key: \"recalculateAllColumnsWidth\",\n    value: function recalculateAllColumnsWidth() {\n      if (this.hot.view && this.hot.view.wt.wtTable.isVisible()) {\n        this.clearCache();\n        this.calculateAllColumnsWidth();\n      }\n    }\n    /**\n     * Gets value which tells how many columns should be calculated synchronously (rest of the columns will be calculated\n     * asynchronously). The limit is calculated based on `syncLimit` set to `autoColumnSize` option (see {@link Options#autoColumnSize}).\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getSyncCalculationLimit\",\n    value: function getSyncCalculationLimit() {\n      var settings = this.hot.getSettings()[PLUGIN_KEY];\n      /* eslint-disable no-bitwise */\n\n      var limit = AutoColumnSize.SYNC_CALCULATION_LIMIT;\n      var colsLimit = this.hot.countCols() - 1;\n\n      if (isObject(settings)) {\n        limit = settings.syncLimit;\n\n        if (isPercentValue(limit)) {\n          limit = valueAccordingPercent(colsLimit, limit);\n        } else {\n          // Force to Number\n          limit >>= 0;\n        }\n      }\n\n      return Math.min(limit, colsLimit);\n    }\n    /**\n     * Gets the calculated column width.\n     *\n     * @param {number} column Visual column index.\n     * @param {number} [defaultWidth] Default column width. It will be picked up if no calculated width found.\n     * @param {boolean} [keepMinimum=true] If `true` then returned value won't be smaller then 50 (default column width).\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getColumnWidth\",\n    value: function getColumnWidth(column) {\n      var defaultWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : void 0;\n      var keepMinimum = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      var width = defaultWidth;\n\n      if (width === void 0) {\n        width = this.columnWidthsMap.getValueAtIndex(this.hot.toPhysicalColumn(column));\n\n        if (keepMinimum && typeof width === 'number') {\n          width = Math.max(width, ViewportColumnsCalculator.DEFAULT_WIDTH);\n        }\n      }\n\n      return width;\n    }\n    /**\n     * Gets the first visible column.\n     *\n     * @returns {number} Returns visual column index, -1 if table is not rendered or if there are no columns to base the the calculations on.\n     */\n\n  }, {\n    key: \"getFirstVisibleColumn\",\n    value: function getFirstVisibleColumn() {\n      var wot = this.hot.view.wt;\n\n      if (wot.wtViewport.columnsVisibleCalculator) {\n        // Fist fully visible column is stored as renderable index.\n        var firstFullyVisibleColumn = wot.wtTable.getFirstVisibleColumn();\n\n        if (firstFullyVisibleColumn !== -1) {\n          return this.hot.columnIndexMapper.getVisualFromRenderableIndex(firstFullyVisibleColumn);\n        }\n      }\n\n      if (wot.wtViewport.columnsRenderCalculator) {\n        var firstRenderedColumn = wot.wtTable.getFirstRenderedColumn(); // There are no rendered column.\n\n        if (firstRenderedColumn !== -1) {\n          return this.hot.columnIndexMapper.getVisualFromRenderableIndex(firstRenderedColumn);\n        }\n      }\n\n      return -1;\n    }\n    /**\n     * Gets the last visible column.\n     *\n     * @returns {number} Returns visual column index or -1 if table is not rendered.\n     */\n\n  }, {\n    key: \"getLastVisibleColumn\",\n    value: function getLastVisibleColumn() {\n      var wot = this.hot.view.wt;\n\n      if (wot.wtViewport.columnsVisibleCalculator) {\n        // Last fully visible column is stored as renderable index.\n        var lastFullyVisibleColumn = wot.wtTable.getLastVisibleColumn();\n\n        if (lastFullyVisibleColumn !== -1) {\n          return this.hot.columnIndexMapper.getVisualFromRenderableIndex(lastFullyVisibleColumn);\n        }\n      }\n\n      if (wot.wtViewport.columnsRenderCalculator) {\n        // Last fully visible column is stored as renderable index.\n        var lastRenderedColumn = wot.wtTable.getLastRenderedColumn(); // There are no rendered columns.\n\n        if (lastRenderedColumn !== -1) {\n          return this.hot.columnIndexMapper.getVisualFromRenderableIndex(lastRenderedColumn);\n        }\n      }\n\n      return -1;\n    }\n    /**\n     * Collects all columns which titles has been changed in comparison to the previous state.\n     *\n     * @private\n     * @returns {Array} It returns an array of physical column indexes.\n     */\n\n  }, {\n    key: \"findColumnsWhereHeaderWasChanged\",\n    value: function findColumnsWhereHeaderWasChanged() {\n      var columnHeaders = this.hot.getColHeader();\n\n      var _privatePool$get = privatePool.get(this),\n          cachedColumnHeaders = _privatePool$get.cachedColumnHeaders;\n\n      var changedColumns = arrayReduce(columnHeaders, function (acc, columnTitle, physicalColumn) {\n        var cachedColumnsLength = cachedColumnHeaders.length;\n\n        if (cachedColumnsLength - 1 < physicalColumn || cachedColumnHeaders[physicalColumn] !== columnTitle) {\n          acc.push(physicalColumn);\n        }\n\n        if (cachedColumnsLength - 1 < physicalColumn) {\n          cachedColumnHeaders.push(columnTitle);\n        } else {\n          cachedColumnHeaders[physicalColumn] = columnTitle;\n        }\n\n        return acc;\n      }, []);\n      return changedColumns;\n    }\n    /**\n     * Clears cache of calculated column widths. If you want to clear only selected columns pass an array with their indexes.\n     * Otherwise whole cache will be cleared.\n     *\n     * @param {number[]} [columns] List of physical column indexes to clear.\n     */\n\n  }, {\n    key: \"clearCache\",\n    value: function clearCache() {\n      var _this6 = this;\n\n      var columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n      if (columns.length) {\n        this.hot.batchExecution(function () {\n          arrayEach(columns, function (physicalIndex) {\n            _this6.columnWidthsMap.setValueAtIndex(physicalIndex, null);\n          });\n        }, true);\n      } else {\n        this.columnWidthsMap.clear();\n      }\n    }\n    /**\n     * Checks if all widths were calculated. If not then return `true` (need recalculate).\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isNeedRecalculate\",\n    value: function isNeedRecalculate() {\n      return !!arrayFilter(this.columnWidthsMap.getValues().slice(0, this.measuredColumns), function (item) {\n        return item === null;\n      }).length;\n    }\n    /**\n     * On before view render listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onBeforeViewRender\",\n    value: function onBeforeViewRender() {\n      this.calculateVisibleColumnsWidth();\n\n      if (this.isNeedRecalculate() && !this.inProgress) {\n        this.calculateAllColumnsWidth();\n      }\n    }\n    /**\n     * On after load data listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterLoadData\",\n    value: function onAfterLoadData() {\n      var _this7 = this;\n\n      if (this.hot.view) {\n        this.recalculateAllColumnsWidth();\n      } else {\n        // first load - initialization\n        setTimeout(function () {\n          if (_this7.hot) {\n            _this7.recalculateAllColumnsWidth();\n          }\n        }, 0);\n      }\n    }\n    /**\n     * On before change listener.\n     *\n     * @private\n     * @param {Array} changes An array of modified data.\n     */\n\n  }, {\n    key: \"onBeforeChange\",\n    value: function onBeforeChange(changes) {\n      var _this8 = this;\n\n      var changedColumns = arrayMap(changes, function (_ref3) {\n        var _ref4 = _slicedToArray(_ref3, 2),\n            columnProperty = _ref4[1];\n\n        return _this8.hot.toPhysicalColumn(_this8.hot.propToCol(columnProperty));\n      });\n      this.clearCache(Array.from(new Set(changedColumns)));\n    }\n    /**\n     * On before column resize listener.\n     *\n     * @private\n     * @param {number} size Calculated new column width.\n     * @param {number} column Visual index of the resized column.\n     * @param {boolean} isDblClick  Flag that determines whether there was a double-click.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"onBeforeColumnResize\",\n    value: function onBeforeColumnResize(size, column, isDblClick) {\n      var newSize = size;\n\n      if (isDblClick) {\n        this.calculateColumnsWidth(column, void 0, true);\n        newSize = this.getColumnWidth(column, void 0, false);\n      }\n\n      return newSize;\n    }\n    /**\n     * On after Handsontable init fill plugin with all necessary values.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterInit\",\n    value: function onAfterInit() {\n      privatePool.get(this).cachedColumnHeaders = this.hot.getColHeader();\n    }\n    /**\n     * After formulas values updated listener.\n     *\n     * @private\n     * @param {Array} changes An array of modified data.\n     */\n\n  }, {\n    key: \"onAfterFormulasValuesUpdate\",\n    value: function onAfterFormulasValuesUpdate(changes) {\n      var filteredChanges = arrayFilter(changes, function (change) {\n        var _change$address;\n\n        return isDefined((_change$address = change.address) === null || _change$address === void 0 ? void 0 : _change$address.col);\n      });\n      var changedColumns = arrayMap(filteredChanges, function (change) {\n        return change.address.col;\n      });\n      this.clearCache(Array.from(new Set(changedColumns)));\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ghostTable.clean();\n\n      _get(_getPrototypeOf(AutoColumnSize.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }, {\n    key: \"CALCULATION_STEP\",\n    get: function get() {\n      return 50;\n    }\n  }, {\n    key: \"SYNC_CALCULATION_LIMIT\",\n    get: function get() {\n      return 50;\n    }\n  }]);\n\n  return AutoColumnSize;\n}(BasePlugin);", "function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport { defineGetter, objectEach } from \"../../helpers/object.mjs\";\nimport { arrayEach } from \"../../helpers/array.mjs\";\nimport { getPluginsNames, hasPlugin } from \"../registry.mjs\";\nimport { hasCellType } from \"../../cellTypes/registry.mjs\";\nimport { hasEditor } from \"../../editors/registry.mjs\";\nimport { hasRenderer } from \"../../renderers/registry.mjs\";\nimport { hasValidator } from \"../../validators/registry.mjs\";\nvar DEPS_TYPE_CHECKERS = new Map([['plugin', hasPlugin], ['cell-type', hasCellType], ['editor', hasEditor], ['renderer', hasRenderer], ['validator', hasValidator]]);\nexport var PLUGIN_KEY = 'base';\nvar privatePool = new WeakMap();\nvar missingDependeciesMsgs = [];\nvar initializedPlugins = null;\n/**\n * @util\n */\n\nexport var BasePlugin = /*#__PURE__*/function () {\n  /**\n   * @param {object} hotInstance Handsontable instance.\n   */\n  function BasePlugin(hotInstance) {\n    var _this = this;\n\n    _classCallCheck(this, BasePlugin);\n\n    /**\n     * Handsontable instance.\n     *\n     * @type {Core}\n     */\n    defineGetter(this, 'hot', hotInstance, {\n      writable: false\n    });\n    privatePool.set(this, {\n      hooks: {}\n    });\n    initializedPlugins = null;\n    this.pluginName = null;\n    this.pluginsInitializedCallbacks = [];\n    this.isPluginsReady = false;\n    this.enabled = false;\n    this.initialized = false;\n    this.hot.addHook('afterPluginsInitialized', function () {\n      return _this.onAfterPluginsInitialized();\n    });\n    this.hot.addHook('afterUpdateSettings', function (newSettings) {\n      return _this.onUpdateSettings(newSettings);\n    });\n    this.hot.addHook('beforeInit', function () {\n      return _this.init();\n    });\n  }\n\n  _createClass(BasePlugin, [{\n    key: \"init\",\n    value: function init() {\n      var _this2 = this;\n\n      this.pluginName = this.hot.getPluginName(this);\n      var pluginDeps = this.constructor.PLUGIN_DEPS;\n      var dependecies = Array.isArray(pluginDeps) ? pluginDeps : [];\n\n      if (dependecies.length > 0) {\n        var missingDependencies = [];\n        dependecies.forEach(function (dependency) {\n          var _dependency$split = dependency.split(':'),\n              _dependency$split2 = _slicedToArray(_dependency$split, 2),\n              type = _dependency$split2[0],\n              moduleName = _dependency$split2[1];\n\n          if (!DEPS_TYPE_CHECKERS.has(type)) {\n            throw new Error(\"Unknown plugin dependency type \\\"\".concat(type, \"\\\" was found.\"));\n          }\n\n          if (!DEPS_TYPE_CHECKERS.get(type)(moduleName)) {\n            missingDependencies.push(\" - \".concat(moduleName, \" (\").concat(type, \")\"));\n          }\n        });\n\n        if (missingDependencies.length > 0) {\n          var errorMsg = [\"The \".concat(this.pluginName, \" plugin requires the following modules:\\n\"), \"\".concat(missingDependencies.join('\\n'), \"\\n\")].join('');\n          missingDependeciesMsgs.push(errorMsg);\n        }\n      }\n\n      if (!initializedPlugins) {\n        initializedPlugins = getPluginsNames();\n      } // Workaround for the UndoRedo plugin which, currently doesn't follow the plugin architecture.\n      // Without this line the `callOnPluginsReady` callback won't be triggered after all plugin\n      // initialization.\n\n\n      if (initializedPlugins.indexOf('UndoRedo') >= 0) {\n        initializedPlugins.splice(initializedPlugins.indexOf('UndoRedo'), 1);\n      }\n\n      if (initializedPlugins.indexOf(this.pluginName) >= 0) {\n        initializedPlugins.splice(initializedPlugins.indexOf(this.pluginName), 1);\n      }\n\n      this.hot.addHookOnce('afterPluginsInitialized', function () {\n        if (_this2.isEnabled && _this2.isEnabled()) {\n          _this2.enablePlugin();\n        }\n      });\n      var isAllPluginsAreInitialized = initializedPlugins.length === 0;\n\n      if (isAllPluginsAreInitialized) {\n        if (missingDependeciesMsgs.length > 0) {\n          var _errorMsg = [\"\".concat(missingDependeciesMsgs.join('\\n'), \"\\n\"), 'You have to import and register them manually.'].join('');\n\n          throw new Error(_errorMsg);\n        }\n\n        this.hot.runHooks('afterPluginsInitialized');\n      }\n\n      this.initialized = true;\n    }\n    /**\n     * Enable plugin for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      this.enabled = true;\n    }\n    /**\n     * Disable plugin for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      if (this.eventManager) {\n        this.eventManager.clear();\n      }\n\n      this.clearHooks();\n      this.enabled = false;\n    }\n    /**\n     * Add listener to plugin hooks system.\n     *\n     * @param {string} name The hook name.\n     * @param {Function} callback The listener function to add.\n     */\n\n  }, {\n    key: \"addHook\",\n    value: function addHook(name, callback) {\n      privatePool.get(this).hooks[name] = privatePool.get(this).hooks[name] || [];\n      var hooks = privatePool.get(this).hooks[name];\n      this.hot.addHook(name, callback);\n      hooks.push(callback);\n      privatePool.get(this).hooks[name] = hooks;\n    }\n    /**\n     * Remove all hooks listeners by hook name.\n     *\n     * @param {string} name The hook name.\n     */\n\n  }, {\n    key: \"removeHooks\",\n    value: function removeHooks(name) {\n      var _this3 = this;\n\n      arrayEach(privatePool.get(this).hooks[name] || [], function (callback) {\n        _this3.hot.removeHook(name, callback);\n      });\n    }\n    /**\n     * Clear all hooks.\n     */\n\n  }, {\n    key: \"clearHooks\",\n    value: function clearHooks() {\n      var _this4 = this;\n\n      var hooks = privatePool.get(this).hooks;\n      objectEach(hooks, function (callbacks, name) {\n        return _this4.removeHooks(name);\n      });\n      hooks.length = 0;\n    }\n    /**\n     * Register function which will be immediately called after all plugins initialized.\n     *\n     * @param {Function} callback The listener function to call.\n     */\n\n  }, {\n    key: \"callOnPluginsReady\",\n    value: function callOnPluginsReady(callback) {\n      if (this.isPluginsReady) {\n        callback();\n      } else {\n        this.pluginsInitializedCallbacks.push(callback);\n      }\n    }\n    /**\n     * On after plugins initialized listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterPluginsInitialized\",\n    value: function onAfterPluginsInitialized() {\n      arrayEach(this.pluginsInitializedCallbacks, function (callback) {\n        return callback();\n      });\n      this.pluginsInitializedCallbacks.length = 0;\n      this.isPluginsReady = true;\n    }\n    /**\n     * On update settings listener.\n     *\n     * @private\n     * @param {object} newSettings New set of settings passed to the `updateSettings` method.\n     */\n\n  }, {\n    key: \"onUpdateSettings\",\n    value: function onUpdateSettings(newSettings) {\n      if (this.isEnabled) {\n        if (this.enabled && !this.isEnabled()) {\n          this.disablePlugin();\n        }\n\n        if (!this.enabled && this.isEnabled()) {\n          this.enablePlugin();\n        }\n\n        if (this.enabled && this.isEnabled()) {\n          this.updatePlugin(newSettings);\n        }\n      }\n    }\n    /**\n     * Updates the plugin to use the latest options you have specified.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {}\n    /**\n     * Destroy plugin.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this5 = this;\n\n      if (this.eventManager) {\n        this.eventManager.destroy();\n      }\n\n      this.clearHooks();\n      objectEach(this, function (value, property) {\n        if (property !== 'hot') {\n          _this5[property] = null;\n        }\n      });\n      delete this.t;\n      delete this.hot;\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }]);\n\n  return BasePlugin;\n}();", "function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.string.trim.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { addClass, outerHeight } from \"./../helpers/dom/element.mjs\";\nimport { arrayEach } from \"./../helpers/array.mjs\";\n/**\n * @class GhostTable\n */\n\nvar GhostTable = /*#__PURE__*/function () {\n  function GhostTable(hotInstance) {\n    _classCallCheck(this, GhostTable);\n\n    /**\n     * Handsontable instance.\n     *\n     * @type {Core}\n     */\n    this.hot = hotInstance;\n    /**\n     * Container element where every table will be injected.\n     *\n     * @type {HTMLElement|null}\n     */\n\n    this.container = null;\n    /**\n     * Flag which determine is table was injected to DOM.\n     *\n     * @type {boolean}\n     */\n\n    this.injected = false;\n    /**\n     * Added rows collection.\n     *\n     * @type {Array}\n     */\n\n    this.rows = [];\n    /**\n     * Added columns collection.\n     *\n     * @type {Array}\n     */\n\n    this.columns = [];\n    /**\n     * Samples prepared for calculations.\n     *\n     * @type {Map}\n     * @default {null}\n     */\n\n    this.samples = null;\n    /**\n     * Ghost table settings.\n     *\n     * @type {object}\n     * @default {Object}\n     */\n\n    this.settings = {\n      useHeaders: true\n    };\n  }\n  /**\n   * Add row.\n   *\n   * @param {number} row Row index.\n   * @param {Map} samples Samples Map object.\n   */\n\n\n  _createClass(GhostTable, [{\n    key: \"addRow\",\n    value: function addRow(row, samples) {\n      if (this.columns.length) {\n        throw new Error('Doesn\\'t support multi-dimensional table');\n      }\n\n      if (!this.rows.length) {\n        this.container = this.createContainer(this.hot.rootElement.className);\n      }\n\n      var rowObject = {\n        row: row\n      };\n      this.rows.push(rowObject);\n      this.samples = samples;\n      this.table = this.createTable(this.hot.table.className);\n      this.table.colGroup.appendChild(this.createColGroupsCol());\n      this.table.tr.appendChild(this.createRow(row));\n      this.container.container.appendChild(this.table.fragment);\n      rowObject.table = this.table.table;\n    }\n    /**\n     * Add a row consisting of the column headers.\n     *\n     * @param {Map} samples A map with sampled table values.\n     */\n\n  }, {\n    key: \"addColumnHeadersRow\",\n    value: function addColumnHeadersRow(samples) {\n      var colHeader = this.hot.getColHeader(0);\n\n      if (colHeader !== null && colHeader !== void 0) {\n        var rowObject = {\n          row: -1\n        };\n        this.rows.push(rowObject);\n        this.container = this.createContainer(this.hot.rootElement.className);\n        this.samples = samples;\n        this.table = this.createTable(this.hot.table.className);\n        this.table.colGroup.appendChild(this.createColGroupsCol());\n        this.appendColumnHeadersRow();\n        this.container.container.appendChild(this.table.fragment);\n        rowObject.table = this.table.table;\n      }\n    }\n    /**\n     * Add column.\n     *\n     * @param {number} column Column index.\n     * @param {Map} samples A map with sampled table values.\n     */\n\n  }, {\n    key: \"addColumn\",\n    value: function addColumn(column, samples) {\n      if (this.rows.length) {\n        throw new Error('Doesn\\'t support multi-dimensional table');\n      }\n\n      if (!this.columns.length) {\n        this.container = this.createContainer(this.hot.rootElement.className);\n      }\n\n      var columnObject = {\n        col: column\n      };\n      this.columns.push(columnObject);\n      this.samples = samples;\n      this.table = this.createTable(this.hot.table.className);\n\n      if (this.getSetting('useHeaders') && this.hot.getColHeader(column) !== null) {\n        // Please keep in mind that the renderable column index equal to the visual columns index for the GhostTable.\n        // We render all columns.\n        this.hot.view.appendColHeader(column, this.table.th);\n      }\n\n      this.table.tBody.appendChild(this.createCol(column));\n      this.container.container.appendChild(this.table.fragment);\n      columnObject.table = this.table.table;\n    }\n    /**\n     * Get calculated heights.\n     *\n     * @param {Function} callback Callback which will be fired for each calculated row.\n     */\n\n  }, {\n    key: \"getHeights\",\n    value: function getHeights(callback) {\n      if (!this.injected) {\n        this.injectTable();\n      }\n\n      arrayEach(this.rows, function (row) {\n        // -1 <- reduce border-top from table\n        callback(row.row, outerHeight(row.table) - 1);\n      });\n    }\n    /**\n     * Get calculated widths.\n     *\n     * @param {Function} callback Callback which will be fired for each calculated column.\n     */\n\n  }, {\n    key: \"getWidths\",\n    value: function getWidths(callback) {\n      if (!this.injected) {\n        this.injectTable();\n      }\n\n      arrayEach(this.columns, function (column) {\n        // The GhostTable class is responsible for calculating the columns' width based on the\n        // contents rendered in the cells. In some cases, when the column's width calculated by\n        // the browser is a decimal point with a fractional component. For example, 35.32px.\n        // The usage of the `.offsetWidth` (or our helper `outerWidth`) is incorrect.\n        // The `outerWidth` in the mentioned example (35.32px) would return 35 pixels that\n        // would cause the text to not fit in the cell, thus increasing the row height.\n        // That's why the `getBoundingClientRect` method is used. The method returns the number\n        // that is rounded up to make sure that there will be a space for the cell's content.\n        var _column$table$getBoun = column.table.getBoundingClientRect(),\n            width = _column$table$getBoun.width;\n\n        callback(column.col, Math.ceil(width));\n      });\n    }\n    /**\n     * Set the Ghost Table settings to the provided object.\n     *\n     * @param {object} settings New Ghost Table Settings.\n     */\n\n  }, {\n    key: \"setSettings\",\n    value: function setSettings(settings) {\n      this.settings = settings;\n    }\n    /**\n     * Set a single setting of the Ghost Table.\n     *\n     * @param {string} name Setting name.\n     * @param {*} value Setting value.\n     */\n\n  }, {\n    key: \"setSetting\",\n    value: function setSetting(name, value) {\n      if (!this.settings) {\n        this.settings = {};\n      }\n\n      this.settings[name] = value;\n    }\n    /**\n     * Get the Ghost Table settings.\n     *\n     * @returns {object|null}\n     */\n\n  }, {\n    key: \"getSettings\",\n    value: function getSettings() {\n      return this.settings;\n    }\n    /**\n     * Get a single Ghost Table setting.\n     *\n     * @param {string} name The setting name to get.\n     * @returns {boolean|null}\n     */\n\n  }, {\n    key: \"getSetting\",\n    value: function getSetting(name) {\n      if (this.settings) {\n        return this.settings[name];\n      }\n\n      return null;\n    }\n    /**\n     * Create colgroup col elements.\n     *\n     * @returns {DocumentFragment}\n     */\n\n  }, {\n    key: \"createColGroupsCol\",\n    value: function createColGroupsCol() {\n      var _this = this;\n\n      var fragment = this.hot.rootDocument.createDocumentFragment();\n\n      if (this.hot.hasRowHeaders()) {\n        fragment.appendChild(this.createColElement(-1));\n      }\n\n      this.samples.forEach(function (sample) {\n        arrayEach(sample.strings, function (string) {\n          fragment.appendChild(_this.createColElement(string.col));\n        });\n      });\n      return fragment;\n    }\n    /**\n     * Create table row element.\n     *\n     * @param {number} row Row index.\n     * @returns {DocumentFragment} Returns created table row elements.\n     */\n\n  }, {\n    key: \"createRow\",\n    value: function createRow(row) {\n      var _this2 = this;\n\n      var rootDocument = this.hot.rootDocument;\n      var fragment = rootDocument.createDocumentFragment();\n      var th = rootDocument.createElement('th');\n\n      if (this.hot.hasRowHeaders()) {\n        this.hot.view.appendRowHeader(row, th);\n        fragment.appendChild(th);\n      }\n\n      this.samples.forEach(function (sample) {\n        arrayEach(sample.strings, function (string) {\n          var column = string.col;\n\n          var cellProperties = _this2.hot.getCellMeta(row, column);\n\n          cellProperties.col = column;\n          cellProperties.row = row;\n\n          var renderer = _this2.hot.getCellRenderer(cellProperties);\n\n          var td = rootDocument.createElement('td'); // Indicate that this element is created and supported by GhostTable. It can be useful to\n          // exclude rendering performance costly logic or exclude logic which doesn't work within a hidden table.\n\n          td.setAttribute('ghost-table', 1);\n          renderer(_this2.hot, td, row, column, _this2.hot.colToProp(column), string.value, cellProperties);\n          fragment.appendChild(td);\n        });\n      });\n      return fragment;\n    }\n    /**\n     * Creates DOM elements for headers and appends them to the THEAD element of the table.\n     */\n\n  }, {\n    key: \"appendColumnHeadersRow\",\n    value: function appendColumnHeadersRow() {\n      var _this3 = this;\n\n      var rootDocument = this.hot.rootDocument;\n      var domFragment = rootDocument.createDocumentFragment();\n      var columnHeaders = [];\n\n      if (this.hot.hasRowHeaders()) {\n        var th = rootDocument.createElement('th');\n        columnHeaders.push([-1, th]);\n        domFragment.appendChild(th);\n      }\n\n      this.samples.forEach(function (sample) {\n        arrayEach(sample.strings, function (string) {\n          var column = string.col;\n          var th = rootDocument.createElement('th');\n          columnHeaders.push([column, th]);\n          domFragment.appendChild(th);\n        });\n      }); // Appending DOM elements for headers\n\n      this.table.tHead.appendChild(domFragment);\n      arrayEach(columnHeaders, function (columnHeader) {\n        var _columnHeader = _slicedToArray(columnHeader, 2),\n            column = _columnHeader[0],\n            th = _columnHeader[1]; // Using source method for filling a header with value.\n\n\n        _this3.hot.view.appendColHeader(column, th);\n      });\n    }\n    /**\n     * Create table column elements.\n     *\n     * @param {number} column Column index.\n     * @returns {DocumentFragment} Returns created column table column elements.\n     */\n\n  }, {\n    key: \"createCol\",\n    value: function createCol(column) {\n      var _this4 = this;\n\n      var rootDocument = this.hot.rootDocument;\n      var fragment = rootDocument.createDocumentFragment();\n      this.samples.forEach(function (sample) {\n        arrayEach(sample.strings, function (string) {\n          var row = string.row;\n\n          var cellProperties = _this4.hot.getCellMeta(row, column);\n\n          cellProperties.col = column;\n          cellProperties.row = row;\n\n          var renderer = _this4.hot.getCellRenderer(cellProperties);\n\n          var td = rootDocument.createElement('td');\n          var tr = rootDocument.createElement('tr'); // Indicate that this element is created and supported by GhostTable. It can be useful to\n          // exclude rendering performance costly logic or exclude logic which doesn't work within a hidden table.\n\n          td.setAttribute('ghost-table', 1);\n          renderer(_this4.hot, td, row, column, _this4.hot.colToProp(column), string.value, cellProperties);\n          tr.appendChild(td);\n          fragment.appendChild(tr);\n        });\n      });\n      return fragment;\n    }\n    /**\n     * Remove table from document and reset internal state.\n     */\n\n  }, {\n    key: \"clean\",\n    value: function clean() {\n      this.rows.length = 0;\n      this.rows[-1] = void 0;\n      this.columns.length = 0;\n\n      if (this.samples) {\n        this.samples.clear();\n      }\n\n      this.samples = null;\n      this.removeTable();\n    }\n    /**\n     * Inject generated table into document.\n     *\n     * @param {HTMLElement} [parent=null] The element to which the ghost table is injected.\n     */\n\n  }, {\n    key: \"injectTable\",\n    value: function injectTable() {\n      var parent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (!this.injected) {\n        (parent || this.hot.rootElement).appendChild(this.container.fragment);\n        this.injected = true;\n      }\n    }\n    /**\n     * Remove table from document.\n     */\n\n  }, {\n    key: \"removeTable\",\n    value: function removeTable() {\n      if (this.injected && this.container.container.parentNode) {\n        this.container.container.parentNode.removeChild(this.container.container);\n        this.container = null;\n        this.injected = false;\n      }\n    }\n    /**\n     * Create col element.\n     *\n     * @param {number} column Column index.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"createColElement\",\n    value: function createColElement(column) {\n      var col = this.hot.rootDocument.createElement('col');\n      col.style.width = \"\".concat(this.hot.view.wt.wtTable.getStretchedColumnWidth(column), \"px\");\n      return col;\n    }\n    /**\n     * Create table element.\n     *\n     * @param {string} className The CSS classes to add.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"createTable\",\n    value: function createTable() {\n      var className = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      var rootDocument = this.hot.rootDocument;\n      var fragment = rootDocument.createDocumentFragment();\n      var table = rootDocument.createElement('table');\n      var tHead = rootDocument.createElement('thead');\n      var tBody = rootDocument.createElement('tbody');\n      var colGroup = rootDocument.createElement('colgroup');\n      var tr = rootDocument.createElement('tr');\n      var th = rootDocument.createElement('th');\n\n      if (this.isVertical()) {\n        table.appendChild(colGroup);\n      }\n\n      if (this.isHorizontal()) {\n        tr.appendChild(th);\n        tHead.appendChild(tr);\n        table.style.tableLayout = 'auto';\n        table.style.width = 'auto';\n      }\n\n      table.appendChild(tHead);\n\n      if (this.isVertical()) {\n        tBody.appendChild(tr);\n      }\n\n      table.appendChild(tBody);\n      addClass(table, className);\n      fragment.appendChild(table);\n      return {\n        fragment: fragment,\n        table: table,\n        tHead: tHead,\n        tBody: tBody,\n        colGroup: colGroup,\n        tr: tr,\n        th: th\n      };\n    }\n    /**\n     * Create container for tables.\n     *\n     * @param {string} className The CSS classes to add.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"createContainer\",\n    value: function createContainer() {\n      var className = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      var rootDocument = this.hot.rootDocument;\n      var fragment = rootDocument.createDocumentFragment();\n      var container = rootDocument.createElement('div');\n      var containerClassName = \"htGhostTable htAutoSize \".concat(className.trim());\n      addClass(container, containerClassName);\n      fragment.appendChild(container);\n      return {\n        fragment: fragment,\n        container: container\n      };\n    }\n    /**\n     * Checks if table is raised vertically (checking rows).\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isVertical\",\n    value: function isVertical() {\n      return !!(this.rows.length && !this.columns.length);\n    }\n    /**\n     * Checks if table is raised horizontally (checking columns).\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isHorizontal\",\n    value: function isHorizontal() {\n      return !!(this.columns.length && !this.rows.length);\n    }\n  }]);\n\n  return GhostTable;\n}();\n\nexport default GhostTable;", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.index-of.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { isObject } from \"./../helpers/object.mjs\";\nimport { rangeEach } from \"./../helpers/number.mjs\";\nimport { stringify } from \"./../helpers/mixed.mjs\";\n/**\n * @class SamplesGenerator\n */\n\nvar SamplesGenerator = /*#__PURE__*/function () {\n  function SamplesGenerator(dataFactory) {\n    _classCallCheck(this, SamplesGenerator);\n\n    /**\n     * Samples prepared for calculations.\n     *\n     * @type {Map}\n     * @default {null}\n     */\n    this.samples = null;\n    /**\n     * Function which give the data to collect samples.\n     *\n     * @type {Function}\n     */\n\n    this.dataFactory = dataFactory;\n    /**\n     * Custom number of samples to take of each value length.\n     *\n     * @type {number}\n     * @default {null}\n     */\n\n    this.customSampleCount = null;\n    /**\n     * `true` if duplicate samples collection should be allowed, `false` otherwise.\n     *\n     * @type {boolean}\n     * @default {false}\n     */\n\n    this.allowDuplicates = false;\n  }\n  /**\n   * Get the sample count for this instance.\n   *\n   * @returns {number}\n   */\n\n\n  _createClass(SamplesGenerator, [{\n    key: \"getSampleCount\",\n    value: function getSampleCount() {\n      if (this.customSampleCount) {\n        return this.customSampleCount;\n      }\n\n      return SamplesGenerator.SAMPLE_COUNT;\n    }\n    /**\n     * Set the sample count.\n     *\n     * @param {number} sampleCount Number of samples to be collected.\n     */\n\n  }, {\n    key: \"setSampleCount\",\n    value: function setSampleCount(sampleCount) {\n      this.customSampleCount = sampleCount;\n    }\n    /**\n     * Set if the generator should accept duplicate values.\n     *\n     * @param {boolean} allowDuplicates `true` to allow duplicate values.\n     */\n\n  }, {\n    key: \"setAllowDuplicates\",\n    value: function setAllowDuplicates(allowDuplicates) {\n      this.allowDuplicates = allowDuplicates;\n    }\n    /**\n     * Generate samples for row. You can control which area should be sampled by passing `rowRange` object and `colRange` object.\n     *\n     * @param {object|number} rowRange The rows range to generate the samples.\n     * @param {object} colRange The column range to generate the samples.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"generateRowSamples\",\n    value: function generateRowSamples(rowRange, colRange) {\n      return this.generateSamples('row', colRange, rowRange);\n    }\n    /**\n     * Generate samples for column. You can control which area should be sampled by passing `colRange` object and `rowRange` object.\n     *\n     * @param {object} colRange Column index.\n     * @param {object} rowRange Column index.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"generateColumnSamples\",\n    value: function generateColumnSamples(colRange, rowRange) {\n      return this.generateSamples('col', rowRange, colRange);\n    }\n    /**\n     * Generate collection of samples.\n     *\n     * @param {string} type Type to generate. Can be `col` or `row`.\n     * @param {object} range The range to generate the samples.\n     * @param {object|number} specifierRange The range to generate the samples.\n     * @returns {Map}\n     */\n\n  }, {\n    key: \"generateSamples\",\n    value: function generateSamples(type, range, specifierRange) {\n      var _this = this;\n\n      var samples = new Map();\n\n      var _ref = typeof specifierRange === 'number' ? {\n        from: specifierRange,\n        to: specifierRange\n      } : specifierRange,\n          from = _ref.from,\n          to = _ref.to;\n\n      rangeEach(from, to, function (index) {\n        var sample = _this.generateSample(type, range, index);\n\n        samples.set(index, sample);\n      });\n      return samples;\n    }\n    /**\n     * Generate sample for specified type (`row` or `col`).\n     *\n     * @param {string} type Samples type `row` or `col`.\n     * @param {object} range The range to generate the samples.\n     * @param {number} specifierValue The range to generate the samples.\n     * @returns {Map}\n     */\n\n  }, {\n    key: \"generateSample\",\n    value: function generateSample(type, range, specifierValue) {\n      var _this2 = this;\n\n      if (type !== 'row' && type !== 'col') {\n        throw new Error('Unsupported sample type');\n      }\n\n      var samples = new Map();\n      var computedKey = type === 'row' ? 'col' : 'row';\n      var sampledValues = [];\n      rangeEach(range.from, range.to, function (index) {\n        var _ref2 = type === 'row' ? _this2.dataFactory(specifierValue, index) : _this2.dataFactory(index, specifierValue),\n            value = _ref2.value,\n            bundleSeed = _ref2.bundleSeed;\n\n        var hasCustomBundleSeed = typeof bundleSeed === 'string' && bundleSeed.length > 0;\n        var seed;\n\n        if (hasCustomBundleSeed) {\n          seed = bundleSeed;\n        } else if (isObject(value)) {\n          seed = \"\".concat(Object.keys(value).length);\n        } else if (Array.isArray(value)) {\n          seed = \"\".concat(value.length);\n        } else {\n          seed = \"\".concat(stringify(value).length);\n        }\n\n        if (!samples.has(seed)) {\n          samples.set(seed, {\n            needed: _this2.getSampleCount(),\n            strings: []\n          });\n        }\n\n        var sample = samples.get(seed);\n\n        if (sample.needed) {\n          var duplicate = sampledValues.indexOf(value) > -1;\n\n          if (!duplicate || _this2.allowDuplicates || hasCustomBundleSeed) {\n            sample.strings.push(_defineProperty({\n              value: value\n            }, computedKey, index));\n            sampledValues.push(value);\n            sample.needed -= 1;\n          }\n        }\n      });\n      return samples;\n    }\n  }], [{\n    key: \"SAMPLE_COUNT\",\n    get:\n    /**\n     * Number of samples to take of each value length.\n     *\n     * @type {number}\n     */\n    function get() {\n      return 3;\n    }\n  }]);\n\n  return SamplesGenerator;\n}();\n\nexport default SamplesGenerator;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nimport { offset, outerHeight, outerWidth } from \"../../helpers/dom/element.mjs\";\nimport { arrayEach, arrayMap } from \"../../helpers/array.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { CellCoords, CellRange } from \"../../3rdparty/walkontable/src/index.mjs\";\nimport { getDeltas, getDragDirectionAndRange, DIRECTIONS, getMappedFillHandleSetting } from \"./utils.mjs\";\nHooks.getSingleton().register('modifyAutofillRange');\nHooks.getSingleton().register('beforeAutofill');\nHooks.getSingleton().register('afterAutofill');\nexport var PLUGIN_KEY = 'autofill';\nexport var PLUGIN_PRIORITY = 20;\nvar INSERT_ROW_ALTER_ACTION_NAME = 'insert_row';\nvar INTERVAL_FOR_ADDING_ROW = 200;\n/**\n * This plugin provides \"drag-down\" and \"copy-down\" functionalities, both operated using the small square in the right\n * bottom of the cell selection.\n *\n * \"Drag-down\" expands the value of the selected cells to the neighbouring cells when you drag the small\n * square in the corner.\n *\n * \"Copy-down\" copies the value of the selection to all empty cells below when you double click the small square.\n *\n * @class Autofill\n * @plugin Autofill\n */\n\nexport var Autofill = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(Autofill, _BasePlugin);\n\n  var _super = _createSuper(Autofill);\n\n  function Autofill(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, Autofill);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Event manager instance.\n     *\n     * @private\n     * @type {EventManager}\n     */\n\n    _this.eventManager = new EventManager(_assertThisInitialized(_this));\n    /**\n     * Specifies if adding new row started.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    _this.addingStarted = false;\n    /**\n     * Specifies if there was mouse down on the cell corner.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    _this.mouseDownOnCellCorner = false;\n    /**\n     * Specifies if mouse was dragged outside Handsontable.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    _this.mouseDragOutside = false;\n    /**\n     * Specifies how many cell levels were dragged using the handle.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    _this.handleDraggedCells = 0;\n    /**\n     * Specifies allowed directions of drag (`'horizontal'` or '`vertical`').\n     *\n     * @private\n     * @type {string[]}\n     */\n\n    _this.directions = [];\n    /**\n     * Specifies if can insert new rows if needed.\n     *\n     * @type {boolean}\n     */\n\n    _this.autoInsertRow = false;\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the Handsontable settings.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(Autofill, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return this.hot.getSettings().fillHandle;\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.mapSettings();\n      this.registerEvents();\n      this.addHook('afterOnCellCornerMouseDown', function (event) {\n        return _this2.onAfterCellCornerMouseDown(event);\n      });\n      this.addHook('afterOnCellCornerDblClick', function (event) {\n        return _this2.onCellCornerDblClick(event);\n      });\n      this.addHook('beforeOnCellMouseOver', function (_, coords) {\n        return _this2.onBeforeCellMouseOver(coords);\n      });\n\n      _get(_getPrototypeOf(Autofill.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(_getPrototypeOf(Autofill.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.clearMappedSettings();\n\n      _get(_getPrototypeOf(Autofill.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Gets selection data.\n     *\n     * @private\n     * @returns {object[]} Ranges Array of objects with properties `startRow`, `startCol`, `endRow` and `endCol`.\n     */\n\n  }, {\n    key: \"getSelectionData\",\n    value: function getSelectionData() {\n      var _this3 = this;\n\n      var selection = this.hot.getSelectedRangeLast();\n\n      var _selection$getTopLeft = selection.getTopLeftCorner(),\n          startRow = _selection$getTopLeft.row,\n          startCol = _selection$getTopLeft.col;\n\n      var _selection$getBottomR = selection.getBottomRightCorner(),\n          endRow = _selection$getBottomR.row,\n          endCol = _selection$getBottomR.col;\n\n      var copyableRanges = this.hot.runHooks('modifyCopyableRange', [{\n        startRow: startRow,\n        startCol: startCol,\n        endRow: endRow,\n        endCol: endCol\n      }]);\n      var copyableRows = [];\n      var copyableColumns = [];\n      var data = [];\n      arrayEach(copyableRanges, function (range) {\n        for (var visualRow = range.startRow; visualRow <= range.endRow; visualRow += 1) {\n          if (copyableRows.indexOf(visualRow) === -1) {\n            copyableRows.push(visualRow);\n          }\n        }\n\n        for (var visualColumn = range.startCol; visualColumn <= range.endCol; visualColumn += 1) {\n          if (copyableColumns.indexOf(visualColumn) === -1) {\n            copyableColumns.push(visualColumn);\n          }\n        }\n      });\n      arrayEach(copyableRows, function (row) {\n        var rowSet = [];\n        arrayEach(copyableColumns, function (column) {\n          rowSet.push(_this3.hot.getCopyableData(row, column));\n        });\n        data.push(rowSet);\n      });\n      return data;\n    }\n    /**\n     * Try to apply fill values to the area in fill border, omitting the selection border.\n     *\n     * @private\n     * @returns {boolean} Reports if fill was applied.\n     *\n     * @fires Hooks#modifyAutofillRange\n     * @fires Hooks#beforeAutofill\n     * @fires Hooks#afterAutofill\n     */\n\n  }, {\n    key: \"fillIn\",\n    value: function fillIn() {\n      if (this.hot.selection.highlight.getFill().isEmpty()) {\n        return false;\n      } // Fill area may starts or ends with invisible cell. There won't be any information about it as highlighted\n      // selection store just renderable indexes (It's part of Walkontable). I extrapolate where the start or/and\n      // the end is.\n\n\n      var _this$hot$selection$h = this.hot.selection.highlight.getFill().getVisualCorners(),\n          _this$hot$selection$h2 = _slicedToArray(_this$hot$selection$h, 4),\n          fillStartRow = _this$hot$selection$h2[0],\n          fillStartColumn = _this$hot$selection$h2[1],\n          fillEndRow = _this$hot$selection$h2[2],\n          fillEndColumn = _this$hot$selection$h2[3];\n\n      var selectionRangeLast = this.hot.getSelectedRangeLast();\n      var topLeftCorner = selectionRangeLast.getTopLeftCorner();\n      var bottomRightCorner = selectionRangeLast.getBottomRightCorner();\n      this.resetSelectionOfDraggedArea();\n      var cornersOfSelectedCells = [topLeftCorner.row, topLeftCorner.col, bottomRightCorner.row, bottomRightCorner.col];\n      var cornersOfSelectionAndDragAreas = this.hot.runHooks('modifyAutofillRange', [Math.min(topLeftCorner.row, fillStartRow), Math.min(topLeftCorner.col, fillStartColumn), Math.max(bottomRightCorner.row, fillEndRow), Math.max(bottomRightCorner.col, fillEndColumn)], cornersOfSelectedCells);\n\n      var _getDragDirectionAndR = getDragDirectionAndRange(cornersOfSelectedCells, cornersOfSelectionAndDragAreas),\n          directionOfDrag = _getDragDirectionAndR.directionOfDrag,\n          startOfDragCoords = _getDragDirectionAndR.startOfDragCoords,\n          endOfDragCoords = _getDragDirectionAndR.endOfDragCoords;\n\n      if (startOfDragCoords && startOfDragCoords.row > -1 && startOfDragCoords.col > -1) {\n        var selectionData = this.getSelectionData();\n        var sourceRange = selectionRangeLast.clone();\n        var targetRange = new CellRange(startOfDragCoords, startOfDragCoords, endOfDragCoords);\n        var beforeAutofillHookResult = this.hot.runHooks('beforeAutofill', selectionData, sourceRange, targetRange, directionOfDrag);\n\n        if (beforeAutofillHookResult === false) {\n          this.hot.selection.highlight.getFill().clear();\n          this.hot.render();\n          return false;\n        }\n\n        var deltas = getDeltas(startOfDragCoords, endOfDragCoords, selectionData, directionOfDrag);\n        var fillData = beforeAutofillHookResult;\n        var res = beforeAutofillHookResult;\n\n        if (['up', 'left'].indexOf(directionOfDrag) > -1 && !(res.length === 1 && res[0].length === 0)) {\n          fillData = [];\n\n          if (directionOfDrag === 'up') {\n            var dragLength = endOfDragCoords.row - startOfDragCoords.row + 1;\n            var fillOffset = dragLength % res.length;\n\n            for (var i = 0; i < dragLength; i++) {\n              fillData.push(res[(i + (res.length - fillOffset)) % res.length]);\n            }\n          } else {\n            var _dragLength = endOfDragCoords.col - startOfDragCoords.col + 1;\n\n            var _fillOffset = _dragLength % res[0].length;\n\n            for (var _i2 = 0; _i2 < res.length; _i2++) {\n              fillData.push([]);\n\n              for (var j = 0; j < _dragLength; j++) {\n                fillData[_i2].push(res[_i2][(j + (res[_i2].length - _fillOffset)) % res[_i2].length]);\n              }\n            }\n          }\n        }\n\n        this.hot.populateFromArray(startOfDragCoords.row, startOfDragCoords.col, fillData, endOfDragCoords.row, endOfDragCoords.col, \"\".concat(this.pluginName, \".fill\"), null, directionOfDrag, deltas);\n        this.setSelection(cornersOfSelectionAndDragAreas);\n        this.hot.runHooks('afterAutofill', fillData, sourceRange, targetRange, directionOfDrag);\n        this.hot.render();\n      } else {\n        // reset to avoid some range bug\n        this.hot._refreshBorders();\n      }\n\n      return true;\n    }\n    /**\n     * Reduces the selection area if the handle was dragged outside of the table or on headers.\n     *\n     * @private\n     * @param {CellCoords} coords Indexes of selection corners.\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"reduceSelectionAreaIfNeeded\",\n    value: function reduceSelectionAreaIfNeeded(coords) {\n      if (coords.row < 0) {\n        coords.row = 0;\n      }\n\n      if (coords.col < 0) {\n        coords.col = 0;\n      }\n\n      return coords;\n    }\n    /**\n     * Gets the coordinates of the drag & drop borders.\n     *\n     * @private\n     * @param {CellCoords} coordsOfSelection `CellCoords` coord object.\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: \"getCoordsOfDragAndDropBorders\",\n    value: function getCoordsOfDragAndDropBorders(coordsOfSelection) {\n      var currentSelection = this.hot.getSelectedRangeLast();\n      var bottomRightCorner = currentSelection.getBottomRightCorner();\n      var coords = coordsOfSelection;\n\n      if (this.directions.includes(DIRECTIONS.vertical) && this.directions.includes(DIRECTIONS.horizontal)) {\n        var topLeftCorner = currentSelection.getTopLeftCorner();\n\n        if (bottomRightCorner.col <= coordsOfSelection.col || topLeftCorner.col >= coordsOfSelection.col) {\n          coords = new CellCoords(bottomRightCorner.row, coordsOfSelection.col);\n        }\n\n        if (bottomRightCorner.row < coordsOfSelection.row || topLeftCorner.row > coordsOfSelection.row) {\n          coords = new CellCoords(coordsOfSelection.row, bottomRightCorner.col);\n        }\n      } else if (this.directions.includes(DIRECTIONS.vertical)) {\n        coords = new CellCoords(coordsOfSelection.row, bottomRightCorner.col);\n      } else if (this.directions.includes(DIRECTIONS.horizontal)) {\n        coords = new CellCoords(bottomRightCorner.row, coordsOfSelection.col);\n      } else {\n        // wrong direction\n        return;\n      }\n\n      return this.reduceSelectionAreaIfNeeded(coords);\n    }\n    /**\n     * Show the fill border.\n     *\n     * @private\n     * @param {CellCoords} coordsOfSelection `CellCoords` coord object.\n     */\n\n  }, {\n    key: \"showBorder\",\n    value: function showBorder(coordsOfSelection) {\n      var coordsOfDragAndDropBorders = this.getCoordsOfDragAndDropBorders(coordsOfSelection);\n\n      if (coordsOfDragAndDropBorders) {\n        this.redrawBorders(coordsOfDragAndDropBorders);\n      }\n    }\n    /**\n     * Add new row.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"addRow\",\n    value: function addRow() {\n      var _this4 = this;\n\n      this.hot._registerTimeout(function () {\n        _this4.hot.alter(INSERT_ROW_ALTER_ACTION_NAME, void 0, 1, \"\".concat(_this4.pluginName, \".fill\"));\n\n        _this4.addingStarted = false;\n      }, INTERVAL_FOR_ADDING_ROW);\n    }\n    /**\n     * Add new rows if they are needed to continue auto-filling values.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"addNewRowIfNeeded\",\n    value: function addNewRowIfNeeded() {\n      if (!this.hot.selection.highlight.getFill().isEmpty() && this.addingStarted === false && this.autoInsertRow) {\n        var cornersOfSelectedCells = this.hot.getSelectedLast();\n        var cornersOfSelectedDragArea = this.hot.selection.highlight.getFill().getVisualCorners();\n        var nrOfTableRows = this.hot.countRows();\n\n        if (cornersOfSelectedCells[2] < nrOfTableRows - 1 && cornersOfSelectedDragArea[2] === nrOfTableRows - 1) {\n          this.addingStarted = true;\n          this.addRow();\n        }\n      }\n    }\n    /**\n     * Get index of last adjacent filled in row.\n     *\n     * @private\n     * @param {Array} cornersOfSelectedCells Indexes of selection corners.\n     * @returns {number} Gives number greater than or equal to zero when selection adjacent can be applied.\n     *                   Or -1 when selection adjacent can't be applied.\n     */\n\n  }, {\n    key: \"getIndexOfLastAdjacentFilledInRow\",\n    value: function getIndexOfLastAdjacentFilledInRow(cornersOfSelectedCells) {\n      var data = this.hot.getData();\n      var nrOfTableRows = this.hot.countRows();\n      var lastFilledInRowIndex;\n\n      for (var rowIndex = cornersOfSelectedCells[2] + 1; rowIndex < nrOfTableRows; rowIndex++) {\n        for (var columnIndex = cornersOfSelectedCells[1]; columnIndex <= cornersOfSelectedCells[3]; columnIndex++) {\n          var dataInCell = data[rowIndex][columnIndex];\n\n          if (dataInCell) {\n            return -1;\n          }\n        }\n\n        var dataInNextLeftCell = data[rowIndex][cornersOfSelectedCells[1] - 1];\n        var dataInNextRightCell = data[rowIndex][cornersOfSelectedCells[3] + 1];\n\n        if (!!dataInNextLeftCell || !!dataInNextRightCell) {\n          lastFilledInRowIndex = rowIndex;\n        }\n      }\n\n      return lastFilledInRowIndex;\n    }\n    /**\n     * Adds a selection from the start area to the specific row index.\n     *\n     * @private\n     * @param {Array} selectStartArea Selection area from which we start to create more comprehensive selection.\n     * @param {number} rowIndex The row index into the selection will be added.\n     */\n\n  }, {\n    key: \"addSelectionFromStartAreaToSpecificRowIndex\",\n    value: function addSelectionFromStartAreaToSpecificRowIndex(selectStartArea, rowIndex) {\n      this.hot.selection.highlight.getFill().clear().add(new CellCoords(selectStartArea[0], selectStartArea[1])).add(new CellCoords(rowIndex, selectStartArea[3])).commit();\n    }\n    /**\n     * Sets selection based on passed corners.\n     *\n     * @private\n     * @param {Array} cornersOfArea An array witch defines selection.\n     */\n\n  }, {\n    key: \"setSelection\",\n    value: function setSelection(cornersOfArea) {\n      var _this$hot;\n\n      (_this$hot = this.hot).selectCell.apply(_this$hot, _toConsumableArray(arrayMap(cornersOfArea, function (index) {\n        return Math.max(index, 0);\n      })).concat([false, false]));\n    }\n    /**\n     * Try to select cells down to the last row in the left column and then returns if selection was applied.\n     *\n     * @private\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"selectAdjacent\",\n    value: function selectAdjacent() {\n      var cornersOfSelectedCells = this.hot.getSelectedLast();\n      var lastFilledInRowIndex = this.getIndexOfLastAdjacentFilledInRow(cornersOfSelectedCells);\n\n      if (lastFilledInRowIndex === -1 || lastFilledInRowIndex === void 0) {\n        return false;\n      }\n\n      this.addSelectionFromStartAreaToSpecificRowIndex(cornersOfSelectedCells, lastFilledInRowIndex);\n      return true;\n    }\n    /**\n     * Resets selection of dragged area.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"resetSelectionOfDraggedArea\",\n    value: function resetSelectionOfDraggedArea() {\n      this.handleDraggedCells = 0;\n      this.hot.selection.highlight.getFill().clear();\n    }\n    /**\n     * Redraws borders.\n     *\n     * @private\n     * @param {CellCoords} coords `CellCoords` coord object.\n     */\n\n  }, {\n    key: \"redrawBorders\",\n    value: function redrawBorders(coords) {\n      this.hot.selection.highlight.getFill().clear().add(this.hot.getSelectedRangeLast().from).add(this.hot.getSelectedRangeLast().to).add(coords).commit();\n      this.hot.view.render();\n    }\n    /**\n     * Get if mouse was dragged outside.\n     *\n     * @private\n     * @param {MouseEvent} event `mousemove` event properties.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"getIfMouseWasDraggedOutside\",\n    value: function getIfMouseWasDraggedOutside(event) {\n      var documentElement = this.hot.rootDocument.documentElement;\n      var tableBottom = offset(this.hot.table).top - (this.hot.rootWindow.pageYOffset || documentElement.scrollTop) + outerHeight(this.hot.table);\n      var tableRight = offset(this.hot.table).left - (this.hot.rootWindow.pageXOffset || documentElement.scrollLeft) + outerWidth(this.hot.table);\n      return event.clientY > tableBottom && event.clientX <= tableRight;\n    }\n    /**\n     * Bind the events used by the plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"registerEvents\",\n    value: function registerEvents() {\n      var _this5 = this;\n\n      var documentElement = this.hot.rootDocument.documentElement;\n      this.eventManager.addEventListener(documentElement, 'mouseup', function () {\n        return _this5.onMouseUp();\n      });\n      this.eventManager.addEventListener(documentElement, 'mousemove', function (event) {\n        return _this5.onMouseMove(event);\n      });\n    }\n    /**\n     * On cell corner double click callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onCellCornerDblClick\",\n    value: function onCellCornerDblClick() {\n      var selectionApplied = this.selectAdjacent();\n\n      if (selectionApplied) {\n        this.fillIn();\n      }\n    }\n    /**\n     * On after cell corner mouse down listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterCellCornerMouseDown\",\n    value: function onAfterCellCornerMouseDown() {\n      this.handleDraggedCells = 1;\n      this.mouseDownOnCellCorner = true;\n    }\n    /**\n     * On before cell mouse over listener.\n     *\n     * @private\n     * @param {CellCoords} coords `CellCoords` coord object.\n     */\n\n  }, {\n    key: \"onBeforeCellMouseOver\",\n    value: function onBeforeCellMouseOver(coords) {\n      if (this.mouseDownOnCellCorner && !this.hot.view.isMouseDown() && this.handleDraggedCells) {\n        this.handleDraggedCells += 1;\n        this.showBorder(coords);\n        this.addNewRowIfNeeded();\n      }\n    }\n    /**\n     * On mouse up listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMouseUp\",\n    value: function onMouseUp() {\n      if (this.handleDraggedCells) {\n        if (this.handleDraggedCells > 1) {\n          this.fillIn();\n        }\n\n        this.handleDraggedCells = 0;\n        this.mouseDownOnCellCorner = false;\n      }\n    }\n    /**\n     * On mouse move listener.\n     *\n     * @private\n     * @param {MouseEvent} event `mousemove` event properties.\n     */\n\n  }, {\n    key: \"onMouseMove\",\n    value: function onMouseMove(event) {\n      var mouseWasDraggedOutside = this.getIfMouseWasDraggedOutside(event);\n\n      if (this.addingStarted === false && this.handleDraggedCells > 0 && mouseWasDraggedOutside) {\n        this.mouseDragOutside = true;\n        this.addingStarted = true;\n      } else {\n        this.mouseDragOutside = false;\n      }\n\n      if (this.mouseDragOutside && this.autoInsertRow) {\n        this.addRow();\n      }\n    }\n    /**\n     * Clears mapped settings.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"clearMappedSettings\",\n    value: function clearMappedSettings() {\n      this.directions.length = 0;\n      this.autoInsertRow = false;\n    }\n    /**\n     * Map settings.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"mapSettings\",\n    value: function mapSettings() {\n      var mappedSettings = getMappedFillHandleSetting(this.hot.getSettings().fillHandle);\n      this.directions = mappedSettings.directions;\n      this.autoInsertRow = mappedSettings.autoInsertRow;\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _get(_getPrototypeOf(Autofill.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return Autofill;\n}(BasePlugin);", "import \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport { isObject } from \"../../helpers/object.mjs\";\nimport { isDefined } from \"../../helpers/mixed.mjs\";\nimport { CellCoords } from \"../../3rdparty/walkontable/src/index.mjs\";\nexport var DIRECTIONS = {\n  horizontal: 'horizontal',\n  vertical: 'vertical'\n};\n/**\n * Get deltas array.\n *\n * @param {CellCoords} start The point in the grid where the selection starts.\n * @param {CellCoords} end The point in the grid where the selection ends.\n * @param {Array} data The chunk of the data which belongs to the selected box.\n * @param {string} direction The selection direction.\n * @returns {Array}\n */\n\nexport function getDeltas(start, end, data, direction) {\n  var rowsLength = data.length;\n  var columnsLength = data ? data[0].length : 0;\n  var deltas = [];\n  var diffRow = end.row - start.row;\n  var diffCol = end.col - start.col;\n\n  if (['down', 'up'].indexOf(direction) !== -1) {\n    var arr = [];\n\n    for (var col = 0; col < diffCol; col++) {\n      var startValue = parseInt(data[0][col], 10);\n      var endValue = parseInt(data[rowsLength - 1][col], 10);\n      var delta = (direction === 'down' ? endValue - startValue : startValue - endValue) / (rowsLength - 1) || 0;\n      arr.push(delta);\n    }\n\n    deltas.push(arr);\n  }\n\n  if (['right', 'left'].indexOf(direction) !== -1) {\n    for (var row = 0; row < diffRow; row++) {\n      var _startValue = parseInt(data[row][0], 10);\n\n      var _endValue = parseInt(data[row][columnsLength - 1], 10);\n\n      var _delta = (direction === 'right' ? _endValue - _startValue : _startValue - _endValue) / (columnsLength - 1) || 0;\n\n      deltas.push([_delta]);\n    }\n  }\n\n  return deltas;\n}\n/**\n * Get direction between positions and cords of selections difference (drag area).\n *\n * @param {Array} startSelection The coordinates where the selection starts.\n * @param {Array} endSelection The coordinates where the selection ends.\n * @returns {{direction: string, start: CellCoords, end: CellCoords}}\n */\n\nexport function getDragDirectionAndRange(startSelection, endSelection) {\n  var startOfDragCoords;\n  var endOfDragCoords;\n  var directionOfDrag;\n\n  if (endSelection[0] === startSelection[0] && endSelection[1] < startSelection[1]) {\n    directionOfDrag = 'left';\n    startOfDragCoords = new CellCoords(endSelection[0], endSelection[1]);\n    endOfDragCoords = new CellCoords(endSelection[2], startSelection[1] - 1);\n  } else if (endSelection[2] === startSelection[2] && endSelection[0] === startSelection[0] && endSelection[3] > startSelection[3]) {\n    directionOfDrag = 'right';\n    startOfDragCoords = new CellCoords(endSelection[0], startSelection[3] + 1);\n    endOfDragCoords = new CellCoords(endSelection[2], endSelection[3]);\n  } else if (endSelection[0] < startSelection[0] && endSelection[1] === startSelection[1]) {\n    directionOfDrag = 'up';\n    startOfDragCoords = new CellCoords(endSelection[0], endSelection[1]);\n    endOfDragCoords = new CellCoords(startSelection[0] - 1, endSelection[3]);\n  } else if (endSelection[2] > startSelection[2] && endSelection[1] === startSelection[1]) {\n    directionOfDrag = 'down';\n    startOfDragCoords = new CellCoords(startSelection[2] + 1, endSelection[1]);\n    endOfDragCoords = new CellCoords(endSelection[2], endSelection[3]);\n  }\n\n  if (startOfDragCoords) {\n    startOfDragCoords.normalize();\n  }\n\n  if (endOfDragCoords) {\n    endOfDragCoords.normalize();\n  }\n\n  return {\n    directionOfDrag: directionOfDrag,\n    startOfDragCoords: startOfDragCoords,\n    endOfDragCoords: endOfDragCoords\n  };\n}\n/**\n * Get mapped FillHandle setting containing information about\n * allowed FillHandle directions and if allowed is automatic insertion of rows on drag.\n *\n * @param {boolean|object} fillHandle Property of Handsontable settings.\n * @returns {{directions: Array, autoInsertRow: boolean}} Object allowing access to information\n * about FillHandle in more useful way.\n */\n\nexport function getMappedFillHandleSetting(fillHandle) {\n  var mappedSettings = {};\n\n  if (fillHandle === true) {\n    mappedSettings.directions = Object.keys(DIRECTIONS);\n    mappedSettings.autoInsertRow = true;\n  } else if (isObject(fillHandle)) {\n    if (isDefined(fillHandle.autoInsertRow)) {\n      // autoInsertRow for horizontal direction will be always false\n      if (fillHandle.direction === DIRECTIONS.horizontal) {\n        mappedSettings.autoInsertRow = false;\n      } else {\n        mappedSettings.autoInsertRow = fillHandle.autoInsertRow;\n      }\n    } else {\n      mappedSettings.autoInsertRow = false;\n    }\n\n    if (isDefined(fillHandle.direction)) {\n      mappedSettings.directions = [fillHandle.direction];\n    } else {\n      mappedSettings.directions = Object.keys(DIRECTIONS);\n    }\n  } else if (typeof fillHandle === 'string') {\n    mappedSettings.directions = [fillHandle];\n    mappedSettings.autoInsertRow = true;\n  } else {\n    mappedSettings.directions = [];\n    mappedSettings.autoInsertRow = false;\n  }\n\n  return mappedSettings;\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { arrayEach, arrayFilter } from \"../../helpers/array.mjs\";\nimport { cancelAnimationFrame, requestAnimationFrame } from \"../../helpers/feature.mjs\";\nimport { isVisible } from \"../../helpers/dom/element.mjs\";\nimport GhostTable from \"../../utils/ghostTable.mjs\";\nimport { isObject, hasOwnProperty } from \"../../helpers/object.mjs\";\nimport { valueAccordingPercent, rangeEach } from \"../../helpers/number.mjs\";\nimport SamplesGenerator from \"../../utils/samplesGenerator.mjs\";\nimport { isPercentValue } from \"../../helpers/string.mjs\";\nimport { PhysicalIndexToValueMap as IndexToValueMap } from \"../../translations/index.mjs\";\nexport var PLUGIN_KEY = 'autoRowSize';\nexport var PLUGIN_PRIORITY = 40;\nvar ROW_WIDTHS_MAP_NAME = 'autoRowSize';\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin AutoRowSize\n * @class AutoRowSize\n * @description\n * The `AutoRowSize` plugin allows you to set row heights based on their highest cells.\n *\n * By default, the plugin is declared as `undefined`, which makes it disabled (same as if it was declared as `false`).\n * Enabling this plugin may decrease the overall table performance, as it needs to calculate the heights of all cells to\n * resize the rows accordingly.\n * If you experience problems with the performance, try turning this feature off and declaring the row heights manually.\n *\n * But, to display Handsontable's [scrollbar](https://handsontable.com/docs/8.0.0/demo-scrolling.html)\n * in a proper size, you need to enable the `AutoRowSize` plugin,\n * by setting the [`autoRowSize`](@/api/options.md#autoRowSize) option to `true`.\n *\n * Row height calculations are divided into sync and async part. Each of this parts has their own advantages and\n * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous\n * operations don't block the browser UI.\n *\n * To configure the sync/async distribution, you can pass an absolute value (number of rows) or a percentage value to a config object:\n * ```js\n * // as a number (300 rows in sync, rest async)\n * autoRowSize: {syncLimit: 300},.\n *\n * // as a string (percent)\n * autoRowSize: {syncLimit: '40%'},.\n *\n * // allow sample duplication\n * autoRowSize: {syncLimit: '40%', allowSampleDuplicates: true},\n * ```\n *\n * You can also use the `allowSampleDuplicates` option to allow sampling duplicate values when calculating the row\n * height. __Note__, that this might have a negative impact on performance.\n *\n * To configure this plugin see {@link Options#autoRowSize}.\n *\n * @example\n *\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *   data: getData(),\n *   autoRowSize: true\n * });\n * // Access to plugin instance:\n * const plugin = hot.getPlugin('autoRowSize');\n *\n * plugin.getRowHeight(4);\n *\n * if (plugin.isEnabled()) {\n *   // code...\n * }\n * ```\n */\n\n/* eslint-enable jsdoc/require-description-complete-sentence */\n\nexport var AutoRowSize = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(AutoRowSize, _BasePlugin);\n\n  var _super = _createSuper(AutoRowSize);\n\n  function AutoRowSize(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, AutoRowSize);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * PhysicalIndexToValueMap to keep and track heights for physical row indexes.\n     *\n     * @private\n     * @type {PhysicalIndexToValueMap}\n     */\n\n    _this.rowHeightsMap = void 0;\n    /**\n     * Columns header's height cache.\n     *\n     * @private\n     * @type {number}\n     */\n\n    _this.headerHeight = null;\n    /**\n     * Instance of {@link GhostTable} for rows and columns size calculations.\n     *\n     * @private\n     * @type {GhostTable}\n     */\n\n    _this.ghostTable = new GhostTable(_this.hot);\n    /**\n     * Instance of {@link SamplesGenerator} for generating samples necessary for rows height calculations.\n     *\n     * @private\n     * @type {SamplesGenerator}\n     */\n\n    _this.samplesGenerator = new SamplesGenerator(function (row, col) {\n      var cellValue;\n\n      if (row >= 0) {\n        cellValue = _this.hot.getDataAtCell(row, col);\n      } else if (row === -1) {\n        cellValue = _this.hot.getColHeader(col);\n      }\n\n      return {\n        value: cellValue\n      };\n    });\n    /**\n     * `true` if only the first calculation was performed.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    _this.firstCalculation = true;\n    /**\n     * `true` if the size calculation is in progress.\n     *\n     * @type {boolean}\n     */\n\n    _this.inProgress = false;\n    /**\n     * Number of already measured rows (we already know their sizes).\n     *\n     * @type {number}\n     */\n\n    _this.measuredRows = 0;\n    /**\n     * PhysicalIndexToValueMap to keep and track heights for physical row indexes.\n     *\n     * @private\n     * @type {PhysicalIndexToValueMap}\n     */\n\n    _this.rowHeightsMap = new IndexToValueMap();\n\n    _this.hot.rowIndexMapper.registerMap(ROW_WIDTHS_MAP_NAME, _this.rowHeightsMap); // Leave the listener active to allow auto-sizing the rows when the plugin is disabled.\n    // This is necesseary for height recalculation for resize handler doubleclick (ManualRowResize).\n\n\n    _this.addHook('beforeRowResize', function (size, row, isDblClick) {\n      return _this.onBeforeRowResize(size, row, isDblClick);\n    });\n\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link AutoRowSize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(AutoRowSize, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      var settings = this.hot.getSettings()[PLUGIN_KEY];\n      return settings === true || isObject(settings);\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.setSamplingOptions();\n      this.addHook('afterLoadData', function () {\n        return _this2.onAfterLoadData.apply(_this2, arguments);\n      });\n      this.addHook('beforeChange', function (changes) {\n        return _this2.onBeforeChange(changes);\n      });\n      this.addHook('beforeColumnResize', function () {\n        return _this2.recalculateAllRowsHeight();\n      });\n      this.addHook('beforeViewRender', function (force) {\n        return _this2.onBeforeViewRender(force);\n      });\n      this.addHook('modifyRowHeight', function (height, row) {\n        return _this2.getRowHeight(row, height);\n      });\n      this.addHook('modifyColumnHeaderHeight', function () {\n        return _this2.getColumnHeaderHeight();\n      });\n\n      _get(_getPrototypeOf(AutoRowSize.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      var _this3 = this;\n\n      this.headerHeight = null;\n\n      _get(_getPrototypeOf(AutoRowSize.prototype), \"disablePlugin\", this).call(this); // Leave the listener active to allow auto-sizing the rows when the plugin is disabled.\n      // This is necesseary for height recalculation for resize handler doubleclick (ManualRowResize).\n\n\n      this.addHook('beforeRowResize', function (size, row, isDblClick) {\n        return _this3.onBeforeRowResize(size, row, isDblClick);\n      });\n    }\n    /**\n     * Calculate a given rows height.\n     *\n     * @param {number|object} rowRange Row index or an object with `from` and `to` indexes as a range.\n     * @param {number|object} colRange Column index or an object with `from` and `to` indexes as a range.\n     * @param {boolean} [force=false] If `true` the calculation will be processed regardless of whether the width exists in the cache.\n     */\n\n  }, {\n    key: \"calculateRowsHeight\",\n    value: function calculateRowsHeight() {\n      var _this4 = this;\n\n      var rowRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        from: 0,\n        to: this.hot.countRows() - 1\n      };\n      var colRange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        from: 0,\n        to: this.hot.countCols() - 1\n      };\n      var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      // eslint-disable-line max-len\n      var rowsRange = typeof rowRange === 'number' ? {\n        from: rowRange,\n        to: rowRange\n      } : rowRange;\n      var columnsRange = typeof colRange === 'number' ? {\n        from: colRange,\n        to: colRange\n      } : colRange;\n\n      if (this.hot.getColHeader(0) !== null) {\n        var samples = this.samplesGenerator.generateRowSamples(-1, columnsRange);\n        this.ghostTable.addColumnHeadersRow(samples.get(-1));\n      }\n\n      rangeEach(rowsRange.from, rowsRange.to, function (row) {\n        // For rows we must calculate row height even when user had set height value manually.\n        // We can shrink column but cannot shrink rows!\n        if (force || _this4.rowHeightsMap.getValueAtIndex(row) === null) {\n          var _samples = _this4.samplesGenerator.generateRowSamples(row, columnsRange);\n\n          arrayEach(_samples, function (_ref) {\n            var _ref2 = _slicedToArray(_ref, 2),\n                rowIndex = _ref2[0],\n                sample = _ref2[1];\n\n            return _this4.ghostTable.addRow(rowIndex, sample);\n          });\n        }\n      });\n\n      if (this.ghostTable.rows.length) {\n        this.hot.batchExecution(function () {\n          _this4.ghostTable.getHeights(function (row, height) {\n            if (row < 0) {\n              _this4.headerHeight = height;\n            } else {\n              _this4.rowHeightsMap.setValueAtIndex(_this4.hot.toPhysicalRow(row), height);\n            }\n          });\n        }, true);\n        this.measuredRows = rowsRange.to + 1;\n        this.ghostTable.clean();\n      }\n    }\n    /**\n     * Calculate all rows heights. The calculated row will be cached in the {@link AutoRowSize#heights} property.\n     * To retrieve height for specified row use {@link AutoRowSize#getRowHeight} method.\n     *\n     * @param {object|number} colRange Row index or an object with `from` and `to` properties which define row range.\n     */\n\n  }, {\n    key: \"calculateAllRowsHeight\",\n    value: function calculateAllRowsHeight() {\n      var _this5 = this;\n\n      var colRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        from: 0,\n        to: this.hot.countCols() - 1\n      };\n      var current = 0;\n      var length = this.hot.countRows() - 1;\n      var timer = null;\n      this.inProgress = true;\n\n      var loop = function loop() {\n        // When hot was destroyed after calculating finished cancel frame\n        if (!_this5.hot) {\n          cancelAnimationFrame(timer);\n          _this5.inProgress = false;\n          return;\n        }\n\n        _this5.calculateRowsHeight({\n          from: current,\n          to: Math.min(current + AutoRowSize.CALCULATION_STEP, length)\n        }, colRange);\n\n        current = current + AutoRowSize.CALCULATION_STEP + 1;\n\n        if (current < length) {\n          timer = requestAnimationFrame(loop);\n        } else {\n          cancelAnimationFrame(timer);\n          _this5.inProgress = false; // @TODO Should call once per render cycle, currently fired separately in different plugins\n\n          _this5.hot.view.adjustElementsSize(true); // tmp\n\n\n          if (_this5.hot.view.wt.wtOverlays.leftOverlay.needFullRender) {\n            _this5.hot.view.wt.wtOverlays.leftOverlay.clone.draw();\n          }\n        }\n      };\n\n      var syncLimit = this.getSyncCalculationLimit(); // sync\n\n      if (this.firstCalculation && syncLimit >= 0) {\n        this.calculateRowsHeight({\n          from: 0,\n          to: syncLimit\n        }, colRange);\n        this.firstCalculation = false;\n        current = syncLimit + 1;\n      } // async\n\n\n      if (current < length) {\n        loop();\n      } else {\n        this.inProgress = false;\n        this.hot.view.adjustElementsSize(false);\n      }\n    }\n    /**\n     * Sets the sampling options.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"setSamplingOptions\",\n    value: function setSamplingOptions() {\n      var setting = this.hot.getSettings()[PLUGIN_KEY];\n      var samplingRatio = setting && hasOwnProperty(setting, 'samplingRatio') ? setting.samplingRatio : void 0;\n      var allowSampleDuplicates = setting && hasOwnProperty(setting, 'allowSampleDuplicates') ? setting.allowSampleDuplicates : void 0;\n\n      if (samplingRatio && !isNaN(samplingRatio)) {\n        this.samplesGenerator.setSampleCount(parseInt(samplingRatio, 10));\n      }\n\n      if (allowSampleDuplicates) {\n        this.samplesGenerator.setAllowDuplicates(allowSampleDuplicates);\n      }\n    }\n    /**\n     * Recalculates all rows height (overwrite cache values).\n     */\n\n  }, {\n    key: \"recalculateAllRowsHeight\",\n    value: function recalculateAllRowsHeight() {\n      if (isVisible(this.hot.view.wt.wtTable.TABLE)) {\n        this.clearCache();\n        this.calculateAllRowsHeight();\n      }\n    }\n    /**\n     * Gets value which tells how many rows should be calculated synchronously (rest of the rows will be calculated\n     * asynchronously). The limit is calculated based on `syncLimit` set to autoRowSize option (see {@link Options#autoRowSize}).\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getSyncCalculationLimit\",\n    value: function getSyncCalculationLimit() {\n      var settings = this.hot.getSettings()[PLUGIN_KEY];\n      /* eslint-disable no-bitwise */\n\n      var limit = AutoRowSize.SYNC_CALCULATION_LIMIT;\n      var rowsLimit = this.hot.countRows() - 1;\n\n      if (isObject(settings)) {\n        limit = settings.syncLimit;\n\n        if (isPercentValue(limit)) {\n          limit = valueAccordingPercent(rowsLimit, limit);\n        } else {\n          // Force to Number\n          limit >>= 0;\n        }\n      }\n\n      return Math.min(limit, rowsLimit);\n    }\n    /**\n     * Gets the calculated row height.\n     *\n     * Mind that this method is different from the [Core](@/api/core.md)'s [`getRowHeight()`](@/api/core.md#getrowheight) method.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} [defaultHeight] Default row height. It will be picked up if no calculated height found.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getRowHeight\",\n    value: function getRowHeight(row) {\n      var defaultHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : void 0;\n      var cachedHeight = row < 0 ? this.headerHeight : this.rowHeightsMap.getValueAtIndex(this.hot.toPhysicalRow(row));\n      var height = defaultHeight;\n\n      if (cachedHeight !== null && cachedHeight > (defaultHeight || 0)) {\n        height = cachedHeight;\n      }\n\n      return height;\n    }\n    /**\n     * Get the calculated column header height.\n     *\n     * @returns {number|undefined}\n     */\n\n  }, {\n    key: \"getColumnHeaderHeight\",\n    value: function getColumnHeaderHeight() {\n      return this.headerHeight;\n    }\n    /**\n     * Get the first visible row.\n     *\n     * @returns {number} Returns row index, -1 if table is not rendered or if there are no rows to base the the calculations on.\n     */\n\n  }, {\n    key: \"getFirstVisibleRow\",\n    value: function getFirstVisibleRow() {\n      var wot = this.hot.view.wt;\n\n      if (wot.wtViewport.rowsVisibleCalculator) {\n        return wot.wtTable.getFirstVisibleRow();\n      }\n\n      if (wot.wtViewport.rowsRenderCalculator) {\n        return wot.wtTable.getFirstRenderedRow();\n      }\n\n      return -1;\n    }\n    /**\n     * Gets the last visible row.\n     *\n     * @returns {number} Returns row index or -1 if table is not rendered.\n     */\n\n  }, {\n    key: \"getLastVisibleRow\",\n    value: function getLastVisibleRow() {\n      var wot = this.hot.view.wt;\n\n      if (wot.wtViewport.rowsVisibleCalculator) {\n        return wot.wtTable.getLastVisibleRow();\n      }\n\n      if (wot.wtViewport.rowsRenderCalculator) {\n        return wot.wtTable.getLastRenderedRow();\n      }\n\n      return -1;\n    }\n    /**\n     * Clears cached heights.\n     */\n\n  }, {\n    key: \"clearCache\",\n    value: function clearCache() {\n      this.headerHeight = null;\n      this.rowHeightsMap.init();\n    }\n    /**\n     * Clears cache by range.\n     *\n     * @param {object|number} range Row index or an object with `from` and `to` properties which define row range.\n     */\n\n  }, {\n    key: \"clearCacheByRange\",\n    value: function clearCacheByRange(range) {\n      var _this6 = this;\n\n      var _ref3 = typeof range === 'number' ? {\n        from: range,\n        to: range\n      } : range,\n          from = _ref3.from,\n          to = _ref3.to;\n\n      this.hot.batchExecution(function () {\n        rangeEach(Math.min(from, to), Math.max(from, to), function (row) {\n          _this6.rowHeightsMap.setValueAtIndex(row, null);\n        });\n      }, true);\n    }\n    /**\n     * Checks if all heights were calculated. If not then return `true` (need recalculate).\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isNeedRecalculate\",\n    value: function isNeedRecalculate() {\n      return !!arrayFilter(this.rowHeightsMap.getValues().slice(0, this.measuredRows), function (item) {\n        return item === null;\n      }).length;\n    }\n    /**\n     * On before view render listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onBeforeViewRender\",\n    value: function onBeforeViewRender() {\n      var force = this.hot.renderCall;\n      var fixedRowsBottom = this.hot.getSettings().fixedRowsBottom;\n      var firstVisibleRow = this.getFirstVisibleRow();\n      var lastVisibleRow = this.getLastVisibleRow();\n\n      if (firstVisibleRow === -1 || lastVisibleRow === -1) {\n        return;\n      }\n\n      this.calculateRowsHeight({\n        from: firstVisibleRow,\n        to: lastVisibleRow\n      }, void 0, force); // Calculate rows height synchronously for bottom overlay\n\n      if (fixedRowsBottom) {\n        var totalRows = this.hot.countRows() - 1;\n        this.calculateRowsHeight({\n          from: totalRows - fixedRowsBottom,\n          to: totalRows\n        });\n      }\n\n      if (this.isNeedRecalculate() && !this.inProgress) {\n        this.calculateAllRowsHeight();\n      }\n    }\n    /**\n     * On before row move listener.\n     *\n     * @private\n     * @param {number} from Row index where was grabbed.\n     * @param {number} to Destination row index.\n     */\n\n  }, {\n    key: \"onBeforeRowMove\",\n    value: function onBeforeRowMove(from, to) {\n      this.clearCacheByRange({\n        from: from,\n        to: to\n      });\n      this.calculateAllRowsHeight();\n    }\n    /**\n     * On before row resize listener.\n     *\n     * @private\n     * @param {number} size The size of the current row index.\n     * @param {number} row Current row index.\n     * @param {boolean} isDblClick Indicates if the resize was triggered by doubleclick.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"onBeforeRowResize\",\n    value: function onBeforeRowResize(size, row, isDblClick) {\n      var newSize = size;\n\n      if (isDblClick) {\n        this.calculateRowsHeight(row, void 0, true);\n        newSize = this.getRowHeight(row);\n      }\n\n      return newSize;\n    }\n    /**\n     * On after load data listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterLoadData\",\n    value: function onAfterLoadData() {\n      var _this7 = this;\n\n      if (this.hot.view) {\n        this.recalculateAllRowsHeight();\n      } else {\n        // first load - initialization\n        setTimeout(function () {\n          if (_this7.hot) {\n            _this7.recalculateAllRowsHeight();\n          }\n        }, 0);\n      }\n    }\n    /**\n     * On before change listener.\n     *\n     * @private\n     * @param {Array} changes 2D array containing information about each of the edited cells.\n     */\n\n  }, {\n    key: \"onBeforeChange\",\n    value: function onBeforeChange(changes) {\n      var range = null;\n\n      if (changes.length === 1) {\n        range = changes[0][0];\n      } else if (changes.length > 1) {\n        range = {\n          from: changes[0][0],\n          to: changes[changes.length - 1][0]\n        };\n      }\n\n      if (range !== null) {\n        this.clearCacheByRange(range);\n      }\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.ghostTable.clean();\n\n      _get(_getPrototypeOf(AutoRowSize.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }, {\n    key: \"CALCULATION_STEP\",\n    get: function get() {\n      return 50;\n    }\n  }, {\n    key: \"SYNC_CALCULATION_LIMIT\",\n    get: function get() {\n      return 500;\n    }\n  }]);\n\n  return AutoRowSize;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport LooseBindsMap from \"./maps/looseBindsMap.mjs\";\nimport StrictBindsMap from \"./maps/strictBindsMap.mjs\";\nexport var PLUGIN_KEY = 'bindRowsWithHeaders';\nexport var PLUGIN_PRIORITY = 210;\nvar DEFAULT_BIND = 'loose';\nvar bindTypeToMapStrategy = new Map([['loose', LooseBindsMap], ['strict', StrictBindsMap]]);\n/**\n * @plugin BindRowsWithHeaders\n * @class BindRowsWithHeaders\n *\n * @description\n * Plugin allows binding the table rows with their headers.\n *\n * If the plugin is enabled, the table row headers will \"stick\" to the rows, when they are hidden/moved. Basically, if\n * at the initialization row 0 has a header titled \"A\", it will have it no matter what you do with the table.\n *\n * @example\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   // enable plugin\n *   bindRowsWithHeaders: true\n * });\n * ```\n */\n\nexport var BindRowsWithHeaders = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(BindRowsWithHeaders, _BasePlugin);\n\n  var _super = _createSuper(BindRowsWithHeaders);\n\n  function BindRowsWithHeaders(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, BindRowsWithHeaders);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Plugin indexes cache.\n     *\n     * @private\n     * @type {null|IndexMap}\n     */\n\n    _this.headerIndexes = null;\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link BindRowsWithHeaders#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(BindRowsWithHeaders, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      var bindType = this.hot.getSettings()[PLUGIN_KEY];\n\n      if (typeof bindType !== 'string') {\n        bindType = DEFAULT_BIND;\n      }\n\n      var MapStrategy = bindTypeToMapStrategy.get(bindType);\n      this.headerIndexes = this.hot.rowIndexMapper.registerMap('bindRowsWithHeaders', new MapStrategy());\n      this.addHook('modifyRowHeader', function (row) {\n        return _this2.onModifyRowHeader(row);\n      });\n\n      _get(_getPrototypeOf(BindRowsWithHeaders.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.hot.rowIndexMapper.unregisterMap('bindRowsWithHeaders');\n\n      _get(_getPrototypeOf(BindRowsWithHeaders.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * On modify row header listener.\n     *\n     * @private\n     * @param {number} row Row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"onModifyRowHeader\",\n    value: function onModifyRowHeader(row) {\n      return this.headerIndexes.getValueAtIndex(this.hot.toPhysicalRow(row));\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _get(_getPrototypeOf(BindRowsWithHeaders.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return BindRowsWithHeaders;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { IndexMap, alterUtilsFactory, getDecreasedIndexes, getIncreasedIndexes } from \"../../../translations/index.mjs\";\n\nvar _alterUtilsFactory = alterUtilsFactory('physicallyIndexed'),\n    getListWithInsertedItems = _alterUtilsFactory.getListWithInsertedItems,\n    getListWithRemovedItems = _alterUtilsFactory.getListWithRemovedItems;\n/**\n * Map from physical index to another index.\n */\n\n\nvar LooseBindsMap = /*#__PURE__*/function (_IndexMap) {\n  _inherits(LooseBindsMap, _IndexMap);\n\n  var _super = _createSuper(LooseBindsMap);\n\n  function LooseBindsMap() {\n    _classCallCheck(this, LooseBindsMap);\n\n    return _super.call(this, function (index) {\n      return index;\n    });\n  }\n  /**\n   * Add values to list and reorganize.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n\n\n  _createClass(LooseBindsMap, [{\n    key: \"insert\",\n    value: function insert(insertionIndex, insertedIndexes) {\n      var listAfterUpdate = getIncreasedIndexes(this.indexedValues, insertedIndexes);\n      this.indexedValues = getListWithInsertedItems(listAfterUpdate, insertionIndex, insertedIndexes, this.initValueOrFn);\n\n      _get(_getPrototypeOf(LooseBindsMap.prototype), \"insert\", this).call(this, insertionIndex, insertedIndexes);\n    }\n    /**\n     * Remove values from the list and reorganize.\n     *\n     * @private\n     * @param {Array} removedIndexes List of removed indexes.\n     */\n\n  }, {\n    key: \"remove\",\n    value: function remove(removedIndexes) {\n      var listAfterUpdate = getListWithRemovedItems(this.indexedValues, removedIndexes);\n      this.indexedValues = getDecreasedIndexes(listAfterUpdate, removedIndexes);\n\n      _get(_getPrototypeOf(LooseBindsMap.prototype), \"remove\", this).call(this, removedIndexes);\n    }\n  }]);\n\n  return LooseBindsMap;\n}(IndexMap);\n\nexport default LooseBindsMap;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { IndexMap, alterUtilsFactory } from \"../../../translations/index.mjs\";\n\nvar _alterUtilsFactory = alterUtilsFactory('physicallyIndexed'),\n    getListWithInsertedItems = _alterUtilsFactory.getListWithInsertedItems,\n    getListWithRemovedItems = _alterUtilsFactory.getListWithRemovedItems;\n/**\n * Map from physical index to another index.\n */\n\n\nvar StrictBindsMap = /*#__PURE__*/function (_IndexMap) {\n  _inherits(StrictBindsMap, _IndexMap);\n\n  var _super = _createSuper(StrictBindsMap);\n\n  function StrictBindsMap() {\n    _classCallCheck(this, StrictBindsMap);\n\n    return _super.call(this, function (index) {\n      return index;\n    });\n  }\n  /**\n   * Add values to list and reorganize.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n\n\n  _createClass(StrictBindsMap, [{\n    key: \"insert\",\n    value: function insert(insertionIndex, insertedIndexes) {\n      var _this = this;\n\n      this.indexedValues = getListWithInsertedItems(this.indexedValues, insertionIndex, insertedIndexes, function (_, ordinalNumber) {\n        return _this.getNextValue(ordinalNumber);\n      });\n\n      _get(_getPrototypeOf(StrictBindsMap.prototype), \"insert\", this).call(this, insertionIndex, insertedIndexes);\n    }\n    /**\n     * Remove values from the list and reorganize.\n     *\n     * @private\n     * @param {Array} removedIndexes List of removed indexes.\n     */\n\n  }, {\n    key: \"remove\",\n    value: function remove(removedIndexes) {\n      this.indexedValues = getListWithRemovedItems(this.indexedValues, removedIndexes);\n\n      _get(_getPrototypeOf(StrictBindsMap.prototype), \"remove\", this).call(this, removedIndexes);\n    }\n    /**\n     * Get next values, which should be greater than actual maximum value in the list.\n     *\n     * @param {number} ordinalNumber Position in the list.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getNextValue\",\n    value: function getNextValue(ordinalNumber) {\n      return Math.max.apply(Math, _toConsumableArray(this.getValues())) + 1 + ordinalNumber;\n    }\n  }]);\n\n  return StrictBindsMap;\n}(IndexMap);\n\nexport default StrictBindsMap;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\n\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\n\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\n\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { arrayEach, arrayFilter, arrayUnique } from \"../../helpers/array.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport { warn } from \"../../helpers/console.mjs\";\nimport { addClass, hasClass, fastInnerText } from \"../../helpers/dom/element.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { stopImmediatePropagation } from \"../../helpers/dom/event.mjs\";\nexport var PLUGIN_KEY = 'collapsibleColumns';\nexport var PLUGIN_PRIORITY = 290;\nvar actionDictionary = new Map([['collapse', {\n  hideColumn: true,\n  beforeHook: 'beforeColumnCollapse',\n  afterHook: 'afterColumnCollapse'\n}], ['expand', {\n  hideColumn: false,\n  beforeHook: 'beforeColumnExpand',\n  afterHook: 'afterColumnExpand'\n}]]);\n/**\n * @plugin CollapsibleColumns\n * @class CollapsibleColumns\n *\n * @description\n * The _CollapsibleColumns_ plugin allows collapsing of columns, covered by a header with the `colspan` property defined.\n *\n * Clicking the \"collapse/expand\" button collapses (or expands) all \"child\" headers except the first one.\n *\n * Setting the {@link Options#collapsiblecolumns} property to `true` will display a \"collapse/expand\" button in every header\n * with a defined `colspan` property.\n *\n * To limit this functionality to a smaller group of headers, define the `collapsibleColumns` property as an array\n * of objects, as in the example below.\n *\n * @example\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: generateDataObj(),\n *   colHeaders: true,\n *   rowHeaders: true,\n *   nestedHeaders: true,\n *   // enable plugin\n *   collapsibleColumns: true,\n * });\n *\n * // or\n * const hot = new Handsontable(container, {\n *   data: generateDataObj(),\n *   colHeaders: true,\n *   rowHeaders: true,\n *   nestedHeaders: true,\n *   // enable and configure which columns can be collapsed\n *   collapsibleColumns: [\n *     {row: -4, col: 1, collapsible: true},\n *     {row: -3, col: 5, collapsible: true}\n *   ],\n * });\n * ```\n */\n\nvar _collapsedColumnsMap = /*#__PURE__*/new WeakMap();\n\nexport var CollapsibleColumns = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(CollapsibleColumns, _BasePlugin);\n\n  var _super = _createSuper(CollapsibleColumns);\n\n  function CollapsibleColumns() {\n    var _this;\n\n    _classCallCheck(this, CollapsibleColumns);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"nestedHeadersPlugin\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"eventManager\", new EventManager(_assertThisInitialized(_this)));\n\n    _defineProperty(_assertThisInitialized(_this), \"headerStateManager\", null);\n\n    _classPrivateFieldInitSpec(_assertThisInitialized(_this), _collapsedColumnsMap, {\n      writable: true,\n      value: null\n    });\n\n    return _this;\n  }\n\n  _createClass(CollapsibleColumns, [{\n    key: \"isEnabled\",\n    value:\n    /**\n     * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n     * hook and if it returns `true` than the {@link CollapsibleColumns#enablePlugin} method is called.\n     *\n     * @returns {boolean}\n     */\n    function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      var _this$hot$getSettings = this.hot.getSettings(),\n          nestedHeaders = _this$hot$getSettings.nestedHeaders;\n\n      if (!nestedHeaders) {\n        warn('You need to configure the Nested Headers plugin in order to use collapsible headers.');\n      }\n\n      _classPrivateFieldSet(this, _collapsedColumnsMap, this.hot.columnIndexMapper.createAndRegisterIndexMap(this.pluginName, 'hiding'));\n\n      this.nestedHeadersPlugin = this.hot.getPlugin('nestedHeaders');\n      this.headerStateManager = this.nestedHeadersPlugin.getStateManager();\n      this.addHook('init', function () {\n        return _this2.onInit();\n      });\n      this.addHook('afterLoadData', function () {\n        return _this2.onAfterLoadData.apply(_this2, arguments);\n      });\n      this.addHook('afterGetColHeader', function (col, TH) {\n        return _this2.onAfterGetColHeader(col, TH);\n      });\n      this.addHook('beforeOnCellMouseDown', function (event, coords, TD) {\n        return _this2.onBeforeOnCellMouseDown(event, coords, TD);\n      });\n\n      _get(_getPrototypeOf(CollapsibleColumns.prototype), \"enablePlugin\", this).call(this); // @TODO: Workaround for broken plugin initialization abstraction (#6806).\n\n\n      this.updatePlugin();\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      // @TODO: Workaround for broken plugin initialization abstraction (#6806).\n      if (!this.hot.view) {\n        return;\n      }\n\n      if (!this.nestedHeadersPlugin.detectedOverlappedHeaders) {\n        var _this$hot$getSettings2 = this.hot.getSettings(),\n            collapsibleColumns = _this$hot$getSettings2.collapsibleColumns;\n\n        if (typeof collapsibleColumns === 'boolean') {\n          // Add `collapsible: true` attribute to all headers with colspan higher than 1.\n          this.headerStateManager.mapState(function (headerSettings) {\n            return {\n              collapsible: headerSettings.origColspan > 1\n            };\n          });\n        } else if (Array.isArray(collapsibleColumns)) {\n          this.headerStateManager.mergeStateWith(collapsibleColumns);\n        }\n      }\n\n      _get(_getPrototypeOf(CollapsibleColumns.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.hot.columnIndexMapper.unregisterMap(this.pluginName);\n\n      _classPrivateFieldSet(this, _collapsedColumnsMap, null);\n\n      this.nestedHeadersPlugin = null;\n      this.clearButtons();\n\n      _get(_getPrototypeOf(CollapsibleColumns.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Clears the expand/collapse buttons.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"clearButtons\",\n    value: function clearButtons() {\n      if (!this.hot.view) {\n        return;\n      }\n\n      var headerLevels = this.hot.view.wt.getSetting('columnHeaders').length;\n      var mainHeaders = this.hot.view.wt.wtTable.THEAD;\n      var topHeaders = this.hot.view.wt.wtOverlays.topOverlay.clone.wtTable.THEAD;\n      var topLeftCornerHeaders = this.hot.view.wt.wtOverlays.topLeftCornerOverlay ? this.hot.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.THEAD : null;\n\n      var removeButton = function removeButton(button) {\n        if (button) {\n          button.parentNode.removeChild(button);\n        }\n      };\n\n      rangeEach(0, headerLevels - 1, function (i) {\n        var masterLevel = mainHeaders.childNodes[i];\n        var topLevel = topHeaders.childNodes[i];\n        var topLeftCornerLevel = topLeftCornerHeaders ? topLeftCornerHeaders.childNodes[i] : null;\n        rangeEach(0, masterLevel.childNodes.length - 1, function (j) {\n          var button = masterLevel.childNodes[j].querySelector('.collapsibleIndicator');\n          removeButton(button);\n\n          if (topLevel && topLevel.childNodes[j]) {\n            button = topLevel.childNodes[j].querySelector('.collapsibleIndicator');\n            removeButton(button);\n          }\n\n          if (topLeftCornerHeaders && topLeftCornerLevel && topLeftCornerLevel.childNodes[j]) {\n            button = topLeftCornerLevel.childNodes[j].querySelector('.collapsibleIndicator');\n            removeButton(button);\n          }\n        });\n      }, true);\n    }\n    /**\n     * Expands section at the provided coords.\n     *\n     * @param {object} coords Contains coordinates information. (`coords.row`, `coords.col`).\n     */\n\n  }, {\n    key: \"expandSection\",\n    value: function expandSection(coords) {\n      this.toggleCollapsibleSection([coords], 'expand');\n    }\n    /**\n     * Collapses section at the provided coords.\n     *\n     * @param {object} coords Contains coordinates information. (`coords.row`, `coords.col`).\n     */\n\n  }, {\n    key: \"collapseSection\",\n    value: function collapseSection(coords) {\n      this.toggleCollapsibleSection([coords], 'collapse');\n    }\n    /**\n     * Collapses or expand all collapsible sections, depending on the action parameter.\n     *\n     * @param {string} action 'collapse' or 'expand'.\n     */\n\n  }, {\n    key: \"toggleAllCollapsibleSections\",\n    value: function toggleAllCollapsibleSections(action) {\n      var _this3 = this;\n\n      var coords = this.headerStateManager.mapNodes(function (headerSettings) {\n        var collapsible = headerSettings.collapsible,\n            origColspan = headerSettings.origColspan,\n            headerLevel = headerSettings.headerLevel,\n            columnIndex = headerSettings.columnIndex,\n            isCollapsed = headerSettings.isCollapsed;\n\n        if (collapsible === true && origColspan > 1 && (isCollapsed && action === 'expand' || !isCollapsed && action === 'collapse')) {\n          return {\n            row: _this3.headerStateManager.levelToRowCoords(headerLevel),\n            col: columnIndex\n          };\n        }\n      });\n      this.toggleCollapsibleSection(coords, action);\n    }\n    /**\n     * Collapses all collapsible sections.\n     */\n\n  }, {\n    key: \"collapseAll\",\n    value: function collapseAll() {\n      this.toggleAllCollapsibleSections('collapse');\n    }\n    /**\n     * Expands all collapsible sections.\n     */\n\n  }, {\n    key: \"expandAll\",\n    value: function expandAll() {\n      this.toggleAllCollapsibleSections('expand');\n    }\n    /**\n     * Collapses/Expands a section.\n     *\n     * @param {Array} coords Array of coords - section coordinates.\n     * @param {string} [action] Action definition ('collapse' or 'expand').\n     * @fires Hooks#beforeColumnCollapse\n     * @fires Hooks#beforeColumnExpand\n     * @fires Hooks#afterColumnCollapse\n     * @fires Hooks#afterColumnExpand\n     */\n\n  }, {\n    key: \"toggleCollapsibleSection\",\n    value: function toggleCollapsibleSection(coords, action) {\n      var _this4 = this;\n\n      if (!actionDictionary.has(action)) {\n        throw new Error(\"Unsupported action is passed (\".concat(action, \").\"));\n      }\n\n      if (!Array.isArray(coords)) {\n        return;\n      } // Ignore coordinates which points to the cells range.\n\n\n      var filteredCoords = arrayFilter(coords, function (_ref) {\n        var row = _ref.row;\n        return row < 0;\n      });\n      var isActionPossible = filteredCoords.length > 0;\n      arrayEach(filteredCoords, function (_ref2) {\n        var _this4$headerStateMan;\n\n        var row = _ref2.row,\n            column = _ref2.col;\n\n        var _ref3 = (_this4$headerStateMan = _this4.headerStateManager.getHeaderSettings(row, column)) !== null && _this4$headerStateMan !== void 0 ? _this4$headerStateMan : {},\n            collapsible = _ref3.collapsible,\n            isCollapsed = _ref3.isCollapsed;\n\n        if (!collapsible || isCollapsed && action === 'collapse' || !isCollapsed && action === 'expand') {\n          isActionPossible = false;\n          return false;\n        }\n      });\n      var nodeModRollbacks = [];\n      var affectedColumnsIndexes = [];\n\n      if (isActionPossible) {\n        arrayEach(filteredCoords, function (_ref4) {\n          var row = _ref4.row,\n              column = _ref4.col;\n\n          var _this4$headerStateMan2 = _this4.headerStateManager.triggerNodeModification(action, row, column),\n              colspanCompensation = _this4$headerStateMan2.colspanCompensation,\n              affectedColumns = _this4$headerStateMan2.affectedColumns,\n              rollbackModification = _this4$headerStateMan2.rollbackModification;\n\n          if (colspanCompensation > 0) {\n            affectedColumnsIndexes.push.apply(affectedColumnsIndexes, _toConsumableArray(affectedColumns));\n            nodeModRollbacks.push(rollbackModification);\n          }\n        });\n      }\n\n      var currentCollapsedColumns = this.getCollapsedColumns();\n      var destinationCollapsedColumns = [];\n\n      if (action === 'collapse') {\n        destinationCollapsedColumns = arrayUnique([].concat(_toConsumableArray(currentCollapsedColumns), affectedColumnsIndexes));\n      } else if (action === 'expand') {\n        destinationCollapsedColumns = arrayFilter(currentCollapsedColumns, function (index) {\n          return !affectedColumnsIndexes.includes(index);\n        });\n      }\n\n      var actionTranslator = actionDictionary.get(action);\n      var isActionAllowed = this.hot.runHooks(actionTranslator.beforeHook, currentCollapsedColumns, destinationCollapsedColumns, isActionPossible);\n\n      if (isActionAllowed === false) {\n        // Rollback all header nodes modification (collapse or expand).\n        arrayEach(nodeModRollbacks, function (nodeModRollback) {\n          nodeModRollback();\n        });\n        return;\n      }\n\n      this.hot.batchExecution(function () {\n        arrayEach(affectedColumnsIndexes, function (visualColumn) {\n          _classPrivateFieldGet(_this4, _collapsedColumnsMap).setValueAtIndex(_this4.hot.toPhysicalColumn(visualColumn), actionTranslator.hideColumn);\n        });\n      }, true);\n      var isActionPerformed = this.getCollapsedColumns().length !== currentCollapsedColumns.length;\n      this.hot.runHooks(actionTranslator.afterHook, currentCollapsedColumns, destinationCollapsedColumns, isActionPossible, isActionPerformed);\n      this.hot.render();\n      this.hot.view.adjustElementsSize(true);\n    }\n    /**\n     * Gets an array of physical indexes of collapsed columns.\n     *\n     * @private\n     * @returns {number[]}\n     */\n\n  }, {\n    key: \"getCollapsedColumns\",\n    value: function getCollapsedColumns() {\n      return _classPrivateFieldGet(this, _collapsedColumnsMap).getHiddenIndexes();\n    }\n    /**\n     * Generates the indicator element.\n     *\n     * @private\n     * @param {number} row Row index.\n     * @param {number} column Column index.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"generateIndicator\",\n    value: function generateIndicator(row, column) {\n      var divEl = this.hot.rootDocument.createElement('div');\n      var columnSettings = this.headerStateManager.getHeaderSettings(row, column);\n      addClass(divEl, 'collapsibleIndicator');\n\n      if (columnSettings.isCollapsed) {\n        addClass(divEl, 'collapsed');\n        fastInnerText(divEl, '+');\n      } else {\n        addClass(divEl, 'expanded');\n        fastInnerText(divEl, '-');\n      }\n\n      return divEl;\n    }\n    /**\n     * Adds the indicator to the headers.\n     *\n     * @private\n     * @param {number} column Column index.\n     * @param {HTMLElement} TH TH element.\n     */\n\n  }, {\n    key: \"onAfterGetColHeader\",\n    value: function onAfterGetColHeader(column, TH) {\n      var _this$headerStateMana;\n\n      var TR = TH.parentNode;\n      var THEAD = TR.parentNode;\n      var row = -1 * THEAD.childNodes.length + Array.prototype.indexOf.call(THEAD.childNodes, TR);\n\n      var _ref5 = (_this$headerStateMana = this.headerStateManager.getHeaderSettings(row, column)) !== null && _this$headerStateMana !== void 0 ? _this$headerStateMana : {},\n          collapsible = _ref5.collapsible,\n          origColspan = _ref5.origColspan;\n\n      if (collapsible && origColspan > 1 && column >= this.hot.getSettings().fixedColumnsLeft) {\n        var button = this.generateIndicator(row, column);\n        TH.querySelector('div:first-child').appendChild(button);\n      }\n    }\n    /**\n     * Indicator mouse event callback.\n     *\n     * @private\n     * @param {object} event Mouse event.\n     * @param {object} coords Event coordinates.\n     */\n\n  }, {\n    key: \"onBeforeOnCellMouseDown\",\n    value: function onBeforeOnCellMouseDown(event, coords) {\n      if (hasClass(event.target, 'collapsibleIndicator')) {\n        if (hasClass(event.target, 'expanded')) {\n          this.eventManager.fireEvent(event.target, 'mouseup');\n          this.toggleCollapsibleSection([coords], 'collapse');\n        } else if (hasClass(event.target, 'collapsed')) {\n          this.eventManager.fireEvent(event.target, 'mouseup');\n          this.toggleCollapsibleSection([coords], 'expand');\n        }\n\n        stopImmediatePropagation(event);\n      }\n    }\n    /**\n     * Updates the plugin state after HoT initialization.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onInit\",\n    value: function onInit() {\n      // @TODO: Workaround for broken plugin initialization abstraction (#6806).\n      this.updatePlugin();\n    }\n    /**\n     * Updates the plugin state after new dataset load.\n     *\n     * @private\n     * @param {Array[]} sourceData Array of arrays or array of objects containing data.\n     * @param {boolean} initialLoad Flag that determines whether the data has been loaded\n     *                              during the initialization.\n     */\n\n  }, {\n    key: \"onAfterLoadData\",\n    value: function onAfterLoadData(sourceData, initialLoad) {\n      if (!initialLoad) {\n        this.updatePlugin();\n      }\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _classPrivateFieldSet(this, _collapsedColumnsMap, null);\n\n      _get(_getPrototypeOf(CollapsibleColumns.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }, {\n    key: \"PLUGIN_DEPS\",\n    get: function get() {\n      return ['plugin:NestedHeaders'];\n    }\n    /**\n     * Cached reference to the NestedHeaders plugin.\n     *\n     * @private\n     * @type {NestedHeaders}\n     */\n\n  }]);\n\n  return CollapsibleColumns;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nvar _excluded = [\"column\"],\n    _excluded2 = [\"column\"];\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.assign.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { addClass, removeClass } from \"../../helpers/dom/element.mjs\";\nimport { isUndefined, isDefined } from \"../../helpers/mixed.mjs\";\nimport { isObject } from \"../../helpers/object.mjs\";\nimport { isFunction } from \"../../helpers/function.mjs\";\nimport { arrayMap } from \"../../helpers/array.mjs\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { IndexesSequence, PhysicalIndexToValueMap as IndexToValueMap } from \"../../translations/index.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nimport { isPressedCtrlKey } from \"../../utils/keyStateObserver.mjs\";\nimport { ColumnStatesManager } from \"./columnStatesManager.mjs\";\nimport { getNextSortOrder, areValidSortStates, getHeaderSpanElement, isFirstLevelColumnHeader, wasHeaderClickedProperly } from \"./utils.mjs\";\nimport { getClassesToRemove, getClassesToAdd } from \"./domHelpers.mjs\";\nimport { rootComparator } from \"./rootComparator.mjs\";\nimport { registerRootComparator, sort } from \"./sortService/index.mjs\";\nexport var PLUGIN_KEY = 'columnSorting';\nexport var PLUGIN_PRIORITY = 50;\nvar APPEND_COLUMN_CONFIG_STRATEGY = 'append';\nvar REPLACE_COLUMN_CONFIG_STRATEGY = 'replace';\nregisterRootComparator(PLUGIN_KEY, rootComparator);\nHooks.getSingleton().register('beforeColumnSort');\nHooks.getSingleton().register('afterColumnSort'); // DIFF - MultiColumnSorting & ColumnSorting: changed configuration documentation.\n\n/**\n * @plugin ColumnSorting\n * @class ColumnSorting\n *\n * @description\n * This plugin sorts the view by columns (but does not sort the data source!). To enable the plugin, set the\n * {@link Options#columnSorting} property to the correct value (see the examples below).\n *\n * @example\n * ```js\n * // as boolean\n * columnSorting: true\n *\n * // as an object with initial sort config (sort ascending for column at index 1)\n * columnSorting: {\n *   initialConfig: {\n *     column: 1,\n *     sortOrder: 'asc'\n *   }\n * }\n *\n * // as an object which define specific sorting options for all columns\n * columnSorting: {\n *   sortEmptyCells: true, // true = the table sorts empty cells, false = the table moves all empty cells to the end of the table (by default)\n *   indicator: true, // true = shows indicator for all columns (by default), false = don't show indicator for columns\n *   headerAction: true, // true = allow to click on the headers to sort (by default), false = turn off possibility to click on the headers to sort\n *   compareFunctionFactory: function(sortOrder, columnMeta) {\n *     return function(value, nextValue) {\n *       // Some value comparisons which will return -1, 0 or 1...\n *     }\n *   }\n * }\n *\n * // as an object passed to the `column` property, allows specifying a custom options for the desired column.\n * // please take a look at documentation of `column` property: https://handsontable.com/docs/Options.html#columns\n * columns: [{\n *   columnSorting: {\n *     indicator: false, // disable indicator for the first column,\n *     sortEmptyCells: true,\n *     headerAction: false, // clicks on the first column won't sort\n *     compareFunctionFactory: function(sortOrder, columnMeta) {\n *       return function(value, nextValue) {\n *         return 0; // Custom compare function for the first column (don't sort)\n *       }\n *     }\n *   }\n * }]\n * ```\n */\n\nexport var ColumnSorting = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(ColumnSorting, _BasePlugin);\n\n  var _super = _createSuper(ColumnSorting);\n\n  function ColumnSorting(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, ColumnSorting);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Instance of column state manager.\n     *\n     * @private\n     * @type {null|ColumnStatesManager}\n     */\n\n    _this.columnStatesManager = null;\n    /**\n     * Cached column properties from plugin like i.e. `indicator`, `headerAction`.\n     *\n     * @private\n     * @type {null|PhysicalIndexToValueMap}\n     */\n\n    _this.columnMetaCache = null;\n    /**\n     * Main settings key designed for the plugin.\n     *\n     * @private\n     * @type {string}\n     */\n\n    _this.pluginKey = PLUGIN_KEY;\n    /**\n     * Plugin indexes cache.\n     *\n     * @private\n     * @type {null|IndexesSequence}\n     */\n\n    _this.indexesSequenceCache = null;\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the Handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ColumnSorting#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(ColumnSorting, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[this.pluginKey];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.columnStatesManager = new ColumnStatesManager(this.hot, \"\".concat(this.pluginKey, \".sortingStates\"));\n      this.columnMetaCache = new IndexToValueMap(function (physicalIndex) {\n        var visualIndex = _this2.hot.toVisualColumn(physicalIndex);\n\n        if (visualIndex === null) {\n          visualIndex = physicalIndex;\n        }\n\n        return _this2.getMergedPluginSettings(visualIndex);\n      });\n      this.hot.columnIndexMapper.registerMap(\"\".concat(this.pluginKey, \".columnMeta\"), this.columnMetaCache);\n      this.addHook('afterGetColHeader', function (column, TH) {\n        return _this2.onAfterGetColHeader(column, TH);\n      });\n      this.addHook('beforeOnCellMouseDown', function () {\n        return _this2.onBeforeOnCellMouseDown.apply(_this2, arguments);\n      });\n      this.addHook('afterOnCellMouseDown', function (event, target) {\n        return _this2.onAfterOnCellMouseDown(event, target);\n      });\n      this.addHook('afterInit', function () {\n        return _this2.loadOrSortBySettings();\n      });\n      this.addHook('afterLoadData', function () {\n        return _this2.onAfterLoadData.apply(_this2, arguments);\n      }); // TODO: Workaround? It should be refactored / described.\n\n      if (this.hot.view) {\n        this.loadOrSortBySettings();\n      }\n\n      _get(_getPrototypeOf(ColumnSorting.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      var _this3 = this;\n\n      var clearColHeader = function clearColHeader(column, TH) {\n        var headerSpanElement = getHeaderSpanElement(TH);\n\n        if (isFirstLevelColumnHeader(column, TH) === false || headerSpanElement === null) {\n          return;\n        }\n\n        _this3.updateHeaderClasses(headerSpanElement);\n      }; // Changing header width and removing indicator.\n\n\n      this.hot.addHook('afterGetColHeader', clearColHeader);\n      this.hot.addHookOnce('afterViewRender', function () {\n        _this3.hot.removeHook('afterGetColHeader', clearColHeader);\n      });\n      this.hot.batchExecution(function () {\n        if (_this3.indexesSequenceCache !== null) {\n          _this3.hot.rowIndexMapper.setIndexesSequence(_this3.indexesSequenceCache.getValues());\n\n          _this3.hot.rowIndexMapper.unregisterMap(_this3.pluginKey);\n        }\n      }, true);\n      this.hot.columnIndexMapper.unregisterMap(\"\".concat(this.pluginKey, \".columnMeta\"));\n      this.columnStatesManager.destroy();\n      this.columnMetaCache = null;\n      this.columnStatesManager = null;\n\n      _get(_getPrototypeOf(ColumnSorting.prototype), \"disablePlugin\", this).call(this);\n    } // DIFF - MultiColumnSorting & ColumnSorting: changed function documentation.\n\n    /**\n     * Sorts the table by chosen columns and orders.\n     *\n     * @param {undefined|object} sortConfig Single column sort configuration. The configuration object contains `column` and `sortOrder` properties.\n     * First of them contains visual column index, the second one contains sort order (`asc` for ascending, `desc` for descending).\n     *\n     * **Note**: Please keep in mind that every call of `sort` function set an entirely new sort order. Previous sort configs aren't preserved.\n     *\n     * @example\n     * ```js\n     * // sort ascending first visual column\n     * hot.getPlugin('columnSorting').sort({ column: 0, sortOrder: 'asc' });\n     * ```\n     *\n     * @fires Hooks#beforeColumnSort\n     * @fires Hooks#afterColumnSort\n     */\n\n  }, {\n    key: \"sort\",\n    value: function sort(sortConfig) {\n      var currentSortConfig = this.getSortConfig(); // We always pass configs defined as an array to `beforeColumnSort` and `afterColumnSort` hooks.\n\n      var destinationSortConfigs = this.getNormalizedSortConfigs(sortConfig);\n      var sortPossible = this.areValidSortConfigs(destinationSortConfigs);\n      var allowSort = this.hot.runHooks('beforeColumnSort', currentSortConfig, destinationSortConfigs, sortPossible);\n\n      if (allowSort === false) {\n        return;\n      }\n\n      if (currentSortConfig.length === 0 && this.indexesSequenceCache === null) {\n        this.indexesSequenceCache = this.hot.rowIndexMapper.registerMap(this.pluginKey, new IndexesSequence());\n        this.indexesSequenceCache.setValues(this.hot.rowIndexMapper.getIndexesSequence());\n      }\n\n      if (sortPossible) {\n        this.columnStatesManager.setSortStates(destinationSortConfigs);\n        this.sortByPresetSortStates(destinationSortConfigs);\n        this.saveAllSortSettings(destinationSortConfigs);\n      }\n\n      this.hot.runHooks('afterColumnSort', currentSortConfig, sortPossible ? destinationSortConfigs : currentSortConfig, sortPossible);\n\n      if (sortPossible) {\n        this.hot.render(); // TODO: Workaround? This triggers fast redraw. One test won't pass after removal.\n        // It should be refactored / described.\n\n        this.hot.forceFullRender = false;\n        this.hot.view.render();\n      }\n    }\n    /**\n     * Clear the sort performed on the table.\n     */\n\n  }, {\n    key: \"clearSort\",\n    value: function clearSort() {\n      this.sort([]);\n    }\n    /**\n     * Checks if the table is sorted (any column have to be sorted).\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSorted\",\n    value: function isSorted() {\n      return this.enabled && !this.columnStatesManager.isListOfSortedColumnsEmpty();\n    }\n    /**\n     * Get sort configuration for particular column or for all sorted columns. Objects contain `column` and `sortOrder` properties.\n     *\n     * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key. They are handled by the `sort` function.\n     *\n     * @param {number} [column] Visual column index.\n     * @returns {undefined|object|Array}\n     */\n\n  }, {\n    key: \"getSortConfig\",\n    value: function getSortConfig(column) {\n      if (isDefined(column)) {\n        return this.columnStatesManager.getColumnSortState(column);\n      }\n\n      return this.columnStatesManager.getSortStates();\n    }\n    /**\n     * @description\n     * Warn: Useful mainly for providing server side sort implementation (see in the example below). It doesn't sort the data set. It just sets sort configuration for all sorted columns.\n     * Note: Please keep in mind that this method doesn't re-render the table.\n     *\n     * @example\n     * ```js\n     * beforeColumnSort: function(currentSortConfig, destinationSortConfigs) {\n     *   const columnSortPlugin = this.getPlugin('columnSorting');\n     *\n     *   columnSortPlugin.setSortConfig(destinationSortConfigs);\n     *\n     *   // const newData = ... // Calculated data set, ie. from an AJAX call.\n     *\n     *   this.loadData(newData); // Load new data set and re-render the table.\n     *\n     *   return false; // The blockade for the default sort action.\n     * }\n     * ```\n     *\n     * @param {undefined|object|Array} sortConfig Single column sort configuration or full sort configuration (for all sorted columns).\n     * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n     * sort order (`asc` for ascending, `desc` for descending).\n     */\n\n  }, {\n    key: \"setSortConfig\",\n    value: function setSortConfig(sortConfig) {\n      // We always set configs defined as an array.\n      var destinationSortConfigs = this.getNormalizedSortConfigs(sortConfig);\n\n      if (this.areValidSortConfigs(destinationSortConfigs)) {\n        this.columnStatesManager.setSortStates(destinationSortConfigs);\n      }\n    }\n    /**\n     * Get normalized sort configs.\n     *\n     * @private\n     * @param {object|Array} [sortConfig=[]] Single column sort configuration or full sort configuration (for all sorted columns).\n     * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n     * sort order (`asc` for ascending, `desc` for descending).\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getNormalizedSortConfigs\",\n    value: function getNormalizedSortConfigs() {\n      var sortConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n      if (Array.isArray(sortConfig)) {\n        return sortConfig.slice(0, 1);\n      }\n\n      return [sortConfig];\n    }\n    /**\n     * Get if sort configs are valid.\n     *\n     * @private\n     * @param {Array} sortConfigs Sort configuration for all sorted columns. Objects contain `column` and `sortOrder` properties.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"areValidSortConfigs\",\n    value: function areValidSortConfigs(sortConfigs) {\n      var numberOfColumns = this.hot.countCols(); // We don't translate visual indexes to physical indexes.\n\n      return areValidSortStates(sortConfigs) && sortConfigs.every(function (_ref) {\n        var column = _ref.column;\n        return column <= numberOfColumns && column >= 0;\n      });\n    }\n    /**\n     * Saves all sorting settings. Saving works only when {@link Options#persistentState} option is enabled.\n     *\n     * @param {Array} sortConfigs Sort configuration for all sorted columns. Objects contain `column` and `sortOrder` properties.\n     *\n     * @private\n     * @fires Hooks#persistentStateSave\n     */\n\n  }, {\n    key: \"saveAllSortSettings\",\n    value: function saveAllSortSettings(sortConfigs) {\n      var _this4 = this;\n\n      var allSortSettings = this.columnStatesManager.getAllColumnsProperties();\n\n      var translateColumnToPhysical = function translateColumnToPhysical(_ref2) {\n        var visualColumn = _ref2.column,\n            restOfProperties = _objectWithoutProperties(_ref2, _excluded);\n\n        return _objectSpread({\n          column: _this4.hot.toPhysicalColumn(visualColumn)\n        }, restOfProperties);\n      };\n\n      allSortSettings.initialConfig = arrayMap(sortConfigs, translateColumnToPhysical);\n      this.hot.runHooks('persistentStateSave', 'columnSorting', allSortSettings);\n    }\n    /**\n     * Get all saved sorting settings. Loading works only when {@link Options#persistentState} option is enabled.\n     *\n     * @private\n     * @returns {object} Previously saved sort settings.\n     *\n     * @fires Hooks#persistentStateLoad\n     */\n\n  }, {\n    key: \"getAllSavedSortSettings\",\n    value: function getAllSavedSortSettings() {\n      var _this5 = this;\n\n      var storedAllSortSettings = {};\n      this.hot.runHooks('persistentStateLoad', 'columnSorting', storedAllSortSettings);\n      var allSortSettings = storedAllSortSettings.value;\n\n      var translateColumnToVisual = function translateColumnToVisual(_ref3) {\n        var physicalColumn = _ref3.column,\n            restOfProperties = _objectWithoutProperties(_ref3, _excluded2);\n\n        return _objectSpread({\n          column: _this5.hot.toVisualColumn(physicalColumn)\n        }, restOfProperties);\n      };\n\n      if (isDefined(allSortSettings) && Array.isArray(allSortSettings.initialConfig)) {\n        allSortSettings.initialConfig = arrayMap(allSortSettings.initialConfig, translateColumnToVisual);\n      }\n\n      return allSortSettings;\n    }\n    /**\n     * Get next sort configuration for particular column. Object contain `column` and `sortOrder` properties.\n     *\n     * **Note**: Please keep in mind that returned object expose **visual** column index under the `column` key.\n     *\n     * @private\n     * @param {number} column Visual column index.\n     * @returns {undefined|object}\n     */\n\n  }, {\n    key: \"getColumnNextConfig\",\n    value: function getColumnNextConfig(column) {\n      var sortOrder = this.columnStatesManager.getSortOrderOfColumn(column);\n\n      if (isDefined(sortOrder)) {\n        var nextSortOrder = getNextSortOrder(sortOrder);\n\n        if (isDefined(nextSortOrder)) {\n          return {\n            column: column,\n            sortOrder: nextSortOrder\n          };\n        }\n\n        return;\n      }\n\n      var nrOfColumns = this.hot.countCols();\n\n      if (Number.isInteger(column) && column >= 0 && column < nrOfColumns) {\n        return {\n          column: column,\n          sortOrder: getNextSortOrder()\n        };\n      }\n    }\n    /**\n     * Get sort configuration with \"next order\" for particular column.\n     *\n     * @private\n     * @param {number} columnToChange Visual column index of column which order will be changed.\n     * @param {string} strategyId ID of strategy. Possible values: 'append' and 'replace'. The first one\n     * change order of particular column and change it's position in the sort queue to the last one. The second one\n     * just change order of particular column.\n     *\n     * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getNextSortConfig\",\n    value: function getNextSortConfig(columnToChange) {\n      var strategyId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : APPEND_COLUMN_CONFIG_STRATEGY;\n      var indexOfColumnToChange = this.columnStatesManager.getIndexOfColumnInSortQueue(columnToChange);\n      var isColumnSorted = indexOfColumnToChange !== -1;\n      var currentSortConfig = this.getSortConfig();\n      var nextColumnConfig = this.getColumnNextConfig(columnToChange);\n\n      if (isColumnSorted) {\n        if (isUndefined(nextColumnConfig)) {\n          return [].concat(_toConsumableArray(currentSortConfig.slice(0, indexOfColumnToChange)), _toConsumableArray(currentSortConfig.slice(indexOfColumnToChange + 1)));\n        }\n\n        if (strategyId === APPEND_COLUMN_CONFIG_STRATEGY) {\n          return [].concat(_toConsumableArray(currentSortConfig.slice(0, indexOfColumnToChange)), _toConsumableArray(currentSortConfig.slice(indexOfColumnToChange + 1)), [nextColumnConfig]);\n        } else if (strategyId === REPLACE_COLUMN_CONFIG_STRATEGY) {\n          return [].concat(_toConsumableArray(currentSortConfig.slice(0, indexOfColumnToChange)), [nextColumnConfig], _toConsumableArray(currentSortConfig.slice(indexOfColumnToChange + 1)));\n        }\n      }\n\n      if (isDefined(nextColumnConfig)) {\n        return currentSortConfig.concat(nextColumnConfig);\n      }\n\n      return currentSortConfig;\n    }\n    /**\n     * Get plugin's column config for the specified column index.\n     *\n     * @private\n     * @param {object} columnConfig Configuration inside `columns` property for the specified column index.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getPluginColumnConfig\",\n    value: function getPluginColumnConfig(columnConfig) {\n      if (isObject(columnConfig)) {\n        var pluginColumnConfig = columnConfig[this.pluginKey];\n\n        if (isObject(pluginColumnConfig)) {\n          return pluginColumnConfig;\n        }\n      }\n\n      return {};\n    }\n    /**\n     * Get plugin settings related properties, properly merged from cascade settings.\n     *\n     * @private\n     * @param {number} column Visual column index.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getMergedPluginSettings\",\n    value: function getMergedPluginSettings(column) {\n      var pluginMainSettings = this.hot.getSettings()[this.pluginKey];\n      var storedColumnProperties = this.columnStatesManager.getAllColumnsProperties();\n      var cellMeta = this.hot.getCellMeta(0, column);\n      var columnMeta = Object.getPrototypeOf(cellMeta);\n\n      if (Array.isArray(columnMeta.columns)) {\n        return Object.assign(storedColumnProperties, pluginMainSettings, this.getPluginColumnConfig(columnMeta.columns[column]));\n      } else if (isFunction(columnMeta.columns)) {\n        return Object.assign(storedColumnProperties, pluginMainSettings, this.getPluginColumnConfig(columnMeta.columns(column)));\n      }\n\n      return Object.assign(storedColumnProperties, pluginMainSettings);\n    }\n    /**\n     * Get copy of settings for first cell in the column.\n     *\n     * @private\n     * @param {number} column Visual column index.\n     * @returns {object}\n     */\n    // TODO: Workaround. Inheriting of non-primitive cell meta values doesn't work. Instead of getting properties from column meta we call this function.\n    // TODO: Remove test named: \"should not break the dataset when inserted new row\" (#5431).\n\n  }, {\n    key: \"getFirstCellSettings\",\n    value: function getFirstCellSettings(column) {\n      var cellMeta = this.hot.getCellMeta(0, column);\n      var cellMetaCopy = Object.create(cellMeta);\n      cellMetaCopy[this.pluginKey] = this.columnMetaCache.getValueAtIndex(this.hot.toPhysicalColumn(column));\n      return cellMetaCopy;\n    }\n    /**\n     * Get number of rows which should be sorted.\n     *\n     * @private\n     * @param {number} numberOfRows Total number of displayed rows.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getNumberOfRowsToSort\",\n    value: function getNumberOfRowsToSort(numberOfRows) {\n      var settings = this.hot.getSettings(); // `maxRows` option doesn't take into account `minSpareRows` option in this case.\n\n      if (settings.maxRows <= numberOfRows) {\n        return settings.maxRows;\n      }\n\n      return numberOfRows - settings.minSpareRows;\n    }\n    /**\n     * Performs the sorting using a stable sort function basing on internal state of sorting.\n     *\n     * @param {Array} sortConfigs Sort configuration for all sorted columns. Objects contain `column` and `sortOrder` properties.\n     * @private\n     */\n\n  }, {\n    key: \"sortByPresetSortStates\",\n    value: function sortByPresetSortStates(sortConfigs) {\n      var _this6 = this;\n\n      if (sortConfigs.length === 0) {\n        this.hot.rowIndexMapper.setIndexesSequence(this.indexesSequenceCache.getValues());\n        return;\n      }\n\n      var indexesWithData = [];\n      var numberOfRows = this.hot.countRows();\n\n      var getDataForSortedColumns = function getDataForSortedColumns(visualRowIndex) {\n        return arrayMap(sortConfigs, function (sortConfig) {\n          return _this6.hot.getDataAtCell(visualRowIndex, sortConfig.column);\n        });\n      };\n\n      for (var visualRowIndex = 0; visualRowIndex < this.getNumberOfRowsToSort(numberOfRows); visualRowIndex += 1) {\n        indexesWithData.push([this.hot.toPhysicalRow(visualRowIndex)].concat(getDataForSortedColumns(visualRowIndex)));\n      }\n\n      var indexesBefore = arrayMap(indexesWithData, function (indexWithData) {\n        return indexWithData[0];\n      });\n      sort(indexesWithData, this.pluginKey, arrayMap(sortConfigs, function (sortConfig) {\n        return sortConfig.sortOrder;\n      }), arrayMap(sortConfigs, function (sortConfig) {\n        return _this6.getFirstCellSettings(sortConfig.column);\n      })); // Append spareRows\n\n      for (var _visualRowIndex = indexesWithData.length; _visualRowIndex < numberOfRows; _visualRowIndex += 1) {\n        indexesWithData.push([_visualRowIndex].concat(getDataForSortedColumns(_visualRowIndex)));\n      }\n\n      var indexesAfter = arrayMap(indexesWithData, function (indexWithData) {\n        return indexWithData[0];\n      });\n      var indexMapping = new Map(arrayMap(indexesBefore, function (indexBefore, indexInsideArray) {\n        return [indexBefore, indexesAfter[indexInsideArray]];\n      }));\n      var newIndexesSequence = arrayMap(this.hot.rowIndexMapper.getIndexesSequence(), function (physicalIndex) {\n        if (indexMapping.has(physicalIndex)) {\n          return indexMapping.get(physicalIndex);\n        }\n\n        return physicalIndex;\n      });\n      this.hot.rowIndexMapper.setIndexesSequence(newIndexesSequence);\n    }\n    /**\n     * Load saved settings or sort by predefined plugin configuration.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"loadOrSortBySettings\",\n    value: function loadOrSortBySettings() {\n      var storedAllSortSettings = this.getAllSavedSortSettings();\n\n      if (isObject(storedAllSortSettings)) {\n        this.sortBySettings(storedAllSortSettings);\n      } else {\n        var allSortSettings = this.hot.getSettings()[this.pluginKey];\n        this.sortBySettings(allSortSettings);\n      }\n    }\n    /**\n     * Sort the table by provided configuration.\n     *\n     * @private\n     * @param {object} allSortSettings All sort config settings. Object may contain `initialConfig`, `indicator`,\n     * `sortEmptyCells`, `headerAction` and `compareFunctionFactory` properties.\n     */\n\n  }, {\n    key: \"sortBySettings\",\n    value: function sortBySettings(allSortSettings) {\n      if (isObject(allSortSettings)) {\n        this.columnStatesManager.updateAllColumnsProperties(allSortSettings);\n        var initialConfig = allSortSettings.initialConfig;\n\n        if (Array.isArray(initialConfig) || isObject(initialConfig)) {\n          this.sort(initialConfig);\n        }\n      } else {\n        // Extra render for headers. Their width may change.\n        this.hot.render();\n      }\n    }\n    /**\n     * Callback for the `onAfterGetColHeader` hook. Adds column sorting CSS classes.\n     *\n     * @private\n     * @param {number} column Visual column index.\n     * @param {Element} TH TH HTML element.\n     */\n\n  }, {\n    key: \"onAfterGetColHeader\",\n    value: function onAfterGetColHeader(column, TH) {\n      var headerSpanElement = getHeaderSpanElement(TH);\n\n      if (isFirstLevelColumnHeader(column, TH) === false || headerSpanElement === null) {\n        return;\n      }\n\n      var pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];\n      var showSortIndicator = pluginSettingsForColumn.indicator;\n      var headerActionEnabled = pluginSettingsForColumn.headerAction;\n      this.updateHeaderClasses(headerSpanElement, this.columnStatesManager, column, showSortIndicator, headerActionEnabled);\n    }\n    /**\n     * Update header classes.\n     *\n     * @private\n     * @param {HTMLElement} headerSpanElement Header span element.\n     * @param {...*} args Extra arguments for helpers.\n     */\n\n  }, {\n    key: \"updateHeaderClasses\",\n    value: function updateHeaderClasses(headerSpanElement) {\n      removeClass(headerSpanElement, getClassesToRemove(headerSpanElement));\n\n      if (this.enabled !== false) {\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        addClass(headerSpanElement, getClassesToAdd.apply(void 0, args));\n      }\n    }\n    /**\n     * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called\n     * for `updateSettings` in specific situations.\n     *\n     * @private\n     * @param {object} newSettings New settings object.\n     */\n\n  }, {\n    key: \"onUpdateSettings\",\n    value: function onUpdateSettings(newSettings) {\n      _get(_getPrototypeOf(ColumnSorting.prototype), \"onUpdateSettings\", this).call(this);\n\n      if (this.columnMetaCache !== null) {\n        // Column meta cache base on settings, thus we should re-init the map.\n        this.columnMetaCache.init(this.hot.columnIndexMapper.getNumberOfIndexes());\n      }\n\n      if (isDefined(newSettings[this.pluginKey])) {\n        this.sortBySettings(newSettings[this.pluginKey]);\n      }\n    }\n    /**\n     * Callback for the `afterLoadData` hook.\n     *\n     * @private\n     * @param {boolean} initialLoad Flag that determines whether the data has been loaded during the initialization.\n     */\n\n  }, {\n    key: \"onAfterLoadData\",\n    value: function onAfterLoadData(initialLoad) {\n      if (initialLoad === true) {\n        // TODO: Workaround? It should be refactored / described.\n        if (this.hot.view) {\n          this.loadOrSortBySettings();\n        }\n      }\n    }\n    /**\n     * Indicates if clickable header was clicked.\n     *\n     * @private\n     * @param {MouseEvent} event The `mousedown` event.\n     * @param {number} column Visual column index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"wasClickableHeaderClicked\",\n    value: function wasClickableHeaderClicked(event, column) {\n      var pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];\n      var headerActionEnabled = pluginSettingsForColumn.headerAction;\n      return headerActionEnabled && event.target.nodeName === 'SPAN';\n    }\n    /**\n     * Changes the behavior of selection / dragging.\n     *\n     * @private\n     * @param {MouseEvent} event The `mousedown` event.\n     * @param {CellCoords} coords Visual coordinates.\n     * @param {HTMLElement} TD The cell element.\n     * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n     *                            a boolean value that allows or disallows changing the selection for that particular area.\n     */\n\n  }, {\n    key: \"onBeforeOnCellMouseDown\",\n    value: function onBeforeOnCellMouseDown(event, coords, TD, controller) {\n      if (wasHeaderClickedProperly(coords.row, coords.col, event) === false) {\n        return;\n      }\n\n      if (this.wasClickableHeaderClicked(event, coords.col) && isPressedCtrlKey()) {\n        controller.column = true;\n      }\n    }\n    /**\n     * Callback for the `onAfterOnCellMouseDown` hook.\n     *\n     * @private\n     * @param {Event} event Event which are provided by hook.\n     * @param {CellCoords} coords Visual coords of the selected cell.\n     */\n\n  }, {\n    key: \"onAfterOnCellMouseDown\",\n    value: function onAfterOnCellMouseDown(event, coords) {\n      if (wasHeaderClickedProperly(coords.row, coords.col, event) === false) {\n        return;\n      }\n\n      if (this.wasClickableHeaderClicked(event, coords.col)) {\n        if (isPressedCtrlKey()) {\n          this.hot.deselectCell();\n          this.hot.selectColumns(coords.col);\n        }\n\n        this.sort(this.getColumnNextConfig(coords.col));\n      }\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this$columnStatesMan;\n\n      // TODO: Probably not supported yet by ESLint: https://github.com/eslint/eslint/issues/11045\n      // eslint-disable-next-line no-unused-expressions\n      (_this$columnStatesMan = this.columnStatesManager) === null || _this$columnStatesMan === void 0 ? void 0 : _this$columnStatesMan.destroy();\n\n      _get(_getPrototypeOf(ColumnSorting.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return ColumnSorting;\n}(BasePlugin);", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.array.find-index.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { isObject, objectEach } from \"../../helpers/object.mjs\";\nimport { LinkedPhysicalIndexToValueMap as IndexToValueMap } from \"../../translations/index.mjs\";\nimport { isDefined } from \"../../helpers/mixed.mjs\";\nvar inheritedColumnProperties = ['sortEmptyCells', 'indicator', 'headerAction', 'compareFunctionFactory'];\nvar SORT_EMPTY_CELLS_DEFAULT = false;\nvar SHOW_SORT_INDICATOR_DEFAULT = true;\nvar HEADER_ACTION_DEFAULT = true;\n/**\n * Store and manages states of sorted columns.\n *\n * @private\n * @class ColumnStatesManager\n */\n\nexport var ColumnStatesManager = /*#__PURE__*/function () {\n  function ColumnStatesManager(hot, mapName) {\n    _classCallCheck(this, ColumnStatesManager);\n\n    /**\n     * Handsontable instance.\n     *\n     * @type {Core}\n     */\n    this.hot = hot;\n    /**\n     * Index map storing sorting states for every column. ColumnStatesManager write and read to/from this element.\n     *\n     * @type {LinkedPhysicalIndexToValueMap}\n     */\n\n    this.sortingStates = new IndexToValueMap();\n    /**\n     * Determines whether we should sort empty cells.\n     *\n     * @type {boolean}\n     */\n\n    this.sortEmptyCells = SORT_EMPTY_CELLS_DEFAULT;\n    /**\n     * Determines whether indicator should be visible (for sorted columns).\n     *\n     * @type {boolean}\n     */\n\n    this.indicator = SHOW_SORT_INDICATOR_DEFAULT;\n    /**\n     * Determines whether click on the header perform sorting.\n     *\n     * @type {boolean}\n     */\n\n    this.headerAction = HEADER_ACTION_DEFAULT;\n    /**\n     * Determines compare function factory. Method get as parameters `sortOder` and `columnMeta` and return compare function.\n     */\n\n    this.compareFunctionFactory = void 0;\n    /**\n     * Name of map storing sorting states. Required for unique name (PR #7440 introduced it). It's needed as\n     * both ColumnSorting and MultiColumnSorting plugins create state manager and as a consequence register maps.\n     * Objects are destroyed in strange order as the updateSettings doesn't work well.\n     */\n\n    this.mapName = mapName;\n    this.hot.columnIndexMapper.registerMap(mapName, this.sortingStates);\n  }\n  /**\n   * Update column properties which affect the sorting result.\n   *\n   * **Note**: All column properties can be overwritten by {@link Options#columns} option.\n   *\n   * @param {object} allSortSettings Column sorting plugin's configuration object.\n   */\n\n\n  _createClass(ColumnStatesManager, [{\n    key: \"updateAllColumnsProperties\",\n    value: function updateAllColumnsProperties(allSortSettings) {\n      var _this = this;\n\n      if (!isObject(allSortSettings)) {\n        return;\n      }\n\n      objectEach(allSortSettings, function (newValue, propertyName) {\n        if (inheritedColumnProperties.includes(propertyName)) {\n          _this[propertyName] = newValue;\n        }\n      });\n    }\n    /**\n     * Get all column properties which affect the sorting result.\n     *\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getAllColumnsProperties\",\n    value: function getAllColumnsProperties() {\n      var columnProperties = {\n        sortEmptyCells: this.sortEmptyCells,\n        indicator: this.indicator,\n        headerAction: this.headerAction\n      };\n\n      if (typeof this.compareFunctionFactory === 'function') {\n        columnProperties.compareFunctionFactory = this.compareFunctionFactory;\n      }\n\n      return columnProperties;\n    }\n    /**\n     * Get sort order of column.\n     *\n     * @param {number} searchedColumn Visual column index.\n     * @returns {string|undefined} Sort order (`asc` for ascending, `desc` for descending and undefined for not sorted).\n     */\n\n  }, {\n    key: \"getSortOrderOfColumn\",\n    value: function getSortOrderOfColumn(searchedColumn) {\n      var _this$sortingStates$g;\n\n      return (_this$sortingStates$g = this.sortingStates.getValueAtIndex(this.hot.toPhysicalColumn(searchedColumn))) === null || _this$sortingStates$g === void 0 ? void 0 : _this$sortingStates$g.sortOrder;\n    }\n    /**\n     * Get order of particular column in the states queue.\n     *\n     * @param {number} column Visual column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getIndexOfColumnInSortQueue\",\n    value: function getIndexOfColumnInSortQueue(column) {\n      column = this.hot.toPhysicalColumn(column);\n      return this.sortingStates.getEntries().findIndex(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 1),\n            physicalColumn = _ref2[0];\n\n        return physicalColumn === column;\n      });\n    }\n    /**\n     * Get number of sorted columns.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getNumberOfSortedColumns\",\n    value: function getNumberOfSortedColumns() {\n      return this.sortingStates.getLength();\n    }\n    /**\n     * Get if list of sorted columns is empty.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isListOfSortedColumnsEmpty\",\n    value: function isListOfSortedColumnsEmpty() {\n      return this.getNumberOfSortedColumns() === 0;\n    }\n    /**\n     * Get if particular column is sorted.\n     *\n     * @param {number} column Visual column index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isColumnSorted\",\n    value: function isColumnSorted(column) {\n      return isObject(this.sortingStates.getValueAtIndex(this.hot.toPhysicalColumn(column)));\n    }\n    /**\n     * Queue of sort states containing sorted columns and their orders (Array of objects containing `column` and `sortOrder` properties).\n     *\n     * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key.\n     *\n     * @returns {Array<object>}\n     */\n\n  }, {\n    key: \"getSortStates\",\n    value: function getSortStates() {\n      var _this2 = this;\n\n      if (this.sortingStates === null) {\n        return [];\n      }\n\n      var sortingStatesQueue = this.sortingStates.getEntries();\n      return sortingStatesQueue.map(function (_ref3) {\n        var _ref4 = _slicedToArray(_ref3, 2),\n            physicalColumn = _ref4[0],\n            value = _ref4[1];\n\n        return _objectSpread({\n          column: _this2.hot.toVisualColumn(physicalColumn)\n        }, value);\n      });\n    }\n    /**\n     * Get sort state for particular column. Object contains `column` and `sortOrder` properties.\n     *\n     * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key.\n     *\n     * @param {number} column Visual column index.\n     * @returns {object|undefined}\n     */\n\n  }, {\n    key: \"getColumnSortState\",\n    value: function getColumnSortState(column) {\n      var sortOrder = this.getSortOrderOfColumn(column);\n\n      if (isDefined(sortOrder)) {\n        return {\n          column: column,\n          sortOrder: sortOrder\n        };\n      }\n    }\n    /**\n     * Set all column states.\n     *\n     * @param {Array} sortStates Sort states.\n     */\n\n  }, {\n    key: \"setSortStates\",\n    value: function setSortStates(sortStates) {\n      this.sortingStates.clear();\n\n      for (var i = 0; i < sortStates.length; i += 1) {\n        this.sortingStates.setValueAtIndex(this.hot.toPhysicalColumn(sortStates[i].column), {\n          sortOrder: sortStates[i].sortOrder\n        });\n      }\n    }\n    /**\n     * Destroy the state manager.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.hot.columnIndexMapper.unregisterMap(this.mapName);\n      this.sortingStates = null;\n    }\n  }]);\n\n  return ColumnStatesManager;\n}();", "import \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport { isObject } from \"../../helpers/object.mjs\";\nimport { isRightClick } from \"../../helpers/dom/event.mjs\";\nexport var ASC_SORT_STATE = 'asc';\nexport var DESC_SORT_STATE = 'desc';\nexport var HEADER_SPAN_CLASS = 'colHeader';\n/**\n * Get if column state is valid.\n *\n * @param {number} columnState Particular column state.\n * @returns {boolean}\n */\n\nfunction isValidColumnState(columnState) {\n  if (isObject(columnState) === false) {\n    return false;\n  }\n\n  var column = columnState.column,\n      sortOrder = columnState.sortOrder;\n  return Number.isInteger(column) && [ASC_SORT_STATE, DESC_SORT_STATE].includes(sortOrder);\n}\n/**\n * Get if all sorted columns states are valid.\n *\n * @param {Array} sortStates The sort state collection.\n * @returns {boolean}\n */\n\n\nexport function areValidSortStates(sortStates) {\n  if (sortStates.some(function (columnState) {\n    return isValidColumnState(columnState) === false;\n  })) {\n    return false;\n  }\n\n  var sortedColumns = sortStates.map(function (_ref) {\n    var column = _ref.column;\n    return column;\n  }); // Indexes occurs only once.\n\n  return new Set(sortedColumns).size === sortedColumns.length;\n}\n/**\n * Get next sort order for particular column. The order sequence looks as follows: 'asc' -> 'desc' -> undefined -> 'asc'.\n *\n * @param {string|undefined} sortOrder Sort order (`asc` for ascending, `desc` for descending and undefined for not sorted).\n * @returns {string|undefined} Next sort order (`asc` for ascending, `desc` for descending and undefined for not sorted).\n */\n\nexport function getNextSortOrder(sortOrder) {\n  if (sortOrder === DESC_SORT_STATE) {\n    return;\n  } else if (sortOrder === ASC_SORT_STATE) {\n    return DESC_SORT_STATE;\n  }\n\n  return ASC_SORT_STATE;\n}\n/**\n * Get `span` DOM element inside `th` DOM element.\n *\n * @param {Element} TH Th HTML element.\n * @returns {Element | null}\n */\n\nexport function getHeaderSpanElement(TH) {\n  var headerSpanElement = TH.querySelector(\".\".concat(HEADER_SPAN_CLASS));\n  return headerSpanElement;\n}\n/**\n *\n * Get if handled header is first level column header.\n *\n * @param {number} column Visual column index.\n * @param {Element} TH Th HTML element.\n * @returns {boolean}\n */\n\nexport function isFirstLevelColumnHeader(column, TH) {\n  if (column < 0 || !TH.parentNode) {\n    return false;\n  }\n\n  var TRs = TH.parentNode.parentNode.childNodes;\n  var headerLevel = Array.from(TRs).indexOf(TH.parentNode) - TRs.length;\n\n  if (headerLevel !== -1) {\n    return false;\n  }\n\n  return true;\n}\n/**\n *  Get if header was clicked properly. Click on column header and NOT done by right click return `true`.\n *\n * @param {number} row Visual row index.\n * @param {number} column Visual column index.\n * @param {Event} clickEvent Click event.\n * @returns {boolean}\n */\n\nexport function wasHeaderClickedProperly(row, column, clickEvent) {\n  return row === -1 && column >= 0 && isRightClick(clickEvent) === false;\n}", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport { isDefined } from \"../../helpers/mixed.mjs\";\nimport { ASC_SORT_STATE, DESC_SORT_STATE } from \"./utils.mjs\";\nvar HEADER_CLASS_ASC_SORT = 'ascending';\nvar HEADER_CLASS_DESC_SORT = 'descending';\nvar HEADER_CLASS_INDICATOR_DISABLED = 'indicatorDisabled';\nvar HEADER_SORT_CLASS = 'columnSorting';\nvar HEADER_ACTION_CLASS = 'sortAction';\nvar orderToCssClass = new Map([[ASC_SORT_STATE, HEADER_CLASS_ASC_SORT], [DESC_SORT_STATE, HEADER_CLASS_DESC_SORT]]);\n/**\n * Get CSS classes which should be added to particular column header.\n *\n * @param {object} columnStatesManager Instance of column state manager.\n * @param {number} column Visual column index.\n * @param {boolean} showSortIndicator Indicates if indicator should be shown for the particular column.\n * @param {boolean} headerAction Indicates if header click to sort should be possible.\n * @returns {Array} Array of CSS classes.\n */\n\nexport function getClassesToAdd(columnStatesManager, column, showSortIndicator, headerAction) {\n  var cssClasses = [HEADER_SORT_CLASS];\n\n  if (headerAction) {\n    cssClasses.push(HEADER_ACTION_CLASS);\n  }\n\n  if (showSortIndicator === false) {\n    cssClasses.push(HEADER_CLASS_INDICATOR_DISABLED);\n    return cssClasses;\n  }\n\n  var columnOrder = columnStatesManager.getSortOrderOfColumn(column);\n\n  if (isDefined(columnOrder)) {\n    cssClasses.push(orderToCssClass.get(columnOrder));\n  }\n\n  return cssClasses;\n}\n/**\n * Get CSS classes which should be removed from column header.\n *\n * @returns {Array} Array of CSS classes.\n */\n\nexport function getClassesToRemove() {\n  return Array.from(orderToCssClass.values()).concat(HEADER_ACTION_CLASS, HEADER_CLASS_INDICATOR_DISABLED, HEADER_SORT_CLASS);\n}", "import \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { getCompareFunctionFactory } from \"./sortService/index.mjs\";\n/**\n * Sort comparator handled by conventional sort algorithm.\n *\n * @param {Array} sortingOrders Sort orders (`asc` for ascending, `desc` for descending).\n * @param {Array} columnMetas Column meta objects.\n * @returns {Function}\n */\n\nexport function rootComparator(sortingOrders, columnMetas) {\n  return function (rowIndexWithValues, nextRowIndexWithValues) {\n    // We sort array of arrays. Single array is in form [rowIndex, ...values].\n    // We compare just values, stored at second index of array.\n    var _rowIndexWithValues = _toArray(rowIndexWithValues),\n        values = _rowIndexWithValues.slice(1);\n\n    var _nextRowIndexWithValu = _toArray(nextRowIndexWithValues),\n        nextValues = _nextRowIndexWithValu.slice(1);\n\n    return function getCompareResult(column) {\n      var sortingOrder = sortingOrders[column];\n      var columnMeta = columnMetas[column];\n      var value = values[column];\n      var nextValue = nextValues[column];\n      var pluginSettings = columnMeta.columnSorting;\n      var compareFunctionFactory = pluginSettings.compareFunctionFactory ? pluginSettings.compareFunctionFactory : getCompareFunctionFactory(columnMeta.type);\n      var compareResult = compareFunctionFactory(sortingOrder, columnMeta, pluginSettings)(value, nextValue); // DIFF - MultiColumnSorting & ColumnSorting: removed iteration through next sorted columns.\n\n      return compareResult;\n    }(0);\n  };\n}", "import { isEmpty } from \"../../../helpers/mixed.mjs\";\nimport { DO_NOT_SWAP, FIRST_BEFORE_SECOND, FIRST_AFTER_SECOND } from \"../sortService/index.mjs\";\n/**\n * Default sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\n\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  var locale = columnMeta.locale;\n  return function (value, nextValue) {\n    var sortEmptyCells = columnPluginSettings.sortEmptyCells;\n\n    if (typeof value === 'string') {\n      value = value.toLocaleLowerCase(locale);\n    }\n\n    if (typeof nextValue === 'string') {\n      nextValue = nextValue.toLocaleLowerCase(locale);\n    }\n\n    if (value === nextValue) {\n      return DO_NOT_SWAP;\n    }\n\n    if (isEmpty(value)) {\n      if (isEmpty(nextValue)) {\n        return DO_NOT_SWAP;\n      } // Just fist value is empty and `sortEmptyCells` option was set\n\n\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n      }\n\n      return FIRST_AFTER_SECOND;\n    }\n\n    if (isEmpty(nextValue)) {\n      // Just second value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n      }\n\n      return FIRST_BEFORE_SECOND;\n    }\n\n    if (isNaN(value) && !isNaN(nextValue)) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    } else if (!isNaN(value) && isNaN(nextValue)) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    } else if (!(isNaN(value) || isNaN(nextValue))) {\n      value = parseFloat(value);\n      nextValue = parseFloat(nextValue);\n    }\n\n    if (value < nextValue) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    }\n\n    if (value > nextValue) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    return DO_NOT_SWAP;\n  };\n}\nexport var COLUMN_DATA_TYPE = 'default';", "import { isEmpty } from \"../../../helpers/mixed.mjs\";\nimport { DO_NOT_SWAP, FIRST_BEFORE_SECOND, FIRST_AFTER_SECOND } from \"../sortService/index.mjs\";\n/**\n * Numeric sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\n\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  return function (value, nextValue) {\n    var parsedFirstValue = parseFloat(value);\n    var parsedSecondValue = parseFloat(nextValue);\n    var sortEmptyCells = columnPluginSettings.sortEmptyCells; // Watch out when changing this part of code! Check below returns 0 (as expected) when comparing empty string, null, undefined\n\n    if (parsedFirstValue === parsedSecondValue || isNaN(parsedFirstValue) && isNaN(parsedSecondValue)) {\n      return DO_NOT_SWAP;\n    }\n\n    if (sortEmptyCells) {\n      if (isEmpty(value)) {\n        return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n      }\n\n      if (isEmpty(nextValue)) {\n        return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n      }\n    }\n\n    if (isNaN(parsedFirstValue)) {\n      return FIRST_AFTER_SECOND;\n    }\n\n    if (isNaN(parsedSecondValue)) {\n      return FIRST_BEFORE_SECOND;\n    }\n\n    if (parsedFirstValue < parsedSecondValue) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    } else if (parsedFirstValue > parsedSecondValue) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    return DO_NOT_SWAP;\n  };\n}\nexport var COLUMN_DATA_TYPE = 'numeric';", "import { DO_NOT_SWAP, FIRST_BEFORE_SECOND, FIRST_AFTER_SECOND } from \"../sortService/index.mjs\";\nimport { compareFunctionFactory as defaultCompareFunctionFactory } from \"../sortFunction/default.mjs\";\nimport { isEmpty } from \"../../../helpers/mixed.mjs\";\n/**\n * Checkbox sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\n\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  var checkedTemplate = columnMeta.checkedTemplate;\n  var uncheckedTemplate = columnMeta.uncheckedTemplate;\n  var sortEmptyCells = columnPluginSettings.sortEmptyCells;\n  return function (value, nextValue) {\n    var isEmptyValue = isEmpty(value);\n    var isEmptyNextValue = isEmpty(nextValue);\n    var unifiedValue = isEmptyValue ? uncheckedTemplate : value;\n    var unifiedNextValue = isEmptyNextValue ? uncheckedTemplate : nextValue;\n    var isValueFromTemplate = unifiedValue === uncheckedTemplate || unifiedValue === checkedTemplate;\n    var isNextValueFromTemplate = unifiedNextValue === uncheckedTemplate || unifiedNextValue === checkedTemplate; // As an empty cell we recognize cells with undefined, null and '' values.\n\n    if (sortEmptyCells === false) {\n      if (isEmptyValue && isEmptyNextValue === false) {\n        return FIRST_AFTER_SECOND;\n      }\n\n      if (isEmptyValue === false && isEmptyNextValue) {\n        return FIRST_BEFORE_SECOND;\n      }\n    } // 1st value === #BAD_VALUE#\n\n\n    if (isValueFromTemplate === false && isNextValueFromTemplate) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    } // 2nd value === #BAD_VALUE#\n\n\n    if (isValueFromTemplate && isNextValueFromTemplate === false) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    } // 1st value === #BAD_VALUE# && 2nd value === #BAD_VALUE#\n\n\n    if (isValueFromTemplate === false && isNextValueFromTemplate === false) {\n      // Sorting by values (not just by visual representation).\n      return defaultCompareFunctionFactory(sortOrder, columnMeta, columnPluginSettings)(value, nextValue);\n    }\n\n    if (unifiedValue === uncheckedTemplate && unifiedNextValue === checkedTemplate) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    }\n\n    if (unifiedValue === checkedTemplate && unifiedNextValue === uncheckedTemplate) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    return DO_NOT_SWAP;\n  };\n}\nexport var COLUMN_DATA_TYPE = 'checkbox';", "import moment from 'moment';\nimport { isEmpty } from \"../../../helpers/mixed.mjs\";\nimport { DO_NOT_SWAP, FIRST_BEFORE_SECOND, FIRST_AFTER_SECOND } from \"../sortService/index.mjs\";\n/**\n * Date sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\n\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  return function (value, nextValue) {\n    var sortEmptyCells = columnPluginSettings.sortEmptyCells;\n\n    if (value === nextValue) {\n      return DO_NOT_SWAP;\n    }\n\n    if (isEmpty(value)) {\n      if (isEmpty(nextValue)) {\n        return DO_NOT_SWAP;\n      } // Just fist value is empty and `sortEmptyCells` option was set\n\n\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n      }\n\n      return FIRST_AFTER_SECOND;\n    }\n\n    if (isEmpty(nextValue)) {\n      // Just second value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n      }\n\n      return FIRST_BEFORE_SECOND;\n    }\n\n    var dateFormat = columnMeta.dateFormat;\n    var firstDate = moment(value, dateFormat);\n    var nextDate = moment(nextValue, dateFormat);\n\n    if (!firstDate.isValid()) {\n      return FIRST_AFTER_SECOND;\n    }\n\n    if (!nextDate.isValid()) {\n      return FIRST_BEFORE_SECOND;\n    }\n\n    if (nextDate.isAfter(firstDate)) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    }\n\n    if (nextDate.isBefore(firstDate)) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    return DO_NOT_SWAP;\n  };\n}\nexport var COLUMN_DATA_TYPE = 'date';", "import { compareFunctionFactory as defaultSort, COLUMN_DATA_TYPE as DEFAULT_DATA_TYPE } from \"../sortFunction/default.mjs\";\nimport { compareFunctionFactory as numericSort, COLUMN_DATA_TYPE as NUMERIC_DATA_TYPE } from \"../sortFunction/numeric.mjs\";\nimport { compareFunctionFactory as checkboxSort, COLUMN_DATA_TYPE as CHECKBOX_DATA_TYPE } from \"../sortFunction/checkbox.mjs\";\nimport { compareFunctionFactory as dateSort, COLUMN_DATA_TYPE as DATE_DATA_TYPE } from \"../sortFunction/date.mjs\";\nimport staticRegister from \"../../../utils/staticRegister.mjs\";\n\nvar _staticRegister = staticRegister('sorting.compareFunctionFactory'),\n    registerCompareFunctionFactory = _staticRegister.register,\n    getGloballyCompareFunctionFactory = _staticRegister.getItem,\n    hasGloballyCompareFunctionFactory = _staticRegister.hasItem;\n\nvar _staticRegister2 = staticRegister('sorting.mainSortComparator'),\n    registerRootComparator = _staticRegister2.register,\n    getRootComparator = _staticRegister2.getItem;\n/**\n * Gets sort function for the particular column basing on it's data type.\n *\n * @param {string} type The data type.\n * @returns {Function}\n */\n\n\nexport function getCompareFunctionFactory(type) {\n  if (hasGloballyCompareFunctionFactory(type)) {\n    return getGloballyCompareFunctionFactory(type);\n  }\n\n  return getGloballyCompareFunctionFactory(DEFAULT_DATA_TYPE);\n}\nregisterCompareFunctionFactory(NUMERIC_DATA_TYPE, numericSort);\nregisterCompareFunctionFactory(CHECKBOX_DATA_TYPE, checkboxSort);\nregisterCompareFunctionFactory(DATE_DATA_TYPE, dateSort);\nregisterCompareFunctionFactory(DEFAULT_DATA_TYPE, defaultSort);\nexport { registerRootComparator, getRootComparator };", "function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Refactored implementation of LinkedList (part of javascript-algorithms project) by Github users:\n * mgechev, AndriiHeonia, Microfed and Jakeh (part of javascript-algorithms project - all project contributors\n * at repository website).\n *\n * Link to repository: https://github.com/mgechev/javascript-algorithms.\n */\n\n/**\n * Linked list node.\n *\n * @class NodeStructure\n * @util\n */\nvar NodeStructure = /*#__PURE__*/_createClass(function NodeStructure(data) {\n  _classCallCheck(this, NodeStructure);\n\n  /**\n   * Data of the node.\n   *\n   * @member {object}\n   */\n  this.data = data;\n  /**\n   * Next node.\n   *\n   * @member {NodeStructure}\n   */\n\n  this.next = null;\n  /**\n   * Previous node.\n   *\n   * @member {NodeStructure}\n   */\n\n  this.prev = null;\n});\n/**\n * Linked list.\n *\n * @class LinkedList\n * @util\n */\n\n\nvar LinkedList = /*#__PURE__*/function () {\n  function LinkedList() {\n    _classCallCheck(this, LinkedList);\n\n    this.first = null;\n    this.last = null;\n  }\n  /**\n   * Add data to the end of linked list.\n   *\n   * @param {object} data Data which should be added.\n   */\n\n\n  _createClass(LinkedList, [{\n    key: \"push\",\n    value: function push(data) {\n      var node = new NodeStructure(data);\n\n      if (this.first === null) {\n        this.first = node;\n        this.last = node;\n      } else {\n        var temp = this.last;\n        this.last = node;\n        node.prev = temp;\n        temp.next = node;\n      }\n    }\n    /**\n     * Add data to the beginning of linked list.\n     *\n     * @param {object} data Data which should be added.\n     */\n\n  }, {\n    key: \"unshift\",\n    value: function unshift(data) {\n      var node = new NodeStructure(data);\n\n      if (this.first === null) {\n        this.first = node;\n        this.last = node;\n      } else {\n        var temp = this.first;\n        this.first = node;\n        node.next = temp;\n        temp.prev = node;\n      }\n    }\n    /**\n     * In order traversal of the linked list.\n     *\n     * @param {Function} callback Callback which should be executed on each node.\n     */\n\n  }, {\n    key: \"inorder\",\n    value: function inorder(callback) {\n      var temp = this.first;\n\n      while (temp) {\n        callback(temp);\n        temp = temp.next;\n      }\n    }\n    /**\n     * Remove data from the linked list.\n     *\n     * @param {object} data Data which should be removed.\n     * @returns {boolean} Returns true if data has been removed.\n     */\n\n  }, {\n    key: \"remove\",\n    value: function remove(data) {\n      if (this.first === null) {\n        return false;\n      }\n\n      var temp = this.first;\n      var next;\n      var prev;\n\n      while (temp) {\n        if (temp.data === data) {\n          next = temp.next;\n          prev = temp.prev;\n\n          if (next) {\n            next.prev = prev;\n          }\n\n          if (prev) {\n            prev.next = next;\n          }\n\n          if (temp === this.first) {\n            this.first = next;\n          }\n\n          if (temp === this.last) {\n            this.last = prev;\n          }\n\n          return true;\n        }\n\n        temp = temp.next;\n      }\n\n      return false;\n    }\n    /**\n     * Check if linked list contains cycle.\n     *\n     * @returns {boolean} Returns true if linked list contains cycle.\n     */\n\n  }, {\n    key: \"hasCycle\",\n    value: function hasCycle() {\n      var fast = this.first;\n      var slow = this.first;\n\n      while (true) {\n        if (fast === null) {\n          return false;\n        }\n\n        fast = fast.next;\n\n        if (fast === null) {\n          return false;\n        }\n\n        fast = fast.next;\n        slow = slow.next;\n\n        if (fast === slow) {\n          return true;\n        }\n      }\n    }\n    /**\n     * Return last node from the linked list.\n     *\n     * @returns {NodeStructure} Last node.\n     */\n\n  }, {\n    key: \"pop\",\n    value: function pop() {\n      if (this.last === null) {\n        return null;\n      }\n\n      var temp = this.last;\n      this.last = this.last.prev;\n      return temp;\n    }\n    /**\n     * Return first node from the linked list.\n     *\n     * @returns {NodeStructure} First node.\n     */\n\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.first === null) {\n        return null;\n      }\n\n      var temp = this.first;\n      this.first = this.first.next;\n      return temp;\n    }\n    /**\n     * Reverses the linked list recursively.\n     */\n\n  }, {\n    key: \"recursiveReverse\",\n    value: function recursiveReverse() {\n      /**\n       * @param {*} current The current value.\n       * @param {*} next The next value.\n       */\n      function inverse(current, next) {\n        if (!next) {\n          return;\n        }\n\n        inverse(next, next.next);\n        next.next = current;\n      }\n\n      if (!this.first) {\n        return;\n      }\n\n      inverse(this.first, this.first.next);\n      this.first.next = null;\n      var temp = this.first;\n      this.first = this.last;\n      this.last = temp;\n    }\n    /**\n     * Reverses the linked list iteratively.\n     */\n\n  }, {\n    key: \"reverse\",\n    value: function reverse() {\n      if (!this.first || !this.first.next) {\n        return;\n      }\n\n      var current = this.first.next;\n      var prev = this.first;\n      var temp;\n\n      while (current) {\n        temp = current.next;\n        current.next = prev;\n        prev.prev = current;\n        prev = current;\n        current = temp;\n      }\n\n      this.first.next = null;\n      this.last.prev = null;\n      temp = this.first;\n      this.first = prev;\n      this.last = temp;\n    }\n  }]);\n\n  return LinkedList;\n}();\n\nexport { NodeStructure };\nexport default LinkedList;", "import \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport LinkedList from \"../dataStructures/linkedList.mjs\";\n/**\n * Refactored implementation of mergeSort (part of javascript-algorithms project) by Github users:\n * mgechev, AndriiHeonia and lekkas (part of javascript-algorithms project - all project contributors\n * at repository website).\n *\n * Link to repository: https://github.com/mgechev/javascript-algorithms.\n */\n\n/**\n * Specifies a function that defines the sort order. The array is sorted according to each\n * character's Unicode code point value, according to the string conversion of each element.\n *\n * @param {*} a The first compared element.\n * @param {*} b The second compared element.\n * @returns {number}\n */\n\nvar defaultCompareFunction = function defaultCompareFunction(a, b) {\n  // sort lexically\n  var firstValue = a.toString();\n  var secondValue = b.toString();\n\n  if (firstValue === secondValue) {\n    return 0;\n  } else if (firstValue < secondValue) {\n    return -1;\n  }\n\n  return 1;\n};\n/**\n * Mergesort method which is recursively called for sorting the input array.\n *\n * @param {Array} array The array which should be sorted.\n * @param {Function} compareFunction Compares two items in an array. If compareFunction is not supplied,\n * elements are sorted by converting them to strings and comparing strings in Unicode code point order.\n * @param {number} startIndex Left side of the subarray.\n * @param {number} endIndex Right side of the subarray.\n * @returns {Array} Array with sorted subarray.\n */\n\n\nexport default function mergeSort(array) {\n  var compareFunction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultCompareFunction;\n  var startIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n  var endIndex = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : array.length;\n\n  // eslint-disable-line max-len\n  if (Math.abs(endIndex - startIndex) <= 1) {\n    return [];\n  }\n\n  var middleIndex = Math.ceil((startIndex + endIndex) / 2);\n  mergeSort(array, compareFunction, startIndex, middleIndex);\n  mergeSort(array, compareFunction, middleIndex, endIndex);\n  return merge(array, compareFunction, startIndex, middleIndex, endIndex);\n}\n/**\n * Devides and sort merges two subarrays of given array.\n *\n * @param {Array} array The array which subarrays should be sorted.\n * @param {Function} compareFunction The function with comparision logic.\n * @param {number} startIndex The start of the first subarray.\n * This subarray is with end middle - 1.\n * @param {number} middleIndex The start of the second array.\n * @param {number} endIndex End - 1 is the end of the second array.\n * @returns {Array} The array with sorted subarray.\n */\n\nfunction merge(array, compareFunction, startIndex, middleIndex, endIndex) {\n  var leftElements = new LinkedList();\n  var rightElements = new LinkedList();\n  var leftSize = middleIndex - startIndex;\n  var rightSize = endIndex - middleIndex;\n  var maxSize = Math.max(leftSize, rightSize);\n  var size = endIndex - startIndex;\n\n  for (var _i = 0; _i < maxSize; _i += 1) {\n    if (_i < leftSize) {\n      leftElements.push(array[startIndex + _i]);\n    }\n\n    if (_i < rightSize) {\n      rightElements.push(array[middleIndex + _i]);\n    }\n  }\n\n  var i = 0;\n\n  while (i < size) {\n    if (leftElements.first && rightElements.first) {\n      if (compareFunction(leftElements.first.data, rightElements.first.data) > 0) {\n        array[startIndex + i] = rightElements.shift().data;\n      } else {\n        array[startIndex + i] = leftElements.shift().data;\n      }\n    } else if (leftElements.first) {\n      array[startIndex + i] = leftElements.shift().data;\n    } else {\n      array[startIndex + i] = rightElements.shift().data;\n    }\n\n    i += 1;\n  }\n\n  return array;\n}", "import mergeSort from \"../../../utils/sortingAlgorithms/mergeSort.mjs\";\nimport { getRootComparator } from \"./registry.mjs\";\nexport var DO_NOT_SWAP = 0;\nexport var FIRST_BEFORE_SECOND = -1;\nexport var FIRST_AFTER_SECOND = 1;\n/**\n * @param {Array} indexesWithData The data to sort.\n * @param {string} rootComparatorId The comparator logic to use.\n * @param {Array} argsForRootComparator Additional arguments for comparator function.\n */\n\nexport function sort(indexesWithData, rootComparatorId) {\n  var rootComparator = getRootComparator(rootComparatorId);\n\n  for (var _len = arguments.length, argsForRootComparator = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    argsForRootComparator[_key - 2] = arguments[_key];\n  }\n\n  mergeSort(indexesWithData, rootComparator.apply(void 0, argsForRootComparator));\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nvar _templateObject;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.string.replace.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { objectEach } from \"../../helpers/object.mjs\";\nimport Endpoints from \"./endpoints.mjs\";\nimport { toSingleLine } from \"../../helpers/templateLiteralTag.mjs\";\nexport var PLUGIN_KEY = 'columnSummary';\nexport var PLUGIN_PRIORITY = 220;\n/**\n * @plugin ColumnSummary\n * @class ColumnSummary\n *\n * @description\n * The `ColumnSummary` plugin lets you [easily summarize your columns](@/guides/columns/column-summary.md).\n *\n * You can use the [built-in summary functions](@/guides/columns/column-summary.md#built-in-summary-functions),\n * or implement a [custom summary function](@/guides/columns/column-summary.md#implementing-a-custom-summary-function).\n *\n * For each column summary, you can set the following configuration options:\n *\n * | Option | Required | Type | Default | Description |\n * |---|---|---|---|---|\n * | `sourceColumn` | No | Number | Same as `destinationColumn` | [Selects a column to summarize](@/guides/columns/column-summary.md#step-2-select-cells-that-you-want-to-summarize) |\n * | `ranges` | No | Array | - | [Selects ranges of rows to summarize](@/guides/columns/column-summary.md#step-2-select-cells-that-you-want-to-summarize) |\n * | `type` | Yes | String | - | [Sets a summary function](@/guides/columns/column-summary.md#step-3-calculate-your-summary) |\n * | `destinationRow` | Yes | Number | - | [Sets the destination cell's row coordinate](@/guides/columns/column-summary.md#step-4-provide-the-destination-cell-s-coordinates) |\n * | `destinationColumn` | Yes | Number | - | [Sets the destination cell's column coordinate](@/guides/columns/column-summary.md#step-4-provide-the-destination-cell-s-coordinates) |\n * | `forceNumeric` | No | Boolean | `false` | [Forces the summary to treat non-numerics as numerics](@/guides/columns/column-summary.md#forcing-numeric-values) |\n * | `reversedRowCoords` | No | Boolean | `false` | [Reverses row coordinates](@/guides/columns/column-summary.md#step-5-make-room-for-the-destination-cell) |\n * | `suppressDataTypeErrors` | No | Boolean | `true` | [Suppresses data type errors](@/guides/columns/column-summary.md#throwing-data-type-errors) |\n * | `readOnly` | No | Boolean | `true` | Makes summary cell read-only |\n * | `roundFloat` | No | Number | - | [Rounds summary result](@/guides/columns/column-summary.md#rounding-a-column-summary-result) |\n * | `customFunction` | No | Function | - | [Lets you add a custom summary function](@/guides/columns/column-summary.md#implementing-a-custom-summary-function) |\n *\n * @example\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   colHeaders: true,\n *   rowHeaders: true,\n *   columnSummary: [\n *     {\n *       type: 'min',\n *       destinationRow: 4,\n *       destinationColumn: 1,\n *     },\n *     {\n *       type: 'max',\n *       destinationRow: 0,\n *       destinationColumn: 3,\n *       reversedRowCoords: true\n *     },\n *     {\n *       type: 'sum',\n *       destinationRow: 4,\n *       destinationColumn: 5,\n *       forceNumeric: true\n *     }\n *   ]\n * });\n */\n\nexport var ColumnSummary = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(ColumnSummary, _BasePlugin);\n\n  var _super = _createSuper(ColumnSummary);\n\n  function ColumnSummary(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, ColumnSummary);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * The Endpoints class instance. Used to make all endpoint-related operations.\n     *\n     * @private\n     * @type {null|Endpoints}\n     */\n\n    _this.endpoints = null;\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ColumnSummary#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(ColumnSummary, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.settings = this.hot.getSettings()[PLUGIN_KEY];\n      this.endpoints = new Endpoints(this, this.settings);\n      this.addHook('afterInit', function () {\n        return _this2.onAfterInit.apply(_this2, arguments);\n      });\n      this.addHook('afterChange', function () {\n        return _this2.onAfterChange.apply(_this2, arguments);\n      });\n      this.addHook('beforeCreateRow', function (index, amount, source) {\n        return _this2.endpoints.resetSetupBeforeStructureAlteration('insert_row', index, amount, null, source);\n      }); // eslint-disable-line max-len\n\n      this.addHook('beforeCreateCol', function (index, amount, source) {\n        return _this2.endpoints.resetSetupBeforeStructureAlteration('insert_col', index, amount, null, source);\n      }); // eslint-disable-line max-len\n\n      this.addHook('beforeRemoveRow', function () {\n        var _this2$endpoints;\n\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        return (_this2$endpoints = _this2.endpoints).resetSetupBeforeStructureAlteration.apply(_this2$endpoints, ['remove_row'].concat(args));\n      });\n      this.addHook('beforeRemoveCol', function () {\n        var _this2$endpoints2;\n\n        for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n          args[_key2] = arguments[_key2];\n        }\n\n        return (_this2$endpoints2 = _this2.endpoints).resetSetupBeforeStructureAlteration.apply(_this2$endpoints2, ['remove_col'].concat(args));\n      });\n      this.addHook('afterCreateRow', function (index, amount, source) {\n        return _this2.endpoints.resetSetupAfterStructureAlteration('insert_row', index, amount, null, source);\n      }); // eslint-disable-line max-len\n\n      this.addHook('afterCreateCol', function (index, amount, source) {\n        return _this2.endpoints.resetSetupAfterStructureAlteration('insert_col', index, amount, null, source);\n      }); // eslint-disable-line max-len\n\n      this.addHook('afterRemoveRow', function () {\n        var _this2$endpoints3;\n\n        for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n          args[_key3] = arguments[_key3];\n        }\n\n        return (_this2$endpoints3 = _this2.endpoints).resetSetupAfterStructureAlteration.apply(_this2$endpoints3, ['remove_row'].concat(args));\n      });\n      this.addHook('afterRemoveCol', function () {\n        var _this2$endpoints4;\n\n        for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n          args[_key4] = arguments[_key4];\n        }\n\n        return (_this2$endpoints4 = _this2.endpoints).resetSetupAfterStructureAlteration.apply(_this2$endpoints4, ['remove_col'].concat(args));\n      });\n      this.addHook('afterRowMove', function () {\n        return _this2.onAfterRowMove.apply(_this2, arguments);\n      });\n\n      _get(_getPrototypeOf(ColumnSummary.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.endpoints = null;\n      this.settings = null;\n      this.currentEndpoint = null;\n    }\n    /**\n     * Calculates math for a single endpoint.\n     *\n     * @private\n     * @param {object} endpoint Contains information about the endpoint.\n     */\n\n  }, {\n    key: \"calculate\",\n    value: function calculate(endpoint) {\n      switch (endpoint.type.toLowerCase()) {\n        case 'sum':\n          endpoint.result = this.calculateSum(endpoint);\n          break;\n\n        case 'min':\n          endpoint.result = this.calculateMinMax(endpoint, endpoint.type);\n          break;\n\n        case 'max':\n          endpoint.result = this.calculateMinMax(endpoint, endpoint.type);\n          break;\n\n        case 'count':\n          endpoint.result = this.countEntries(endpoint);\n          break;\n\n        case 'average':\n          endpoint.result = this.calculateAverage(endpoint);\n          break;\n\n        case 'custom':\n          endpoint.result = endpoint.customFunction.call(this, endpoint);\n          break;\n\n        default:\n          break;\n      }\n    }\n    /**\n     * Calculates sum of the values contained in ranges provided in the plugin config.\n     *\n     * @private\n     * @param {object} endpoint Contains the endpoint information.\n     * @returns {number} Sum for the selected range.\n     */\n\n  }, {\n    key: \"calculateSum\",\n    value: function calculateSum(endpoint) {\n      var _this3 = this;\n\n      var sum = 0;\n      objectEach(endpoint.ranges, function (range) {\n        sum += _this3.getPartialSum(range, endpoint.sourceColumn);\n      });\n      return sum;\n    }\n    /**\n     * Returns partial sum of values from a single row range.\n     *\n     * @private\n     * @param {Array} rowRange Range for the sum.\n     * @param {number} col Column index.\n     * @returns {number} The partial sum.\n     */\n\n  }, {\n    key: \"getPartialSum\",\n    value: function getPartialSum(rowRange, col) {\n      var sum = 0;\n      var i = rowRange[1] || rowRange[0];\n      var cellValue = null;\n      var biggestDecimalPlacesCount = 0;\n\n      do {\n        cellValue = this.getCellValue(i, col) || 0;\n        var decimalPlaces = (\"\".concat(cellValue).split('.')[1] || []).length || 1;\n\n        if (decimalPlaces > biggestDecimalPlacesCount) {\n          biggestDecimalPlacesCount = decimalPlaces;\n        }\n\n        sum += cellValue || 0;\n        i -= 1;\n      } while (i >= rowRange[0]); // Workaround for e.g. 802.2 + 1.1 = 803.3000000000001\n\n\n      return Math.round(sum * Math.pow(10, biggestDecimalPlacesCount)) / Math.pow(10, biggestDecimalPlacesCount);\n    }\n    /**\n     * Calculates the minimal value for the selected ranges.\n     *\n     * @private\n     * @param {object} endpoint Contains the endpoint information.\n     * @param {string} type `'min'` or `'max'`.\n     * @returns {number} Min or Max value.\n     */\n\n  }, {\n    key: \"calculateMinMax\",\n    value: function calculateMinMax(endpoint, type) {\n      var _this4 = this;\n\n      var result = null;\n      objectEach(endpoint.ranges, function (range) {\n        var partialResult = _this4.getPartialMinMax(range, endpoint.sourceColumn, type);\n\n        if (result === null && partialResult !== null) {\n          result = partialResult;\n        }\n\n        if (partialResult !== null) {\n          switch (type) {\n            case 'min':\n              result = Math.min(result, partialResult);\n              break;\n\n            case 'max':\n              result = Math.max(result, partialResult);\n              break;\n\n            default:\n              break;\n          }\n        }\n      });\n      return result === null ? 'Not enough data' : result;\n    }\n    /**\n     * Returns a local minimum of the provided sub-range.\n     *\n     * @private\n     * @param {Array} rowRange Range for the calculation.\n     * @param {number} col Column index.\n     * @param {string} type `'min'` or `'max'`.\n     * @returns {number} Min or max value.\n     */\n\n  }, {\n    key: \"getPartialMinMax\",\n    value: function getPartialMinMax(rowRange, col, type) {\n      var result = null;\n      var i = rowRange[1] || rowRange[0];\n      var cellValue;\n\n      do {\n        cellValue = this.getCellValue(i, col) || null;\n\n        if (result === null) {\n          result = cellValue;\n        } else if (cellValue !== null) {\n          switch (type) {\n            case 'min':\n              result = Math.min(result, cellValue);\n              break;\n\n            case 'max':\n              result = Math.max(result, cellValue);\n              break;\n\n            default:\n              break;\n          }\n        }\n\n        i -= 1;\n      } while (i >= rowRange[0]);\n\n      return result;\n    }\n    /**\n     * Counts empty cells in the provided row range.\n     *\n     * @private\n     * @param {Array} rowRange Row range for the calculation.\n     * @param {number} col Column index.\n     * @returns {number} Empty cells count.\n     */\n\n  }, {\n    key: \"countEmpty\",\n    value: function countEmpty(rowRange, col) {\n      var cellValue;\n      var counter = 0;\n      var i = rowRange[1] || rowRange[0];\n\n      do {\n        cellValue = this.getCellValue(i, col);\n\n        if (!cellValue) {\n          counter += 1;\n        }\n\n        i -= 1;\n      } while (i >= rowRange[0]);\n\n      return counter;\n    }\n    /**\n     * Counts non-empty cells in the provided row range.\n     *\n     * @private\n     * @param {object} endpoint Contains the endpoint information.\n     * @returns {number} Entry count.\n     */\n\n  }, {\n    key: \"countEntries\",\n    value: function countEntries(endpoint) {\n      var _this5 = this;\n\n      var result = 0;\n      var ranges = endpoint.ranges;\n      objectEach(ranges, function (range) {\n        var partial = range[1] === void 0 ? 1 : range[1] - range[0] + 1;\n\n        var emptyCount = _this5.countEmpty(range, endpoint.sourceColumn);\n\n        result += partial;\n        result -= emptyCount;\n      });\n      return result;\n    }\n    /**\n     * Calculates the average value from the cells in the range.\n     *\n     * @private\n     * @param {object} endpoint Contains the endpoint information.\n     * @returns {number} Avarage value.\n     */\n\n  }, {\n    key: \"calculateAverage\",\n    value: function calculateAverage(endpoint) {\n      var sum = this.calculateSum(endpoint);\n      var entriesCount = this.countEntries(endpoint);\n      return sum / entriesCount;\n    }\n    /**\n     * Returns a cell value, taking into consideration a basic validation.\n     *\n     * @private\n     * @param {number} row Row index.\n     * @param {number} col Column index.\n     * @returns {string} The cell value.\n     */\n\n  }, {\n    key: \"getCellValue\",\n    value: function getCellValue(row, col) {\n      var visualRowIndex = this.hot.toVisualRow(row);\n      var visualColumnIndex = this.hot.toVisualColumn(col);\n      var cellValue = this.hot.getSourceDataAtCell(row, col);\n      var cellClassName = '';\n\n      if (visualRowIndex !== null && visualColumnIndex !== null) {\n        cellClassName = this.hot.getCellMeta(visualRowIndex, visualColumnIndex).className || '';\n      }\n\n      if (cellClassName.indexOf('columnSummaryResult') > -1) {\n        return null;\n      }\n\n      if (this.endpoints.currentEndpoint.forceNumeric) {\n        if (typeof cellValue === 'string') {\n          cellValue = cellValue.replace(/,/, '.');\n        }\n\n        cellValue = parseFloat(cellValue);\n      }\n\n      if (isNaN(cellValue)) {\n        if (!this.endpoints.currentEndpoint.suppressDataTypeErrors) {\n          throw new Error(toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"ColumnSummary plugin: cell at (\", \", \", \") is not in a \\n          numeric format. Cannot do the calculation.\"], [\"ColumnSummary plugin: cell at (\", \", \", \") is not in a\\\\x20\\n          numeric format. Cannot do the calculation.\"])), row, col));\n        }\n      }\n\n      return cellValue;\n    }\n    /**\n     * `afterInit` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterInit\",\n    value: function onAfterInit() {\n      this.endpoints.endpoints = this.endpoints.parseSettings();\n      this.endpoints.refreshAllEndpoints(true);\n    }\n    /**\n     * `afterChange` hook callback.\n     *\n     * @private\n     * @param {Array} changes 2D array containing information about each of the edited cells.\n     * @param {string} source The string that identifies source of changes.\n     */\n\n  }, {\n    key: \"onAfterChange\",\n    value: function onAfterChange(changes, source) {\n      if (changes && source !== 'ColumnSummary.reset' && source !== 'ColumnSummary.set' && source !== 'loadData') {\n        this.endpoints.refreshChangedEndpoints(changes);\n      }\n    }\n    /**\n     * `beforeRowMove` hook callback.\n     *\n     * @private\n     * @param {Array} rows Array of visual row indexes to be moved.\n     * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n     * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving.md).\n     */\n\n  }, {\n    key: \"onAfterRowMove\",\n    value: function onAfterRowMove(rows, finalIndex) {\n      this.endpoints.resetSetupBeforeStructureAlteration('move_row', rows[0], rows.length, rows, this.pluginName);\n      this.endpoints.resetSetupAfterStructureAlteration('move_row', finalIndex, rows.length, rows, this.pluginName);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return ColumnSummary;\n}(BasePlugin);", "'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar thisNumberValue = require('../internals/this-number-value');\nvar $repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar String = global.String;\nvar floor = Math.floor;\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar un$ToFixed = uncurryThis(1.0.toFixed);\n\nvar pow = function (x, n, acc) {\n  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n  var n = 0;\n  var x2 = x;\n  while (x2 >= 4096) {\n    n += 12;\n    x2 /= 4096;\n  }\n  while (x2 >= 2) {\n    n += 1;\n    x2 /= 2;\n  } return n;\n};\n\nvar multiply = function (data, n, c) {\n  var index = -1;\n  var c2 = c;\n  while (++index < 6) {\n    c2 += n * data[index];\n    data[index] = c2 % 1e7;\n    c2 = floor(c2 / 1e7);\n  }\n};\n\nvar divide = function (data, n) {\n  var index = 6;\n  var c = 0;\n  while (--index >= 0) {\n    c += data[index];\n    data[index] = floor(c / n);\n    c = (c % n) * 1e7;\n  }\n};\n\nvar dataToString = function (data) {\n  var index = 6;\n  var s = '';\n  while (--index >= 0) {\n    if (s !== '' || index === 0 || data[index] !== 0) {\n      var t = String(data[index]);\n      s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\n    }\n  } return s;\n};\n\nvar FORCED = fails(function () {\n  return un$ToFixed(0.00008, 3) !== '0.000' ||\n    un$ToFixed(0.9, 0) !== '1' ||\n    un$ToFixed(1.255, 2) !== '1.25' ||\n    un$ToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\n}) || !fails(function () {\n  // V8 ~ Android 4.3-\n  un$ToFixed({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n  toFixed: function toFixed(fractionDigits) {\n    var number = thisNumberValue(this);\n    var fractDigits = toIntegerOrInfinity(fractionDigits);\n    var data = [0, 0, 0, 0, 0, 0];\n    var sign = '';\n    var result = '0';\n    var e, z, j, k;\n\n    // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation\n    if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (number != number) return 'NaN';\n    if (number <= -1e21 || number >= 1e21) return String(number);\n    if (number < 0) {\n      sign = '-';\n      number = -number;\n    }\n    if (number > 1e-21) {\n      e = log(number * pow(2, 69, 1)) - 69;\n      z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n      z *= 0x10000000000000;\n      e = 52 - e;\n      if (e > 0) {\n        multiply(data, 0, z);\n        j = fractDigits;\n        while (j >= 7) {\n          multiply(data, 1e7, 0);\n          j -= 7;\n        }\n        multiply(data, pow(10, j, 1), 0);\n        j = e - 1;\n        while (j >= 23) {\n          divide(data, 1 << 23);\n          j -= 23;\n        }\n        divide(data, 1 << j);\n        multiply(data, 1, 1);\n        divide(data, 2);\n        result = dataToString(data);\n      } else {\n        multiply(data, 0, z);\n        multiply(data, 1 << -e, 0);\n        result = dataToString(data) + repeat('0', fractDigits);\n      }\n    }\n    if (fractDigits > 0) {\n      k = result.length;\n      result = sign + (k <= fractDigits\n        ? '0.' + repeat('0', fractDigits - k) + result\n        : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\n    } else {\n      result = sign + result;\n    } return result;\n  }\n});\n", "import \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.number.to-fixed.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { arrayEach } from \"../../helpers/array.mjs\";\nimport { warn } from \"../../helpers/console.mjs\";\n/**\n * Class used to make all endpoint-related operations.\n *\n * @private\n * @class Endpoints\n */\n\nvar Endpoints = /*#__PURE__*/function () {\n  function Endpoints(plugin, settings) {\n    _classCallCheck(this, Endpoints);\n\n    /**\n     * The main plugin instance.\n     */\n    this.plugin = plugin;\n    /**\n     * Handsontable instance.\n     *\n     * @type {object}\n     */\n\n    this.hot = this.plugin.hot;\n    /**\n     * Array of declared plugin endpoints (calculation destination points).\n     *\n     * @type {Array}\n     * @default {Array} Empty array.\n     */\n\n    this.endpoints = [];\n    /**\n     * The plugin settings, taken from Handsontable configuration.\n     *\n     * @type {object|Function}\n     * @default null\n     */\n\n    this.settings = settings;\n    /**\n     * Settings type. Can be either 'array' or 'function.\n     *\n     * @type {string}\n     * @default {'array'}\n     */\n\n    this.settingsType = 'array';\n    /**\n     * The current endpoint (calculation destination point) in question.\n     *\n     * @type {object}\n     * @default null\n     */\n\n    this.currentEndpoint = null;\n    /**\n     * Array containing a list of changes to be applied.\n     *\n     * @private\n     * @type {Array}\n     * @default {[]}\n     */\n\n    this.cellsToSetCache = [];\n  }\n  /**\n   * Get a single endpoint object.\n   *\n   * @param {number} index Index of the endpoint.\n   * @returns {object}\n   */\n\n\n  _createClass(Endpoints, [{\n    key: \"getEndpoint\",\n    value: function getEndpoint(index) {\n      if (this.settingsType === 'function') {\n        return this.fillMissingEndpointData(this.settings)[index];\n      }\n\n      return this.endpoints[index];\n    }\n    /**\n     * Get an array with all the endpoints.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getAllEndpoints\",\n    value: function getAllEndpoints() {\n      if (this.settingsType === 'function') {\n        return this.fillMissingEndpointData(this.settings);\n      }\n\n      return this.endpoints;\n    }\n    /**\n     * Used to fill the blanks in the endpoint data provided by a settings function.\n     *\n     * @private\n     * @param {Function} func Function provided in the HOT settings.\n     * @returns {Array} An array of endpoints.\n     */\n\n  }, {\n    key: \"fillMissingEndpointData\",\n    value: function fillMissingEndpointData(func) {\n      return this.parseSettings(func.call(this));\n    }\n    /**\n     * Parse plugin's settings.\n     *\n     * @param {Array} settings The settings array.\n     * @returns {object[]}\n     */\n\n  }, {\n    key: \"parseSettings\",\n    value: function parseSettings(settings) {\n      var _this = this;\n\n      var endpointsArray = [];\n      var settingsArray = settings;\n\n      if (!settingsArray && typeof this.settings === 'function') {\n        this.settingsType = 'function';\n        return;\n      }\n\n      if (!settingsArray) {\n        settingsArray = this.settings;\n      }\n\n      arrayEach(settingsArray, function (val) {\n        var newEndpoint = {};\n\n        _this.assignSetting(val, newEndpoint, 'ranges', [[0, _this.hot.countRows() - 1]]);\n\n        _this.assignSetting(val, newEndpoint, 'reversedRowCoords', false);\n\n        _this.assignSetting(val, newEndpoint, 'destinationRow', new Error(\"\\n        You must provide a destination row for the Column Summary plugin in order to work properly!\\n      \"));\n\n        _this.assignSetting(val, newEndpoint, 'destinationColumn', new Error(\"\\n        You must provide a destination column for the Column Summary plugin in order to work properly!\\n      \"));\n\n        _this.assignSetting(val, newEndpoint, 'sourceColumn', val.destinationColumn);\n\n        _this.assignSetting(val, newEndpoint, 'type', 'sum');\n\n        _this.assignSetting(val, newEndpoint, 'forceNumeric', false);\n\n        _this.assignSetting(val, newEndpoint, 'suppressDataTypeErrors', true);\n\n        _this.assignSetting(val, newEndpoint, 'suppressDataTypeErrors', true);\n\n        _this.assignSetting(val, newEndpoint, 'customFunction', null);\n\n        _this.assignSetting(val, newEndpoint, 'readOnly', true);\n\n        _this.assignSetting(val, newEndpoint, 'roundFloat', false);\n\n        endpointsArray.push(newEndpoint);\n      });\n      return endpointsArray;\n    }\n    /**\n     * Setter for the internal setting objects.\n     *\n     * @param {object} settings Object with the settings.\n     * @param {object} endpoint Contains information about the endpoint for the the calculation.\n     * @param {string} name Settings name.\n     * @param {object} defaultValue Default value for the settings.\n     */\n\n  }, {\n    key: \"assignSetting\",\n    value: function assignSetting(settings, endpoint, name, defaultValue) {\n      if (name === 'ranges' && settings[name] === void 0) {\n        endpoint[name] = defaultValue;\n        return;\n      } else if (name === 'ranges' && settings[name].length === 0) {\n        return;\n      }\n\n      if (settings[name] === void 0) {\n        if (defaultValue instanceof Error) {\n          throw defaultValue;\n        }\n\n        endpoint[name] = defaultValue;\n      } else {\n        /* eslint-disable no-lonely-if */\n        if (name === 'destinationRow' && endpoint.reversedRowCoords) {\n          endpoint[name] = this.hot.countRows() - settings[name] - 1;\n        } else {\n          endpoint[name] = settings[name];\n        }\n      }\n    }\n    /**\n     * Resets the endpoint setup before the structure alteration (like inserting or removing rows/columns). Used for settings provided as a function.\n     *\n     * @private\n     * @param {string} action Type of the action performed.\n     * @param {number} index Row/column index.\n     * @param {number} number Number of rows/columns added/removed.\n     */\n\n  }, {\n    key: \"resetSetupBeforeStructureAlteration\",\n    value: function resetSetupBeforeStructureAlteration(action, index, number) {\n      if (this.settingsType !== 'function') {\n        return;\n      }\n\n      var type = action.indexOf('row') > -1 ? 'row' : 'col';\n      var endpoints = this.getAllEndpoints();\n      arrayEach(endpoints, function (val) {\n        if (type === 'row' && val.destinationRow >= index) {\n          if (action === 'insert_row') {\n            val.alterRowOffset = number;\n          } else if (action === 'remove_row') {\n            val.alterRowOffset = -1 * number;\n          }\n        }\n\n        if (type === 'col' && val.destinationColumn >= index) {\n          if (action === 'insert_col') {\n            val.alterColumnOffset = number;\n          } else if (action === 'remove_col') {\n            val.alterColumnOffset = -1 * number;\n          }\n        }\n      });\n      this.resetAllEndpoints(endpoints, false);\n    }\n    /**\n     * AfterCreateRow/afterCreateRow/afterRemoveRow/afterRemoveCol hook callback. Reset and reenables the summary functionality\n     * after changing the table structure.\n     *\n     * @private\n     * @param {string} action Type of the action performed.\n     * @param {number} index Row/column index.\n     * @param {number} number Number of rows/columns added/removed.\n     * @param {Array} [logicRows] Array of the logical indexes.\n     * @param {string} [source] Source of change.\n     * @param {boolean} [forceRefresh] `true` of the endpoints should refresh after completing the function.\n     */\n\n  }, {\n    key: \"resetSetupAfterStructureAlteration\",\n    value: function resetSetupAfterStructureAlteration(action, index, number, logicRows, source) {\n      var _this2 = this;\n\n      var forceRefresh = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n\n      if (this.settingsType === 'function') {\n        // We need to run it on a next avaiable hook, because the TrimRows' `afterCreateRow` hook triggers after this one,\n        // and it needs to be run to properly calculate the endpoint value.\n        var beforeViewRenderCallback = function beforeViewRenderCallback() {\n          _this2.hot.removeHook('beforeViewRender', beforeViewRenderCallback);\n\n          return _this2.refreshAllEndpoints();\n        };\n\n        this.hot.addHookOnce('beforeViewRender', beforeViewRenderCallback);\n        return;\n      }\n\n      var type = action.indexOf('row') > -1 ? 'row' : 'col';\n      var multiplier = action.indexOf('remove') > -1 ? -1 : 1;\n      var endpoints = this.getAllEndpoints();\n      var rowMoving = action.indexOf('move_row') === 0;\n      var placeOfAlteration = index;\n      arrayEach(endpoints, function (val) {\n        if (type === 'row' && val.destinationRow >= placeOfAlteration) {\n          val.alterRowOffset = multiplier * number;\n        }\n\n        if (type === 'col' && val.destinationColumn >= placeOfAlteration) {\n          val.alterColumnOffset = multiplier * number;\n        }\n      });\n      this.resetAllEndpoints(endpoints, !rowMoving);\n\n      if (rowMoving) {\n        arrayEach(endpoints, function (endpoint) {\n          _this2.extendEndpointRanges(endpoint, placeOfAlteration, logicRows[0], logicRows.length);\n\n          _this2.recreatePhysicalRanges(endpoint);\n\n          _this2.clearOffsetInformation(endpoint);\n        });\n      } else {\n        arrayEach(endpoints, function (endpoint) {\n          _this2.shiftEndpointCoordinates(endpoint, placeOfAlteration);\n        });\n      }\n\n      if (forceRefresh) {\n        this.refreshAllEndpoints();\n      }\n    }\n    /**\n     * Clear the offset information from the endpoint object.\n     *\n     * @private\n     * @param {object} endpoint And endpoint object.\n     */\n\n  }, {\n    key: \"clearOffsetInformation\",\n    value: function clearOffsetInformation(endpoint) {\n      endpoint.alterRowOffset = void 0;\n      endpoint.alterColumnOffset = void 0;\n    }\n    /**\n     * Extend the row ranges for the provided endpoint.\n     *\n     * @private\n     * @param {object} endpoint The endpoint object.\n     * @param {number} placeOfAlteration Index of the row where the alteration takes place.\n     * @param {number} previousPosition Previous endpoint result position.\n     * @param {number} offset Offset generated by the alteration.\n     */\n\n  }, {\n    key: \"extendEndpointRanges\",\n    value: function extendEndpointRanges(endpoint, placeOfAlteration, previousPosition, offset) {\n      arrayEach(endpoint.ranges, function (range) {\n        // is a range, not a single row\n        if (range[1]) {\n          if (placeOfAlteration >= range[0] && placeOfAlteration <= range[1]) {\n            if (previousPosition > range[1]) {\n              range[1] += offset;\n            } else if (previousPosition < range[0]) {\n              range[0] -= offset;\n            }\n          } else if (previousPosition >= range[0] && previousPosition <= range[1]) {\n            range[1] -= offset;\n\n            if (placeOfAlteration <= range[0]) {\n              range[0] += 1;\n              range[1] += 1;\n            }\n          }\n        }\n      });\n    }\n    /**\n     * Recreate the physical ranges for the provided endpoint. Used (for example) when a row gets moved and extends an existing range.\n     *\n     * @private\n     * @param {object} endpoint An endpoint object.\n     */\n\n  }, {\n    key: \"recreatePhysicalRanges\",\n    value: function recreatePhysicalRanges(endpoint) {\n      var _this3 = this;\n\n      var ranges = endpoint.ranges;\n      var newRanges = [];\n      var allIndexes = [];\n      arrayEach(ranges, function (range) {\n        var newRange = [];\n\n        if (range[1]) {\n          for (var i = range[0]; i <= range[1]; i++) {\n            newRange.push(_this3.hot.toPhysicalRow(i));\n          }\n        } else {\n          newRange.push(_this3.hot.toPhysicalRow(range[0]));\n        }\n\n        allIndexes.push(newRange);\n      });\n      arrayEach(allIndexes, function (range) {\n        var newRange = [];\n        arrayEach(range, function (coord, index) {\n          if (index === 0) {\n            newRange.push(coord);\n          } else if (range[index] !== range[index - 1] + 1) {\n            newRange.push(range[index - 1]);\n            newRanges.push(newRange);\n            newRange = [];\n            newRange.push(coord);\n          }\n\n          if (index === range.length - 1) {\n            newRange.push(coord);\n            newRanges.push(newRange);\n          }\n        });\n      });\n      endpoint.ranges = newRanges;\n    }\n    /**\n     * Shifts the endpoint coordinates by the defined offset.\n     *\n     * @private\n     * @param {object} endpoint Endpoint object.\n     * @param {number} offsetStartIndex Index of the performed change (if the change is located after the endpoint, nothing about the endpoint has to be changed.\n     */\n\n  }, {\n    key: \"shiftEndpointCoordinates\",\n    value: function shiftEndpointCoordinates(endpoint, offsetStartIndex) {\n      if (endpoint.alterRowOffset && endpoint.alterRowOffset !== 0) {\n        endpoint.destinationRow += endpoint.alterRowOffset || 0;\n        arrayEach(endpoint.ranges, function (element) {\n          arrayEach(element, function (subElement, j) {\n            if (subElement >= offsetStartIndex) {\n              element[j] += endpoint.alterRowOffset || 0;\n            }\n          });\n        });\n      } else if (endpoint.alterColumnOffset && endpoint.alterColumnOffset !== 0) {\n        endpoint.destinationColumn += endpoint.alterColumnOffset || 0;\n        endpoint.sourceColumn += endpoint.alterColumnOffset || 0;\n      }\n    }\n    /**\n     * Resets (removes) the endpoints from the table.\n     *\n     * @param {Array} [endpoints] Array containing the endpoints.\n     * @param {boolean} [useOffset=true] Use the cell offset value.\n     */\n\n  }, {\n    key: \"resetAllEndpoints\",\n    value: function resetAllEndpoints() {\n      var _this4 = this;\n\n      var endpoints = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getAllEndpoints();\n      var useOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var anyEndpointOutOfRange = endpoints.some(function (endpoint) {\n        var alterRowOffset = endpoint.alterRowOffset || 0;\n        var alterColOffset = endpoint.alterColumnOffset || 0;\n\n        if (endpoint.destinationRow + alterRowOffset >= _this4.hot.countRows() || endpoint.destinationColumn + alterColOffset >= _this4.hot.countCols()) {\n          return true;\n        }\n\n        return false;\n      });\n\n      if (anyEndpointOutOfRange) {\n        return;\n      }\n\n      this.cellsToSetCache = [];\n      arrayEach(endpoints, function (endpoint) {\n        _this4.resetEndpointValue(endpoint, useOffset);\n      });\n      this.hot.setDataAtCell(this.cellsToSetCache, 'ColumnSummary.reset');\n      this.cellsToSetCache = [];\n    }\n    /**\n     * Calculate and refresh all defined endpoints.\n     */\n\n  }, {\n    key: \"refreshAllEndpoints\",\n    value: function refreshAllEndpoints() {\n      var _this5 = this;\n\n      this.cellsToSetCache = [];\n      arrayEach(this.getAllEndpoints(), function (value) {\n        _this5.currentEndpoint = value;\n\n        _this5.plugin.calculate(value);\n\n        _this5.setEndpointValue(value, 'init');\n      });\n      this.currentEndpoint = null;\n      this.hot.setDataAtCell(this.cellsToSetCache, 'ColumnSummary.reset');\n      this.cellsToSetCache = [];\n    }\n    /**\n     * Calculate and refresh endpoints only in the changed columns.\n     *\n     * @param {Array} changes Array of changes from the `afterChange` hook.\n     */\n\n  }, {\n    key: \"refreshChangedEndpoints\",\n    value: function refreshChangedEndpoints(changes) {\n      var _this6 = this;\n\n      var needToRefresh = [];\n      this.cellsToSetCache = [];\n      arrayEach(changes, function (value, key, changesObj) {\n        // if nothing changed, dont update anything\n        if (\"\".concat(value[2] || '') === \"\".concat(value[3])) {\n          return;\n        }\n\n        arrayEach(_this6.getAllEndpoints(), function (endpoint, j) {\n          if (_this6.hot.propToCol(changesObj[key][1]) === endpoint.sourceColumn && needToRefresh.indexOf(j) === -1) {\n            needToRefresh.push(j);\n          }\n        });\n      });\n      arrayEach(needToRefresh, function (value) {\n        _this6.refreshEndpoint(_this6.getEndpoint(value));\n      });\n      this.hot.setDataAtCell(this.cellsToSetCache, 'ColumnSummary.reset');\n      this.cellsToSetCache = [];\n    }\n    /**\n     * Calculate and refresh a single endpoint.\n     *\n     * @param {object} endpoint Contains the endpoint information.\n     */\n\n  }, {\n    key: \"refreshEndpoint\",\n    value: function refreshEndpoint(endpoint) {\n      this.currentEndpoint = endpoint;\n      this.plugin.calculate(endpoint);\n      this.setEndpointValue(endpoint);\n      this.currentEndpoint = null;\n    }\n    /**\n     * Reset the endpoint value.\n     *\n     * @param {object} endpoint Contains the endpoint information.\n     * @param {boolean} [useOffset=true] Use the cell offset value.\n     */\n\n  }, {\n    key: \"resetEndpointValue\",\n    value: function resetEndpointValue(endpoint) {\n      var useOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var alterRowOffset = endpoint.alterRowOffset || 0;\n      var alterColOffset = endpoint.alterColumnOffset || 0;\n      var _ref = [this.hot.toVisualRow(endpoint.destinationRow), this.hot.toVisualColumn(endpoint.destinationColumn)],\n          visualRowIndex = _ref[0],\n          visualColumnIndex = _ref[1];\n\n      if (visualColumnIndex !== null && visualRowIndex !== null) {\n        // Clear the meta on the \"old\" indexes\n        var cellMeta = this.hot.getCellMeta(visualRowIndex, visualColumnIndex);\n        cellMeta.readOnly = false;\n        cellMeta.className = '';\n      }\n\n      this.cellsToSetCache.push([this.hot.toVisualRow(endpoint.destinationRow + (useOffset ? alterRowOffset : 0)), this.hot.toVisualColumn(endpoint.destinationColumn + (useOffset ? alterColOffset : 0)), '']);\n    }\n    /**\n     * Set the endpoint value.\n     *\n     * @param {object} endpoint Contains the endpoint information.\n     * @param {string} [source] Source of the call information.\n     * @param {boolean} [render=false] `true` if it needs to render the table afterwards.\n     */\n\n  }, {\n    key: \"setEndpointValue\",\n    value: function setEndpointValue(endpoint, source) {\n      var render = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      // We'll need the reversed offset values, because cellMeta will be shifted AGAIN afterwards.\n      var reverseRowOffset = -1 * endpoint.alterRowOffset || 0;\n      var reverseColOffset = -1 * endpoint.alterColumnOffset || 0;\n      var visualEndpointRowIndex = this.hot.toVisualRow(endpoint.destinationRow);\n\n      if (endpoint.destinationRow >= this.hot.countRows() || endpoint.destinationColumn >= this.hot.countCols()) {\n        this.throwOutOfBoundsWarning();\n        return;\n      }\n\n      var destinationVisualRow = this.hot.toVisualRow(endpoint.destinationRow + reverseRowOffset);\n\n      if (destinationVisualRow !== null) {\n        var cellMeta = this.hot.getCellMeta(destinationVisualRow, endpoint.destinationColumn + reverseColOffset);\n\n        if (source === 'init' || cellMeta.readOnly !== endpoint.readOnly) {\n          cellMeta.readOnly = endpoint.readOnly;\n          cellMeta.className = 'columnSummaryResult';\n        }\n      }\n\n      if (endpoint.roundFloat && !isNaN(endpoint.result)) {\n        endpoint.result = endpoint.result.toFixed(endpoint.roundFloat);\n      }\n\n      if (render) {\n        this.hot.setDataAtCell(visualEndpointRowIndex, endpoint.destinationColumn, endpoint.result, 'ColumnSummary.set');\n      } else {\n        this.cellsToSetCache.push([visualEndpointRowIndex, endpoint.destinationColumn, endpoint.result]);\n      }\n\n      endpoint.alterRowOffset = void 0;\n      endpoint.alterColumnOffset = void 0;\n    }\n    /**\n     * Throw an error for the calculation range being out of boundaries.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"throwOutOfBoundsWarning\",\n    value: function throwOutOfBoundsWarning() {\n      warn('One of the Column Summary plugins\\' destination points you provided is beyond the table boundaries!');\n    }\n  }]);\n\n  return Endpoints;\n}();\n\nexport default Endpoints;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport { addClass, closest, isChildOf, hasClass, offset, outerWidth, outerHeight } from \"../../helpers/dom/element.mjs\";\nimport { deepClone, deepExtend, isObject } from \"../../helpers/object.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { CellCoords, CellRange } from \"../../3rdparty/walkontable/src/index.mjs\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport CommentEditor from \"./commentEditor.mjs\";\nimport { checkSelectionConsistency, markLabelAsSelected } from \"../contextMenu/utils.mjs\";\nimport DisplaySwitch from \"./displaySwitch.mjs\";\nimport * as C from \"../../i18n/constants.mjs\";\nexport var PLUGIN_KEY = 'comments';\nexport var PLUGIN_PRIORITY = 60;\nvar privatePool = new WeakMap();\nvar META_COMMENT = 'comment';\nvar META_COMMENT_VALUE = 'value';\nvar META_STYLE = 'style';\nvar META_READONLY = 'readOnly';\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin Comments\n * @class Comments\n *\n * @description\n * This plugin allows setting and managing cell comments by either an option in the context menu or with the use of\n * the API.\n *\n * To enable the plugin, you'll need to set the comments property of the config object to `true`:\n * ```js\n * comments: true\n * ```\n *\n * or an object with extra predefined plugin config:\n *\n * ```js\n * comments: {\n *   displayDelay: 1000,\n *   readOnly: true,\n *   style: {\n *     width: 300,\n *     height: 100\n *   }\n * }\n * ```\n *\n * To add comments at the table initialization, define the `comment` property in the `cell` config array as in an example below.\n *\n * @example\n *\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *   data: getData(),\n *   comments: true,\n *   cell: [\n *     {row: 1, col: 1, comment: {value: 'Foo'}},\n *     {row: 2, col: 2, comment: {value: 'Bar'}}\n *   ]\n * });\n *\n * // Access to the Comments plugin instance:\n * const commentsPlugin = hot.getPlugin('comments');\n *\n * // Manage comments programmatically:\n * commentsPlugin.setCommentAtCell(1, 6, 'Comment contents');\n * commentsPlugin.showAtCell(1, 6);\n * commentsPlugin.removeCommentAtCell(1, 6);\n *\n * // You can also set range once and use proper methods:\n * commentsPlugin.setRange({from: {row: 1, col: 6}});\n * commentsPlugin.setComment('Comment contents');\n * commentsPlugin.show();\n * commentsPlugin.removeComment();\n * ```\n */\n\n/* eslint-enable jsdoc/require-description-complete-sentence */\n\nexport var Comments = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(Comments, _BasePlugin);\n\n  var _super = _createSuper(Comments);\n\n  function Comments(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, Comments);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Instance of {@link CommentEditor}.\n     *\n     * @private\n     * @type {CommentEditor}\n     */\n\n    _this.editor = null;\n    /**\n     * Instance of {@link DisplaySwitch}.\n     *\n     * @private\n     * @type {DisplaySwitch}\n     */\n\n    _this.displaySwitch = null;\n    /**\n     * Instance of {@link EventManager}.\n     *\n     * @private\n     * @type {EventManager}\n     */\n\n    _this.eventManager = null;\n    /**\n     * Current cell range, an object with `from` property, with `row` and `col` properties (e.q. `{from: {row: 1, col: 6}}`).\n     *\n     * @type {object}\n     */\n\n    _this.range = {};\n    /**\n     * Prevents showing/hiding editor that reacts on the logic triggered by the \"mouseover\" events.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    _this.preventEditorAutoSwitch = false;\n    privatePool.set(_assertThisInitialized(_this), {\n      tempEditorDimensions: {},\n      cellBelowCursor: null\n    });\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link Comments#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(Comments, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      if (!this.editor) {\n        this.editor = new CommentEditor(this.hot.rootDocument);\n      }\n\n      if (!this.eventManager) {\n        this.eventManager = new EventManager(this);\n      }\n\n      if (!this.displaySwitch) {\n        this.displaySwitch = new DisplaySwitch(this.getDisplayDelaySetting());\n      }\n\n      this.addHook('afterContextMenuDefaultOptions', function (options) {\n        return _this2.addToContextMenu(options);\n      });\n      this.addHook('afterRenderer', function (TD, row, col, prop, value, cellProperties) {\n        return _this2.onAfterRenderer(TD, cellProperties);\n      });\n      this.addHook('afterScrollHorizontally', function () {\n        return _this2.hide();\n      });\n      this.addHook('afterScrollVertically', function () {\n        return _this2.hide();\n      });\n      this.addHook('afterBeginEditing', function () {\n        return _this2.hide();\n      });\n      this.displaySwitch.addLocalHook('hide', function () {\n        return _this2.hide();\n      });\n      this.displaySwitch.addLocalHook('show', function (row, col) {\n        return _this2.showAtCell(row, col);\n      });\n      this.registerListeners();\n\n      _get(_getPrototypeOf(Comments.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(_getPrototypeOf(Comments.prototype), \"updatePlugin\", this).call(this);\n\n      this.displaySwitch.updateDelay(this.getDisplayDelaySetting());\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      _get(_getPrototypeOf(Comments.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Registers all necessary DOM listeners.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"registerListeners\",\n    value: function registerListeners() {\n      var _this3 = this;\n\n      var rootDocument = this.hot.rootDocument;\n      this.eventManager.addEventListener(rootDocument, 'mouseover', function (event) {\n        return _this3.onMouseOver(event);\n      });\n      this.eventManager.addEventListener(rootDocument, 'mousedown', function (event) {\n        return _this3.onMouseDown(event);\n      });\n      this.eventManager.addEventListener(rootDocument, 'mouseup', function () {\n        return _this3.onMouseUp();\n      });\n      this.eventManager.addEventListener(this.editor.getInputElement(), 'blur', function () {\n        return _this3.onEditorBlur();\n      });\n      this.eventManager.addEventListener(this.editor.getInputElement(), 'mousedown', function (event) {\n        return _this3.onEditorMouseDown(event);\n      });\n      this.eventManager.addEventListener(this.editor.getInputElement(), 'mouseup', function (event) {\n        return _this3.onEditorMouseUp(event);\n      });\n    }\n    /**\n     * Sets the current cell range to be able to use general methods like {@link Comments#setComment}, {@link Comments#removeComment}, {@link Comments#show}.\n     *\n     * @param {object} range Object with `from` property, each with `row` and `col` properties.\n     */\n\n  }, {\n    key: \"setRange\",\n    value: function setRange(range) {\n      this.range = range;\n    }\n    /**\n     * Clears the currently selected cell.\n     */\n\n  }, {\n    key: \"clearRange\",\n    value: function clearRange() {\n      this.range = {};\n    }\n    /**\n     * Checks if the event target is a cell containing a comment.\n     *\n     * @private\n     * @param {Event} event DOM event.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"targetIsCellWithComment\",\n    value: function targetIsCellWithComment(event) {\n      var closestCell = closest(event.target, 'TD', 'TBODY');\n      return !!(closestCell && hasClass(closestCell, 'htCommentCell') && closest(closestCell, [this.hot.rootElement]));\n    }\n    /**\n     * Checks if the event target is a comment textarea.\n     *\n     * @private\n     * @param {Event} event DOM event.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"targetIsCommentTextArea\",\n    value: function targetIsCommentTextArea(event) {\n      return this.editor.getInputElement() === event.target;\n    }\n    /**\n     * Sets a comment for a cell according to the previously set range (see {@link Comments#setRange}).\n     *\n     * @param {string} value Comment contents.\n     */\n\n  }, {\n    key: \"setComment\",\n    value: function setComment(value) {\n      if (!this.range.from) {\n        throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n      }\n\n      var editorValue = this.editor.getValue();\n      var comment = '';\n\n      if (value !== null && value !== void 0) {\n        comment = value;\n      } else if (editorValue !== null && editorValue !== void 0) {\n        comment = editorValue;\n      }\n\n      var row = this.range.from.row;\n      var col = this.range.from.col;\n      this.updateCommentMeta(row, col, _defineProperty({}, META_COMMENT_VALUE, comment));\n      this.hot.render();\n    }\n    /**\n     * Sets a comment for a specified cell.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @param {string} value Comment contents.\n     */\n\n  }, {\n    key: \"setCommentAtCell\",\n    value: function setCommentAtCell(row, column, value) {\n      this.setRange({\n        from: new CellCoords(row, column)\n      });\n      this.setComment(value);\n    }\n    /**\n     * Removes a comment from a cell according to previously set range (see {@link Comments#setRange}).\n     *\n     * @param {boolean} [forceRender=true] If set to `true`, the table will be re-rendered at the end of the operation.\n     */\n\n  }, {\n    key: \"removeComment\",\n    value: function removeComment() {\n      var forceRender = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      if (!this.range.from) {\n        throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n      }\n\n      this.hot.setCellMeta(this.range.from.row, this.range.from.col, META_COMMENT);\n\n      if (forceRender) {\n        this.hot.render();\n      }\n\n      this.hide();\n    }\n    /**\n     * Removes a comment from a specified cell.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @param {boolean} [forceRender=true] If `true`, the table will be re-rendered at the end of the operation.\n     */\n\n  }, {\n    key: \"removeCommentAtCell\",\n    value: function removeCommentAtCell(row, column) {\n      var forceRender = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      this.setRange({\n        from: new CellCoords(row, column)\n      });\n      this.removeComment(forceRender);\n    }\n    /**\n     * Gets comment from a cell according to previously set range (see {@link Comments#setRange}).\n     *\n     * @returns {string|undefined} Returns a content of the comment.\n     */\n\n  }, {\n    key: \"getComment\",\n    value: function getComment() {\n      var row = this.range.from.row;\n      var column = this.range.from.col;\n      return this.getCommentMeta(row, column, META_COMMENT_VALUE);\n    }\n    /**\n     * Gets comment from a cell at the provided coordinates.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @returns {string|undefined} Returns a content of the comment.\n     */\n\n  }, {\n    key: \"getCommentAtCell\",\n    value: function getCommentAtCell(row, column) {\n      return this.getCommentMeta(row, column, META_COMMENT_VALUE);\n    }\n    /**\n     * Shows the comment editor accordingly to the previously set range (see {@link Comments#setRange}).\n     *\n     * @returns {boolean} Returns `true` if comment editor was shown.\n     */\n\n  }, {\n    key: \"show\",\n    value: function show() {\n      if (!this.range.from) {\n        throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n      }\n\n      var _this$range$from = this.range.from,\n          row = _this$range$from.row,\n          col = _this$range$from.col;\n\n      if (row < 0 || row > this.hot.countSourceRows() - 1 || col < 0 || col > this.hot.countSourceCols() - 1) {\n        return false;\n      }\n\n      var meta = this.hot.getCellMeta(this.range.from.row, this.range.from.col);\n      this.refreshEditor(true);\n      this.editor.setValue(meta[META_COMMENT] ? meta[META_COMMENT][META_COMMENT_VALUE] : null || '');\n\n      if (this.editor.hidden) {\n        this.editor.show();\n      }\n\n      return true;\n    }\n    /**\n     * Shows comment editor according to cell coordinates.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @returns {boolean} Returns `true` if comment editor was shown.\n     */\n\n  }, {\n    key: \"showAtCell\",\n    value: function showAtCell(row, column) {\n      this.setRange({\n        from: new CellCoords(row, column)\n      });\n      return this.show();\n    }\n    /**\n     * Hides the comment editor.\n     */\n\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.editor.hide();\n    }\n    /**\n     * Refreshes comment editor position and styling.\n     *\n     * @param {boolean} [force=false] If `true` then recalculation will be forced.\n     */\n\n  }, {\n    key: \"refreshEditor\",\n    value: function refreshEditor() {\n      var _renderableRow, _renderableColumn;\n\n      var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!force && (!this.range.from || !this.editor.isVisible())) {\n        return;\n      }\n\n      var _this$hot = this.hot,\n          rowIndexMapper = _this$hot.rowIndexMapper,\n          columnIndexMapper = _this$hot.columnIndexMapper;\n      var _this$range$from2 = this.range.from,\n          visualRow = _this$range$from2.row,\n          visualColumn = _this$range$from2.col;\n      var renderableRow = rowIndexMapper.getRenderableFromVisualIndex(visualRow);\n      var renderableColumn = columnIndexMapper.getRenderableFromVisualIndex(visualColumn); // Used when the requested row is hidden, and the editor needs to be positioned on the previous row's coords.\n\n      var targetingPreviousRow = renderableRow === null;\n\n      if (renderableRow === null) {\n        renderableRow = rowIndexMapper.getRenderableFromVisualIndex(rowIndexMapper.getFirstNotHiddenIndex(visualRow, -1));\n      }\n\n      if (renderableColumn === null) {\n        renderableColumn = columnIndexMapper.getRenderableFromVisualIndex(columnIndexMapper.getFirstNotHiddenIndex(visualColumn, -1));\n      }\n\n      var isBeforeRenderedRows = renderableRow === null;\n      var isBeforeRenderedColumns = renderableColumn === null;\n      renderableRow = (_renderableRow = renderableRow) !== null && _renderableRow !== void 0 ? _renderableRow : 0;\n      renderableColumn = (_renderableColumn = renderableColumn) !== null && _renderableColumn !== void 0 ? _renderableColumn : 0;\n      var _this$hot2 = this.hot,\n          rootWindow = _this$hot2.rootWindow,\n          wt = _this$hot2.view.wt;\n      var wtTable = wt.wtTable,\n          wtOverlays = wt.wtOverlays,\n          wtViewport = wt.wtViewport;\n      var scrollableElement = wtOverlays.scrollableElement;\n      var TD = wtTable.getCell({\n        row: renderableRow,\n        col: renderableColumn\n      });\n      var cellOffset = offset(TD);\n      var lastColWidth = isBeforeRenderedColumns ? 0 : wtTable.getStretchedColumnWidth(renderableColumn);\n      var lastRowHeight = targetingPreviousRow && !isBeforeRenderedRows ? outerHeight(TD) : 0;\n      var cellTopOffset = cellOffset.top;\n      var cellLeftOffset = cellOffset.left;\n\n      if (wtViewport.hasVerticalScroll() && scrollableElement !== rootWindow) {\n        cellTopOffset -= wtOverlays.topOverlay.getScrollPosition();\n      }\n\n      if (wtViewport.hasHorizontalScroll() && scrollableElement !== rootWindow) {\n        cellLeftOffset -= wtOverlays.leftOverlay.getScrollPosition();\n      }\n\n      var x = cellLeftOffset + lastColWidth;\n      var y = cellTopOffset + lastRowHeight;\n      var commentStyle = this.getCommentMeta(visualRow, visualColumn, META_STYLE);\n      var readOnly = this.getCommentMeta(visualRow, visualColumn, META_READONLY);\n\n      if (commentStyle) {\n        this.editor.setSize(commentStyle.width, commentStyle.height);\n      } else {\n        this.editor.resetSize();\n      }\n\n      this.editor.setReadOnlyState(readOnly);\n      this.editor.setPosition(x, y);\n    }\n    /**\n     * Checks if there is a comment for selected range.\n     *\n     * @private\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"checkSelectionCommentsConsistency\",\n    value: function checkSelectionCommentsConsistency() {\n      var selected = this.hot.getSelectedRangeLast();\n\n      if (!selected) {\n        return false;\n      }\n\n      var hasComment = false;\n      var cell = selected.getTopLeftCorner(); // IN EXCEL THERE IS COMMENT ONLY FOR TOP LEFT CELL IN SELECTION\n\n      if (this.getCommentMeta(cell.row, cell.col, META_COMMENT_VALUE)) {\n        hasComment = true;\n      }\n\n      return hasComment;\n    }\n    /**\n     * Sets or update the comment-related cell meta.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @param {object} metaObject Object defining all the comment-related meta information.\n     */\n\n  }, {\n    key: \"updateCommentMeta\",\n    value: function updateCommentMeta(row, column, metaObject) {\n      var oldComment = this.hot.getCellMeta(row, column)[META_COMMENT];\n      var newComment;\n\n      if (oldComment) {\n        newComment = deepClone(oldComment);\n        deepExtend(newComment, metaObject);\n      } else {\n        newComment = metaObject;\n      }\n\n      this.hot.setCellMeta(row, column, META_COMMENT, newComment);\n    }\n    /**\n     * Gets the comment related meta information.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @param {string} property Cell meta property.\n     * @returns {Mixed}\n     */\n\n  }, {\n    key: \"getCommentMeta\",\n    value: function getCommentMeta(row, column, property) {\n      var cellMeta = this.hot.getCellMeta(row, column);\n\n      if (!cellMeta[META_COMMENT]) {\n        return void 0;\n      }\n\n      return cellMeta[META_COMMENT][property];\n    }\n    /**\n     * `mousedown` event callback.\n     *\n     * @private\n     * @param {MouseEvent} event The `mousedown` event.\n     */\n\n  }, {\n    key: \"onMouseDown\",\n    value: function onMouseDown(event) {\n      if (!this.hot.view || !this.hot.view.wt) {\n        return;\n      }\n\n      if (!this.preventEditorAutoSwitch && !this.targetIsCommentTextArea(event)) {\n        var eventCell = closest(event.target, 'TD', 'TBODY');\n        var coordinates = null;\n\n        if (eventCell) {\n          coordinates = this.hot.getCoords(eventCell);\n        }\n\n        if (!eventCell || this.range.from && coordinates && (this.range.from.row !== coordinates.row || this.range.from.col !== coordinates.col)) {\n          this.hide();\n        }\n      }\n    }\n    /**\n     * `mouseover` event callback.\n     *\n     * @private\n     * @param {MouseEvent} event The `mouseover` event.\n     */\n\n  }, {\n    key: \"onMouseOver\",\n    value: function onMouseOver(event) {\n      var priv = privatePool.get(this);\n      var rootDocument = this.hot.rootDocument;\n\n      if (this.preventEditorAutoSwitch || this.editor.isFocused() || hasClass(event.target, 'wtBorder') || priv.cellBelowCursor === event.target || !this.editor) {\n        return;\n      }\n\n      priv.cellBelowCursor = rootDocument.elementFromPoint(event.clientX, event.clientY);\n\n      if (this.targetIsCellWithComment(event)) {\n        var range = new CellRange(this.hot.getCoords(event.target));\n        this.displaySwitch.show(range);\n      } else if (isChildOf(event.target, rootDocument) && !this.targetIsCommentTextArea(event)) {\n        this.displaySwitch.hide();\n      }\n    }\n    /**\n     * `mouseup` event callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMouseUp\",\n    value: function onMouseUp() {\n      this.preventEditorAutoSwitch = false;\n    }\n    /**\n     * The `afterRenderer` hook callback.\n     *\n     * @private\n     * @param {HTMLTableCellElement} TD The rendered `TD` element.\n     * @param {object} cellProperties The rendered cell's property object.\n     */\n\n  }, {\n    key: \"onAfterRenderer\",\n    value: function onAfterRenderer(TD, cellProperties) {\n      if (cellProperties[META_COMMENT] && cellProperties[META_COMMENT][META_COMMENT_VALUE]) {\n        addClass(TD, cellProperties.commentedCellClassName);\n      }\n    }\n    /**\n     * `blur` event callback for the comment editor.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onEditorBlur\",\n    value: function onEditorBlur() {\n      this.setComment();\n    }\n    /**\n     * `mousedown` hook. Along with `onEditorMouseUp` used to simulate the textarea resizing event.\n     *\n     * @private\n     * @param {MouseEvent} event The `mousedown` event.\n     */\n\n  }, {\n    key: \"onEditorMouseDown\",\n    value: function onEditorMouseDown(event) {\n      var priv = privatePool.get(this);\n      priv.tempEditorDimensions = {\n        width: outerWidth(event.target),\n        height: outerHeight(event.target)\n      };\n    }\n    /**\n     * `mouseup` hook. Along with `onEditorMouseDown` used to simulate the textarea resizing event.\n     *\n     * @private\n     * @param {MouseEvent} event The `mouseup` event.\n     */\n\n  }, {\n    key: \"onEditorMouseUp\",\n    value: function onEditorMouseUp(event) {\n      var priv = privatePool.get(this);\n      var currentWidth = outerWidth(event.target);\n      var currentHeight = outerHeight(event.target);\n\n      if (currentWidth !== priv.tempEditorDimensions.width + 1 || currentHeight !== priv.tempEditorDimensions.height + 2) {\n        this.updateCommentMeta(this.range.from.row, this.range.from.col, _defineProperty({}, META_STYLE, {\n          width: currentWidth,\n          height: currentHeight\n        }));\n      }\n    }\n    /**\n     * Context Menu's \"Add comment\" callback. Results in showing the comment editor.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onContextMenuAddComment\",\n    value: function onContextMenuAddComment() {\n      var coords = this.hot.getSelectedRangeLast();\n      this.preventEditorAutoSwitch = true;\n      this.displaySwitch.cancelHiding();\n      this.setRange({\n        from: coords.highlight\n      });\n      this.show();\n      this.hot.deselectCell();\n      this.editor.focus();\n    }\n    /**\n     * Context Menu's \"remove comment\" callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onContextMenuRemoveComment\",\n    value: function onContextMenuRemoveComment() {\n      var _this4 = this;\n\n      var coords = this.hot.getSelectedRangeLast();\n      this.preventEditorAutoSwitch = true;\n      coords.forAll(function (row, column) {\n        if (row >= 0 && column >= 0) {\n          _this4.removeCommentAtCell(row, column, false);\n        }\n      });\n      this.hot.render();\n    }\n    /**\n     * Context Menu's \"make comment read-only\" callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onContextMenuMakeReadOnly\",\n    value: function onContextMenuMakeReadOnly() {\n      var _this5 = this;\n\n      var coords = this.hot.getSelectedRangeLast();\n      this.preventEditorAutoSwitch = true;\n      coords.forAll(function (row, column) {\n        if (row >= 0 && column >= 0) {\n          var currentState = !!_this5.getCommentMeta(row, column, META_READONLY);\n\n          _this5.updateCommentMeta(row, column, _defineProperty({}, META_READONLY, !currentState));\n        }\n      });\n    }\n    /**\n     * Add Comments plugin options to the Context Menu.\n     *\n     * @private\n     * @param {object} defaultOptions The menu options.\n     */\n\n  }, {\n    key: \"addToContextMenu\",\n    value: function addToContextMenu(defaultOptions) {\n      var _this6 = this;\n\n      var isThereAnyCellRendered = function isThereAnyCellRendered() {\n        return _this6.hot.rowIndexMapper.getRenderableIndexesLength() > 0 && _this6.hot.columnIndexMapper.getRenderableIndexesLength() > 0;\n      };\n\n      defaultOptions.items.push({\n        name: '---------'\n      }, {\n        key: 'commentsAddEdit',\n        name: function name() {\n          if (_this6.checkSelectionCommentsConsistency()) {\n            return _this6.hot.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_EDIT_COMMENT);\n          }\n\n          return _this6.hot.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ADD_COMMENT);\n        },\n        callback: function callback() {\n          return _this6.onContextMenuAddComment();\n        },\n        disabled: function disabled() {\n          if (!isThereAnyCellRendered()) {\n            return true;\n          }\n\n          return !(_this6.hot.getSelectedLast() && !_this6.hot.selection.isSelectedByCorner());\n        }\n      }, {\n        key: 'commentsRemove',\n        name: function name() {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_COMMENT);\n        },\n        callback: function callback() {\n          return _this6.onContextMenuRemoveComment();\n        },\n        disabled: function disabled() {\n          if (!isThereAnyCellRendered()) {\n            return true;\n          }\n\n          return !(_this6.hot.getSelectedLast() && !_this6.hot.selection.isSelectedByCorner());\n        }\n      }, {\n        key: 'commentsReadOnly',\n        name: function name() {\n          var _this7 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT);\n          var hasProperty = checkSelectionConsistency(this.getSelectedRangeLast(), function (row, col) {\n            var readOnlyProperty = _this7.getCellMeta(row, col)[META_COMMENT];\n\n            if (readOnlyProperty) {\n              readOnlyProperty = readOnlyProperty[META_READONLY];\n            }\n\n            if (readOnlyProperty) {\n              return true;\n            }\n          });\n\n          if (hasProperty) {\n            label = markLabelAsSelected(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          return _this6.onContextMenuMakeReadOnly();\n        },\n        disabled: function disabled() {\n          if (!isThereAnyCellRendered()) {\n            return true;\n          }\n\n          return !(_this6.hot.getSelectedLast() && !_this6.hot.selection.isSelectedByCorner()) || !_this6.checkSelectionCommentsConsistency();\n        }\n      });\n    }\n    /**\n     * Get `displayDelay` setting of comment plugin.\n     *\n     * @private\n     * @returns {number|undefined}\n     */\n\n  }, {\n    key: \"getDisplayDelaySetting\",\n    value: function getDisplayDelaySetting() {\n      var commentSetting = this.hot.getSettings()[PLUGIN_KEY];\n\n      if (isObject(commentSetting)) {\n        return commentSetting.displayDelay;\n      }\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.editor) {\n        this.editor.destroy();\n      }\n\n      if (this.displaySwitch) {\n        this.displaySwitch.destroy();\n      }\n\n      _get(_getPrototypeOf(Comments.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return Comments;\n}(BasePlugin);", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { addClass } from \"../../helpers/dom/element.mjs\";\n/**\n * Comment editor for the Comments plugin.\n *\n * @private\n * @class CommentEditor\n */\n\nvar CommentEditor = /*#__PURE__*/function () {\n  function CommentEditor(rootDocument) {\n    _classCallCheck(this, CommentEditor);\n\n    this.container = null;\n    this.rootDocument = rootDocument;\n    this.editor = this.createEditor();\n    this.editorStyle = this.editor.style;\n    this.hidden = true;\n    this.hide();\n  }\n  /**\n   * Set position of the comments editor according to the  provided x and y coordinates.\n   *\n   * @param {number} x X position (in pixels).\n   * @param {number} y Y position (in pixels).\n   */\n\n\n  _createClass(CommentEditor, [{\n    key: \"setPosition\",\n    value: function setPosition(x, y) {\n      this.editorStyle.left = \"\".concat(x, \"px\");\n      this.editorStyle.top = \"\".concat(y, \"px\");\n    }\n    /**\n     * Set the editor size according to the provided arguments.\n     *\n     * @param {number} width Width in pixels.\n     * @param {number} height Height in pixels.\n     */\n\n  }, {\n    key: \"setSize\",\n    value: function setSize(width, height) {\n      if (width && height) {\n        var input = this.getInputElement();\n        input.style.width = \"\".concat(width, \"px\");\n        input.style.height = \"\".concat(height, \"px\");\n      }\n    }\n    /**\n     * Reset the editor size to its initial state.\n     */\n\n  }, {\n    key: \"resetSize\",\n    value: function resetSize() {\n      var input = this.getInputElement();\n      input.style.width = '';\n      input.style.height = '';\n    }\n    /**\n     * Set the read-only state for the comments editor.\n     *\n     * @param {boolean} state The new read only state.\n     */\n\n  }, {\n    key: \"setReadOnlyState\",\n    value: function setReadOnlyState(state) {\n      var input = this.getInputElement();\n      input.readOnly = state;\n    }\n    /**\n     * Show the comments editor.\n     */\n\n  }, {\n    key: \"show\",\n    value: function show() {\n      this.editorStyle.display = 'block';\n      this.hidden = false;\n    }\n    /**\n     * Hide the comments editor.\n     */\n\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      if (!this.hidden) {\n        this.editorStyle.display = 'none';\n      }\n\n      this.hidden = true;\n    }\n    /**\n     * Checks if the editor is visible.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isVisible\",\n    value: function isVisible() {\n      return this.editorStyle.display === 'block';\n    }\n    /**\n     * Set the comment value.\n     *\n     * @param {string} [value] The value to use.\n     */\n\n  }, {\n    key: \"setValue\",\n    value: function setValue() {\n      var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      var comment = value || '';\n      this.getInputElement().value = comment;\n    }\n    /**\n     * Get the comment value.\n     *\n     * @returns {string}\n     */\n\n  }, {\n    key: \"getValue\",\n    value: function getValue() {\n      return this.getInputElement().value;\n    }\n    /**\n     * Checks if the comment input element is focused.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isFocused\",\n    value: function isFocused() {\n      return this.rootDocument.activeElement === this.getInputElement();\n    }\n    /**\n     * Focus the comments input element.\n     */\n\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      this.getInputElement().focus();\n    }\n    /**\n     * Create the `textarea` to be used as a comments editor.\n     *\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"createEditor\",\n    value: function createEditor() {\n      var editor = this.rootDocument.createElement('div');\n      var textArea = this.rootDocument.createElement('textarea');\n      editor.style.display = 'none';\n      this.container = this.rootDocument.createElement('div');\n      addClass(this.container, CommentEditor.CLASS_EDITOR_CONTAINER);\n      this.rootDocument.body.appendChild(this.container);\n      addClass(editor, CommentEditor.CLASS_EDITOR);\n      addClass(textArea, CommentEditor.CLASS_INPUT);\n      editor.appendChild(textArea);\n      this.container.appendChild(editor);\n      return editor;\n    }\n    /**\n     * Get the input element.\n     *\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"getInputElement\",\n    value: function getInputElement() {\n      return this.editor.querySelector(\".\".concat(CommentEditor.CLASS_INPUT));\n    }\n    /**\n     * Destroy the comments editor.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var containerParentElement = this.container ? this.container.parentNode : null;\n      this.editor.parentNode.removeChild(this.editor);\n      this.editor = null;\n      this.editorStyle = null;\n\n      if (containerParentElement) {\n        containerParentElement.removeChild(this.container);\n      }\n    }\n  }], [{\n    key: \"CLASS_EDITOR_CONTAINER\",\n    get: function get() {\n      return 'htCommentsContainer';\n    }\n  }, {\n    key: \"CLASS_EDITOR\",\n    get: function get() {\n      return 'htComments';\n    }\n  }, {\n    key: \"CLASS_INPUT\",\n    get: function get() {\n      return 'htCommentTextArea';\n    }\n  }, {\n    key: \"CLASS_CELL\",\n    get: function get() {\n      return 'htCommentCell';\n    }\n  }]);\n\n  return CommentEditor;\n}();\n\nexport default CommentEditor;", "import \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.reverse.js\";\nimport { arrayEach, arrayMap } from \"../../helpers/array.mjs\";\nimport { hasClass } from \"../../helpers/dom/element.mjs\";\nimport { KEY as SEPARATOR } from \"./predefinedItems/separator.mjs\";\n/**\n * @param {CellRange[]} selRanges An array of the cell ranges.\n * @returns {object[]}\n */\n\nexport function normalizeSelection(selRanges) {\n  return arrayMap(selRanges, function (range) {\n    return {\n      start: range.getTopLeftCorner(),\n      end: range.getBottomRightCorner()\n    };\n  });\n}\n/**\n * @param {HTMLElement} cell The HTML cell element to check.\n * @returns {boolean}\n */\n\nexport function isSeparator(cell) {\n  return hasClass(cell, 'htSeparator');\n}\n/**\n * @param {HTMLElement} cell The HTML cell element to check.\n * @returns {boolean}\n */\n\nexport function hasSubMenu(cell) {\n  return hasClass(cell, 'htSubmenu');\n}\n/**\n * @param {HTMLElement} cell The HTML cell element to check.\n * @returns {boolean}\n */\n\nexport function isDisabled(cell) {\n  return hasClass(cell, 'htDisabled');\n}\n/**\n * @param {HTMLElement} cell The HTML cell element to check.\n * @returns {boolean}\n */\n\nexport function isSelectionDisabled(cell) {\n  return hasClass(cell, 'htSelectionDisabled');\n}\n/**\n * @param {Core} hot The Handsontable instance.\n * @returns {Array[]|null}\n */\n\nexport function getValidSelection(hot) {\n  var selected = hot.getSelected();\n\n  if (!selected) {\n    return null;\n  }\n\n  if (selected[0] < 0) {\n    return null;\n  }\n\n  return selected;\n}\n/**\n * @param {string} className The full element class name to process.\n * @param {string} alignment The slignment class name to compare with.\n * @returns {string}\n */\n\nexport function prepareVerticalAlignClass(className, alignment) {\n  if (className.indexOf(alignment) !== -1) {\n    return className;\n  }\n\n  var replacedClassName = className.replace('htTop', '').replace('htMiddle', '').replace('htBottom', '').replace('  ', '');\n  return \"\".concat(replacedClassName, \" \").concat(alignment);\n}\n/**\n * @param {string} className The full element class name to process.\n * @param {string} alignment The slignment class name to compare with.\n * @returns {string}\n */\n\nexport function prepareHorizontalAlignClass(className, alignment) {\n  if (className.indexOf(alignment) !== -1) {\n    return className;\n  }\n\n  var replacedClassName = className.replace('htLeft', '').replace('htCenter', '').replace('htRight', '').replace('htJustify', '').replace('  ', '');\n  return \"\".concat(replacedClassName, \" \").concat(alignment);\n}\n/**\n * @param {CellRange[]} ranges An array of the cell ranges.\n * @param {Function} callback The callback function.\n * @returns {object}\n */\n\nexport function getAlignmentClasses(ranges, callback) {\n  var classes = {};\n  arrayEach(ranges, function (range) {\n    range.forAll(function (row, col) {\n      // Alignment classes should only collected within cell ranges. We skip header coordinates.\n      if (row >= 0 && col >= 0) {\n        if (!classes[row]) {\n          classes[row] = [];\n        }\n\n        classes[row][col] = callback(row, col);\n      }\n    });\n  });\n  return classes;\n}\n/**\n * @param {CellRange[]} ranges An array of the cell ranges.\n * @param {string} type The type of the alignment axis ('horizontal' or 'vertical').\n * @param {string} alignment CSS class name to add.\n * @param {Function} cellDescriptor The function which fetches the cell meta object based in passed coordinates.\n * @param {Function} propertySetter The function which contains logic for added/removed alignment.\n */\n\nexport function align(ranges, type, alignment, cellDescriptor, propertySetter) {\n  arrayEach(ranges, function (range) {\n    range.forAll(function (row, col) {\n      // Alignment classes should only collected within cell ranges. We skip header coordinates.\n      if (row >= 0 && col >= 0) {\n        applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter);\n      }\n    });\n  });\n}\n/**\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {string} type The type of the alignment axis ('horizontal' or 'vertical').\n * @param {string} alignment CSS class name to add.\n * @param {Function} cellDescriptor The function which fetches the cell meta object based in passed coordinates.\n * @param {Function} propertySetter The function which contains logic for added/removed alignment.\n */\n\nfunction applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter) {\n  var cellMeta = cellDescriptor(row, col);\n  var className = alignment;\n\n  if (cellMeta.className) {\n    if (type === 'vertical') {\n      className = prepareVerticalAlignClass(cellMeta.className, alignment);\n    } else {\n      className = prepareHorizontalAlignClass(cellMeta.className, alignment);\n    }\n  }\n\n  propertySetter(row, col, 'className', className);\n}\n/**\n * @param {CellRange[]} ranges An array of the cell ranges.\n * @param {Function} comparator The comparator function.\n * @returns {boolean}\n */\n\n\nexport function checkSelectionConsistency(ranges, comparator) {\n  var result = false;\n\n  if (Array.isArray(ranges)) {\n    arrayEach(ranges, function (range) {\n      range.forAll(function (row, col) {\n        // Selection consistency should only check within cell ranges. We skip header coordinates.\n        if (row >= 0 && col >= 0 && comparator(row, col)) {\n          result = true;\n          return false;\n        }\n      });\n      return result;\n    });\n  }\n\n  return result;\n}\n/**\n * @param {string} label The label text.\n * @returns {string}\n */\n\nexport function markLabelAsSelected(label) {\n  // workaround for https://github.com/handsontable/handsontable/issues/1946\n  return \"<span class=\\\"selected\\\">\".concat(String.fromCharCode(10003), \"</span>\").concat(label);\n}\n/**\n * @param {object} item The object which describes the context menu item properties.\n * @param {Core} instance The Handsontable instance.\n * @returns {boolean}\n */\n\nexport function isItemHidden(item, instance) {\n  return !item.hidden || !(typeof item.hidden === 'function' && item.hidden.call(instance));\n}\n/**\n * @param {object[]} items The context menu items collection.\n * @param {string} separator The string which identifies the context menu separator item.\n * @returns {object[]}\n */\n\nfunction shiftSeparators(items, separator) {\n  var result = items.slice(0);\n\n  for (var i = 0; i < result.length;) {\n    if (result[i].name === separator) {\n      result.shift();\n    } else {\n      break;\n    }\n  }\n\n  return result;\n}\n/**\n * @param {object[]} items The context menu items collection.\n * @param {string} separator The string which identifies the context menu separator item.\n * @returns {object[]}\n */\n\n\nfunction popSeparators(items, separator) {\n  var result = items.slice(0);\n  result.reverse();\n  result = shiftSeparators(result, separator);\n  result.reverse();\n  return result;\n}\n/**\n * Removes duplicated menu separators from the context menu items collection.\n *\n * @param {object[]} items The context menu items collection.\n * @returns {object[]}\n */\n\n\nfunction removeDuplicatedSeparators(items) {\n  var result = [];\n  arrayEach(items, function (value, index) {\n    if (index > 0) {\n      if (result[result.length - 1].name !== value.name) {\n        result.push(value);\n      }\n    } else {\n      result.push(value);\n    }\n  });\n  return result;\n}\n/**\n * Removes menu separators from the context menu items collection.\n *\n * @param {object[]} items The context menu items collection.\n * @param {string} separator The string which identifies the context menu separator item.\n * @returns {object[]}\n */\n\n\nexport function filterSeparators(items) {\n  var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SEPARATOR;\n  var result = items.slice(0);\n  result = shiftSeparators(result, separator);\n  result = popSeparators(result, separator);\n  result = removeDuplicatedSeparators(result);\n  return result;\n}", "export var KEY = '---------';\n/**\n * @returns {object}\n */\n\nexport default function separatorItem() {\n  return {\n    name: KEY\n  };\n}", "import \"core-js/modules/web.timers.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { debounce } from \"../../helpers/function.mjs\";\nimport { mixin } from \"../../helpers/object.mjs\";\nimport localHooks from \"../../mixins/localHooks.mjs\";\nvar DEFAULT_DISPLAY_DELAY = 250;\nvar DEFAULT_HIDE_DELAY = 250;\n/**\n * Display switch for the Comments plugin. Manages the time of delayed displaying / hiding comments.\n *\n * @private\n * @class DisplaySwitch\n */\n\nvar DisplaySwitch = /*#__PURE__*/function () {\n  function DisplaySwitch(displayDelay) {\n    _classCallCheck(this, DisplaySwitch);\n\n    /**\n     * Flag to determine if comment can be showed or hidden. State `true` mean that last performed action\n     * was an attempt to show comment element. State `false` mean that it was attempt to hide comment element.\n     *\n     * @type {boolean}\n     */\n    this.wasLastActionShow = true;\n    /**\n     * Show comment after predefined delay. It keeps reference to immutable `debounce` function.\n     *\n     * @type {Function}\n     */\n\n    this.showDebounced = null;\n    /**\n     * Reference to timer, run by `setTimeout`, which is hiding comment.\n     *\n     * @type {number}\n     */\n\n    this.hidingTimer = null;\n    this.updateDelay(displayDelay);\n  }\n  /**\n   * Responsible for hiding comment after proper delay.\n   */\n\n\n  _createClass(DisplaySwitch, [{\n    key: \"hide\",\n    value: function hide() {\n      var _this = this;\n\n      this.wasLastActionShow = false;\n      this.hidingTimer = setTimeout(function () {\n        if (_this.wasLastActionShow === false) {\n          _this.runLocalHooks('hide');\n        }\n      }, DEFAULT_HIDE_DELAY);\n    }\n    /**\n     * Responsible for showing comment after proper delay.\n     *\n     * @param {object} range Coordinates of selected cell.\n     */\n\n  }, {\n    key: \"show\",\n    value: function show(range) {\n      this.wasLastActionShow = true;\n      this.showDebounced(range);\n    }\n    /**\n     * Cancel hiding comment.\n     */\n\n  }, {\n    key: \"cancelHiding\",\n    value: function cancelHiding() {\n      this.wasLastActionShow = true;\n      clearTimeout(this.hidingTimer);\n      this.hidingTimer = null;\n    }\n    /**\n     * Update the switch settings.\n     *\n     * @param {number} displayDelay Delay of showing the comments (in milliseconds).\n     */\n\n  }, {\n    key: \"updateDelay\",\n    value: function updateDelay() {\n      var _this2 = this;\n\n      var displayDelay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_DISPLAY_DELAY;\n      this.showDebounced = debounce(function (range) {\n        if (_this2.wasLastActionShow) {\n          _this2.runLocalHooks('show', range.from.row, range.from.col);\n        }\n      }, displayDelay);\n    }\n    /**\n     * Destroy the switcher.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.clearLocalHooks();\n    }\n  }]);\n\n  return DisplaySwitch;\n}();\n\nmixin(DisplaySwitch, localHooks);\nexport default DisplaySwitch;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nimport { arrayEach } from \"../../helpers/array.mjs\";\nimport CommandExecutor from \"./commandExecutor.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport ItemsFactory from \"./itemsFactory.mjs\";\nimport Menu from \"./menu.mjs\";\nimport { getWindowScrollLeft, getWindowScrollTop, hasClass } from \"../../helpers/dom/element.mjs\";\nimport { ROW_ABOVE, ROW_BELOW, COLUMN_LEFT, COLUMN_RIGHT, REMOVE_ROW, REMOVE_COLUMN, UNDO, REDO, READ_ONLY, ALIGNMENT, SEPARATOR } from \"./predefinedItems.mjs\";\nexport var PLUGIN_KEY = 'contextMenu';\nexport var PLUGIN_PRIORITY = 70;\nHooks.getSingleton().register('afterContextMenuDefaultOptions');\nHooks.getSingleton().register('beforeContextMenuShow');\nHooks.getSingleton().register('afterContextMenuShow');\nHooks.getSingleton().register('afterContextMenuHide');\nHooks.getSingleton().register('afterContextMenuExecute');\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @class ContextMenu\n * @description\n * This plugin creates the Handsontable Context Menu. It allows to create a new row or column at any place in the\n * grid among [other features](@/guides/accessories-and-menus/context-menu.md#context-menu-with-specific-options).\n * Possible values:\n * * `true` (to enable default options),\n * * `false` (to disable completely)\n * * `{ uiContainer: containerDomElement }` (to declare a container for all of the Context Menu's dom elements to be placed in).\n *\n * or array of any available strings:\n * * `'row_above'`\n * * `'row_below'`\n * * `'col_left'`\n * * `'col_right'`\n * * `'remove_row'`\n * * `'remove_col'`\n * * `'undo'`\n * * `'redo'`\n * * `'make_read_only'`\n * * `'alignment'`\n * * `'---------'` (menu item separator)\n * * `'borders'` (with {@link Options#customBorders} turned on)\n * * `'commentsAddEdit'` (with {@link Options#comments} turned on)\n * * `'commentsRemove'` (with {@link Options#comments} turned on).\n *\n * See [the context menu demo](@/guides/accessories-and-menus/context-menu.md) for examples.\n *\n * @example\n * ```js\n * // as a boolean\n * contextMenu: true\n * // as a array\n * contextMenu: ['row_above', 'row_below', '---------', 'undo', 'redo']\n * ```\n *\n * @plugin ContextMenu\n */\n\n/* eslint-enable jsdoc/require-description-complete-sentence */\n\nexport var ContextMenu = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(ContextMenu, _BasePlugin);\n\n  var _super = _createSuper(ContextMenu);\n\n  function ContextMenu(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, ContextMenu);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Instance of {@link EventManager}.\n     *\n     * @private\n     * @type {EventManager}\n     */\n\n    _this.eventManager = new EventManager(_assertThisInitialized(_this));\n    /**\n     * Instance of {@link CommandExecutor}.\n     *\n     * @private\n     * @type {CommandExecutor}\n     */\n\n    _this.commandExecutor = new CommandExecutor(_this.hot);\n    /**\n     * Instance of {@link ItemsFactory}.\n     *\n     * @private\n     * @type {ItemsFactory}\n     */\n\n    _this.itemsFactory = null;\n    /**\n     * Instance of {@link Menu}.\n     *\n     * @private\n     * @type {Menu}\n     */\n\n    _this.menu = null;\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ContextMenu#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(ContextMenu, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      var settings = this.hot.getSettings()[PLUGIN_KEY];\n\n      if (typeof settings.callback === 'function') {\n        this.commandExecutor.setCommonCallback(settings.callback);\n      }\n\n      this.menu = new Menu(this.hot, {\n        className: 'htContextMenu',\n        keepInViewport: true,\n        container: settings.uiContainer || this.hot.rootDocument.body\n      });\n      this.menu.addLocalHook('beforeOpen', function () {\n        return _this2.onMenuBeforeOpen();\n      });\n      this.menu.addLocalHook('afterOpen', function () {\n        return _this2.onMenuAfterOpen();\n      });\n      this.menu.addLocalHook('afterClose', function () {\n        return _this2.onMenuAfterClose();\n      });\n      this.menu.addLocalHook('executeCommand', function () {\n        var _this2$executeCommand;\n\n        for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {\n          params[_key] = arguments[_key];\n        }\n\n        return (_this2$executeCommand = _this2.executeCommand).call.apply(_this2$executeCommand, [_this2].concat(params));\n      });\n      this.addHook('afterOnCellContextMenu', function (event) {\n        return _this2.onAfterOnCellContextMenu(event);\n      });\n\n      _get(_getPrototypeOf(ContextMenu.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(_getPrototypeOf(ContextMenu.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.close();\n\n      if (this.menu) {\n        this.menu.destroy();\n        this.menu = null;\n      }\n\n      _get(_getPrototypeOf(ContextMenu.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Opens menu and re-position it based on the passed coordinates.\n     *\n     * @param {Event} event The mouse event object.\n     */\n\n  }, {\n    key: \"open\",\n    value: function open(event) {\n      if (!this.menu) {\n        return;\n      }\n\n      this.prepareMenuItems();\n      this.menu.open();\n\n      if (!this.menu.isOpened()) {\n        return;\n      }\n\n      var offsetTop = 0;\n      var offsetLeft = 0;\n\n      if (this.hot.rootDocument !== this.menu.container.ownerDocument) {\n        var frameElement = this.hot.rootWindow.frameElement;\n\n        var _frameElement$getBoun = frameElement.getBoundingClientRect(),\n            top = _frameElement$getBoun.top,\n            left = _frameElement$getBoun.left;\n\n        offsetTop = top - getWindowScrollTop(event.view);\n        offsetLeft = left - getWindowScrollLeft(event.view);\n      } else {\n        offsetTop = -1 * getWindowScrollTop(this.menu.hotMenu.rootWindow);\n        offsetLeft = -1 * getWindowScrollLeft(this.menu.hotMenu.rootWindow);\n      }\n\n      this.menu.setPosition({\n        top: parseInt(event.pageY, 10) + offsetTop,\n        left: parseInt(event.pageX, 10) + offsetLeft\n      });\n    }\n    /**\n     * Closes the menu.\n     */\n\n  }, {\n    key: \"close\",\n    value: function close() {\n      if (!this.menu) {\n        return;\n      }\n\n      this.menu.close();\n      this.itemsFactory = null;\n    }\n    /**\n     * Execute context menu command.\n     *\n     * You can execute all predefined commands:\n     *  * `'row_above'` - Insert row above\n     *  * `'row_below'` - Insert row below\n     *  * `'col_left'` - Insert column left\n     *  * `'col_right'` - Insert column right\n     *  * `'clear_column'` - Clear selected column\n     *  * `'remove_row'` - Remove row\n     *  * `'remove_col'` - Remove column\n     *  * `'undo'` - Undo last action\n     *  * `'redo'` - Redo last action\n     *  * `'make_read_only'` - Make cell read only\n     *  * `'alignment:left'` - Alignment to the left\n     *  * `'alignment:top'` - Alignment to the top\n     *  * `'alignment:right'` - Alignment to the right\n     *  * `'alignment:bottom'` - Alignment to the bottom\n     *  * `'alignment:middle'` - Alignment to the middle\n     *  * `'alignment:center'` - Alignment to the center (justify).\n     *\n     * Or you can execute command registered in settings where `key` is your command name.\n     *\n     * @param {string} commandName The command name to be executed.\n     * @param {*} params Additional paramteres passed to command executor module.\n     */\n\n  }, {\n    key: \"executeCommand\",\n    value: function executeCommand(commandName) {\n      var _this$commandExecutor;\n\n      if (this.itemsFactory === null) {\n        this.prepareMenuItems();\n      }\n\n      for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        params[_key2 - 1] = arguments[_key2];\n      }\n\n      (_this$commandExecutor = this.commandExecutor).execute.apply(_this$commandExecutor, [commandName].concat(params));\n    }\n    /**\n     * Prepares available contextMenu's items list and registers them in commandExecutor.\n     *\n     * @private\n     * @fires Hooks#afterContextMenuDefaultOptions\n     * @fires Hooks#beforeContextMenuSetItems\n     */\n\n  }, {\n    key: \"prepareMenuItems\",\n    value: function prepareMenuItems() {\n      var _this3 = this;\n\n      this.itemsFactory = new ItemsFactory(this.hot, ContextMenu.DEFAULT_ITEMS);\n      var settings = this.hot.getSettings()[PLUGIN_KEY];\n      var predefinedItems = {\n        items: this.itemsFactory.getItems(settings)\n      };\n      this.hot.runHooks('afterContextMenuDefaultOptions', predefinedItems);\n      this.itemsFactory.setPredefinedItems(predefinedItems.items);\n      var menuItems = this.itemsFactory.getItems(settings);\n      this.hot.runHooks('beforeContextMenuSetItems', menuItems);\n      this.menu.setMenuItems(menuItems); // Register all commands. Predefined and added by user or by plugins\n\n      arrayEach(menuItems, function (command) {\n        return _this3.commandExecutor.registerCommand(command.key, command);\n      });\n    }\n    /**\n     * On contextmenu listener.\n     *\n     * @private\n     * @param {Event} event The mouse event object.\n     */\n\n  }, {\n    key: \"onAfterOnCellContextMenu\",\n    value: function onAfterOnCellContextMenu(event) {\n      var settings = this.hot.getSettings();\n      var showRowHeaders = settings.rowHeaders;\n      var showColHeaders = settings.colHeaders;\n      /**\n       * @private\n       * @param {HTMLElement} element The element to validate.\n       * @returns {boolean}\n       */\n\n      function isValidElement(element) {\n        return element.nodeName === 'TD' || element.parentNode.nodeName === 'TD';\n      }\n\n      var element = event.target;\n      this.close();\n\n      if (hasClass(element, 'handsontableInput')) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (!(showRowHeaders || showColHeaders)) {\n        if (!isValidElement(element) && !(hasClass(element, 'current') && hasClass(element, 'wtBorder'))) {\n          return;\n        }\n      }\n\n      this.open(event);\n    }\n    /**\n     * On menu before open listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMenuBeforeOpen\",\n    value: function onMenuBeforeOpen() {\n      this.hot.runHooks('beforeContextMenuShow', this);\n    }\n    /**\n     * On menu after open listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMenuAfterOpen\",\n    value: function onMenuAfterOpen() {\n      this.hot.runHooks('afterContextMenuShow', this);\n    }\n    /**\n     * On menu after close listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMenuAfterClose\",\n    value: function onMenuAfterClose() {\n      this.hot.listen();\n      this.hot.runHooks('afterContextMenuHide', this);\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.close();\n\n      if (this.menu) {\n        this.menu.destroy();\n      }\n\n      _get(_getPrototypeOf(ContextMenu.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }, {\n    key: \"PLUGIN_DEPS\",\n    get: function get() {\n      return ['plugin:AutoColumnSize'];\n    }\n    /**\n     * Context menu default items order when `contextMenu` options is set as `true`.\n     *\n     * @returns {string[]}\n     */\n\n  }, {\n    key: \"DEFAULT_ITEMS\",\n    get: function get() {\n      return [ROW_ABOVE, ROW_BELOW, SEPARATOR, COLUMN_LEFT, COLUMN_RIGHT, SEPARATOR, REMOVE_ROW, REMOVE_COLUMN, SEPARATOR, UNDO, REDO, SEPARATOR, READ_ONLY, SEPARATOR, ALIGNMENT];\n    }\n  }]);\n\n  return ContextMenu;\n}(BasePlugin);\nContextMenu.SEPARATOR = {\n  name: SEPARATOR\n};", "import \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/es.array.join.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { arrayEach } from \"../../helpers/array.mjs\";\nimport { hasOwnProperty } from \"../../helpers/object.mjs\";\n/**\n * Command executor for ContextMenu.\n *\n * @private\n * @class CommandExecutor\n */\n\nvar CommandExecutor = /*#__PURE__*/function () {\n  function CommandExecutor(hotInstance) {\n    _classCallCheck(this, CommandExecutor);\n\n    this.hot = hotInstance;\n    this.commands = {};\n    this.commonCallback = null;\n  }\n  /**\n   * Register command.\n   *\n   * @param {string} name Command name.\n   * @param {object} commandDescriptor Command descriptor object with properties like `key` (command id),\n   *                                   `callback` (task to execute), `name` (command name), `disabled` (command availability).\n   */\n\n\n  _createClass(CommandExecutor, [{\n    key: \"registerCommand\",\n    value: function registerCommand(name, commandDescriptor) {\n      this.commands[name] = commandDescriptor;\n    }\n    /**\n     * Set common callback which will be trigger on every executed command.\n     *\n     * @param {Function} callback Function which will be fired on every command execute.\n     */\n\n  }, {\n    key: \"setCommonCallback\",\n    value: function setCommonCallback(callback) {\n      this.commonCallback = callback;\n    }\n    /**\n     * Execute command by its name.\n     *\n     * @param {string} commandName Command id.\n     * @param {*} params Arguments passed to command task.\n     */\n\n  }, {\n    key: \"execute\",\n    value: function execute(commandName) {\n      var _this = this;\n\n      for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        params[_key - 1] = arguments[_key];\n      }\n\n      var commandSplit = commandName.split(':');\n      var commandNamePrimary = commandSplit[0];\n      var subCommandName = commandSplit.length === 2 ? commandSplit[1] : null;\n      var command = this.commands[commandNamePrimary];\n\n      if (!command) {\n        throw new Error(\"Menu command '\".concat(commandNamePrimary, \"' not exists.\"));\n      }\n\n      if (subCommandName && command.submenu) {\n        command = findSubCommand(subCommandName, command.submenu.items);\n      }\n\n      if (command.disabled === true) {\n        return;\n      }\n\n      if (typeof command.disabled === 'function' && command.disabled.call(this.hot) === true) {\n        return;\n      }\n\n      if (hasOwnProperty(command, 'submenu')) {\n        return;\n      }\n\n      var callbacks = [];\n\n      if (typeof command.callback === 'function') {\n        callbacks.push(command.callback);\n      }\n\n      if (typeof this.commonCallback === 'function') {\n        callbacks.push(this.commonCallback);\n      }\n\n      params.unshift(commandSplit.join(':'));\n      arrayEach(callbacks, function (callback) {\n        return callback.apply(_this.hot, params);\n      });\n    }\n  }]);\n\n  return CommandExecutor;\n}();\n/**\n * @param {string} subCommandName The subcommand name.\n * @param {string[]} subCommands The collection of the commands.\n * @returns {boolean}\n */\n\n\nfunction findSubCommand(subCommandName, subCommands) {\n  var command;\n  arrayEach(subCommands, function (cmd) {\n    var cmds = cmd.key ? cmd.key.split(':') : null;\n\n    if (Array.isArray(cmds) && cmds[1] === subCommandName) {\n      command = cmd;\n      return false;\n    }\n  });\n  return command;\n}\n\nexport default CommandExecutor;", "import \"core-js/modules/es.array.index-of.js\";\nimport { align, getAlignmentClasses, checkSelectionConsistency, markLabelAsSelected } from \"../utils.mjs\";\nimport { KEY as SEPARATOR } from \"./separator.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nexport var KEY = 'alignment';\n/**\n * @returns {object}\n */\n\nexport default function alignmentItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT);\n    },\n    disabled: function disabled() {\n      if (this.countRows() === 0 || this.countCols() === 0) {\n        return true;\n      }\n\n      return !(this.getSelectedRange() && !this.selection.isSelectedByCorner());\n    },\n    submenu: {\n      items: [{\n        key: \"\".concat(KEY, \":left\"),\n        name: function name() {\n          var _this = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT);\n          var hasClass = checkSelectionConsistency(this.getSelectedRange(), function (row, col) {\n            var className = _this.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htLeft') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = markLabelAsSelected(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          var _this2 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = getAlignmentClasses(selectedRange, function (row, col) {\n            return _this2.getCellMeta(row, col).className;\n          });\n          var type = 'horizontal';\n          var alignment = 'htLeft';\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          align(selectedRange, type, alignment, function (row, col) {\n            return _this2.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this2.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n        disabled: false\n      }, {\n        key: \"\".concat(KEY, \":center\"),\n        name: function name() {\n          var _this3 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER);\n          var hasClass = checkSelectionConsistency(this.getSelectedRange(), function (row, col) {\n            var className = _this3.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htCenter') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = markLabelAsSelected(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          var _this4 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = getAlignmentClasses(selectedRange, function (row, col) {\n            return _this4.getCellMeta(row, col).className;\n          });\n          var type = 'horizontal';\n          var alignment = 'htCenter';\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          align(selectedRange, type, alignment, function (row, col) {\n            return _this4.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this4.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n        disabled: false\n      }, {\n        key: \"\".concat(KEY, \":right\"),\n        name: function name() {\n          var _this5 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT);\n          var hasClass = checkSelectionConsistency(this.getSelectedRange(), function (row, col) {\n            var className = _this5.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htRight') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = markLabelAsSelected(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          var _this6 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = getAlignmentClasses(selectedRange, function (row, col) {\n            return _this6.getCellMeta(row, col).className;\n          });\n          var type = 'horizontal';\n          var alignment = 'htRight';\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          align(selectedRange, type, alignment, function (row, col) {\n            return _this6.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this6.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n        disabled: false\n      }, {\n        key: \"\".concat(KEY, \":justify\"),\n        name: function name() {\n          var _this7 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY);\n          var hasClass = checkSelectionConsistency(this.getSelectedRange(), function (row, col) {\n            var className = _this7.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htJustify') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = markLabelAsSelected(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          var _this8 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = getAlignmentClasses(selectedRange, function (row, col) {\n            return _this8.getCellMeta(row, col).className;\n          });\n          var type = 'horizontal';\n          var alignment = 'htJustify';\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          align(selectedRange, type, alignment, function (row, col) {\n            return _this8.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this8.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n        disabled: false\n      }, {\n        name: SEPARATOR\n      }, {\n        key: \"\".concat(KEY, \":top\"),\n        name: function name() {\n          var _this9 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_TOP);\n          var hasClass = checkSelectionConsistency(this.getSelectedRange(), function (row, col) {\n            var className = _this9.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htTop') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = markLabelAsSelected(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          var _this10 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = getAlignmentClasses(selectedRange, function (row, col) {\n            return _this10.getCellMeta(row, col).className;\n          });\n          var type = 'vertical';\n          var alignment = 'htTop';\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          align(selectedRange, type, alignment, function (row, col) {\n            return _this10.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this10.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n        disabled: false\n      }, {\n        key: \"\".concat(KEY, \":middle\"),\n        name: function name() {\n          var _this11 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE);\n          var hasClass = checkSelectionConsistency(this.getSelectedRange(), function (row, col) {\n            var className = _this11.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htMiddle') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = markLabelAsSelected(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          var _this12 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = getAlignmentClasses(selectedRange, function (row, col) {\n            return _this12.getCellMeta(row, col).className;\n          });\n          var type = 'vertical';\n          var alignment = 'htMiddle';\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          align(selectedRange, type, alignment, function (row, col) {\n            return _this12.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this12.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n        disabled: false\n      }, {\n        key: \"\".concat(KEY, \":bottom\"),\n        name: function name() {\n          var _this13 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM);\n          var hasClass = checkSelectionConsistency(this.getSelectedRange(), function (row, col) {\n            var className = _this13.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htBottom') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = markLabelAsSelected(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          var _this14 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = getAlignmentClasses(selectedRange, function (row, col) {\n            return _this14.getCellMeta(row, col).className;\n          });\n          var type = 'vertical';\n          var alignment = 'htBottom';\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          align(selectedRange, type, alignment, function (row, col) {\n            return _this14.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this14.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n        disabled: false\n      }]\n    }\n  };\n}", "import { getValidSelection } from \"../utils.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nexport var KEY = 'clear_column';\n/**\n * @returns {object}\n */\n\nexport default function clearColumnItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_CLEAR_COLUMN);\n    },\n    callback: function callback(key, selection) {\n      var startColumn = selection[0].start.col;\n      var endColumn = selection[0].end.col;\n\n      if (this.countRows()) {\n        this.populateFromArray(0, startColumn, [[null]], Math.max(selection[0].start.row, selection[0].end.row), endColumn, 'ContextMenu.clearColumn');\n      }\n    },\n    disabled: function disabled() {\n      var selected = getValidSelection(this);\n\n      if (!selected) {\n        return true;\n      }\n\n      return !this.selection.isSelectedByColumnHeader();\n    }\n  };\n}", "import { getValidSelection } from \"../utils.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nexport var KEY = 'col_left';\n/**\n * @returns {object}\n */\n\nexport default function columnLeftItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_INSERT_LEFT);\n    },\n    callback: function callback(key, normalizedSelection) {\n      var isSelectedByCorner = this.selection.isSelectedByCorner();\n      var columnLeft = 0;\n\n      if (!isSelectedByCorner) {\n        var latestSelection = normalizedSelection[Math.max(normalizedSelection.length - 1, 0)];\n        columnLeft = latestSelection.start.col;\n      }\n\n      this.alter('insert_col', columnLeft, 1, 'ContextMenu.columnLeft');\n\n      if (isSelectedByCorner) {\n        this.selectAll();\n      }\n    },\n    disabled: function disabled() {\n      if (!this.isColumnModificationAllowed()) {\n        return true;\n      }\n\n      var selected = getValidSelection(this);\n\n      if (!selected) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        var totalColumns = this.countCols(); // Enable \"Insert column left\" only when there is at least one column.\n\n        return totalColumns === 0;\n      }\n\n      return this.selection.isSelectedByRowHeader() || this.countCols() >= this.getSettings().maxCols;\n    },\n    hidden: function hidden() {\n      return !this.getSettings().allowInsertColumn;\n    }\n  };\n}", "import { getValidSelection } from \"../utils.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { isDefined } from \"../../../helpers/mixed.mjs\";\nexport var KEY = 'col_right';\n/**\n * @returns {object}\n */\n\nexport default function columnRightItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_INSERT_RIGHT);\n    },\n    callback: function callback(key, normalizedSelection) {\n      var isSelectedByCorner = this.selection.isSelectedByCorner();\n      var columnRight = 0;\n\n      if (isSelectedByCorner) {\n        columnRight = this.countCols();\n      } else {\n        var _latestSelection$end;\n\n        var latestSelection = normalizedSelection[Math.max(normalizedSelection.length - 1, 0)];\n        var selectedColumn = latestSelection === null || latestSelection === void 0 ? void 0 : (_latestSelection$end = latestSelection.end) === null || _latestSelection$end === void 0 ? void 0 : _latestSelection$end.col; // If there is no selection we have clicked on the corner and there is no data.\n\n        columnRight = isDefined(selectedColumn) ? selectedColumn + 1 : 0;\n      }\n\n      this.alter('insert_col', columnRight, 1, 'ContextMenu.columnRight');\n\n      if (isSelectedByCorner) {\n        this.selectAll();\n      }\n    },\n    disabled: function disabled() {\n      if (!this.isColumnModificationAllowed()) {\n        return true;\n      }\n\n      var selected = getValidSelection(this);\n\n      if (!selected) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        // Enable \"Insert column right\" always when the menu is triggered by corner click.\n        return false;\n      }\n\n      return this.selection.isSelectedByRowHeader() || this.countCols() >= this.getSettings().maxCols;\n    },\n    hidden: function hidden() {\n      return !this.getSettings().allowInsertColumn;\n    }\n  };\n}", "import { checkSelectionConsistency, markLabelAsSelected } from \"../utils.mjs\";\nimport { arrayEach } from \"../../../helpers/array.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nexport var KEY = 'make_read_only';\n/**\n * @returns {object}\n */\n\nexport default function readOnlyItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      var _this = this;\n\n      var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY);\n      var atLeastOneReadOnly = checkSelectionConsistency(this.getSelectedRange(), function (row, col) {\n        return _this.getCellMeta(row, col).readOnly;\n      });\n\n      if (atLeastOneReadOnly) {\n        label = markLabelAsSelected(label);\n      }\n\n      return label;\n    },\n    callback: function callback() {\n      var _this2 = this;\n\n      var ranges = this.getSelectedRange();\n      var atLeastOneReadOnly = checkSelectionConsistency(ranges, function (row, col) {\n        return _this2.getCellMeta(row, col).readOnly;\n      });\n      arrayEach(ranges, function (range) {\n        range.forAll(function (row, col) {\n          if (row >= 0 && col >= 0) {\n            _this2.setCellMeta(row, col, 'readOnly', !atLeastOneReadOnly);\n          }\n        });\n      });\n      this.render();\n    },\n    disabled: function disabled() {\n      if (this.selection.isSelectedByCorner()) {\n        return true;\n      }\n\n      if (this.countRows() === 0 || this.countCols() === 0) {\n        return true;\n      }\n\n      if (!this.getSelectedRange() || this.getSelectedRange().length === 0) {\n        return true;\n      }\n\n      return false;\n    }\n  };\n}", "import * as C from \"../../../i18n/constants.mjs\";\nexport var KEY = 'redo';\n/**\n * @returns {object}\n */\n\nexport default function redoItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REDO);\n    },\n    callback: function callback() {\n      this.redo();\n    },\n    hidden: function hidden() {\n      var undoRedo = this.getPlugin('undoRedo');\n      return !undoRedo || !undoRedo.isEnabled();\n    },\n    disabled: function disabled() {\n      return !this.getPlugin('undoRedo').isRedoAvailable();\n    }\n  };\n}", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { getValidSelection } from \"../utils.mjs\";\nimport { transformSelectionToColumnDistance } from \"../../../selection/utils.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nexport var KEY = 'remove_col';\n/**\n * @returns {object}\n */\n\nexport default function removeColumnItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      var selection = this.getSelected();\n      var pluralForm = 0;\n\n      if (selection) {\n        if (selection.length > 1) {\n          pluralForm = 1;\n        } else {\n          var _selection$ = _slicedToArray(selection[0], 4),\n              fromColumn = _selection$[1],\n              toColumn = _selection$[3];\n\n          if (fromColumn - toColumn !== 0) {\n            pluralForm = 1;\n          }\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_COLUMN, pluralForm);\n    },\n    callback: function callback() {\n      this.alter('remove_col', transformSelectionToColumnDistance(this.getSelected()), null, 'ContextMenu.removeColumn');\n    },\n    disabled: function disabled() {\n      if (!this.isColumnModificationAllowed()) {\n        return true;\n      }\n\n      var selected = getValidSelection(this);\n\n      if (!selected) {\n        return true;\n      }\n\n      var totalColumns = this.countCols();\n\n      if (this.selection.isSelectedByCorner()) {\n        // Enable \"Remove column\" only when there is at least one column.\n        return totalColumns === 0;\n      }\n\n      return this.selection.isSelectedByRowHeader() || totalColumns === 0;\n    },\n    hidden: function hidden() {\n      return !this.getSettings().allowRemoveColumn;\n    }\n  };\n}", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { getValidSelection } from \"../utils.mjs\";\nimport { transformSelectionToRowDistance } from \"../../../selection/utils.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nexport var KEY = 'remove_row';\n/**\n * @returns {object}\n */\n\nexport default function removeRowItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      var selection = this.getSelected();\n      var pluralForm = 0;\n\n      if (selection) {\n        if (selection.length > 1) {\n          pluralForm = 1;\n        } else {\n          var _selection$ = _slicedToArray(selection[0], 3),\n              fromRow = _selection$[0],\n              toRow = _selection$[2];\n\n          if (fromRow - toRow !== 0) {\n            pluralForm = 1;\n          }\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_ROW, pluralForm);\n    },\n    callback: function callback() {\n      // TODO: Please keep in mind that below `1` may be improper. The table's way of work, before change `f1747b3912ea3b21fe423fd102ca94c87db81379` was restored.\n      // There is still problem when removing more than one row.\n      this.alter('remove_row', transformSelectionToRowDistance(this.getSelected()), 1, 'ContextMenu.removeRow');\n    },\n    disabled: function disabled() {\n      var selected = getValidSelection(this);\n\n      if (!selected) {\n        return true;\n      }\n\n      var totalRows = this.countRows();\n\n      if (this.selection.isSelectedByCorner()) {\n        // Enable \"Remove row\" only when there is at least one row.\n        return totalRows === 0;\n      }\n\n      return this.selection.isSelectedByColumnHeader() || totalRows === 0;\n    },\n    hidden: function hidden() {\n      return !this.getSettings().allowRemoveRow;\n    }\n  };\n}", "import { getValidSelection } from \"../utils.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nexport var KEY = 'row_above';\n/**\n * @returns {object}\n */\n\nexport default function rowAboveItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ROW_ABOVE);\n    },\n    callback: function callback(key, normalizedSelection) {\n      var isSelectedByCorner = this.selection.isSelectedByCorner();\n      var rowAbove = 0;\n\n      if (!isSelectedByCorner) {\n        var latestSelection = normalizedSelection[Math.max(normalizedSelection.length - 1, 0)];\n        rowAbove = latestSelection.start.row;\n      }\n\n      this.alter('insert_row', rowAbove, 1, 'ContextMenu.rowAbove');\n\n      if (isSelectedByCorner) {\n        this.selectAll();\n      }\n    },\n    disabled: function disabled() {\n      var selected = getValidSelection(this);\n\n      if (!selected) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        var totalRows = this.countRows(); // Enable \"Insert row above\" only when there is at least one row.\n\n        return totalRows === 0;\n      }\n\n      return this.selection.isSelectedByColumnHeader() || this.countRows() >= this.getSettings().maxRows;\n    },\n    hidden: function hidden() {\n      return !this.getSettings().allowInsertRow;\n    }\n  };\n}", "import { getValidSelection } from \"../utils.mjs\";\nimport { isDefined } from \"../../../helpers/mixed.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nexport var KEY = 'row_below';\n/**\n * @returns {object}\n */\n\nexport default function rowBelowItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ROW_BELOW);\n    },\n    callback: function callback(key, normalizedSelection) {\n      var isSelectedByCorner = this.selection.isSelectedByCorner();\n      var rowBelow = 0;\n\n      if (isSelectedByCorner) {\n        rowBelow = this.countRows();\n      } else {\n        var _latestSelection$end;\n\n        var latestSelection = normalizedSelection[Math.max(normalizedSelection.length - 1, 0)];\n        var selectedRow = latestSelection === null || latestSelection === void 0 ? void 0 : (_latestSelection$end = latestSelection.end) === null || _latestSelection$end === void 0 ? void 0 : _latestSelection$end.row; // If there is no selection we have clicked on the corner and there is no data.\n\n        rowBelow = isDefined(selectedRow) ? selectedRow + 1 : 0;\n      }\n\n      this.alter('insert_row', rowBelow, 1, 'ContextMenu.rowBelow');\n\n      if (isSelectedByCorner) {\n        this.selectAll();\n      }\n    },\n    disabled: function disabled() {\n      var selected = getValidSelection(this);\n\n      if (!selected) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        // Enable \"Insert row below\" always when the menu is triggered by corner click.\n        return false;\n      }\n\n      return this.selection.isSelectedByColumnHeader() || this.countRows() >= this.getSettings().maxRows;\n    },\n    hidden: function hidden() {\n      return !this.getSettings().allowInsertRow;\n    }\n  };\n}", "import { CONTEXTMENU_ITEMS_NO_ITEMS } from \"../../../i18n/constants.mjs\";\nexport var KEY = 'no_items';\n/**\n * @returns {object}\n */\n\nexport default function noItemsItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_NO_ITEMS);\n    },\n    disabled: true,\n    isCommand: false\n  };\n}", "import * as C from \"../../../i18n/constants.mjs\";\nexport var KEY = 'undo';\n/**\n * @returns {object}\n */\n\nexport default function undoItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNDO);\n    },\n    callback: function callback() {\n      this.undo();\n    },\n    hidden: function hidden() {\n      var undoRedo = this.getPlugin('undoRedo');\n      return !undoRedo || !undoRedo.isEnabled();\n    },\n    disabled: function disabled() {\n      return !this.getPlugin('undoRedo').isUndoAvailable();\n    }\n  };\n}", "var _predefinedItems2;\n\nimport \"core-js/modules/es.array.index-of.js\";\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { objectEach } from \"../../helpers/object.mjs\";\nimport alignmentItem, { KEY as ALIGNMENT } from \"./predefinedItems/alignment.mjs\";\nimport clearColumnItem, { KEY as CLEAR_COLUMN } from \"./predefinedItems/clearColumn.mjs\";\nimport columnLeftItem, { KEY as COLUMN_LEFT } from \"./predefinedItems/columnLeft.mjs\";\nimport columnRightItem, { KEY as COLUMN_RIGHT } from \"./predefinedItems/columnRight.mjs\";\nimport readOnlyItem, { KEY as READ_ONLY } from \"./predefinedItems/readOnly.mjs\";\nimport redoItem, { KEY as REDO } from \"./predefinedItems/redo.mjs\";\nimport removeColumnItem, { KEY as REMOVE_COLUMN } from \"./predefinedItems/removeColumn.mjs\";\nimport removeRowItem, { KEY as REMOVE_ROW } from \"./predefinedItems/removeRow.mjs\";\nimport rowAboveItem, { KEY as ROW_ABOVE } from \"./predefinedItems/rowAbove.mjs\";\nimport rowBelowItem, { KEY as ROW_BELOW } from \"./predefinedItems/rowBelow.mjs\";\nimport separatorItem, { KEY as SEPARATOR } from \"./predefinedItems/separator.mjs\";\nimport noItemsItem, { KEY as NO_ITEMS } from \"./predefinedItems/noItems.mjs\";\nimport undoItem, { KEY as UNDO } from \"./predefinedItems/undo.mjs\";\nexport { KEY as ALIGNMENT } from \"./predefinedItems/alignment.mjs\";\nexport { KEY as CLEAR_COLUMN } from \"./predefinedItems/clearColumn.mjs\";\nexport { KEY as COLUMN_LEFT } from \"./predefinedItems/columnLeft.mjs\";\nexport { KEY as COLUMN_RIGHT } from \"./predefinedItems/columnRight.mjs\";\nexport { KEY as READ_ONLY } from \"./predefinedItems/readOnly.mjs\";\nexport { KEY as REDO } from \"./predefinedItems/redo.mjs\";\nexport { KEY as REMOVE_COLUMN } from \"./predefinedItems/removeColumn.mjs\";\nexport { KEY as REMOVE_ROW } from \"./predefinedItems/removeRow.mjs\";\nexport { KEY as ROW_ABOVE } from \"./predefinedItems/rowAbove.mjs\";\nexport { KEY as ROW_BELOW } from \"./predefinedItems/rowBelow.mjs\";\nexport { KEY as SEPARATOR } from \"./predefinedItems/separator.mjs\";\nexport { KEY as NO_ITEMS } from \"./predefinedItems/noItems.mjs\";\nexport { KEY as UNDO } from \"./predefinedItems/undo.mjs\";\nexport var ITEMS = [ROW_ABOVE, ROW_BELOW, COLUMN_LEFT, COLUMN_RIGHT, CLEAR_COLUMN, REMOVE_ROW, REMOVE_COLUMN, UNDO, REDO, READ_ONLY, ALIGNMENT, SEPARATOR, NO_ITEMS];\n\nvar _predefinedItems = (_predefinedItems2 = {}, _defineProperty(_predefinedItems2, SEPARATOR, separatorItem), _defineProperty(_predefinedItems2, NO_ITEMS, noItemsItem), _defineProperty(_predefinedItems2, ROW_ABOVE, rowAboveItem), _defineProperty(_predefinedItems2, ROW_BELOW, rowBelowItem), _defineProperty(_predefinedItems2, COLUMN_LEFT, columnLeftItem), _defineProperty(_predefinedItems2, COLUMN_RIGHT, columnRightItem), _defineProperty(_predefinedItems2, CLEAR_COLUMN, clearColumnItem), _defineProperty(_predefinedItems2, REMOVE_ROW, removeRowItem), _defineProperty(_predefinedItems2, REMOVE_COLUMN, removeColumnItem), _defineProperty(_predefinedItems2, UNDO, undoItem), _defineProperty(_predefinedItems2, REDO, redoItem), _defineProperty(_predefinedItems2, READ_ONLY, readOnlyItem), _defineProperty(_predefinedItems2, ALIGNMENT, alignmentItem), _predefinedItems2);\n/**\n * Gets new object with all predefined menu items.\n *\n * @returns {object}\n */\n\n\nexport function predefinedItems() {\n  var items = {};\n  objectEach(_predefinedItems, function (itemFactory, key) {\n    items[key] = itemFactory();\n  });\n  return items;\n}\n/**\n * Add new predefined menu item to the collection.\n *\n * @param {string} key Menu command id.\n * @param {object} item Object command descriptor.\n */\n\nexport function addItem(key, item) {\n  if (ITEMS.indexOf(key) === -1) {\n    _predefinedItems[key] = item;\n  }\n}", "import \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.index-of.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { objectEach, isObject, extend } from \"../../helpers/object.mjs\";\nimport { arrayEach } from \"../../helpers/array.mjs\";\nimport { SEPARATOR, ITEMS, predefinedItems } from \"./predefinedItems.mjs\";\n/**\n * Predefined items class factory for menu items.\n *\n * @private\n * @class ItemsFactory\n */\n\nvar ItemsFactory = /*#__PURE__*/function () {\n  function ItemsFactory(hotInstance) {\n    var orderPattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n    _classCallCheck(this, ItemsFactory);\n\n    this.hot = hotInstance;\n    this.predefinedItems = predefinedItems();\n    this.defaultOrderPattern = orderPattern;\n  }\n  /**\n   * Set predefined items.\n   *\n   * @param {Array} predefinedItemsCollection Array of predefined items.\n   */\n\n\n  _createClass(ItemsFactory, [{\n    key: \"setPredefinedItems\",\n    value: function setPredefinedItems(predefinedItemsCollection) {\n      var _this = this;\n\n      var items = {};\n      this.defaultOrderPattern.length = 0;\n      objectEach(predefinedItemsCollection, function (value, key) {\n        var menuItemKey = '';\n\n        if (value.name === SEPARATOR) {\n          items[SEPARATOR] = value;\n          menuItemKey = SEPARATOR; // Menu item added as a property to array\n        } else if (isNaN(parseInt(key, 10))) {\n          value.key = value.key === void 0 ? key : value.key;\n          items[key] = value;\n          menuItemKey = value.key;\n        } else {\n          items[value.key] = value;\n          menuItemKey = value.key;\n        }\n\n        _this.defaultOrderPattern.push(menuItemKey);\n      });\n      this.predefinedItems = items;\n    }\n    /**\n     * Get all menu items based on pattern.\n     *\n     * @param {Array|object|boolean} pattern Pattern which you can define by displaying menu items order. If `true` default\n     *                                       pattern will be used.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getItems\",\n    value: function getItems() {\n      var pattern = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      return _getItems(pattern, this.defaultOrderPattern, this.predefinedItems);\n    }\n  }]);\n\n  return ItemsFactory;\n}();\n/**\n * @param {object[]} itemsPattern The user defined menu items collection.\n * @param {object[]} defaultPattern The menu default items collection.\n * @param {object} items Additional options.\n * @returns {object[]} Returns parsed and merged menu items collection ready to render.\n */\n\n\nfunction _getItems() {\n  var itemsPattern = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n  var defaultPattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n  var items = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var result = [];\n  var pattern = itemsPattern;\n\n  if (pattern && pattern.items) {\n    pattern = pattern.items;\n  } else if (!Array.isArray(pattern)) {\n    pattern = defaultPattern;\n  }\n\n  if (isObject(pattern)) {\n    objectEach(pattern, function (value, key) {\n      var item = items[typeof value === 'string' ? value : key];\n\n      if (!item) {\n        item = value;\n      }\n\n      if (isObject(value)) {\n        extend(item, value);\n      } else if (typeof item === 'string') {\n        item = {\n          name: item\n        };\n      }\n\n      if (item.key === void 0) {\n        item.key = key;\n      }\n\n      result.push(item);\n    });\n  } else {\n    arrayEach(pattern, function (name, key) {\n      var item = items[name]; // Item deleted from settings `allowInsertRow: false` etc.\n\n      if (!item && ITEMS.indexOf(name) >= 0) {\n        return;\n      }\n\n      if (!item) {\n        item = {\n          name: name,\n          key: \"\".concat(key)\n        };\n      }\n\n      if (isObject(name)) {\n        extend(item, name);\n      }\n\n      if (item.key === void 0) {\n        item.key = key;\n      }\n\n      result.push(item);\n    });\n  }\n\n  return result;\n}\n\nexport default ItemsFactory;", "import \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.constructor.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.array.concat.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport Cursor from \"./cursor.mjs\";\nimport { SEPARATOR, NO_ITEMS, predefinedItems } from \"./predefinedItems.mjs\";\nimport { filterSeparators, hasSubMenu, isDisabled, isItemHidden, isSeparator, isSelectionDisabled, normalizeSelection } from \"./utils.mjs\";\nimport Core from \"../../core.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { arrayEach, arrayFilter, arrayReduce } from \"../../helpers/array.mjs\";\nimport { isWindowsOS, isMobileBrowser, isIpadOS } from \"../../helpers/browser.mjs\";\nimport { addClass, empty, fastInnerHTML, getScrollbarWidth, isChildOf, isInput, removeClass, getParentWindow, hasClass } from \"../../helpers/dom/element.mjs\";\nimport { stopImmediatePropagation, isRightClick } from \"../../helpers/dom/event.mjs\";\nimport { debounce, isFunction } from \"../../helpers/function.mjs\";\nimport { isUndefined, isDefined } from \"../../helpers/mixed.mjs\";\nimport { mixin, hasOwnProperty } from \"../../helpers/object.mjs\";\nimport { KEY_CODES } from \"../../helpers/unicode.mjs\";\nimport localHooks from \"../../mixins/localHooks.mjs\";\nvar MIN_WIDTH = 215;\n/**\n * @private\n * @class Menu\n */\n\nvar Menu = /*#__PURE__*/function () {\n  function Menu(hotInstance, options) {\n    _classCallCheck(this, Menu);\n\n    this.hot = hotInstance;\n    this.options = options || {\n      parent: null,\n      name: null,\n      className: '',\n      keepInViewport: true,\n      standalone: false,\n      minWidth: MIN_WIDTH,\n      container: this.hot.rootDocument.documentElement\n    };\n    this.eventManager = new EventManager(this);\n    this.container = this.createContainer(this.options.name);\n    this.hotMenu = null;\n    this.hotSubMenus = {};\n    this.parentMenu = this.options.parent || null;\n    this.menuItems = null;\n    this.origOutsideClickDeselects = null;\n    this.keyEvent = false;\n    this.offset = {\n      above: 0,\n      below: 0,\n      left: 0,\n      right: 0\n    };\n    this._afterScrollCallback = null;\n    this.registerEvents();\n  }\n  /**\n   * Register event listeners.\n   *\n   * @private\n   */\n\n\n  _createClass(Menu, [{\n    key: \"registerEvents\",\n    value: function registerEvents() {\n      var _this = this;\n\n      var frame = this.hot.rootWindow;\n\n      while (frame) {\n        this.eventManager.addEventListener(frame.document, 'mousedown', function (event) {\n          return _this.onDocumentMouseDown(event);\n        });\n        this.eventManager.addEventListener(frame.document, 'contextmenu', function (event) {\n          return _this.onDocumentContextMenu(event);\n        });\n        frame = getParentWindow(frame);\n      }\n    }\n    /**\n     * Set array of objects which defines menu items.\n     *\n     * @param {Array} menuItems Menu items to display.\n     */\n\n  }, {\n    key: \"setMenuItems\",\n    value: function setMenuItems(menuItems) {\n      this.menuItems = menuItems;\n    }\n    /**\n     * Returns currently selected menu item. Returns `null` if no item was selected.\n     *\n     * @returns {object|null}\n     */\n\n  }, {\n    key: \"getSelectedItem\",\n    value: function getSelectedItem() {\n      return this.hasSelectedItem() ? this.hotMenu.getSourceDataAtRow(this.hotMenu.getSelectedLast()[0]) : null;\n    }\n    /**\n     * Checks if the menu has selected (highlighted) any item from the menu list.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"hasSelectedItem\",\n    value: function hasSelectedItem() {\n      return Array.isArray(this.hotMenu.getSelectedLast());\n    }\n    /**\n     * Set offset menu position for specified area (`above`, `below`, `left` or `right`).\n     *\n     * @param {string} area Specified area name (`above`, `below`, `left` or `right`).\n     * @param {number} offset Offset value.\n     */\n\n  }, {\n    key: \"setOffset\",\n    value: function setOffset(area) {\n      var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n      this.offset[area] = offset;\n    }\n    /**\n     * Check if menu is using as sub-menu.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSubMenu\",\n    value: function isSubMenu() {\n      return this.parentMenu !== null;\n    }\n    /**\n     * Open menu.\n     *\n     * @fires Hooks#beforeContextMenuShow\n     * @fires Hooks#afterContextMenuShow\n     */\n\n  }, {\n    key: \"open\",\n    value: function open() {\n      var _this2 = this;\n\n      this.runLocalHooks('beforeOpen');\n      this.container.removeAttribute('style');\n      this.container.style.display = 'block';\n      var delayedOpenSubMenu = debounce(function (row) {\n        return _this2.openSubMenu(row);\n      }, 300);\n      var minWidthOfMenu = this.options.minWidth || MIN_WIDTH;\n      var noItemsDefined = false;\n      var filteredItems = arrayFilter(this.menuItems, function (item) {\n        if (item.key === NO_ITEMS) {\n          noItemsDefined = true;\n        }\n\n        return isItemHidden(item, _this2.hot);\n      });\n\n      if (filteredItems.length < 1 && !noItemsDefined) {\n        filteredItems.push(predefinedItems()[NO_ITEMS]);\n      } else if (filteredItems.length === 0) {\n        return;\n      }\n\n      filteredItems = filterSeparators(filteredItems, SEPARATOR);\n      var shouldAutoCloseMenu = false;\n      var settings = {\n        data: filteredItems,\n        colHeaders: false,\n        autoColumnSize: true,\n        autoWrapRow: false,\n        modifyColWidth: function modifyColWidth(width) {\n          if (isDefined(width) && width < minWidthOfMenu) {\n            return minWidthOfMenu;\n          }\n\n          return width;\n        },\n        autoRowSize: false,\n        readOnly: true,\n        editor: false,\n        copyPaste: false,\n        maxCols: 1,\n        columns: [{\n          data: 'name',\n          renderer: function renderer(hot, TD, row, col, prop, value) {\n            return _this2.menuItemRenderer(hot, TD, row, col, prop, value);\n          }\n        }],\n        renderAllRows: true,\n        fragmentSelection: false,\n        outsideClickDeselects: false,\n        disableVisualSelection: 'area',\n        beforeKeyDown: function beforeKeyDown(event) {\n          return _this2.onBeforeKeyDown(event);\n        },\n        afterOnCellMouseOver: function afterOnCellMouseOver(event, coords) {\n          if (_this2.isAllSubMenusClosed()) {\n            delayedOpenSubMenu(coords.row);\n          } else {\n            _this2.openSubMenu(coords.row);\n          }\n        },\n        rowHeights: function rowHeights(row) {\n          return filteredItems[row].name === SEPARATOR ? 1 : 23;\n        },\n        afterOnCellContextMenu: function afterOnCellContextMenu(event) {\n          event.preventDefault(); // On the Windows platform, the \"contextmenu\" is triggered after the \"mouseup\" so that's\n          // why the closing menu is here. (#6507#issuecomment-582392301).\n\n          if (isWindowsOS() && shouldAutoCloseMenu && _this2.hasSelectedItem()) {\n            _this2.close(true);\n          }\n        },\n        beforeOnCellMouseUp: function beforeOnCellMouseUp(event) {\n          if (_this2.hasSelectedItem()) {\n            shouldAutoCloseMenu = !_this2.isCommandPassive(_this2.getSelectedItem());\n\n            _this2.executeCommand(event);\n          }\n        },\n        afterOnCellMouseUp: function afterOnCellMouseUp(event) {\n          // If the code runs on the other platform than Windows, the \"mouseup\" is triggered\n          // after the \"contextmenu\". So then \"mouseup\" closes the menu. Otherwise, the closing\n          // menu responsibility is forwarded to \"afterOnCellContextMenu\" callback (#6507#issuecomment-582392301).\n          if ((!isWindowsOS() || !isRightClick(event)) && shouldAutoCloseMenu && _this2.hasSelectedItem()) {\n            // The timeout is necessary only for mobile devices. For desktop, the click event that is fired\n            // right after the mouseup event gets the event element target the same as the mouseup event.\n            // For mobile devices, the click event is triggered with native delay (~300ms), so when the mouseup\n            // event hides the tapped element, the click event grabs the element below. As a result, the filter\n            // by condition menu is closed and immediately open on tapping the \"None\" item.\n            if (isMobileBrowser() || isIpadOS()) {\n              setTimeout(function () {\n                return _this2.close(true);\n              }, 325);\n            } else {\n              _this2.close(true);\n            }\n          }\n        },\n        afterUnlisten: function afterUnlisten() {\n          // Restore menu focus, fix for `this.instance.unlisten();` call in the tableView.js@260 file.\n          // This prevents losing table responsiveness for keyboard events when filter select menu is closed (#6497).\n          if (!_this2.hasSelectedItem() && _this2.isOpened()) {\n            _this2.hotMenu.listen();\n          }\n        }\n      };\n      this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects;\n      this.hot.getSettings().outsideClickDeselects = false;\n      this.hotMenu = new Core(this.container, settings);\n      this.hotMenu.addHook('afterInit', function () {\n        return _this2.onAfterInit();\n      });\n      this.hotMenu.addHook('afterSelection', function () {\n        return _this2.onAfterSelection.apply(_this2, arguments);\n      });\n      this.hotMenu.init();\n      this.hotMenu.listen();\n      this.blockMainTableCallbacks();\n      this.runLocalHooks('afterOpen');\n    }\n    /**\n     * Close menu.\n     *\n     * @param {boolean} [closeParent=false] If `true` try to close parent menu if exists.\n     */\n\n  }, {\n    key: \"close\",\n    value: function close() {\n      var closeParent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!this.isOpened()) {\n        return;\n      }\n\n      if (closeParent && this.parentMenu) {\n        this.parentMenu.close();\n      } else {\n        this.closeAllSubMenus();\n        this.container.style.display = 'none';\n        this.releaseMainTableCallbacks();\n        this.hotMenu.destroy();\n        this.hotMenu = null;\n        this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects;\n        this.runLocalHooks('afterClose');\n\n        if (this.parentMenu) {\n          this.parentMenu.hotMenu.listen();\n        }\n      }\n    }\n    /**\n     * Open sub menu at the provided row index.\n     *\n     * @param {number} row Row index.\n     * @returns {Menu|boolean} Returns created menu or `false` if no one menu was created.\n     */\n\n  }, {\n    key: \"openSubMenu\",\n    value: function openSubMenu(row) {\n      if (!this.hotMenu) {\n        return false;\n      }\n\n      var cell = this.hotMenu.getCell(row, 0);\n      this.closeAllSubMenus();\n\n      if (!cell || !hasSubMenu(cell)) {\n        return false;\n      }\n\n      var dataItem = this.hotMenu.getSourceDataAtRow(row);\n      var subMenu = new Menu(this.hot, {\n        parent: this,\n        name: dataItem.name,\n        className: this.options.className,\n        keepInViewport: true,\n        container: this.options.container\n      });\n      subMenu.setMenuItems(dataItem.submenu.items);\n      subMenu.open();\n      subMenu.setPosition(cell.getBoundingClientRect());\n      this.hotSubMenus[dataItem.key] = subMenu;\n      return subMenu;\n    }\n    /**\n     * Close sub menu at row index.\n     *\n     * @param {number} row Row index.\n     */\n\n  }, {\n    key: \"closeSubMenu\",\n    value: function closeSubMenu(row) {\n      var dataItem = this.hotMenu.getSourceDataAtRow(row);\n      var menus = this.hotSubMenus[dataItem.key];\n\n      if (menus) {\n        menus.destroy();\n        delete this.hotSubMenus[dataItem.key];\n      }\n    }\n    /**\n     * Close all opened sub menus.\n     */\n\n  }, {\n    key: \"closeAllSubMenus\",\n    value: function closeAllSubMenus() {\n      var _this3 = this;\n\n      arrayEach(this.hotMenu.getData(), function (value, row) {\n        return _this3.closeSubMenu(row);\n      });\n    }\n    /**\n     * Checks if all created and opened sub menus are closed.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isAllSubMenusClosed\",\n    value: function isAllSubMenusClosed() {\n      return Object.keys(this.hotSubMenus).length === 0;\n    }\n    /**\n     * Destroy instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var menuContainerParentElement = this.container.parentNode;\n      this.clearLocalHooks();\n      this.close();\n      this.parentMenu = null;\n      this.eventManager.destroy();\n\n      if (menuContainerParentElement) {\n        menuContainerParentElement.removeChild(this.container);\n      }\n    }\n    /**\n     * Checks if menu was opened.\n     *\n     * @returns {boolean} Returns `true` if menu was opened.\n     */\n\n  }, {\n    key: \"isOpened\",\n    value: function isOpened() {\n      return this.hotMenu !== null;\n    }\n    /**\n     * Execute menu command.\n     *\n     * @param {Event} [event] The mouse event object.\n     */\n\n  }, {\n    key: \"executeCommand\",\n    value: function executeCommand(event) {\n      if (!this.isOpened() || !this.hasSelectedItem()) {\n        return;\n      }\n\n      var selectedItem = this.getSelectedItem();\n      this.runLocalHooks('select', selectedItem, event);\n\n      if (this.isCommandPassive(selectedItem)) {\n        return;\n      }\n\n      var selRanges = this.hot.getSelectedRange();\n      var normalizedSelection = selRanges ? normalizeSelection(selRanges) : [];\n      this.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event);\n\n      if (this.isSubMenu()) {\n        this.parentMenu.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event);\n      }\n    }\n    /**\n     * Checks if the passed command is passive or not. The command is passive when it's marked as\n     * disabled, the descriptor object contains `isCommand` property set to `false`, command\n     * is a separator, or the item is recognized as submenu. For passive items the menu is not\n     * closed automatically after the user trigger the command through the UI.\n     *\n     * @param {object} commandDescriptor Selected menu item from the menu data source.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isCommandPassive\",\n    value: function isCommandPassive(commandDescriptor) {\n      var isCommand = commandDescriptor.isCommand,\n          commandName = commandDescriptor.name,\n          disabled = commandDescriptor.disabled,\n          submenu = commandDescriptor.submenu;\n      var isItemDisabled = disabled === true || typeof disabled === 'function' && disabled.call(this.hot) === true;\n      return isCommand === false || commandName === SEPARATOR || isItemDisabled === true || submenu;\n    }\n    /**\n     * Set menu position based on dom event or based on literal object.\n     *\n     * @param {Event|object} coords Event or literal Object with coordinates.\n     */\n\n  }, {\n    key: \"setPosition\",\n    value: function setPosition(coords) {\n      var cursor = new Cursor(coords, this.container.ownerDocument.defaultView);\n\n      if (this.options.keepInViewport) {\n        if (cursor.fitsBelow(this.container)) {\n          this.setPositionBelowCursor(cursor);\n        } else if (cursor.fitsAbove(this.container)) {\n          this.setPositionAboveCursor(cursor);\n        } else {\n          this.setPositionBelowCursor(cursor);\n        }\n\n        if (cursor.fitsOnRight(this.container)) {\n          this.setPositionOnRightOfCursor(cursor);\n        } else {\n          this.setPositionOnLeftOfCursor(cursor);\n        }\n      } else {\n        this.setPositionBelowCursor(cursor);\n        this.setPositionOnRightOfCursor(cursor);\n      }\n    }\n    /**\n     * Set menu position above cursor object.\n     *\n     * @param {Cursor} cursor `Cursor` object.\n     */\n\n  }, {\n    key: \"setPositionAboveCursor\",\n    value: function setPositionAboveCursor(cursor) {\n      var top = this.offset.above + cursor.top - this.container.offsetHeight;\n\n      if (this.isSubMenu()) {\n        top = cursor.top + cursor.cellHeight - this.container.offsetHeight + 3;\n      }\n\n      this.container.style.top = \"\".concat(top, \"px\");\n    }\n    /**\n     * Set menu position below cursor object.\n     *\n     * @param {Cursor} cursor `Cursor` object.\n     */\n\n  }, {\n    key: \"setPositionBelowCursor\",\n    value: function setPositionBelowCursor(cursor) {\n      var top = this.offset.below + cursor.top + 1;\n\n      if (this.isSubMenu()) {\n        top = cursor.top - 1;\n      }\n\n      this.container.style.top = \"\".concat(top, \"px\");\n    }\n    /**\n     * Set menu position on the right of cursor object.\n     *\n     * @param {Cursor} cursor `Cursor` object.\n     */\n\n  }, {\n    key: \"setPositionOnRightOfCursor\",\n    value: function setPositionOnRightOfCursor(cursor) {\n      var left;\n\n      if (this.isSubMenu()) {\n        left = 1 + cursor.left + cursor.cellWidth;\n      } else {\n        left = this.offset.right + 1 + cursor.left;\n      }\n\n      this.container.style.left = \"\".concat(left, \"px\");\n    }\n    /**\n     * Set menu position on the left of cursor object.\n     *\n     * @param {Cursor} cursor `Cursor` object.\n     */\n\n  }, {\n    key: \"setPositionOnLeftOfCursor\",\n    value: function setPositionOnLeftOfCursor(cursor) {\n      var scrollbarWidth = getScrollbarWidth(this.hot.rootDocument);\n      var left = this.offset.left + cursor.left - this.container.offsetWidth + scrollbarWidth + 4;\n      this.container.style.left = \"\".concat(left, \"px\");\n    }\n    /**\n     * Select first cell in opened menu.\n     */\n\n  }, {\n    key: \"selectFirstCell\",\n    value: function selectFirstCell() {\n      var cell = this.hotMenu.getCell(0, 0);\n\n      if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {\n        this.selectNextCell(0, 0);\n      } else {\n        this.hotMenu.selectCell(0, 0);\n      }\n    }\n    /**\n     * Select last cell in opened menu.\n     */\n\n  }, {\n    key: \"selectLastCell\",\n    value: function selectLastCell() {\n      var lastRow = this.hotMenu.countRows() - 1;\n      var cell = this.hotMenu.getCell(lastRow, 0);\n\n      if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {\n        this.selectPrevCell(lastRow, 0);\n      } else {\n        this.hotMenu.selectCell(lastRow, 0);\n      }\n    }\n    /**\n     * Select next cell in opened menu.\n     *\n     * @param {number} row Row index.\n     * @param {number} col Column index.\n     */\n\n  }, {\n    key: \"selectNextCell\",\n    value: function selectNextCell(row, col) {\n      var nextRow = row + 1;\n      var cell = nextRow < this.hotMenu.countRows() ? this.hotMenu.getCell(nextRow, col) : null;\n\n      if (!cell) {\n        return;\n      }\n\n      if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {\n        this.selectNextCell(nextRow, col);\n      } else {\n        this.hotMenu.selectCell(nextRow, col);\n      }\n    }\n    /**\n     * Select previous cell in opened menu.\n     *\n     * @param {number} row Row index.\n     * @param {number} col Column index.\n     */\n\n  }, {\n    key: \"selectPrevCell\",\n    value: function selectPrevCell(row, col) {\n      var prevRow = row - 1;\n      var cell = prevRow >= 0 ? this.hotMenu.getCell(prevRow, col) : null;\n\n      if (!cell) {\n        return;\n      }\n\n      if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {\n        this.selectPrevCell(prevRow, col);\n      } else {\n        this.hotMenu.selectCell(prevRow, col);\n      }\n    }\n    /**\n     * Menu item renderer.\n     *\n     * @private\n     * @param {Core} hot The Handsontable instance.\n     * @param {HTMLCellElement} TD The rendered cell element.\n     * @param {number} row The visual index.\n     * @param {number} col The visual index.\n     * @param {string} prop The column property if used.\n     * @param {string} value The cell value.\n     */\n\n  }, {\n    key: \"menuItemRenderer\",\n    value: function menuItemRenderer(hot, TD, row, col, prop, value) {\n      var _this4 = this;\n\n      var item = hot.getSourceDataAtRow(row);\n      var wrapper = this.hot.rootDocument.createElement('div');\n\n      var isSubMenu = function isSubMenu(itemToTest) {\n        return hasOwnProperty(itemToTest, 'submenu');\n      };\n\n      var itemIsSeparator = function itemIsSeparator(itemToTest) {\n        return new RegExp(SEPARATOR, 'i').test(itemToTest.name);\n      };\n\n      var itemIsDisabled = function itemIsDisabled(itemToTest) {\n        return itemToTest.disabled === true || typeof itemToTest.disabled === 'function' && itemToTest.disabled.call(_this4.hot) === true;\n      };\n\n      var itemIsSelectionDisabled = function itemIsSelectionDisabled(itemToTest) {\n        return itemToTest.disableSelection;\n      };\n\n      var itemValue = value;\n\n      if (typeof itemValue === 'function') {\n        itemValue = itemValue.call(this.hot);\n      }\n\n      empty(TD);\n      addClass(wrapper, 'htItemWrapper');\n      TD.appendChild(wrapper);\n\n      if (itemIsSeparator(item)) {\n        addClass(TD, 'htSeparator');\n      } else if (typeof item.renderer === 'function') {\n        addClass(TD, 'htCustomMenuRenderer');\n        TD.appendChild(item.renderer(hot, wrapper, row, col, prop, itemValue));\n      } else {\n        fastInnerHTML(wrapper, itemValue);\n      }\n\n      if (itemIsDisabled(item)) {\n        addClass(TD, 'htDisabled');\n        this.eventManager.addEventListener(TD, 'mouseenter', function () {\n          return hot.deselectCell();\n        });\n      } else if (itemIsSelectionDisabled(item)) {\n        addClass(TD, 'htSelectionDisabled');\n        this.eventManager.addEventListener(TD, 'mouseenter', function () {\n          return hot.deselectCell();\n        });\n      } else if (isSubMenu(item)) {\n        addClass(TD, 'htSubmenu');\n\n        if (itemIsSelectionDisabled(item)) {\n          this.eventManager.addEventListener(TD, 'mouseenter', function () {\n            return hot.deselectCell();\n          });\n        } else {\n          this.eventManager.addEventListener(TD, 'mouseenter', function () {\n            return hot.selectCell(row, col, void 0, void 0, false, false);\n          });\n        }\n      } else {\n        removeClass(TD, ['htSubmenu', 'htDisabled']);\n\n        if (itemIsSelectionDisabled(item)) {\n          this.eventManager.addEventListener(TD, 'mouseenter', function () {\n            return hot.deselectCell();\n          });\n        } else {\n          this.eventManager.addEventListener(TD, 'mouseenter', function () {\n            return hot.selectCell(row, col, void 0, void 0, false, false);\n          });\n        }\n      }\n    }\n    /**\n     * Create container/wrapper for handsontable.\n     *\n     * @private\n     * @param {string} [name] Class name.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"createContainer\",\n    value: function createContainer() {\n      var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      var doc = this.options.container.ownerDocument;\n      var className = name;\n      var container;\n\n      if (className) {\n        if (isFunction(className)) {\n          className = className.call(this.hot);\n\n          if (className === null || isUndefined(className)) {\n            className = '';\n          } else {\n            className = className.toString();\n          }\n        }\n\n        className = className.replace(/[^A-z0-9]/g, '_');\n        className = \"\".concat(this.options.className, \"Sub_\").concat(className);\n        container = doc.querySelector(\".\".concat(this.options.className, \".\").concat(className));\n      }\n\n      if (!container) {\n        container = doc.createElement('div');\n        addClass(container, \"htMenu \".concat(this.options.className));\n\n        if (className) {\n          addClass(container, className);\n        }\n\n        this.options.container.appendChild(container);\n      }\n\n      return container;\n    }\n    /**\n     * @private\n     */\n\n  }, {\n    key: \"blockMainTableCallbacks\",\n    value: function blockMainTableCallbacks() {\n      this._afterScrollCallback = function () {};\n\n      this.hot.addHook('afterScrollVertically', this._afterScrollCallback);\n      this.hot.addHook('afterScrollHorizontally', this._afterScrollCallback);\n    }\n    /**\n     * @private\n     */\n\n  }, {\n    key: \"releaseMainTableCallbacks\",\n    value: function releaseMainTableCallbacks() {\n      if (this._afterScrollCallback) {\n        this.hot.removeHook('afterScrollVertically', this._afterScrollCallback);\n        this.hot.removeHook('afterScrollHorizontally', this._afterScrollCallback);\n        this._afterScrollCallback = null;\n      }\n    }\n    /**\n     * On before key down listener.\n     *\n     * @private\n     * @param {Event} event The keyaboard event object.\n     */\n\n  }, {\n    key: \"onBeforeKeyDown\",\n    value: function onBeforeKeyDown(event) {\n      // For input elements, prevent event propagation. It allows entering text into an input\n      // element freely - without steeling the key events from the menu module (#6506, #6549).\n      if (isInput(event.target) && this.container.contains(event.target)) {\n        stopImmediatePropagation(event);\n        return;\n      }\n\n      var selection = this.hotMenu.getSelectedLast();\n      var stopEvent = false;\n      this.keyEvent = true;\n\n      switch (event.keyCode) {\n        case KEY_CODES.ESCAPE:\n          this.close();\n          stopEvent = true;\n          break;\n\n        case KEY_CODES.ENTER:\n          if (selection) {\n            if (this.hotMenu.getSourceDataAtRow(selection[0]).submenu) {\n              stopEvent = true;\n            } else {\n              this.executeCommand(event);\n              this.close(true);\n            }\n          }\n\n          break;\n\n        case KEY_CODES.ARROW_DOWN:\n          if (selection) {\n            this.selectNextCell(selection[0], selection[1]);\n          } else {\n            this.selectFirstCell();\n          }\n\n          stopEvent = true;\n          break;\n\n        case KEY_CODES.ARROW_UP:\n          if (selection) {\n            this.selectPrevCell(selection[0], selection[1]);\n          } else {\n            this.selectLastCell();\n          }\n\n          stopEvent = true;\n          break;\n\n        case KEY_CODES.ARROW_RIGHT:\n          if (selection) {\n            var menu = this.openSubMenu(selection[0]);\n\n            if (menu) {\n              menu.selectFirstCell();\n            }\n          }\n\n          stopEvent = true;\n          break;\n\n        case KEY_CODES.ARROW_LEFT:\n          if (selection && this.isSubMenu()) {\n            this.close();\n\n            if (this.parentMenu) {\n              this.parentMenu.hotMenu.listen();\n            }\n\n            stopEvent = true;\n          }\n\n          break;\n\n        default:\n          break;\n      }\n\n      if (stopEvent) {\n        event.preventDefault();\n        stopImmediatePropagation(event);\n      }\n\n      this.keyEvent = false;\n    }\n    /**\n     * On after init listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterInit\",\n    value: function onAfterInit() {\n      var wtTable = this.hotMenu.view.wt.wtTable;\n      var data = this.hotMenu.getSettings().data;\n      var hiderStyle = wtTable.hider.style;\n      var holderStyle = wtTable.holder.style;\n      var currentHiderWidth = parseInt(hiderStyle.width, 10);\n      var realHeight = arrayReduce(data, function (accumulator, value) {\n        return accumulator + (value.name === SEPARATOR ? 1 : 26);\n      }, 0); // Additional 3px to menu's size because of additional border around its `table.htCore`.\n\n      holderStyle.width = \"\".concat(currentHiderWidth + 3, \"px\");\n      holderStyle.height = \"\".concat(realHeight + 3, \"px\");\n      hiderStyle.height = holderStyle.height;\n    }\n    /**\n     * On after selection listener.\n     *\n     * @param {number} r Selection start row index.\n     * @param {number} c Selection start column index.\n     * @param {number} r2 Selection end row index.\n     * @param {number} c2 Selection end column index.\n     * @param {object} preventScrolling Object with `value` property where its value change will be observed.\n     */\n\n  }, {\n    key: \"onAfterSelection\",\n    value: function onAfterSelection(r, c, r2, c2, preventScrolling) {\n      if (this.keyEvent === false) {\n        preventScrolling.value = true;\n      }\n    }\n    /**\n     * Document mouse down listener.\n     *\n     * @private\n     * @param {Event} event The mouse event object.\n     */\n\n  }, {\n    key: \"onDocumentMouseDown\",\n    value: function onDocumentMouseDown(event) {\n      if (!this.isOpened()) {\n        return;\n      } // Close menu when clicked element is not belongs to menu itself\n\n\n      if (this.options.standalone && this.hotMenu && !isChildOf(event.target, this.hotMenu.rootElement)) {\n        this.close(true); // Automatically close menu when clicked element is not belongs to menu or submenu (not necessarily to itself)\n      } else if ((this.isAllSubMenusClosed() || this.isSubMenu()) && !isChildOf(event.target, '.htMenu')) {\n        this.close(true);\n      }\n    }\n    /**\n     * Document's contextmenu listener.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event object.\n     */\n\n  }, {\n    key: \"onDocumentContextMenu\",\n    value: function onDocumentContextMenu(event) {\n      if (!this.isOpened()) {\n        return;\n      }\n\n      if (hasClass(event.target, 'htCore') && isChildOf(event.target, this.hotMenu.rootElement)) {\n        event.preventDefault();\n      }\n    }\n  }]);\n\n  return Menu;\n}();\n\nmixin(Menu, localHooks);\nexport default Menu;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { getWindowScrollLeft, getWindowScrollTop } from \"../../helpers/dom/element.mjs\";\n/**\n * Helper class for checking if element will fit at the desired side of cursor.\n *\n * @private\n * @class Cursor\n */\n\nvar Cursor = /*#__PURE__*/function () {\n  function Cursor(object, rootWindow) {\n    _classCallCheck(this, Cursor);\n\n    var windowScrollTop = getWindowScrollTop(rootWindow);\n    var windowScrollLeft = getWindowScrollLeft(rootWindow);\n    var top;\n    var topRelative;\n    var left;\n    var leftRelative;\n    var cellHeight;\n    var cellWidth;\n    this.rootWindow = rootWindow;\n    this.type = this.getSourceType(object);\n\n    if (this.type === 'literal') {\n      top = parseInt(object.top, 10);\n      left = parseInt(object.left, 10);\n      cellHeight = object.height || 0;\n      cellWidth = object.width || 0;\n      topRelative = top;\n      leftRelative = left;\n      top += windowScrollTop;\n      left += windowScrollLeft;\n    } else if (this.type === 'event') {\n      top = parseInt(object.pageY, 10);\n      left = parseInt(object.pageX, 10);\n      cellHeight = object.target.clientHeight;\n      cellWidth = object.target.clientWidth;\n      topRelative = top - windowScrollTop;\n      leftRelative = left - windowScrollLeft;\n    }\n\n    this.top = top;\n    this.topRelative = topRelative;\n    this.left = left;\n    this.leftRelative = leftRelative;\n    this.scrollTop = windowScrollTop;\n    this.scrollLeft = windowScrollLeft;\n    this.cellHeight = cellHeight;\n    this.cellWidth = cellWidth;\n  }\n  /**\n   * Get source type name.\n   *\n   * @param {*} object Event or Object with coordinates.\n   * @returns {string} Returns one of this values: `'literal'`, `'event'`.\n   */\n\n\n  _createClass(Cursor, [{\n    key: \"getSourceType\",\n    value: function getSourceType(object) {\n      var type = 'literal';\n\n      if (object instanceof Event) {\n        type = 'event';\n      }\n\n      return type;\n    }\n    /**\n     * Checks if element can be placed above the cursor.\n     *\n     * @param {HTMLElement} element Element to check if it's size will fit above the cursor.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"fitsAbove\",\n    value: function fitsAbove(element) {\n      return this.topRelative >= element.offsetHeight;\n    }\n    /**\n     * Checks if element can be placed below the cursor.\n     *\n     * @param {HTMLElement} element Element to check if it's size will fit below the cursor.\n     * @param {number} [viewportHeight] The viewport height.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"fitsBelow\",\n    value: function fitsBelow(element) {\n      var viewportHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.rootWindow.innerHeight;\n      return this.topRelative + element.offsetHeight <= viewportHeight;\n    }\n    /**\n     * Checks if element can be placed on the right of the cursor.\n     *\n     * @param {HTMLElement} element Element to check if it's size will fit on the right of the cursor.\n     * @param {number} [viewportWidth] The viewport width.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"fitsOnRight\",\n    value: function fitsOnRight(element) {\n      var viewportWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.rootWindow.innerWidth;\n      return this.leftRelative + this.cellWidth + element.offsetWidth <= viewportWidth;\n    }\n    /**\n     * Checks if element can be placed on the left on the cursor.\n     *\n     * @param {HTMLElement} element Element to check if it's size will fit on the left of the cursor.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"fitsOnLeft\",\n    value: function fitsOnLeft(element) {\n      return this.leftRelative >= element.offsetWidth;\n    }\n  }]);\n\n  return Cursor;\n}();\n\nexport default Cursor;", "function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nimport { stringify, parse } from \"../../3rdparty/SheetClip/index.mjs\";\nimport { arrayEach } from \"../../helpers/array.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport { sanitize } from \"../../helpers/string.mjs\";\nimport { getSelectionText } from \"../../helpers/dom/element.mjs\";\nimport copyItem from \"./contextMenuItem/copy.mjs\";\nimport cutItem from \"./contextMenuItem/cut.mjs\";\nimport PasteEvent from \"./pasteEvent.mjs\";\nimport { createElement, destroyElement } from \"./focusableElement.mjs\";\nimport { _dataToHTML, htmlToGridSettings } from \"../../utils/parseTable.mjs\";\nHooks.getSingleton().register('afterCopyLimit');\nHooks.getSingleton().register('modifyCopyableRange');\nHooks.getSingleton().register('beforeCut');\nHooks.getSingleton().register('afterCut');\nHooks.getSingleton().register('beforePaste');\nHooks.getSingleton().register('afterPaste');\nHooks.getSingleton().register('beforeCopy');\nHooks.getSingleton().register('afterCopy');\nexport var PLUGIN_KEY = 'copyPaste';\nexport var PLUGIN_PRIORITY = 80;\nvar ROWS_LIMIT = Infinity;\nvar COLUMNS_LIMIT = Infinity;\nvar privatePool = new WeakMap();\nvar META_HEAD = ['<meta name=\"generator\" content=\"Handsontable\"/>', '<style type=\"text/css\">td{white-space:normal}br{mso-data-placement:same-cell}</style>'].join('');\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @description\n * This plugin enables the copy/paste functionality in the Handsontable. The functionality works for API, Context Menu,\n * using keyboard shortcuts and menu bar from the browser.\n * Possible values:\n * * `true` (to enable default options),\n * * `false` (to disable completely).\n *\n * or an object with values:\n * * `'columnsLimit'` (see {@link CopyPaste#columnsLimit})\n * * `'rowsLimit'` (see {@link CopyPaste#rowsLimit})\n * * `'pasteMode'` (see {@link CopyPaste#pasteMode})\n * * `'uiContainer'` (see {@link CopyPaste#uiContainer}).\n *\n * See [the copy/paste demo](@/guides/cell-features/clipboard.md) for examples.\n *\n * @example\n * ```js\n * // Enables the plugin with default values\n * copyPaste: true,\n * // Enables the plugin with custom values\n * copyPaste: {\n *   columnsLimit: 25,\n *   rowsLimit: 50,\n *   pasteMode: 'shift_down',\n *   uiContainer: document.body,\n * },\n * ```\n * @class CopyPaste\n * @plugin CopyPaste\n */\n\n/* eslint-enable jsdoc/require-description-complete-sentence */\n\nexport var CopyPaste = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(CopyPaste, _BasePlugin);\n\n  var _super = _createSuper(CopyPaste);\n\n  function CopyPaste(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, CopyPaste);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Maximum number of columns than can be copied to clipboard using <kbd>CTRL</kbd> + <kbd>C</kbd>.\n     *\n     * @type {number}\n     * @default Infinity\n     */\n\n    _this.columnsLimit = COLUMNS_LIMIT;\n    /**\n     * Ranges of the cells coordinates, which should be used to copy/cut/paste actions.\n     *\n     * @private\n     * @type {Array}\n     */\n\n    _this.copyableRanges = [];\n    /**\n     * Provides focusable element to support IME and copy/paste/cut actions.\n     *\n     * @private\n     * @type {FocusableWrapper}\n     */\n\n    _this.focusableElement = void 0;\n    /**\n     * Defines paste (<kbd>CTRL</kbd> + <kbd>V</kbd>) behavior.\n     * * Default value `\"overwrite\"` will paste clipboard value over current selection.\n     * * When set to `\"shift_down\"`, clipboard data will be pasted in place of current selection, while all selected cells are moved down.\n     * * When set to `\"shift_right\"`, clipboard data will be pasted in place of current selection, while all selected cells are moved right.\n     *\n     * @type {string}\n     * @default 'overwrite'\n     */\n\n    _this.pasteMode = 'overwrite';\n    /**\n     * Maximum number of rows than can be copied to clipboard using <kbd>CTRL</kbd> + <kbd>C</kbd>.\n     *\n     * @type {number}\n     * @default Infinity\n     */\n\n    _this.rowsLimit = ROWS_LIMIT;\n    /**\n     * UI container for the secondary focusable element.\n     *\n     * @type {HTMLElement}\n     */\n\n    _this.uiContainer = _this.hot.rootDocument.body;\n    privatePool.set(_assertThisInitialized(_this), {\n      isTriggeredByCopy: false,\n      isTriggeredByCut: false,\n      isBeginEditing: false,\n      isFragmentSelectionEnabled: false\n    });\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link CopyPaste#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(CopyPaste, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      var _this$hot$getSettings = this.hot.getSettings(),\n          settings = _this$hot$getSettings[PLUGIN_KEY],\n          fragmentSelection = _this$hot$getSettings.fragmentSelection;\n\n      var priv = privatePool.get(this);\n      priv.isFragmentSelectionEnabled = !!fragmentSelection;\n\n      if (_typeof(settings) === 'object') {\n        this.pasteMode = settings.pasteMode || this.pasteMode;\n        this.rowsLimit = isNaN(settings.rowsLimit) ? this.rowsLimit : settings.rowsLimit;\n        this.columnsLimit = isNaN(settings.columnsLimit) ? this.columnsLimit : settings.columnsLimit;\n        this.uiContainer = settings.uiContainer || this.uiContainer;\n      }\n\n      this.addHook('afterContextMenuDefaultOptions', function (options) {\n        return _this2.onAfterContextMenuDefaultOptions(options);\n      });\n      this.addHook('afterOnCellMouseUp', function () {\n        return _this2.onAfterOnCellMouseUp();\n      });\n      this.addHook('afterSelectionEnd', function () {\n        return _this2.onAfterSelectionEnd();\n      });\n      this.addHook('beforeKeyDown', function () {\n        return _this2.onBeforeKeyDown();\n      });\n      this.focusableElement = createElement(this.uiContainer);\n      this.focusableElement.addLocalHook('copy', function (event) {\n        return _this2.onCopy(event);\n      }).addLocalHook('cut', function (event) {\n        return _this2.onCut(event);\n      }).addLocalHook('paste', function (event) {\n        return _this2.onPaste(event);\n      });\n\n      _get(_getPrototypeOf(CopyPaste.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n      this.getOrCreateFocusableElement();\n\n      _get(_getPrototypeOf(CopyPaste.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      if (this.focusableElement) {\n        destroyElement(this.focusableElement);\n      }\n\n      _get(_getPrototypeOf(CopyPaste.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Copies the selected cell into the clipboard.\n     */\n\n  }, {\n    key: \"copy\",\n    value: function copy() {\n      var priv = privatePool.get(this);\n      priv.isTriggeredByCopy = true;\n      this.getOrCreateFocusableElement();\n      this.focusableElement.focus();\n      this.hot.rootDocument.execCommand('copy');\n    }\n    /**\n     * Cuts the selected cell into the clipboard.\n     */\n\n  }, {\n    key: \"cut\",\n    value: function cut() {\n      var priv = privatePool.get(this);\n      priv.isTriggeredByCut = true;\n      this.getOrCreateFocusableElement();\n      this.focusableElement.focus();\n      this.hot.rootDocument.execCommand('cut');\n    }\n    /**\n     * Creates copyable text releated to range objects.\n     *\n     * @param {object[]} ranges Array of objects with properties `startRow`, `endRow`, `startCol` and `endCol`.\n     * @returns {string} Returns string which will be copied into clipboard.\n     */\n\n  }, {\n    key: \"getRangedCopyableData\",\n    value: function getRangedCopyableData(ranges) {\n      var _this3 = this;\n\n      var dataSet = [];\n      var copyableRows = [];\n      var copyableColumns = []; // Count all copyable rows and columns\n\n      arrayEach(ranges, function (range) {\n        rangeEach(range.startRow, range.endRow, function (row) {\n          if (copyableRows.indexOf(row) === -1) {\n            copyableRows.push(row);\n          }\n        });\n        rangeEach(range.startCol, range.endCol, function (column) {\n          if (copyableColumns.indexOf(column) === -1) {\n            copyableColumns.push(column);\n          }\n        });\n      }); // Concat all rows and columns data defined in ranges into one copyable string\n\n      arrayEach(copyableRows, function (row) {\n        var rowSet = [];\n        arrayEach(copyableColumns, function (column) {\n          rowSet.push(_this3.hot.getCopyableData(row, column));\n        });\n        dataSet.push(rowSet);\n      });\n      return stringify(dataSet);\n    }\n    /**\n     * Creates copyable text releated to range objects.\n     *\n     * @param {object[]} ranges Array of objects with properties `startRow`, `startCol`, `endRow` and `endCol`.\n     * @returns {Array[]} Returns array of arrays which will be copied into clipboard.\n     */\n\n  }, {\n    key: \"getRangedData\",\n    value: function getRangedData(ranges) {\n      var _this4 = this;\n\n      var dataSet = [];\n      var copyableRows = [];\n      var copyableColumns = []; // Count all copyable rows and columns\n\n      arrayEach(ranges, function (range) {\n        rangeEach(range.startRow, range.endRow, function (row) {\n          if (copyableRows.indexOf(row) === -1) {\n            copyableRows.push(row);\n          }\n        });\n        rangeEach(range.startCol, range.endCol, function (column) {\n          if (copyableColumns.indexOf(column) === -1) {\n            copyableColumns.push(column);\n          }\n        });\n      }); // Concat all rows and columns data defined in ranges into one copyable string\n\n      arrayEach(copyableRows, function (row) {\n        var rowSet = [];\n        arrayEach(copyableColumns, function (column) {\n          rowSet.push(_this4.hot.getCopyableData(row, column));\n        });\n        dataSet.push(rowSet);\n      });\n      return dataSet;\n    }\n    /**\n     * Simulates the paste action.\n     *\n     * @param {string} pastableText Value as raw string to paste.\n     * @param {string} [pastableHtml=''] Value as HTML to paste.\n     */\n\n  }, {\n    key: \"paste\",\n    value: function paste() {\n      var pastableText = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      var pastableHtml = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : pastableText;\n\n      if (!pastableText && !pastableHtml) {\n        return;\n      }\n\n      var pasteData = new PasteEvent();\n\n      if (pastableText) {\n        pasteData.clipboardData.setData('text/plain', pastableText);\n      }\n\n      if (pastableHtml) {\n        pasteData.clipboardData.setData('text/html', pastableHtml);\n      }\n\n      this.getOrCreateFocusableElement();\n      this.onPaste(pasteData);\n    }\n    /**\n     * Prepares copyable text from the cells selection in the invisible textarea.\n     */\n\n  }, {\n    key: \"setCopyableText\",\n    value: function setCopyableText() {\n      var selRange = this.hot.getSelectedRangeLast();\n\n      if (!selRange) {\n        return;\n      }\n\n      var topLeft = selRange.getTopLeftCorner();\n      var bottomRight = selRange.getBottomRightCorner();\n      var startRow = topLeft.row;\n      var startCol = topLeft.col;\n      var endRow = bottomRight.row;\n      var endCol = bottomRight.col;\n      var finalEndRow = Math.min(endRow, startRow + this.rowsLimit - 1);\n      var finalEndCol = Math.min(endCol, startCol + this.columnsLimit - 1);\n      this.copyableRanges.length = 0;\n      this.copyableRanges.push({\n        startRow: startRow,\n        startCol: startCol,\n        endRow: finalEndRow,\n        endCol: finalEndCol\n      });\n      this.copyableRanges = this.hot.runHooks('modifyCopyableRange', this.copyableRanges);\n\n      if (endRow !== finalEndRow || endCol !== finalEndCol) {\n        this.hot.runHooks('afterCopyLimit', endRow - startRow + 1, endCol - startCol + 1, this.rowsLimit, this.columnsLimit);\n      }\n    }\n    /**\n     * Force focus on editable element.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"getOrCreateFocusableElement\",\n    value: function getOrCreateFocusableElement() {\n      var editor = this.hot.getActiveEditor();\n      var editableElement = editor ? editor.TEXTAREA : void 0;\n\n      if (editableElement) {\n        this.focusableElement.setFocusableElement(editableElement);\n      } else {\n        this.focusableElement.useSecondaryElement();\n      }\n    }\n    /**\n     * Verifies if editor exists and is open.\n     *\n     * @private\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isEditorOpened\",\n    value: function isEditorOpened() {\n      var editor = this.hot.getActiveEditor();\n      return editor && editor.isOpened();\n    }\n    /**\n     * Prepares new values to populate them into datasource.\n     *\n     * @private\n     * @param {Array} inputArray An array of the data to populate.\n     * @param {Array} [selection] The selection which indicates from what position the data will be populated.\n     * @returns {Array} Range coordinates after populate data.\n     */\n\n  }, {\n    key: \"populateValues\",\n    value: function populateValues(inputArray) {\n      var selection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.hot.getSelectedRangeLast();\n\n      if (!inputArray.length) {\n        return;\n      }\n\n      var populatedRowsLength = inputArray.length;\n      var populatedColumnsLength = inputArray[0].length;\n      var newRows = [];\n\n      var _selection$getTopLeft = selection.getTopLeftCorner(),\n          startRow = _selection$getTopLeft.row,\n          startColumn = _selection$getTopLeft.col;\n\n      var _selection$getBottomR = selection.getBottomRightCorner(),\n          endRowFromSelection = _selection$getBottomR.row,\n          endColumnFromSelection = _selection$getBottomR.col;\n\n      var visualRowForPopulatedData = startRow;\n      var visualColumnForPopulatedData = startColumn;\n      var lastVisualRow = startRow;\n      var lastVisualColumn = startColumn; // We try to populate just all copied data or repeat copied data within a selection. Please keep in mind that we\n      // don't know whether populated data is bigger than selection on start as there are some cells for which values\n      // should be not inserted (it's known right after getting cell meta).\n\n      while (newRows.length < populatedRowsLength || visualRowForPopulatedData <= endRowFromSelection) {\n        var _this$hot$getCellMeta = this.hot.getCellMeta(visualRowForPopulatedData, startColumn),\n            skipRowOnPaste = _this$hot$getCellMeta.skipRowOnPaste,\n            visualRow = _this$hot$getCellMeta.visualRow;\n\n        visualRowForPopulatedData = visualRow + 1;\n\n        if (skipRowOnPaste === true) {\n          /* eslint-disable no-continue */\n          continue;\n        }\n\n        lastVisualRow = visualRow;\n        visualColumnForPopulatedData = startColumn;\n        var newRow = [];\n        var insertedRow = newRows.length % populatedRowsLength;\n\n        while (newRow.length < populatedColumnsLength || visualColumnForPopulatedData <= endColumnFromSelection) {\n          var _this$hot$getCellMeta2 = this.hot.getCellMeta(startRow, visualColumnForPopulatedData),\n              skipColumnOnPaste = _this$hot$getCellMeta2.skipColumnOnPaste,\n              visualCol = _this$hot$getCellMeta2.visualCol;\n\n          visualColumnForPopulatedData = visualCol + 1;\n\n          if (skipColumnOnPaste === true) {\n            /* eslint-disable no-continue */\n            continue;\n          }\n\n          lastVisualColumn = visualCol;\n          var insertedColumn = newRow.length % populatedColumnsLength;\n          newRow.push(inputArray[insertedRow][insertedColumn]);\n        }\n\n        newRows.push(newRow);\n      }\n\n      this.hot.populateFromArray(startRow, startColumn, newRows, void 0, void 0, 'CopyPaste.paste', this.pasteMode);\n      return [startRow, startColumn, lastVisualRow, lastVisualColumn];\n    }\n    /**\n     * `copy` event callback on textarea element.\n     *\n     * @param {Event} event ClipboardEvent.\n     * @private\n     */\n\n  }, {\n    key: \"onCopy\",\n    value: function onCopy(event) {\n      var priv = privatePool.get(this);\n\n      if (!this.hot.isListening() && !priv.isTriggeredByCopy || this.isEditorOpened()) {\n        return;\n      }\n\n      this.setCopyableText();\n      priv.isTriggeredByCopy = false;\n      var rangedData = this.getRangedData(this.copyableRanges);\n      var allowCopying = !!this.hot.runHooks('beforeCopy', rangedData, this.copyableRanges);\n\n      if (allowCopying) {\n        var textPlain = stringify(rangedData);\n\n        if (event && event.clipboardData) {\n          var textHTML = _dataToHTML(rangedData, this.hot.rootDocument);\n\n          event.clipboardData.setData('text/plain', textPlain);\n          event.clipboardData.setData('text/html', [META_HEAD, textHTML].join(''));\n        } else if (typeof ClipboardEvent === 'undefined') {\n          this.hot.rootWindow.clipboardData.setData('Text', textPlain);\n        }\n\n        this.hot.runHooks('afterCopy', rangedData, this.copyableRanges);\n      }\n\n      event.preventDefault();\n    }\n    /**\n     * `cut` event callback on textarea element.\n     *\n     * @param {Event} event ClipboardEvent.\n     * @private\n     */\n\n  }, {\n    key: \"onCut\",\n    value: function onCut(event) {\n      var priv = privatePool.get(this);\n\n      if (!this.hot.isListening() && !priv.isTriggeredByCut || this.isEditorOpened()) {\n        return;\n      }\n\n      this.setCopyableText();\n      priv.isTriggeredByCut = false;\n      var rangedData = this.getRangedData(this.copyableRanges);\n      var allowCuttingOut = !!this.hot.runHooks('beforeCut', rangedData, this.copyableRanges);\n\n      if (allowCuttingOut) {\n        var textPlain = stringify(rangedData);\n\n        if (event && event.clipboardData) {\n          var textHTML = _dataToHTML(rangedData, this.hot.rootDocument);\n\n          event.clipboardData.setData('text/plain', textPlain);\n          event.clipboardData.setData('text/html', [META_HEAD, textHTML].join(''));\n        } else if (typeof ClipboardEvent === 'undefined') {\n          this.hot.rootWindow.clipboardData.setData('Text', textPlain);\n        }\n\n        this.hot.emptySelectedCells('CopyPaste.cut');\n        this.hot.runHooks('afterCut', rangedData, this.copyableRanges);\n      }\n\n      event.preventDefault();\n    }\n    /**\n     * `paste` event callback on textarea element.\n     *\n     * @param {Event} event ClipboardEvent or pseudo ClipboardEvent, if paste was called manually.\n     * @private\n     */\n\n  }, {\n    key: \"onPaste\",\n    value: function onPaste(event) {\n      if (!this.hot.isListening() || this.isEditorOpened()) {\n        return;\n      }\n\n      if (event && event.preventDefault) {\n        event.preventDefault();\n      }\n\n      var pastedData;\n\n      if (event && typeof event.clipboardData !== 'undefined') {\n        var textHTML = sanitize(event.clipboardData.getData('text/html'), {\n          ADD_TAGS: ['meta'],\n          ADD_ATTR: ['content'],\n          FORCE_BODY: true\n        });\n\n        if (textHTML && /(<table)|(<TABLE)/g.test(textHTML)) {\n          var parsedConfig = htmlToGridSettings(textHTML, this.hot.rootDocument);\n          pastedData = parsedConfig.data;\n        } else {\n          pastedData = event.clipboardData.getData('text/plain');\n        }\n      } else if (typeof ClipboardEvent === 'undefined' && typeof this.hot.rootWindow.clipboardData !== 'undefined') {\n        pastedData = this.hot.rootWindow.clipboardData.getData('Text');\n      }\n\n      if (typeof pastedData === 'string') {\n        pastedData = parse(pastedData);\n      }\n\n      if (pastedData && pastedData.length === 0) {\n        return;\n      }\n\n      if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {\n        return;\n      }\n\n      var _this$populateValues = this.populateValues(pastedData),\n          _this$populateValues2 = _slicedToArray(_this$populateValues, 4),\n          startRow = _this$populateValues2[0],\n          startColumn = _this$populateValues2[1],\n          endRow = _this$populateValues2[2],\n          endColumn = _this$populateValues2[3];\n\n      this.hot.selectCell(startRow, startColumn, Math.min(this.hot.countRows() - 1, endRow), Math.min(this.hot.countCols() - 1, endColumn));\n      this.hot.runHooks('afterPaste', pastedData, this.copyableRanges);\n    }\n    /**\n     * Add copy and cut options to the Context Menu.\n     *\n     * @private\n     * @param {object} options Contains default added options of the Context Menu.\n     */\n\n  }, {\n    key: \"onAfterContextMenuDefaultOptions\",\n    value: function onAfterContextMenuDefaultOptions(options) {\n      options.items.push({\n        name: '---------'\n      }, copyItem(this), cutItem(this));\n    }\n    /**\n     * Force focus on focusableElement.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterOnCellMouseUp\",\n    value: function onAfterOnCellMouseUp() {\n      // Changing focused element will remove current selection. It's unnecessary in case when we give possibility\n      // for fragment selection\n      if (!this.hot.isListening() || this.isEditorOpened() || this.hot.getSettings().fragmentSelection) {\n        return;\n      }\n\n      this.getOrCreateFocusableElement();\n      this.focusableElement.focus();\n    }\n    /**\n     * Force focus on focusableElement after end of the selection.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterSelectionEnd\",\n    value: function onAfterSelectionEnd() {\n      var _privatePool$get = privatePool.get(this),\n          isFragmentSelectionEnabled = _privatePool$get.isFragmentSelectionEnabled;\n\n      if (this.isEditorOpened()) {\n        return;\n      }\n\n      this.getOrCreateFocusableElement();\n\n      if (isFragmentSelectionEnabled && this.focusableElement.getFocusableElement() !== this.hot.rootDocument.activeElement && getSelectionText()) {\n        return;\n      }\n\n      this.setCopyableText();\n      this.focusableElement.focus();\n    }\n    /**\n     * `beforeKeyDown` listener to force focus of focusableElement.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onBeforeKeyDown\",\n    value: function onBeforeKeyDown() {\n      if (!this.hot.isListening() || this.isEditorOpened()) {\n        return;\n      }\n\n      var activeElement = this.hot.rootDocument.activeElement;\n      var activeEditor = this.hot.getActiveEditor();\n\n      if (!activeEditor || activeElement !== this.focusableElement.getFocusableElement() && activeElement !== activeEditor.select) {\n        return;\n      }\n\n      this.getOrCreateFocusableElement();\n      this.focusableElement.focus();\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.focusableElement) {\n        destroyElement(this.focusableElement);\n        this.focusableElement = null;\n      }\n\n      _get(_getPrototypeOf(CopyPaste.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return CopyPaste;\n}(BasePlugin);", "import * as C from \"../../../i18n/constants.mjs\";\n/**\n * @param {CopyPaste} copyPastePlugin The plugin instance.\n * @returns {object}\n */\n\nexport default function copyItem(copyPastePlugin) {\n  return {\n    key: 'copy',\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_COPY);\n    },\n    callback: function callback() {\n      copyPastePlugin.copy();\n    },\n    disabled: function disabled() {\n      if (this.countRows() === 0 || this.countCols() === 0) {\n        return true;\n      }\n\n      var selected = this.getSelected(); // Disable for no selection or for non-contiquous selection.\n\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n    hidden: false\n  };\n}", "import * as C from \"../../../i18n/constants.mjs\";\n/**\n * @param {CopyPaste} copyPastePlugin The plugin instance.\n * @returns {object}\n */\n\nexport default function cutItem(copyPastePlugin) {\n  return {\n    key: 'cut',\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_CUT);\n    },\n    callback: function callback() {\n      copyPastePlugin.cut();\n    },\n    disabled: function disabled() {\n      if (this.countRows() === 0 || this.countCols() === 0) {\n        return true;\n      }\n\n      var selected = this.getSelected(); // Disable for no selection or for non-contiquous selection.\n\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n    hidden: false\n  };\n}", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/**\n * @private\n */\nvar ClipboardData = /*#__PURE__*/function () {\n  function ClipboardData() {\n    _classCallCheck(this, ClipboardData);\n\n    this.data = {};\n  }\n\n  _createClass(ClipboardData, [{\n    key: \"setData\",\n    value: function setData(type, value) {\n      this.data[type] = value;\n    }\n  }, {\n    key: \"getData\",\n    value: function getData(type) {\n      return this.data[type] || void 0;\n    }\n  }]);\n\n  return ClipboardData;\n}();\n\nexport { ClipboardData as default };", "function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport ClipboardData from \"./clipboardData.mjs\";\n/**\n * @private\n */\n\nvar PasteEvent = /*#__PURE__*/_createClass(function PasteEvent() {\n  _classCallCheck(this, PasteEvent);\n\n  this.clipboardData = new ClipboardData();\n});\n\nexport { PasteEvent as default };", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-set.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport EventManager from \"../../eventManager.mjs\";\nimport localHooks from \"../../mixins/localHooks.mjs\";\nimport { mixin } from \"../../helpers/object.mjs\";\nimport { isMobileBrowser } from \"../../helpers/browser.mjs\";\nimport { selectElementIfAllowed } from \"../../helpers/dom/element.mjs\";\n/**\n * @private\n * @class FocusableWrapper\n */\n\nvar FocusableWrapper = /*#__PURE__*/function () {\n  function FocusableWrapper(container) {\n    _classCallCheck(this, FocusableWrapper);\n\n    this.rootDocument = container.defaultView ? container : container.ownerDocument;\n    /**\n     * The main/operational focusable element.\n     *\n     * @type {HTMLElement}\n     */\n\n    this.mainElement = null;\n    /**\n     * Instance of EventManager.\n     *\n     * @type {EventManager}\n     */\n\n    this.eventManager = new EventManager(this);\n    /**\n     * An object for tracking information about event listeners attached to the focusable element.\n     *\n     * @type {WeakSet}\n     */\n\n    this.listenersCount = new WeakSet();\n    /**\n     * Parent for an focusable element.\n     *\n     * @type {HTMLElement}\n     */\n\n    this.container = container;\n  }\n  /**\n   * Switch to the secondary focusable element. Used when no any main focusable element is provided.\n   */\n\n\n  _createClass(FocusableWrapper, [{\n    key: \"useSecondaryElement\",\n    value: function useSecondaryElement() {\n      var el = createOrGetSecondaryElement(this.container);\n\n      if (!this.listenersCount.has(el)) {\n        this.listenersCount.add(el);\n        forwardEventsToLocalHooks(this.eventManager, el, this);\n      }\n\n      this.mainElement = el;\n    }\n    /**\n     * Switch to the main focusable element.\n     *\n     * @param {HTMLElement} element The DOM element.\n     */\n\n  }, {\n    key: \"setFocusableElement\",\n    value: function setFocusableElement(element) {\n      if (!this.listenersCount.has(element)) {\n        this.listenersCount.add(element);\n        forwardEventsToLocalHooks(this.eventManager, element, this);\n      }\n\n      this.mainElement = element;\n    }\n    /**\n     * Get currently set focusable element.\n     *\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"getFocusableElement\",\n    value: function getFocusableElement() {\n      return this.mainElement;\n    }\n    /**\n     * Set focus to the focusable element.\n     */\n\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      // Add an empty space to texarea. It is necessary for safari to enable \"copy\" command from menu bar.\n      this.mainElement.value = ' ';\n\n      if (!isMobileBrowser()) {\n        selectElementIfAllowed(this.mainElement);\n      }\n    }\n  }]);\n\n  return FocusableWrapper;\n}();\n\nmixin(FocusableWrapper, localHooks);\nvar refCounter = new WeakMap();\n/**\n * Create and return the FocusableWrapper instance.\n *\n * @param {HTMLElement} container The container element, holder for focusable elements.\n * @returns {FocusableWrapper}\n */\n\nfunction createElement(container) {\n  var focusableWrapper = new FocusableWrapper(container);\n  var counter = refCounter.get(container);\n  counter = isNaN(counter) ? 0 : counter;\n  refCounter.set(container, counter + 1);\n  return focusableWrapper;\n}\n/**\n * Deactivate the FocusableWrapper instance.\n *\n * @param {FocusableWrapper} wrapper The instance of the FocusableWrapper class.\n */\n\n\nfunction deactivateElement(wrapper) {\n  wrapper.eventManager.clear();\n}\n\nvar runLocalHooks = function runLocalHooks(eventName, subject) {\n  return function (event) {\n    return subject.runLocalHooks(eventName, event);\n  };\n};\n/**\n * Register copy/cut/paste events and forward their actions to the subject local hooks system.\n *\n * @param {EventManager} eventManager The instance of the EventManager class.\n * @param {HTMLElement} element The element on which the listeners are mounted.\n * @param {FocusableWrapper} subject The subject object for local hooks.\n */\n\n\nfunction forwardEventsToLocalHooks(eventManager, element, subject) {\n  eventManager.addEventListener(element, 'copy', runLocalHooks('copy', subject));\n  eventManager.addEventListener(element, 'cut', runLocalHooks('cut', subject));\n  eventManager.addEventListener(element, 'paste', runLocalHooks('paste', subject));\n}\n\nvar secondaryElements = new WeakMap();\n/**\n * Create and attach newly created focusable element to the DOM.\n *\n * @param {HTMLElement} container The container element, holder for focusable elements.\n * @returns {HTMLElement}\n */\n\nfunction createOrGetSecondaryElement(container) {\n  var secondaryElement = secondaryElements.get(container);\n\n  if (secondaryElement) {\n    if (!secondaryElement.parentElement) {\n      container.appendChild(secondaryElement);\n    }\n\n    return secondaryElement;\n  }\n\n  var doc = container.defaultView ? container : container.ownerDocument;\n  var element = doc.createElement('textarea');\n  secondaryElements.set(container, element);\n  element.setAttribute('data-hot-input', ''); // Makes the element recognizable by Hot as its own component's element.\n\n  element.className = 'HandsontableCopyPaste';\n  element.tabIndex = -1;\n  element.autocomplete = 'off';\n  element.wrap = 'hard';\n  element.value = ' ';\n  container.appendChild(element);\n  return element;\n}\n/**\n * Destroy the FocusableWrapper instance.\n *\n * @param {FocusableWrapper} wrapper The instance of the FocusableWrapper class.\n */\n\n\nfunction destroyElement(wrapper) {\n  if (!(wrapper instanceof FocusableWrapper)) {\n    return;\n  }\n\n  var counter = refCounter.get(wrapper.container);\n  counter = isNaN(counter) ? 0 : counter;\n\n  if (counter > 0) {\n    counter -= 1;\n  }\n\n  deactivateElement(wrapper);\n\n  if (counter <= 0) {\n    counter = 0; // Detach secondary element from the DOM.\n\n    var secondaryElement = secondaryElements.get(wrapper.container);\n\n    if (secondaryElement && secondaryElement.parentNode) {\n      secondaryElement.parentNode.removeChild(secondaryElement);\n      secondaryElements.delete(wrapper.container);\n    }\n\n    wrapper.mainElement = null;\n  }\n\n  refCounter.set(wrapper.container, counter);\n}\n\nexport { createElement, deactivateElement, destroyElement };", "'use strict';\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\n\n// `WeakSet` constructor\n// https://tc39.es/ecma262/#sec-weakset-constructor\ncollection('WeakSet', function (init) {\n  return function WeakSet() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionWeak);\n", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.object.assign.js\";\nimport \"core-js/modules/es.object.values.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { hasOwnProperty, objectEach } from \"../../helpers/object.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport { arrayEach, arrayReduce, arrayMap } from \"../../helpers/array.mjs\";\nimport { CellRange, CellCoords } from \"../../3rdparty/walkontable/src/index.mjs\";\nimport * as C from \"../../i18n/constants.mjs\";\nimport { bottom, left, noBorders, right, top } from \"./contextMenuItem/index.mjs\";\nimport { createId, createDefaultCustomBorder, createSingleEmptyBorder, createEmptyBorders, extendDefaultBorder } from \"./utils.mjs\";\nimport { detectSelectionType, normalizeSelectionFactory } from \"../../selection/index.mjs\";\nexport var PLUGIN_KEY = 'customBorders';\nexport var PLUGIN_PRIORITY = 90;\n/**\n * @plugin CustomBorders\n * @class CustomBorders\n *\n * @description\n * This plugin enables an option to apply custom borders through the context menu (configurable with context menu key\n * `borders`).\n *\n * To initialize Handsontable with predefined custom borders, provide cell coordinates and border styles in a form\n * of an array.\n *\n * See [Custom Borders](@/guides/cell-features/formatting-cells.md#custom-cell-borders) demo for more examples.\n *\n * @example\n * ```js\n * customBorders: [\n *   {\n *    range: {\n *      from: {\n *        row: 1,\n *        col: 1\n *      },\n *      to: {\n *        row: 3,\n *        col: 4\n *      },\n *    },\n *    left: {},\n *    right: {},\n *    top: {},\n *    bottom: {},\n *   },\n * ],\n *\n * // or\n * customBorders: [\n *   { row: 2,\n *     col: 2,\n *     left: {\n *       width: 2,\n *       color: 'red',\n *     },\n *     right: {\n *       width: 1,\n *       color: 'green',\n *     },\n *     top: '',\n *     bottom: '',\n *   }\n * ],\n * ```\n */\n\nexport var CustomBorders = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(CustomBorders, _BasePlugin);\n\n  var _super = _createSuper(CustomBorders);\n\n  function CustomBorders(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, CustomBorders);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Saved borders.\n     *\n     * @private\n     * @type {Array}\n     */\n\n    _this.savedBorders = [];\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link CustomBorders#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(CustomBorders, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.addHook('afterContextMenuDefaultOptions', function (options) {\n        return _this2.onAfterContextMenuDefaultOptions(options);\n      });\n      this.addHook('init', function () {\n        return _this2.onAfterInit();\n      });\n\n      _get(_getPrototypeOf(CustomBorders.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.hideBorders();\n\n      _get(_getPrototypeOf(CustomBorders.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n      this.changeBorderSettings();\n\n      _get(_getPrototypeOf(CustomBorders.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Set custom borders.\n     *\n     * @example\n     * ```js\n     * const customBordersPlugin = hot.getPlugin('customBorders');\n     *\n     * // Using an array of arrays (produced by `.getSelected()` method).\n     * customBordersPlugin.setBorders([[1, 1, 2, 2], [6, 2, 0, 2]], {left: {width: 2, color: 'blue'}});\n     *\n     * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n     * //  Selecting a cell range.\n     * hot.selectCell(0, 0, 2, 2);\n     * // Returning selected cells' range with the getSelectedRange method.\n     * customBordersPlugin.setBorders(hot.getSelectedRange(), {left: {hide: false, width: 2, color: 'blue'}});\n     * ```\n     *\n     * @param {Array[]|CellRange[]} selectionRanges Array of selection ranges.\n     * @param {object} borderObject Object with `top`, `right`, `bottom` and `left` properties.\n     */\n\n  }, {\n    key: \"setBorders\",\n    value: function setBorders(selectionRanges, borderObject) {\n      var _this3 = this;\n\n      var defaultBorderKeys = ['top', 'right', 'bottom', 'left'];\n      var borderKeys = borderObject ? Object.keys(borderObject) : defaultBorderKeys;\n      var selectionType = detectSelectionType(selectionRanges);\n      var selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);\n      arrayEach(selectionRanges, function (selection) {\n        var _selectionSchemaNorma = selectionSchemaNormalizer(selection),\n            _selectionSchemaNorma2 = _slicedToArray(_selectionSchemaNorma, 4),\n            rowStart = _selectionSchemaNorma2[0],\n            columnStart = _selectionSchemaNorma2[1],\n            rowEnd = _selectionSchemaNorma2[2],\n            columnEnd = _selectionSchemaNorma2[3];\n\n        var _loop = function _loop(row) {\n          var _loop2 = function _loop2(col) {\n            arrayEach(borderKeys, function (borderKey) {\n              _this3.prepareBorderFromCustomAdded(row, col, borderObject, borderKey);\n            });\n          };\n\n          for (var col = columnStart; col <= columnEnd; col += 1) {\n            _loop2(col);\n          }\n        };\n\n        for (var row = rowStart; row <= rowEnd; row += 1) {\n          _loop(row);\n        }\n      });\n      /*\n      The line below triggers a re-render of Handsontable. This will be a \"fastDraw\"\n      render, because that is the default for the TableView class.\n       The re-render is needed for borders on cells that did not have a border before.\n      The way this call works is that it calls Table.refreshSelections, which calls\n      Selection.getBorder, which creates a new instance of Border.\n       Seems wise to keep this single-direction flow of creating new Borders\n      */\n\n      this.hot.view.render();\n    }\n    /**\n     * Get custom borders.\n     *\n     * @example\n     * ```js\n     * const customBordersPlugin = hot.getPlugin('customBorders');\n     *\n     * // Using an array of arrays (produced by `.getSelected()` method).\n     * customBordersPlugin.getBorders([[1, 1, 2, 2], [6, 2, 0, 2]]);\n     * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n     * customBordersPlugin.getBorders(hot.getSelectedRange());\n     * // Using without param - return all customBorders.\n     * customBordersPlugin.getBorders();\n     * ```\n     *\n     * @param {Array[]|CellRange[]} selectionRanges Array of selection ranges.\n     * @returns {object[]} Returns array of border objects.\n     */\n\n  }, {\n    key: \"getBorders\",\n    value: function getBorders(selectionRanges) {\n      var _this4 = this;\n\n      if (!Array.isArray(selectionRanges)) {\n        return this.savedBorders;\n      }\n\n      var selectionType = detectSelectionType(selectionRanges);\n      var selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);\n      var selectedBorders = [];\n      arrayEach(selectionRanges, function (selection) {\n        var _selectionSchemaNorma3 = selectionSchemaNormalizer(selection),\n            _selectionSchemaNorma4 = _slicedToArray(_selectionSchemaNorma3, 4),\n            rowStart = _selectionSchemaNorma4[0],\n            columnStart = _selectionSchemaNorma4[1],\n            rowEnd = _selectionSchemaNorma4[2],\n            columnEnd = _selectionSchemaNorma4[3];\n\n        var _loop3 = function _loop3(row) {\n          var _loop4 = function _loop4(col) {\n            arrayEach(_this4.savedBorders, function (border) {\n              if (border.row === row && border.col === col) {\n                selectedBorders.push(border);\n              }\n            });\n          };\n\n          for (var col = columnStart; col <= columnEnd; col += 1) {\n            _loop4(col);\n          }\n        };\n\n        for (var row = rowStart; row <= rowEnd; row += 1) {\n          _loop3(row);\n        }\n      });\n      return selectedBorders;\n    }\n    /**\n     * Clear custom borders.\n     *\n     * @example\n     * ```js\n     * const customBordersPlugin = hot.getPlugin('customBorders');\n     *\n     * // Using an array of arrays (produced by `.getSelected()` method).\n     * customBordersPlugin.clearBorders([[1, 1, 2, 2], [6, 2, 0, 2]]);\n     * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n     * customBordersPlugin.clearBorders(hot.getSelectedRange());\n     * // Using without param - clear all customBorders.\n     * customBordersPlugin.clearBorders();\n     * ```\n     *\n     * @param {Array[]|CellRange[]} selectionRanges Array of selection ranges.\n     */\n\n  }, {\n    key: \"clearBorders\",\n    value: function clearBorders(selectionRanges) {\n      var _this5 = this;\n\n      if (selectionRanges) {\n        this.setBorders(selectionRanges);\n      } else {\n        arrayEach(this.savedBorders, function (border) {\n          _this5.clearBordersFromSelectionSettings(border.id);\n\n          _this5.clearNullCellRange();\n\n          _this5.hot.removeCellMeta(border.row, border.col, 'borders');\n        });\n        this.savedBorders.length = 0;\n      }\n    }\n    /**\n     * Insert WalkontableSelection instance into Walkontable settings.\n     *\n     * @private\n     * @param {object} border Object with `row` and `col`, `left`, `right`, `top` and `bottom`, `id` and `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n     * @param {string} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right`.\n     */\n\n  }, {\n    key: \"insertBorderIntoSettings\",\n    value: function insertBorderIntoSettings(border, place) {\n      var hasSavedBorders = this.checkSavedBorders(border);\n\n      if (!hasSavedBorders) {\n        this.savedBorders.push(border);\n      }\n\n      var visualCellRange = new CellRange(new CellCoords(border.row, border.col));\n      var hasCustomSelections = this.checkCustomSelections(border, visualCellRange, place);\n\n      if (!hasCustomSelections) {\n        this.hot.selection.highlight.addCustomSelection({\n          border: border,\n          visualCellRange: visualCellRange\n        });\n      }\n    }\n    /**\n     * Prepare borders from setting (single cell).\n     *\n     * @private\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @param {object} borderDescriptor Object with `row` and `col`, `left`, `right`, `top` and `bottom` properties.\n     * @param {string} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right`.\n     */\n\n  }, {\n    key: \"prepareBorderFromCustomAdded\",\n    value: function prepareBorderFromCustomAdded(row, column, borderDescriptor, place) {\n      var nrOfRows = this.hot.countRows();\n      var nrOfColumns = this.hot.countCols();\n\n      if (row >= nrOfRows || column >= nrOfColumns) {\n        return;\n      }\n\n      var border = createEmptyBorders(row, column);\n\n      if (borderDescriptor) {\n        border = extendDefaultBorder(border, borderDescriptor);\n        arrayEach(this.hot.selection.highlight.customSelections, function (customSelection) {\n          if (border.id === customSelection.settings.id) {\n            Object.assign(customSelection.settings, borderDescriptor);\n            border.id = customSelection.settings.id;\n            border.left = customSelection.settings.left;\n            border.right = customSelection.settings.right;\n            border.top = customSelection.settings.top;\n            border.bottom = customSelection.settings.bottom;\n            return false; // breaks forAll\n          }\n        });\n      }\n\n      this.hot.setCellMeta(row, column, 'borders', border);\n      this.insertBorderIntoSettings(border, place);\n    }\n    /**\n     * Prepare borders from setting (object).\n     *\n     * @private\n     * @param {object} rowDecriptor Object with `range`, `left`, `right`, `top` and `bottom` properties.\n     */\n\n  }, {\n    key: \"prepareBorderFromCustomAddedRange\",\n    value: function prepareBorderFromCustomAddedRange(rowDecriptor) {\n      var _this6 = this;\n\n      var range = rowDecriptor.range;\n      var lastRowIndex = Math.min(range.to.row, this.hot.countRows() - 1);\n      var lastColumnIndex = Math.min(range.to.col, this.hot.countCols() - 1);\n      rangeEach(range.from.row, lastRowIndex, function (rowIndex) {\n        rangeEach(range.from.col, lastColumnIndex, function (colIndex) {\n          var border = createEmptyBorders(rowIndex, colIndex);\n          var add = 0;\n\n          if (rowIndex === range.from.row) {\n            if (hasOwnProperty(rowDecriptor, 'top')) {\n              add += 1;\n              border.top = rowDecriptor.top;\n            }\n          } // Please keep in mind that `range.to.row` may be beyond the table boundaries. The border won't be rendered.\n\n\n          if (rowIndex === range.to.row) {\n            if (hasOwnProperty(rowDecriptor, 'bottom')) {\n              add += 1;\n              border.bottom = rowDecriptor.bottom;\n            }\n          }\n\n          if (colIndex === range.from.col) {\n            if (hasOwnProperty(rowDecriptor, 'left')) {\n              add += 1;\n              border.left = rowDecriptor.left;\n            }\n          } // Please keep in mind that `range.to.col` may be beyond the table boundaries. The border won't be rendered.\n\n\n          if (colIndex === range.to.col) {\n            if (hasOwnProperty(rowDecriptor, 'right')) {\n              add += 1;\n              border.right = rowDecriptor.right;\n            }\n          }\n\n          if (add > 0) {\n            _this6.hot.setCellMeta(rowIndex, colIndex, 'borders', border);\n\n            _this6.insertBorderIntoSettings(border);\n          } else {// TODO sometimes it enters here. Why?\n          }\n        });\n      });\n    }\n    /**\n     * Remove border (triggered from context menu).\n     *\n     * @private\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     */\n\n  }, {\n    key: \"removeAllBorders\",\n    value: function removeAllBorders(row, column) {\n      var borderId = createId(row, column);\n      this.spliceBorder(borderId);\n      this.clearBordersFromSelectionSettings(borderId);\n      this.clearNullCellRange();\n      this.hot.removeCellMeta(row, column, 'borders');\n    }\n    /**\n     * Set borders for each cell re. To border position.\n     *\n     * @private\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @param {string} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right` and `noBorders`.\n     * @param {boolean} remove True when remove borders, and false when add borders.\n     */\n\n  }, {\n    key: \"setBorder\",\n    value: function setBorder(row, column, place, remove) {\n      var bordersMeta = this.hot.getCellMeta(row, column).borders;\n\n      if (!bordersMeta || bordersMeta.border === void 0) {\n        bordersMeta = createEmptyBorders(row, column);\n      }\n\n      if (remove) {\n        bordersMeta[place] = createSingleEmptyBorder();\n        var hideCount = this.countHide(bordersMeta);\n\n        if (hideCount === 4) {\n          this.removeAllBorders(row, column);\n        } else {\n          var customSelectionsChecker = this.checkCustomSelectionsFromContextMenu(bordersMeta, place, remove);\n\n          if (!customSelectionsChecker) {\n            this.insertBorderIntoSettings(bordersMeta);\n          }\n\n          this.hot.setCellMeta(row, column, 'borders', bordersMeta);\n        }\n      } else {\n        bordersMeta[place] = createDefaultCustomBorder();\n\n        var _customSelectionsChecker = this.checkCustomSelectionsFromContextMenu(bordersMeta, place, remove);\n\n        if (!_customSelectionsChecker) {\n          this.insertBorderIntoSettings(bordersMeta);\n        }\n\n        this.hot.setCellMeta(row, column, 'borders', bordersMeta);\n      }\n    }\n    /**\n     * Prepare borders based on cell and border position.\n     *\n     * @private\n     * @param {CellRange[]} selected An array of CellRange objects.\n     * @param {string} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right` and `noBorders`.\n     * @param {boolean} remove True when remove borders, and false when add borders.\n     */\n\n  }, {\n    key: \"prepareBorder\",\n    value: function prepareBorder(selected, place, remove) {\n      var _this7 = this;\n\n      arrayEach(selected, function (_ref) {\n        var start = _ref.start,\n            end = _ref.end;\n\n        if (start.row === end.row && start.col === end.col) {\n          if (place === 'noBorders') {\n            _this7.removeAllBorders(start.row, start.col);\n          } else {\n            _this7.setBorder(start.row, start.col, place, remove);\n          }\n        } else {\n          switch (place) {\n            case 'noBorders':\n              rangeEach(start.col, end.col, function (colIndex) {\n                rangeEach(start.row, end.row, function (rowIndex) {\n                  _this7.removeAllBorders(rowIndex, colIndex);\n                });\n              });\n              break;\n\n            case 'top':\n              rangeEach(start.col, end.col, function (topCol) {\n                _this7.setBorder(start.row, topCol, place, remove);\n              });\n              break;\n\n            case 'right':\n              rangeEach(start.row, end.row, function (rowRight) {\n                _this7.setBorder(rowRight, end.col, place, remove);\n              });\n              break;\n\n            case 'bottom':\n              rangeEach(start.col, end.col, function (bottomCol) {\n                _this7.setBorder(end.row, bottomCol, place, remove);\n              });\n              break;\n\n            case 'left':\n              rangeEach(start.row, end.row, function (rowLeft) {\n                _this7.setBorder(rowLeft, start.col, place, remove);\n              });\n              break;\n\n            default:\n              break;\n          }\n        }\n      });\n    }\n    /**\n     * Create borders from settings.\n     *\n     * @private\n     * @param {Array} customBorders Object with `row` and `col`, `left`, `right`, `top` and `bottom` properties.\n     */\n\n  }, {\n    key: \"createCustomBorders\",\n    value: function createCustomBorders(customBorders) {\n      var _this8 = this;\n\n      arrayEach(customBorders, function (customBorder) {\n        if (customBorder.range) {\n          _this8.prepareBorderFromCustomAddedRange(customBorder);\n        } else {\n          _this8.prepareBorderFromCustomAdded(customBorder.row, customBorder.col, customBorder);\n        }\n      });\n    }\n    /**\n     * Count hide property in border object.\n     *\n     * @private\n     * @param {object} border Object with `row` and `col`, `left`, `right`, `top` and `bottom`, `id` and `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"countHide\",\n    value: function countHide(border) {\n      var values = Object.values(border);\n      return arrayReduce(values, function (accumulator, value) {\n        var result = accumulator;\n\n        if (value.hide) {\n          result += 1;\n        }\n\n        return result;\n      }, 0);\n    }\n    /**\n     * Clear borders settings from custom selections.\n     *\n     * @private\n     * @param {string} borderId Border id name as string.\n     */\n\n  }, {\n    key: \"clearBordersFromSelectionSettings\",\n    value: function clearBordersFromSelectionSettings(borderId) {\n      var index = arrayMap(this.hot.selection.highlight.customSelections, function (customSelection) {\n        return customSelection.settings.id;\n      }).indexOf(borderId);\n\n      if (index > -1) {\n        this.hot.selection.highlight.customSelections[index].clear();\n      }\n    }\n    /**\n     * Clear cellRange with null value.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"clearNullCellRange\",\n    value: function clearNullCellRange() {\n      var _this9 = this;\n\n      arrayEach(this.hot.selection.highlight.customSelections, function (customSelection, index) {\n        if (customSelection.cellRange === null) {\n          _this9.hot.selection.highlight.customSelections[index].destroy();\n\n          _this9.hot.selection.highlight.customSelections.splice(index, 1);\n\n          return false; // breaks forAll\n        }\n      });\n    }\n    /**\n     * Hide custom borders.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"hideBorders\",\n    value: function hideBorders() {\n      var _this10 = this;\n\n      arrayEach(this.savedBorders, function (border) {\n        _this10.clearBordersFromSelectionSettings(border.id);\n\n        _this10.clearNullCellRange();\n      });\n    }\n    /**\n     * Splice border from savedBorders.\n     *\n     * @private\n     * @param {string} borderId Border id name as string.\n     */\n\n  }, {\n    key: \"spliceBorder\",\n    value: function spliceBorder(borderId) {\n      var index = arrayMap(this.savedBorders, function (border) {\n        return border.id;\n      }).indexOf(borderId);\n\n      if (index > -1) {\n        this.savedBorders.splice(index, 1);\n      }\n    }\n    /**\n     * Check if an border already exists in the savedBorders array, and if true update border in savedBorders.\n     *\n     * @private\n     * @param {object} border Object with `row` and `col`, `left`, `right`, `top` and `bottom`, `id` and `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"checkSavedBorders\",\n    value: function checkSavedBorders(border) {\n      var _this11 = this;\n\n      var check = false;\n      var hideCount = this.countHide(border);\n\n      if (hideCount === 4) {\n        this.spliceBorder(border.id);\n        check = true;\n      } else {\n        arrayEach(this.savedBorders, function (savedBorder, index) {\n          if (border.id === savedBorder.id) {\n            _this11.savedBorders[index] = border;\n            check = true;\n            return false; // breaks forAll\n          }\n        });\n      }\n\n      return check;\n    }\n    /**\n     * Check if an border already exists in the customSelections, and if true call toggleHiddenClass method.\n     *\n     * @private\n     * @param {object} border Object with `row` and `col`, `left`, `right`, `top` and `bottom`, `id` and `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n     * @param {string} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right` and `noBorders`.\n     * @param {boolean} remove True when remove borders, and false when add borders.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"checkCustomSelectionsFromContextMenu\",\n    value: function checkCustomSelectionsFromContextMenu(border, place, remove) {\n      var check = false;\n      arrayEach(this.hot.selection.highlight.customSelections, function (customSelection) {\n        if (border.id === customSelection.settings.id) {\n          objectEach(customSelection.instanceBorders, function (borderObject) {\n            borderObject.toggleHiddenClass(place, remove); // TODO this also bad?\n          });\n          check = true;\n          return false; // breaks forAll\n        }\n      });\n      return check;\n    }\n    /**\n     * Check if an border already exists in the customSelections, and if true reset cellRange.\n     *\n     * @private\n     * @param {object} border Object with `row` and `col`, `left`, `right`, `top` and `bottom`, `id` and `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n     * @param {CellRange} cellRange The selection range to check.\n     * @param {string} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right`.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"checkCustomSelections\",\n    value: function checkCustomSelections(border, cellRange, place) {\n      var hideCount = this.countHide(border);\n      var check = false;\n\n      if (hideCount === 4) {\n        this.removeAllBorders(border.row, border.col);\n        check = true;\n      } else {\n        arrayEach(this.hot.selection.highlight.customSelections, function (customSelection) {\n          if (border.id === customSelection.settings.id) {\n            customSelection.visualCellRange = cellRange;\n            customSelection.commit();\n\n            if (place) {\n              objectEach(customSelection.instanceBorders, function (borderObject) {\n                borderObject.changeBorderStyle(place, border);\n              });\n            }\n\n            check = true;\n            return false; // breaks forAll\n          }\n        });\n      }\n\n      return check;\n    }\n    /**\n     * Change borders from settings.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"changeBorderSettings\",\n    value: function changeBorderSettings() {\n      var customBorders = this.hot.getSettings()[PLUGIN_KEY];\n\n      if (Array.isArray(customBorders)) {\n        if (!customBorders.length) {\n          this.savedBorders = customBorders;\n        }\n\n        this.createCustomBorders(customBorders);\n      } else if (customBorders !== void 0) {\n        this.createCustomBorders(this.savedBorders);\n      }\n    }\n    /**\n     * Add border options to context menu.\n     *\n     * @private\n     * @param {object} defaultOptions Context menu items.\n     */\n\n  }, {\n    key: \"onAfterContextMenuDefaultOptions\",\n    value: function onAfterContextMenuDefaultOptions(defaultOptions) {\n      if (!this.hot.getSettings()[PLUGIN_KEY]) {\n        return;\n      }\n\n      defaultOptions.items.push({\n        name: '---------'\n      }, {\n        key: 'borders',\n        name: function name() {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS);\n        },\n        disabled: function disabled() {\n          return this.selection.isSelectedByCorner();\n        },\n        submenu: {\n          items: [top(this), right(this), bottom(this), left(this), noBorders(this)]\n        }\n      });\n    }\n    /**\n     * `afterInit` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterInit\",\n    value: function onAfterInit() {\n      this.changeBorderSettings();\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _get(_getPrototypeOf(CustomBorders.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return CustomBorders;\n}(BasePlugin);", "import \"core-js/modules/es.array.concat.js\";\nimport { hasOwnProperty, isObject } from \"../../helpers/object.mjs\";\nimport { arrayEach } from \"../../helpers/array.mjs\";\n/**\n * Create separated id for borders for each cell.\n *\n * @param {number} row Visual row index.\n * @param {number} col Visual column index.\n * @returns {string}\n */\n\nexport function createId(row, col) {\n  return \"border_row\".concat(row, \"col\").concat(col);\n}\n/**\n * Create default single border for each position (top/right/bottom/left).\n *\n * @returns {object} `{{width: number, color: string}}`.\n */\n\nexport function createDefaultCustomBorder() {\n  return {\n    width: 1,\n    color: '#000'\n  };\n}\n/**\n * Create default object for empty border.\n *\n * @returns {object} `{{hide: boolean}}`.\n */\n\nexport function createSingleEmptyBorder() {\n  return {\n    hide: true\n  };\n}\n/**\n * Create default Handsontable border object.\n *\n * @returns {object} `{{width: number, color: string, cornerVisible: boolean}}`.\n */\n\nexport function createDefaultHtBorder() {\n  return {\n    width: 1,\n    color: '#000',\n    cornerVisible: false\n  };\n}\n/**\n * Prepare empty border for each cell with all custom borders hidden.\n *\n * @param {number} row Visual row index.\n * @param {number} col Visual column index.\n * @returns {object} Returns border configuration containing visual indexes. Example of an object defining it:\n * `{{id: *, border: *, row: *, col: *, top: {hide: boolean}, right: {hide: boolean}, bottom: {hide: boolean}, left: {hide: boolean}}}`.\n */\n\nexport function createEmptyBorders(row, col) {\n  return {\n    id: createId(row, col),\n    border: createDefaultHtBorder(),\n    row: row,\n    col: col,\n    top: createSingleEmptyBorder(),\n    right: createSingleEmptyBorder(),\n    bottom: createSingleEmptyBorder(),\n    left: createSingleEmptyBorder()\n  };\n}\n/**\n * @param {object} defaultBorder The default border object.\n * @param {object} customBorder The border object with custom settings.\n * @returns {object}\n */\n\nexport function extendDefaultBorder(defaultBorder, customBorder) {\n  if (hasOwnProperty(customBorder, 'border')) {\n    defaultBorder.border = customBorder.border;\n  }\n\n  if (hasOwnProperty(customBorder, 'top')) {\n    if (customBorder.top) {\n      if (!isObject(customBorder.top)) {\n        customBorder.top = createDefaultCustomBorder();\n      }\n\n      defaultBorder.top = customBorder.top;\n    } else {\n      customBorder.top = createSingleEmptyBorder();\n      defaultBorder.top = customBorder.top;\n    }\n  }\n\n  if (hasOwnProperty(customBorder, 'right')) {\n    if (customBorder.right) {\n      if (!isObject(customBorder.right)) {\n        customBorder.right = createDefaultCustomBorder();\n      }\n\n      defaultBorder.right = customBorder.right;\n    } else {\n      customBorder.right = createSingleEmptyBorder();\n      defaultBorder.right = customBorder.right;\n    }\n  }\n\n  if (hasOwnProperty(customBorder, 'bottom')) {\n    if (customBorder.bottom) {\n      if (!isObject(customBorder.bottom)) {\n        customBorder.bottom = createDefaultCustomBorder();\n      }\n\n      defaultBorder.bottom = customBorder.bottom;\n    } else {\n      customBorder.bottom = createSingleEmptyBorder();\n      defaultBorder.bottom = customBorder.bottom;\n    }\n  }\n\n  if (hasOwnProperty(customBorder, 'left')) {\n    if (customBorder.left) {\n      if (!isObject(customBorder.left)) {\n        customBorder.left = createDefaultCustomBorder();\n      }\n\n      defaultBorder.left = customBorder.left;\n    } else {\n      customBorder.left = createSingleEmptyBorder();\n      defaultBorder.left = customBorder.left;\n    }\n  }\n\n  return defaultBorder;\n}\n/**\n * Check if selection has border.\n *\n * @param {Core} hot The Handsontable instance.\n * @param {string} [direction] If set ('left' or 'top') then only the specified border side will be checked.\n * @returns {boolean}\n */\n\nexport function checkSelectionBorders(hot, direction) {\n  var atLeastOneHasBorder = false;\n  arrayEach(hot.getSelectedRange(), function (range) {\n    range.forAll(function (r, c) {\n      if (r < 0 || c < 0) {\n        return;\n      }\n\n      var metaBorders = hot.getCellMeta(r, c).borders;\n\n      if (metaBorders) {\n        if (direction) {\n          if (!hasOwnProperty(metaBorders[direction], 'hide') || metaBorders[direction].hide === false) {\n            atLeastOneHasBorder = true;\n            return false; // breaks forAll\n          }\n        } else {\n          atLeastOneHasBorder = true;\n          return false; // breaks forAll\n        }\n      }\n    });\n  });\n  return atLeastOneHasBorder;\n}\n/**\n * Mark label in contextMenu as selected.\n *\n * @param {string} label The label text.\n * @returns {string}\n */\n\nexport function markSelected(label) {\n  return \"<span class=\\\"selected\\\">\".concat(String.fromCharCode(10003), \"</span>\").concat(label); // workaround for https://github.com/handsontable/handsontable/issues/1946\n}", "import * as C from \"../../../i18n/constants.mjs\";\nimport { checkSelectionBorders, markSelected } from \"../utils.mjs\";\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\n\nexport default function bottom(customBordersPlugin) {\n  return {\n    key: 'borders:bottom',\n    name: function name() {\n      var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_BOTTOM);\n      var hasBorder = checkSelectionBorders(this, 'bottom');\n\n      if (hasBorder) {\n        label = markSelected(label);\n      }\n\n      return label;\n    },\n    callback: function callback(key, selected) {\n      var hasBorder = checkSelectionBorders(this, 'bottom');\n      customBordersPlugin.prepareBorder(selected, 'bottom', hasBorder);\n    }\n  };\n}", "import * as C from \"../../../i18n/constants.mjs\";\nimport { checkSelectionBorders, markSelected } from \"../utils.mjs\";\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\n\nexport default function left(customBordersPlugin) {\n  return {\n    key: 'borders:left',\n    name: function name() {\n      var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_LEFT);\n      var hasBorder = checkSelectionBorders(this, 'left');\n\n      if (hasBorder) {\n        label = markSelected(label);\n      }\n\n      return label;\n    },\n    callback: function callback(key, selected) {\n      var hasBorder = checkSelectionBorders(this, 'left');\n      customBordersPlugin.prepareBorder(selected, 'left', hasBorder);\n    }\n  };\n}", "import * as C from \"../../../i18n/constants.mjs\";\nimport { checkSelectionBorders } from \"../utils.mjs\";\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\n\nexport default function noBorders(customBordersPlugin) {\n  return {\n    key: 'borders:no_borders',\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_BORDERS);\n    },\n    callback: function callback(key, selected) {\n      customBordersPlugin.prepareBorder(selected, 'noBorders');\n    },\n    disabled: function disabled() {\n      return !checkSelectionBorders(this);\n    }\n  };\n}", "import * as C from \"../../../i18n/constants.mjs\";\nimport { checkSelectionBorders, markSelected } from \"../utils.mjs\";\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\n\nexport default function right(customBordersPlugin) {\n  return {\n    key: 'borders:right',\n    name: function name() {\n      var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_RIGHT);\n      var hasBorder = checkSelectionBorders(this, 'right');\n\n      if (hasBorder) {\n        label = markSelected(label);\n      }\n\n      return label;\n    },\n    callback: function callback(key, selected) {\n      var hasBorder = checkSelectionBorders(this, 'right');\n      customBordersPlugin.prepareBorder(selected, 'right', hasBorder);\n    }\n  };\n}", "import * as C from \"../../../i18n/constants.mjs\";\nimport { checkSelectionBorders, markSelected } from \"../utils.mjs\";\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\n\nexport default function top(customBordersPlugin) {\n  return {\n    key: 'borders:top',\n    name: function name() {\n      var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_TOP);\n      var hasBorder = checkSelectionBorders(this, 'top');\n\n      if (hasBorder) {\n        label = markSelected(label);\n      }\n\n      return label;\n    },\n    callback: function callback(key, selected) {\n      var hasBorder = checkSelectionBorders(this, 'top');\n      customBordersPlugin.prepareBorder(selected, 'top', hasBorder);\n    }\n  };\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { isRightClick } from \"../../helpers/dom/event.mjs\";\nimport { getParentWindow } from \"../../helpers/dom/element.mjs\";\nexport var PLUGIN_KEY = 'dragToScroll';\nexport var PLUGIN_PRIORITY = 100;\n/**\n * @description\n * Plugin used to scroll Handsontable by selecting a cell and dragging outside of the visible viewport.\n *\n *\n * @class DragToScroll\n * @plugin DragToScroll\n */\n\nexport var DragToScroll = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(DragToScroll, _BasePlugin);\n\n  var _super = _createSuper(DragToScroll);\n\n  function DragToScroll(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, DragToScroll);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Instance of {@link EventManager}.\n     *\n     * @private\n     * @type {EventManager}\n     */\n\n    _this.eventManager = new EventManager(_assertThisInitialized(_this));\n    /**\n     * Size of an element and its position relative to the viewport,\n     * e.g. {bottom: 449, height: 441, left: 8, right: 814, top: 8, width: 806, x: 8, y:8}.\n     *\n     * @type {DOMRect}\n     */\n\n    _this.boundaries = null;\n    /**\n     * Callback function.\n     *\n     * @private\n     * @type {Function}\n     */\n\n    _this.callback = null;\n    /**\n     * Flag indicates mouseDown/mouseUp.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n    _this.listening = false;\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link DragToScroll#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(DragToScroll, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.addHook('afterOnCellMouseDown', function (event) {\n        return _this2.setupListening(event);\n      });\n      this.addHook('afterOnCellCornerMouseDown', function (event) {\n        return _this2.setupListening(event);\n      });\n      this.registerEvents();\n\n      _get(_getPrototypeOf(DragToScroll.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(_getPrototypeOf(DragToScroll.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.unregisterEvents();\n\n      _get(_getPrototypeOf(DragToScroll.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Sets the value of the visible element.\n     *\n     * @param {DOMRect} boundaries An object with coordinates compatible with DOMRect.\n     */\n\n  }, {\n    key: \"setBoundaries\",\n    value: function setBoundaries(boundaries) {\n      this.boundaries = boundaries;\n    }\n    /**\n     * Changes callback function.\n     *\n     * @param {Function} callback The callback function.\n     */\n\n  }, {\n    key: \"setCallback\",\n    value: function setCallback(callback) {\n      this.callback = callback;\n    }\n    /**\n     * Checks if the mouse position (X, Y) is outside of the viewport and fires a callback with calculated X an Y diffs\n     * between passed boundaries.\n     *\n     * @param {number} x Mouse X coordinate to check.\n     * @param {number} y Mouse Y coordinate to check.\n     */\n\n  }, {\n    key: \"check\",\n    value: function check(x, y) {\n      var diffX = 0;\n      var diffY = 0;\n\n      if (y < this.boundaries.top) {\n        // y is less than top\n        diffY = y - this.boundaries.top;\n      } else if (y > this.boundaries.bottom) {\n        // y is more than bottom\n        diffY = y - this.boundaries.bottom;\n      }\n\n      if (x < this.boundaries.left) {\n        // x is less than left\n        diffX = x - this.boundaries.left;\n      } else if (x > this.boundaries.right) {\n        // x is more than right\n        diffX = x - this.boundaries.right;\n      }\n\n      this.callback(diffX, diffY);\n    }\n    /**\n     * Enables listening on `mousemove` event.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"listen\",\n    value: function listen() {\n      this.listening = true;\n    }\n    /**\n     * Disables listening on `mousemove` event.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"unlisten\",\n    value: function unlisten() {\n      this.listening = false;\n    }\n    /**\n     * Returns current state of listening.\n     *\n     * @private\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isListening\",\n    value: function isListening() {\n      return this.listening;\n    }\n    /**\n     * Registers dom listeners.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"registerEvents\",\n    value: function registerEvents() {\n      var _this3 = this;\n\n      var rootWindow = this.hot.rootWindow;\n      var frame = rootWindow;\n\n      while (frame) {\n        this.eventManager.addEventListener(frame.document, 'contextmenu', function () {\n          return _this3.unlisten();\n        });\n        this.eventManager.addEventListener(frame.document, 'mouseup', function () {\n          return _this3.unlisten();\n        });\n        this.eventManager.addEventListener(frame.document, 'mousemove', function (event) {\n          return _this3.onMouseMove(event);\n        });\n        frame = getParentWindow(frame);\n      }\n    }\n    /**\n     * Unbinds the events used by the plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"unregisterEvents\",\n    value: function unregisterEvents() {\n      this.eventManager.clear();\n    }\n    /**\n     * On after on cell/cellCorner mouse down listener.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event object.\n     */\n\n  }, {\n    key: \"setupListening\",\n    value: function setupListening(event) {\n      if (isRightClick(event)) {\n        return;\n      }\n\n      var scrollHandler = this.hot.view.wt.wtTable.holder; // native scroll\n\n      if (scrollHandler === this.hot.rootWindow) {\n        // not much we can do currently\n        return;\n      }\n\n      this.setBoundaries(scrollHandler.getBoundingClientRect());\n      this.setCallback(function (scrollX, scrollY) {\n        if (scrollX < 0) {\n          scrollHandler.scrollLeft -= 50;\n        } else if (scrollX > 0) {\n          scrollHandler.scrollLeft += 50;\n        }\n\n        if (scrollY < 0) {\n          scrollHandler.scrollTop -= 20;\n        } else if (scrollY > 0) {\n          scrollHandler.scrollTop += 20;\n        }\n      });\n      this.listen();\n    }\n    /**\n     * 'mouseMove' event callback.\n     *\n     * @private\n     * @param {MouseEvent} event `mousemove` event properties.\n     */\n\n  }, {\n    key: \"onMouseMove\",\n    value: function onMouseMove(event) {\n      if (!this.isListening()) {\n        return;\n      }\n\n      this.check(event.clientX, event.clientY);\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _get(_getPrototypeOf(DragToScroll.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return DragToScroll;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { arrayEach } from \"../../helpers/array.mjs\";\nimport CommandExecutor from \"../contextMenu/commandExecutor.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { hasClass } from \"../../helpers/dom/element.mjs\";\nimport ItemsFactory from \"../contextMenu/itemsFactory.mjs\";\nimport Menu from \"../contextMenu/menu.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nimport { COLUMN_LEFT, COLUMN_RIGHT, REMOVE_COLUMN, CLEAR_COLUMN, READ_ONLY, ALIGNMENT, SEPARATOR } from \"../contextMenu/predefinedItems.mjs\";\nHooks.getSingleton().register('afterDropdownMenuDefaultOptions');\nHooks.getSingleton().register('beforeDropdownMenuShow');\nHooks.getSingleton().register('afterDropdownMenuShow');\nHooks.getSingleton().register('afterDropdownMenuHide');\nHooks.getSingleton().register('afterDropdownMenuExecute');\nexport var PLUGIN_KEY = 'dropdownMenu';\nexport var PLUGIN_PRIORITY = 230;\nvar BUTTON_CLASS_NAME = 'changeType';\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin DropdownMenu\n * @class DropdownMenu\n *\n * @description\n * This plugin creates the Handsontable Dropdown Menu. It allows to create a new row or column at any place in the grid\n * among [other features](@/guides/accessories-and-menus/context-menu.md#context-menu-with-specific-options).\n * Possible values:\n * * `true` (to enable default options),\n * * `false` (to disable completely).\n *\n * or array of any available strings:\n * * `[\"row_above\", \"row_below\", \"col_left\", \"col_right\",\n * \"remove_row\", \"remove_col\", \"---------\", \"undo\", \"redo\"]`.\n *\n * See [the dropdown menu demo](@/guides/columns/column-menu.md) for examples.\n *\n * @example\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: data,\n *   colHeaders: true,\n *   // enable dropdown menu\n *   dropdownMenu: true\n * });\n *\n * // or\n * const hot = new Handsontable(container, {\n *   data: data,\n *   colHeaders: true,\n *   // enable and configure dropdown menu\n *   dropdownMenu: ['remove_col', '---------', 'make_read_only', 'alignment']\n * });\n * ```\n */\n\n/* eslint-enable jsdoc/require-description-complete-sentence */\n\nexport var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(DropdownMenu, _BasePlugin);\n\n  var _super = _createSuper(DropdownMenu);\n\n  function DropdownMenu(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, DropdownMenu);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Instance of {@link EventManager}.\n     *\n     * @private\n     * @type {EventManager}\n     */\n\n    _this.eventManager = new EventManager(_assertThisInitialized(_this));\n    /**\n     * Instance of {@link CommandExecutor}.\n     *\n     * @private\n     * @type {CommandExecutor}\n     */\n\n    _this.commandExecutor = new CommandExecutor(_this.hot);\n    /**\n     * Instance of {@link ItemsFactory}.\n     *\n     * @private\n     * @type {ItemsFactory}\n     */\n\n    _this.itemsFactory = null;\n    /**\n     * Instance of {@link Menu}.\n     *\n     * @private\n     * @type {Menu}\n     */\n\n    _this.menu = null; // One listener for enable/disable functionality\n\n    _this.hot.addHook('afterGetColHeader', function (col, TH) {\n      return _this.onAfterGetColHeader(col, TH);\n    });\n\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link DropdownMenu#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(DropdownMenu, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     *\n     * @fires Hooks#afterDropdownMenuDefaultOptions\n     * @fires Hooks#beforeDropdownMenuSetItems\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.itemsFactory = new ItemsFactory(this.hot, DropdownMenu.DEFAULT_ITEMS);\n      var settings = this.hot.getSettings()[PLUGIN_KEY];\n      var predefinedItems = {\n        items: this.itemsFactory.getItems(settings)\n      };\n      this.registerEvents();\n\n      if (typeof settings.callback === 'function') {\n        this.commandExecutor.setCommonCallback(settings.callback);\n      }\n\n      _get(_getPrototypeOf(DropdownMenu.prototype), \"enablePlugin\", this).call(this);\n\n      this.callOnPluginsReady(function () {\n        _this2.hot.runHooks('afterDropdownMenuDefaultOptions', predefinedItems);\n\n        _this2.itemsFactory.setPredefinedItems(predefinedItems.items);\n\n        var menuItems = _this2.itemsFactory.getItems(settings);\n\n        if (_this2.menu) {\n          _this2.menu.destroy();\n        }\n\n        _this2.menu = new Menu(_this2.hot, {\n          className: 'htDropdownMenu',\n          keepInViewport: true,\n          container: settings.uiContainer || _this2.hot.rootDocument.body\n        });\n\n        _this2.hot.runHooks('beforeDropdownMenuSetItems', menuItems);\n\n        _this2.menu.setMenuItems(menuItems);\n\n        _this2.menu.addLocalHook('beforeOpen', function () {\n          return _this2.onMenuBeforeOpen();\n        });\n\n        _this2.menu.addLocalHook('afterOpen', function () {\n          return _this2.onMenuAfterOpen();\n        });\n\n        _this2.menu.addLocalHook('afterClose', function () {\n          return _this2.onMenuAfterClose();\n        });\n\n        _this2.menu.addLocalHook('executeCommand', function () {\n          var _this2$executeCommand;\n\n          for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {\n            params[_key] = arguments[_key];\n          }\n\n          return (_this2$executeCommand = _this2.executeCommand).call.apply(_this2$executeCommand, [_this2].concat(params));\n        }); // Register all commands. Predefined and added by user or by plugins\n\n\n        arrayEach(menuItems, function (command) {\n          return _this2.commandExecutor.registerCommand(command.key, command);\n        });\n      });\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(_getPrototypeOf(DropdownMenu.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.close();\n\n      if (this.menu) {\n        this.menu.destroy();\n      }\n\n      _get(_getPrototypeOf(DropdownMenu.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Registers the DOM listeners.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"registerEvents\",\n    value: function registerEvents() {\n      var _this3 = this;\n\n      this.eventManager.addEventListener(this.hot.rootElement, 'click', function (event) {\n        return _this3.onTableClick(event);\n      });\n    }\n    /**\n     * Opens menu and re-position it based on the passed coordinates.\n     *\n     * @param {object|Event} position An object with `pageX` and `pageY` properties which contains values relative to\n     *                                the top left of the fully rendered content area in the browser or with `clientX`\n     *                                and `clientY`  properties which contains values relative to the upper left edge\n     *                                of the content area (the viewport) of the browser window. This object is structurally\n     *                                compatible with native mouse event so it can be used either.\n     * @fires Hooks#beforeDropdownMenuShow\n     * @fires Hooks#afterDropdownMenuShow\n     */\n\n  }, {\n    key: \"open\",\n    value: function open(position) {\n      if (!this.menu) {\n        return;\n      }\n\n      this.menu.open();\n\n      if (position.width) {\n        this.menu.setOffset('left', position.width);\n      }\n\n      this.menu.setPosition(position);\n    }\n    /**\n     * Closes dropdown menu.\n     */\n\n  }, {\n    key: \"close\",\n    value: function close() {\n      if (!this.menu) {\n        return;\n      }\n\n      this.menu.close();\n    }\n    /**\n     * Executes context menu command.\n     *\n     * You can execute all predefined commands:\n     *  * `'row_above'` - Insert row above\n     *  * `'row_below'` - Insert row below\n     *  * `'col_left'` - Insert column left\n     *  * `'col_right'` - Insert column right\n     *  * `'clear_column'` - Clear selected column\n     *  * `'remove_row'` - Remove row\n     *  * `'remove_col'` - Remove column\n     *  * `'undo'` - Undo last action\n     *  * `'redo'` - Redo last action\n     *  * `'make_read_only'` - Make cell read only\n     *  * `'alignment:left'` - Alignment to the left\n     *  * `'alignment:top'` - Alignment to the top\n     *  * `'alignment:right'` - Alignment to the right\n     *  * `'alignment:bottom'` - Alignment to the bottom\n     *  * `'alignment:middle'` - Alignment to the middle\n     *  * `'alignment:center'` - Alignment to the center (justify).\n     *\n     * Or you can execute command registered in settings where `key` is your command name.\n     *\n     * @param {string} commandName Command name to execute.\n     * @param {*} params Additional parameters passed to the command executor.\n     */\n\n  }, {\n    key: \"executeCommand\",\n    value: function executeCommand(commandName) {\n      var _this$commandExecutor;\n\n      for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        params[_key2 - 1] = arguments[_key2];\n      }\n\n      (_this$commandExecutor = this.commandExecutor).execute.apply(_this$commandExecutor, [commandName].concat(params));\n    }\n    /**\n     * Turns on / off listening on dropdown menu.\n     *\n     * @private\n     * @param {boolean} listen Turn on listening when value is set to true, otherwise turn it off.\n     */\n\n  }, {\n    key: \"setListening\",\n    value: function setListening() {\n      var listen = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      if (this.menu.isOpened()) {\n        if (listen) {\n          this.menu.hotMenu.listen();\n        } else {\n          this.menu.hotMenu.unlisten();\n        }\n      }\n    }\n    /**\n     * Table click listener.\n     *\n     * @private\n     * @param {Event} event The mouse event object.\n     */\n\n  }, {\n    key: \"onTableClick\",\n    value: function onTableClick(event) {\n      event.stopPropagation();\n\n      if (hasClass(event.target, BUTTON_CLASS_NAME) && !this.menu.isOpened()) {\n        var offsetTop = 0;\n        var offsetLeft = 0;\n\n        if (this.hot.rootDocument !== this.menu.container.ownerDocument) {\n          var frameElement = this.hot.rootWindow.frameElement;\n\n          var _frameElement$getBoun = frameElement.getBoundingClientRect(),\n              top = _frameElement$getBoun.top,\n              left = _frameElement$getBoun.left;\n\n          offsetTop = top;\n          offsetLeft = left;\n        }\n\n        var rect = event.target.getBoundingClientRect();\n        this.open({\n          left: rect.left + offsetLeft,\n          top: rect.top + event.target.offsetHeight + 3 + offsetTop,\n          width: rect.width,\n          height: rect.height\n        });\n      }\n    }\n    /**\n     * On after get column header listener.\n     *\n     * @private\n     * @param {number} col Visual column index.\n     * @param {HTMLTableCellElement} TH Header's TH element.\n     */\n\n  }, {\n    key: \"onAfterGetColHeader\",\n    value: function onAfterGetColHeader(col, TH) {\n      // Corner or a higher-level header\n      var headerRow = TH.parentNode;\n\n      if (!headerRow) {\n        return;\n      }\n\n      var headerRowList = headerRow.parentNode.childNodes;\n      var level = Array.prototype.indexOf.call(headerRowList, headerRow);\n\n      if (col < 0 || level !== headerRowList.length - 1) {\n        return;\n      }\n\n      var existingButton = TH.querySelector(\".\".concat(BUTTON_CLASS_NAME)); // Plugin enabled and buttons already exists, return.\n\n      if (this.enabled && existingButton) {\n        return;\n      } // Plugin disabled and buttons still exists, so remove them.\n\n\n      if (!this.enabled) {\n        if (existingButton) {\n          existingButton.parentNode.removeChild(existingButton);\n        }\n\n        return;\n      }\n\n      var button = this.hot.rootDocument.createElement('button');\n      button.className = BUTTON_CLASS_NAME; // prevent page reload on button click\n\n      button.onclick = function () {\n        return false;\n      };\n\n      TH.firstChild.insertBefore(button, TH.firstChild.firstChild);\n    }\n    /**\n     * On menu before open listener.\n     *\n     * @private\n     * @fires Hooks#beforeDropdownMenuShow\n     */\n\n  }, {\n    key: \"onMenuBeforeOpen\",\n    value: function onMenuBeforeOpen() {\n      this.hot.runHooks('beforeDropdownMenuShow', this);\n    }\n    /**\n     * On menu after open listener.\n     *\n     * @private\n     * @fires Hooks#afterDropdownMenuShow\n     */\n\n  }, {\n    key: \"onMenuAfterOpen\",\n    value: function onMenuAfterOpen() {\n      this.hot.runHooks('afterDropdownMenuShow', this);\n    }\n    /**\n     * On menu after close listener.\n     *\n     * @private\n     * @fires Hooks#afterDropdownMenuHide\n     */\n\n  }, {\n    key: \"onMenuAfterClose\",\n    value: function onMenuAfterClose() {\n      this.hot.listen();\n      this.hot.runHooks('afterDropdownMenuHide', this);\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.close();\n\n      if (this.menu) {\n        this.menu.destroy();\n      }\n\n      _get(_getPrototypeOf(DropdownMenu.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }, {\n    key: \"PLUGIN_DEPS\",\n    get: function get() {\n      return ['plugin:AutoColumnSize'];\n    }\n    /**\n     * Default menu items order when `dropdownMenu` is enabled by setting the config item to `true`.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"DEFAULT_ITEMS\",\n    get: function get() {\n      return [COLUMN_LEFT, COLUMN_RIGHT, SEPARATOR, REMOVE_COLUMN, SEPARATOR, CLEAR_COLUMN, SEPARATOR, READ_ONLY, SEPARATOR, ALIGNMENT];\n    }\n  }]);\n\n  return DropdownMenu;\n}(BasePlugin);\nDropdownMenu.SEPARATOR = {\n  name: SEPARATOR\n};", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport DataProvider from \"./dataProvider.mjs\";\nimport typeFactory, { EXPORT_TYPES } from \"./typeFactory.mjs\";\nexport var PLUGIN_KEY = 'exportFile';\nexport var PLUGIN_PRIORITY = 240;\n/**\n * @plugin ExportFile\n * @class ExportFile\n *\n * @description\n * The plugin enables exporting table data to file. It allows to export data as a string, blob or a downloadable file in\n * CSV format.\n *\n * See [the export file demo](@/guides/accessories-and-menus/export-to-csv.md) for examples.\n *\n * @example\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData()\n * });\n *\n * // access to exportFile plugin instance\n * const exportPlugin = hot.getPlugin('exportFile');\n *\n * // export as a string\n * exportPlugin.exportAsString('csv');\n *\n * // export as a blob object\n * exportPlugin.exportAsBlob('csv');\n *\n * // export to downloadable file (named: MyFile.csv)\n * exportPlugin.downloadFile('csv', {filename: 'MyFile'});\n *\n * // export as a string (with specified data range):\n * exportPlugin.exportAsString('csv', {\n *   exportHiddenRows: true,     // default false\n *   exportHiddenColumns: true,  // default false\n *   columnHeaders: true,        // default false\n *   rowHeaders: true,           // default false\n *   columnDelimiter: ';',       // default ','\n *   range: [1, 1, 6, 6]         // [startRow, endRow, startColumn, endColumn]\n * });\n * ```\n */\n\nexport var ExportFile = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(ExportFile, _BasePlugin);\n\n  var _super = _createSuper(ExportFile);\n\n  function ExportFile() {\n    _classCallCheck(this, ExportFile);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(ExportFile, [{\n    key: \"isEnabled\",\n    value:\n    /**\n     * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n     * hook and if it returns `true` than the {@link ExportFile#enablePlugin} method is called.\n     *\n     * @returns {boolean}\n     */\n    function isEnabled() {\n      return true;\n    }\n    /**\n     * @typedef ExportOptions\n     * @memberof ExportFile\n     * @type {object}\n     * @property {boolean} [exportHiddenRows=false] Include hidden rows in the exported file.\n     * @property {boolean} [exportHiddenColumns=false] Include hidden columns in the exported file.\n     * @property {boolean} [columnHeaders=false] Include column headers in the exported file.\n     * @property {boolean} [rowHeaders=false] Include row headers in the exported file.\n     * @property {string} [columnDelimiter=','] Column delimiter.\n     * @property {string} [range=[]] Cell range that will be exported to file.\n     */\n\n    /**\n     * Exports table data as a string.\n     *\n     * @param {string} format Export format type eq. `'csv'`.\n     * @param {ExportOptions} options Export options.\n     * @returns {string}\n     */\n\n  }, {\n    key: \"exportAsString\",\n    value: function exportAsString(format) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      return this._createTypeFormatter(format, options).export();\n    }\n    /**\n     * Exports table data as a blob object.\n     *\n     * @param {string} format Export format type eq. `'csv'`.\n     * @param {ExportOptions} options Export options.\n     * @returns {Blob}\n     */\n\n  }, {\n    key: \"exportAsBlob\",\n    value: function exportAsBlob(format) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      return this._createBlob(this._createTypeFormatter(format, options));\n    }\n    /**\n     * Exports table data as a downloadable file.\n     *\n     * @param {string} format Export format type eq. `'csv'`.\n     * @param {ExportOptions} options Export options.\n     */\n\n  }, {\n    key: \"downloadFile\",\n    value: function downloadFile(format) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var _this$hot = this.hot,\n          rootDocument = _this$hot.rootDocument,\n          rootWindow = _this$hot.rootWindow;\n\n      var formatter = this._createTypeFormatter(format, options);\n\n      var blob = this._createBlob(formatter);\n\n      var URL = rootWindow.URL || rootWindow.webkitURL;\n      var a = rootDocument.createElement('a');\n      var name = \"\".concat(formatter.options.filename, \".\").concat(formatter.options.fileExtension);\n\n      if (a.download !== void 0) {\n        var url = URL.createObjectURL(blob);\n        a.style.display = 'none';\n        a.setAttribute('href', url);\n        a.setAttribute('download', name);\n        rootDocument.body.appendChild(a);\n        a.dispatchEvent(new MouseEvent('click'));\n        rootDocument.body.removeChild(a);\n        setTimeout(function () {\n          URL.revokeObjectURL(url);\n        }, 100);\n      } else if (navigator.msSaveOrOpenBlob) {\n        // IE10+\n        navigator.msSaveOrOpenBlob(blob, name);\n      }\n    }\n    /**\n     * Creates and returns class formatter for specified export type.\n     *\n     * @private\n     * @param {string} format Export format type eq. `'csv'`.\n     * @param {ExportOptions} options Export options.\n     * @returns {BaseType}\n     */\n\n  }, {\n    key: \"_createTypeFormatter\",\n    value: function _createTypeFormatter(format) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (!EXPORT_TYPES[format]) {\n        throw new Error(\"Export format type \\\"\".concat(format, \"\\\" is not supported.\"));\n      }\n\n      return typeFactory(format, new DataProvider(this.hot), options);\n    }\n    /**\n     * Creates blob object based on provided type formatter class.\n     *\n     * @private\n     * @param {BaseType} typeFormatter The instance of the specyfic formatter/exporter.\n     * @returns {Blob}\n     */\n\n  }, {\n    key: \"_createBlob\",\n    value: function _createBlob(typeFormatter) {\n      var formatter = null;\n\n      if (typeof Blob !== 'undefined') {\n        formatter = new Blob([typeFormatter.export()], {\n          type: \"\".concat(typeFormatter.options.mimeType, \";charset=\").concat(typeFormatter.options.encoding)\n        });\n      }\n\n      return formatter;\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return ExportFile;\n}(BasePlugin);", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { rangeEach } from \"../../helpers/number.mjs\";\n/**\n * @private\n */\n\nvar DataProvider = /*#__PURE__*/function () {\n  function DataProvider(hotInstance) {\n    _classCallCheck(this, DataProvider);\n\n    /**\n     * Handsontable instance.\n     *\n     * @type {Core}\n     */\n    this.hot = hotInstance;\n    /**\n     * Format type class options.\n     *\n     * @type {object}\n     */\n\n    this.options = {};\n  }\n  /**\n   * Set options for data provider.\n   *\n   * @param {object} options Object with specified options.\n   */\n\n\n  _createClass(DataProvider, [{\n    key: \"setOptions\",\n    value: function setOptions(options) {\n      this.options = options;\n    }\n    /**\n     * Get table data based on provided settings to the class constructor.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getData\",\n    value: function getData() {\n      var _this = this;\n\n      var _this$_getDataRange = this._getDataRange(),\n          startRow = _this$_getDataRange.startRow,\n          startCol = _this$_getDataRange.startCol,\n          endRow = _this$_getDataRange.endRow,\n          endCol = _this$_getDataRange.endCol;\n\n      var options = this.options;\n      var data = [];\n      rangeEach(startRow, endRow, function (rowIndex) {\n        var row = [];\n\n        if (!options.exportHiddenRows && _this._isHiddenRow(rowIndex)) {\n          return;\n        }\n\n        rangeEach(startCol, endCol, function (colIndex) {\n          if (!options.exportHiddenColumns && _this._isHiddenColumn(colIndex)) {\n            return;\n          }\n\n          row.push(_this.hot.getDataAtCell(rowIndex, colIndex));\n        });\n        data.push(row);\n      });\n      return data;\n    }\n    /**\n     * Gets list of row headers.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getRowHeaders\",\n    value: function getRowHeaders() {\n      var _this2 = this;\n\n      var headers = [];\n\n      if (this.options.rowHeaders) {\n        var _this$_getDataRange2 = this._getDataRange(),\n            startRow = _this$_getDataRange2.startRow,\n            endRow = _this$_getDataRange2.endRow;\n\n        var rowHeaders = this.hot.getRowHeader();\n        rangeEach(startRow, endRow, function (row) {\n          if (!_this2.options.exportHiddenRows && _this2._isHiddenRow(row)) {\n            return;\n          }\n\n          headers.push(rowHeaders[row]);\n        });\n      }\n\n      return headers;\n    }\n    /**\n     * Gets list of columns headers.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getColumnHeaders\",\n    value: function getColumnHeaders() {\n      var _this3 = this;\n\n      var headers = [];\n\n      if (this.options.columnHeaders) {\n        var _this$_getDataRange3 = this._getDataRange(),\n            startCol = _this$_getDataRange3.startCol,\n            endCol = _this$_getDataRange3.endCol;\n\n        var colHeaders = this.hot.getColHeader();\n        rangeEach(startCol, endCol, function (column) {\n          if (!_this3.options.exportHiddenColumns && _this3._isHiddenColumn(column)) {\n            return;\n          }\n\n          headers.push(colHeaders[column]);\n        });\n      }\n\n      return headers;\n    }\n    /**\n     * Get data range object based on settings provided in the class constructor.\n     *\n     * @private\n     * @returns {object} Returns object with keys `startRow`, `startCol`, `endRow` and `endCol`.\n     */\n\n  }, {\n    key: \"_getDataRange\",\n    value: function _getDataRange() {\n      var cols = this.hot.countCols() - 1;\n      var rows = this.hot.countRows() - 1;\n\n      var _this$options$range = _slicedToArray(this.options.range, 4),\n          _this$options$range$ = _this$options$range[0],\n          startRow = _this$options$range$ === void 0 ? 0 : _this$options$range$,\n          _this$options$range$2 = _this$options$range[1],\n          startCol = _this$options$range$2 === void 0 ? 0 : _this$options$range$2,\n          _this$options$range$3 = _this$options$range[2],\n          endRow = _this$options$range$3 === void 0 ? rows : _this$options$range$3,\n          _this$options$range$4 = _this$options$range[3],\n          endCol = _this$options$range$4 === void 0 ? cols : _this$options$range$4;\n\n      startRow = Math.max(startRow, 0);\n      startCol = Math.max(startCol, 0);\n      endRow = Math.min(endRow, rows);\n      endCol = Math.min(endCol, cols);\n      return {\n        startRow: startRow,\n        startCol: startCol,\n        endRow: endRow,\n        endCol: endCol\n      };\n    }\n    /**\n     * Check if row at specified row index is hidden.\n     *\n     * @private\n     * @param {number} row Row index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"_isHiddenRow\",\n    value: function _isHiddenRow(row) {\n      return this.hot.rowIndexMapper.isHidden(this.hot.toPhysicalRow(row));\n    }\n    /**\n     * Check if column at specified column index is hidden.\n     *\n     * @private\n     * @param {number} column Visual column index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"_isHiddenColumn\",\n    value: function _isHiddenColumn(column) {\n      return this.hot.columnIndexMapper.isHidden(this.hot.toPhysicalColumn(column));\n    }\n  }]);\n\n  return DataProvider;\n}();\n\nexport default DataProvider;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.regexp.constructor.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { arrayEach, arrayMap } from \"../../../helpers/array.mjs\";\nimport { stringify } from \"../../../helpers/mixed.mjs\";\nimport BaseType from \"./_base.mjs\";\nvar CHAR_CARRIAGE_RETURN = String.fromCharCode(13);\nvar CHAR_DOUBLE_QUOTES = String.fromCharCode(34);\nvar CHAR_LINE_FEED = String.fromCharCode(10);\n/**\n * @private\n */\n\nvar Csv = /*#__PURE__*/function (_BaseType) {\n  _inherits(Csv, _BaseType);\n\n  var _super = _createSuper(Csv);\n\n  function Csv() {\n    _classCallCheck(this, Csv);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Csv, [{\n    key: \"export\",\n    value:\n    /**\n     * Create string body in desired format.\n     *\n     * @returns {string}\n     */\n    function _export() {\n      var _this = this;\n\n      var options = this.options;\n      var data = this.dataProvider.getData();\n      var columnHeaders = this.dataProvider.getColumnHeaders();\n      var hasColumnHeaders = columnHeaders.length > 0;\n      var rowHeaders = this.dataProvider.getRowHeaders();\n      var hasRowHeaders = rowHeaders.length > 0;\n      var result = options.bom ? String.fromCharCode(0xFEFF) : '';\n\n      if (hasColumnHeaders) {\n        columnHeaders = arrayMap(columnHeaders, function (value) {\n          return _this._escapeCell(value, true);\n        });\n\n        if (hasRowHeaders) {\n          result += options.columnDelimiter;\n        }\n\n        result += columnHeaders.join(options.columnDelimiter);\n        result += options.rowDelimiter;\n      }\n\n      arrayEach(data, function (value, index) {\n        if (index > 0) {\n          result += options.rowDelimiter;\n        }\n\n        if (hasRowHeaders) {\n          result += _this._escapeCell(rowHeaders[index]) + options.columnDelimiter;\n        }\n\n        result += value.map(function (cellValue) {\n          return _this._escapeCell(cellValue);\n        }).join(options.columnDelimiter);\n      });\n      return result;\n    }\n    /**\n     * Escape cell value.\n     *\n     * @param {*} value Cell value.\n     * @param {boolean} [force=false] Indicates if cell value will be escaped forcefully.\n     * @returns {string}\n     */\n\n  }, {\n    key: \"_escapeCell\",\n    value: function _escapeCell(value) {\n      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var escapedValue = stringify(value);\n\n      if (escapedValue !== '' && (force || escapedValue.indexOf(CHAR_CARRIAGE_RETURN) >= 0 || escapedValue.indexOf(CHAR_DOUBLE_QUOTES) >= 0 || escapedValue.indexOf(CHAR_LINE_FEED) >= 0 || escapedValue.indexOf(this.options.columnDelimiter) >= 0)) {\n        escapedValue = escapedValue.replace(new RegExp('\"', 'g'), '\"\"');\n        escapedValue = \"\\\"\".concat(escapedValue, \"\\\"\");\n      }\n\n      return escapedValue;\n    }\n  }], [{\n    key: \"DEFAULT_OPTIONS\",\n    get:\n    /**\n     * Default options for exporting CSV format.\n     *\n     * @returns {object}\n     */\n    function get() {\n      return {\n        mimeType: 'text/csv',\n        fileExtension: 'csv',\n        bom: true,\n        columnDelimiter: ',',\n        rowDelimiter: '\\r\\n'\n      };\n    }\n  }]);\n\n  return Csv;\n}(BaseType);\n\nexport default Csv;", "import \"core-js/modules/es.string.pad-start.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { extend, clone } from \"../../../helpers/object.mjs\";\nimport { substitute } from \"../../../helpers/string.mjs\";\n/**\n * @private\n */\n\nvar BaseType = /*#__PURE__*/function () {\n  function BaseType(dataProvider, options) {\n    _classCallCheck(this, BaseType);\n\n    /**\n     * Data provider.\n     *\n     * @type {DataProvider}\n     */\n    this.dataProvider = dataProvider;\n    /**\n     * Format type class options.\n     *\n     * @type {object}\n     */\n\n    this.options = this._mergeOptions(options);\n    this.dataProvider.setOptions(this.options);\n  }\n  /**\n   * Merge options provided by users with defaults.\n   *\n   * @param {object} options An object with options to merge with.\n   * @returns {object} Returns new options object.\n   */\n\n\n  _createClass(BaseType, [{\n    key: \"_mergeOptions\",\n    value: function _mergeOptions(options) {\n      var _options = clone(this.constructor.DEFAULT_OPTIONS);\n\n      var date = new Date();\n      _options = extend(clone(BaseType.DEFAULT_OPTIONS), _options);\n      _options = extend(_options, options);\n      _options.filename = substitute(_options.filename, {\n        YYYY: date.getFullYear(),\n        MM: \"\".concat(date.getMonth() + 1).padStart(2, '0'),\n        DD: \"\".concat(date.getDate()).padStart(2, '0')\n      });\n      return _options;\n    }\n  }], [{\n    key: \"DEFAULT_OPTIONS\",\n    get:\n    /**\n     * Default options.\n     *\n     * @returns {object}\n     */\n    function get() {\n      return {\n        mimeType: 'text/plain',\n        fileExtension: 'txt',\n        filename: 'Handsontable [YYYY]-[MM]-[DD]',\n        encoding: 'utf-8',\n        bom: false,\n        columnHeaders: false,\n        rowHeaders: false,\n        exportHiddenColumns: false,\n        exportHiddenRows: false,\n        range: []\n      };\n    }\n  }]);\n\n  return BaseType;\n}();\n\nexport default BaseType;", "function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport Csv from \"./types/csv.mjs\";\nexport var TYPE_CSV = 'csv';\nexport var TYPE_EXCEL = 'excel'; // TODO\n\nexport var TYPE_PDF = 'pdf'; // TODO\n\nexport var EXPORT_TYPES = _defineProperty({}, TYPE_CSV, Csv);\n/**\n * @private\n * @param {string} type The exporter type.\n * @param {DataProvider} dataProvider The data provider.\n * @param {object} options Constructor options for exporter class.\n * @returns {BaseType|null}\n */\n\nexport default function typeFactory(type, dataProvider, options) {\n  if (typeof EXPORT_TYPES[type] === 'function') {\n    return new EXPORT_TYPES[type](dataProvider, options);\n  }\n\n  return null;\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.object.freeze.js\";\n\nvar _templateObject;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.concat.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { arrayEach, arrayMap } from \"../../helpers/array.mjs\";\nimport { toSingleLine } from \"../../helpers/templateLiteralTag.mjs\";\nimport { warn } from \"../../helpers/console.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { addClass, removeClass, closest } from \"../../helpers/dom/element.mjs\";\nimport { SEPARATOR } from \"../contextMenu/predefinedItems.mjs\";\nimport * as constants from \"../../i18n/constants.mjs\";\nimport ConditionComponent from \"./component/condition.mjs\";\nimport OperatorsComponent from \"./component/operators.mjs\";\nimport ValueComponent from \"./component/value.mjs\";\nimport ActionBarComponent from \"./component/actionBar.mjs\";\nimport ConditionCollection from \"./conditionCollection.mjs\";\nimport DataFilter from \"./dataFilter.mjs\";\nimport ConditionUpdateObserver from \"./conditionUpdateObserver.mjs\";\nimport { createArrayAssertion, toEmptyString, unifyColumnValues } from \"./utils.mjs\";\nimport { CONDITION_NONE, CONDITION_BY_VALUE, OPERATION_AND, OPERATION_OR, OPERATION_OR_THEN_VARIABLE } from \"./constants.mjs\";\nimport { TrimmingMap } from \"../../translations/index.mjs\";\nexport var PLUGIN_KEY = 'filters';\nexport var PLUGIN_PRIORITY = 250;\n/**\n * @plugin Filters\n * @class Filters\n *\n * @description\n * The plugin allows filtering the table data either by the built-in component or with the API.\n *\n * See [the filtering demo](@/guides/columns/column-filter.md) for examples.\n *\n * @example\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   colHeaders: true,\n *   rowHeaders: true,\n *   dropdownMenu: true,\n *   filters: true\n * });\n * ```\n */\n\nexport var Filters = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(Filters, _BasePlugin);\n\n  var _super = _createSuper(Filters);\n\n  function Filters(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, Filters);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Instance of {@link EventManager}.\n     *\n     * @private\n     * @type {EventManager}\n     */\n\n    _this.eventManager = new EventManager(_assertThisInitialized(_this));\n    /**\n     * Instance of {@link DropdownMenu}.\n     *\n     * @private\n     * @type {DropdownMenu}\n     */\n\n    _this.dropdownMenuPlugin = null;\n    /**\n     * Instance of {@link ConditionCollection}.\n     *\n     * @private\n     * @type {ConditionCollection}\n     */\n\n    _this.conditionCollection = null;\n    /**\n     * Instance of {@link ConditionUpdateObserver}.\n     *\n     * @private\n     * @type {ConditionUpdateObserver}\n     */\n\n    _this.conditionUpdateObserver = null;\n    /**\n     * Map, where key is component identifier and value represent `BaseComponent` element or it derivatives.\n     *\n     * @private\n     * @type {Map}\n     */\n\n    _this.components = new Map([['filter_by_condition', null], ['filter_operators', null], ['filter_by_condition2', null], ['filter_by_value', null], ['filter_action_bar', null]]);\n    /**\n     * Object containing information about last selected column physical and visual index for added filter conditions.\n     *\n     * @private\n     * @type {object}\n     * @default null\n     */\n\n    _this.lastSelectedColumn = null;\n    /**\n     * Map of skipped rows by plugin.\n     *\n     * @private\n     * @type {null|TrimmingMap}\n     */\n\n    _this.filtersRowsMap = null; // One listener for the enable/disable functionality\n\n    _this.hot.addHook('afterGetColHeader', function (col, TH) {\n      return _this.onAfterGetColHeader(col, TH);\n    });\n\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link Filters#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(Filters, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      /* eslint-disable no-unneeded-ternary */\n      return this.hot.getSettings()[PLUGIN_KEY] ? true : false;\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.filtersRowsMap = this.hot.rowIndexMapper.registerMap(this.pluginName, new TrimmingMap());\n      this.dropdownMenuPlugin = this.hot.getPlugin('dropdownMenu');\n      var dropdownSettings = this.hot.getSettings().dropdownMenu;\n      var menuContainer = dropdownSettings && dropdownSettings.uiContainer || this.hot.rootDocument.body;\n\n      var addConfirmationHooks = function addConfirmationHooks(component) {\n        component.addLocalHook('accept', function () {\n          return _this2.onActionBarSubmit('accept');\n        });\n        component.addLocalHook('cancel', function () {\n          return _this2.onActionBarSubmit('cancel');\n        });\n        component.addLocalHook('change', function (command) {\n          return _this2.onComponentChange(component, command);\n        });\n        return component;\n      };\n\n      var filterByConditionLabel = function filterByConditionLabel() {\n        return \"\".concat(_this2.hot.getTranslatedPhrase(constants.FILTERS_DIVS_FILTER_BY_CONDITION), \":\");\n      };\n\n      var filterValueLabel = function filterValueLabel() {\n        return \"\".concat(_this2.hot.getTranslatedPhrase(constants.FILTERS_DIVS_FILTER_BY_VALUE), \":\");\n      };\n\n      if (!this.components.get('filter_by_condition')) {\n        var conditionComponent = new ConditionComponent(this.hot, {\n          id: 'filter_by_condition',\n          name: filterByConditionLabel,\n          addSeparator: false,\n          menuContainer: menuContainer\n        });\n        conditionComponent.addLocalHook('afterClose', function () {\n          return _this2.onSelectUIClosed();\n        });\n        this.components.set('filter_by_condition', addConfirmationHooks(conditionComponent));\n      }\n\n      if (!this.components.get('filter_operators')) {\n        this.components.set('filter_operators', new OperatorsComponent(this.hot, {\n          id: 'filter_operators',\n          name: 'Operators'\n        }));\n      }\n\n      if (!this.components.get('filter_by_condition2')) {\n        var _conditionComponent = new ConditionComponent(this.hot, {\n          id: 'filter_by_condition2',\n          name: '',\n          addSeparator: true,\n          menuContainer: menuContainer\n        });\n\n        _conditionComponent.addLocalHook('afterClose', function () {\n          return _this2.onSelectUIClosed();\n        });\n\n        this.components.set('filter_by_condition2', addConfirmationHooks(_conditionComponent));\n      }\n\n      if (!this.components.get('filter_by_value')) {\n        this.components.set('filter_by_value', addConfirmationHooks(new ValueComponent(this.hot, {\n          id: 'filter_by_value',\n          name: filterValueLabel\n        })));\n      }\n\n      if (!this.components.get('filter_action_bar')) {\n        this.components.set('filter_action_bar', addConfirmationHooks(new ActionBarComponent(this.hot, {\n          id: 'filter_action_bar',\n          name: 'Action bar'\n        })));\n      }\n\n      if (!this.conditionCollection) {\n        this.conditionCollection = new ConditionCollection(this.hot);\n      }\n\n      if (!this.conditionUpdateObserver) {\n        this.conditionUpdateObserver = new ConditionUpdateObserver(this.hot, this.conditionCollection, function (physicalColumn) {\n          return _this2.getDataMapAtColumn(physicalColumn);\n        });\n        this.conditionUpdateObserver.addLocalHook('update', function (conditionState) {\n          return _this2.updateComponents(conditionState);\n        });\n      }\n\n      this.components.forEach(function (component) {\n        return component.show();\n      });\n      this.registerEvents();\n      this.addHook('beforeDropdownMenuSetItems', function (items) {\n        return _this2.onBeforeDropdownMenuSetItems(items);\n      });\n      this.addHook('afterDropdownMenuDefaultOptions', function (defaultOptions) {\n        return _this2.onAfterDropdownMenuDefaultOptions(defaultOptions);\n      });\n      this.addHook('afterDropdownMenuShow', function () {\n        return _this2.onAfterDropdownMenuShow();\n      });\n      this.addHook('afterDropdownMenuHide', function () {\n        return _this2.onAfterDropdownMenuHide();\n      });\n      this.addHook('afterChange', function (changes) {\n        return _this2.onAfterChange(changes);\n      }); // Temp. solution (extending menu items bug in contextMenu/dropdownMenu)\n\n      if (this.hot.getSettings().dropdownMenu && this.dropdownMenuPlugin) {\n        this.dropdownMenuPlugin.disablePlugin();\n        this.dropdownMenuPlugin.enablePlugin();\n      }\n\n      _get(_getPrototypeOf(Filters.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Registers the DOM listeners.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"registerEvents\",\n    value: function registerEvents() {\n      var _this3 = this;\n\n      this.eventManager.addEventListener(this.hot.rootElement, 'click', function (event) {\n        return _this3.onTableClick(event);\n      });\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      var _this4 = this;\n\n      if (this.enabled) {\n        var _this$dropdownMenuPlu;\n\n        if ((_this$dropdownMenuPlu = this.dropdownMenuPlugin) !== null && _this$dropdownMenuPlu !== void 0 && _this$dropdownMenuPlu.enabled) {\n          this.dropdownMenuPlugin.menu.clearLocalHooks();\n        }\n\n        this.components.forEach(function (component, key) {\n          component.destroy();\n\n          _this4.components.set(key, null);\n        });\n        this.conditionCollection.destroy();\n        this.conditionCollection = null;\n        this.hot.rowIndexMapper.unregisterMap(this.pluginName);\n      }\n\n      _get(_getPrototypeOf(Filters.prototype), \"disablePlugin\", this).call(this);\n    }\n    /* eslint-disable jsdoc/require-description-complete-sentence */\n\n    /**\n     * @memberof Filters#\n     * @function addCondition\n     * @description\n     * Adds condition to the conditions collection at specified column index.\n     *\n     * Possible predefined conditions:\n     *  * `begins_with` - Begins with\n     *  * `between` - Between\n     *  * `by_value` - By value\n     *  * `contains` - Contains\n     *  * `empty` - Empty\n     *  * `ends_with` - Ends with\n     *  * `eq` - Equal\n     *  * `gt` - Greater than\n     *  * `gte` - Greater than or equal\n     *  * `lt` - Less than\n     *  * `lte` - Less than or equal\n     *  * `none` - None (no filter)\n     *  * `not_between` - Not between\n     *  * `not_contains` - Not contains\n     *  * `not_empty` - Not empty\n     *  * `neq` - Not equal.\n     *\n     * Possible operations on collection of conditions:\n     *  * `conjunction` - [**Conjunction**](https://en.wikipedia.org/wiki/Logical_conjunction) on conditions collection (by default), i.e. for such operation: <br/> c1 AND c2 AND c3 AND c4 ... AND cn === TRUE, where c1 ... cn are conditions.\n     *  * `disjunction` - [**Disjunction**](https://en.wikipedia.org/wiki/Logical_disjunction) on conditions collection, i.e. for such operation: <br/> c1 OR c2 OR c3 OR c4 ... OR cn === TRUE, where c1, c2, c3, c4 ... cn are conditions.\n     *  * `disjunctionWithExtraCondition` - **Disjunction** on first `n - 1`\\* conditions from collection with an extra requirement computed from the last condition, i.e. for such operation: <br/> c1 OR c2 OR c3 OR c4 ... OR cn-1 AND cn === TRUE, where c1, c2, c3, c4 ... cn are conditions.\n     *\n     * \\* when `n` is collection size; it's used i.e. for one operation introduced from UI (when choosing from filter's drop-down menu two conditions with OR operator between them, mixed with choosing values from the multiple choice select)\n     *\n     * **Note**: Mind that you cannot mix different types of operations (for instance, if you use `conjunction`, use it consequently for a particular column).\n     *\n     * @example\n     * ```js\n     * const container = document.getElementById('example');\n     * const hot = new Handsontable(container, {\n     *   data: getData(),\n     *   filters: true\n     * });\n     *\n     * // access to filters plugin instance\n     * const filtersPlugin = hot.getPlugin('filters');\n     *\n     * // add filter \"Greater than\" 95 to column at index 1\n     * filtersPlugin.addCondition(1, 'gt', [95]);\n     * filtersPlugin.filter();\n     *\n     * // add filter \"By value\" to column at index 1\n     * // in this case all value's that don't match will be filtered.\n     * filtersPlugin.addCondition(1, 'by_value', [['ing', 'ed', 'as', 'on']]);\n     * filtersPlugin.filter();\n     *\n     * // add filter \"Begins with\" with value \"de\" AND \"Not contains\" with value \"ing\"\n     * filtersPlugin.addCondition(1, 'begins_with', ['de'], 'conjunction');\n     * filtersPlugin.addCondition(1, 'not_contains', ['ing'], 'conjunction');\n     * filtersPlugin.filter();\n     *\n     * // add filter \"Begins with\" with value \"de\" OR \"Not contains\" with value \"ing\"\n     * filtersPlugin.addCondition(1, 'begins_with', ['de'], 'disjunction');\n     * filtersPlugin.addCondition(1, 'not_contains', ['ing'], 'disjunction');\n     * filtersPlugin.filter();\n     * ```\n     * @param {number} column Visual column index.\n     * @param {string} name Condition short name.\n     * @param {Array} args Condition arguments.\n     * @param {string} [operationId=conjunction] `id` of operation which is performed on the column.\n     */\n\n    /* eslint-enable jsdoc/require-description-complete-sentence */\n\n  }, {\n    key: \"addCondition\",\n    value: function addCondition(column, name, args) {\n      var operationId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : OPERATION_AND;\n      var physicalColumn = this.hot.toPhysicalColumn(column);\n      this.conditionCollection.addCondition(physicalColumn, {\n        command: {\n          key: name\n        },\n        args: args\n      }, operationId);\n    }\n    /**\n     * Removes conditions at specified column index.\n     *\n     * @param {number} column Visual column index.\n     */\n\n  }, {\n    key: \"removeConditions\",\n    value: function removeConditions(column) {\n      var physicalColumn = this.hot.toPhysicalColumn(column);\n      this.conditionCollection.removeConditions(physicalColumn);\n    }\n    /**\n     * Clears all conditions previously added to the collection for the specified column index or, if the column index\n     * was not passed, clear the conditions for all columns.\n     *\n     * @param {number} [column] Visual column index.\n     */\n\n  }, {\n    key: \"clearConditions\",\n    value: function clearConditions(column) {\n      if (column === void 0) {\n        this.conditionCollection.clean();\n      } else {\n        var physicalColumn = this.hot.toPhysicalColumn(column);\n        this.conditionCollection.removeConditions(physicalColumn);\n      }\n    }\n    /**\n     * Filters data based on added filter conditions.\n     *\n     * @fires Hooks#beforeFilter\n     * @fires Hooks#afterFilter\n     */\n\n  }, {\n    key: \"filter\",\n    value: function filter() {\n      var _this5 = this;\n\n      var dataFilter = this._createDataFilter();\n\n      var needToFilter = !this.conditionCollection.isEmpty();\n      var visibleVisualRows = [];\n      var conditions = this.conditionCollection.exportAllConditions();\n      var allowFiltering = this.hot.runHooks('beforeFilter', conditions);\n\n      if (allowFiltering !== false) {\n        if (needToFilter) {\n          var trimmedRows = [];\n          this.hot.batchExecution(function () {\n            _this5.filtersRowsMap.clear();\n\n            visibleVisualRows = arrayMap(dataFilter.filter(), function (rowData) {\n              return rowData.meta.visualRow;\n            });\n            var visibleVisualRowsAssertion = createArrayAssertion(visibleVisualRows);\n            rangeEach(_this5.hot.countSourceRows() - 1, function (row) {\n              if (!visibleVisualRowsAssertion(row)) {\n                trimmedRows.push(row);\n              }\n            });\n            arrayEach(trimmedRows, function (physicalRow) {\n              _this5.filtersRowsMap.setValueAtIndex(physicalRow, true);\n            });\n          }, true);\n\n          if (!visibleVisualRows.length) {\n            this.hot.deselectCell();\n          }\n        } else {\n          this.filtersRowsMap.clear();\n        }\n      }\n\n      this.hot.runHooks('afterFilter', conditions);\n      this.hot.view.adjustElementsSize(true);\n      this.hot.render();\n      this.clearColumnSelection();\n    }\n    /**\n     * Gets last selected column index.\n     *\n     * @returns {object|null} Return `null` when column isn't selected otherwise\n     * object containing information about selected column with keys `visualIndex` and `physicalIndex`.\n     */\n\n  }, {\n    key: \"getSelectedColumn\",\n    value: function getSelectedColumn() {\n      return this.lastSelectedColumn;\n    }\n    /**\n     * Clears column selection.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"clearColumnSelection\",\n    value: function clearColumnSelection() {\n      var _this$hot$getSelected;\n\n      var coords = (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.getTopLeftCorner();\n\n      if (coords !== void 0) {\n        this.hot.selectCell(coords.row, coords.col);\n      }\n    }\n    /**\n     * Returns handsontable source data with cell meta based on current selection.\n     *\n     * @param {number} [column] The physical column index. By default column index accept the value of the selected column.\n     * @returns {Array} Returns array of objects where keys as row index.\n     */\n\n  }, {\n    key: \"getDataMapAtColumn\",\n    value: function getDataMapAtColumn(column) {\n      var _this6 = this;\n\n      var visualIndex = this.hot.toVisualColumn(column);\n      var data = [];\n      arrayEach(this.hot.getSourceDataAtCol(visualIndex), function (value, rowIndex) {\n        var _this6$hot$getCellMet = _this6.hot.getCellMeta(rowIndex, visualIndex),\n            row = _this6$hot$getCellMet.row,\n            col = _this6$hot$getCellMet.col,\n            visualCol = _this6$hot$getCellMet.visualCol,\n            visualRow = _this6$hot$getCellMet.visualRow,\n            type = _this6$hot$getCellMet.type,\n            instance = _this6$hot$getCellMet.instance,\n            dateFormat = _this6$hot$getCellMet.dateFormat,\n            locale = _this6$hot$getCellMet.locale;\n\n        data.push({\n          meta: {\n            row: row,\n            col: col,\n            visualCol: visualCol,\n            visualRow: visualRow,\n            type: type,\n            instance: instance,\n            dateFormat: dateFormat,\n            locale: locale\n          },\n          value: toEmptyString(value)\n        });\n      });\n      return data;\n    }\n    /**\n     * `afterChange` listener.\n     *\n     * @private\n     * @param {Array} changes Array of changes.\n     */\n\n  }, {\n    key: \"onAfterChange\",\n    value: function onAfterChange(changes) {\n      var _this7 = this;\n\n      if (changes) {\n        arrayEach(changes, function (change) {\n          var _change = _slicedToArray(change, 2),\n              prop = _change[1];\n\n          var columnIndex = _this7.hot.propToCol(prop);\n\n          if (_this7.conditionCollection.hasConditions(columnIndex)) {\n            _this7.updateValueComponentCondition(columnIndex);\n          }\n        });\n      }\n    }\n    /**\n     * Update the condition of ValueComponent, based on the handled changes.\n     *\n     * @private\n     * @param {number} columnIndex Column index of handled ValueComponent condition.\n     */\n\n  }, {\n    key: \"updateValueComponentCondition\",\n    value: function updateValueComponentCondition(columnIndex) {\n      var dataAtCol = this.hot.getDataAtCol(columnIndex);\n      var selectedValues = unifyColumnValues(dataAtCol);\n      this.conditionUpdateObserver.updateStatesAtColumn(columnIndex, selectedValues);\n    }\n    /**\n     * Restores components to its saved state.\n     *\n     * @private\n     * @param {Array} components List of components.\n     */\n\n  }, {\n    key: \"restoreComponents\",\n    value: function restoreComponents(components) {\n      var _this$getSelectedColu;\n\n      var physicalIndex = (_this$getSelectedColu = this.getSelectedColumn()) === null || _this$getSelectedColu === void 0 ? void 0 : _this$getSelectedColu.physicalIndex;\n      components.forEach(function (component) {\n        if (component.isHidden()) {\n          return;\n        }\n\n        component.restoreState(physicalIndex);\n      });\n      this.updateDependentComponentsVisibility();\n    }\n    /**\n     * After dropdown menu show listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterDropdownMenuShow\",\n    value: function onAfterDropdownMenuShow() {\n      this.restoreComponents(Array.from(this.components.values()));\n    }\n    /**\n     * After dropdown menu hide listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterDropdownMenuHide\",\n    value: function onAfterDropdownMenuHide() {\n      this.components.get('filter_by_condition').getSelectElement().closeOptions();\n      this.components.get('filter_by_condition2').getSelectElement().closeOptions();\n    }\n    /**\n     * Before dropdown menu set menu items listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onBeforeDropdownMenuSetItems\",\n    value: function onBeforeDropdownMenuSetItems() {\n      var _this8 = this;\n\n      if (this.dropdownMenuPlugin) {\n        this.dropdownMenuPlugin.menu.addLocalHook('afterOpen', function () {\n          _this8.dropdownMenuPlugin.menu.hotMenu.updateSettings({\n            hiddenRows: true\n          });\n        });\n      }\n    }\n    /**\n     * After dropdown menu default options listener.\n     *\n     * @private\n     * @param {object} defaultOptions ContextMenu default item options.\n     */\n\n  }, {\n    key: \"onAfterDropdownMenuDefaultOptions\",\n    value: function onAfterDropdownMenuDefaultOptions(defaultOptions) {\n      defaultOptions.items.push({\n        name: SEPARATOR\n      });\n      this.components.forEach(function (component) {\n        defaultOptions.items.push(component.getMenuItemDescriptor());\n      });\n    }\n    /**\n     * Get an operation, based on the number and types of arguments (where arguments are states of components).\n     *\n     * @param {string} suggestedOperation Operation which was chosen by user from UI.\n     * @param {object} byConditionState1 State of first condition component.\n     * @param {object} byConditionState2 State of second condition component.\n     * @param {object} byValueState State of value component.\n     * @private\n     * @returns {string}\n     */\n\n  }, {\n    key: \"getOperationBasedOnArguments\",\n    value: function getOperationBasedOnArguments(suggestedOperation, byConditionState1, byConditionState2, byValueState) {\n      var operation = suggestedOperation;\n\n      if (operation === OPERATION_OR && byConditionState1.command.key !== CONDITION_NONE && byConditionState2.command.key !== CONDITION_NONE && byValueState.command.key !== CONDITION_NONE) {\n        operation = OPERATION_OR_THEN_VARIABLE;\n      } else if (byValueState.command.key !== CONDITION_NONE) {\n        if (byConditionState1.command.key === CONDITION_NONE || byConditionState2.command.key === CONDITION_NONE) {\n          operation = OPERATION_AND;\n        }\n      }\n\n      return operation;\n    }\n    /**\n     * On action bar submit listener.\n     *\n     * @private\n     * @param {string} submitType The submit type.\n     */\n\n  }, {\n    key: \"onActionBarSubmit\",\n    value: function onActionBarSubmit(submitType) {\n      if (submitType === 'accept') {\n        var _this$getSelectedColu2;\n\n        var physicalIndex = (_this$getSelectedColu2 = this.getSelectedColumn()) === null || _this$getSelectedColu2 === void 0 ? void 0 : _this$getSelectedColu2.physicalIndex;\n        var byConditionState1 = this.components.get('filter_by_condition').getState();\n        var byConditionState2 = this.components.get('filter_by_condition2').getState();\n        var byValueState = this.components.get('filter_by_value').getState();\n        var operation = this.getOperationBasedOnArguments(this.components.get('filter_operators').getActiveOperationId(), byConditionState1, byConditionState2, byValueState);\n        this.conditionUpdateObserver.groupChanges();\n        var columnStackPosition = this.conditionCollection.getColumnStackPosition(physicalIndex);\n\n        if (columnStackPosition === -1) {\n          columnStackPosition = void 0;\n        }\n\n        this.conditionCollection.removeConditions(physicalIndex);\n\n        if (byConditionState1.command.key !== CONDITION_NONE) {\n          this.conditionCollection.addCondition(physicalIndex, byConditionState1, operation, columnStackPosition);\n\n          if (byConditionState2.command.key !== CONDITION_NONE) {\n            this.conditionCollection.addCondition(physicalIndex, byConditionState2, operation, columnStackPosition);\n          }\n        }\n\n        if (byValueState.command.key !== CONDITION_NONE) {\n          this.conditionCollection.addCondition(physicalIndex, byValueState, operation, columnStackPosition);\n        }\n\n        this.conditionUpdateObserver.flush();\n        this.components.forEach(function (component) {\n          return component.saveState(physicalIndex);\n        });\n        this.filtersRowsMap.clear();\n        this.filter();\n      }\n\n      if (this.dropdownMenuPlugin) {\n        this.dropdownMenuPlugin.close();\n      }\n    }\n    /**\n     * On component change listener.\n     *\n     * @private\n     * @param {BaseComponent} component Component inheriting BaseComponent.\n     * @param {object} command Menu item object (command).\n     */\n\n  }, {\n    key: \"onComponentChange\",\n    value: function onComponentChange(component, command) {\n      this.updateDependentComponentsVisibility();\n\n      if (component.constructor === ConditionComponent && !command.inputsCount) {\n        this.setListeningDropdownMenu();\n      }\n    }\n    /**\n     * On component SelectUI closed listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onSelectUIClosed\",\n    value: function onSelectUIClosed() {\n      this.setListeningDropdownMenu();\n    }\n    /**\n     * Listen to the keyboard input on document body and forward events to instance of Handsontable\n     * created by DropdownMenu plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"setListeningDropdownMenu\",\n    value: function setListeningDropdownMenu() {\n      if (this.dropdownMenuPlugin) {\n        this.dropdownMenuPlugin.setListening();\n      }\n    }\n    /**\n     * Updates visibility of some of the components, based on the state of the parent component.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"updateDependentComponentsVisibility\",\n    value: function updateDependentComponentsVisibility() {\n      var component = this.components.get('filter_by_condition');\n\n      var _component$getState = component.getState(),\n          command = _component$getState.command;\n\n      var componentsToShow = [this.components.get('filter_by_condition2'), this.components.get('filter_operators')];\n\n      if (command.showOperators) {\n        this.showComponents.apply(this, componentsToShow);\n      } else {\n        this.hideComponents.apply(this, componentsToShow);\n      }\n    }\n    /**\n     * On after get column header listener.\n     *\n     * @private\n     * @param {number} col Visual column index.\n     * @param {HTMLTableCellElement} TH Header's TH element.\n     */\n\n  }, {\n    key: \"onAfterGetColHeader\",\n    value: function onAfterGetColHeader(col, TH) {\n      var physicalColumn = this.hot.toPhysicalColumn(col);\n\n      if (this.enabled && this.conditionCollection.hasConditions(physicalColumn)) {\n        addClass(TH, 'htFiltersActive');\n      } else {\n        removeClass(TH, 'htFiltersActive');\n      }\n    }\n    /**\n     * On table click listener.\n     *\n     * @private\n     * @param {Event} event DOM Event.\n     */\n\n  }, {\n    key: \"onTableClick\",\n    value: function onTableClick(event) {\n      var th = closest(event.target, 'TH');\n\n      if (th) {\n        var visualIndex = this.hot.getCoords(th).col;\n        var physicalIndex = this.hot.toPhysicalColumn(visualIndex);\n        this.lastSelectedColumn = {\n          visualIndex: visualIndex,\n          physicalIndex: physicalIndex\n        };\n      }\n    }\n    /**\n     * Creates DataFilter instance based on condition collection.\n     *\n     * @private\n     * @param {ConditionCollection} conditionCollection Condition collection object.\n     * @returns {DataFilter}\n     */\n\n  }, {\n    key: \"_createDataFilter\",\n    value: function _createDataFilter() {\n      var _this9 = this;\n\n      var conditionCollection = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.conditionCollection;\n      return new DataFilter(conditionCollection, function (physicalColumn) {\n        return _this9.getDataMapAtColumn(physicalColumn);\n      });\n    }\n    /**\n     * It updates the components state. The state is triggered by ConditionUpdateObserver, which\n     * reacts to any condition added to the condition collection. It may be added through the UI\n     * components or by API call.\n     *\n     * @private\n     * @param {object} conditionsState An object with the state generated by UI components.\n     */\n\n  }, {\n    key: \"updateComponents\",\n    value: function updateComponents(conditionsState) {\n      var _this$dropdownMenuPlu2;\n\n      if (!((_this$dropdownMenuPlu2 = this.dropdownMenuPlugin) !== null && _this$dropdownMenuPlu2 !== void 0 && _this$dropdownMenuPlu2.enabled)) {\n        return;\n      }\n\n      var _conditionsState$edit = conditionsState.editedConditionStack,\n          conditions = _conditionsState$edit.conditions,\n          column = _conditionsState$edit.column;\n      var conditionsByValue = conditions.filter(function (condition) {\n        return condition.name === CONDITION_BY_VALUE;\n      });\n      var conditionsWithoutByValue = conditions.filter(function (condition) {\n        return condition.name !== CONDITION_BY_VALUE;\n      });\n\n      if (conditionsByValue.length >= 2 || conditionsWithoutByValue.length >= 3) {\n        warn(toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"The filter conditions have been applied properly, but couldn\\u2019t be displayed visually. \\n        The overall amount of conditions exceed the capability of the dropdown menu. \\n        For more details see the documentation.\"], [\"The filter conditions have been applied properly, but couldn\\u2019t be displayed visually.\\\\x20\\n        The overall amount of conditions exceed the capability of the dropdown menu.\\\\x20\\n        For more details see the documentation.\"]))));\n      } else {\n        var operationType = this.conditionCollection.getOperation(column);\n        this.components.get('filter_by_condition').updateState(conditionsWithoutByValue[0], column);\n        this.components.get('filter_by_condition2').updateState(conditionsWithoutByValue[1], column);\n        this.components.get('filter_operators').updateState(operationType, column);\n        this.components.get('filter_by_value').updateState(conditionsState);\n      }\n    }\n    /**\n     * Returns indexes of passed components inside list of `dropdownMenu` items.\n     *\n     * @private\n     * @param {...BaseComponent} components List of components.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getIndexesOfComponents\",\n    value: function getIndexesOfComponents() {\n      var indexes = [];\n\n      if (!this.dropdownMenuPlugin) {\n        return indexes;\n      }\n\n      var menu = this.dropdownMenuPlugin.menu;\n\n      for (var _len = arguments.length, components = new Array(_len), _key = 0; _key < _len; _key++) {\n        components[_key] = arguments[_key];\n      }\n\n      arrayEach(components, function (component) {\n        arrayEach(menu.menuItems, function (item, index) {\n          if (item.key === component.getMenuItemDescriptor().key) {\n            indexes.push(index);\n          }\n        });\n      });\n      return indexes;\n    }\n    /**\n     * Changes visibility of component.\n     *\n     * @private\n     * @param {boolean} visible Determine if components should be visible.\n     * @param {...BaseComponent} components List of components.\n     */\n\n  }, {\n    key: \"changeComponentsVisibility\",\n    value: function changeComponentsVisibility() {\n      var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      if (!this.dropdownMenuPlugin) {\n        return;\n      }\n\n      var menu = this.dropdownMenuPlugin.menu;\n      var hotMenu = menu.hotMenu;\n      var hiddenRows = hotMenu.getPlugin('hiddenRows');\n\n      for (var _len2 = arguments.length, components = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        components[_key2 - 1] = arguments[_key2];\n      }\n\n      var indexes = this.getIndexesOfComponents.apply(this, components);\n\n      if (visible) {\n        hiddenRows.showRows(indexes);\n      } else {\n        hiddenRows.hideRows(indexes);\n      }\n\n      hotMenu.render();\n    }\n    /**\n     * Hides components of filters `dropdownMenu`.\n     *\n     * @private\n     * @param {...BaseComponent} components List of components.\n     */\n\n  }, {\n    key: \"hideComponents\",\n    value: function hideComponents() {\n      for (var _len3 = arguments.length, components = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        components[_key3] = arguments[_key3];\n      }\n\n      this.changeComponentsVisibility.apply(this, [false].concat(components));\n    }\n    /**\n     * Shows components of filters `dropdownMenu`.\n     *\n     * @private\n     * @param {...BaseComponent} components List of components.\n     */\n\n  }, {\n    key: \"showComponents\",\n    value: function showComponents() {\n      for (var _len4 = arguments.length, components = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        components[_key4] = arguments[_key4];\n      }\n\n      this.changeComponentsVisibility.apply(this, [true].concat(components));\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this10 = this;\n\n      if (this.enabled) {\n        this.components.forEach(function (component, key) {\n          if (component !== null) {\n            component.destroy();\n\n            _this10.components.set(key, null);\n          }\n        });\n        this.conditionCollection.destroy();\n        this.conditionUpdateObserver.destroy();\n        this.hot.rowIndexMapper.unregisterMap(this.pluginName);\n      }\n\n      _get(_getPrototypeOf(Filters.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }, {\n    key: \"PLUGIN_DEPS\",\n    get: function get() {\n      return ['plugin:DropdownMenu', 'plugin:HiddenRows', 'cell-type:checkbox'];\n    }\n  }]);\n\n  return Filters;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.string.starts-with.js\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { addClass } from \"../../../helpers/dom/element.mjs\";\nimport { stopImmediatePropagation } from \"../../../helpers/dom/event.mjs\";\nimport { arrayEach } from \"../../../helpers/array.mjs\";\nimport { isKey } from \"../../../helpers/unicode.mjs\";\nimport { clone } from \"../../../helpers/object.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nimport BaseComponent from \"./_base.mjs\";\nimport getOptionsList, { CONDITION_NONE } from \"../constants.mjs\";\nimport InputUI from \"../ui/input.mjs\";\nimport SelectUI from \"../ui/select.mjs\";\nimport { getConditionDescriptor } from \"../conditionRegisterer.mjs\";\n/**\n * @private\n * @class ConditionComponent\n */\n\nvar ConditionComponent = /*#__PURE__*/function (_BaseComponent) {\n  _inherits(ConditionComponent, _BaseComponent);\n\n  var _super = _createSuper(ConditionComponent);\n\n  function ConditionComponent(hotInstance, options) {\n    var _this;\n\n    _classCallCheck(this, ConditionComponent);\n\n    _this = _super.call(this, hotInstance, {\n      id: options.id,\n      stateless: false\n    });\n    _this.name = options.name;\n    _this.addSeparator = options.addSeparator;\n\n    _this.elements.push(new SelectUI(_this.hot, {\n      menuContainer: options.menuContainer\n    }));\n\n    _this.elements.push(new InputUI(_this.hot, {\n      placeholder: C.FILTERS_BUTTONS_PLACEHOLDER_VALUE\n    }));\n\n    _this.elements.push(new InputUI(_this.hot, {\n      placeholder: C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE\n    }));\n\n    _this.registerHooks();\n\n    return _this;\n  }\n  /**\n   * Register all necessary hooks.\n   *\n   * @private\n   */\n\n\n  _createClass(ConditionComponent, [{\n    key: \"registerHooks\",\n    value: function registerHooks() {\n      var _this2 = this;\n\n      this.getSelectElement().addLocalHook('select', function (command) {\n        return _this2.onConditionSelect(command);\n      });\n      this.getSelectElement().addLocalHook('afterClose', function () {\n        return _this2.onSelectUIClosed();\n      });\n      arrayEach(this.getInputElements(), function (input) {\n        input.addLocalHook('keydown', function (event) {\n          return _this2.onInputKeyDown(event);\n        });\n      });\n    }\n    /**\n     * Set state of the component.\n     *\n     * @param {object} value State to restore.\n     */\n\n  }, {\n    key: \"setState\",\n    value: function setState(value) {\n      var _this3 = this;\n\n      this.reset();\n\n      if (!value) {\n        return;\n      }\n\n      var copyOfCommand = clone(value.command);\n\n      if (copyOfCommand.name.startsWith(C.FILTERS_CONDITIONS_NAMESPACE)) {\n        copyOfCommand.name = this.hot.getTranslatedPhrase(copyOfCommand.name);\n      }\n\n      this.getSelectElement().setValue(copyOfCommand);\n      arrayEach(value.args, function (arg, index) {\n        if (index > copyOfCommand.inputsCount - 1) {\n          return false;\n        }\n\n        var element = _this3.getInputElement(index);\n\n        element.setValue(arg);\n        element[copyOfCommand.inputsCount > index ? 'show' : 'hide']();\n\n        if (!index) {\n          setTimeout(function () {\n            return element.focus();\n          }, 10);\n        }\n      });\n    }\n    /**\n     * Export state of the component (get selected filter and filter arguments).\n     *\n     * @returns {object} Returns object where `command` key keeps used condition filter and `args` key its arguments.\n     */\n\n  }, {\n    key: \"getState\",\n    value: function getState() {\n      var command = this.getSelectElement().getValue() || getConditionDescriptor(CONDITION_NONE);\n      var args = [];\n      arrayEach(this.getInputElements(), function (element, index) {\n        if (command.inputsCount > index) {\n          args.push(element.getValue());\n        }\n      });\n      return {\n        command: command,\n        args: args\n      };\n    }\n    /**\n     * Update state of component.\n     *\n     * @param {object} condition The condition object.\n     * @param {object} condition.command The command object with condition name as `key` property.\n     * @param {Array} condition.args An array of values to compare.\n     * @param {number} column Physical column index.\n     */\n\n  }, {\n    key: \"updateState\",\n    value: function updateState(condition, column) {\n      var command = condition ? getConditionDescriptor(condition.name) : getConditionDescriptor(CONDITION_NONE);\n      this.state.setValueAtIndex(column, {\n        command: command,\n        args: condition ? condition.args : []\n      });\n\n      if (!condition) {\n        arrayEach(this.getInputElements(), function (element) {\n          return element.setValue(null);\n        });\n      }\n    }\n    /**\n     * Get select element.\n     *\n     * @returns {SelectUI}\n     */\n\n  }, {\n    key: \"getSelectElement\",\n    value: function getSelectElement() {\n      return this.elements.filter(function (element) {\n        return element instanceof SelectUI;\n      })[0];\n    }\n    /**\n     * Get input element.\n     *\n     * @param {number} index Index an array of elements.\n     * @returns {InputUI}\n     */\n\n  }, {\n    key: \"getInputElement\",\n    value: function getInputElement() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      return this.getInputElements()[index];\n    }\n    /**\n     * Get input elements.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getInputElements\",\n    value: function getInputElements() {\n      return this.elements.filter(function (element) {\n        return element instanceof InputUI;\n      });\n    }\n    /**\n     * Get menu object descriptor.\n     *\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getMenuItemDescriptor\",\n    value: function getMenuItemDescriptor() {\n      var _this4 = this;\n\n      return {\n        key: this.id,\n        name: this.name,\n        isCommand: false,\n        disableSelection: true,\n        hidden: function hidden() {\n          return _this4.isHidden();\n        },\n        renderer: function renderer(hot, wrapper, row, col, prop, value) {\n          addClass(wrapper.parentNode, 'htFiltersMenuCondition');\n\n          if (_this4.addSeparator) {\n            addClass(wrapper.parentNode, 'border');\n          }\n\n          var label = _this4.hot.rootDocument.createElement('div');\n\n          addClass(label, 'htFiltersMenuLabel');\n          label.textContent = value;\n          wrapper.appendChild(label);\n\n          if (!wrapper.parentNode.hasAttribute('ghost-table')) {\n            arrayEach(_this4.elements, function (ui) {\n              return wrapper.appendChild(ui.element);\n            });\n          }\n\n          return wrapper;\n        }\n      };\n    }\n    /**\n     * Reset elements to their initial state.\n     */\n\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      var _this$hot;\n\n      var lastSelectedColumn = this.hot.getPlugin('filters').getSelectedColumn();\n      var visualIndex = lastSelectedColumn && lastSelectedColumn.visualIndex;\n\n      var columnType = (_this$hot = this.hot).getDataType.apply(_this$hot, _toConsumableArray(this.hot.getSelectedLast() || [0, visualIndex]));\n\n      var items = getOptionsList(columnType);\n      arrayEach(this.getInputElements(), function (element) {\n        return element.hide();\n      });\n      this.getSelectElement().setItems(items);\n\n      _get(_getPrototypeOf(ConditionComponent.prototype), \"reset\", this).call(this); // Select element as default 'None'\n\n\n      this.getSelectElement().setValue(items[0]);\n    }\n    /**\n     * On condition select listener.\n     *\n     * @private\n     * @param {object} command Menu item object (command).\n     */\n\n  }, {\n    key: \"onConditionSelect\",\n    value: function onConditionSelect(command) {\n      arrayEach(this.getInputElements(), function (element, index) {\n        element[command.inputsCount > index ? 'show' : 'hide']();\n\n        if (index === 0) {\n          setTimeout(function () {\n            return element.focus();\n          }, 10);\n        }\n      });\n      this.runLocalHooks('change', command);\n    }\n    /**\n     * On component SelectUI closed listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onSelectUIClosed\",\n    value: function onSelectUIClosed() {\n      this.runLocalHooks('afterClose');\n    }\n    /**\n     * Key down listener.\n     *\n     * @private\n     * @param {Event} event The DOM event object.\n     */\n\n  }, {\n    key: \"onInputKeyDown\",\n    value: function onInputKeyDown(event) {\n      if (isKey(event.keyCode, 'ENTER')) {\n        this.runLocalHooks('accept');\n        stopImmediatePropagation(event);\n      } else if (isKey(event.keyCode, 'ESCAPE')) {\n        this.runLocalHooks('cancel');\n        stopImmediatePropagation(event);\n      }\n    }\n  }]);\n\n  return ConditionComponent;\n}(BaseComponent);\n\nexport default ConditionComponent;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { arrayEach } from \"../../../helpers/array.mjs\";\nimport { mixin } from \"../../../helpers/object.mjs\";\nimport localHooks from \"../../../mixins/localHooks.mjs\";\nimport { LinkedPhysicalIndexToValueMap as IndexToValueMap } from \"../../../translations/index.mjs\";\n/**\n * @private\n * @class BaseComponent\n */\n\nvar BaseComponent = /*#__PURE__*/function () {\n  function BaseComponent(hotInstance, _ref) {\n    var id = _ref.id,\n        _ref$stateless = _ref.stateless,\n        stateless = _ref$stateless === void 0 ? true : _ref$stateless;\n\n    _classCallCheck(this, BaseComponent);\n\n    /**\n     * The Handsontable instance.\n     *\n     * @type {Core}\n     */\n    this.hot = hotInstance;\n    /**\n     * The component uniq id.\n     *\n     * @type {string}\n     */\n\n    this.id = id;\n    /**\n     * List of registered component UI elements.\n     *\n     * @type {Array}\n     */\n\n    this.elements = [];\n    /**\n     * Flag which determines if element is hidden.\n     *\n     * @type {boolean}\n     */\n\n    this.hidden = false;\n    /**\n     * The component states id.\n     *\n     * @type {string}\n     */\n\n    this.stateId = \"Filters.component.\".concat(this.id);\n    /**\n     * Index map which stores component states for each column.\n     *\n     * @type {LinkedPhysicalIndexToValueMap|null}\n     */\n\n    this.state = stateless ? null : this.hot.columnIndexMapper.registerMap(this.stateId, new IndexToValueMap());\n  }\n  /**\n   * Reset elements to its initial state.\n   */\n\n\n  _createClass(BaseComponent, [{\n    key: \"reset\",\n    value: function reset() {\n      arrayEach(this.elements, function (ui) {\n        return ui.reset();\n      });\n    }\n    /**\n     * Hide component.\n     */\n\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.hidden = true;\n    }\n    /**\n     * Show component.\n     */\n\n  }, {\n    key: \"show\",\n    value: function show() {\n      this.hidden = false;\n    }\n    /**\n     * Check if component is hidden.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isHidden\",\n    value: function isHidden() {\n      return this.hot === null || this.hidden;\n    }\n    /**\n     * Restores the component state from the given physical column index. The method\n     * internally calls the `setState` method. The state then is individually processed\n     * by each component.\n     *\n     * @param {number} physicalColumn The physical column index.\n     */\n\n  }, {\n    key: \"restoreState\",\n    value: function restoreState(physicalColumn) {\n      if (this.state) {\n        this.setState(this.state.getValueAtIndex(physicalColumn));\n      }\n    }\n    /**\n     * The custom logic for component state restoring.\n     */\n\n  }, {\n    key: \"setState\",\n    value: function setState() {\n      throw new Error('The state setting logic is not implemented');\n    }\n    /**\n     * Saves the component state to the given physical column index. The method\n     * internally calls the `getState` method, which returns the current state of\n     * the component.\n     *\n     * @param {number} physicalColumn The physical column index.\n     */\n\n  }, {\n    key: \"saveState\",\n    value: function saveState(physicalColumn) {\n      if (this.state) {\n        this.state.setValueAtIndex(physicalColumn, this.getState());\n      }\n    }\n    /**\n     * The custom logic for component state gathering (for stateful components).\n     */\n\n  }, {\n    key: \"getState\",\n    value: function getState() {\n      throw new Error('The state gathering logic is not implemented');\n    }\n    /**\n     * Destroy element.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.hot.columnIndexMapper.unregisterMap(this.stateId);\n      this.clearLocalHooks();\n      arrayEach(this.elements, function (ui) {\n        return ui.destroy();\n      });\n      this.state = null;\n      this.elements = null;\n      this.hot = null;\n    }\n  }]);\n\n  return BaseComponent;\n}();\n\nmixin(BaseComponent, localHooks);\nexport default BaseComponent;", "import \"core-js/modules/es.array.concat.js\";\nexport var conditions = {};\n/**\n * Get condition closure with pre-bound arguments.\n *\n * @param {string} name Condition name.\n * @param {Array} args Condition arguments.\n * @returns {Function}\n */\n\nexport function getCondition(name, args) {\n  if (!conditions[name]) {\n    throw Error(\"Filter condition \\\"\".concat(name, \"\\\" does not exist.\"));\n  }\n\n  var _conditions$name = conditions[name],\n      condition = _conditions$name.condition,\n      descriptor = _conditions$name.descriptor;\n  var conditionArguments = args;\n\n  if (descriptor.inputValuesDecorator) {\n    conditionArguments = descriptor.inputValuesDecorator(conditionArguments);\n  }\n\n  return function (dataRow) {\n    return condition.apply(dataRow.meta.instance, [].concat([dataRow], [conditionArguments]));\n  };\n}\n/**\n * Get condition object descriptor which defines some additional informations about this condition.\n *\n * @param {string} name Condition name.\n * @returns {object}\n */\n\nexport function getConditionDescriptor(name) {\n  if (!conditions[name]) {\n    throw Error(\"Filter condition \\\"\".concat(name, \"\\\" does not exist.\"));\n  }\n\n  return conditions[name].descriptor;\n}\n/**\n * Condition registerer.\n *\n * @param {string} name Condition name.\n * @param {Function} condition Condition function.\n * @param {object} descriptor Condition descriptor.\n */\n\nexport function registerCondition(name, condition, descriptor) {\n  descriptor.key = name;\n  conditions[name] = {\n    condition: condition,\n    descriptor: descriptor\n  };\n}", "import * as C from \"../../../i18n/constants.mjs\";\nimport { registerCondition } from \"../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'none';\n/**\n * @returns {boolean}\n */\n\nexport function condition() {\n  return true;\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NONE,\n  inputsCount: 0,\n  showOperators: false\n});", "import * as C from \"../../../i18n/constants.mjs\";\nimport { registerCondition } from \"../conditionRegisterer.mjs\";\nimport { isEmpty } from \"../../../helpers/mixed.mjs\";\nexport var CONDITION_NAME = 'empty';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @returns {boolean}\n */\n\nexport function condition(dataRow) {\n  return isEmpty(dataRow.value);\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_EMPTY,\n  inputsCount: 0,\n  showOperators: true\n});", "import * as C from \"../../../i18n/constants.mjs\";\nimport { registerCondition, getCondition } from \"../conditionRegisterer.mjs\";\nimport { CONDITION_NAME as CONDITION_EMPTY } from \"./empty.mjs\";\nexport var CONDITION_NAME = 'not_empty';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, inputValues) {\n  return !getCondition(CONDITION_EMPTY, inputValues)(dataRow);\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NOT_EMPTY,\n  inputsCount: 0,\n  showOperators: true\n});", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { stringify } from \"../../../helpers/mixed.mjs\";\nimport { registerCondition } from \"../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'eq';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {Array} inputValues.\"0\" Value to check if it same as row's data.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, _ref) {\n  var _ref2 = _slicedToArray(_ref, 1),\n      value = _ref2[0];\n\n  return stringify(dataRow.value).toLocaleLowerCase(dataRow.meta.locale) === stringify(value);\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_EQUAL,\n  inputsCount: 1,\n  showOperators: true\n});", "import * as C from \"../../../i18n/constants.mjs\";\nimport { registerCondition, getCondition } from \"../conditionRegisterer.mjs\";\nimport { CONDITION_NAME as CONDITION_EQUAL } from \"./equal.mjs\";\nexport var CONDITION_NAME = 'neq';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, inputValues) {\n  return !getCondition(CONDITION_EQUAL, inputValues)(dataRow);\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NOT_EQUAL,\n  inputsCount: 1,\n  showOperators: true\n});", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { registerCondition } from \"../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'gt';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {any} inputValues.\"0\" Condition value to compare numbers.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, _ref) {\n  var _ref2 = _slicedToArray(_ref, 1),\n      value = _ref2[0];\n\n  var conditionValue = value;\n\n  if (dataRow.meta.type === 'numeric') {\n    conditionValue = parseFloat(conditionValue, 10);\n  }\n\n  return dataRow.value > conditionValue;\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_GREATER_THAN,\n  inputsCount: 1,\n  showOperators: true\n});", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { registerCondition } from \"../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'gte';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Condition value to compare numbers.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, _ref) {\n  var _ref2 = _slicedToArray(_ref, 1),\n      value = _ref2[0];\n\n  var conditionValue = value;\n\n  if (dataRow.meta.type === 'numeric') {\n    conditionValue = parseFloat(conditionValue, 10);\n  }\n\n  return dataRow.value >= conditionValue;\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL,\n  inputsCount: 1,\n  showOperators: true\n});", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { registerCondition } from \"../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'lt';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Condition value to compare numbers.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, _ref) {\n  var _ref2 = _slicedToArray(_ref, 1),\n      value = _ref2[0];\n\n  var conditionValue = value;\n\n  if (dataRow.meta.type === 'numeric') {\n    conditionValue = parseFloat(conditionValue, 10);\n  }\n\n  return dataRow.value < conditionValue;\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_LESS_THAN,\n  inputsCount: 1,\n  showOperators: true\n});", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { registerCondition } from \"../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'lte';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Condition value to compare numbers.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, _ref) {\n  var _ref2 = _slicedToArray(_ref, 1),\n      value = _ref2[0];\n\n  var conditionValue = value;\n\n  if (dataRow.meta.type === 'numeric') {\n    conditionValue = parseFloat(conditionValue, 10);\n  }\n\n  return dataRow.value <= conditionValue;\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL,\n  inputsCount: 1,\n  showOperators: true\n});", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { registerCondition, getCondition } from \"../conditionRegisterer.mjs\";\nimport { CONDITION_NAME as CONDITION_DATE_AFTER } from \"./date/after.mjs\";\nimport { CONDITION_NAME as CONDITION_DATE_BEFORE } from \"./date/before.mjs\";\nexport var CONDITION_NAME = 'between';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {number} inputValues.\"0\" The minimum value of the range.\n * @param {number} inputValues.\"1\" The maximum value of the range.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, _ref) {\n  var _ref2 = _slicedToArray(_ref, 2),\n      from = _ref2[0],\n      to = _ref2[1];\n\n  var fromValue = from;\n  var toValue = to;\n\n  if (dataRow.meta.type === 'numeric') {\n    var _from = parseFloat(fromValue, 10);\n\n    var _to = parseFloat(toValue, 10);\n\n    fromValue = Math.min(_from, _to);\n    toValue = Math.max(_from, _to);\n  } else if (dataRow.meta.type === 'date') {\n    var dateBefore = getCondition(CONDITION_DATE_BEFORE, [toValue]);\n    var dateAfter = getCondition(CONDITION_DATE_AFTER, [fromValue]);\n    return dateBefore(dataRow) && dateAfter(dataRow);\n  }\n\n  return dataRow.value >= fromValue && dataRow.value <= toValue;\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_BETWEEN,\n  inputsCount: 2,\n  showOperators: true\n});", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport moment from 'moment';\nimport * as C from \"../../../../i18n/constants.mjs\";\nimport { registerCondition } from \"../../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'date_after';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Minimum date of a range.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, _ref) {\n  var _ref2 = _slicedToArray(_ref, 1),\n      value = _ref2[0];\n\n  var date = moment(dataRow.value, dataRow.meta.dateFormat);\n  var inputDate = moment(value, dataRow.meta.dateFormat);\n\n  if (!date.isValid() || !inputDate.isValid()) {\n    return false;\n  }\n\n  return date.diff(inputDate) >= 0;\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_AFTER,\n  inputsCount: 1,\n  showOperators: true\n});", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport moment from 'moment';\nimport * as C from \"../../../../i18n/constants.mjs\";\nimport { registerCondition } from \"../../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'date_before';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Maximum date of a range.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, _ref) {\n  var _ref2 = _slicedToArray(_ref, 1),\n      value = _ref2[0];\n\n  var date = moment(dataRow.value, dataRow.meta.dateFormat);\n  var inputDate = moment(value, dataRow.meta.dateFormat);\n\n  if (!date.isValid() || !inputDate.isValid()) {\n    return false;\n  }\n\n  return date.diff(inputDate) <= 0;\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_BEFORE,\n  inputsCount: 1,\n  showOperators: true\n});", "import * as C from \"../../../i18n/constants.mjs\";\nimport { registerCondition, getCondition } from \"../conditionRegisterer.mjs\";\nimport { CONDITION_NAME as CONDITION_BETWEEN } from \"./between.mjs\";\nexport var CONDITION_NAME = 'not_between';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, inputValues) {\n  return !getCondition(CONDITION_BETWEEN, inputValues)(dataRow);\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NOT_BETWEEN,\n  inputsCount: 2,\n  showOperators: true\n});", "import \"core-js/modules/es.string.starts-with.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { stringify } from \"../../../helpers/mixed.mjs\";\nimport { registerCondition } from \"../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'begins_with';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Value to check if it occurs at the beginning.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, _ref) {\n  var _ref2 = _slicedToArray(_ref, 1),\n      value = _ref2[0];\n\n  return stringify(dataRow.value).toLocaleLowerCase(dataRow.meta.locale).startsWith(stringify(value));\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_BEGINS_WITH,\n  inputsCount: 1,\n  showOperators: true\n});", "'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\n// eslint-disable-next-line es/no-string-prototype-endswith -- safe\nvar un$EndsWith = uncurryThis(''.endsWith);\nvar slice = uncurryThis(''.slice);\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n  var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\n  return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n  endsWith: function endsWith(searchString /* , endPosition = @length */) {\n    var that = toString(requireObjectCoercible(this));\n    notARegExp(searchString);\n    var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n    var len = that.length;\n    var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n    var search = toString(searchString);\n    return un$EndsWith\n      ? un$EndsWith(that, search, end)\n      : slice(that, end - search.length, end) === search;\n  }\n});\n", "import \"core-js/modules/es.string.ends-with.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { stringify } from \"../../../helpers/mixed.mjs\";\nimport { registerCondition } from \"../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'ends_with';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Value to check if it occurs at the end.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, _ref) {\n  var _ref2 = _slicedToArray(_ref, 1),\n      value = _ref2[0];\n\n  return stringify(dataRow.value).toLocaleLowerCase(dataRow.meta.locale).endsWith(stringify(value));\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_ENDS_WITH,\n  inputsCount: 1,\n  showOperators: true\n});", "import \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { stringify } from \"../../../helpers/mixed.mjs\";\nimport { registerCondition } from \"../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'contains';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" A value to check if it occurs in the row's data.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, _ref) {\n  var _ref2 = _slicedToArray(_ref, 1),\n      value = _ref2[0];\n\n  return stringify(dataRow.value).toLocaleLowerCase(dataRow.meta.locale).indexOf(stringify(value)) >= 0;\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_CONTAINS,\n  inputsCount: 1,\n  showOperators: true\n});", "import * as C from \"../../../i18n/constants.mjs\";\nimport { registerCondition, getCondition } from \"../conditionRegisterer.mjs\";\nimport { CONDITION_NAME as CONDITION_CONTAINS } from \"./contains.mjs\";\nexport var CONDITION_NAME = 'not_contains';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, inputValues) {\n  return !getCondition(CONDITION_CONTAINS, inputValues)(dataRow);\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NOT_CONTAIN,\n  inputsCount: 1,\n  showOperators: true\n});", "import moment from 'moment';\nimport * as C from \"../../../../i18n/constants.mjs\";\nimport { registerCondition } from \"../../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'date_tomorrow';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @returns {boolean}\n */\n\nexport function condition(dataRow) {\n  var date = moment(dataRow.value, dataRow.meta.dateFormat);\n\n  if (!date.isValid()) {\n    return false;\n  }\n\n  return date.isSame(moment().subtract(-1, 'days').startOf('day'), 'd');\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_TOMORROW,\n  inputsCount: 0\n});", "import moment from 'moment';\nimport * as C from \"../../../../i18n/constants.mjs\";\nimport { registerCondition } from \"../../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'date_today';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @returns {boolean}\n */\n\nexport function condition(dataRow) {\n  var date = moment(dataRow.value, dataRow.meta.dateFormat);\n\n  if (!date.isValid()) {\n    return false;\n  }\n\n  return date.isSame(moment().startOf('day'), 'd');\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_TODAY,\n  inputsCount: 0\n});", "import moment from 'moment';\nimport * as C from \"../../../../i18n/constants.mjs\";\nimport { registerCondition } from \"../../conditionRegisterer.mjs\";\nexport var CONDITION_NAME = 'date_yesterday';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @returns {boolean}\n */\n\nexport function condition(dataRow) {\n  var date = moment(dataRow.value, dataRow.meta.dateFormat);\n\n  if (!date.isValid()) {\n    return false;\n  }\n\n  return date.isSame(moment().subtract(1, 'days').startOf('day'), 'd');\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_YESTERDAY,\n  inputsCount: 0\n});", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { registerCondition } from \"../conditionRegisterer.mjs\";\nimport { createArrayAssertion } from \"../utils.mjs\";\nexport var CONDITION_NAME = 'by_value';\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {Function} inputValues.\"0\" A function to compare row's data.\n * @returns {boolean}\n */\n\nexport function condition(dataRow, _ref) {\n  var _ref2 = _slicedToArray(_ref, 1),\n      value = _ref2[0];\n\n  return value(dataRow.value);\n}\nregisterCondition(CONDITION_NAME, condition, {\n  name: 'By value',\n  inputsCount: 0,\n  inputValuesDecorator: function inputValuesDecorator(_ref3) {\n    var _ref4 = _slicedToArray(_ref3, 1),\n        data = _ref4[0];\n\n    return [createArrayAssertion(data)];\n  },\n  showOperators: false\n});", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport { getComparisonFunction } from \"../../helpers/feature.mjs\";\nimport { arrayUnique, arrayEach } from \"../../helpers/array.mjs\";\nvar sortCompare = getComparisonFunction();\n/**\n * Comparison function for sorting purposes.\n *\n * @param {*} a The first value to compare.\n * @param {*} b The second value to compare.\n * @returns {number} Returns number from -1 to 1.\n */\n\nexport function sortComparison(a, b) {\n  if (typeof a === 'number' && typeof b === 'number') {\n    return a - b;\n  }\n\n  return sortCompare(a, b);\n}\n/**\n * Convert raw value into visual value.\n *\n * @param {*} value The value to convert.\n * @param {string} defaultEmptyValue Default value for empty cells.\n * @returns {*}\n */\n\nexport function toVisualValue(value, defaultEmptyValue) {\n  var visualValue = value;\n\n  if (visualValue === '') {\n    visualValue = \"(\".concat(defaultEmptyValue, \")\");\n  }\n\n  return visualValue;\n}\nvar SUPPORT_SET_CONSTRUCTOR = new Set([1]).has(1);\nvar SUPPORT_FAST_DEDUPE = SUPPORT_SET_CONSTRUCTOR && typeof Array.from === 'function';\n/**\n * Create an array assertion to compare if an element exists in that array (in a more efficient way than .indexOf).\n *\n * @param {Array} initialData Values to compare.\n * @returns {Function}\n */\n\nexport function createArrayAssertion(initialData) {\n  var dataset = initialData;\n\n  if (SUPPORT_SET_CONSTRUCTOR) {\n    dataset = new Set(dataset);\n  }\n\n  return function (value) {\n    var result;\n\n    if (SUPPORT_SET_CONSTRUCTOR) {\n      result = dataset.has(value);\n    } else {\n      /* eslint-disable no-bitwise */\n      result = !!~dataset.indexOf(value);\n    }\n\n    return result;\n  };\n}\n/**\n * Convert empty-ish values like null and undefined to an empty string.\n *\n * @param {*} value Value to check.\n * @returns {string}\n */\n\nexport function toEmptyString(value) {\n  return value === null || value === void 0 ? '' : value;\n}\n/**\n * Unify column values (replace `null` and `undefined` values into empty string, unique values and sort them).\n *\n * @param {Array} values An array of values.\n * @returns {Array}\n */\n\nexport function unifyColumnValues(values) {\n  var unifiedValues = values;\n\n  if (SUPPORT_FAST_DEDUPE) {\n    unifiedValues = Array.from(new Set(unifiedValues));\n  } else {\n    unifiedValues = arrayUnique(unifiedValues);\n  }\n\n  unifiedValues = unifiedValues.sort(function (a, b) {\n    if (typeof a === 'number' && typeof b === 'number') {\n      return a - b;\n    }\n\n    if (a === b) {\n      return 0;\n    }\n\n    return a > b ? 1 : -1;\n  });\n  return unifiedValues;\n}\n/**\n * Intersect 'base' values with 'selected' values and return an array of object.\n *\n * @param {Array} base An array of base values.\n * @param {Array} selected An array of selected values.\n * @param {string} defaultEmptyValue Default value for empty cells.\n * @param {Function} [callback] A callback function which is invoked for every item in an array.\n * @returns {Array}\n */\n\nexport function intersectValues(base, selected, defaultEmptyValue, callback) {\n  var result = [];\n  var same = base === selected;\n  var selectedItemsAssertion;\n\n  if (!same) {\n    selectedItemsAssertion = createArrayAssertion(selected);\n  }\n\n  arrayEach(base, function (value) {\n    var checked = false;\n\n    if (same || selectedItemsAssertion(value)) {\n      checked = true;\n    }\n\n    var item = {\n      checked: checked,\n      value: value,\n      visualValue: toVisualValue(value, defaultEmptyValue)\n    };\n\n    if (callback) {\n      callback(item);\n    }\n\n    result.push(item);\n  });\n  return result;\n}", "import \"core-js/modules/es.function.name.js\";\nexport var operations = {};\n/**\n * Get operation closure with pre-bound arguments.\n *\n * @param {string} id Operator `id`.\n * @returns {Function}\n */\n\nexport function getOperationFunc(id) {\n  if (!operations[id]) {\n    throw Error(\"Operation with id \\\"\".concat(id, \"\\\" does not exist.\"));\n  }\n\n  var func = operations[id].func;\n  return function (conditions, value) {\n    return func(conditions, value);\n  };\n}\n/**\n * Return name of operation which is displayed inside UI component, basing on it's `id`.\n *\n * @param {string} id `Id` of operation.\n * @returns {string}\n */\n\nexport function getOperationName(id) {\n  return operations[id].name;\n}\n/**\n * Operator registerer.\n *\n * @param {string} id Operation `id`.\n * @param {string} name Operation name which is displayed inside UI component.\n * @param {Function} func Operation function.\n */\n\nexport function registerOperation(id, name, func) {\n  operations[id] = {\n    name: name,\n    func: func\n  };\n}", "import \"core-js/modules/es.object.to-string.js\";\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { registerOperation } from \"../logicalOperationRegisterer.mjs\";\nexport var OPERATION_ID = 'conjunction';\nexport var SHORT_NAME_FOR_COMPONENT = C.FILTERS_LABELS_CONJUNCTION; // p AND q AND w AND x AND... === TRUE?\n\n/**\n * @param {Array} conditions An array with values to check.\n * @param {*} value The comparable value.\n * @returns {boolean}\n */\n\nexport function operationResult(conditions, value) {\n  return conditions.every(function (condition) {\n    return condition.func(value);\n  });\n}\nregisterOperation(OPERATION_ID, SHORT_NAME_FOR_COMPONENT, operationResult);", "import \"core-js/modules/es.object.to-string.js\";\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { registerOperation } from \"../logicalOperationRegisterer.mjs\";\nexport var OPERATION_ID = 'disjunction';\nexport var SHORT_NAME_FOR_COMPONENT = C.FILTERS_LABELS_DISJUNCTION; // (p OR q OR w OR x OR...) === TRUE?\n\n/**\n * @param {Array} conditions An array with values to check.\n * @param {*} value The comparable value.\n * @returns {boolean}\n */\n\nexport function operationResult(conditions, value) {\n  return conditions.some(function (condition) {\n    return condition.func(value);\n  });\n}\nregisterOperation(OPERATION_ID, SHORT_NAME_FOR_COMPONENT, operationResult);", "import \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { registerOperation } from \"../logicalOperationRegisterer.mjs\";\nexport var OPERATION_ID = 'disjunctionWithExtraCondition';\nexport var SHORT_NAME_FOR_COMPONENT = C.FILTERS_LABELS_DISJUNCTION; // ((p OR q OR w OR x OR...) AND z) === TRUE?\n\n/**\n * @param {Array} conditions An array with values to check.\n * @param {*} value The comparable value.\n * @returns {boolean}\n */\n\nexport function operationResult(conditions, value) {\n  if (conditions.length < 3) {\n    throw Error('Operation doesn\\'t work on less then three conditions.');\n  }\n\n  return conditions.slice(0, conditions.length - 1).some(function (condition) {\n    return condition.func(value);\n  }) && conditions[conditions.length - 1].func(value);\n}\nregisterOperation(OPERATION_ID, SHORT_NAME_FOR_COMPONENT, operationResult);", "var _TYPES;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { clone } from \"../../helpers/object.mjs\";\nimport { arrayEach } from \"../../helpers/array.mjs\";\nimport { SEPARATOR } from \"../contextMenu/predefinedItems.mjs\";\nimport { getConditionDescriptor } from \"./conditionRegisterer.mjs\";\nimport { CONDITION_NAME as CONDITION_NONE } from \"./condition/none.mjs\";\nimport { CONDITION_NAME as CONDITION_EMPTY } from \"./condition/empty.mjs\";\nimport { CONDITION_NAME as CONDITION_NOT_EMPTY } from \"./condition/notEmpty.mjs\";\nimport { CONDITION_NAME as CONDITION_EQUAL } from \"./condition/equal.mjs\";\nimport { CONDITION_NAME as CONDITION_NOT_EQUAL } from \"./condition/notEqual.mjs\";\nimport { CONDITION_NAME as CONDITION_GREATER_THAN } from \"./condition/greaterThan.mjs\";\nimport { CONDITION_NAME as CONDITION_GREATER_THAN_OR_EQUAL } from \"./condition/greaterThanOrEqual.mjs\";\nimport { CONDITION_NAME as CONDITION_LESS_THAN } from \"./condition/lessThan.mjs\";\nimport { CONDITION_NAME as CONDITION_LESS_THAN_OR_EQUAL } from \"./condition/lessThanOrEqual.mjs\";\nimport { CONDITION_NAME as CONDITION_BETWEEN } from \"./condition/between.mjs\";\nimport { CONDITION_NAME as CONDITION_NOT_BETWEEN } from \"./condition/notBetween.mjs\";\nimport { CONDITION_NAME as CONDITION_BEGINS_WITH } from \"./condition/beginsWith.mjs\";\nimport { CONDITION_NAME as CONDITION_ENDS_WITH } from \"./condition/endsWith.mjs\";\nimport { CONDITION_NAME as CONDITION_CONTAINS } from \"./condition/contains.mjs\";\nimport { CONDITION_NAME as CONDITION_NOT_CONTAINS } from \"./condition/notContains.mjs\";\nimport { CONDITION_NAME as CONDITION_DATE_BEFORE } from \"./condition/date/before.mjs\";\nimport { CONDITION_NAME as CONDITION_DATE_AFTER } from \"./condition/date/after.mjs\";\nimport { CONDITION_NAME as CONDITION_TOMORROW } from \"./condition/date/tomorrow.mjs\";\nimport { CONDITION_NAME as CONDITION_TODAY } from \"./condition/date/today.mjs\";\nimport { CONDITION_NAME as CONDITION_YESTERDAY } from \"./condition/date/yesterday.mjs\";\nimport { CONDITION_NAME as CONDITION_BY_VALUE } from \"./condition/byValue.mjs\";\nimport { CONDITION_NAME as CONDITION_TRUE } from \"./condition/true.mjs\";\nimport { CONDITION_NAME as CONDITION_FALSE } from \"./condition/false.mjs\";\nimport { OPERATION_ID as OPERATION_AND } from \"./logicalOperations/conjunction.mjs\";\nimport { OPERATION_ID as OPERATION_OR } from \"./logicalOperations/disjunction.mjs\";\nimport { OPERATION_ID as OPERATION_OR_THEN_VARIABLE } from \"./logicalOperations/disjunctionWithExtraCondition.mjs\";\nexport { CONDITION_NONE, CONDITION_EMPTY, CONDITION_NOT_EMPTY, CONDITION_EQUAL, CONDITION_NOT_EQUAL, CONDITION_GREATER_THAN, CONDITION_GREATER_THAN_OR_EQUAL, CONDITION_LESS_THAN, CONDITION_LESS_THAN_OR_EQUAL, CONDITION_BETWEEN, CONDITION_NOT_BETWEEN, CONDITION_BEGINS_WITH, CONDITION_ENDS_WITH, CONDITION_CONTAINS, CONDITION_NOT_CONTAINS, CONDITION_DATE_BEFORE, CONDITION_DATE_AFTER, CONDITION_TOMORROW, CONDITION_TODAY, CONDITION_YESTERDAY, CONDITION_BY_VALUE, CONDITION_TRUE, CONDITION_FALSE, OPERATION_AND, OPERATION_OR, OPERATION_OR_THEN_VARIABLE };\nexport var TYPE_NUMERIC = 'numeric';\nexport var TYPE_TEXT = 'text';\nexport var TYPE_DATE = 'date';\n/**\n * Default types and order for filter conditions.\n *\n * @type {object}\n */\n\nexport var TYPES = (_TYPES = {}, _defineProperty(_TYPES, TYPE_NUMERIC, [CONDITION_NONE, SEPARATOR, CONDITION_EMPTY, CONDITION_NOT_EMPTY, SEPARATOR, CONDITION_EQUAL, CONDITION_NOT_EQUAL, SEPARATOR, CONDITION_GREATER_THAN, CONDITION_GREATER_THAN_OR_EQUAL, CONDITION_LESS_THAN, CONDITION_LESS_THAN_OR_EQUAL, CONDITION_BETWEEN, CONDITION_NOT_BETWEEN]), _defineProperty(_TYPES, TYPE_TEXT, [CONDITION_NONE, SEPARATOR, CONDITION_EMPTY, CONDITION_NOT_EMPTY, SEPARATOR, CONDITION_EQUAL, CONDITION_NOT_EQUAL, SEPARATOR, CONDITION_BEGINS_WITH, CONDITION_ENDS_WITH, SEPARATOR, CONDITION_CONTAINS, CONDITION_NOT_CONTAINS]), _defineProperty(_TYPES, TYPE_DATE, [CONDITION_NONE, SEPARATOR, CONDITION_EMPTY, CONDITION_NOT_EMPTY, SEPARATOR, CONDITION_EQUAL, CONDITION_NOT_EQUAL, SEPARATOR, CONDITION_DATE_BEFORE, CONDITION_DATE_AFTER, CONDITION_BETWEEN, SEPARATOR, CONDITION_TOMORROW, CONDITION_TODAY, CONDITION_YESTERDAY]), _TYPES);\n/**\n * Get options list for conditional filter by data type (e.q: `'text'`, `'numeric'`, `'date'`).\n *\n * @private\n * @param {string} type The data type.\n * @returns {object}\n */\n\nexport default function getOptionsList(type) {\n  var items = [];\n  var typeName = type;\n\n  if (!TYPES[typeName]) {\n    typeName = TYPE_TEXT;\n  }\n\n  arrayEach(TYPES[typeName], function (typeValue) {\n    var option;\n\n    if (typeValue === SEPARATOR) {\n      option = {\n        name: SEPARATOR\n      };\n    } else {\n      option = clone(getConditionDescriptor(typeValue));\n    }\n\n    items.push(option);\n  });\n  return items;\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport { addClass } from \"../../../helpers/dom/element.mjs\";\nimport { clone, extend } from \"../../../helpers/object.mjs\";\nimport BaseUI from \"./_base.mjs\";\nvar privatePool = new WeakMap();\n/**\n * @private\n * @class InputUI\n */\n\nvar InputUI = /*#__PURE__*/function (_BaseUI) {\n  _inherits(InputUI, _BaseUI);\n\n  var _super = _createSuper(InputUI);\n\n  function InputUI(hotInstance, options) {\n    var _this;\n\n    _classCallCheck(this, InputUI);\n\n    _this = _super.call(this, hotInstance, extend(InputUI.DEFAULTS, options));\n    privatePool.set(_assertThisInitialized(_this), {});\n\n    _this.registerHooks();\n\n    return _this;\n  }\n  /**\n   * Register all necessary hooks.\n   */\n\n\n  _createClass(InputUI, [{\n    key: \"registerHooks\",\n    value: function registerHooks() {\n      var _this2 = this;\n\n      this.addLocalHook('click', function () {\n        return _this2.onClick();\n      });\n      this.addLocalHook('keyup', function (event) {\n        return _this2.onKeyup(event);\n      });\n    }\n    /**\n     * Build DOM structure.\n     */\n\n  }, {\n    key: \"build\",\n    value: function build() {\n      _get(_getPrototypeOf(InputUI.prototype), \"build\", this).call(this);\n\n      var priv = privatePool.get(this);\n      var icon = this.hot.rootDocument.createElement('div');\n      priv.input = this._element.firstChild;\n      addClass(this._element, 'htUIInput');\n      addClass(icon, 'htUIInputIcon');\n\n      this._element.appendChild(icon);\n\n      this.update();\n    }\n    /**\n     * Update element.\n     */\n\n  }, {\n    key: \"update\",\n    value: function update() {\n      if (!this.isBuilt()) {\n        return;\n      }\n\n      var input = privatePool.get(this).input;\n      input.type = this.options.type;\n      input.placeholder = this.translateIfPossible(this.options.placeholder);\n      input.value = this.translateIfPossible(this.options.value);\n    }\n    /**\n     * Focus element.\n     */\n\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      if (this.isBuilt()) {\n        privatePool.get(this).input.focus();\n      }\n    }\n    /**\n     * OnClick listener.\n     */\n\n  }, {\n    key: \"onClick\",\n    value: function onClick() {}\n    /**\n     * OnKeyup listener.\n     *\n     * @param {Event} event The mouse event object.\n     */\n\n  }, {\n    key: \"onKeyup\",\n    value: function onKeyup(event) {\n      this.options.value = event.target.value;\n    }\n  }], [{\n    key: \"DEFAULTS\",\n    get: function get() {\n      return clone({\n        placeholder: '',\n        type: 'text',\n        tagName: 'input'\n      });\n    }\n  }]);\n\n  return InputUI;\n}(BaseUI);\n\nexport default InputUI;", "import \"core-js/modules/es.string.starts-with.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { clone, extend, mixin, objectEach } from \"../../../helpers/object.mjs\";\nimport localHooks from \"../../../mixins/localHooks.mjs\";\nimport EventManager from \"../../../eventManager.mjs\";\nimport { addClass } from \"../../../helpers/dom/element.mjs\";\nimport { arrayEach } from \"../../../helpers/array.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nvar STATE_BUILT = 'built';\nvar STATE_BUILDING = 'building';\nvar EVENTS_TO_REGISTER = ['click', 'input', 'keydown', 'keypress', 'keyup', 'focus', 'blur', 'change'];\n/**\n * @private\n */\n\nvar BaseUI = /*#__PURE__*/function () {\n  function BaseUI(hotInstance, options) {\n    _classCallCheck(this, BaseUI);\n\n    /**\n     * Instance of Handsontable.\n     *\n     * @type {Core}\n     */\n    this.hot = hotInstance;\n    /**\n     * Instance of EventManager.\n     *\n     * @type {EventManager}\n     */\n\n    this.eventManager = new EventManager(this);\n    /**\n     * List of element options.\n     *\n     * @type {object}\n     */\n\n    this.options = extend(BaseUI.DEFAULTS, options);\n    /**\n     * Build root DOM element.\n     *\n     * @type {Element}\n     * @private\n     */\n\n    this._element = this.hot.rootDocument.createElement(this.options.wrapIt ? 'div' : this.options.tagName);\n    /**\n     * Flag which determines build state of element.\n     *\n     * @type {string}\n     */\n\n    this.buildState = null;\n  }\n  /**\n   * Set the element value.\n   *\n   * @param {*} value Set the component value.\n   */\n\n\n  _createClass(BaseUI, [{\n    key: \"setValue\",\n    value: function setValue(value) {\n      this.options.value = value;\n      this.update();\n    }\n    /**\n     * Get the element value.\n     *\n     * @returns {*}\n     */\n\n  }, {\n    key: \"getValue\",\n    value: function getValue() {\n      return this.options.value;\n    }\n    /**\n     * Get element as a DOM object.\n     *\n     * @returns {Element}\n     */\n\n  }, {\n    key: \"element\",\n    get: function get() {\n      if (this.buildState === STATE_BUILDING) {\n        return this._element;\n      }\n\n      if (this.buildState === STATE_BUILT) {\n        this.update();\n        return this._element;\n      }\n\n      this.buildState = STATE_BUILDING;\n      this.build();\n      this.buildState = STATE_BUILT;\n      return this._element;\n    }\n    /**\n     * Check if element was built (built whole DOM structure).\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isBuilt\",\n    value: function isBuilt() {\n      return this.buildState === STATE_BUILT;\n    }\n    /**\n     * Translate value if it is possible. It's checked if value belongs to namespace of translated phrases.\n     *\n     * @param {*} value Value which will may be translated.\n     * @returns {*} Translated value if translation was possible, original value otherwise.\n     */\n\n  }, {\n    key: \"translateIfPossible\",\n    value: function translateIfPossible(value) {\n      if (typeof value === 'string' && value.startsWith(C.FILTERS_NAMESPACE)) {\n        return this.hot.getTranslatedPhrase(value);\n      }\n\n      return value;\n    }\n    /**\n     * Build DOM structure.\n     */\n\n  }, {\n    key: \"build\",\n    value: function build() {\n      var _this = this;\n\n      var registerEvent = function registerEvent(element, eventName) {\n        _this.eventManager.addEventListener(element, eventName, function (event) {\n          return _this.runLocalHooks(eventName, event, _this);\n        });\n      };\n\n      if (!this.buildState) {\n        this.buildState = STATE_BUILDING;\n      }\n\n      if (this.options.className) {\n        addClass(this._element, this.options.className);\n      }\n\n      if (this.options.children.length) {\n        arrayEach(this.options.children, function (element) {\n          return _this._element.appendChild(element.element);\n        });\n      } else if (this.options.wrapIt) {\n        var element = this.hot.rootDocument.createElement(this.options.tagName);\n        objectEach(this.options, function (value, key) {\n          if (element[key] !== void 0 && key !== 'className' && key !== 'tagName' && key !== 'children') {\n            element[key] = _this.translateIfPossible(value);\n          }\n        });\n\n        this._element.appendChild(element);\n\n        arrayEach(EVENTS_TO_REGISTER, function (eventName) {\n          return registerEvent(element, eventName);\n        });\n      } else {\n        arrayEach(EVENTS_TO_REGISTER, function (eventName) {\n          return registerEvent(_this._element, eventName);\n        });\n      }\n    }\n    /**\n     * Update DOM structure.\n     */\n\n  }, {\n    key: \"update\",\n    value: function update() {}\n    /**\n     * Reset to initial state.\n     */\n\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this.options.value = '';\n      this.update();\n    }\n    /**\n     * Show element.\n     */\n\n  }, {\n    key: \"show\",\n    value: function show() {\n      this.element.style.display = '';\n    }\n    /**\n     * Hide element.\n     */\n\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this.element.style.display = 'none';\n    }\n    /**\n     * Focus element.\n     */\n\n  }, {\n    key: \"focus\",\n    value: function focus() {}\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.eventManager.destroy();\n      this.eventManager = null;\n      this.hot = null;\n\n      if (this._element.parentNode) {\n        this._element.parentNode.removeChild(this._element);\n      }\n\n      this._element = null;\n    }\n  }], [{\n    key: \"DEFAULTS\",\n    get: function get() {\n      return clone({\n        className: '',\n        value: '',\n        tagName: 'div',\n        children: [],\n        wrapIt: true\n      });\n    }\n  }]);\n\n  return BaseUI;\n}();\n\nmixin(BaseUI, localHooks);\nexport default BaseUI;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport Menu from \"../../../plugins/contextMenu/menu.mjs\";\nimport { clone, extend } from \"../../../helpers/object.mjs\";\nimport { arrayEach } from \"../../../helpers/array.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { SEPARATOR } from \"../../../plugins/contextMenu/predefinedItems.mjs\";\nimport BaseUI from \"./_base.mjs\";\nvar privatePool = new WeakMap();\n/**\n * @private\n * @class SelectUI\n */\n\nvar SelectUI = /*#__PURE__*/function (_BaseUI) {\n  _inherits(SelectUI, _BaseUI);\n\n  var _super = _createSuper(SelectUI);\n\n  function SelectUI(hotInstance, options) {\n    var _this;\n\n    _classCallCheck(this, SelectUI);\n\n    _this = _super.call(this, hotInstance, extend(SelectUI.DEFAULTS, options));\n    privatePool.set(_assertThisInitialized(_this), {});\n    /**\n     * Instance of {@link Menu}.\n     *\n     * @type {Menu}\n     */\n\n    _this.menu = null;\n    /**\n     * List of available select options.\n     *\n     * @type {Array}\n     */\n\n    _this.items = [];\n\n    _this.registerHooks();\n\n    return _this;\n  }\n  /**\n   * Register all necessary hooks.\n   */\n\n\n  _createClass(SelectUI, [{\n    key: \"registerHooks\",\n    value: function registerHooks() {\n      var _this2 = this;\n\n      this.addLocalHook('click', function () {\n        return _this2.onClick();\n      });\n    }\n    /**\n     * Set options which can be selected in the list.\n     *\n     * @param {Array} items Array of objects with required keys `key` and `name`.\n     */\n\n  }, {\n    key: \"setItems\",\n    value: function setItems(items) {\n      this.items = this.translateNames(items);\n\n      if (this.menu) {\n        this.menu.setMenuItems(this.items);\n      }\n    }\n    /**\n     * Translate names of menu items.\n     *\n     * @param {Array} items Array of objects with required keys `key` and `name`.\n     * @returns {Array} Items with translated `name` keys.\n     */\n\n  }, {\n    key: \"translateNames\",\n    value: function translateNames(items) {\n      var _this3 = this;\n\n      arrayEach(items, function (item) {\n        item.name = _this3.translateIfPossible(item.name);\n      });\n      return items;\n    }\n    /**\n     * Build DOM structure.\n     */\n\n  }, {\n    key: \"build\",\n    value: function build() {\n      var _this4 = this;\n\n      _get(_getPrototypeOf(SelectUI.prototype), \"build\", this).call(this);\n\n      this.menu = new Menu(this.hot, {\n        className: 'htSelectUI htFiltersConditionsMenu',\n        keepInViewport: false,\n        standalone: true,\n        container: this.options.menuContainer\n      });\n      this.menu.setMenuItems(this.items);\n      var caption = new BaseUI(this.hot, {\n        className: 'htUISelectCaption'\n      });\n      var dropdown = new BaseUI(this.hot, {\n        className: 'htUISelectDropdown'\n      });\n      var priv = privatePool.get(this);\n      priv.caption = caption;\n      priv.captionElement = caption.element;\n      priv.dropdown = dropdown;\n      arrayEach([caption, dropdown], function (element) {\n        return _this4._element.appendChild(element.element);\n      });\n      this.menu.addLocalHook('select', function (command) {\n        return _this4.onMenuSelect(command);\n      });\n      this.menu.addLocalHook('afterClose', function () {\n        return _this4.onMenuClosed();\n      });\n      this.update();\n    }\n    /**\n     * Update DOM structure.\n     */\n\n  }, {\n    key: \"update\",\n    value: function update() {\n      if (!this.isBuilt()) {\n        return;\n      }\n\n      var conditionName;\n\n      if (this.options.value) {\n        conditionName = this.options.value.name;\n      } else {\n        conditionName = this.menu.hot.getTranslatedPhrase(C.FILTERS_CONDITIONS_NONE);\n      }\n\n      privatePool.get(this).captionElement.textContent = conditionName;\n\n      _get(_getPrototypeOf(SelectUI.prototype), \"update\", this).call(this);\n    }\n    /**\n     * Open select dropdown menu with available options.\n     */\n\n  }, {\n    key: \"openOptions\",\n    value: function openOptions() {\n      var rect = this.element.getBoundingClientRect();\n\n      if (this.menu) {\n        this.menu.open();\n        this.menu.setPosition({\n          left: rect.left - 5,\n          top: rect.top - 1,\n          width: rect.width,\n          height: rect.height\n        });\n      }\n    }\n    /**\n     * Close select dropdown menu.\n     */\n\n  }, {\n    key: \"closeOptions\",\n    value: function closeOptions() {\n      if (this.menu) {\n        this.menu.close();\n      }\n    }\n    /**\n     * On menu selected listener.\n     *\n     * @private\n     * @param {object} command Selected item.\n     */\n\n  }, {\n    key: \"onMenuSelect\",\n    value: function onMenuSelect(command) {\n      if (command.name !== SEPARATOR) {\n        this.options.value = command;\n        this.update();\n        this.runLocalHooks('select', this.options.value);\n      }\n    }\n    /**\n     * On menu closed listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMenuClosed\",\n    value: function onMenuClosed() {\n      this.runLocalHooks('afterClose');\n    }\n    /**\n     * On element click listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onClick\",\n    value: function onClick() {\n      this.openOptions();\n    }\n    /**\n     * Destroy instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.menu) {\n        this.menu.destroy();\n        this.menu = null;\n      }\n\n      var _privatePool$get = privatePool.get(this),\n          caption = _privatePool$get.caption,\n          dropdown = _privatePool$get.dropdown;\n\n      if (caption) {\n        caption.destroy();\n      }\n\n      if (dropdown) {\n        dropdown.destroy();\n      }\n\n      _get(_getPrototypeOf(SelectUI.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"DEFAULTS\",\n    get: function get() {\n      return clone({\n        className: 'htUISelect',\n        wrapIt: false\n      });\n    }\n  }]);\n\n  return SelectUI;\n}(BaseUI);\n\nexport default SelectUI;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nvar _templateObject;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.find.js\";\nimport \"core-js/modules/es.object.to-string.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { addClass } from \"../../../helpers/dom/element.mjs\";\nimport { arrayEach } from \"../../../helpers/array.mjs\";\nimport { toSingleLine } from \"../../../helpers/templateLiteralTag.mjs\";\nimport BaseComponent from \"./_base.mjs\";\nimport { getOperationName } from \"../logicalOperationRegisterer.mjs\";\nimport { OPERATION_ID as OPERATION_AND } from \"../logicalOperations/conjunction.mjs\";\nimport { OPERATION_ID as OPERATION_OR } from \"../logicalOperations/disjunction.mjs\";\nimport { OPERATION_ID as OPERATION_OR_THEN_VARIABLE } from \"../logicalOperations/disjunctionWithExtraCondition.mjs\";\nimport RadioInputUI from \"../ui/radioInput.mjs\";\nvar SELECTED_AT_START_ELEMENT_INDEX = 0;\n/**\n * @private\n * @class OperatorsComponent\n */\n\nvar OperatorsComponent = /*#__PURE__*/function (_BaseComponent) {\n  _inherits(OperatorsComponent, _BaseComponent);\n\n  var _super = _createSuper(OperatorsComponent);\n\n  function OperatorsComponent(hotInstance, options) {\n    var _this;\n\n    _classCallCheck(this, OperatorsComponent);\n\n    _this = _super.call(this, hotInstance, {\n      id: options.id,\n      stateless: false\n    });\n    _this.name = options.name;\n\n    _this.buildOperatorsElement();\n\n    return _this;\n  }\n  /**\n   * Get menu object descriptor.\n   *\n   * @returns {object}\n   */\n\n\n  _createClass(OperatorsComponent, [{\n    key: \"getMenuItemDescriptor\",\n    value: function getMenuItemDescriptor() {\n      var _this2 = this;\n\n      return {\n        key: this.id,\n        name: this.name,\n        isCommand: false,\n        disableSelection: true,\n        hidden: function hidden() {\n          return _this2.isHidden();\n        },\n        renderer: function renderer(hot, wrapper) {\n          addClass(wrapper.parentNode, 'htFiltersMenuOperators');\n\n          if (!wrapper.parentNode.hasAttribute('ghost-table')) {\n            arrayEach(_this2.elements, function (ui) {\n              return wrapper.appendChild(ui.element);\n            });\n          }\n\n          return wrapper;\n        }\n      };\n    }\n    /**\n     * Add RadioInputUI elements to component.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"buildOperatorsElement\",\n    value: function buildOperatorsElement() {\n      var _this3 = this;\n\n      var operationKeys = [OPERATION_AND, OPERATION_OR];\n      arrayEach(operationKeys, function (operation) {\n        var radioInput = new RadioInputUI(_this3.hot, {\n          name: 'operator',\n          label: {\n            htmlFor: operation,\n            textContent: getOperationName(operation)\n          },\n          value: operation,\n          checked: operation === operationKeys[SELECTED_AT_START_ELEMENT_INDEX],\n          id: operation\n        });\n        radioInput.addLocalHook('change', function (event) {\n          return _this3.onRadioInputChange(event);\n        });\n\n        _this3.elements.push(radioInput);\n      });\n    }\n    /**\n     * Set state of operators component to check radio input at specific `index`.\n     *\n     * @param {number} searchedIndex Index of radio input to check.\n     */\n\n  }, {\n    key: \"setChecked\",\n    value: function setChecked(searchedIndex) {\n      if (this.elements.length < searchedIndex) {\n        throw Error(toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"Radio button with index \", \" doesn't exist.\"])), searchedIndex));\n      }\n\n      arrayEach(this.elements, function (element, index) {\n        element.setChecked(index === searchedIndex);\n      });\n    }\n    /**\n     * Get `id` of active operator.\n     *\n     * @returns {string}\n     */\n\n  }, {\n    key: \"getActiveOperationId\",\n    value: function getActiveOperationId() {\n      var operationElement = this.elements.find(function (element) {\n        return element instanceof RadioInputUI && element.isChecked();\n      });\n\n      if (operationElement) {\n        return operationElement.getValue();\n      }\n\n      return OPERATION_AND;\n    }\n    /**\n     * Export state of the component (get selected operator).\n     *\n     * @returns {string} Returns `id` of selected operator.\n     */\n\n  }, {\n    key: \"getState\",\n    value: function getState() {\n      return this.getActiveOperationId();\n    }\n    /**\n     * Set state of the component.\n     *\n     * @param {object} value State to restore.\n     */\n\n  }, {\n    key: \"setState\",\n    value: function setState(value) {\n      this.reset();\n\n      if (value && this.getActiveOperationId() !== value) {\n        arrayEach(this.elements, function (element) {\n          element.setChecked(element.getValue() === value);\n        });\n      }\n    }\n    /**\n     * Update state of component.\n     *\n     * @param {string} [operationId='conjunction'] Id of selected operation.\n     * @param {number} column Physical column index.\n     */\n\n  }, {\n    key: \"updateState\",\n    value: function updateState() {\n      var operationId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : OPERATION_AND;\n      var column = arguments.length > 1 ? arguments[1] : undefined;\n      var selectedOperationId = operationId;\n\n      if (selectedOperationId === OPERATION_OR_THEN_VARIABLE) {\n        selectedOperationId = OPERATION_OR;\n      }\n\n      this.state.setValueAtIndex(column, selectedOperationId);\n    }\n    /**\n     * Reset elements to their initial state.\n     */\n\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this.setChecked(SELECTED_AT_START_ELEMENT_INDEX);\n    }\n    /**\n     * OnChange listener.\n     *\n     * @private\n     * @param {Event} event The DOM event object.\n     */\n\n  }, {\n    key: \"onRadioInputChange\",\n    value: function onRadioInputChange(event) {\n      this.setState(event.target.value);\n    }\n  }]);\n\n  return OperatorsComponent;\n}(BaseComponent);\n\nexport default OperatorsComponent;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport { clone, extend } from \"../../../helpers/object.mjs\";\nimport BaseUI from \"./_base.mjs\";\nvar privatePool = new WeakMap();\n/**\n * @private\n * @class RadioInputUI\n */\n\nvar RadioInputUI = /*#__PURE__*/function (_BaseUI) {\n  _inherits(RadioInputUI, _BaseUI);\n\n  var _super = _createSuper(RadioInputUI);\n\n  function RadioInputUI(hotInstance, options) {\n    var _this;\n\n    _classCallCheck(this, RadioInputUI);\n\n    _this = _super.call(this, hotInstance, extend(RadioInputUI.DEFAULTS, options));\n    privatePool.set(_assertThisInitialized(_this), {});\n    return _this;\n  }\n  /**\n   * Build DOM structure.\n   */\n\n\n  _createClass(RadioInputUI, [{\n    key: \"build\",\n    value: function build() {\n      _get(_getPrototypeOf(RadioInputUI.prototype), \"build\", this).call(this);\n\n      var priv = privatePool.get(this);\n      priv.input = this._element.firstChild;\n      var label = this.hot.rootDocument.createElement('label');\n      label.textContent = this.translateIfPossible(this.options.label.textContent);\n      label.htmlFor = this.translateIfPossible(this.options.label.htmlFor);\n      priv.label = label;\n\n      this._element.appendChild(label);\n\n      this.update();\n    }\n    /**\n     * Update element.\n     */\n\n  }, {\n    key: \"update\",\n    value: function update() {\n      if (!this.isBuilt()) {\n        return;\n      }\n\n      var priv = privatePool.get(this);\n      priv.input.checked = this.options.checked;\n      priv.label.textContent = this.translateIfPossible(this.options.label.textContent);\n    }\n    /**\n     * Check if radio button is checked.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isChecked\",\n    value: function isChecked() {\n      return this.options.checked;\n    }\n    /**\n     * Set input checked attribute.\n     *\n     * @param {boolean} value Set the component state.\n     */\n\n  }, {\n    key: \"setChecked\",\n    value: function setChecked() {\n      var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      this.options.checked = value;\n      this.update();\n    }\n    /**\n     * Focus element.\n     */\n\n  }, {\n    key: \"focus\",\n    value: function focus() {\n      if (this.isBuilt()) {\n        privatePool.get(this).input.focus();\n      }\n    }\n  }], [{\n    key: \"DEFAULTS\",\n    get: function get() {\n      return clone({\n        type: 'radio',\n        tagName: 'input',\n        className: 'htUIRadio',\n        label: {}\n      });\n    }\n  }]);\n\n  return RadioInputUI;\n}(BaseUI);\n\nexport default RadioInputUI;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { addClass } from \"../../../helpers/dom/element.mjs\";\nimport { stopImmediatePropagation } from \"../../../helpers/dom/event.mjs\";\nimport { arrayEach, arrayFilter, arrayMap } from \"../../../helpers/array.mjs\";\nimport { isKey } from \"../../../helpers/unicode.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { unifyColumnValues, intersectValues, toEmptyString } from \"../utils.mjs\";\nimport BaseComponent from \"./_base.mjs\";\nimport MultipleSelectUI from \"../ui/multipleSelect.mjs\";\nimport { CONDITION_BY_VALUE, CONDITION_NONE } from \"../constants.mjs\";\nimport { getConditionDescriptor } from \"../conditionRegisterer.mjs\";\n/**\n * @private\n * @class ValueComponent\n */\n\nvar ValueComponent = /*#__PURE__*/function (_BaseComponent) {\n  _inherits(ValueComponent, _BaseComponent);\n\n  var _super = _createSuper(ValueComponent);\n\n  function ValueComponent(hotInstance, options) {\n    var _this;\n\n    _classCallCheck(this, ValueComponent);\n\n    _this = _super.call(this, hotInstance, {\n      id: options.id,\n      stateless: false\n    });\n    _this.name = options.name;\n\n    _this.elements.push(new MultipleSelectUI(_this.hot));\n\n    _this.registerHooks();\n\n    return _this;\n  }\n  /**\n   * Register all necessary hooks.\n   *\n   * @private\n   */\n\n\n  _createClass(ValueComponent, [{\n    key: \"registerHooks\",\n    value: function registerHooks() {\n      var _this2 = this;\n\n      this.getMultipleSelectElement().addLocalHook('keydown', function (event) {\n        return _this2.onInputKeyDown(event);\n      });\n    }\n    /**\n     * Set state of the component.\n     *\n     * @param {object} value The component value.\n     */\n\n  }, {\n    key: \"setState\",\n    value: function setState(value) {\n      this.reset();\n\n      if (value && value.command.key === CONDITION_BY_VALUE) {\n        var select = this.getMultipleSelectElement();\n        select.setItems(value.itemsSnapshot);\n        select.setValue(value.args[0]);\n        select.setLocale(value.locale);\n      }\n    }\n    /**\n     * Export state of the component (get selected filter and filter arguments).\n     *\n     * @returns {object} Returns object where `command` key keeps used condition filter and `args` key its arguments.\n     */\n\n  }, {\n    key: \"getState\",\n    value: function getState() {\n      var select = this.getMultipleSelectElement();\n      var availableItems = select.getItems();\n      return {\n        command: {\n          key: select.isSelectedAllValues() || !availableItems.length ? CONDITION_NONE : CONDITION_BY_VALUE\n        },\n        args: [select.getValue()],\n        itemsSnapshot: availableItems\n      };\n    }\n    /**\n     * Update state of component.\n     *\n     * @param {object} stateInfo Information about state containing stack of edited column,\n     * stack of dependent conditions, data factory and optional condition arguments change. It's described by object containing keys:\n     * `editedConditionStack`, `dependentConditionStacks`, `visibleDataFactory` and `conditionArgsChange`.\n     */\n\n  }, {\n    key: \"updateState\",\n    value: function updateState(stateInfo) {\n      var _this3 = this;\n\n      var updateColumnState = function updateColumnState(physicalColumn, conditions, conditionArgsChange, filteredRowsFactory, conditionsStack) {\n        var _arrayFilter = arrayFilter(conditions, function (condition) {\n          return condition.name === CONDITION_BY_VALUE;\n        }),\n            _arrayFilter2 = _slicedToArray(_arrayFilter, 1),\n            firstByValueCondition = _arrayFilter2[0];\n\n        var state = {};\n\n        var defaultBlankCellValue = _this3.hot.getTranslatedPhrase(C.FILTERS_VALUES_BLANK_CELLS);\n\n        if (firstByValueCondition) {\n          var rowValues = unifyColumnValues(arrayMap(filteredRowsFactory(physicalColumn, conditionsStack), function (row) {\n            return row.value;\n          }));\n\n          if (conditionArgsChange) {\n            firstByValueCondition.args[0] = conditionArgsChange;\n          }\n\n          var selectedValues = [];\n          var itemsSnapshot = intersectValues(rowValues, firstByValueCondition.args[0], defaultBlankCellValue, function (item) {\n            if (item.checked) {\n              selectedValues.push(item.value);\n            }\n          });\n          var column = stateInfo.editedConditionStack.column;\n          state.locale = _this3.hot.getCellMeta(0, column).locale;\n          state.args = [selectedValues];\n          state.command = getConditionDescriptor(CONDITION_BY_VALUE);\n          state.itemsSnapshot = itemsSnapshot;\n        } else {\n          state.args = [];\n          state.command = getConditionDescriptor(CONDITION_NONE);\n        }\n\n        _this3.state.setValueAtIndex(physicalColumn, state);\n      };\n\n      updateColumnState(stateInfo.editedConditionStack.column, stateInfo.editedConditionStack.conditions, stateInfo.conditionArgsChange, stateInfo.filteredRowsFactory); // Update the next \"by_value\" component (filter column conditions added after this condition).\n      // Its list of values has to be updated. As the new values by default are unchecked,\n      // the further component update is unnecessary.\n\n      if (stateInfo.dependentConditionStacks.length) {\n        updateColumnState(stateInfo.dependentConditionStacks[0].column, stateInfo.dependentConditionStacks[0].conditions, stateInfo.conditionArgsChange, stateInfo.filteredRowsFactory, stateInfo.editedConditionStack);\n      }\n    }\n    /**\n     * Get multiple select element.\n     *\n     * @returns {MultipleSelectUI}\n     */\n\n  }, {\n    key: \"getMultipleSelectElement\",\n    value: function getMultipleSelectElement() {\n      return this.elements.filter(function (element) {\n        return element instanceof MultipleSelectUI;\n      })[0];\n    }\n    /**\n     * Get object descriptor for menu item entry.\n     *\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getMenuItemDescriptor\",\n    value: function getMenuItemDescriptor() {\n      var _this4 = this;\n\n      return {\n        key: this.id,\n        name: this.name,\n        isCommand: false,\n        disableSelection: true,\n        hidden: function hidden() {\n          return _this4.isHidden();\n        },\n        renderer: function renderer(hot, wrapper, row, col, prop, value) {\n          addClass(wrapper.parentNode, 'htFiltersMenuValue');\n\n          var label = _this4.hot.rootDocument.createElement('div');\n\n          addClass(label, 'htFiltersMenuLabel');\n          label.textContent = value;\n          wrapper.appendChild(label);\n\n          if (!wrapper.parentNode.hasAttribute('ghost-table')) {\n            arrayEach(_this4.elements, function (ui) {\n              return wrapper.appendChild(ui.element);\n            });\n          }\n\n          return wrapper;\n        }\n      };\n    }\n    /**\n     * Reset elements to their initial state.\n     */\n\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      var defaultBlankCellValue = this.hot.getTranslatedPhrase(C.FILTERS_VALUES_BLANK_CELLS);\n      var values = unifyColumnValues(this._getColumnVisibleValues());\n      var items = intersectValues(values, values, defaultBlankCellValue);\n      this.getMultipleSelectElement().setItems(items);\n\n      _get(_getPrototypeOf(ValueComponent.prototype), \"reset\", this).call(this);\n\n      this.getMultipleSelectElement().setValue(values);\n      var lastSelectedColumn = this.hot.getPlugin('filters').getSelectedColumn().visualIndex;\n      this.getMultipleSelectElement().setLocale(this.hot.getCellMeta(0, lastSelectedColumn).locale);\n    }\n    /**\n     * Key down listener.\n     *\n     * @private\n     * @param {Event} event The DOM event object.\n     */\n\n  }, {\n    key: \"onInputKeyDown\",\n    value: function onInputKeyDown(event) {\n      if (isKey(event.keyCode, 'ESCAPE')) {\n        this.runLocalHooks('cancel');\n        stopImmediatePropagation(event);\n      }\n    }\n    /**\n     * Get data for currently selected column.\n     *\n     * @returns {Array}\n     * @private\n     */\n\n  }, {\n    key: \"_getColumnVisibleValues\",\n    value: function _getColumnVisibleValues() {\n      var lastSelectedColumn = this.hot.getPlugin('filters').getSelectedColumn();\n      var visualIndex = lastSelectedColumn && lastSelectedColumn.visualIndex;\n      return arrayMap(this.hot.getDataAtCol(visualIndex), function (v) {\n        return toEmptyString(v);\n      });\n    }\n  }]);\n\n  return ValueComponent;\n}(BaseComponent);\n\nexport default ValueComponent;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport { addClass, getScrollbarWidth } from \"../../../helpers/dom/element.mjs\";\nimport { clone, extend } from \"../../../helpers/object.mjs\";\nimport { arrayFilter, arrayMap, arrayEach } from \"../../../helpers/array.mjs\";\nimport { isKey } from \"../../../helpers/unicode.mjs\";\nimport { partial } from \"../../../helpers/function.mjs\";\nimport { dataRowToChangesArray } from \"../../../helpers/data.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nimport { stopImmediatePropagation } from \"../../../helpers/dom/event.mjs\";\nimport BaseUI from \"./_base.mjs\";\nimport InputUI from \"./input.mjs\";\nimport LinkUI from \"./link.mjs\";\nimport { createArrayAssertion } from \"../utils.mjs\";\nvar privatePool = new WeakMap();\n/**\n * @private\n * @class MultipleSelectUI\n */\n\nvar MultipleSelectUI = /*#__PURE__*/function (_BaseUI) {\n  _inherits(MultipleSelectUI, _BaseUI);\n\n  var _super = _createSuper(MultipleSelectUI);\n\n  function MultipleSelectUI(hotInstance, options) {\n    var _this;\n\n    _classCallCheck(this, MultipleSelectUI);\n\n    _this = _super.call(this, hotInstance, extend(MultipleSelectUI.DEFAULTS, options));\n    privatePool.set(_assertThisInitialized(_this), {});\n    /**\n     * Input element.\n     *\n     * @type {InputUI}\n     */\n\n    _this.searchInput = new InputUI(_this.hot, {\n      placeholder: C.FILTERS_BUTTONS_PLACEHOLDER_SEARCH,\n      className: 'htUIMultipleSelectSearch'\n    });\n    /**\n     * \"Select all\" UI element.\n     *\n     * @type {BaseUI}\n     */\n\n    _this.selectAllUI = new LinkUI(_this.hot, {\n      textContent: C.FILTERS_BUTTONS_SELECT_ALL,\n      className: 'htUISelectAll'\n    });\n    /**\n     * \"Clear\" UI element.\n     *\n     * @type {BaseUI}\n     */\n\n    _this.clearAllUI = new LinkUI(_this.hot, {\n      textContent: C.FILTERS_BUTTONS_CLEAR,\n      className: 'htUIClearAll'\n    });\n    /**\n     * List of available select options.\n     *\n     * @type {Array}\n     */\n\n    _this.items = [];\n    /**\n     * Handsontable instance used as items list element.\n     *\n     * @type {Handsontable}\n     */\n\n    _this.itemsBox = null;\n\n    _this.registerHooks();\n\n    return _this;\n  }\n  /**\n   * Register all necessary hooks.\n   */\n\n\n  _createClass(MultipleSelectUI, [{\n    key: \"registerHooks\",\n    value: function registerHooks() {\n      var _this2 = this;\n\n      this.searchInput.addLocalHook('keydown', function (event) {\n        return _this2.onInputKeyDown(event);\n      });\n      this.searchInput.addLocalHook('input', function (event) {\n        return _this2.onInput(event);\n      });\n      this.selectAllUI.addLocalHook('click', function (event) {\n        return _this2.onSelectAllClick(event);\n      });\n      this.clearAllUI.addLocalHook('click', function (event) {\n        return _this2.onClearAllClick(event);\n      });\n    }\n    /**\n     * Set available options.\n     *\n     * @param {Array} items Array of objects with `checked` and `label` property.\n     */\n\n  }, {\n    key: \"setItems\",\n    value: function setItems(items) {\n      this.items = items;\n\n      if (this.itemsBox) {\n        this.itemsBox.loadData(this.items);\n      }\n    }\n    /**\n     * Set a locale for the component.\n     *\n     * @param {string} locale Locale used for filter actions performed on data, ie. `en-US`.\n     */\n\n  }, {\n    key: \"setLocale\",\n    value: function setLocale(locale) {\n      this.locale = locale;\n    }\n    /**\n     * Get a locale for the component.\n     *\n     * @returns {string}\n     */\n\n  }, {\n    key: \"getLocale\",\n    value: function getLocale() {\n      return this.locale;\n    }\n    /**\n     * Get all available options.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getItems\",\n    value: function getItems() {\n      return _toConsumableArray(this.items);\n    }\n    /**\n     * Get element value.\n     *\n     * @returns {Array} Array of selected values.\n     */\n\n  }, {\n    key: \"getValue\",\n    value: function getValue() {\n      return itemsToValue(this.items);\n    }\n    /**\n     * Check if all values listed in element are selected.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSelectedAllValues\",\n    value: function isSelectedAllValues() {\n      return this.items.length === this.getValue().length;\n    }\n    /**\n     * Build DOM structure.\n     */\n\n  }, {\n    key: \"build\",\n    value: function build() {\n      var _this3 = this;\n\n      _get(_getPrototypeOf(MultipleSelectUI.prototype), \"build\", this).call(this);\n\n      var rootDocument = this.hot.rootDocument;\n      var itemsBoxWrapper = rootDocument.createElement('div');\n      var selectionControl = new BaseUI(this.hot, {\n        className: 'htUISelectionControls',\n        children: [this.selectAllUI, this.clearAllUI]\n      });\n\n      this._element.appendChild(this.searchInput.element);\n\n      this._element.appendChild(selectionControl.element);\n\n      this._element.appendChild(itemsBoxWrapper);\n\n      var hotInitializer = function hotInitializer(wrapper) {\n        if (!_this3._element) {\n          return;\n        }\n\n        if (_this3.itemsBox) {\n          _this3.itemsBox.destroy();\n        }\n\n        addClass(wrapper, 'htUIMultipleSelectHot'); // Construct and initialise a new Handsontable\n\n        _this3.itemsBox = new _this3.hot.constructor(wrapper, {\n          data: _this3.items,\n          columns: [{\n            data: 'checked',\n            type: 'checkbox',\n            label: {\n              property: 'visualValue',\n              position: 'after'\n            }\n          }],\n          beforeRenderer: function beforeRenderer(TD, row, col, prop, value, cellProperties) {\n            TD.title = cellProperties.instance.getDataAtRowProp(row, cellProperties.label.property);\n          },\n          maxCols: 1,\n          autoWrapCol: true,\n          height: 110,\n          // Workaround for #151.\n          colWidths: function colWidths() {\n            return _this3.itemsBox.container.scrollWidth - getScrollbarWidth(rootDocument);\n          },\n          copyPaste: false,\n          disableVisualSelection: 'area',\n          fillHandle: false,\n          fragmentSelection: 'cell',\n          tabMoves: {\n            row: 1,\n            col: 0\n          },\n          beforeKeyDown: function beforeKeyDown(event) {\n            return _this3.onItemsBoxBeforeKeyDown(event);\n          }\n        });\n\n        _this3.itemsBox.init();\n      };\n\n      hotInitializer(itemsBoxWrapper);\n      setTimeout(function () {\n        return hotInitializer(itemsBoxWrapper);\n      }, 100);\n    }\n    /**\n     * Reset DOM structure.\n     */\n\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this.searchInput.reset();\n      this.selectAllUI.reset();\n      this.clearAllUI.reset();\n    }\n    /**\n     * Update DOM structure.\n     */\n\n  }, {\n    key: \"update\",\n    value: function update() {\n      if (!this.isBuilt()) {\n        return;\n      }\n\n      this.itemsBox.loadData(valueToItems(this.items, this.options.value));\n\n      _get(_getPrototypeOf(MultipleSelectUI.prototype), \"update\", this).call(this);\n    }\n    /**\n     * Destroy instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.itemsBox) {\n        this.itemsBox.destroy();\n      }\n\n      this.searchInput.destroy();\n      this.clearAllUI.destroy();\n      this.selectAllUI.destroy();\n      this.searchInput = null;\n      this.clearAllUI = null;\n      this.selectAllUI = null;\n      this.itemsBox = null;\n      this.items = null;\n\n      _get(_getPrototypeOf(MultipleSelectUI.prototype), \"destroy\", this).call(this);\n    }\n    /**\n     * 'input' event listener for input element.\n     *\n     * @private\n     * @param {Event} event DOM event.\n     */\n\n  }, {\n    key: \"onInput\",\n    value: function onInput(event) {\n      var _this4 = this;\n\n      var value = event.target.value.toLocaleLowerCase(this.getLocale());\n      var filteredItems;\n\n      if (value === '') {\n        filteredItems = _toConsumableArray(this.items);\n      } else {\n        filteredItems = arrayFilter(this.items, function (item) {\n          return \"\".concat(item.value).toLocaleLowerCase(_this4.getLocale()).indexOf(value) >= 0;\n        });\n      }\n\n      this.itemsBox.loadData(filteredItems);\n    }\n    /**\n     * 'keydown' event listener for input element.\n     *\n     * @private\n     * @param {Event} event DOM event.\n     */\n\n  }, {\n    key: \"onInputKeyDown\",\n    value: function onInputKeyDown(event) {\n      this.runLocalHooks('keydown', event, this);\n      var isKeyCode = partial(isKey, event.keyCode);\n\n      if (isKeyCode('ARROW_DOWN|TAB') && !this.itemsBox.isListening()) {\n        stopImmediatePropagation(event);\n        this.itemsBox.listen();\n        this.itemsBox.selectCell(0, 0);\n      }\n    }\n    /**\n     * On before key down listener (internal Handsontable).\n     *\n     * @private\n     * @param {Event} event DOM event.\n     */\n\n  }, {\n    key: \"onItemsBoxBeforeKeyDown\",\n    value: function onItemsBoxBeforeKeyDown(event) {\n      var isKeyCode = partial(isKey, event.keyCode);\n\n      if (isKeyCode('ESCAPE')) {\n        this.runLocalHooks('keydown', event, this);\n      } // for keys different than below, unfocus Handsontable and focus search input\n\n\n      if (!isKeyCode('ARROW_UP|ARROW_DOWN|ARROW_LEFT|ARROW_RIGHT|TAB|SPACE|ENTER')) {\n        stopImmediatePropagation(event);\n        this.itemsBox.unlisten();\n        this.itemsBox.deselectCell();\n        this.searchInput.focus();\n      }\n    }\n    /**\n     * On click listener for \"Select all\" link.\n     *\n     * @private\n     * @param {DOMEvent} event The mouse event object.\n     */\n\n  }, {\n    key: \"onSelectAllClick\",\n    value: function onSelectAllClick(event) {\n      var changes = [];\n      event.preventDefault();\n      arrayEach(this.itemsBox.getSourceData(), function (row, rowIndex) {\n        row.checked = true;\n        changes.push(dataRowToChangesArray(row, rowIndex)[0]);\n      });\n      this.itemsBox.setSourceDataAtCell(changes);\n    }\n    /**\n     * On click listener for \"Clear\" link.\n     *\n     * @private\n     * @param {DOMEvent} event The mouse event object.\n     */\n\n  }, {\n    key: \"onClearAllClick\",\n    value: function onClearAllClick(event) {\n      var changes = [];\n      event.preventDefault();\n      arrayEach(this.itemsBox.getSourceData(), function (row, rowIndex) {\n        row.checked = false;\n        changes.push(dataRowToChangesArray(row, rowIndex)[0]);\n      });\n      this.itemsBox.setSourceDataAtCell(changes);\n    }\n  }], [{\n    key: \"DEFAULTS\",\n    get: function get() {\n      return clone({\n        className: 'htUIMultipleSelect',\n        value: []\n      });\n    }\n  }]);\n\n  return MultipleSelectUI;\n}(BaseUI);\n\nexport default MultipleSelectUI;\n/**\n * Pick up object items based on selected values.\n *\n * @param {Array} availableItems Base collection to compare values.\n * @param {Array} selectedValue Flat array with selected values.\n * @returns {Array}\n */\n\nfunction valueToItems(availableItems, selectedValue) {\n  var arrayAssertion = createArrayAssertion(selectedValue);\n  return arrayMap(availableItems, function (item) {\n    item.checked = arrayAssertion(item.value);\n    return item;\n  });\n}\n/**\n * Convert all checked items into flat array.\n *\n * @param {Array} availableItems Base collection.\n * @returns {Array}\n */\n\n\nfunction itemsToValue(availableItems) {\n  var items = [];\n  arrayEach(availableItems, function (item) {\n    if (item.checked) {\n      items.push(item.value);\n    }\n  });\n  return items;\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.string.link.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport { clone, extend } from \"../../../helpers/object.mjs\";\nimport BaseUI from \"./_base.mjs\";\nvar privatePool = new WeakMap();\n/**\n * @private\n * @class LinkUI\n */\n\nvar LinkUI = /*#__PURE__*/function (_BaseUI) {\n  _inherits(LinkUI, _BaseUI);\n\n  var _super = _createSuper(LinkUI);\n\n  function LinkUI(hotInstance, options) {\n    var _this;\n\n    _classCallCheck(this, LinkUI);\n\n    _this = _super.call(this, hotInstance, extend(LinkUI.DEFAULTS, options));\n    privatePool.set(_assertThisInitialized(_this), {});\n    return _this;\n  }\n  /**\n   * Build DOM structure.\n   */\n\n\n  _createClass(LinkUI, [{\n    key: \"build\",\n    value: function build() {\n      _get(_getPrototypeOf(LinkUI.prototype), \"build\", this).call(this);\n\n      var priv = privatePool.get(this);\n      priv.link = this._element.firstChild;\n    }\n    /**\n     * Update element.\n     */\n\n  }, {\n    key: \"update\",\n    value: function update() {\n      if (!this.isBuilt()) {\n        return;\n      }\n\n      privatePool.get(this).link.textContent = this.translateIfPossible(this.options.textContent);\n    }\n  }], [{\n    key: \"DEFAULTS\",\n    get: function get() {\n      return clone({\n        href: '#',\n        tagName: 'a'\n      });\n    }\n  }]);\n\n  return LinkUI;\n}(BaseUI);\n\nexport default LinkUI;", "'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.link` method\n// https://tc39.es/ecma262/#sec-string.prototype.link\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {\n  link: function link(url) {\n    return createHTML(this, 'a', 'href', url);\n  }\n});\n", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { addClass } from \"../../../helpers/dom/element.mjs\";\nimport { arrayEach } from \"../../../helpers/array.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nimport BaseComponent from \"./_base.mjs\";\nimport InputUI from \"../ui/input.mjs\";\n/**\n * @private\n * @class ActionBarComponent\n */\n\nvar ActionBarComponent = /*#__PURE__*/function (_BaseComponent) {\n  _inherits(ActionBarComponent, _BaseComponent);\n\n  var _super = _createSuper(ActionBarComponent);\n\n  function ActionBarComponent(hotInstance, options) {\n    var _this;\n\n    _classCallCheck(this, ActionBarComponent);\n\n    _this = _super.call(this, hotInstance, {\n      id: options.id,\n      stateless: true\n    });\n    _this.name = options.name;\n\n    _this.elements.push(new InputUI(_this.hot, {\n      type: 'button',\n      value: C.FILTERS_BUTTONS_OK,\n      className: 'htUIButton htUIButtonOK',\n      identifier: ActionBarComponent.BUTTON_OK\n    }));\n\n    _this.elements.push(new InputUI(_this.hot, {\n      type: 'button',\n      value: C.FILTERS_BUTTONS_CANCEL,\n      className: 'htUIButton htUIButtonCancel',\n      identifier: ActionBarComponent.BUTTON_CANCEL\n    }));\n\n    _this.registerHooks();\n\n    return _this;\n  }\n  /**\n   * Register all necessary hooks.\n   *\n   * @private\n   */\n\n\n  _createClass(ActionBarComponent, [{\n    key: \"registerHooks\",\n    value: function registerHooks() {\n      var _this2 = this;\n\n      arrayEach(this.elements, function (element) {\n        element.addLocalHook('click', function (event, button) {\n          return _this2.onButtonClick(event, button);\n        });\n      });\n    }\n    /**\n     * Get menu object descriptor.\n     *\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getMenuItemDescriptor\",\n    value: function getMenuItemDescriptor() {\n      var _this3 = this;\n\n      return {\n        key: this.id,\n        name: this.name,\n        isCommand: false,\n        disableSelection: true,\n        hidden: function hidden() {\n          return _this3.isHidden();\n        },\n        renderer: function renderer(hot, wrapper) {\n          addClass(wrapper.parentNode, 'htFiltersMenuActionBar');\n\n          if (!wrapper.parentNode.hasAttribute('ghost-table')) {\n            arrayEach(_this3.elements, function (ui) {\n              return wrapper.appendChild(ui.element);\n            });\n          }\n\n          return wrapper;\n        }\n      };\n    }\n    /**\n     * Fire accept event.\n     */\n\n  }, {\n    key: \"accept\",\n    value: function accept() {\n      this.runLocalHooks('accept');\n    }\n    /**\n     * Fire cancel event.\n     */\n\n  }, {\n    key: \"cancel\",\n    value: function cancel() {\n      this.runLocalHooks('cancel');\n    }\n    /**\n     * On button click listener.\n     *\n     * @private\n     * @param {Event} event DOM event.\n     * @param {InputUI} button InputUI object.\n     */\n\n  }, {\n    key: \"onButtonClick\",\n    value: function onButtonClick(event, button) {\n      if (button.options.identifier === ActionBarComponent.BUTTON_OK) {\n        this.accept();\n      } else {\n        this.cancel();\n      }\n    }\n  }], [{\n    key: \"BUTTON_OK\",\n    get: function get() {\n      return 'ok';\n    }\n  }, {\n    key: \"BUTTON_CANCEL\",\n    get: function get() {\n      return 'cancel';\n    }\n  }]);\n\n  return ActionBarComponent;\n}(BaseComponent);\n\nexport default ActionBarComponent;", "import \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nvar _templateObject, _templateObject2;\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { arrayEach, arrayMap, arrayReduce } from \"../../helpers/array.mjs\";\nimport { mixin } from \"../../helpers/object.mjs\";\nimport { toSingleLine } from \"../../helpers/templateLiteralTag.mjs\";\nimport localHooks from \"../../mixins/localHooks.mjs\";\nimport { getCondition } from \"./conditionRegisterer.mjs\";\nimport { OPERATION_ID as OPERATION_AND } from \"./logicalOperations/conjunction.mjs\";\nimport { operations, getOperationFunc } from \"./logicalOperationRegisterer.mjs\";\nimport { isUndefined } from \"../../helpers/mixed.mjs\";\nimport { LinkedPhysicalIndexToValueMap as IndexToValueMap } from \"../../translations/index.mjs\";\nvar MAP_NAME = 'ConditionCollection.filteringStates';\n/**\n * @private\n * @class ConditionCollection\n */\n\nvar ConditionCollection = /*#__PURE__*/function () {\n  function ConditionCollection(hot) {\n    var isMapRegistrable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    _classCallCheck(this, ConditionCollection);\n\n    /**\n     * Handsontable instance.\n     *\n     * @type {Core}\n     */\n    this.hot = hot;\n    /**\n     * Indicates whether the internal IndexMap should be registered or not. Generally,\n     * registered Maps responds to the index changes. Within that collection, sometimes\n     * this is not necessary.\n     *\n     * @type {boolean}\n     */\n\n    this.isMapRegistrable = isMapRegistrable;\n    /**\n     * Index map storing filtering states for every column. ConditionCollection write and read to/from this element.\n     *\n     * @type {LinkedPhysicalIndexToValueMap}\n     */\n\n    this.filteringStates = new IndexToValueMap();\n\n    if (this.isMapRegistrable === true) {\n      this.hot.columnIndexMapper.registerMap(MAP_NAME, this.filteringStates);\n    } else {\n      this.filteringStates.init(this.hot.columnIndexMapper.getNumberOfIndexes());\n    }\n  }\n  /**\n   * Check if condition collection is empty (so no needed to filter data).\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(ConditionCollection, [{\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return this.getFilteredColumns().length === 0;\n    }\n    /**\n     * Check if value is matched to the criteria of conditions chain.\n     *\n     * @param {object} value Object with `value` and `meta` keys.\n     * @param {number} column The physical column index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isMatch\",\n    value: function isMatch(value, column) {\n      var _stateForColumn$condi;\n\n      var stateForColumn = this.filteringStates.getValueAtIndex(column);\n      var conditions = (_stateForColumn$condi = stateForColumn === null || stateForColumn === void 0 ? void 0 : stateForColumn.conditions) !== null && _stateForColumn$condi !== void 0 ? _stateForColumn$condi : [];\n      var operation = stateForColumn === null || stateForColumn === void 0 ? void 0 : stateForColumn.operation;\n      return this.isMatchInConditions(conditions, value, operation);\n    }\n    /**\n     * Check if the value is matches the conditions.\n     *\n     * @param {Array} conditions List of conditions.\n     * @param {object} value Object with `value` and `meta` keys.\n     * @param {string} [operationType='conjunction'] Type of conditions operation.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isMatchInConditions\",\n    value: function isMatchInConditions(conditions, value) {\n      var operationType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : OPERATION_AND;\n\n      if (conditions.length) {\n        return getOperationFunc(operationType)(conditions, value);\n      }\n\n      return true;\n    }\n    /**\n     * Add condition to the collection.\n     *\n     * @param {number} column The physical column index.\n     * @param {object} conditionDefinition Object with keys:\n     *  * `command` Object, Command object with condition name as `key` property.\n     *  * `args` Array, Condition arguments.\n     * @param {string} [operation='conjunction'] Type of conditions operation.\n     * @param {number} [position] Position to which condition will be added. When argument is undefined\n     * the condition will be processed as the last condition.\n     * @fires ConditionCollection#beforeAdd\n     * @fires ConditionCollection#afterAdd\n     */\n\n  }, {\n    key: \"addCondition\",\n    value: function addCondition(column, conditionDefinition) {\n      var operation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : OPERATION_AND;\n      var position = arguments.length > 3 ? arguments[3] : undefined;\n      var localeForColumn = this.hot.getCellMeta(0, column).locale;\n      var args = arrayMap(conditionDefinition.args, function (v) {\n        return typeof v === 'string' ? v.toLocaleLowerCase(localeForColumn) : v;\n      });\n      var name = conditionDefinition.name || conditionDefinition.command.key;\n      this.runLocalHooks('beforeAdd', column);\n      var columnType = this.getOperation(column);\n\n      if (columnType) {\n        if (columnType !== operation) {\n          throw Error(toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"The column of index \", \" has been already applied with a `\", \"` \\n        filter operation. Use `removeConditions` to clear the current conditions and then add new ones. \\n        Mind that you cannot mix different types of operations (for instance, if you use `conjunction`, \\n        use it consequently for a particular column).\"], [\"The column of index \", \" has been already applied with a \\\\`\", \"\\\\`\\\\x20\\n        filter operation. Use \\\\`removeConditions\\\\` to clear the current conditions and then add new ones.\\\\x20\\n        Mind that you cannot mix different types of operations (for instance, if you use \\\\`conjunction\\\\`,\\\\x20\\n        use it consequently for a particular column).\"])), column, columnType));\n        }\n      } else if (isUndefined(operations[operation])) {\n        throw new Error(toSingleLine(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral([\"Unexpected operation named `\", \"`. Possible ones are \\n        `disjunction` and `conjunction`.\"], [\"Unexpected operation named \\\\`\", \"\\\\`. Possible ones are\\\\x20\\n        \\\\`disjunction\\\\` and \\\\`conjunction\\\\`.\"])), operation));\n      }\n\n      var conditionsForColumn = this.getConditions(column);\n\n      if (conditionsForColumn.length === 0) {\n        // Create first condition for particular column.\n        this.filteringStates.setValueAtIndex(column, {\n          operation: operation,\n          conditions: [{\n            name: name,\n            args: args,\n            func: getCondition(name, args)\n          }]\n        }, position);\n      } else {\n        // Add next condition for particular column (by reference).\n        conditionsForColumn.push({\n          name: name,\n          args: args,\n          func: getCondition(name, args)\n        });\n      }\n\n      this.runLocalHooks('afterAdd', column);\n    }\n    /**\n     * Get all added conditions from the collection at specified column index.\n     *\n     * @param {number} column The physical column index.\n     * @returns {Array} Returns conditions collection as an array.\n     */\n\n  }, {\n    key: \"getConditions\",\n    value: function getConditions(column) {\n      var _this$filteringStates, _this$filteringStates2;\n\n      return (_this$filteringStates = (_this$filteringStates2 = this.filteringStates.getValueAtIndex(column)) === null || _this$filteringStates2 === void 0 ? void 0 : _this$filteringStates2.conditions) !== null && _this$filteringStates !== void 0 ? _this$filteringStates : [];\n    }\n    /**\n     * Get operation for particular column.\n     *\n     * @param {number} column The physical column index.\n     * @returns {string|undefined}\n     */\n\n  }, {\n    key: \"getOperation\",\n    value: function getOperation(column) {\n      var _this$filteringStates3;\n\n      return (_this$filteringStates3 = this.filteringStates.getValueAtIndex(column)) === null || _this$filteringStates3 === void 0 ? void 0 : _this$filteringStates3.operation;\n    }\n    /**\n     * Get all filtered physical columns in the order in which actions are performed.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getFilteredColumns\",\n    value: function getFilteredColumns() {\n      return this.filteringStates.getEntries().map(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 1),\n            physicalColumn = _ref2[0];\n\n        return physicalColumn;\n      });\n    }\n    /**\n     * Gets position in the filtering states stack for the specific column.\n     *\n     * @param {number} column The physical column index.\n     * @returns {number} Returns -1 when the column doesn't exist in the stack.\n     */\n\n  }, {\n    key: \"getColumnStackPosition\",\n    value: function getColumnStackPosition(column) {\n      return this.getFilteredColumns().indexOf(column);\n    }\n    /**\n     * Export all previously added conditions.\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"exportAllConditions\",\n    value: function exportAllConditions() {\n      return arrayReduce(this.filteringStates.getEntries(), function (allConditions, _ref3) {\n        var _ref4 = _slicedToArray(_ref3, 2),\n            column = _ref4[0],\n            _ref4$ = _ref4[1],\n            operation = _ref4$.operation,\n            conditions = _ref4$.conditions;\n\n        allConditions.push({\n          column: column,\n          operation: operation,\n          conditions: arrayMap(conditions, function (_ref5) {\n            var name = _ref5.name,\n                args = _ref5.args;\n            return {\n              name: name,\n              args: args\n            };\n          })\n        });\n        return allConditions;\n      }, []);\n    }\n    /**\n     * Import conditions to the collection.\n     *\n     * @param {Array} conditions The collection of the conditions.\n     */\n\n  }, {\n    key: \"importAllConditions\",\n    value: function importAllConditions(conditions) {\n      var _this = this;\n\n      this.clean();\n      arrayEach(conditions, function (stack) {\n        arrayEach(stack.conditions, function (condition) {\n          return _this.addCondition(stack.column, condition);\n        });\n      });\n    }\n    /**\n     * Remove conditions at given column index.\n     *\n     * @param {number} column The physical column index.\n     * @fires ConditionCollection#beforeRemove\n     * @fires ConditionCollection#afterRemove\n     */\n\n  }, {\n    key: \"removeConditions\",\n    value: function removeConditions(column) {\n      this.runLocalHooks('beforeRemove', column);\n      this.filteringStates.clearValue(column);\n      this.runLocalHooks('afterRemove', column);\n    }\n    /**\n     * Clean all conditions collection and reset order stack.\n     *\n     * @fires ConditionCollection#beforeClean\n     * @fires ConditionCollection#afterClean\n     */\n\n  }, {\n    key: \"clean\",\n    value: function clean() {\n      this.runLocalHooks('beforeClean');\n      this.filteringStates.clear();\n      this.runLocalHooks('afterClean');\n    }\n    /**\n     * Check if at least one condition was added at specified column index. And if second parameter is passed then additionally\n     * check if condition exists under its name.\n     *\n     * @param {number} column The physical column index.\n     * @param {string} [name] Condition name.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"hasConditions\",\n    value: function hasConditions(column, name) {\n      var conditions = this.getConditions(column);\n\n      if (name) {\n        return conditions.some(function (condition) {\n          return condition.name === name;\n        });\n      }\n\n      return conditions.length > 0;\n    }\n    /**\n     * Destroy object.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.isMapRegistrable) {\n        this.hot.columnIndexMapper.unregisterMap(MAP_NAME);\n      }\n\n      this.filteringStates = null;\n      this.clearLocalHooks();\n    }\n  }]);\n\n  return ConditionCollection;\n}();\n\nmixin(ConditionCollection, localHooks);\nexport default ConditionCollection;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { arrayEach } from \"../../helpers/array.mjs\";\n/**\n * @private\n * @class DataFilter\n */\n\nvar DataFilter = /*#__PURE__*/function () {\n  function DataFilter(conditionCollection) {\n    var columnDataFactory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {\n      return [];\n    };\n\n    _classCallCheck(this, DataFilter);\n\n    /**\n     * Reference to the instance of {ConditionCollection}.\n     *\n     * @type {ConditionCollection}\n     */\n    this.conditionCollection = conditionCollection;\n    /**\n     * Function which provide source data factory for specified column.\n     *\n     * @type {Function}\n     */\n\n    this.columnDataFactory = columnDataFactory;\n  }\n  /**\n   * Filter data based on the conditions collection.\n   *\n   * @returns {Array}\n   */\n\n\n  _createClass(DataFilter, [{\n    key: \"filter\",\n    value: function filter() {\n      var _this = this;\n\n      var filteredData = [];\n      arrayEach(this.conditionCollection.getFilteredColumns(), function (physicalColumn, index) {\n        var columnData = _this.columnDataFactory(physicalColumn);\n\n        if (index) {\n          columnData = _this._getIntersectData(columnData, filteredData);\n        }\n\n        filteredData = _this.filterByColumn(physicalColumn, columnData);\n      });\n      return filteredData;\n    }\n    /**\n     * Filter data based on specified physical column index.\n     *\n     * @param {number} column The physical column index.\n     * @param {Array} [dataSource] Data source as array of objects with `value` and `meta` keys (e.g. `{value: 'foo', meta: {}}`).\n     * @returns {Array} Returns filtered data.\n     */\n\n  }, {\n    key: \"filterByColumn\",\n    value: function filterByColumn(column) {\n      var _this2 = this;\n\n      var dataSource = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      var filteredData = [];\n      arrayEach(dataSource, function (dataRow) {\n        if (dataRow !== void 0 && _this2.conditionCollection.isMatch(dataRow, column)) {\n          filteredData.push(dataRow);\n        }\n      });\n      return filteredData;\n    }\n    /**\n     * Intersect data.\n     *\n     * @private\n     * @param {Array} data The data to intersect.\n     * @param {Array} needles The collection intersected rows with the data.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"_getIntersectData\",\n    value: function _getIntersectData(data, needles) {\n      var result = [];\n      arrayEach(needles, function (needleRow) {\n        var row = needleRow.meta.visualRow;\n\n        if (data[row] !== void 0) {\n          result[row] = data[row];\n        }\n      });\n      return result;\n    }\n  }]);\n\n  return DataFilter;\n}();\n\nexport default DataFilter;", "import \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { arrayEach, arrayMap, arrayFilter } from \"../../helpers/array.mjs\";\nimport { mixin, objectEach } from \"../../helpers/object.mjs\";\nimport { curry } from \"../../helpers/function.mjs\";\nimport localHooks from \"../../mixins/localHooks.mjs\";\nimport ConditionCollection from \"./conditionCollection.mjs\";\nimport DataFilter from \"./dataFilter.mjs\";\nimport { createArrayAssertion } from \"./utils.mjs\";\n/**\n * Class which is designed for observing changes in condition collection. When condition is changed by user at specified\n * column it's necessary to update all conditions defined after this edited one.\n *\n * Object fires `update` hook for every column conditions change.\n *\n * @private\n * @class ConditionUpdateObserver\n */\n\nvar ConditionUpdateObserver = /*#__PURE__*/function () {\n  function ConditionUpdateObserver(hot, conditionCollection) {\n    var _this = this;\n\n    var columnDataFactory = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {\n      return [];\n    };\n\n    _classCallCheck(this, ConditionUpdateObserver);\n\n    /**\n     * Handsontable instance.\n     *\n     * @type {Core}\n     */\n    this.hot = hot;\n    /**\n     * Reference to the instance of {@link ConditionCollection}.\n     *\n     * @type {ConditionCollection}\n     */\n\n    this.conditionCollection = conditionCollection;\n    /**\n     * Function which provide source data factory for specified column.\n     *\n     * @type {Function}\n     */\n\n    this.columnDataFactory = columnDataFactory;\n    /**\n     * Collected changes when grouping is enabled.\n     *\n     * @type {Array}\n     * @default []\n     */\n\n    this.changes = [];\n    /**\n     * Flag which determines if grouping events is enabled.\n     *\n     * @type {boolean}\n     */\n\n    this.grouping = false;\n    /**\n     * The latest known position of edited conditions at specified column index.\n     *\n     * @type {number}\n     * @default -1\n     */\n\n    this.latestEditedColumnPosition = -1;\n    /**\n     * The latest known order of conditions stack.\n     *\n     * @type {Array}\n     */\n\n    this.latestOrderStack = [];\n    this.conditionCollection.addLocalHook('beforeRemove', function (column) {\n      return _this._onConditionBeforeModify(column);\n    });\n    this.conditionCollection.addLocalHook('afterRemove', function (column) {\n      return _this.updateStatesAtColumn(column);\n    });\n    this.conditionCollection.addLocalHook('afterAdd', function (column) {\n      return _this.updateStatesAtColumn(column);\n    });\n    this.conditionCollection.addLocalHook('beforeClean', function () {\n      return _this._onConditionBeforeClean();\n    });\n    this.conditionCollection.addLocalHook('afterClean', function () {\n      return _this._onConditionAfterClean();\n    });\n  }\n  /**\n   * Enable grouping changes. Grouping is helpful in situations when a lot of conditions is added in one moment. Instead of\n   * trigger `update` hook for every condition by adding/removing you can group this changes and call `flush` method to trigger\n   * it once.\n   */\n\n\n  _createClass(ConditionUpdateObserver, [{\n    key: \"groupChanges\",\n    value: function groupChanges() {\n      this.grouping = true;\n    }\n    /**\n     * Flush all collected changes. This trigger `update` hook for every previously collected change from condition collection.\n     */\n\n  }, {\n    key: \"flush\",\n    value: function flush() {\n      var _this2 = this;\n\n      this.grouping = false;\n      arrayEach(this.changes, function (column) {\n        _this2.updateStatesAtColumn(column);\n      });\n      this.changes.length = 0;\n    }\n    /**\n     * On before modify condition (add or remove from collection),.\n     *\n     * @param {number} column Column index.\n     * @private\n     */\n\n  }, {\n    key: \"_onConditionBeforeModify\",\n    value: function _onConditionBeforeModify(column) {\n      this.latestEditedColumnPosition = this.conditionCollection.getColumnStackPosition(column);\n    }\n    /**\n     * Update all related states which should be changed after invoking changes applied to current column.\n     *\n     * @param {number} column The column index.\n     * @param {object} conditionArgsChange Object describing condition changes which can be handled by filters on `update` hook.\n     * It contains keys `conditionKey` and `conditionValue` which refers to change specified key of condition to specified value\n     * based on referred keys.\n     */\n\n  }, {\n    key: \"updateStatesAtColumn\",\n    value: function updateStatesAtColumn(column, conditionArgsChange) {\n      var _this3 = this;\n\n      if (this.grouping) {\n        if (this.changes.indexOf(column) === -1) {\n          this.changes.push(column);\n        }\n\n        return;\n      }\n\n      var allConditions = this.conditionCollection.exportAllConditions();\n      var editedColumnPosition = this.conditionCollection.getColumnStackPosition(column);\n\n      if (editedColumnPosition === -1) {\n        editedColumnPosition = this.latestEditedColumnPosition;\n      } // Collection of all conditions defined before currently edited `column` (without edited one)\n\n\n      var conditionsBefore = allConditions.slice(0, editedColumnPosition); // Collection of all conditions defined after currently edited `column` (with edited one)\n\n      var conditionsAfter = allConditions.slice(editedColumnPosition); // Make sure that conditionAfter doesn't contain edited column conditions\n\n      if (conditionsAfter.length && conditionsAfter[0].column === column) {\n        conditionsAfter.shift();\n      }\n\n      var visibleDataFactory = curry(function (curriedConditionsBefore, curriedColumn) {\n        var conditionsStack = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n        var splitConditionCollection = new ConditionCollection(_this3.hot, false);\n        var curriedConditionsBeforeArray = [].concat(curriedConditionsBefore, conditionsStack); // Create new condition collection to determine what rows should be visible in \"filter by value\" box\n        // in the next conditions in the chain\n\n        splitConditionCollection.importAllConditions(curriedConditionsBeforeArray);\n\n        var allRows = _this3.columnDataFactory(curriedColumn);\n\n        var visibleRows;\n\n        if (splitConditionCollection.isEmpty()) {\n          visibleRows = allRows;\n        } else {\n          visibleRows = new DataFilter(splitConditionCollection, function (columnData) {\n            return _this3.columnDataFactory(columnData);\n          }).filter();\n        }\n\n        visibleRows = arrayMap(visibleRows, function (rowData) {\n          return rowData.meta.visualRow;\n        });\n        var visibleRowsAssertion = createArrayAssertion(visibleRows);\n        splitConditionCollection.destroy();\n        return arrayFilter(allRows, function (rowData) {\n          return visibleRowsAssertion(rowData.meta.visualRow);\n        });\n      })(conditionsBefore);\n      var editedConditions = [].concat(this.conditionCollection.getConditions(column));\n      this.runLocalHooks('update', {\n        editedConditionStack: {\n          column: column,\n          conditions: editedConditions\n        },\n        dependentConditionStacks: conditionsAfter,\n        filteredRowsFactory: visibleDataFactory,\n        conditionArgsChange: conditionArgsChange\n      });\n    }\n    /**\n     * On before conditions clean listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"_onConditionBeforeClean\",\n    value: function _onConditionBeforeClean() {\n      this.latestOrderStack = this.conditionCollection.getFilteredColumns();\n    }\n    /**\n     * On after conditions clean listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"_onConditionAfterClean\",\n    value: function _onConditionAfterClean() {\n      var _this4 = this;\n\n      arrayEach(this.latestOrderStack, function (column) {\n        _this4.updateStatesAtColumn(column);\n      });\n    }\n    /**\n     * Destroy instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this5 = this;\n\n      this.clearLocalHooks();\n      objectEach(this, function (value, property) {\n        _this5[property] = null;\n      });\n    }\n  }]);\n\n  return ConditionUpdateObserver;\n}();\n\nmixin(ConditionUpdateObserver, localHooks);\nexport default ConditionUpdateObserver;", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.array.reverse.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\n\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\n\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\n\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport staticRegister from \"../../utils/staticRegister.mjs\";\nimport { error, warn } from \"../../helpers/console.mjs\";\nimport { isNumeric } from \"../../helpers/number.mjs\";\nimport { isDefined, isUndefined } from \"../../helpers/mixed.mjs\";\nimport { setupEngine, setupSheet, unregisterEngine, getRegisteredHotInstances } from \"./engine/register.mjs\";\nimport { isEscapedFormulaExpression, unescapeFormulaExpression } from \"./utils.mjs\";\nimport { getEngineSettingsWithOverrides } from \"./engine/settings.mjs\";\nimport { isArrayOfArrays } from \"../../helpers/data.mjs\";\nimport { toUpperCaseFirst } from \"../../helpers/string.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nexport var PLUGIN_KEY = 'formulas';\nexport var PLUGIN_PRIORITY = 260;\nvar ROW_MOVE_UNDO_REDO_NAME = 'row_move';\nHooks.getSingleton().register('afterNamedExpressionAdded');\nHooks.getSingleton().register('afterNamedExpressionRemoved');\nHooks.getSingleton().register('afterSheetAdded');\nHooks.getSingleton().register('afterSheetRemoved');\nHooks.getSingleton().register('afterSheetRenamed');\nHooks.getSingleton().register('afterFormulasValuesUpdate'); // This function will be used for detecting changes coming from the `UndoRedo` plugin. This kind of change won't be\n// handled by whole body of listeners and therefore won't change undo/redo stack inside engine provided by HyperFormula.\n// HyperFormula's `undo` and `redo` methods will do it instead. Please keep in mind that undo/redo stacks inside\n// instances of Handsontable and HyperFormula should be synced (number of actions should be the same).\n\nvar isBlockedSource = function isBlockedSource(source) {\n  return source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto';\n};\n/**\n * This plugin allows you to perform Excel-like calculations in your business applications. It does it by an\n * integration with our other product, [HyperFormula](https://github.com/handsontable/hyperformula/), which is a\n * powerful calculation engine with an extensive number of features.\n *\n * To test out HyperFormula, see [this guide](@/guides/formulas/formula-calculation.md#available-functions).\n *\n * @plugin Formulas\n * @class Formulas\n */\n\n\nvar _internalOperationPending = /*#__PURE__*/new WeakMap();\n\nvar _hotWasInitializedWithEmptyData = /*#__PURE__*/new WeakMap();\n\nvar _engineListeners = /*#__PURE__*/new WeakMap();\n\nexport var Formulas = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(Formulas, _BasePlugin);\n\n  var _super = _createSuper(Formulas);\n\n  function Formulas() {\n    var _this;\n\n    _classCallCheck(this, Formulas);\n\n    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n      _args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(_args));\n\n    _classPrivateFieldInitSpec(_assertThisInitialized(_this), _internalOperationPending, {\n      writable: true,\n      value: false\n    });\n\n    _classPrivateFieldInitSpec(_assertThisInitialized(_this), _hotWasInitializedWithEmptyData, {\n      writable: true,\n      value: false\n    });\n\n    _classPrivateFieldInitSpec(_assertThisInitialized(_this), _engineListeners, {\n      writable: true,\n      value: [['valuesUpdated', function () {\n        var _this2;\n\n        return (_this2 = _this).onEngineValuesUpdated.apply(_this2, arguments);\n      }], ['namedExpressionAdded', function () {\n        var _this3;\n\n        return (_this3 = _this).onEngineNamedExpressionsAdded.apply(_this3, arguments);\n      }], ['namedExpressionRemoved', function () {\n        var _this4;\n\n        return (_this4 = _this).onEngineNamedExpressionsRemoved.apply(_this4, arguments);\n      }], ['sheetAdded', function () {\n        var _this5;\n\n        return (_this5 = _this).onEngineSheetAdded.apply(_this5, arguments);\n      }], ['sheetRenamed', function () {\n        var _this6;\n\n        return (_this6 = _this).onEngineSheetRenamed.apply(_this6, arguments);\n      }], ['sheetRemoved', function () {\n        var _this7;\n\n        return (_this7 = _this).onEngineSheetRemoved.apply(_this7, arguments);\n      }]]\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"staticRegister\", staticRegister('formulas'));\n\n    _defineProperty(_assertThisInitialized(_this), \"engine\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"sheetName\", null);\n\n    return _this;\n  }\n\n  _createClass(Formulas, [{\n    key: \"sheetId\",\n    get:\n    /**\n     * HyperFormula's sheet id.\n     *\n     * @type {number|null}\n     */\n    function get() {\n      return this.sheetName === null ? null : this.engine.getSheetId(this.sheetName);\n    }\n    /**\n     * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n     * hook and if it returns `true` than the {@link Formulas#enablePlugin} method is called.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      /* eslint-disable no-unneeded-ternary */\n      return this.hot.getSettings()[PLUGIN_KEY] ? true : false;\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _setupEngine,\n          _this8 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.engine = (_setupEngine = setupEngine(this.hot)) !== null && _setupEngine !== void 0 ? _setupEngine : this.engine;\n\n      if (!this.engine) {\n        warn('Missing the required `engine` key in the Formulas settings. Please fill it with either an' + ' engine class or an engine instance.');\n        return;\n      } // Useful for disabling -> enabling the plugin using `updateSettings` or the API.\n\n\n      if (this.sheetName !== null && !this.engine.doesSheetExist(this.sheetName)) {\n        var newSheetName = this.addSheet(this.sheetName, this.hot.getSourceDataArray());\n\n        if (newSheetName !== false) {\n          this.sheetName = newSheetName;\n        }\n      }\n\n      this.addHook('beforeLoadData', function () {\n        return _this8.onBeforeLoadData.apply(_this8, arguments);\n      });\n      this.addHook('afterLoadData', function () {\n        return _this8.onAfterLoadData.apply(_this8, arguments);\n      });\n      this.addHook('modifyData', function () {\n        return _this8.onModifyData.apply(_this8, arguments);\n      });\n      this.addHook('modifySourceData', function () {\n        return _this8.onModifySourceData.apply(_this8, arguments);\n      });\n      this.addHook('beforeValidate', function () {\n        return _this8.onBeforeValidate.apply(_this8, arguments);\n      });\n      this.addHook('afterSetSourceDataAtCell', function () {\n        return _this8.onAfterSetSourceDataAtCell.apply(_this8, arguments);\n      });\n      this.addHook('afterSetDataAtCell', function () {\n        return _this8.onAfterSetDataAtCell.apply(_this8, arguments);\n      });\n      this.addHook('afterSetDataAtRowProp', function () {\n        return _this8.onAfterSetDataAtCell.apply(_this8, arguments);\n      });\n      this.addHook('beforeCreateRow', function () {\n        return _this8.onBeforeCreateRow.apply(_this8, arguments);\n      });\n      this.addHook('beforeCreateCol', function () {\n        return _this8.onBeforeCreateCol.apply(_this8, arguments);\n      });\n      this.addHook('afterCreateRow', function () {\n        return _this8.onAfterCreateRow.apply(_this8, arguments);\n      });\n      this.addHook('afterCreateCol', function () {\n        return _this8.onAfterCreateCol.apply(_this8, arguments);\n      });\n      this.addHook('beforeRemoveRow', function () {\n        return _this8.onBeforeRemoveRow.apply(_this8, arguments);\n      });\n      this.addHook('beforeRemoveCol', function () {\n        return _this8.onBeforeRemoveCol.apply(_this8, arguments);\n      });\n      this.addHook('afterRemoveRow', function () {\n        return _this8.onAfterRemoveRow.apply(_this8, arguments);\n      });\n      this.addHook('afterRemoveCol', function () {\n        return _this8.onAfterRemoveCol.apply(_this8, arguments);\n      }); // Handling undo actions on data just using HyperFormula's UndoRedo mechanism\n\n      this.addHook('beforeUndo', function (action) {\n        // TODO: Move action isn't handled by HyperFormula.\n        if ((action === null || action === void 0 ? void 0 : action.actionType) === ROW_MOVE_UNDO_REDO_NAME) {\n          return;\n        }\n\n        _this8.engine.undo();\n      }); // Handling redo actions on data just using HyperFormula's UndoRedo mechanism\n\n      this.addHook('beforeRedo', function (action) {\n        // TODO: Move action isn't handled by HyperFormula.\n        if ((action === null || action === void 0 ? void 0 : action.actionType) === ROW_MOVE_UNDO_REDO_NAME) {\n          return;\n        }\n\n        _this8.engine.redo();\n      });\n      this.addHook('afterDetachChild', function () {\n        return _this8.onAfterDetachChild.apply(_this8, arguments);\n      });\n      this.addHook('beforeAutofill', function () {\n        return _this8.onBeforeAutofill.apply(_this8, arguments);\n      });\n\n      _classPrivateFieldGet(this, _engineListeners).forEach(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n            eventName = _ref2[0],\n            listener = _ref2[1];\n\n        return _this8.engine.on(eventName, listener);\n      });\n\n      _get(_getPrototypeOf(Formulas.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      var _this9 = this;\n\n      _classPrivateFieldGet(this, _engineListeners).forEach(function (_ref3) {\n        var _ref4 = _slicedToArray(_ref3, 2),\n            eventName = _ref4[0],\n            listener = _ref4[1];\n\n        return _this9.engine.off(eventName, listener);\n      });\n\n      unregisterEngine(this.engine, this.hot);\n      this.engine = null;\n\n      _get(_getPrototypeOf(Formulas.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Triggered on `updateSettings`.\n     *\n     * @private\n     * @param {object} newSettings New set of settings passed to the `updateSettings` method.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin(newSettings) {\n      this.engine.updateConfig(getEngineSettingsWithOverrides(this.hot.getSettings()));\n      var pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n      if (isDefined(pluginSettings) && isDefined(pluginSettings.sheetName) && pluginSettings.sheetName !== this.sheetName) {\n        this.switchSheet(pluginSettings.sheetName);\n      } // If no data was passed to the `updateSettings` method and no sheet is connected to the instance -> create a\n      // new sheet using the currently used data. Otherwise, it will be handled by the `afterLoadData` call.\n\n\n      if (!newSettings.data && this.sheetName === null) {\n        var sheetName = this.hot.getSettings()[PLUGIN_KEY].sheetName;\n\n        if (sheetName && this.engine.doesSheetExist(sheetName)) {\n          this.switchSheet(this.sheetName);\n        } else {\n          this.sheetName = this.addSheet(sheetName !== null && sheetName !== void 0 ? sheetName : void 0, this.hot.getSourceDataArray());\n        }\n      }\n\n      _get(_getPrototypeOf(Formulas.prototype), \"updatePlugin\", this).call(this, newSettings);\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this10 = this;\n\n      _classPrivateFieldGet(this, _engineListeners).forEach(function (_ref5) {\n        var _this10$engine;\n\n        var _ref6 = _slicedToArray(_ref5, 2),\n            eventName = _ref6[0],\n            listener = _ref6[1];\n\n        return (_this10$engine = _this10.engine) === null || _this10$engine === void 0 ? void 0 : _this10$engine.off(eventName, listener);\n      });\n\n      _classPrivateFieldSet(this, _engineListeners, null);\n\n      unregisterEngine(this.engine, this.hot);\n      this.engine = null;\n\n      _get(_getPrototypeOf(Formulas.prototype), \"destroy\", this).call(this);\n    }\n    /**\n     * Helper function for `toPhysicalRowPosition` and `toPhysicalColumnPosition`.\n     *\n     * @private\n     * @param {number} visualIndex Visual entry index.\n     * @param {number} physicalIndex Physical entry index.\n     * @param {number} entriesCount Visual entries count.\n     * @param {number} sourceEntriesCount Source entries count.\n     * @param {boolean} contained `true` if it should return only indexes within boundaries of the table (basically\n     * `toPhysical` alias.\n     * @returns {*}\n     */\n\n  }, {\n    key: \"getPhysicalIndexPosition\",\n    value: function getPhysicalIndexPosition(visualIndex, physicalIndex, entriesCount, sourceEntriesCount, contained) {\n      if (!contained) {\n        if (visualIndex >= entriesCount) {\n          return sourceEntriesCount + (visualIndex - entriesCount);\n        }\n      }\n\n      return physicalIndex;\n    }\n    /**\n     * Returns the physical row index. The difference between this and Core's `toPhysical` is that it doesn't return\n     * `null` on rows with indexes higher than the number of rows.\n     *\n     * @private\n     * @param {number} row Visual row index.\n     * @param {boolean} [contained] `true` if it should return only indexes within boundaries of the table (basically\n     * `toPhysical` alias.\n     * @returns {number} The physical row index.\n     */\n\n  }, {\n    key: \"toPhysicalRowPosition\",\n    value: function toPhysicalRowPosition(row) {\n      var contained = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      return this.getPhysicalIndexPosition(row, this.hot.toPhysicalRow(row), this.hot.countRows(), this.hot.countSourceRows(), contained);\n    }\n    /**\n     * Returns the physical column index. The difference between this and Core's `toPhysical` is that it doesn't return\n     * `null` on columns with indexes higher than the number of columns.\n     *\n     * @private\n     * @param {number} column Visual column index.\n     * @param {boolean} [contained] `true` if it should return only indexes within boundaries of the table (basically\n     * `toPhysical` alias.\n     * @returns {number} The physical column index.\n     */\n\n  }, {\n    key: \"toPhysicalColumnPosition\",\n    value: function toPhysicalColumnPosition(column) {\n      var contained = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      return this.getPhysicalIndexPosition(column, this.hot.toPhysicalColumn(column), this.hot.countCols(), this.hot.countSourceCols(), contained);\n    }\n    /**\n     * Add a sheet to the shared HyperFormula instance.\n     *\n     * @param {string|null} [sheetName] The new sheet name. If not provided (or a null is passed), will be\n     * auto-generated by HyperFormula.\n     * @param {Array} [sheetData] Data passed to the shared HyperFormula instance. Has to be declared as an array of\n     * arrays - array of objects is not supported in this scenario.\n     * @returns {boolean|string} `false` if the data format is unusable or it is impossible to add a new sheet to the\n     * engine, the created sheet name otherwise.\n     */\n\n  }, {\n    key: \"addSheet\",\n    value: function addSheet(sheetName, sheetData) {\n      if (isDefined(sheetData) && !isArrayOfArrays(sheetData)) {\n        warn('The provided data should be an array of arrays.');\n        return false;\n      }\n\n      if (sheetName !== void 0 && sheetName !== null && this.engine.doesSheetExist(sheetName)) {\n        warn('Sheet with the provided name already exists.');\n        return false;\n      }\n\n      try {\n        var actualSheetName = this.engine.addSheet(sheetName !== null && sheetName !== void 0 ? sheetName : void 0);\n\n        if (sheetData) {\n          this.engine.setSheetContent(this.engine.getSheetId(actualSheetName), sheetData);\n        }\n\n        return actualSheetName;\n      } catch (e) {\n        warn(e.message);\n        return false;\n      }\n    }\n    /**\n     * Switch the sheet used as data in the Handsontable instance (it loads the data from the shared HyperFormula\n     * instance).\n     *\n     * @param {string} sheetName Sheet name used in the shared HyperFormula instance.\n     */\n\n  }, {\n    key: \"switchSheet\",\n    value: function switchSheet(sheetName) {\n      if (!this.engine.doesSheetExist(sheetName)) {\n        error(\"The sheet named `\".concat(sheetName, \"` does not exist, switch aborted.\"));\n        return;\n      }\n\n      this.sheetName = sheetName;\n      var serialized = this.engine.getSheetSerialized(this.sheetId);\n\n      if (serialized.length > 0) {\n        this.hot.loadData(serialized, \"\".concat(toUpperCaseFirst(PLUGIN_KEY), \".switchSheet\"));\n      }\n    }\n    /**\n     * Get the cell type under specified visual coordinates.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @param {number} [sheet] The target sheet id, defaults to the current sheet.\n     * @returns {string} Possible values: 'FORMULA' | 'VALUE' | 'ARRAYFORMULA' | 'EMPTY'.\n     */\n\n  }, {\n    key: \"getCellType\",\n    value: function getCellType(row, column) {\n      var sheet = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.sheetId;\n      var physicalRow = this.hot.toPhysicalRow(row);\n      var physicalColumn = this.hot.toPhysicalColumn(column);\n\n      if (physicalRow !== null && physicalColumn !== null) {\n        return this.engine.getCellType({\n          sheet: sheet,\n          row: physicalRow,\n          col: physicalColumn\n        });\n      } else {\n        // Should return `EMPTY` when out of bounds (according to the test cases).\n        return 'EMPTY';\n      }\n    }\n    /**\n     * Returns `true` if under specified visual coordinates is formula.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @param {number} [sheet] The target sheet id, defaults to the current sheet.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isFormulaCellType\",\n    value: function isFormulaCellType(row, column) {\n      var sheet = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.sheetId;\n      var physicalRow = this.hot.toPhysicalRow(row);\n      var physicalColumn = this.hot.toPhysicalColumn(column);\n\n      if (physicalRow === null || physicalColumn === null) {\n        return false;\n      }\n\n      return this.engine.doesCellHaveFormula({\n        sheet: sheet,\n        row: physicalRow,\n        col: physicalColumn\n      });\n    }\n    /**\n     * Renders dependent sheets (handsontable instances) based on the changes - list of the\n     * recalculated dependent cells.\n     *\n     * @private\n     * @param {object[]} dependentCells The values and location of applied changes within HF engine.\n     * @param {boolean} [renderSelf] `true` if it's supposed to render itself, `false` otherwise.\n     */\n\n  }, {\n    key: \"renderDependentSheets\",\n    value: function renderDependentSheets(dependentCells) {\n      var _this11 = this;\n\n      var renderSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var affectedSheetIds = new Set();\n      dependentCells.forEach(function (change) {\n        var _change$address;\n\n        // For the Named expression the address is empty, hence the `sheetId` is undefined.\n        var sheetId = change === null || change === void 0 ? void 0 : (_change$address = change.address) === null || _change$address === void 0 ? void 0 : _change$address.sheet;\n\n        if (sheetId !== void 0) {\n          if (!affectedSheetIds.has(sheetId)) {\n            affectedSheetIds.add(sheetId);\n          }\n        }\n      });\n      getRegisteredHotInstances(this.engine).forEach(function (relatedHot, sheetId) {\n        if ((renderSelf || sheetId !== _this11.sheetId) && affectedSheetIds.has(sheetId)) {\n          var _relatedHot$view;\n\n          relatedHot.render();\n          (_relatedHot$view = relatedHot.view) === null || _relatedHot$view === void 0 ? void 0 : _relatedHot$view.adjustElementsSize();\n        }\n      });\n    }\n    /**\n     * Validates dependent cells based on the cells that are modified by the change.\n     *\n     * @private\n     * @param {object[]} dependentCells The values and location of applied changes within HF engine.\n     * @param {object[]} [changedCells] The values and location of applied changes by developer (through API or UI).\n     */\n\n  }, {\n    key: \"validateDependentCells\",\n    value: function validateDependentCells(dependentCells) {\n      var _this12 = this;\n\n      var changedCells = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n      var stringifyAddress = function stringifyAddress(change) {\n        var _change$address2;\n\n        var _ref7 = (_change$address2 = change === null || change === void 0 ? void 0 : change.address) !== null && _change$address2 !== void 0 ? _change$address2 : {},\n            row = _ref7.row,\n            col = _ref7.col,\n            sheet = _ref7.sheet;\n\n        return isDefined(sheet) ? \"\".concat(sheet, \":\").concat(row, \"x\").concat(col) : '';\n      };\n\n      var changedCellsSet = new Set(changedCells.map(function (change) {\n        return stringifyAddress(change);\n      }));\n      dependentCells.forEach(function (change) {\n        var _change$address3, _change$address4;\n\n        var _ref8 = (_change$address3 = change.address) !== null && _change$address3 !== void 0 ? _change$address3 : {},\n            row = _ref8.row,\n            col = _ref8.col;\n\n        var visualRow = isDefined(row) ? _this12.hot.toVisualRow(row) : null;\n        var visualColumn = isDefined(col) ? _this12.hot.toVisualColumn(col) : null; // Don't try to validate cells outside of the visual part of the table.\n\n        if (visualRow === null || visualColumn === null) {\n          return;\n        } // For the Named expression the address is empty, hence the `sheetId` is undefined.\n\n\n        var sheetId = change === null || change === void 0 ? void 0 : (_change$address4 = change.address) === null || _change$address4 === void 0 ? void 0 : _change$address4.sheet;\n        var addressId = stringifyAddress(change); // Validate the cells that depend on the calculated formulas. Skip that cells\n        // where the user directly changes the values - the Core triggers those validators.\n\n        if (sheetId !== void 0 && !changedCellsSet.has(addressId)) {\n          var hot = getRegisteredHotInstances(_this12.engine).get(sheetId); // It will just re-render certain cell when necessary.\n\n          hot.validateCell(hot.getDataAtCell(visualRow, visualColumn), hot.getCellMeta(visualRow, visualColumn), function () {});\n        }\n      });\n    }\n    /**\n     * Sync a change from the change-related hooks with the engine.\n     *\n     * @private\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @param {Handsontable.CellValue} newValue New value.\n     * @returns {Array} Array of changes exported from the engine.\n     */\n\n  }, {\n    key: \"syncChangeWithEngine\",\n    value: function syncChangeWithEngine(row, column, newValue) {\n      var address = {\n        row: this.toPhysicalRowPosition(row),\n        col: this.toPhysicalColumnPosition(column),\n        sheet: this.sheetId\n      };\n\n      if (!this.engine.isItPossibleToSetCellContents(address)) {\n        warn(\"Not possible to set cell data at \".concat(JSON.stringify(address)));\n        return;\n      }\n\n      return this.engine.setCellContents(address, newValue);\n    }\n    /**\n     * The hook allows to translate the formula value to calculated value before it goes to the\n     * validator function.\n     *\n     * @private\n     * @param {*} value The cell value to validate.\n     * @param {number} visualRow The visual row index.\n     * @param {number|string} prop The visual column index or property name of the column.\n     * @returns {*} Returns value to validate.\n     */\n\n  }, {\n    key: \"onBeforeValidate\",\n    value: function onBeforeValidate(value, visualRow, prop) {\n      var visualColumn = this.hot.propToCol(prop);\n\n      if (this.isFormulaCellType(visualRow, visualColumn)) {\n        var address = {\n          row: this.hot.toPhysicalRow(visualRow),\n          col: this.hot.toPhysicalColumn(visualColumn),\n          sheet: this.sheetId\n        };\n        var cellValue = this.engine.getCellValue(address); // If `cellValue` is an object it is expected to be an error\n\n        return _typeof(cellValue) === 'object' && cellValue !== null ? cellValue.value : cellValue;\n      }\n\n      return value;\n    }\n    /**\n     * `onBeforeAutofill` hook callback.\n     *\n     * @private\n     * @param {Array[]} fillData The data that was used to fill the `targetRange`. If `beforeAutofill` was used\n     * and returned `[[]]`, this will be the same object that was returned from `beforeAutofill`.\n     * @param {CellRange} sourceRange The range values will be filled from.\n     * @param {CellRange} targetRange The range new values will be filled into.\n     * @returns {boolean|*}\n     */\n\n  }, {\n    key: \"onBeforeAutofill\",\n    value: function onBeforeAutofill(fillData, sourceRange, targetRange) {\n      var _this13 = this;\n\n      var withSheetId = function withSheetId(range) {\n        return _objectSpread(_objectSpread({}, range), {}, {\n          sheet: _this13.sheetId\n        });\n      };\n\n      var engineSourceRange = {\n        start: withSheetId(sourceRange.getTopLeftCorner()),\n        end: withSheetId(sourceRange.getBottomRightCorner())\n      };\n      var engineTargetRange = {\n        start: withSheetId(targetRange.getTopLeftCorner()),\n        end: withSheetId(targetRange.getBottomRightCorner())\n      }; // Blocks the autofill operation if HyperFormula says that at least one of\n      // the underlying cell's contents cannot be set.\n\n      if (this.engine.isItPossibleToSetCellContents(engineTargetRange) === false) {\n        return false;\n      }\n\n      return this.engine.getFillRangeData(engineSourceRange, engineTargetRange);\n    }\n    /**\n     * `beforeLoadData` hook callback.\n     *\n     * @param {Array} sourceData Array of arrays or array of objects containing data.\n     * @param {boolean} initialLoad Flag that determines whether the data has been loaded during the initialization.\n     * @param {string} [source] Source of the call.\n     * @private\n     */\n\n  }, {\n    key: \"onBeforeLoadData\",\n    value: function onBeforeLoadData(sourceData, initialLoad) {\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n      if (source.includes(toUpperCaseFirst(PLUGIN_KEY))) {\n        return;\n      } // This flag needs to be defined, because not passing data to HOT results in HOT auto-generating a `null`-filled\n      // initial dataset.\n\n\n      _classPrivateFieldSet(this, _hotWasInitializedWithEmptyData, isUndefined(this.hot.getSettings().data));\n    }\n    /**\n     * `afterLoadData` hook callback.\n     *\n     * @param {Array} sourceData Array of arrays or array of objects containing data.\n     * @param {boolean} initialLoad Flag that determines whether the data has been loaded during the initialization.\n     * @param {string} [source] Source of the call.\n     * @private\n     */\n\n  }, {\n    key: \"onAfterLoadData\",\n    value: function onAfterLoadData(sourceData, initialLoad) {\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n      if (source.includes(toUpperCaseFirst(PLUGIN_KEY))) {\n        return;\n      }\n\n      this.sheetName = setupSheet(this.engine, this.hot.getSettings()[PLUGIN_KEY].sheetName);\n\n      if (!_classPrivateFieldGet(this, _hotWasInitializedWithEmptyData)) {\n        var sourceDataArray = this.hot.getSourceDataArray();\n\n        if (this.engine.isItPossibleToReplaceSheetContent(this.sheetId, sourceDataArray)) {\n          _classPrivateFieldSet(this, _internalOperationPending, true);\n\n          var dependentCells = this.engine.setSheetContent(this.sheetId, this.hot.getSourceDataArray());\n          this.renderDependentSheets(dependentCells);\n\n          _classPrivateFieldSet(this, _internalOperationPending, false);\n        }\n      } else {\n        this.switchSheet(this.sheetName);\n      }\n    }\n    /**\n     * `modifyData` hook callback.\n     *\n     * @private\n     * @param {number} row Physical row height.\n     * @param {number} column Physical column index.\n     * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value`\n     *   property.\n     * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n     */\n\n  }, {\n    key: \"onModifyData\",\n    value: function onModifyData(row, column, valueHolder, ioMode) {\n      if (ioMode !== 'get' || _classPrivateFieldGet(this, _internalOperationPending) || this.sheetName === null || !this.engine.doesSheetExist(this.sheetName)) {\n        return;\n      }\n\n      var visualRow = this.hot.toVisualRow(row); // `column` is here as visual index because of inconsistencies related to hook execution in `src/dataMap`.\n\n      var isFormulaCellType = this.isFormulaCellType(visualRow, column);\n\n      if (!isFormulaCellType) {\n        var cellType = this.getCellType(visualRow, column);\n\n        if (cellType !== 'ARRAY') {\n          if (isEscapedFormulaExpression(valueHolder.value)) {\n            valueHolder.value = unescapeFormulaExpression(valueHolder.value);\n          }\n\n          return;\n        }\n      } // `toPhysicalColumn` is here because of inconsistencies related to hook execution in `DataMap`.\n\n\n      var address = {\n        row: row,\n        col: this.toPhysicalColumnPosition(column),\n        sheet: this.sheetId\n      };\n      var cellValue = this.engine.getCellValue(address); // If `cellValue` is an object it is expected to be an error\n\n      var value = _typeof(cellValue) === 'object' && cellValue !== null ? cellValue.value : cellValue;\n      valueHolder.value = value;\n    }\n    /**\n     * `modifySourceData` hook callback.\n     *\n     * @private\n     * @param {number} row Physical row index.\n     * @param {number|string} columnOrProp Physical column index or prop.\n     * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value`\n     *   property.\n     * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n     */\n\n  }, {\n    key: \"onModifySourceData\",\n    value: function onModifySourceData(row, columnOrProp, valueHolder, ioMode) {\n      if (ioMode !== 'get' || _classPrivateFieldGet(this, _internalOperationPending) || this.sheetName === null || !this.engine.doesSheetExist(this.sheetName)) {\n        return;\n      }\n\n      var visualRow = this.hot.toVisualRow(row);\n      var visualColumn = this.hot.propToCol(columnOrProp); // `column` is here as visual index because of inconsistencies related to hook execution in `src/dataMap`.\n\n      var isFormulaCellType = this.isFormulaCellType(visualRow, visualColumn);\n\n      if (!isFormulaCellType) {\n        var cellType = this.getCellType(visualRow, visualColumn);\n\n        if (cellType !== 'ARRAY') {\n          return;\n        }\n      }\n\n      var dimensions = this.engine.getSheetDimensions(this.engine.getSheetId(this.sheetName)); // Don't actually change the source data if HyperFormula is not\n      // initialized yet. This is done to allow the `afterLoadData` hook to\n      // load the existing source data with `Handsontable#getSourceDataArray`\n      // properly.\n\n      if (dimensions.width === 0 && dimensions.height === 0) {\n        return;\n      }\n\n      var address = {\n        row: row,\n        // Workaround for inconsistencies in `src/dataSource.js`\n        col: this.toPhysicalColumnPosition(visualColumn),\n        sheet: this.sheetId\n      };\n      valueHolder.value = this.engine.getCellSerialized(address);\n    }\n    /**\n     * `onAfterSetDataAtCell` hook callback.\n     *\n     * @private\n     * @param {Array[]} changes An array of changes in format [[row, prop, oldValue, value], ...].\n     * @param {string} [source] String that identifies source of hook call\n     *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n     */\n\n  }, {\n    key: \"onAfterSetDataAtCell\",\n    value: function onAfterSetDataAtCell(changes, source) {\n      var _this14 = this;\n\n      if (isBlockedSource(source)) {\n        return;\n      }\n\n      var outOfBoundsChanges = [];\n      var changedCells = [];\n      var dependentCells = this.engine.batch(function () {\n        changes.forEach(function (_ref9) {\n          var _ref10 = _slicedToArray(_ref9, 4),\n              row = _ref10[0],\n              prop = _ref10[1],\n              newValue = _ref10[3];\n\n          var column = _this14.hot.propToCol(prop);\n\n          var physicalRow = _this14.hot.toPhysicalRow(row);\n\n          var physicalColumn = _this14.hot.toPhysicalColumn(column);\n\n          var address = {\n            row: physicalRow,\n            col: physicalColumn,\n            sheet: _this14.sheetId\n          };\n\n          if (physicalRow !== null && physicalColumn !== null) {\n            _this14.syncChangeWithEngine(row, column, newValue);\n          } else {\n            outOfBoundsChanges.push([row, column, newValue]);\n          }\n\n          changedCells.push({\n            address: address\n          });\n        });\n      });\n\n      if (outOfBoundsChanges.length) {\n        // Workaround for rows/columns being created two times (by HOT and the engine).\n        // (unfortunately, this requires an extra re-render)\n        this.hot.addHookOnce('afterChange', function () {\n          var outOfBoundsDependentCells = _this14.engine.batch(function () {\n            outOfBoundsChanges.forEach(function (_ref11) {\n              var _ref12 = _slicedToArray(_ref11, 3),\n                  row = _ref12[0],\n                  column = _ref12[1],\n                  newValue = _ref12[2];\n\n              _this14.syncChangeWithEngine(row, column, newValue);\n            });\n          });\n\n          _this14.renderDependentSheets(outOfBoundsDependentCells, true);\n        });\n      }\n\n      this.renderDependentSheets(dependentCells);\n      this.validateDependentCells(dependentCells, changedCells);\n    }\n    /**\n     * `onAfterSetSourceDataAtCell` hook callback.\n     *\n     * @private\n     * @param {Array[]} changes An array of changes in format [[row, column, oldValue, value], ...].\n     * @param {string} [source] String that identifies source of hook call\n     *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n     */\n\n  }, {\n    key: \"onAfterSetSourceDataAtCell\",\n    value: function onAfterSetSourceDataAtCell(changes, source) {\n      var _this15 = this;\n\n      if (isBlockedSource(source)) {\n        return;\n      }\n\n      var dependentCells = [];\n      var changedCells = [];\n      changes.forEach(function (_ref13) {\n        var _ref14 = _slicedToArray(_ref13, 4),\n            row = _ref14[0],\n            prop = _ref14[1],\n            newValue = _ref14[3];\n\n        var column = _this15.hot.propToCol(prop);\n\n        if (!isNumeric(column)) {\n          return;\n        }\n\n        var address = {\n          row: row,\n          col: _this15.toPhysicalColumnPosition(column),\n          sheet: _this15.sheetId\n        };\n\n        if (!_this15.engine.isItPossibleToSetCellContents(address)) {\n          warn(\"Not possible to set source cell data at \".concat(JSON.stringify(address)));\n          return;\n        }\n\n        changedCells.push({\n          address: address\n        });\n        dependentCells.push.apply(dependentCells, _toConsumableArray(_this15.engine.setCellContents(address, newValue)));\n      });\n      this.renderDependentSheets(dependentCells);\n      this.validateDependentCells(dependentCells, changedCells);\n    }\n    /**\n     * `beforeCreateRow` hook callback.\n     *\n     * @private\n     * @param {number} row Represents the visual index of first newly created row in the data source array.\n     * @param {number} amount Number of newly created rows in the data source array.\n     * @returns {*|boolean} If false is returned the action is canceled.\n     */\n\n  }, {\n    key: \"onBeforeCreateRow\",\n    value: function onBeforeCreateRow(row, amount) {\n      if (this.sheetId === null || !this.engine.doesSheetExist(this.sheetName) || !this.engine.isItPossibleToAddRows(this.sheetId, [this.toPhysicalRowPosition(row), amount])) {\n        return false;\n      }\n    }\n    /**\n     * `beforeCreateCol` hook callback.\n     *\n     * @private\n     * @param {number} col Represents the visual index of first newly created column in the data source.\n     * @param {number} amount Number of newly created columns in the data source.\n     * @returns {*|boolean} If false is returned the action is canceled.\n     */\n\n  }, {\n    key: \"onBeforeCreateCol\",\n    value: function onBeforeCreateCol(col, amount) {\n      if (this.sheetId === null || !this.engine.doesSheetExist(this.sheetName) || !this.engine.isItPossibleToAddColumns(this.sheetId, [this.toPhysicalColumnPosition(col), amount])) {\n        return false;\n      }\n    }\n    /**\n     * `beforeRemoveRow` hook callback.\n     *\n     * @private\n     * @param {number} row Visual index of starter row.\n     * @param {number} amount Amount of rows to be removed.\n     * @param {number[]} physicalRows An array of physical rows removed from the data source.\n     * @returns {*|boolean} If false is returned the action is canceled.\n     */\n\n  }, {\n    key: \"onBeforeRemoveRow\",\n    value: function onBeforeRemoveRow(row, amount, physicalRows) {\n      var _this16 = this;\n\n      var possible = physicalRows.every(function (physicalRow) {\n        return _this16.engine.isItPossibleToRemoveRows(_this16.sheetId, [physicalRow, 1]);\n      });\n      return possible === false ? false : void 0;\n    }\n    /**\n     * `beforeRemoveCol` hook callback.\n     *\n     * @private\n     * @param {number} col Visual index of starter column.\n     * @param {number} amount Amount of columns to be removed.\n     * @param {number[]} physicalColumns An array of physical columns removed from the data source.\n     * @returns {*|boolean} If false is returned the action is canceled.\n     */\n\n  }, {\n    key: \"onBeforeRemoveCol\",\n    value: function onBeforeRemoveCol(col, amount, physicalColumns) {\n      var _this17 = this;\n\n      var possible = physicalColumns.every(function (physicalColumn) {\n        return _this17.engine.isItPossibleToRemoveColumns(_this17.sheetId, [physicalColumn, 1]);\n      });\n      return possible === false ? false : void 0;\n    }\n    /**\n     * `afterCreateRow` hook callback.\n     *\n     * @private\n     * @param {number} row Represents the visual index of first newly created row in the data source array.\n     * @param {number} amount Number of newly created rows in the data source array.\n     * @param {string} [source] String that identifies source of hook call\n     *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n     */\n\n  }, {\n    key: \"onAfterCreateRow\",\n    value: function onAfterCreateRow(row, amount, source) {\n      if (isBlockedSource(source)) {\n        return;\n      }\n\n      var changes = this.engine.addRows(this.sheetId, [this.toPhysicalRowPosition(row), amount]);\n      this.renderDependentSheets(changes);\n    }\n    /**\n     * `afterCreateCol` hook callback.\n     *\n     * @private\n     * @param {number} col Represents the visual index of first newly created column in the data source.\n     * @param {number} amount Number of newly created columns in the data source.\n     * @param {string} [source] String that identifies source of hook call\n     *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n     */\n\n  }, {\n    key: \"onAfterCreateCol\",\n    value: function onAfterCreateCol(col, amount, source) {\n      if (isBlockedSource(source)) {\n        return;\n      }\n\n      var changes = this.engine.addColumns(this.sheetId, [this.toPhysicalColumnPosition(col), amount]);\n      this.renderDependentSheets(changes);\n    }\n    /**\n     * `afterRemoveRow` hook callback.\n     *\n     * @private\n     * @param {number} row Visual index of starter row.\n     * @param {number} amount An amount of removed rows.\n     * @param {number[]} physicalRows An array of physical rows removed from the data source.\n     * @param {string} [source] String that identifies source of hook call\n     *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n     */\n\n  }, {\n    key: \"onAfterRemoveRow\",\n    value: function onAfterRemoveRow(row, amount, physicalRows, source) {\n      var _this18 = this;\n\n      if (isBlockedSource(source)) {\n        return;\n      }\n\n      var descendingPhysicalRows = physicalRows.sort().reverse();\n      var changes = this.engine.batch(function () {\n        descendingPhysicalRows.forEach(function (physicalRow) {\n          _this18.engine.removeRows(_this18.sheetId, [physicalRow, 1]);\n        });\n      });\n      this.renderDependentSheets(changes);\n    }\n    /**\n     * `afterRemoveCol` hook callback.\n     *\n     * @private\n     * @param {number} col Visual index of starter column.\n     * @param {number} amount An amount of removed columns.\n     * @param {number[]} physicalColumns An array of physical columns removed from the data source.\n     * @param {string} [source] String that identifies source of hook call\n     *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n     */\n\n  }, {\n    key: \"onAfterRemoveCol\",\n    value: function onAfterRemoveCol(col, amount, physicalColumns, source) {\n      var _this19 = this;\n\n      if (isBlockedSource(source)) {\n        return;\n      }\n\n      var descendingPhysicalColumns = physicalColumns.sort().reverse();\n      var changes = this.engine.batch(function () {\n        descendingPhysicalColumns.forEach(function (physicalColumn) {\n          _this19.engine.removeColumns(_this19.sheetId, [physicalColumn, 1]);\n        });\n      });\n      this.renderDependentSheets(changes);\n    }\n    /**\n     * `afterDetachChild` hook callback.\n     * Used to sync the data of the rows detached in the Nested Rows plugin with the engine's dataset.\n     *\n     * @private\n     * @param {object} parent An object representing the parent from which the element was detached.\n     * @param {object} element The detached element.\n     * @param {number} finalElementRowIndex The final row index of the detached element.\n     */\n\n  }, {\n    key: \"onAfterDetachChild\",\n    value: function onAfterDetachChild(parent, element, finalElementRowIndex) {\n      var _element$__children,\n          _this20 = this;\n\n      _classPrivateFieldSet(this, _internalOperationPending, true);\n\n      var rowsData = this.hot.getSourceDataArray(finalElementRowIndex, 0, finalElementRowIndex + (((_element$__children = element.__children) === null || _element$__children === void 0 ? void 0 : _element$__children.length) || 0), this.hot.countSourceCols());\n\n      _classPrivateFieldSet(this, _internalOperationPending, false);\n\n      rowsData.forEach(function (row, relativeRowIndex) {\n        row.forEach(function (value, colIndex) {\n          _this20.engine.setCellContents({\n            col: colIndex,\n            row: finalElementRowIndex + relativeRowIndex,\n            sheet: _this20.sheetId\n          }, [[value]]);\n        });\n      });\n    }\n    /**\n     * Called when a value is updated in the engine.\n     *\n     * @private\n     * @fires Hooks#afterFormulasValuesUpdate\n     * @param {Array} changes The values and location of applied changes.\n     */\n\n  }, {\n    key: \"onEngineValuesUpdated\",\n    value: function onEngineValuesUpdated(changes) {\n      this.hot.runHooks('afterFormulasValuesUpdate', changes);\n    }\n    /**\n     * Called when a named expression is added to the engine instance.\n     *\n     * @private\n     * @fires Hooks#afterNamedExpressionAdded\n     * @param {string} namedExpressionName The name of the added expression.\n     * @param {Array} changes The values and location of applied changes.\n     */\n\n  }, {\n    key: \"onEngineNamedExpressionsAdded\",\n    value: function onEngineNamedExpressionsAdded(namedExpressionName, changes) {\n      this.hot.runHooks('afterNamedExpressionAdded', namedExpressionName, changes);\n    }\n    /**\n     * Called when a named expression is removed from the engine instance.\n     *\n     * @private\n     * @fires Hooks#afterNamedExpressionRemoved\n     * @param {string} namedExpressionName The name of the removed expression.\n     * @param {Array} changes The values and location of applied changes.\n     */\n\n  }, {\n    key: \"onEngineNamedExpressionsRemoved\",\n    value: function onEngineNamedExpressionsRemoved(namedExpressionName, changes) {\n      this.hot.runHooks('afterNamedExpressionRemoved', namedExpressionName, changes);\n    }\n    /**\n     * Called when a new sheet is added to the engine instance.\n     *\n     * @private\n     * @fires Hooks#afterSheetAdded\n     * @param {string} addedSheetDisplayName The name of the added sheet.\n     */\n\n  }, {\n    key: \"onEngineSheetAdded\",\n    value: function onEngineSheetAdded(addedSheetDisplayName) {\n      this.hot.runHooks('afterSheetAdded', addedSheetDisplayName);\n    }\n    /**\n     * Called when a sheet in the engine instance is renamed.\n     *\n     * @private\n     * @fires Hooks#afterSheetRenamed\n     * @param {string} oldDisplayName The old name of the sheet.\n     * @param {string} newDisplayName The new name of the sheet.\n     */\n\n  }, {\n    key: \"onEngineSheetRenamed\",\n    value: function onEngineSheetRenamed(oldDisplayName, newDisplayName) {\n      this.hot.runHooks('afterSheetRenamed', oldDisplayName, newDisplayName);\n    }\n    /**\n     * Called when a sheet is removed from the engine instance.\n     *\n     * @private\n     * @fires Hooks#afterSheetRemoved\n     * @param {string} removedSheetDisplayName The removed sheet name.\n     * @param {Array} changes The values and location of applied changes.\n     */\n\n  }, {\n    key: \"onEngineSheetRemoved\",\n    value: function onEngineSheetRemoved(removedSheetDisplayName, changes) {\n      this.hot.runHooks('afterSheetRemoved', removedSheetDisplayName, changes);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n    /**\n     * Flag used to bypass hooks in internal operations.\n     *\n     * @private\n     * @type {boolean}\n     */\n\n  }]);\n\n  return Formulas;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport staticRegister from \"../../../utils/staticRegister.mjs\";\nimport { isUndefined } from \"../../../helpers/mixed.mjs\";\nimport { warn } from \"../../../helpers/console.mjs\";\nimport { PLUGIN_KEY } from \"../formulas.mjs\";\nimport { DEFAULT_LICENSE_KEY, getEngineSettingsWithDefaultsAndOverrides } from \"./settings.mjs\";\n/**\n * Prepares and returns the collection for the engine relationship with the HoT instances.\n *\n * @returns {Map}\n */\n\nfunction getEngineRelationshipRegistry() {\n  var registryKey = 'engine_relationship';\n  var pluginStaticRegistry = staticRegister(PLUGIN_KEY);\n\n  if (!pluginStaticRegistry.hasItem(registryKey)) {\n    pluginStaticRegistry.register(registryKey, new Map());\n  }\n\n  return pluginStaticRegistry.getItem(registryKey);\n}\n/**\n * Prepares and returns the collection for the engine shared usage.\n *\n * @returns {Map}\n */\n\n\nfunction getSharedEngineUsageRegistry() {\n  var registryKey = 'shared_engine_usage';\n  var pluginStaticRegistry = staticRegister(PLUGIN_KEY);\n\n  if (!pluginStaticRegistry.hasItem(registryKey)) {\n    pluginStaticRegistry.register(registryKey, new Map());\n  }\n\n  return pluginStaticRegistry.getItem(registryKey);\n}\n/**\n * Setups the engine instance. It either creates a new (possibly shared) engine instance, or attaches\n * the plugin to an already-existing instance.\n *\n * @param {Handsontable} hotInstance Handsontable instance.\n * @returns {null|object} Returns the engine instance if everything worked right and `null` otherwise.\n */\n\n\nexport function setupEngine(hotInstance) {\n  var hotSettings = hotInstance.getSettings();\n  var pluginSettings = hotSettings[PLUGIN_KEY];\n  var engineConfigItem = pluginSettings === null || pluginSettings === void 0 ? void 0 : pluginSettings.engine;\n\n  if (pluginSettings === true) {\n    return null;\n  }\n\n  if (isUndefined(engineConfigItem)) {\n    return null;\n  } // `engine.hyperformula` or `engine` is the engine class\n\n\n  if (typeof engineConfigItem.hyperformula === 'function' || typeof engineConfigItem === 'function') {\n    var _engineConfigItem$hyp;\n\n    return registerEngine((_engineConfigItem$hyp = engineConfigItem.hyperformula) !== null && _engineConfigItem$hyp !== void 0 ? _engineConfigItem$hyp : engineConfigItem, hotSettings, hotInstance); // `engine` is the engine instance\n  } else if (_typeof(engineConfigItem) === 'object' && isUndefined(engineConfigItem.hyperformula)) {\n    var engineRelationship = getEngineRelationshipRegistry();\n    var sharedEngineUsage = getSharedEngineUsageRegistry().get(engineConfigItem);\n\n    if (!engineRelationship.has(engineConfigItem)) {\n      engineRelationship.set(engineConfigItem, []);\n    }\n\n    engineRelationship.get(engineConfigItem).push(hotInstance);\n\n    if (sharedEngineUsage) {\n      sharedEngineUsage.push(hotInstance.guid);\n    }\n\n    if (!engineConfigItem.getConfig().licenseKey) {\n      engineConfigItem.updateConfig({\n        licenseKey: DEFAULT_LICENSE_KEY\n      });\n    }\n\n    return engineConfigItem;\n  }\n\n  return null;\n}\n/**\n * Registers the engine in the global register and attaches the needed event listeners.\n *\n * @param {Function} engineClass The engine class.\n * @param {object} hotSettings The Handsontable settings.\n * @param {Handsontable} hotInstance Handsontable instance.\n * @returns {object} Returns the engine instance.\n */\n\nexport function registerEngine(engineClass, hotSettings, hotInstance) {\n  var pluginSettings = hotSettings[PLUGIN_KEY];\n  var engineSettings = getEngineSettingsWithDefaultsAndOverrides(hotSettings);\n  var engineRegistry = getEngineRelationshipRegistry();\n  var sharedEngineRegistry = getSharedEngineUsageRegistry();\n  registerCustomFunctions(engineClass, pluginSettings.functions);\n  registerLanguage(engineClass, pluginSettings.language); // Create instance\n\n  var engineInstance = engineClass.buildEmpty(engineSettings); // Add it to global registry\n\n  engineRegistry.set(engineInstance, [hotInstance]);\n  sharedEngineRegistry.set(engineInstance, [hotInstance.guid]);\n  registerNamedExpressions(engineInstance, pluginSettings.namedExpressions); // Add hooks needed for cross-referencing sheets\n\n  engineInstance.on('sheetAdded', function () {\n    engineInstance.rebuildAndRecalculate();\n  });\n  engineInstance.on('sheetRemoved', function () {\n    engineInstance.rebuildAndRecalculate();\n  });\n  return engineInstance;\n}\n/**\n * Returns the list of the Handsontable instances linked to the specific engine instance.\n *\n * @param {object} engine The engine instance.\n * @returns {Map<number, Handsontable>} Returns Map with Handsontable instances.\n */\n\nexport function getRegisteredHotInstances(engine) {\n  var _engineRegistry$get;\n\n  var engineRegistry = getEngineRelationshipRegistry();\n  var hotInstances = engineRegistry.size === 0 ? [] : Array.from((_engineRegistry$get = engineRegistry.get(engine)) !== null && _engineRegistry$get !== void 0 ? _engineRegistry$get : []);\n  return new Map(hotInstances.map(function (hot) {\n    return [hot.getPlugin('formulas').sheetId, hot];\n  }));\n}\n/**\n * Removes the HOT instance from the global register's engine usage array, and if there are no HOT instances left,\n * unregisters the engine itself.\n *\n * @param {object} engine The engine instance.\n * @param {string} hotInstance The Handsontable instance.\n */\n\nexport function unregisterEngine(engine, hotInstance) {\n  if (engine) {\n    var engineRegistry = getEngineRelationshipRegistry();\n    var engineHotRelationship = engineRegistry.get(engine);\n    var sharedEngineRegistry = getSharedEngineUsageRegistry();\n    var sharedEngineUsage = sharedEngineRegistry.get(engine);\n\n    if (engineHotRelationship && engineHotRelationship.includes(hotInstance)) {\n      engineHotRelationship.splice(engineHotRelationship.indexOf(hotInstance), 1);\n\n      if (engineHotRelationship.length === 0) {\n        engineRegistry.delete(engine);\n      }\n    }\n\n    if (sharedEngineUsage && sharedEngineUsage.includes(hotInstance.guid)) {\n      sharedEngineUsage.splice(sharedEngineUsage.indexOf(hotInstance.guid), 1);\n\n      if (sharedEngineUsage.length === 0) {\n        sharedEngineRegistry.delete(engine);\n        engine.destroy();\n      }\n    }\n  }\n}\n/**\n * Registers the custom functions for the engine.\n *\n * @param {Function} engineClass The engine class.\n * @param {Array} customFunctions The custom functions array.\n */\n\nexport function registerCustomFunctions(engineClass, customFunctions) {\n  if (customFunctions) {\n    customFunctions.forEach(function (func) {\n      var name = func.name,\n          plugin = func.plugin,\n          translations = func.translations;\n\n      try {\n        engineClass.registerFunction(name, plugin, translations);\n      } catch (e) {\n        warn(e.message);\n      }\n    });\n  }\n}\n/**\n * Registers the provided language for the engine.\n *\n * @param {Function} engineClass The engine class.\n * @param {object} languageSetting The engine's language object.\n */\n\nexport function registerLanguage(engineClass, languageSetting) {\n  if (languageSetting) {\n    var langCode = languageSetting.langCode;\n\n    try {\n      engineClass.registerLanguage(langCode, languageSetting);\n    } catch (e) {\n      warn(e.message);\n    }\n  }\n}\n/**\n * Registers the provided named expressions in the engine instance.\n *\n * @param {object} engineInstance The engine instance.\n * @param {Array} namedExpressions Array of the named expressions to be registered.\n */\n\nexport function registerNamedExpressions(engineInstance, namedExpressions) {\n  if (namedExpressions) {\n    engineInstance.suspendEvaluation();\n    namedExpressions.forEach(function (namedExp) {\n      var name = namedExp.name,\n          expression = namedExp.expression,\n          scope = namedExp.scope,\n          options = namedExp.options;\n\n      try {\n        engineInstance.addNamedExpression(name, expression, scope, options);\n      } catch (e) {\n        warn(e.message);\n      }\n    });\n    engineInstance.resumeEvaluation();\n  }\n}\n/**\n * Sets up a new sheet.\n *\n * @param {object} engineInstance The engine instance.\n * @param {string} sheetName The new sheet name.\n * @returns {*}\n */\n\nexport function setupSheet(engineInstance, sheetName) {\n  if (isUndefined(sheetName) || !engineInstance.doesSheetExist(sheetName)) {\n    sheetName = engineInstance.addSheet(sheetName);\n  }\n\n  return sheetName;\n}", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport \"core-js/modules/es.array.reduce.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\nimport { PLUGIN_KEY } from \"../formulas.mjs\";\nexport var DEFAULT_LICENSE_KEY = 'internal-use-in-handsontable';\nvar DEFAULT_SETTINGS = {\n  licenseKey: DEFAULT_LICENSE_KEY,\n  useArrayArithmetic: true,\n  useColumnIndex: false,\n  useStats: false,\n  evaluateNullToZero: true,\n  precisionEpsilon: 1e-13,\n  precisionRounding: 14,\n  smartRounding: true,\n  leapYear1900: true,\n  nullDate: {\n    year: 1899,\n    month: 12,\n    day: 31\n  },\n  nullYear: 30,\n  dateFormats: ['DD/MM/YYYY', 'DD/MM/YY'],\n  timeFormats: ['hh:mm', 'hh:mm:ss.sss'],\n  matchWholeCell: true,\n  useRegularExpressions: false,\n  useWildcards: true,\n  functionArgSeparator: ',',\n  thousandSeparator: '',\n  decimalSeparator: '.',\n  language: 'enGB'\n};\n/**\n * Gets a set of engine settings to be applied on top of the provided settings, based on user's Handsontable settings.\n *\n * @param {object} hotSettings Handsontable settings object.\n * @returns {object} Object containing the overriding options.\n */\n\nexport function getEngineSettingsOverrides(hotSettings) {\n  var _hotSettings$PLUGIN_K, _hotSettings$PLUGIN_K2;\n\n  return {\n    maxColumns: hotSettings.maxColumns,\n    maxRows: hotSettings.maxRows,\n    language: (_hotSettings$PLUGIN_K = hotSettings[PLUGIN_KEY]) === null || _hotSettings$PLUGIN_K === void 0 ? void 0 : (_hotSettings$PLUGIN_K2 = _hotSettings$PLUGIN_K.language) === null || _hotSettings$PLUGIN_K2 === void 0 ? void 0 : _hotSettings$PLUGIN_K2.langCode\n  };\n}\n/**\n * Drop `hyperformula` key from object if it exists.\n *\n * @param {object} pluginSettings Formulas plugin settings.\n * @returns {object}\n */\n\nfunction cleanEngineSettings(pluginSettings) {\n  return Object.keys(pluginSettings).reduce(function (obj, key) {\n    if (key !== 'hyperformula') {\n      obj[key] = pluginSettings[key];\n    }\n\n    return obj;\n  }, {});\n}\n/**\n * Takes the default, user and overriding settings and merges them into a single object to be passed to the engine.\n *\n * The final object gets its parameters in the following order,\n * with properties attached to objects listed in the lower levels of the list overriding the\n * ones above them:\n *\n * 1. Default settings\n * 2. User settings\n * 3. Overrides.\n *\n * Meant to be used during *initialization* of the engine.\n *\n * @param {object} hotSettings The Handsontable settings.\n * @returns {object} The final engine settings.\n */\n\n\nexport function getEngineSettingsWithDefaultsAndOverrides(hotSettings) {\n  var _pluginSettings$engin;\n\n  var pluginSettings = hotSettings[PLUGIN_KEY];\n  var userSettings = cleanEngineSettings(pluginSettings !== null && pluginSettings !== void 0 && (_pluginSettings$engin = pluginSettings.engine) !== null && _pluginSettings$engin !== void 0 && _pluginSettings$engin.hyperformula ? pluginSettings.engine : {});\n  var overrides = getEngineSettingsOverrides(hotSettings);\n  return _objectSpread(_objectSpread(_objectSpread({}, DEFAULT_SETTINGS), userSettings), overrides);\n}\n/**\n * Get engine settings from a Handsontable settings object with overrides.\n *\n * @param {object} hotSettings Handsontable settings object.\n * @returns {object}\n */\n\nexport function getEngineSettingsWithOverrides(hotSettings) {\n  var _pluginSettings$engin2;\n\n  var pluginSettings = hotSettings[PLUGIN_KEY];\n  var userSettings = cleanEngineSettings(pluginSettings !== null && pluginSettings !== void 0 && (_pluginSettings$engin2 = pluginSettings.engine) !== null && _pluginSettings$engin2 !== void 0 && _pluginSettings$engin2.hyperformula ? pluginSettings.engine : {});\n  var overrides = getEngineSettingsOverrides(hotSettings);\n  return _objectSpread(_objectSpread({}, userSettings), overrides);\n}", "/**\n * Checks if provided formula expression is escaped.\n *\n * @param {*} expression Expression to check.\n * @returns {boolean}\n */\nexport function isEscapedFormulaExpression(expression) {\n  return typeof expression === 'string' && expression.charAt(0) === '\\'' && expression.charAt(1) === '=';\n}\n/**\n * Replaces escaped formula expression into valid non-unescaped string.\n *\n * @param {string} expression Expression to process.\n * @returns {string}\n */\n\nexport function unescapeFormulaExpression(expression) {\n  return isEscapedFormulaExpression(expression) ? expression.substr(1) : expression;\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\n\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\n\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\n\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { addClass } from \"../../helpers/dom/element.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport { arrayEach, arrayMap, arrayReduce } from \"../../helpers/array.mjs\";\nimport { isObject } from \"../../helpers/object.mjs\";\nimport { isUndefined } from \"../../helpers/mixed.mjs\";\nimport { SEPARATOR } from \"../contextMenu/predefinedItems.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nimport hideColumnItem from \"./contextMenuItem/hideColumn.mjs\";\nimport showColumnItem from \"./contextMenuItem/showColumn.mjs\";\nimport { HidingMap } from \"../../translations/index.mjs\";\nHooks.getSingleton().register('beforeHideColumns');\nHooks.getSingleton().register('afterHideColumns');\nHooks.getSingleton().register('beforeUnhideColumns');\nHooks.getSingleton().register('afterUnhideColumns');\nexport var PLUGIN_KEY = 'hiddenColumns';\nexport var PLUGIN_PRIORITY = 310;\n/**\n * @plugin HiddenColumns\n * @class HiddenColumns\n *\n * @description\n * The `HiddenColumns` plugin lets you [hide specified columns](@/guides/columns/column-hiding.md).\n *\n * \"Hiding a column\" means that the hidden column doesn't get rendered as a DOM element.\n *\n * The `HiddenColumns` plugin doesn't modify the source data,\n * and doesn't participate in data transformation\n * (the shape of the data returned by the [`getData*()` methods](@/api/core.md#getdata) stays intact).\n *\n * You can set the following configuration options:\n *\n * | Option | Required | Type | Default | Description |\n * |---|---|---|---|---|\n * | `columns` | No | Array | - | [Hides specified columns by default](@/guides/columns/column-hiding.md#step-1-specify-columns-hidden-by-default) |\n * | `indicators` | No | Boolean | `false` | [Shows UI indicators](@/guides/columns/column-hiding.md#step-2-show-ui-indicators) |\n * | `copyPasteEnabled` | No | Boolean | `true` | [Sets up copy/paste behavior](@/guides/columns/column-hiding.md#step-4-set-up-copy-and-paste-behavior) |\n *\n * @example\n *\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   hiddenColumns: {\n *     copyPasteEnabled: true,\n *     indicators: true,\n *     columns: [1, 2, 5]\n *   }\n * });\n *\n * // access the `HiddenColumns` plugin's instance\n * const hiddenColumnsPlugin = hot.getPlugin('hiddenColumns');\n *\n * // hide a single column\n * hiddenColumnsPlugin.hideColumn(1);\n *\n * // hide multiple columns\n * hiddenColumnsPlugin.hideColumn(1, 2, 9);\n *\n * // hide multiple columns as an array\n * hiddenColumnsPlugin.hideColumns([1, 2, 9]);\n *\n * // unhide a single column\n * hiddenColumnsPlugin.showColumn(1);\n *\n * // unhide multiple columns\n * hiddenColumnsPlugin.showColumn(1, 2, 9);\n *\n * // unhide multiple columns as an array\n * hiddenColumnsPlugin.showColumns([1, 2, 9]);\n *\n * // to see your changes, re-render your Handsontable instance\n * hot.render();\n * ```\n */\n\nvar _settings = /*#__PURE__*/new WeakMap();\n\nvar _hiddenColumnsMap = /*#__PURE__*/new WeakMap();\n\nexport var HiddenColumns = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(HiddenColumns, _BasePlugin);\n\n  var _super = _createSuper(HiddenColumns);\n\n  function HiddenColumns() {\n    var _this;\n\n    _classCallCheck(this, HiddenColumns);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _classPrivateFieldInitSpec(_assertThisInitialized(_this), _settings, {\n      writable: true,\n      value: {}\n    });\n\n    _classPrivateFieldInitSpec(_assertThisInitialized(_this), _hiddenColumnsMap, {\n      writable: true,\n      value: null\n    });\n\n    return _this;\n  }\n\n  _createClass(HiddenColumns, [{\n    key: \"isEnabled\",\n    value:\n    /**\n     * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n     * hook and if it returns `true` than the {@link HiddenColumns#enablePlugin} method is called.\n     *\n     * @returns {boolean}\n     */\n    function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      var pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n      if (isObject(pluginSettings)) {\n        _classPrivateFieldSet(this, _settings, pluginSettings);\n\n        if (isUndefined(pluginSettings.copyPasteEnabled)) {\n          pluginSettings.copyPasteEnabled = true;\n        }\n      }\n\n      _classPrivateFieldSet(this, _hiddenColumnsMap, new HidingMap());\n\n      _classPrivateFieldGet(this, _hiddenColumnsMap).addLocalHook('init', function () {\n        return _this2.onMapInit();\n      });\n\n      this.hot.columnIndexMapper.registerMap(this.pluginName, _classPrivateFieldGet(this, _hiddenColumnsMap));\n      this.addHook('afterContextMenuDefaultOptions', function () {\n        return _this2.onAfterContextMenuDefaultOptions.apply(_this2, arguments);\n      });\n      this.addHook('afterGetCellMeta', function (row, col, cellProperties) {\n        return _this2.onAfterGetCellMeta(row, col, cellProperties);\n      });\n      this.addHook('modifyColWidth', function (width, col) {\n        return _this2.onModifyColWidth(width, col);\n      });\n      this.addHook('afterGetColHeader', function () {\n        return _this2.onAfterGetColHeader.apply(_this2, arguments);\n      });\n      this.addHook('modifyCopyableRange', function (ranges) {\n        return _this2.onModifyCopyableRange(ranges);\n      });\n\n      _get(_getPrototypeOf(HiddenColumns.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(_getPrototypeOf(HiddenColumns.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.hot.columnIndexMapper.unregisterMap(this.pluginName);\n\n      _classPrivateFieldSet(this, _settings, {});\n\n      _get(_getPrototypeOf(HiddenColumns.prototype), \"disablePlugin\", this).call(this);\n\n      this.resetCellsMeta();\n    }\n    /**\n     * Shows the provided columns.\n     *\n     * @param {number[]} columns Array of visual column indexes.\n     */\n\n  }, {\n    key: \"showColumns\",\n    value: function showColumns(columns) {\n      var _this3 = this;\n\n      var currentHideConfig = this.getHiddenColumns();\n      var isValidConfig = this.isValidConfig(columns);\n      var destinationHideConfig = currentHideConfig;\n\n      var hidingMapValues = _classPrivateFieldGet(this, _hiddenColumnsMap).getValues().slice();\n\n      var isAnyColumnShowed = columns.length > 0;\n\n      if (isValidConfig && isAnyColumnShowed) {\n        var physicalColumns = columns.map(function (visualColumn) {\n          return _this3.hot.toPhysicalColumn(visualColumn);\n        }); // Preparing new values for hiding map.\n\n        arrayEach(physicalColumns, function (physicalColumn) {\n          hidingMapValues[physicalColumn] = false;\n        }); // Preparing new hiding config.\n\n        destinationHideConfig = arrayReduce(hidingMapValues, function (hiddenIndexes, isHidden, physicalIndex) {\n          if (isHidden) {\n            hiddenIndexes.push(_this3.hot.toVisualColumn(physicalIndex));\n          }\n\n          return hiddenIndexes;\n        }, []);\n      }\n\n      var continueHiding = this.hot.runHooks('beforeUnhideColumns', currentHideConfig, destinationHideConfig, isValidConfig && isAnyColumnShowed);\n\n      if (continueHiding === false) {\n        return;\n      }\n\n      if (isValidConfig && isAnyColumnShowed) {\n        _classPrivateFieldGet(this, _hiddenColumnsMap).setValues(hidingMapValues);\n      } // @TODO Should call once per render cycle, currently fired separately in different plugins\n\n\n      this.hot.view.adjustElementsSize();\n      this.hot.runHooks('afterUnhideColumns', currentHideConfig, destinationHideConfig, isValidConfig && isAnyColumnShowed, isValidConfig && destinationHideConfig.length < currentHideConfig.length);\n    }\n    /**\n     * Shows a single column.\n     *\n     * @param {...number} column Visual column index.\n     */\n\n  }, {\n    key: \"showColumn\",\n    value: function showColumn() {\n      for (var _len2 = arguments.length, column = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        column[_key2] = arguments[_key2];\n      }\n\n      this.showColumns(column);\n    }\n    /**\n     * Hides the columns provided in the array.\n     *\n     * @param {number[]} columns Array of visual column indexes.\n     */\n\n  }, {\n    key: \"hideColumns\",\n    value: function hideColumns(columns) {\n      var _this4 = this;\n\n      var currentHideConfig = this.getHiddenColumns();\n      var isConfigValid = this.isValidConfig(columns);\n      var destinationHideConfig = currentHideConfig;\n\n      if (isConfigValid) {\n        destinationHideConfig = Array.from(new Set(currentHideConfig.concat(columns)));\n      }\n\n      var continueHiding = this.hot.runHooks('beforeHideColumns', currentHideConfig, destinationHideConfig, isConfigValid);\n\n      if (continueHiding === false) {\n        return;\n      }\n\n      if (isConfigValid) {\n        this.hot.batchExecution(function () {\n          arrayEach(columns, function (visualColumn) {\n            _classPrivateFieldGet(_this4, _hiddenColumnsMap).setValueAtIndex(_this4.hot.toPhysicalColumn(visualColumn), true);\n          });\n        }, true);\n      }\n\n      this.hot.runHooks('afterHideColumns', currentHideConfig, destinationHideConfig, isConfigValid, isConfigValid && destinationHideConfig.length > currentHideConfig.length);\n    }\n    /**\n     * Hides a single column.\n     *\n     * @param {...number} column Visual column index.\n     */\n\n  }, {\n    key: \"hideColumn\",\n    value: function hideColumn() {\n      for (var _len3 = arguments.length, column = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        column[_key3] = arguments[_key3];\n      }\n\n      this.hideColumns(column);\n    }\n    /**\n     * Returns an array of visual indexes of hidden columns.\n     *\n     * @returns {number[]}\n     */\n\n  }, {\n    key: \"getHiddenColumns\",\n    value: function getHiddenColumns() {\n      var _this5 = this;\n\n      return arrayMap(_classPrivateFieldGet(this, _hiddenColumnsMap).getHiddenIndexes(), function (physicalColumnIndex) {\n        return _this5.hot.toVisualColumn(physicalColumnIndex);\n      });\n    }\n    /**\n     * Checks if the provided column is hidden.\n     *\n     * @param {number} column Visual column index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isHidden\",\n    value: function isHidden(column) {\n      return _classPrivateFieldGet(this, _hiddenColumnsMap).getValueAtIndex(this.hot.toPhysicalColumn(column)) || false;\n    }\n    /**\n     * Get if trim config is valid. Check whether all of the provided column indexes are within the bounds of the table.\n     *\n     * @param {Array} hiddenColumns List of hidden column indexes.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isValidConfig\",\n    value: function isValidConfig(hiddenColumns) {\n      var nrOfColumns = this.hot.countCols();\n\n      if (Array.isArray(hiddenColumns) && hiddenColumns.length > 0) {\n        return hiddenColumns.every(function (visualColumn) {\n          return Number.isInteger(visualColumn) && visualColumn >= 0 && visualColumn < nrOfColumns;\n        });\n      }\n\n      return false;\n    }\n    /**\n     * Reset all rendered cells meta.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"resetCellsMeta\",\n    value: function resetCellsMeta() {\n      arrayEach(this.hot.getCellsMeta(), function (meta) {\n        if (meta) {\n          meta.skipColumnOnPaste = false;\n        }\n      });\n    }\n    /**\n     * Adds the additional column width for the hidden column indicators.\n     *\n     * @private\n     * @param {number|undefined} width Column width.\n     * @param {number} column Visual column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"onModifyColWidth\",\n    value: function onModifyColWidth(width, column) {\n      // Hook is triggered internally only for the visible columns. Conditional will be handled for the API\n      // calls of the `getColWidth` function on not visible indexes.\n      if (this.isHidden(column)) {\n        return 0;\n      }\n\n      if (_classPrivateFieldGet(this, _settings).indicators && (this.isHidden(column + 1) || this.isHidden(column - 1))) {\n        // Add additional space for hidden column indicator.\n        if (typeof width === 'number' && this.hot.hasColHeaders()) {\n          return width + 15;\n        }\n      }\n    }\n    /**\n     * Sets the copy-related cell meta.\n     *\n     * @private\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @param {object} cellProperties Object containing the cell properties.\n     */\n\n  }, {\n    key: \"onAfterGetCellMeta\",\n    value: function onAfterGetCellMeta(row, column, cellProperties) {\n      if (_classPrivateFieldGet(this, _settings).copyPasteEnabled === false && this.isHidden(column)) {\n        // Cell property handled by the `Autofill` and the `CopyPaste` plugins.\n        cellProperties.skipColumnOnPaste = true;\n      }\n\n      if (this.isHidden(column - 1)) {\n        cellProperties.className = cellProperties.className || '';\n\n        if (cellProperties.className.indexOf('afterHiddenColumn') === -1) {\n          cellProperties.className += ' afterHiddenColumn';\n        }\n      } else if (cellProperties.className) {\n        var classArr = cellProperties.className.split(' ');\n\n        if (classArr.length > 0) {\n          var containAfterHiddenColumn = classArr.indexOf('afterHiddenColumn');\n\n          if (containAfterHiddenColumn > -1) {\n            classArr.splice(containAfterHiddenColumn, 1);\n          }\n\n          cellProperties.className = classArr.join(' ');\n        }\n      }\n    }\n    /**\n     * Modifies the copyable range, accordingly to the provided config.\n     *\n     * @private\n     * @param {Array} ranges An array of objects defining copyable cells.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"onModifyCopyableRange\",\n    value: function onModifyCopyableRange(ranges) {\n      var _this6 = this;\n\n      // Ranges shouldn't be modified when `copyPasteEnabled` option is set to `true` (by default).\n      if (_classPrivateFieldGet(this, _settings).copyPasteEnabled) {\n        return ranges;\n      }\n\n      var newRanges = [];\n\n      var pushRange = function pushRange(startRow, endRow, startCol, endCol) {\n        newRanges.push({\n          startRow: startRow,\n          endRow: endRow,\n          startCol: startCol,\n          endCol: endCol\n        });\n      };\n\n      arrayEach(ranges, function (range) {\n        var isHidden = true;\n        var rangeStart = 0;\n        rangeEach(range.startCol, range.endCol, function (visualColumn) {\n          if (_this6.isHidden(visualColumn)) {\n            if (!isHidden) {\n              pushRange(range.startRow, range.endRow, rangeStart, visualColumn - 1);\n            }\n\n            isHidden = true;\n          } else {\n            if (isHidden) {\n              rangeStart = visualColumn;\n            }\n\n            if (visualColumn === range.endCol) {\n              pushRange(range.startRow, range.endRow, rangeStart, visualColumn);\n            }\n\n            isHidden = false;\n          }\n        });\n      });\n      return newRanges;\n    }\n    /**\n     * Adds the needed classes to the headers.\n     *\n     * @private\n     * @param {number} column Visual column index.\n     * @param {HTMLElement} TH Header's TH element.\n     */\n\n  }, {\n    key: \"onAfterGetColHeader\",\n    value: function onAfterGetColHeader(column, TH) {\n      if (!_classPrivateFieldGet(this, _settings).indicators || column < 0) {\n        return;\n      }\n\n      var classList = [];\n\n      if (column >= 1 && this.isHidden(column - 1)) {\n        classList.push('afterHiddenColumn');\n      }\n\n      if (column < this.hot.countCols() - 1 && this.isHidden(column + 1)) {\n        classList.push('beforeHiddenColumn');\n      }\n\n      addClass(TH, classList);\n    }\n    /**\n     * Add Show-hide columns to context menu.\n     *\n     * @private\n     * @param {object} options An array of objects containing information about the pre-defined Context Menu items.\n     */\n\n  }, {\n    key: \"onAfterContextMenuDefaultOptions\",\n    value: function onAfterContextMenuDefaultOptions(options) {\n      options.items.push({\n        name: SEPARATOR\n      }, hideColumnItem(this), showColumnItem(this));\n    }\n    /**\n     * On map initialized hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMapInit\",\n    value: function onMapInit() {\n      if (Array.isArray(_classPrivateFieldGet(this, _settings).columns)) {\n        this.hideColumns(_classPrivateFieldGet(this, _settings).columns);\n      }\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _classPrivateFieldSet(this, _settings, null);\n\n      _classPrivateFieldSet(this, _hiddenColumnsMap, null);\n\n      _get(_getPrototypeOf(HiddenColumns.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n    /**\n     * Cached plugin settings.\n     *\n     * @private\n     * @type {object}\n     */\n\n  }]);\n\n  return HiddenColumns;\n}(BasePlugin);", "import \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport * as C from \"../../../i18n/constants.mjs\";\n/**\n * @param {HiddenColumns} hiddenColumnsPlugin The plugin instance.\n * @returns {object}\n */\n\nexport default function hideColumnItem(hiddenColumnsPlugin) {\n  return {\n    key: 'hidden_columns_hide',\n    name: function name() {\n      var selection = this.getSelectedLast();\n      var pluralForm = 0;\n\n      if (Array.isArray(selection)) {\n        var _selection = _slicedToArray(selection, 4),\n            fromColumn = _selection[1],\n            toColumn = _selection[3];\n\n        if (fromColumn - toColumn !== 0) {\n          pluralForm = 1;\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_HIDE_COLUMN, pluralForm);\n    },\n    callback: function callback() {\n      var _this$getSelectedRang = this.getSelectedRangeLast(),\n          from = _this$getSelectedRang.from,\n          to = _this$getSelectedRang.to;\n\n      var start = Math.max(Math.min(from.col, to.col), 0);\n      var end = Math.max(from.col, to.col);\n      var columnsToHide = [];\n\n      for (var visualColumn = start; visualColumn <= end; visualColumn += 1) {\n        columnsToHide.push(visualColumn);\n      }\n\n      var firstHiddenColumn = columnsToHide[0];\n      var lastHiddenColumn = columnsToHide[columnsToHide.length - 1]; // Looking for a visual index on the right and then (when not found) on the left.\n\n      var columnToSelect = this.columnIndexMapper.getFirstNotHiddenIndex(lastHiddenColumn + 1, 1, true, firstHiddenColumn - 1);\n      hiddenColumnsPlugin.hideColumns(columnsToHide);\n\n      if (Number.isInteger(columnToSelect) && columnToSelect >= 0) {\n        this.selectColumns(columnToSelect);\n      } else {\n        this.deselectCell();\n      }\n\n      this.render();\n      this.view.adjustElementsSize(true);\n    },\n    disabled: false,\n    hidden: function hidden() {\n      return !(this.selection.isSelectedByColumnHeader() || this.selection.isSelectedByCorner());\n    }\n  };\n}", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport { arrayEach, arrayMap } from \"../../../helpers/array.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\n/**\n * @param {HiddenColumns} hiddenColumnsPlugin The plugin instance.\n * @returns {object}\n */\n\nexport default function showColumnItem(hiddenColumnsPlugin) {\n  var columns = [];\n  return {\n    key: 'hidden_columns_show',\n    name: function name() {\n      var pluralForm = columns.length > 1 ? 1 : 0;\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_SHOW_COLUMN, pluralForm);\n    },\n    callback: function callback() {\n      var _this$columnIndexMapp, _this$columnIndexMapp2;\n\n      if (columns.length === 0) {\n        return;\n      }\n\n      var startVisualColumn = columns[0];\n      var endVisualColumn = columns[columns.length - 1]; // Add to the selection one more visual column on the left.\n\n      startVisualColumn = (_this$columnIndexMapp = this.columnIndexMapper.getFirstNotHiddenIndex(startVisualColumn - 1, -1)) !== null && _this$columnIndexMapp !== void 0 ? _this$columnIndexMapp : 0; // Add to the selection one more visual column on the right.\n\n      endVisualColumn = (_this$columnIndexMapp2 = this.columnIndexMapper.getFirstNotHiddenIndex(endVisualColumn + 1, 1)) !== null && _this$columnIndexMapp2 !== void 0 ? _this$columnIndexMapp2 : this.countCols() - 1;\n      hiddenColumnsPlugin.showColumns(columns); // We render columns at first. It was needed for getting fixed columns.\n      // Please take a look at #6864 for broader description.\n\n      this.render();\n      this.view.adjustElementsSize(true);\n      var allColumnsSelected = endVisualColumn - startVisualColumn + 1 === this.countCols(); // When all headers needs to be selected then do nothing. The header selection is\n      // automatically handled by corner click.\n\n      if (!allColumnsSelected) {\n        this.selectColumns(startVisualColumn, endVisualColumn);\n      }\n    },\n    disabled: false,\n    hidden: function hidden() {\n      var _this = this;\n\n      var hiddenPhysicalColumns = arrayMap(hiddenColumnsPlugin.getHiddenColumns(), function (visualColumnIndex) {\n        return _this.toPhysicalColumn(visualColumnIndex);\n      });\n\n      if (!(this.selection.isSelectedByColumnHeader() || this.selection.isSelectedByCorner()) || hiddenPhysicalColumns.length < 1) {\n        return true;\n      }\n\n      columns.length = 0;\n      var selectedRangeLast = this.getSelectedRangeLast();\n      var visualStartColumn = selectedRangeLast.getTopLeftCorner().col;\n      var visualEndColumn = selectedRangeLast.getBottomRightCorner().col;\n      var columnIndexMapper = this.columnIndexMapper;\n      var renderableStartColumn = columnIndexMapper.getRenderableFromVisualIndex(visualStartColumn);\n      var renderableEndColumn = columnIndexMapper.getRenderableFromVisualIndex(visualEndColumn);\n      var notTrimmedColumnIndexes = columnIndexMapper.getNotTrimmedIndexes();\n      var physicalColumnIndexes = [];\n\n      if (visualStartColumn !== visualEndColumn) {\n        var visualColumnsInRange = visualEndColumn - visualStartColumn + 1;\n        var renderedColumnsInRange = renderableEndColumn - renderableStartColumn + 1; // Collect not trimmed columns if there are some hidden columns in the selection range.\n\n        if (visualColumnsInRange > renderedColumnsInRange) {\n          var physicalIndexesInRange = notTrimmedColumnIndexes.slice(visualStartColumn, visualEndColumn + 1);\n          physicalColumnIndexes.push.apply(physicalColumnIndexes, _toConsumableArray(physicalIndexesInRange.filter(function (physicalIndex) {\n            return hiddenPhysicalColumns.includes(physicalIndex);\n          })));\n        } // Handled column is the first rendered index and there are some visual indexes before it.\n\n      } else if (renderableStartColumn === 0 && renderableStartColumn < visualStartColumn) {\n        // not trimmed indexes -> array of mappings from visual (native array's index) to physical indexes (value).\n        physicalColumnIndexes.push.apply(physicalColumnIndexes, _toConsumableArray(notTrimmedColumnIndexes.slice(0, visualStartColumn))); // physical indexes\n        // When all columns are hidden and the context menu is triggered using top-left corner.\n      } else if (renderableStartColumn === null) {\n        // Show all hidden columns.\n        physicalColumnIndexes.push.apply(physicalColumnIndexes, _toConsumableArray(notTrimmedColumnIndexes.slice(0, this.countCols())));\n      } else {\n        var lastVisualIndex = this.countCols() - 1;\n        var lastRenderableIndex = columnIndexMapper.getRenderableFromVisualIndex(columnIndexMapper.getFirstNotHiddenIndex(lastVisualIndex, -1)); // Handled column is the last rendered index and there are some visual indexes after it.\n\n        if (renderableEndColumn === lastRenderableIndex && lastVisualIndex > visualEndColumn) {\n          physicalColumnIndexes.push.apply(physicalColumnIndexes, _toConsumableArray(notTrimmedColumnIndexes.slice(visualEndColumn + 1)));\n        }\n      }\n\n      arrayEach(physicalColumnIndexes, function (physicalColumnIndex) {\n        columns.push(_this.toVisualColumn(physicalColumnIndex));\n      });\n      return columns.length === 0;\n    }\n  };\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\n\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\n\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\n\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { addClass } from \"../../helpers/dom/element.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport { arrayEach, arrayMap, arrayReduce } from \"../../helpers/array.mjs\";\nimport { isObject } from \"../../helpers/object.mjs\";\nimport { isUndefined } from \"../../helpers/mixed.mjs\";\nimport { SEPARATOR } from \"../contextMenu/predefinedItems.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nimport hideRowItem from \"./contextMenuItem/hideRow.mjs\";\nimport showRowItem from \"./contextMenuItem/showRow.mjs\";\nimport { HidingMap } from \"../../translations/index.mjs\";\nHooks.getSingleton().register('beforeHideRows');\nHooks.getSingleton().register('afterHideRows');\nHooks.getSingleton().register('beforeUnhideRows');\nHooks.getSingleton().register('afterUnhideRows');\nexport var PLUGIN_KEY = 'hiddenRows';\nexport var PLUGIN_PRIORITY = 320;\n/**\n * @plugin HiddenRows\n * @class HiddenRows\n *\n * @description\n * The `HiddenRows` plugin lets you [hide specified rows](@/guides/rows/row-hiding.md).\n *\n * \"Hiding a row\" means that the hidden row doesn't get rendered as a DOM element.\n *\n * The `HiddenRows` plugin doesn't modify the source data,\n * and doesn't participate in data transformation\n * (the shape of the data returned by the [`getData*()` methods](@/api/core.md#getdata) stays intact).\n *\n * You can set the following configuration options:\n *\n * | Option | Required | Type | Default | Description |\n * |---|---|---|---|---|\n * | `rows` | No | Array | - | [Hides specified rows by default](@/guides/rows/row-hiding.md#step-1-specify-rows-hidden-by-default) |\n * | `indicators` | No | Boolean | `false` | [Shows UI indicators](@/guides/rows/row-hiding.md#step-2-show-ui-indicators) |\n * | `copyPasteEnabled` | No | Boolean | `true` | [Sets up copy/paste behavior](@/guides/rows/row-hiding.md#step-4-set-up-copy-and-paste-behavior) |\n *\n * @example\n *\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   hiddenRows: {\n *     copyPasteEnabled: true,\n *     indicators: true,\n *     rows: [1, 2, 5]\n *   }\n * });\n *\n * // access the `HiddenRows` plugin's instance\n * const hiddenRowsPlugin = hot.getPlugin('hiddenRows');\n *\n * // hide a single row\n * hiddenRowsPlugin.hideRow(1);\n *\n * // hide multiple rows\n * hiddenRowsPlugin.hideRow(1, 2, 9);\n *\n * // hide multiple rows as an array\n * hiddenRowsPlugin.hideRows([1, 2, 9]);\n *\n * // unhide a single row\n * hiddenRowsPlugin.showRow(1);\n *\n * // unhide multiple rows\n * hiddenRowsPlugin.showRow(1, 2, 9);\n *\n * // unhide multiple rows as an array\n * hiddenRowsPlugin.showRows([1, 2, 9]);\n *\n * // to see your changes, re-render your Handsontable instance\n * hot.render();\n * ```\n */\n\nvar _settings = /*#__PURE__*/new WeakMap();\n\nvar _hiddenRowsMap = /*#__PURE__*/new WeakMap();\n\nexport var HiddenRows = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(HiddenRows, _BasePlugin);\n\n  var _super = _createSuper(HiddenRows);\n\n  function HiddenRows() {\n    var _this;\n\n    _classCallCheck(this, HiddenRows);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _classPrivateFieldInitSpec(_assertThisInitialized(_this), _settings, {\n      writable: true,\n      value: {}\n    });\n\n    _classPrivateFieldInitSpec(_assertThisInitialized(_this), _hiddenRowsMap, {\n      writable: true,\n      value: null\n    });\n\n    return _this;\n  }\n\n  _createClass(HiddenRows, [{\n    key: \"isEnabled\",\n    value:\n    /**\n     * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n     * hook and if it returns `true` than the {@link HiddenRows#enablePlugin} method is called.\n     *\n     * @returns {boolean}\n     */\n    function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      var pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n      if (isObject(pluginSettings)) {\n        _classPrivateFieldSet(this, _settings, pluginSettings);\n\n        if (isUndefined(pluginSettings.copyPasteEnabled)) {\n          pluginSettings.copyPasteEnabled = true;\n        }\n      }\n\n      _classPrivateFieldSet(this, _hiddenRowsMap, new HidingMap());\n\n      _classPrivateFieldGet(this, _hiddenRowsMap).addLocalHook('init', function () {\n        return _this2.onMapInit();\n      });\n\n      this.hot.rowIndexMapper.registerMap(this.pluginName, _classPrivateFieldGet(this, _hiddenRowsMap));\n      this.addHook('afterContextMenuDefaultOptions', function () {\n        return _this2.onAfterContextMenuDefaultOptions.apply(_this2, arguments);\n      });\n      this.addHook('afterGetCellMeta', function (row, col, cellProperties) {\n        return _this2.onAfterGetCellMeta(row, col, cellProperties);\n      });\n      this.addHook('modifyRowHeight', function (height, row) {\n        return _this2.onModifyRowHeight(height, row);\n      });\n      this.addHook('afterGetRowHeader', function () {\n        return _this2.onAfterGetRowHeader.apply(_this2, arguments);\n      });\n      this.addHook('modifyCopyableRange', function (ranges) {\n        return _this2.onModifyCopyableRange(ranges);\n      });\n\n      _get(_getPrototypeOf(HiddenRows.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(_getPrototypeOf(HiddenRows.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.hot.rowIndexMapper.unregisterMap(this.pluginName);\n\n      _classPrivateFieldSet(this, _settings, {});\n\n      _get(_getPrototypeOf(HiddenRows.prototype), \"disablePlugin\", this).call(this);\n\n      this.resetCellsMeta();\n    }\n    /**\n     * Shows the rows provided in the array.\n     *\n     * @param {number[]} rows Array of visual row indexes.\n     */\n\n  }, {\n    key: \"showRows\",\n    value: function showRows(rows) {\n      var _this3 = this;\n\n      var currentHideConfig = this.getHiddenRows();\n      var isValidConfig = this.isValidConfig(rows);\n      var destinationHideConfig = currentHideConfig;\n\n      var hidingMapValues = _classPrivateFieldGet(this, _hiddenRowsMap).getValues().slice();\n\n      var isAnyRowShowed = rows.length > 0;\n\n      if (isValidConfig && isAnyRowShowed) {\n        var physicalRows = rows.map(function (visualRow) {\n          return _this3.hot.toPhysicalRow(visualRow);\n        }); // Preparing new values for hiding map.\n\n        arrayEach(physicalRows, function (physicalRow) {\n          hidingMapValues[physicalRow] = false;\n        }); // Preparing new hiding config.\n\n        destinationHideConfig = arrayReduce(hidingMapValues, function (hiddenIndexes, isHidden, physicalIndex) {\n          if (isHidden) {\n            hiddenIndexes.push(_this3.hot.toVisualRow(physicalIndex));\n          }\n\n          return hiddenIndexes;\n        }, []);\n      }\n\n      var continueHiding = this.hot.runHooks('beforeUnhideRows', currentHideConfig, destinationHideConfig, isValidConfig && isAnyRowShowed);\n\n      if (continueHiding === false) {\n        return;\n      }\n\n      if (isValidConfig && isAnyRowShowed) {\n        _classPrivateFieldGet(this, _hiddenRowsMap).setValues(hidingMapValues);\n      }\n\n      this.hot.runHooks('afterUnhideRows', currentHideConfig, destinationHideConfig, isValidConfig && isAnyRowShowed, isValidConfig && destinationHideConfig.length < currentHideConfig.length);\n    }\n    /**\n     * Shows the row provided as row index (counting from 0).\n     *\n     * @param {...number} row Visual row index.\n     */\n\n  }, {\n    key: \"showRow\",\n    value: function showRow() {\n      for (var _len2 = arguments.length, row = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        row[_key2] = arguments[_key2];\n      }\n\n      this.showRows(row);\n    }\n    /**\n     * Hides the rows provided in the array.\n     *\n     * @param {number[]} rows Array of visual row indexes.\n     */\n\n  }, {\n    key: \"hideRows\",\n    value: function hideRows(rows) {\n      var _this4 = this;\n\n      var currentHideConfig = this.getHiddenRows();\n      var isConfigValid = this.isValidConfig(rows);\n      var destinationHideConfig = currentHideConfig;\n\n      if (isConfigValid) {\n        destinationHideConfig = Array.from(new Set(currentHideConfig.concat(rows)));\n      }\n\n      var continueHiding = this.hot.runHooks('beforeHideRows', currentHideConfig, destinationHideConfig, isConfigValid);\n\n      if (continueHiding === false) {\n        return;\n      }\n\n      if (isConfigValid) {\n        this.hot.batchExecution(function () {\n          arrayEach(rows, function (visualRow) {\n            _classPrivateFieldGet(_this4, _hiddenRowsMap).setValueAtIndex(_this4.hot.toPhysicalRow(visualRow), true);\n          });\n        }, true);\n      }\n\n      this.hot.runHooks('afterHideRows', currentHideConfig, destinationHideConfig, isConfigValid, isConfigValid && destinationHideConfig.length > currentHideConfig.length);\n    }\n    /**\n     * Hides the row provided as row index (counting from 0).\n     *\n     * @param {...number} row Visual row index.\n     */\n\n  }, {\n    key: \"hideRow\",\n    value: function hideRow() {\n      for (var _len3 = arguments.length, row = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        row[_key3] = arguments[_key3];\n      }\n\n      this.hideRows(row);\n    }\n    /**\n     * Returns an array of visual indexes of hidden rows.\n     *\n     * @returns {number[]}\n     */\n\n  }, {\n    key: \"getHiddenRows\",\n    value: function getHiddenRows() {\n      var _this5 = this;\n\n      return arrayMap(_classPrivateFieldGet(this, _hiddenRowsMap).getHiddenIndexes(), function (physicalRowIndex) {\n        return _this5.hot.toVisualRow(physicalRowIndex);\n      });\n    }\n    /**\n     * Checks if the provided row is hidden.\n     *\n     * @param {number} row Visual row index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isHidden\",\n    value: function isHidden(row) {\n      return _classPrivateFieldGet(this, _hiddenRowsMap).getValueAtIndex(this.hot.toPhysicalRow(row)) || false;\n    }\n    /**\n     * Checks whether all of the provided row indexes are within the bounds of the table.\n     *\n     * @param {Array} hiddenRows List of hidden visual row indexes.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isValidConfig\",\n    value: function isValidConfig(hiddenRows) {\n      var nrOfRows = this.hot.countRows();\n\n      if (Array.isArray(hiddenRows) && hiddenRows.length > 0) {\n        return hiddenRows.every(function (visualRow) {\n          return Number.isInteger(visualRow) && visualRow >= 0 && visualRow < nrOfRows;\n        });\n      }\n\n      return false;\n    }\n    /**\n     * Resets all rendered cells meta.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"resetCellsMeta\",\n    value: function resetCellsMeta() {\n      arrayEach(this.hot.getCellsMeta(), function (meta) {\n        if (meta) {\n          meta.skipRowOnPaste = false;\n        }\n      });\n    }\n    /**\n     * Adds the additional row height for the hidden row indicators.\n     *\n     * @private\n     * @param {number|undefined} height Row height.\n     * @param {number} row Visual row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"onModifyRowHeight\",\n    value: function onModifyRowHeight(height, row) {\n      // Hook is triggered internally only for the visible rows. Conditional will be handled for the API\n      // calls of the `getRowHeight` function on not visible indexes.\n      if (this.isHidden(row)) {\n        return 0;\n      }\n\n      return height;\n    }\n    /**\n     * Sets the copy-related cell meta.\n     *\n     * @private\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @param {object} cellProperties Object containing the cell properties.\n     */\n\n  }, {\n    key: \"onAfterGetCellMeta\",\n    value: function onAfterGetCellMeta(row, column, cellProperties) {\n      if (_classPrivateFieldGet(this, _settings).copyPasteEnabled === false && this.isHidden(row)) {\n        // Cell property handled by the `Autofill` and the `CopyPaste` plugins.\n        cellProperties.skipRowOnPaste = true;\n      }\n\n      if (this.isHidden(row - 1)) {\n        cellProperties.className = cellProperties.className || '';\n\n        if (cellProperties.className.indexOf('afterHiddenRow') === -1) {\n          cellProperties.className += ' afterHiddenRow';\n        }\n      } else if (cellProperties.className) {\n        var classArr = cellProperties.className.split(' ');\n\n        if (classArr.length > 0) {\n          var containAfterHiddenRow = classArr.indexOf('afterHiddenRow');\n\n          if (containAfterHiddenRow > -1) {\n            classArr.splice(containAfterHiddenRow, 1);\n          }\n\n          cellProperties.className = classArr.join(' ');\n        }\n      }\n    }\n    /**\n     * Modifies the copyable range, accordingly to the provided config.\n     *\n     * @private\n     * @param {Array} ranges An array of objects defining copyable cells.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"onModifyCopyableRange\",\n    value: function onModifyCopyableRange(ranges) {\n      var _this6 = this;\n\n      // Ranges shouldn't be modified when `copyPasteEnabled` option is set to `true` (by default).\n      if (_classPrivateFieldGet(this, _settings).copyPasteEnabled) {\n        return ranges;\n      }\n\n      var newRanges = [];\n\n      var pushRange = function pushRange(startRow, endRow, startCol, endCol) {\n        newRanges.push({\n          startRow: startRow,\n          endRow: endRow,\n          startCol: startCol,\n          endCol: endCol\n        });\n      };\n\n      arrayEach(ranges, function (range) {\n        var isHidden = true;\n        var rangeStart = 0;\n        rangeEach(range.startRow, range.endRow, function (visualRow) {\n          if (_this6.isHidden(visualRow)) {\n            if (!isHidden) {\n              pushRange(rangeStart, visualRow - 1, range.startCol, range.endCol);\n            }\n\n            isHidden = true;\n          } else {\n            if (isHidden) {\n              rangeStart = visualRow;\n            }\n\n            if (visualRow === range.endRow) {\n              pushRange(rangeStart, visualRow, range.startCol, range.endCol);\n            }\n\n            isHidden = false;\n          }\n        });\n      });\n      return newRanges;\n    }\n    /**\n     * Adds the needed classes to the headers.\n     *\n     * @private\n     * @param {number} row Visual row index.\n     * @param {HTMLElement} TH Header's TH element.\n     */\n\n  }, {\n    key: \"onAfterGetRowHeader\",\n    value: function onAfterGetRowHeader(row, TH) {\n      if (!_classPrivateFieldGet(this, _settings).indicators || row < 0) {\n        return;\n      }\n\n      var classList = [];\n\n      if (row >= 1 && this.isHidden(row - 1)) {\n        classList.push('afterHiddenRow');\n      }\n\n      if (row < this.hot.countRows() - 1 && this.isHidden(row + 1)) {\n        classList.push('beforeHiddenRow');\n      }\n\n      addClass(TH, classList);\n    }\n    /**\n     * Add Show-hide rows to context menu.\n     *\n     * @private\n     * @param {object} options An array of objects containing information about the pre-defined Context Menu items.\n     */\n\n  }, {\n    key: \"onAfterContextMenuDefaultOptions\",\n    value: function onAfterContextMenuDefaultOptions(options) {\n      options.items.push({\n        name: SEPARATOR\n      }, hideRowItem(this), showRowItem(this));\n    }\n    /**\n     * On map initialized hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMapInit\",\n    value: function onMapInit() {\n      if (Array.isArray(_classPrivateFieldGet(this, _settings).rows)) {\n        this.hideRows(_classPrivateFieldGet(this, _settings).rows);\n      }\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _classPrivateFieldSet(this, _settings, null);\n\n      _classPrivateFieldSet(this, _hiddenRowsMap, null);\n\n      _get(_getPrototypeOf(HiddenRows.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n    /**\n     * Cached settings from Handsontable settings.\n     *\n     * @private\n     * @type {object}\n     */\n\n  }]);\n\n  return HiddenRows;\n}(BasePlugin);", "import \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport * as C from \"../../../i18n/constants.mjs\";\n/**\n * @param {HiddenRows} hiddenRowsPlugin The plugin instance.\n * @returns {object}\n */\n\nexport default function hideRowItem(hiddenRowsPlugin) {\n  return {\n    key: 'hidden_rows_hide',\n    name: function name() {\n      var selection = this.getSelectedLast();\n      var pluralForm = 0;\n\n      if (Array.isArray(selection)) {\n        var _selection = _slicedToArray(selection, 3),\n            fromRow = _selection[0],\n            toRow = _selection[2];\n\n        if (fromRow - toRow !== 0) {\n          pluralForm = 1;\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_HIDE_ROW, pluralForm);\n    },\n    callback: function callback() {\n      var _this$getSelectedRang = this.getSelectedRangeLast(),\n          from = _this$getSelectedRang.from,\n          to = _this$getSelectedRang.to;\n\n      var start = Math.max(Math.min(from.row, to.row), 0);\n      var end = Math.max(from.row, to.row);\n      var rowsToHide = [];\n\n      for (var visualRow = start; visualRow <= end; visualRow += 1) {\n        rowsToHide.push(visualRow);\n      }\n\n      var firstHiddenRow = rowsToHide[0];\n      var lastHiddenRow = rowsToHide[rowsToHide.length - 1]; // Looking for a visual index on the top and then (when not found) on the bottom.\n\n      var rowToSelect = this.rowIndexMapper.getFirstNotHiddenIndex(lastHiddenRow + 1, 1, true, firstHiddenRow - 1);\n      hiddenRowsPlugin.hideRows(rowsToHide);\n\n      if (Number.isInteger(rowToSelect) && rowToSelect >= 0) {\n        this.selectRows(rowToSelect);\n      } else {\n        this.deselectCell();\n      }\n\n      this.render();\n      this.view.adjustElementsSize(true);\n    },\n    disabled: false,\n    hidden: function hidden() {\n      return !(this.selection.isSelectedByRowHeader() || this.selection.isSelectedByCorner());\n    }\n  };\n}", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport { arrayEach, arrayMap } from \"../../../helpers/array.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\n/**\n * @param {HiddenRows} hiddenRowsPlugin The plugin instance.\n * @returns {object}\n */\n\nexport default function showRowItem(hiddenRowsPlugin) {\n  var rows = [];\n  return {\n    key: 'hidden_rows_show',\n    name: function name() {\n      var pluralForm = rows.length > 1 ? 1 : 0;\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_SHOW_ROW, pluralForm);\n    },\n    callback: function callback() {\n      var _this$rowIndexMapper$, _this$rowIndexMapper$2;\n\n      if (rows.length === 0) {\n        return;\n      }\n\n      var startVisualRow = rows[0];\n      var endVisualRow = rows[rows.length - 1]; // Add to the selection one more visual row on the top.\n\n      startVisualRow = (_this$rowIndexMapper$ = this.rowIndexMapper.getFirstNotHiddenIndex(startVisualRow - 1, -1)) !== null && _this$rowIndexMapper$ !== void 0 ? _this$rowIndexMapper$ : 0; // Add to the selection one more visual row on the bottom.\n\n      endVisualRow = (_this$rowIndexMapper$2 = this.rowIndexMapper.getFirstNotHiddenIndex(endVisualRow + 1, 1)) !== null && _this$rowIndexMapper$2 !== void 0 ? _this$rowIndexMapper$2 : this.countRows() - 1;\n      hiddenRowsPlugin.showRows(rows); // We render rows at first. It was needed for getting fixed rows.\n      // Please take a look at #6864 for broader description.\n\n      this.render();\n      this.view.adjustElementsSize(true);\n      var allRowsSelected = endVisualRow - startVisualRow + 1 === this.countRows(); // When all headers needs to be selected then do nothing. The header selection is\n      // automatically handled by corner click.\n\n      if (!allRowsSelected) {\n        this.selectRows(startVisualRow, endVisualRow);\n      }\n    },\n    disabled: false,\n    hidden: function hidden() {\n      var _this = this;\n\n      var hiddenPhysicalRows = arrayMap(hiddenRowsPlugin.getHiddenRows(), function (visualRowIndex) {\n        return _this.toPhysicalRow(visualRowIndex);\n      });\n\n      if (!(this.selection.isSelectedByRowHeader() || this.selection.isSelectedByCorner()) || hiddenPhysicalRows.length < 1) {\n        return true;\n      }\n\n      rows.length = 0;\n      var selectedRangeLast = this.getSelectedRangeLast();\n      var visualStartRow = selectedRangeLast.getTopLeftCorner().row;\n      var visualEndRow = selectedRangeLast.getBottomRightCorner().row;\n      var rowIndexMapper = this.rowIndexMapper;\n      var renderableStartRow = rowIndexMapper.getRenderableFromVisualIndex(visualStartRow);\n      var renderableEndRow = rowIndexMapper.getRenderableFromVisualIndex(visualEndRow);\n      var notTrimmedRowIndexes = rowIndexMapper.getNotTrimmedIndexes();\n      var physicalRowIndexes = [];\n\n      if (visualStartRow !== visualEndRow) {\n        var visualRowsInRange = visualEndRow - visualStartRow + 1;\n        var renderedRowsInRange = renderableEndRow - renderableStartRow + 1; // Collect not trimmed rows if there are some hidden rows in the selection range.\n\n        if (visualRowsInRange > renderedRowsInRange) {\n          var physicalIndexesInRange = notTrimmedRowIndexes.slice(visualStartRow, visualEndRow + 1);\n          physicalRowIndexes.push.apply(physicalRowIndexes, _toConsumableArray(physicalIndexesInRange.filter(function (physicalIndex) {\n            return hiddenPhysicalRows.includes(physicalIndex);\n          })));\n        } // Handled row is the first rendered index and there are some visual indexes before it.\n\n      } else if (renderableStartRow === 0 && renderableStartRow < visualStartRow) {\n        // not trimmed indexes -> array of mappings from visual (native array's index) to physical indexes (value).\n        physicalRowIndexes.push.apply(physicalRowIndexes, _toConsumableArray(notTrimmedRowIndexes.slice(0, visualStartRow))); // physical indexes\n        // When all rows are hidden and the context menu is triggered using top-left corner.\n      } else if (renderableStartRow === null) {\n        // Show all hidden rows.\n        physicalRowIndexes.push.apply(physicalRowIndexes, _toConsumableArray(notTrimmedRowIndexes.slice(0, this.countRows())));\n      } else {\n        var lastVisualIndex = this.countRows() - 1;\n        var lastRenderableIndex = rowIndexMapper.getRenderableFromVisualIndex(rowIndexMapper.getFirstNotHiddenIndex(lastVisualIndex, -1)); // Handled row is the last rendered index and there are some visual indexes after it.\n\n        if (renderableEndRow === lastRenderableIndex && lastVisualIndex > visualEndRow) {\n          physicalRowIndexes.push.apply(physicalRowIndexes, _toConsumableArray(notTrimmedRowIndexes.slice(visualEndRow + 1)));\n        }\n      }\n\n      arrayEach(physicalRowIndexes, function (physicalRowIndex) {\n        rows.push(_this.toVisualRow(physicalRowIndex));\n      });\n      return rows.length === 0;\n    }\n  };\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport freezeColumnItem from \"./contextMenuItem/freezeColumn.mjs\";\nimport unfreezeColumnItem from \"./contextMenuItem/unfreezeColumn.mjs\";\nexport var PLUGIN_KEY = 'manualColumnFreeze';\nexport var PLUGIN_PRIORITY = 110;\nvar privatePool = new WeakMap();\n/**\n * @plugin ManualColumnFreeze\n * @class ManualColumnFreeze\n *\n * @description\n * This plugin allows to manually \"freeze\" and \"unfreeze\" a column using an entry in the Context Menu or using API.\n * You can turn it on by setting a {@link Options#manualColumnFreeze} property to `true`.\n *\n * @example\n * ```js\n * // Enables the plugin\n * manualColumnFreeze: true,\n * ```\n */\n\nexport var ManualColumnFreeze = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(ManualColumnFreeze, _BasePlugin);\n\n  var _super = _createSuper(ManualColumnFreeze);\n\n  function ManualColumnFreeze(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, ManualColumnFreeze);\n\n    _this = _super.call(this, hotInstance);\n    privatePool.set(_assertThisInitialized(_this), {\n      afterFirstUse: false\n    });\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ManualColumnFreeze#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(ManualColumnFreeze, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.addHook('afterContextMenuDefaultOptions', function (options) {\n        return _this2.addContextMenuEntry(options);\n      });\n      this.addHook('beforeColumnMove', function (columns, finalIndex) {\n        return _this2.onBeforeColumnMove(columns, finalIndex);\n      });\n\n      _get(_getPrototypeOf(ManualColumnFreeze.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      var priv = privatePool.get(this);\n      priv.afterFirstUse = false;\n\n      _get(_getPrototypeOf(ManualColumnFreeze.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(_getPrototypeOf(ManualColumnFreeze.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Freezes the specified column (adds it to fixed columns).\n     *\n     * `freezeColumn()` doesn't re-render the table,\n     * so you need to call the `render()` method afterward.\n     *\n     * @param {number} column Visual column index.\n     */\n\n  }, {\n    key: \"freezeColumn\",\n    value: function freezeColumn(column) {\n      var priv = privatePool.get(this);\n      var settings = this.hot.getSettings();\n\n      if (!priv.afterFirstUse) {\n        priv.afterFirstUse = true;\n      }\n\n      if (settings.fixedColumnsLeft === this.hot.countCols() || column <= settings.fixedColumnsLeft - 1) {\n        return; // already fixed\n      }\n\n      this.hot.columnIndexMapper.moveIndexes(column, settings.fixedColumnsLeft);\n      settings.fixedColumnsLeft += 1;\n    }\n    /**\n     * Unfreezes the given column (remove it from fixed columns and bring to it's previous position).\n     *\n     * @param {number} column Visual column index.\n     */\n\n  }, {\n    key: \"unfreezeColumn\",\n    value: function unfreezeColumn(column) {\n      var priv = privatePool.get(this);\n      var settings = this.hot.getSettings();\n\n      if (!priv.afterFirstUse) {\n        priv.afterFirstUse = true;\n      }\n\n      if (settings.fixedColumnsLeft <= 0 || column > settings.fixedColumnsLeft - 1) {\n        return; // not fixed\n      }\n\n      settings.fixedColumnsLeft -= 1;\n      this.hot.columnIndexMapper.moveIndexes(column, settings.fixedColumnsLeft);\n    }\n    /**\n     * Adds the manualColumnFreeze context menu entries.\n     *\n     * @private\n     * @param {object} options Context menu options.\n     */\n\n  }, {\n    key: \"addContextMenuEntry\",\n    value: function addContextMenuEntry(options) {\n      options.items.push({\n        name: '---------'\n      }, freezeColumnItem(this), unfreezeColumnItem(this));\n    }\n    /**\n     * Prevents moving the columns from/to fixed area.\n     *\n     * @private\n     * @param {Array} columns Array of visual column indexes to be moved.\n     * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n     * @returns {boolean|undefined}\n     */\n\n  }, {\n    key: \"onBeforeColumnMove\",\n    value: function onBeforeColumnMove(columns, finalIndex) {\n      var priv = privatePool.get(this);\n\n      if (priv.afterFirstUse) {\n        var freezeLine = this.hot.getSettings().fixedColumnsLeft; // Moving any column before the \"freeze line\" isn't possible.\n\n        if (finalIndex < freezeLine) {\n          return false;\n        } // Moving frozen column isn't possible.\n\n\n        if (columns.some(function (column) {\n          return column < freezeLine;\n        })) {\n          return false;\n        }\n      }\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return ManualColumnFreeze;\n}(BasePlugin);", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport * as C from \"../../../i18n/constants.mjs\";\n/**\n * @param {ManualColumnFreeze} manualColumnFreezePlugin The plugin instance.\n * @returns {object}\n */\n\nexport default function freezeColumnItem(manualColumnFreezePlugin) {\n  return {\n    key: 'freeze_column',\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_FREEZE_COLUMN);\n    },\n    callback: function callback(key, selected) {\n      var _selected = _slicedToArray(selected, 1),\n          selectedColumn = _selected[0].start.col;\n\n      manualColumnFreezePlugin.freezeColumn(selectedColumn);\n      this.render();\n      this.view.adjustElementsSize(true);\n    },\n    hidden: function hidden() {\n      var selection = this.getSelectedRange();\n      var hide = false;\n\n      if (selection === void 0) {\n        hide = true;\n      } else if (selection.length > 1) {\n        hide = true;\n      } else if (selection[0].from.col !== selection[0].to.col || selection[0].from.col <= this.getSettings().fixedColumnsLeft - 1) {\n        hide = true;\n      }\n\n      return hide;\n    }\n  };\n}", "import \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport * as C from \"../../../i18n/constants.mjs\";\n/**\n * @param {ManualColumnFreeze} manualColumnFreezePlugin The plugin instance.\n * @returns {object}\n */\n\nexport default function unfreezeColumnItem(manualColumnFreezePlugin) {\n  return {\n    key: 'unfreeze_column',\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN);\n    },\n    callback: function callback(key, selected) {\n      var _selected = _slicedToArray(selected, 1),\n          selectedColumn = _selected[0].start.col;\n\n      manualColumnFreezePlugin.unfreezeColumn(selectedColumn);\n      this.render();\n      this.view.adjustElementsSize(true);\n    },\n    hidden: function hidden() {\n      var selection = this.getSelectedRange();\n      var hide = false;\n\n      if (selection === void 0) {\n        hide = true;\n      } else if (selection.length > 1) {\n        hide = true;\n      } else if (selection[0].from.col !== selection[0].to.col || selection[0].from.col >= this.getSettings().fixedColumnsLeft) {\n        hide = true;\n      }\n\n      return hide;\n    }\n  };\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nimport { arrayReduce } from \"../../helpers/array.mjs\";\nimport { addClass, removeClass, offset, hasClass } from \"../../helpers/dom/element.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport BacklightUI from \"./ui/backlight.mjs\";\nimport GuidelineUI from \"./ui/guideline.mjs\";\nHooks.getSingleton().register('beforeColumnMove');\nHooks.getSingleton().register('afterColumnMove');\nexport var PLUGIN_KEY = 'manualColumnMove';\nexport var PLUGIN_PRIORITY = 120;\nvar privatePool = new WeakMap();\nvar CSS_PLUGIN = 'ht__manualColumnMove';\nvar CSS_SHOW_UI = 'show-ui';\nvar CSS_ON_MOVING = 'on-moving--columns';\nvar CSS_AFTER_SELECTION = 'after-selection--columns';\n/**\n * @plugin ManualColumnMove\n * @class ManualColumnMove\n *\n * @description\n * This plugin allows to change columns order. To make columns order persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * API:\n * - `moveColumn` - move single column to the new position.\n * - `moveColumns` - move many columns (as an array of indexes) to the new position.\n * - `dragColumn` - drag single column to the new position.\n * - `dragColumns` - drag many columns (as an array of indexes) to the new position.\n *\n * [Documentation](@/guides/columns/column-moving.md) explain differences between drag and move actions.\n * Please keep in mind that if you want apply visual changes,\n * you have to call manually the `render` method on the instance of Handsontable.\n *\n * The plugin creates additional components to make moving possibly using user interface:\n * - backlight - highlight of selected columns.\n * - guideline - line which shows where columns has been moved.\n *\n * @class ManualColumnMove\n * @plugin ManualColumnMove\n */\n\nexport var ManualColumnMove = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(ManualColumnMove, _BasePlugin);\n\n  var _super = _createSuper(ManualColumnMove);\n\n  function ManualColumnMove(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, ManualColumnMove);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Set up WeakMap of plugin to sharing private parameters;.\n     */\n\n    privatePool.set(_assertThisInitialized(_this), {\n      columnsToMove: [],\n      countCols: 0,\n      fixedColumns: 0,\n      pressed: void 0,\n      target: {\n        eventPageX: void 0,\n        coords: void 0,\n        TD: void 0,\n        col: void 0\n      },\n      cachedDropIndex: void 0\n    });\n    /**\n     * Event Manager object.\n     *\n     * @private\n     * @type {object}\n     */\n\n    _this.eventManager = new EventManager(_assertThisInitialized(_this));\n    /**\n     * Backlight UI object.\n     *\n     * @private\n     * @type {object}\n     */\n\n    _this.backlight = new BacklightUI(hotInstance);\n    /**\n     * Guideline UI object.\n     *\n     * @private\n     * @type {object}\n     */\n\n    _this.guideline = new GuidelineUI(hotInstance);\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ManualColumnMove#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(ManualColumnMove, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.addHook('beforeOnCellMouseDown', function () {\n        return _this2.onBeforeOnCellMouseDown.apply(_this2, arguments);\n      });\n      this.addHook('beforeOnCellMouseOver', function () {\n        return _this2.onBeforeOnCellMouseOver.apply(_this2, arguments);\n      });\n      this.addHook('afterScrollVertically', function () {\n        return _this2.onAfterScrollVertically();\n      });\n      this.addHook('afterLoadData', function () {\n        return _this2.onAfterLoadData.apply(_this2, arguments);\n      });\n      this.buildPluginUI();\n      this.registerEvents(); // TODO: move adding plugin classname to BasePlugin.\n\n      addClass(this.hot.rootElement, CSS_PLUGIN);\n\n      _get(_getPrototypeOf(ManualColumnMove.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n      this.moveBySettingsOrLoad();\n\n      _get(_getPrototypeOf(ManualColumnMove.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      removeClass(this.hot.rootElement, CSS_PLUGIN);\n      this.unregisterEvents();\n      this.backlight.destroy();\n      this.guideline.destroy();\n\n      _get(_getPrototypeOf(ManualColumnMove.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Moves a single column.\n     *\n     * @param {number} column Visual column index to be moved.\n     * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n     * To check the visualization of the final index, please take a look at [documentation](@/guides/columns/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n     * @fires Hooks#beforeColumnMove\n     * @fires Hooks#afterColumnMove\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"moveColumn\",\n    value: function moveColumn(column, finalIndex) {\n      return this.moveColumns([column], finalIndex);\n    }\n    /**\n     * Moves a multiple columns.\n     *\n     * @param {Array} columns Array of visual column indexes to be moved.\n     * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n     * To check the visualization of the final index, please take a look at [documentation](@/guides/columns/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n     * @fires Hooks#beforeColumnMove\n     * @fires Hooks#afterColumnMove\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"moveColumns\",\n    value: function moveColumns(columns, finalIndex) {\n      var priv = privatePool.get(this);\n      var dropIndex = priv.cachedDropIndex;\n      var movePossible = this.isMovePossible(columns, finalIndex);\n      var beforeMoveHook = this.hot.runHooks('beforeColumnMove', columns, finalIndex, dropIndex, movePossible);\n      priv.cachedDropIndex = void 0;\n\n      if (beforeMoveHook === false) {\n        return;\n      }\n\n      if (movePossible) {\n        this.hot.columnIndexMapper.moveIndexes(columns, finalIndex);\n      }\n\n      var movePerformed = movePossible && this.isColumnOrderChanged(columns, finalIndex);\n      this.hot.runHooks('afterColumnMove', columns, finalIndex, dropIndex, movePossible, movePerformed);\n      return movePerformed;\n    }\n    /**\n     * Drag a single column to drop index position.\n     *\n     * @param {number} column Visual column index to be dragged.\n     * @param {number} dropIndex Visual column index, being a drop index for the moved columns. Points to where we are going to drop the moved elements.\n     * To check visualization of drop index please take a look at [documentation](@/guides/columns/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n     * @fires Hooks#beforeColumnMove\n     * @fires Hooks#afterColumnMove\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"dragColumn\",\n    value: function dragColumn(column, dropIndex) {\n      return this.dragColumns([column], dropIndex);\n    }\n    /**\n     * Drag multiple columns to drop index position.\n     *\n     * @param {Array} columns Array of visual column indexes to be dragged.\n     * @param {number} dropIndex Visual column index, being a drop index for the moved columns. Points to where we are going to drop the moved elements.\n     * To check visualization of drop index please take a look at [documentation](@/guides/columns/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n     * @fires Hooks#beforeColumnMove\n     * @fires Hooks#afterColumnMove\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"dragColumns\",\n    value: function dragColumns(columns, dropIndex) {\n      var finalIndex = this.countFinalIndex(columns, dropIndex);\n      var priv = privatePool.get(this);\n      priv.cachedDropIndex = dropIndex;\n      return this.moveColumns(columns, finalIndex);\n    }\n    /**\n     * Indicates if it's possible to move columns to the desired position. Some of the actions aren't\n     * possible, i.e. You can\u2019t move more than one element to the last position.\n     *\n     * @param {Array} movedColumns Array of visual column indexes to be moved.\n     * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n     * To check the visualization of the final index, please take a look at [documentation](@/guides/columns/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isMovePossible\",\n    value: function isMovePossible(movedColumns, finalIndex) {\n      var length = this.hot.columnIndexMapper.getNotTrimmedIndexesLength(); // An attempt to transfer more columns to start destination than is possible (only when moving from the top to the bottom).\n\n      var tooHighDestinationIndex = movedColumns.length + finalIndex > length;\n      var tooLowDestinationIndex = finalIndex < 0;\n      var tooLowMovedColumnIndex = movedColumns.some(function (movedColumn) {\n        return movedColumn < 0;\n      });\n      var tooHighMovedColumnIndex = movedColumns.some(function (movedColumn) {\n        return movedColumn >= length;\n      });\n\n      if (tooHighDestinationIndex || tooLowDestinationIndex || tooLowMovedColumnIndex || tooHighMovedColumnIndex) {\n        return false;\n      }\n\n      return true;\n    }\n    /**\n     * Indicates if order of columns was changed.\n     *\n     * @private\n     * @param {Array} movedColumns Array of visual column indexes to be moved.\n     * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n     * To check the visualization of the final index, please take a look at [documentation](@/guides/columns/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isColumnOrderChanged\",\n    value: function isColumnOrderChanged(movedColumns, finalIndex) {\n      return movedColumns.some(function (column, nrOfMovedElement) {\n        return column - nrOfMovedElement !== finalIndex;\n      });\n    }\n    /**\n     * Count the final column index from the drop index.\n     *\n     * @private\n     * @param {Array} movedColumns Array of visual column indexes to be moved.\n     * @param {number} dropIndex Visual column index, being a drop index for the moved columns.\n     * @returns {number} Visual column index, being a start index for the moved columns.\n     */\n\n  }, {\n    key: \"countFinalIndex\",\n    value: function countFinalIndex(movedColumns, dropIndex) {\n      var numberOfColumnsLowerThanDropIndex = arrayReduce(movedColumns, function (numberOfColumns, currentColumnIndex) {\n        if (currentColumnIndex < dropIndex) {\n          numberOfColumns += 1;\n        }\n\n        return numberOfColumns;\n      }, 0);\n      return dropIndex - numberOfColumnsLowerThanDropIndex;\n    }\n    /**\n     * Gets the sum of the widths of columns in the provided range.\n     *\n     * @private\n     * @param {number} fromColumn Visual column index.\n     * @param {number} toColumn Visual column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getColumnsWidth\",\n    value: function getColumnsWidth(fromColumn, toColumn) {\n      var columnMapper = this.hot.columnIndexMapper;\n      var columnsWidth = 0;\n\n      for (var visualColumnIndex = fromColumn; visualColumnIndex <= toColumn; visualColumnIndex += 1) {\n        // We can't use just `getColWidth` (even without indexes translation) as it doesn't return proper values\n        // when column is stretched.\n        var renderableIndex = columnMapper.getRenderableFromVisualIndex(visualColumnIndex);\n\n        if (visualColumnIndex < 0) {\n          columnsWidth += this.hot.view.wt.wtViewport.getRowHeaderWidth() || 0;\n        } else if (renderableIndex !== null) {\n          columnsWidth += this.hot.view.wt.wtTable.getStretchedColumnWidth(renderableIndex) || 0;\n        }\n      }\n\n      return columnsWidth;\n    }\n    /**\n     * Loads initial settings when persistent state is saved or when plugin was initialized as an array.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"moveBySettingsOrLoad\",\n    value: function moveBySettingsOrLoad() {\n      var pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n      if (Array.isArray(pluginSettings)) {\n        this.moveColumns(pluginSettings, 0);\n      } else if (pluginSettings !== void 0) {\n        var persistentState = this.persistentStateLoad();\n\n        if (persistentState.length) {\n          this.moveColumns(persistentState, 0);\n        }\n      }\n    }\n    /**\n     * Checks if the provided column is in the fixedColumnsTop section.\n     *\n     * @private\n     * @param {number} column Visual column index to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isFixedColumnsLeft\",\n    value: function isFixedColumnsLeft(column) {\n      return column < this.hot.getSettings().fixedColumnsLeft;\n    }\n    /**\n     * Saves the manual column positions to the persistent state (the {@link Options#persistentState} option has to be enabled).\n     *\n     * @private\n     * @fires Hooks#persistentStateSave\n     */\n\n  }, {\n    key: \"persistentStateSave\",\n    value: function persistentStateSave() {\n      this.hot.runHooks('persistentStateSave', 'manualColumnMove', this.hot.columnIndexMapper.getIndexesSequence()); // The `PersistentState` plugin should be refactored.\n    }\n    /**\n     * Loads the manual column positions from the persistent state (the {@link Options#persistentState} option has to be enabled).\n     *\n     * @private\n     * @fires Hooks#persistentStateLoad\n     * @returns {Array} Stored state.\n     */\n\n  }, {\n    key: \"persistentStateLoad\",\n    value: function persistentStateLoad() {\n      var storedState = {};\n      this.hot.runHooks('persistentStateLoad', 'manualColumnMove', storedState);\n      return storedState.value ? storedState.value : [];\n    }\n    /**\n     * Prepares an array of indexes based on actual selection.\n     *\n     * @private\n     * @param {number} start The start index.\n     * @param {number} end The end index.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"prepareColumnsToMoving\",\n    value: function prepareColumnsToMoving(start, end) {\n      var selectedColumns = [];\n      rangeEach(start, end, function (i) {\n        selectedColumns.push(i);\n      });\n      return selectedColumns;\n    }\n    /**\n     * Update the UI visual position.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"refreshPositions\",\n    value: function refreshPositions() {\n      var priv = privatePool.get(this);\n      var firstVisible = this.hot.view.wt.wtTable.getFirstVisibleColumn();\n      var lastVisible = this.hot.view.wt.wtTable.getLastVisibleColumn();\n      var wtTable = this.hot.view.wt.wtTable;\n      var scrollableElement = this.hot.view.wt.wtOverlays.scrollableElement;\n      var scrollLeft = typeof scrollableElement.scrollX === 'number' ? scrollableElement.scrollX : scrollableElement.scrollLeft;\n      var tdOffsetLeft = this.hot.view.THEAD.offsetLeft + this.getColumnsWidth(0, priv.coords - 1);\n      var mouseOffsetLeft = priv.target.eventPageX - (priv.rootElementOffset - (scrollableElement.scrollX === void 0 ? scrollLeft : 0)); // eslint-disable-line max-len\n\n      var hiderWidth = wtTable.hider.offsetWidth;\n      var tbodyOffsetLeft = wtTable.TBODY.offsetLeft;\n      var backlightElemMarginLeft = this.backlight.getOffset().left;\n      var backlightElemWidth = this.backlight.getSize().width;\n      var rowHeaderWidth = 0;\n\n      if (priv.rootElementOffset + wtTable.holder.offsetWidth + scrollLeft < priv.target.eventPageX) {\n        if (priv.coords < priv.countCols) {\n          priv.coords += 1;\n        }\n      }\n\n      if (priv.hasRowHeaders) {\n        rowHeaderWidth = this.hot.view.wt.wtOverlays.leftOverlay.clone.wtTable.getColumnHeader(-1).offsetWidth;\n      }\n\n      if (this.isFixedColumnsLeft(priv.coords)) {\n        tdOffsetLeft += scrollLeft;\n      }\n\n      tdOffsetLeft += rowHeaderWidth;\n\n      if (priv.coords < 0) {\n        // if hover on rowHeader\n        if (priv.fixedColumns > 0) {\n          priv.target.col = 0;\n        } else {\n          priv.target.col = firstVisible > 0 ? firstVisible - 1 : firstVisible;\n        }\n      } else if (priv.target.TD.offsetWidth / 2 + tdOffsetLeft <= mouseOffsetLeft) {\n        var newCoordsCol = priv.coords >= priv.countCols ? priv.countCols - 1 : priv.coords; // if hover on right part of TD\n\n        priv.target.col = newCoordsCol + 1; // unfortunately first column is bigger than rest\n\n        tdOffsetLeft += priv.target.TD.offsetWidth;\n\n        if (priv.target.col > lastVisible && lastVisible < priv.countCols) {\n          this.hot.scrollViewportTo(void 0, lastVisible + 1, void 0, true);\n        }\n      } else {\n        // elsewhere on table\n        priv.target.col = priv.coords;\n\n        if (priv.target.col <= firstVisible && priv.target.col >= priv.fixedColumns && firstVisible > 0) {\n          this.hot.scrollViewportTo(void 0, firstVisible - 1);\n        }\n      }\n\n      if (priv.target.col <= firstVisible && priv.target.col >= priv.fixedColumns && firstVisible > 0) {\n        this.hot.scrollViewportTo(void 0, firstVisible - 1);\n      }\n\n      var backlightLeft = mouseOffsetLeft;\n      var guidelineLeft = tdOffsetLeft;\n\n      if (mouseOffsetLeft + backlightElemWidth + backlightElemMarginLeft >= hiderWidth) {\n        // prevent display backlight on the right side of the table\n        backlightLeft = hiderWidth - backlightElemWidth - backlightElemMarginLeft;\n      } else if (mouseOffsetLeft + backlightElemMarginLeft < tbodyOffsetLeft + rowHeaderWidth) {\n        // prevent display backlight on the left side of the table\n        backlightLeft = tbodyOffsetLeft + rowHeaderWidth + Math.abs(backlightElemMarginLeft);\n      }\n\n      if (tdOffsetLeft >= hiderWidth - 1) {\n        // prevent display guideline outside the table\n        guidelineLeft = hiderWidth - 1;\n      } else if (guidelineLeft === 0) {\n        // guideline has got `margin-left: -1px` as default\n        guidelineLeft = 1;\n      } else if (scrollableElement.scrollX !== void 0 && priv.coords < priv.fixedColumns) {\n        guidelineLeft -= priv.rootElementOffset <= scrollableElement.scrollX ? priv.rootElementOffset : 0;\n      }\n\n      this.backlight.setPosition(null, backlightLeft);\n      this.guideline.setPosition(null, guidelineLeft);\n    }\n    /**\n     * Binds the events used by the plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"registerEvents\",\n    value: function registerEvents() {\n      var _this3 = this;\n\n      var documentElement = this.hot.rootDocument.documentElement;\n      this.eventManager.addEventListener(documentElement, 'mousemove', function (event) {\n        return _this3.onMouseMove(event);\n      });\n      this.eventManager.addEventListener(documentElement, 'mouseup', function () {\n        return _this3.onMouseUp();\n      });\n    }\n    /**\n     * Unbinds the events used by the plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"unregisterEvents\",\n    value: function unregisterEvents() {\n      this.eventManager.clear();\n    }\n    /**\n     * Change the behavior of selection / dragging.\n     *\n     * @private\n     * @param {MouseEvent} event `mousedown` event properties.\n     * @param {CellCoords} coords Visual cell coordinates where was fired event.\n     * @param {HTMLElement} TD Cell represented as HTMLElement.\n     * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n     *                            a boolean value that allows or disallows changing the selection for that particular area.\n     */\n\n  }, {\n    key: \"onBeforeOnCellMouseDown\",\n    value: function onBeforeOnCellMouseDown(event, coords, TD, controller) {\n      var wtTable = this.hot.view.wt.wtTable;\n      var isHeaderSelection = this.hot.selection.isSelectedByColumnHeader();\n      var selection = this.hot.getSelectedRangeLast();\n      var priv = privatePool.get(this); // This block action shouldn't be handled below.\n\n      var isSortingElement = hasClass(event.target, 'sortAction');\n\n      if (!selection || !isHeaderSelection || priv.pressed || event.button !== 0 || isSortingElement) {\n        priv.pressed = false;\n        priv.columnsToMove.length = 0;\n        removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI]);\n        return;\n      }\n\n      var guidelineIsNotReady = this.guideline.isBuilt() && !this.guideline.isAppended();\n      var backlightIsNotReady = this.backlight.isBuilt() && !this.backlight.isAppended();\n\n      if (guidelineIsNotReady && backlightIsNotReady) {\n        this.guideline.appendTo(wtTable.hider);\n        this.backlight.appendTo(wtTable.hider);\n      }\n\n      var from = selection.from,\n          to = selection.to;\n      var start = Math.min(from.col, to.col);\n      var end = Math.max(from.col, to.col);\n\n      if (coords.row < 0 && coords.col >= start && coords.col <= end) {\n        controller.column = true;\n        priv.pressed = true;\n        priv.target.eventPageX = event.pageX;\n        priv.coords = coords.col;\n        priv.target.TD = TD;\n        priv.target.col = coords.col;\n        priv.columnsToMove = this.prepareColumnsToMoving(start, end);\n        priv.hasRowHeaders = !!this.hot.getSettings().rowHeaders;\n        priv.countCols = this.hot.countCols();\n        priv.fixedColumns = this.hot.getSettings().fixedColumnsLeft;\n        priv.rootElementOffset = offset(this.hot.rootElement).left;\n        var countColumnsFrom = priv.hasRowHeaders ? -1 : 0;\n        var topPos = wtTable.holder.scrollTop + wtTable.getColumnHeaderHeight(0) + 1;\n        var fixedColumns = coords.col < priv.fixedColumns;\n        var scrollableElement = this.hot.view.wt.wtOverlays.scrollableElement;\n        var wrapperIsWindow = scrollableElement.scrollX ? scrollableElement.scrollX - priv.rootElementOffset : 0;\n        var mouseOffset = event.offsetX - (fixedColumns ? wrapperIsWindow : 0);\n        var leftOffset = Math.abs(this.getColumnsWidth(start, coords.col - 1) + mouseOffset);\n        this.backlight.setPosition(topPos, this.getColumnsWidth(countColumnsFrom, start - 1) + leftOffset);\n        this.backlight.setSize(this.getColumnsWidth(start, end), wtTable.hider.offsetHeight - topPos);\n        this.backlight.setOffset(null, leftOffset * -1);\n        addClass(this.hot.rootElement, CSS_ON_MOVING);\n      } else {\n        removeClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n        priv.pressed = false;\n        priv.columnsToMove.length = 0;\n      }\n    }\n    /**\n     * 'mouseMove' event callback. Fired when pointer move on document.documentElement.\n     *\n     * @private\n     * @param {MouseEvent} event `mousemove` event properties.\n     */\n\n  }, {\n    key: \"onMouseMove\",\n    value: function onMouseMove(event) {\n      var priv = privatePool.get(this);\n\n      if (!priv.pressed) {\n        return;\n      } // callback for browser which doesn't supports CSS pointer-event: none\n\n\n      if (event.target === this.backlight.element) {\n        var width = this.backlight.getSize().width;\n        this.backlight.setSize(0);\n        setTimeout(function () {\n          this.backlight.setPosition(width);\n        });\n      }\n\n      priv.target.eventPageX = event.pageX;\n      this.refreshPositions();\n    }\n    /**\n     * 'beforeOnCellMouseOver' hook callback. Fired when pointer was over cell.\n     *\n     * @private\n     * @param {MouseEvent} event `mouseover` event properties.\n     * @param {CellCoords} coords Visual cell coordinates where was fired event.\n     * @param {HTMLElement} TD Cell represented as HTMLElement.\n     * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n     *                            a boolean value that allows or disallows changing the selection for that particular area.\n     */\n\n  }, {\n    key: \"onBeforeOnCellMouseOver\",\n    value: function onBeforeOnCellMouseOver(event, coords, TD, controller) {\n      var selectedRange = this.hot.getSelectedRangeLast();\n      var priv = privatePool.get(this);\n\n      if (!selectedRange || !priv.pressed) {\n        return;\n      }\n\n      if (priv.columnsToMove.indexOf(coords.col) > -1) {\n        removeClass(this.hot.rootElement, CSS_SHOW_UI);\n      } else {\n        addClass(this.hot.rootElement, CSS_SHOW_UI);\n      }\n\n      controller.row = true;\n      controller.column = true;\n      controller.cell = true;\n      priv.coords = coords.col;\n      priv.target.TD = TD;\n    }\n    /**\n     * `onMouseUp` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMouseUp\",\n    value: function onMouseUp() {\n      var priv = privatePool.get(this);\n      var target = priv.target.col;\n      var columnsLen = priv.columnsToMove.length;\n      priv.coords = void 0;\n      priv.pressed = false;\n      priv.backlightWidth = 0;\n      removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI, CSS_AFTER_SELECTION]);\n\n      if (this.hot.selection.isSelectedByColumnHeader()) {\n        addClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n      }\n\n      if (columnsLen < 1 || target === void 0) {\n        return;\n      }\n\n      var firstMovedVisualColumn = priv.columnsToMove[0];\n      var firstMovedPhysicalColumn = this.hot.toPhysicalColumn(firstMovedVisualColumn);\n      var movePerformed = this.dragColumns(priv.columnsToMove, target);\n      priv.columnsToMove.length = 0;\n\n      if (movePerformed === true) {\n        this.persistentStateSave();\n        this.hot.render();\n        this.hot.view.adjustElementsSize(true);\n        var selectionStart = this.hot.toVisualColumn(firstMovedPhysicalColumn);\n        var selectionEnd = selectionStart + columnsLen - 1;\n        this.hot.selectColumns(selectionStart, selectionEnd);\n      }\n    }\n    /**\n     * `afterScrollHorizontally` hook callback. Fired the table was scrolled horizontally.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterScrollVertically\",\n    value: function onAfterScrollVertically() {\n      var wtTable = this.hot.view.wt.wtTable;\n      var headerHeight = wtTable.getColumnHeaderHeight(0) + 1;\n      var scrollTop = wtTable.holder.scrollTop;\n      var posTop = headerHeight + scrollTop;\n      this.backlight.setPosition(posTop);\n      this.backlight.setSize(null, wtTable.hider.offsetHeight - posTop);\n    }\n    /**\n     * Builds the plugin's UI.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"buildPluginUI\",\n    value: function buildPluginUI() {\n      this.backlight.build();\n      this.guideline.build();\n    }\n    /**\n     * Callback for the `afterLoadData` hook.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterLoadData\",\n    value: function onAfterLoadData() {\n      this.moveBySettingsOrLoad();\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.backlight.destroy();\n      this.guideline.destroy();\n\n      _get(_getPrototypeOf(ManualColumnMove.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return ManualColumnMove;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport BaseUI from \"./_base.mjs\";\nimport { addClass } from \"../../../helpers/dom/element.mjs\";\nvar CSS_CLASSNAME = 'ht__manualColumnMove--backlight';\n/**\n * @class BacklightUI\n * @util\n */\n\nvar BacklightUI = /*#__PURE__*/function (_BaseUI) {\n  _inherits(BacklightUI, _BaseUI);\n\n  var _super = _createSuper(BacklightUI);\n\n  function BacklightUI() {\n    _classCallCheck(this, BacklightUI);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(BacklightUI, [{\n    key: \"build\",\n    value:\n    /**\n     * Custom className on build process.\n     */\n    function build() {\n      _get(_getPrototypeOf(BacklightUI.prototype), \"build\", this).call(this);\n\n      addClass(this._element, CSS_CLASSNAME);\n    }\n  }]);\n\n  return BacklightUI;\n}(BaseUI);\n\nexport default BacklightUI;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { isNumeric } from \"../../../helpers/number.mjs\";\nvar STATE_INITIALIZED = 0;\nvar STATE_BUILT = 1;\nvar STATE_APPENDED = 2;\nvar UNIT = 'px';\n/**\n * @class\n * @private\n */\n\nvar BaseUI = /*#__PURE__*/function () {\n  function BaseUI(hotInstance) {\n    _classCallCheck(this, BaseUI);\n\n    /**\n     * Instance of Handsontable.\n     *\n     * @type {Core}\n     */\n    this.hot = hotInstance;\n    /**\n     * DOM element representing the ui element.\n     *\n     * @type {HTMLElement}\n     * @private\n     */\n\n    this._element = null;\n    /**\n     * Flag which determines build state of element.\n     *\n     * @type {number}\n     */\n\n    this.state = STATE_INITIALIZED;\n  }\n  /**\n   * Add created UI elements to table.\n   *\n   * @param {HTMLElement} wrapper Element which are parent for our UI element.\n   */\n\n\n  _createClass(BaseUI, [{\n    key: \"appendTo\",\n    value: function appendTo(wrapper) {\n      wrapper.appendChild(this._element);\n      this.state = STATE_APPENDED;\n    }\n    /**\n     * Method for create UI element. Only create, without append to table.\n     */\n\n  }, {\n    key: \"build\",\n    value: function build() {\n      if (this.state !== STATE_INITIALIZED) {\n        return;\n      }\n\n      this._element = this.hot.rootDocument.createElement('div');\n      this.state = STATE_BUILT;\n    }\n    /**\n     * Method for remove UI element.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.isAppended()) {\n        this._element.parentElement.removeChild(this._element);\n      }\n\n      this._element = null;\n      this.state = STATE_INITIALIZED;\n    }\n    /**\n     * Check if UI element are appended.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isAppended\",\n    value: function isAppended() {\n      return this.state === STATE_APPENDED;\n    }\n    /**\n     * Check if UI element are built.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isBuilt\",\n    value: function isBuilt() {\n      return this.state >= STATE_BUILT;\n    }\n    /**\n     * Setter for position.\n     *\n     * @param {number} top New top position of the element.\n     * @param {number} left New left position of the element.\n     */\n\n  }, {\n    key: \"setPosition\",\n    value: function setPosition(top, left) {\n      if (isNumeric(top)) {\n        this._element.style.top = top + UNIT;\n      }\n\n      if (isNumeric(left)) {\n        this._element.style.left = left + UNIT;\n      }\n    }\n    /**\n     * Getter for the element position.\n     *\n     * @returns {object} Object contains left and top position of the element.\n     */\n\n  }, {\n    key: \"getPosition\",\n    value: function getPosition() {\n      return {\n        top: this._element.style.top ? parseInt(this._element.style.top, 10) : 0,\n        left: this._element.style.left ? parseInt(this._element.style.left, 10) : 0\n      };\n    }\n    /**\n     * Setter for the element size.\n     *\n     * @param {number} width New width of the element.\n     * @param {number} height New height of the element.\n     */\n\n  }, {\n    key: \"setSize\",\n    value: function setSize(width, height) {\n      if (isNumeric(width)) {\n        this._element.style.width = width + UNIT;\n      }\n\n      if (isNumeric(height)) {\n        this._element.style.height = height + UNIT;\n      }\n    }\n    /**\n     * Getter for the element position.\n     *\n     * @returns {object} Object contains height and width of the element.\n     */\n\n  }, {\n    key: \"getSize\",\n    value: function getSize() {\n      return {\n        width: this._element.style.width ? parseInt(this._element.style.width, 10) : 0,\n        height: this._element.style.height ? parseInt(this._element.style.height, 10) : 0\n      };\n    }\n    /**\n     * Setter for the element offset. Offset means marginTop and marginLeft of the element.\n     *\n     * @param {number} top New margin top of the element.\n     * @param {number} left New margin left of the element.\n     */\n\n  }, {\n    key: \"setOffset\",\n    value: function setOffset(top, left) {\n      if (isNumeric(top)) {\n        this._element.style.marginTop = top + UNIT;\n      }\n\n      if (isNumeric(left)) {\n        this._element.style.marginLeft = left + UNIT;\n      }\n    }\n    /**\n     * Getter for the element offset.\n     *\n     * @returns {object} Object contains top and left offset of the element.\n     */\n\n  }, {\n    key: \"getOffset\",\n    value: function getOffset() {\n      return {\n        top: this._element.style.marginTop ? parseInt(this._element.style.marginTop, 10) : 0,\n        left: this._element.style.marginLeft ? parseInt(this._element.style.marginLeft, 10) : 0\n      };\n    }\n  }]);\n\n  return BaseUI;\n}();\n\nexport default BaseUI;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport BaseUI from \"./_base.mjs\";\nimport { addClass } from \"../../../helpers/dom/element.mjs\";\nvar CSS_CLASSNAME = 'ht__manualColumnMove--guideline';\n/**\n * @class GuidelineUI\n * @util\n */\n\nvar GuidelineUI = /*#__PURE__*/function (_BaseUI) {\n  _inherits(GuidelineUI, _BaseUI);\n\n  var _super = _createSuper(GuidelineUI);\n\n  function GuidelineUI() {\n    _classCallCheck(this, GuidelineUI);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(GuidelineUI, [{\n    key: \"build\",\n    value:\n    /**\n     * Custom className on build process.\n     */\n    function build() {\n      _get(_getPrototypeOf(GuidelineUI.prototype), \"build\", this).call(this);\n\n      addClass(this._element, CSS_CLASSNAME);\n    }\n  }]);\n\n  return GuidelineUI;\n}(BaseUI);\n\nexport default GuidelineUI;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { addClass, closest, hasClass, removeClass, outerHeight, isDetached } from \"../../helpers/dom/element.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { arrayEach } from \"../../helpers/array.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport { PhysicalIndexToValueMap as IndexToValueMap } from \"../../translations/index.mjs\"; // Developer note! Whenever you make a change in this file, make an analogous change in manualRowResize.js\n\nexport var PLUGIN_KEY = 'manualColumnResize';\nexport var PLUGIN_PRIORITY = 130;\nvar PERSISTENT_STATE_KEY = 'manualColumnWidths';\nvar privatePool = new WeakMap();\n/**\n * @plugin ManualColumnResize\n * @class ManualColumnResize\n *\n * @description\n * This plugin allows to change columns width. To make columns width persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * The plugin creates additional components to make resizing possibly using user interface:\n * - handle - the draggable element that sets the desired width of the column.\n * - guide - the helper guide that shows the desired width as a vertical guide.\n */\n\nexport var ManualColumnResize = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(ManualColumnResize, _BasePlugin);\n\n  var _super = _createSuper(ManualColumnResize);\n\n  function ManualColumnResize(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, ManualColumnResize);\n\n    _this = _super.call(this, hotInstance);\n    var rootDocument = _this.hot.rootDocument;\n    _this.currentTH = null;\n    _this.currentCol = null;\n    _this.selectedCols = [];\n    _this.currentWidth = null;\n    _this.newSize = null;\n    _this.startY = null;\n    _this.startWidth = null;\n    _this.startOffset = null;\n    _this.handle = rootDocument.createElement('DIV');\n    _this.guide = rootDocument.createElement('DIV');\n    _this.eventManager = new EventManager(_assertThisInitialized(_this));\n    _this.pressed = null;\n    _this.dblclick = 0;\n    _this.autoresizeTimeout = null;\n    /**\n     * PhysicalIndexToValueMap to keep and track widths for physical column indexes.\n     *\n     * @private\n     * @type {PhysicalIndexToValueMap}\n     */\n\n    _this.columnWidthsMap = void 0;\n    /**\n     * Private pool to save configuration from updateSettings.\n     */\n\n    privatePool.set(_assertThisInitialized(_this), {\n      config: void 0\n    });\n    addClass(_this.handle, 'manualColumnResizer');\n    addClass(_this.guide, 'manualColumnResizerGuide');\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ManualColumnResize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(ManualColumnResize, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.columnWidthsMap = new IndexToValueMap();\n      this.columnWidthsMap.addLocalHook('init', function () {\n        return _this2.onMapInit();\n      });\n      this.hot.columnIndexMapper.registerMap(this.pluginName, this.columnWidthsMap);\n      this.addHook('modifyColWidth', function (width, col) {\n        return _this2.onModifyColWidth(width, col);\n      });\n      this.addHook('beforeStretchingColumnWidth', function (stretchedWidth, column) {\n        return _this2.onBeforeStretchingColumnWidth(stretchedWidth, column);\n      });\n      this.addHook('beforeColumnResize', function (newSize, column, isDoubleClick) {\n        return _this2.onBeforeColumnResize(newSize, column, isDoubleClick);\n      });\n      this.bindEvents();\n\n      _get(_getPrototypeOf(ManualColumnResize.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(_getPrototypeOf(ManualColumnResize.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      var priv = privatePool.get(this);\n      priv.config = this.columnWidthsMap.getValues();\n      this.hot.columnIndexMapper.unregisterMap(this.pluginName);\n\n      _get(_getPrototypeOf(ManualColumnResize.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Saves the current sizes using the persistentState plugin (the {@link Options#persistentState} option has to be enabled).\n     *\n     * @fires Hooks#persistentStateSave\n     */\n\n  }, {\n    key: \"saveManualColumnWidths\",\n    value: function saveManualColumnWidths() {\n      this.hot.runHooks('persistentStateSave', PERSISTENT_STATE_KEY, this.columnWidthsMap.getValues());\n    }\n    /**\n     * Loads the previously saved sizes using the persistentState plugin (the {@link Options#persistentState} option has to be enabled).\n     *\n     * @returns {Array}\n     * @fires Hooks#persistentStateLoad\n     */\n\n  }, {\n    key: \"loadManualColumnWidths\",\n    value: function loadManualColumnWidths() {\n      var storedState = {};\n      this.hot.runHooks('persistentStateLoad', PERSISTENT_STATE_KEY, storedState);\n      return storedState.value;\n    }\n    /**\n     * Sets the new width for specified column index.\n     *\n     * @param {number} column Visual column index.\n     * @param {number} width Column width (no less than 20px).\n     * @returns {number} Returns new width.\n     */\n\n  }, {\n    key: \"setManualSize\",\n    value: function setManualSize(column, width) {\n      var newWidth = Math.max(width, 20);\n      var physicalColumn = this.hot.toPhysicalColumn(column);\n      this.columnWidthsMap.setValueAtIndex(physicalColumn, newWidth);\n      return newWidth;\n    }\n    /**\n     * Clears the cache for the specified column index.\n     *\n     * @param {number} column Visual column index.\n     */\n\n  }, {\n    key: \"clearManualSize\",\n    value: function clearManualSize(column) {\n      var physicalColumn = this.hot.toPhysicalColumn(column);\n      this.columnWidthsMap.setValueAtIndex(physicalColumn, null);\n    }\n    /**\n     * Callback to call on map's `init` local hook.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMapInit\",\n    value: function onMapInit() {\n      var _this3 = this;\n\n      var priv = privatePool.get(this);\n      var initialSetting = this.hot.getSettings()[PLUGIN_KEY];\n      var loadedManualColumnWidths = this.loadManualColumnWidths();\n\n      if (typeof loadedManualColumnWidths !== 'undefined') {\n        this.hot.batchExecution(function () {\n          loadedManualColumnWidths.forEach(function (width, physicalIndex) {\n            _this3.columnWidthsMap.setValueAtIndex(physicalIndex, width);\n          });\n        }, true);\n      } else if (Array.isArray(initialSetting)) {\n        this.hot.batchExecution(function () {\n          initialSetting.forEach(function (width, physicalIndex) {\n            _this3.columnWidthsMap.setValueAtIndex(physicalIndex, width);\n          });\n        }, true);\n        priv.config = initialSetting;\n      } else if (initialSetting === true && Array.isArray(priv.config)) {\n        this.hot.batchExecution(function () {\n          priv.config.forEach(function (width, physicalIndex) {\n            _this3.columnWidthsMap.setValueAtIndex(physicalIndex, width);\n          });\n        }, true);\n      }\n    }\n    /**\n     * Set the resize handle position.\n     *\n     * @private\n     * @param {HTMLCellElement} TH TH HTML element.\n     */\n\n  }, {\n    key: \"setupHandlePosition\",\n    value: function setupHandlePosition(TH) {\n      var _this4 = this;\n\n      if (!TH.parentNode) {\n        return;\n      }\n\n      this.currentTH = TH;\n      var wt = this.hot.view.wt;\n      var cellCoords = wt.wtTable.getCoords(this.currentTH);\n      var col = cellCoords.col; // Ignore column headers.\n\n      if (col < 0) {\n        return;\n      }\n\n      var headerHeight = outerHeight(this.currentTH);\n      var box = this.currentTH.getBoundingClientRect(); // Read \"fixedColumnsLeft\" through the Walkontable as in that context, the fixed columns\n      // are modified (reduced by the number of hidden columns) by TableView module.\n\n      var fixedColumn = col < wt.getSetting('fixedColumnsLeft');\n      var relativeHeaderPosition;\n\n      if (fixedColumn) {\n        relativeHeaderPosition = wt.wtOverlays.topLeftCornerOverlay.getRelativeCellPosition(this.currentTH, cellCoords.row, cellCoords.col);\n      } // If the TH is not a child of the top-left overlay, recalculate using\n      // the top overlay - as this overlay contains the rest of the headers.\n\n\n      if (!relativeHeaderPosition) {\n        relativeHeaderPosition = wt.wtOverlays.topOverlay.getRelativeCellPosition(this.currentTH, cellCoords.row, cellCoords.col);\n      }\n\n      this.currentCol = this.hot.columnIndexMapper.getVisualFromRenderableIndex(col);\n      this.selectedCols = [];\n      var isFullColumnSelected = this.hot.selection.isSelectedByCorner() || this.hot.selection.isSelectedByColumnHeader();\n\n      if (this.hot.selection.isSelected() && isFullColumnSelected) {\n        var selectionRanges = this.hot.getSelectedRange();\n        arrayEach(selectionRanges, function (selectionRange) {\n          var fromColumn = selectionRange.getTopLeftCorner().col;\n          var toColumn = selectionRange.getBottomRightCorner().col; // Add every selected column for resize action.\n\n          rangeEach(fromColumn, toColumn, function (columnIndex) {\n            if (!_this4.selectedCols.includes(columnIndex)) {\n              _this4.selectedCols.push(columnIndex);\n            }\n          });\n        });\n      } // Resizing element beyond the current selection (also when there is no selection).\n\n\n      if (!this.selectedCols.includes(this.currentCol)) {\n        this.selectedCols = [this.currentCol];\n      }\n\n      this.startOffset = relativeHeaderPosition.left - 6;\n      this.startWidth = parseInt(box.width, 10);\n      this.handle.style.top = \"\".concat(relativeHeaderPosition.top, \"px\");\n      this.handle.style.left = \"\".concat(this.startOffset + this.startWidth, \"px\");\n      this.handle.style.height = \"\".concat(headerHeight, \"px\");\n      this.hot.rootElement.appendChild(this.handle);\n    }\n    /**\n     * Refresh the resize handle position.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"refreshHandlePosition\",\n    value: function refreshHandlePosition() {\n      this.handle.style.left = \"\".concat(this.startOffset + this.currentWidth, \"px\");\n    }\n    /**\n     * Sets the resize guide position.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"setupGuidePosition\",\n    value: function setupGuidePosition() {\n      var handleHeight = parseInt(outerHeight(this.handle), 10);\n      var handleBottomPosition = parseInt(this.handle.style.top, 10) + handleHeight;\n      var maximumVisibleElementHeight = parseInt(this.hot.view.maximumVisibleElementHeight(0), 10);\n      addClass(this.handle, 'active');\n      addClass(this.guide, 'active');\n      this.guide.style.top = \"\".concat(handleBottomPosition, \"px\");\n      this.guide.style.left = this.handle.style.left;\n      this.guide.style.height = \"\".concat(maximumVisibleElementHeight - handleHeight, \"px\");\n      this.hot.rootElement.appendChild(this.guide);\n    }\n    /**\n     * Refresh the resize guide position.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"refreshGuidePosition\",\n    value: function refreshGuidePosition() {\n      this.guide.style.left = this.handle.style.left;\n    }\n    /**\n     * Hides both the resize handle and resize guide.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"hideHandleAndGuide\",\n    value: function hideHandleAndGuide() {\n      removeClass(this.handle, 'active');\n      removeClass(this.guide, 'active');\n    }\n    /**\n     * Checks if provided element is considered a column header.\n     *\n     * @private\n     * @param {HTMLElement} element HTML element.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"checkIfColumnHeader\",\n    value: function checkIfColumnHeader(element) {\n      return !!closest(element, ['THEAD'], this.hot.rootElement);\n    }\n    /**\n     * Gets the TH element from the provided element.\n     *\n     * @private\n     * @param {HTMLElement} element HTML element.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"getClosestTHParent\",\n    value: function getClosestTHParent(element) {\n      if (element.tagName !== 'TABLE') {\n        if (element.tagName === 'TH') {\n          return element;\n        }\n\n        return this.getClosestTHParent(element.parentNode);\n      }\n\n      return null;\n    }\n    /**\n     * 'mouseover' event callback - set the handle position.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event.\n     */\n\n  }, {\n    key: \"onMouseOver\",\n    value: function onMouseOver(event) {\n      // Workaround for #6926 - if the `event.target` is temporarily detached, we can skip this callback and wait for\n      // the next `onmouseover`.\n      if (isDetached(event.target)) {\n        return;\n      }\n\n      if (this.checkIfColumnHeader(event.target)) {\n        var th = this.getClosestTHParent(event.target);\n\n        if (!th) {\n          return;\n        }\n\n        var colspan = th.getAttribute('colspan');\n\n        if (th && (colspan === null || colspan === '1')) {\n          if (!this.pressed) {\n            this.setupHandlePosition(th);\n          }\n        }\n      }\n    }\n    /**\n     * Auto-size row after doubleclick - callback.\n     *\n     * @private\n     * @fires Hooks#beforeColumnResize\n     * @fires Hooks#afterColumnResize\n     */\n\n  }, {\n    key: \"afterMouseDownTimeout\",\n    value: function afterMouseDownTimeout() {\n      var _this5 = this;\n\n      var render = function render() {\n        _this5.hot.forceFullRender = true;\n\n        _this5.hot.view.render(); // updates all\n\n\n        _this5.hot.view.adjustElementsSize(true);\n      };\n\n      var resize = function resize(column, forceRender) {\n        var hookNewSize = _this5.hot.runHooks('beforeColumnResize', _this5.newSize, column, true);\n\n        if (hookNewSize !== void 0) {\n          _this5.newSize = hookNewSize;\n        }\n\n        if (_this5.hot.getSettings().stretchH === 'all') {\n          _this5.clearManualSize(column);\n        } else {\n          _this5.setManualSize(column, _this5.newSize); // double click sets by auto row size plugin\n\n        }\n\n        _this5.saveManualColumnWidths();\n\n        _this5.hot.runHooks('afterColumnResize', _this5.newSize, column, true);\n\n        if (forceRender) {\n          render();\n        }\n      };\n\n      if (this.dblclick >= 2) {\n        var selectedColsLength = this.selectedCols.length;\n\n        if (selectedColsLength > 1) {\n          arrayEach(this.selectedCols, function (selectedCol) {\n            resize(selectedCol);\n          });\n          render();\n        } else {\n          arrayEach(this.selectedCols, function (selectedCol) {\n            resize(selectedCol, true);\n          });\n        }\n      }\n\n      this.dblclick = 0;\n      this.autoresizeTimeout = null;\n    }\n    /**\n     * 'mousedown' event callback.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event.\n     */\n\n  }, {\n    key: \"onMouseDown\",\n    value: function onMouseDown(event) {\n      var _this6 = this;\n\n      if (hasClass(event.target, 'manualColumnResizer')) {\n        this.setupHandlePosition(this.currentTH);\n        this.setupGuidePosition();\n        this.pressed = true;\n\n        if (this.autoresizeTimeout === null) {\n          this.autoresizeTimeout = setTimeout(function () {\n            return _this6.afterMouseDownTimeout();\n          }, 500);\n\n          this.hot._registerTimeout(this.autoresizeTimeout);\n        }\n\n        this.dblclick += 1;\n        this.startX = event.pageX;\n        this.newSize = this.startWidth;\n      }\n    }\n    /**\n     * 'mousemove' event callback - refresh the handle and guide positions, cache the new column width.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event.\n     */\n\n  }, {\n    key: \"onMouseMove\",\n    value: function onMouseMove(event) {\n      var _this7 = this;\n\n      if (this.pressed) {\n        this.currentWidth = this.startWidth + (event.pageX - this.startX);\n        arrayEach(this.selectedCols, function (selectedCol) {\n          _this7.newSize = _this7.setManualSize(selectedCol, _this7.currentWidth);\n        });\n        this.refreshHandlePosition();\n        this.refreshGuidePosition();\n      }\n    }\n    /**\n     * 'mouseup' event callback - apply the column resizing.\n     *\n     * @private\n     *\n     * @fires Hooks#beforeColumnResize\n     * @fires Hooks#afterColumnResize\n     */\n\n  }, {\n    key: \"onMouseUp\",\n    value: function onMouseUp() {\n      var _this8 = this;\n\n      var render = function render() {\n        _this8.hot.forceFullRender = true;\n\n        _this8.hot.view.render(); // updates all\n\n\n        _this8.hot.view.adjustElementsSize(true);\n      };\n\n      var resize = function resize(column, forceRender) {\n        _this8.hot.runHooks('beforeColumnResize', _this8.newSize, column, false);\n\n        if (forceRender) {\n          render();\n        }\n\n        _this8.saveManualColumnWidths();\n\n        _this8.hot.runHooks('afterColumnResize', _this8.newSize, column, false);\n      };\n\n      if (this.pressed) {\n        this.hideHandleAndGuide();\n        this.pressed = false;\n\n        if (this.newSize !== this.startWidth) {\n          var selectedColsLength = this.selectedCols.length;\n\n          if (selectedColsLength > 1) {\n            arrayEach(this.selectedCols, function (selectedCol) {\n              resize(selectedCol);\n            });\n            render();\n          } else {\n            arrayEach(this.selectedCols, function (selectedCol) {\n              resize(selectedCol, true);\n            });\n          }\n        }\n\n        this.setupHandlePosition(this.currentTH);\n      }\n    }\n    /**\n     * Binds the mouse events.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"bindEvents\",\n    value: function bindEvents() {\n      var _this9 = this;\n\n      var _this$hot = this.hot,\n          rootWindow = _this$hot.rootWindow,\n          rootElement = _this$hot.rootElement;\n      this.eventManager.addEventListener(rootElement, 'mouseover', function (e) {\n        return _this9.onMouseOver(e);\n      });\n      this.eventManager.addEventListener(rootElement, 'mousedown', function (e) {\n        return _this9.onMouseDown(e);\n      });\n      this.eventManager.addEventListener(rootWindow, 'mousemove', function (e) {\n        return _this9.onMouseMove(e);\n      });\n      this.eventManager.addEventListener(rootWindow, 'mouseup', function () {\n        return _this9.onMouseUp();\n      });\n    }\n    /**\n     * Modifies the provided column width, based on the plugin settings.\n     *\n     * @private\n     * @param {number} width Column width.\n     * @param {number} column Visual column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"onModifyColWidth\",\n    value: function onModifyColWidth(width, column) {\n      var newWidth = width;\n\n      if (this.enabled) {\n        var physicalColumn = this.hot.toPhysicalColumn(column);\n        var columnWidth = this.columnWidthsMap.getValueAtIndex(physicalColumn);\n\n        if (this.hot.getSettings()[PLUGIN_KEY] && columnWidth) {\n          newWidth = columnWidth;\n        }\n      }\n\n      return newWidth;\n    }\n    /**\n     * Modifies the provided column stretched width. This hook decides if specified column should be stretched or not.\n     *\n     * @private\n     * @param {number} stretchedWidth Stretched width.\n     * @param {number} column Visual column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"onBeforeStretchingColumnWidth\",\n    value: function onBeforeStretchingColumnWidth(stretchedWidth, column) {\n      var width = this.columnWidthsMap.getValueAtIndex(column);\n\n      if (width === null) {\n        width = stretchedWidth;\n      }\n\n      return width;\n    }\n    /**\n     * `beforeColumnResize` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onBeforeColumnResize\",\n    value: function onBeforeColumnResize() {\n      // clear the header height cache information\n      this.hot.view.wt.wtViewport.resetHasOversizedColumnHeadersMarked();\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _get(_getPrototypeOf(ManualColumnResize.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return ManualColumnResize;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nimport { arrayReduce } from \"../../helpers/array.mjs\";\nimport { addClass, removeClass, offset } from \"../../helpers/dom/element.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport BacklightUI from \"./ui/backlight.mjs\";\nimport GuidelineUI from \"./ui/guideline.mjs\";\nHooks.getSingleton().register('beforeRowMove');\nHooks.getSingleton().register('afterRowMove');\nexport var PLUGIN_KEY = 'manualRowMove';\nexport var PLUGIN_PRIORITY = 140;\nvar privatePool = new WeakMap();\nvar CSS_PLUGIN = 'ht__manualRowMove';\nvar CSS_SHOW_UI = 'show-ui';\nvar CSS_ON_MOVING = 'on-moving--rows';\nvar CSS_AFTER_SELECTION = 'after-selection--rows';\n/**\n * @plugin ManualRowMove\n * @class ManualRowMove\n *\n * @description\n * This plugin allows to change rows order. To make rows order persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * API:\n * - `moveRow` - move single row to the new position.\n * - `moveRows` - move many rows (as an array of indexes) to the new position.\n * - `dragRow` - drag single row to the new position.\n * - `dragRows` - drag many rows (as an array of indexes) to the new position.\n *\n * [Documentation](@/guides/rows/row-moving.md) explain differences between drag and move actions. Please keep in mind that if you want apply visual changes,\n * you have to call manually the `render` method on the instance of Handsontable.\n *\n * The plugin creates additional components to make moving possibly using user interface:\n * - backlight - highlight of selected rows.\n * - guideline - line which shows where rows has been moved.\n *\n * @class ManualRowMove\n * @plugin ManualRowMove\n */\n\nexport var ManualRowMove = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(ManualRowMove, _BasePlugin);\n\n  var _super = _createSuper(ManualRowMove);\n\n  function ManualRowMove(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, ManualRowMove);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Set up WeakMap of plugin to sharing private parameters;.\n     */\n\n    privatePool.set(_assertThisInitialized(_this), {\n      rowsToMove: [],\n      pressed: void 0,\n      target: {\n        eventPageY: void 0,\n        coords: void 0,\n        TD: void 0,\n        row: void 0\n      },\n      cachedDropIndex: void 0\n    });\n    /**\n     * Event Manager object.\n     *\n     * @private\n     * @type {object}\n     */\n\n    _this.eventManager = new EventManager(_assertThisInitialized(_this));\n    /**\n     * Backlight UI object.\n     *\n     * @private\n     * @type {object}\n     */\n\n    _this.backlight = new BacklightUI(hotInstance);\n    /**\n     * Guideline UI object.\n     *\n     * @private\n     * @type {object}\n     */\n\n    _this.guideline = new GuidelineUI(hotInstance);\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ManualRowMove#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(ManualRowMove, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.addHook('beforeOnCellMouseDown', function () {\n        return _this2.onBeforeOnCellMouseDown.apply(_this2, arguments);\n      });\n      this.addHook('beforeOnCellMouseOver', function () {\n        return _this2.onBeforeOnCellMouseOver.apply(_this2, arguments);\n      });\n      this.addHook('afterScrollHorizontally', function () {\n        return _this2.onAfterScrollHorizontally();\n      });\n      this.addHook('afterLoadData', function () {\n        return _this2.onAfterLoadData.apply(_this2, arguments);\n      });\n      this.buildPluginUI();\n      this.registerEvents(); // TODO: move adding plugin classname to BasePlugin.\n\n      addClass(this.hot.rootElement, CSS_PLUGIN);\n\n      _get(_getPrototypeOf(ManualRowMove.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n      this.moveBySettingsOrLoad();\n\n      _get(_getPrototypeOf(ManualRowMove.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      removeClass(this.hot.rootElement, CSS_PLUGIN);\n      this.unregisterEvents();\n      this.backlight.destroy();\n      this.guideline.destroy();\n\n      _get(_getPrototypeOf(ManualRowMove.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Moves a single row.\n     *\n     * @param {number} row Visual row index to be moved.\n     * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n     * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n     * @fires Hooks#beforeRowMove\n     * @fires Hooks#afterRowMove\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"moveRow\",\n    value: function moveRow(row, finalIndex) {\n      return this.moveRows([row], finalIndex);\n    }\n    /**\n     * Moves a multiple rows.\n     *\n     * @param {Array} rows Array of visual row indexes to be moved.\n     * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n     * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n     * @fires Hooks#beforeRowMove\n     * @fires Hooks#afterRowMove\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"moveRows\",\n    value: function moveRows(rows, finalIndex) {\n      var priv = privatePool.get(this);\n      var dropIndex = priv.cachedDropIndex;\n      var movePossible = this.isMovePossible(rows, finalIndex);\n      var beforeMoveHook = this.hot.runHooks('beforeRowMove', rows, finalIndex, dropIndex, movePossible);\n      priv.cachedDropIndex = void 0;\n\n      if (beforeMoveHook === false) {\n        return;\n      }\n\n      if (movePossible) {\n        this.hot.rowIndexMapper.moveIndexes(rows, finalIndex);\n      }\n\n      var movePerformed = movePossible && this.isRowOrderChanged(rows, finalIndex);\n      this.hot.runHooks('afterRowMove', rows, finalIndex, dropIndex, movePossible, movePerformed);\n      return movePerformed;\n    }\n    /**\n     * Drag a single row to drop index position.\n     *\n     * @param {number} row Visual row index to be dragged.\n     * @param {number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we are going to drop the moved elements.\n     * To check visualization of drop index please take a look at [documentation](@/guides/rows/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n     * @fires Hooks#beforeRowMove\n     * @fires Hooks#afterRowMove\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"dragRow\",\n    value: function dragRow(row, dropIndex) {\n      return this.dragRows([row], dropIndex);\n    }\n    /**\n     * Drag multiple rows to drop index position.\n     *\n     * @param {Array} rows Array of visual row indexes to be dragged.\n     * @param {number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we are going to drop the moved elements.\n     * To check visualization of drop index please take a look at [documentation](@/guides/rows/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n     * @fires Hooks#beforeRowMove\n     * @fires Hooks#afterRowMove\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"dragRows\",\n    value: function dragRows(rows, dropIndex) {\n      var finalIndex = this.countFinalIndex(rows, dropIndex);\n      var priv = privatePool.get(this);\n      priv.cachedDropIndex = dropIndex;\n      return this.moveRows(rows, finalIndex);\n    }\n    /**\n     * Indicates if it's possible to move rows to the desired position. Some of the actions aren't possible, i.e. You can\u2019t move more than one element to the last position.\n     *\n     * @param {Array} movedRows Array of visual row indexes to be moved.\n     * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n     * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isMovePossible\",\n    value: function isMovePossible(movedRows, finalIndex) {\n      var length = this.hot.rowIndexMapper.getNotTrimmedIndexesLength(); // An attempt to transfer more rows to start destination than is possible (only when moving from the top to the bottom).\n\n      var tooHighDestinationIndex = movedRows.length + finalIndex > length;\n      var tooLowDestinationIndex = finalIndex < 0;\n      var tooLowMovedRowIndex = movedRows.some(function (movedRow) {\n        return movedRow < 0;\n      });\n      var tooHighMovedRowIndex = movedRows.some(function (movedRow) {\n        return movedRow >= length;\n      });\n\n      if (tooHighDestinationIndex || tooLowDestinationIndex || tooLowMovedRowIndex || tooHighMovedRowIndex) {\n        return false;\n      }\n\n      return true;\n    }\n    /**\n     * Indicates if order of rows was changed.\n     *\n     * @private\n     * @param {Array} movedRows Array of visual row indexes to be moved.\n     * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n     * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isRowOrderChanged\",\n    value: function isRowOrderChanged(movedRows, finalIndex) {\n      return movedRows.some(function (row, nrOfMovedElement) {\n        return row - nrOfMovedElement !== finalIndex;\n      });\n    }\n    /**\n     * Count the final row index from the drop index.\n     *\n     * @private\n     * @param {Array} movedRows Array of visual row indexes to be moved.\n     * @param {number} dropIndex Visual row index, being a drop index for the moved rows.\n     * @returns {number} Visual row index, being a start index for the moved rows.\n     */\n\n  }, {\n    key: \"countFinalIndex\",\n    value: function countFinalIndex(movedRows, dropIndex) {\n      var numberOfRowsLowerThanDropIndex = arrayReduce(movedRows, function (numberOfRows, currentRowIndex) {\n        if (currentRowIndex < dropIndex) {\n          numberOfRows += 1;\n        }\n\n        return numberOfRows;\n      }, 0);\n      return dropIndex - numberOfRowsLowerThanDropIndex;\n    }\n    /**\n     * Gets the sum of the heights of rows in the provided range.\n     *\n     * @private\n     * @param {number} fromRow Visual row index.\n     * @param {number} toRow Visual row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getRowsHeight\",\n    value: function getRowsHeight(fromRow, toRow) {\n      var rowMapper = this.hot.rowIndexMapper;\n      var rowsHeight = 0;\n\n      for (var visualRowIndex = fromRow; visualRowIndex <= toRow; visualRowIndex++) {\n        var renderableIndex = rowMapper.getRenderableFromVisualIndex(visualRowIndex);\n\n        if (renderableIndex !== null) {\n          rowsHeight += this.hot.view.wt.wtTable.getRowHeight(renderableIndex) || 23;\n        }\n      }\n\n      return rowsHeight;\n    }\n    /**\n     * Loads initial settings when persistent state is saved or when plugin was initialized as an array.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"moveBySettingsOrLoad\",\n    value: function moveBySettingsOrLoad() {\n      var pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n      if (Array.isArray(pluginSettings)) {\n        this.moveRows(pluginSettings, 0);\n      } else if (pluginSettings !== void 0) {\n        var persistentState = this.persistentStateLoad();\n\n        if (persistentState.length) {\n          this.moveRows(persistentState, 0);\n        }\n      }\n    }\n    /**\n     * Checks if the provided row is in the fixedRowsTop section.\n     *\n     * @private\n     * @param {number} row Visual row index to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isFixedRowTop\",\n    value: function isFixedRowTop(row) {\n      return row < this.hot.getSettings().fixedRowsTop;\n    }\n    /**\n     * Checks if the provided row is in the fixedRowsBottom section.\n     *\n     * @private\n     * @param {number} row Visual row index to check.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isFixedRowBottom\",\n    value: function isFixedRowBottom(row) {\n      return row > this.hot.getSettings().fixedRowsBottom;\n    }\n    /**\n     * Saves the manual row positions to the persistent state (the {@link Options#persistentState} option has to be enabled).\n     *\n     * @private\n     * @fires Hooks#persistentStateSave\n     */\n\n  }, {\n    key: \"persistentStateSave\",\n    value: function persistentStateSave() {\n      // The `PersistentState` plugin should be refactored.\n      this.hot.runHooks('persistentStateSave', 'manualRowMove', this.hot.rowIndexMapper.getIndexesSequence());\n    }\n    /**\n     * Loads the manual row positions from the persistent state (the {@link Options#persistentState} option has to be enabled).\n     *\n     * @private\n     * @fires Hooks#persistentStateLoad\n     * @returns {Array} Stored state.\n     */\n\n  }, {\n    key: \"persistentStateLoad\",\n    value: function persistentStateLoad() {\n      var storedState = {};\n      this.hot.runHooks('persistentStateLoad', 'manualRowMove', storedState);\n      return storedState.value ? storedState.value : [];\n    }\n    /**\n     * Prepares an array of indexes based on actual selection.\n     *\n     * @private\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"prepareRowsToMoving\",\n    value: function prepareRowsToMoving() {\n      var selection = this.hot.getSelectedRangeLast();\n      var selectedRows = [];\n\n      if (!selection) {\n        return selectedRows;\n      }\n\n      var from = selection.from,\n          to = selection.to;\n      var start = Math.min(from.row, to.row);\n      var end = Math.max(from.row, to.row);\n      rangeEach(start, end, function (i) {\n        selectedRows.push(i);\n      });\n      return selectedRows;\n    }\n    /**\n     * Update the UI visual position.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"refreshPositions\",\n    value: function refreshPositions() {\n      var priv = privatePool.get(this);\n      var coords = priv.target.coords;\n      var firstVisible = this.hot.view.wt.wtTable.getFirstVisibleRow();\n      var lastVisible = this.hot.view.wt.wtTable.getLastVisibleRow();\n      var fixedRows = this.hot.getSettings().fixedRowsTop;\n      var countRows = this.hot.countRows();\n\n      if (coords.row < fixedRows && firstVisible > 0) {\n        this.hot.scrollViewportTo(firstVisible - 1);\n      }\n\n      if (coords.row >= lastVisible && lastVisible < countRows) {\n        this.hot.scrollViewportTo(lastVisible + 1, undefined, true);\n      }\n\n      var wtTable = this.hot.view.wt.wtTable;\n      var TD = priv.target.TD;\n      var rootElementOffset = offset(this.hot.rootElement);\n      var tdOffsetTop = this.hot.view.THEAD.offsetHeight + this.getRowsHeight(0, coords.row - 1);\n      var mouseOffsetTop = priv.target.eventPageY - rootElementOffset.top + wtTable.holder.scrollTop;\n      var hiderHeight = wtTable.hider.offsetHeight;\n      var tbodyOffsetTop = wtTable.TBODY.offsetTop;\n      var backlightElemMarginTop = this.backlight.getOffset().top;\n      var backlightElemHeight = this.backlight.getSize().height;\n\n      if (this.isFixedRowTop(coords.row)) {\n        tdOffsetTop += wtTable.holder.scrollTop;\n      } // todo: fixedRowsBottom\n      // if (this.isFixedRowBottom(coords.row)) {\n      //\n      // }\n\n\n      if (coords.row < 0) {\n        // if hover on colHeader\n        priv.target.row = firstVisible > 0 ? firstVisible - 1 : firstVisible;\n      } else if (TD.offsetHeight / 2 + tdOffsetTop <= mouseOffsetTop) {\n        // if hover on lower part of TD\n        priv.target.row = coords.row + 1; // unfortunately first row is bigger than rest\n\n        tdOffsetTop += coords.row === 0 ? TD.offsetHeight - 1 : TD.offsetHeight;\n      } else {\n        // elsewhere on table\n        priv.target.row = coords.row;\n      }\n\n      var backlightTop = mouseOffsetTop;\n      var guidelineTop = tdOffsetTop;\n\n      if (mouseOffsetTop + backlightElemHeight + backlightElemMarginTop >= hiderHeight) {\n        // prevent display backlight below table\n        backlightTop = hiderHeight - backlightElemHeight - backlightElemMarginTop;\n      } else if (mouseOffsetTop + backlightElemMarginTop < tbodyOffsetTop) {\n        // prevent display above below table\n        backlightTop = tbodyOffsetTop + Math.abs(backlightElemMarginTop);\n      }\n\n      if (tdOffsetTop >= hiderHeight - 1) {\n        // prevent display guideline below table\n        guidelineTop = hiderHeight - 1;\n      }\n\n      var topOverlayHeight = 0;\n\n      if (this.hot.view.wt.wtOverlays.topOverlay) {\n        topOverlayHeight = this.hot.view.wt.wtOverlays.topOverlay.clone.wtTable.TABLE.offsetHeight;\n      }\n\n      if (coords.row >= fixedRows && guidelineTop - wtTable.holder.scrollTop < topOverlayHeight) {\n        this.hot.scrollViewportTo(coords.row);\n      }\n\n      this.backlight.setPosition(backlightTop);\n      this.guideline.setPosition(guidelineTop);\n    }\n    /**\n     * Binds the events used by the plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"registerEvents\",\n    value: function registerEvents() {\n      var _this3 = this;\n\n      var documentElement = this.hot.rootDocument.documentElement;\n      this.eventManager.addEventListener(documentElement, 'mousemove', function (event) {\n        return _this3.onMouseMove(event);\n      });\n      this.eventManager.addEventListener(documentElement, 'mouseup', function () {\n        return _this3.onMouseUp();\n      });\n    }\n    /**\n     * Unbinds the events used by the plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"unregisterEvents\",\n    value: function unregisterEvents() {\n      this.eventManager.clear();\n    }\n    /**\n     * Change the behavior of selection / dragging.\n     *\n     * @private\n     * @param {MouseEvent} event `mousedown` event properties.\n     * @param {CellCoords} coords Visual cell coordinates where was fired event.\n     * @param {HTMLElement} TD Cell represented as HTMLElement.\n     * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n     *                            a boolean value that allows or disallows changing the selection for that particular area.\n     */\n\n  }, {\n    key: \"onBeforeOnCellMouseDown\",\n    value: function onBeforeOnCellMouseDown(event, coords, TD, controller) {\n      var _this$hot$view$wt = this.hot.view.wt,\n          wtTable = _this$hot$view$wt.wtTable,\n          wtViewport = _this$hot$view$wt.wtViewport;\n      var isHeaderSelection = this.hot.selection.isSelectedByRowHeader();\n      var selection = this.hot.getSelectedRangeLast();\n      var priv = privatePool.get(this);\n\n      if (!selection || !isHeaderSelection || priv.pressed || event.button !== 0) {\n        priv.pressed = false;\n        priv.rowsToMove.length = 0;\n        removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI]);\n        return;\n      }\n\n      var guidelineIsNotReady = this.guideline.isBuilt() && !this.guideline.isAppended();\n      var backlightIsNotReady = this.backlight.isBuilt() && !this.backlight.isAppended();\n\n      if (guidelineIsNotReady && backlightIsNotReady) {\n        this.guideline.appendTo(wtTable.hider);\n        this.backlight.appendTo(wtTable.hider);\n      }\n\n      var from = selection.from,\n          to = selection.to;\n      var start = Math.min(from.row, to.row);\n      var end = Math.max(from.row, to.row);\n\n      if (coords.col < 0 && coords.row >= start && coords.row <= end) {\n        controller.row = true;\n        priv.pressed = true;\n        priv.target.eventPageY = event.pageY;\n        priv.target.coords = coords;\n        priv.target.TD = TD;\n        priv.rowsToMove = this.prepareRowsToMoving();\n        var leftPos = wtTable.holder.scrollLeft + wtViewport.getRowHeaderWidth();\n        this.backlight.setPosition(null, leftPos);\n        this.backlight.setSize(wtTable.hider.offsetWidth - leftPos, this.getRowsHeight(start, end));\n        this.backlight.setOffset((this.getRowsHeight(start, coords.row - 1) + event.offsetY) * -1, null);\n        addClass(this.hot.rootElement, CSS_ON_MOVING);\n        this.refreshPositions();\n      } else {\n        removeClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n        priv.pressed = false;\n        priv.rowsToMove.length = 0;\n      }\n    }\n    /**\n     * 'mouseMove' event callback. Fired when pointer move on document.documentElement.\n     *\n     * @private\n     * @param {MouseEvent} event `mousemove` event properties.\n     */\n\n  }, {\n    key: \"onMouseMove\",\n    value: function onMouseMove(event) {\n      var priv = privatePool.get(this);\n\n      if (!priv.pressed) {\n        return;\n      } // callback for browser which doesn't supports CSS pointer-event: none\n\n\n      if (event.target === this.backlight.element) {\n        var height = this.backlight.getSize().height;\n        this.backlight.setSize(null, 0);\n        setTimeout(function () {\n          this.backlight.setPosition(null, height);\n        });\n      }\n\n      priv.target.eventPageY = event.pageY;\n      this.refreshPositions();\n    }\n    /**\n     * 'beforeOnCellMouseOver' hook callback. Fired when pointer was over cell.\n     *\n     * @private\n     * @param {MouseEvent} event `mouseover` event properties.\n     * @param {CellCoords} coords Visual cell coordinates where was fired event.\n     * @param {HTMLElement} TD Cell represented as HTMLElement.\n     * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n     *                            a boolean value that allows or disallows changing the selection for that particular area.\n     */\n\n  }, {\n    key: \"onBeforeOnCellMouseOver\",\n    value: function onBeforeOnCellMouseOver(event, coords, TD, controller) {\n      var selectedRange = this.hot.getSelectedRangeLast();\n      var priv = privatePool.get(this);\n\n      if (!selectedRange || !priv.pressed) {\n        return;\n      }\n\n      if (priv.rowsToMove.indexOf(coords.row) > -1) {\n        removeClass(this.hot.rootElement, CSS_SHOW_UI);\n      } else {\n        addClass(this.hot.rootElement, CSS_SHOW_UI);\n      }\n\n      controller.row = true;\n      controller.column = true;\n      controller.cell = true;\n      priv.target.coords = coords;\n      priv.target.TD = TD;\n    }\n    /**\n     * `onMouseUp` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMouseUp\",\n    value: function onMouseUp() {\n      var priv = privatePool.get(this);\n      var target = priv.target.row;\n      var rowsLen = priv.rowsToMove.length;\n      priv.pressed = false;\n      priv.backlightHeight = 0;\n      removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI, CSS_AFTER_SELECTION]);\n\n      if (this.hot.selection.isSelectedByRowHeader()) {\n        addClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n      }\n\n      if (rowsLen < 1 || target === void 0) {\n        return;\n      }\n\n      var firstMovedVisualRow = priv.rowsToMove[0];\n      var firstMovedPhysicalRow = this.hot.toPhysicalRow(firstMovedVisualRow);\n      var movePerformed = this.dragRows(priv.rowsToMove, target);\n      priv.rowsToMove.length = 0;\n\n      if (movePerformed === true) {\n        this.persistentStateSave();\n        this.hot.render();\n        this.hot.view.adjustElementsSize(true);\n        var selectionStart = this.hot.toVisualRow(firstMovedPhysicalRow);\n        var selectionEnd = selectionStart + rowsLen - 1;\n        this.hot.selectRows(selectionStart, selectionEnd);\n      }\n    }\n    /**\n     * `afterScrollHorizontally` hook callback. Fired the table was scrolled horizontally.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterScrollHorizontally\",\n    value: function onAfterScrollHorizontally() {\n      var wtTable = this.hot.view.wt.wtTable;\n      var headerWidth = this.hot.view.wt.wtViewport.getRowHeaderWidth();\n      var scrollLeft = wtTable.holder.scrollLeft;\n      var posLeft = headerWidth + scrollLeft;\n      this.backlight.setPosition(null, posLeft);\n      this.backlight.setSize(wtTable.hider.offsetWidth - posLeft);\n    }\n    /**\n     * Builds the plugin's UI.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"buildPluginUI\",\n    value: function buildPluginUI() {\n      this.backlight.build();\n      this.guideline.build();\n    }\n    /**\n     * Callback for the `afterLoadData` hook.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterLoadData\",\n    value: function onAfterLoadData() {\n      this.moveBySettingsOrLoad();\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.backlight.destroy();\n      this.guideline.destroy();\n\n      _get(_getPrototypeOf(ManualRowMove.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return ManualRowMove;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport BaseUI from \"./_base.mjs\";\nimport { addClass } from \"../../../helpers/dom/element.mjs\";\nvar CSS_CLASSNAME = 'ht__manualRowMove--backlight';\n/**\n * @private\n * @class BacklightUI\n */\n\nvar BacklightUI = /*#__PURE__*/function (_BaseUI) {\n  _inherits(BacklightUI, _BaseUI);\n\n  var _super = _createSuper(BacklightUI);\n\n  function BacklightUI() {\n    _classCallCheck(this, BacklightUI);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(BacklightUI, [{\n    key: \"build\",\n    value:\n    /**\n     * Custom className on build process.\n     */\n    function build() {\n      _get(_getPrototypeOf(BacklightUI.prototype), \"build\", this).call(this);\n\n      addClass(this._element, CSS_CLASSNAME);\n    }\n  }]);\n\n  return BacklightUI;\n}(BaseUI);\n\nexport default BacklightUI;", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nvar STATE_INITIALIZED = 0;\nvar STATE_BUILT = 1;\nvar STATE_APPENDED = 2;\nvar UNIT = 'px';\n/**\n * @private\n */\n\nvar BaseUI = /*#__PURE__*/function () {\n  function BaseUI(hotInstance) {\n    _classCallCheck(this, BaseUI);\n\n    /**\n     * Instance of Handsontable.\n     *\n     * @type {Core}\n     */\n    this.hot = hotInstance;\n    /**\n     * DOM element representing the ui element.\n     *\n     * @type {HTMLElement}\n     * @private\n     */\n\n    this._element = null;\n    /**\n     * Flag which determines build state of element.\n     *\n     * @type {number}\n     */\n\n    this.state = STATE_INITIALIZED;\n  }\n  /**\n   * Add created UI elements to table.\n   *\n   * @param {HTMLElement} wrapper Element which are parent for our UI element.\n   */\n\n\n  _createClass(BaseUI, [{\n    key: \"appendTo\",\n    value: function appendTo(wrapper) {\n      wrapper.appendChild(this._element);\n      this.state = STATE_APPENDED;\n    }\n    /**\n     * Method for create UI element. Only create, without append to table.\n     */\n\n  }, {\n    key: \"build\",\n    value: function build() {\n      if (this.state !== STATE_INITIALIZED) {\n        return;\n      }\n\n      this._element = this.hot.rootDocument.createElement('div');\n      this.state = STATE_BUILT;\n    }\n    /**\n     * Method for remove UI element.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.isAppended()) {\n        this._element.parentElement.removeChild(this._element);\n      }\n\n      this._element = null;\n      this.state = STATE_INITIALIZED;\n    }\n    /**\n     * Check if UI element are appended.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isAppended\",\n    value: function isAppended() {\n      return this.state === STATE_APPENDED;\n    }\n    /**\n     * Check if UI element are built.\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isBuilt\",\n    value: function isBuilt() {\n      return this.state >= STATE_BUILT;\n    }\n    /**\n     * Setter for position.\n     *\n     * @param {number} top New top position of the element.\n     * @param {number} left New left position of the element.\n     */\n\n  }, {\n    key: \"setPosition\",\n    value: function setPosition(top, left) {\n      if (top !== void 0) {\n        this._element.style.top = top + UNIT;\n      }\n\n      if (left !== void 0) {\n        this._element.style.left = left + UNIT;\n      }\n    }\n    /**\n     * Getter for the element position.\n     *\n     * @returns {object} Object contains left and top position of the element.\n     */\n\n  }, {\n    key: \"getPosition\",\n    value: function getPosition() {\n      return {\n        top: this._element.style.top ? parseInt(this._element.style.top, 10) : 0,\n        left: this._element.style.left ? parseInt(this._element.style.left, 10) : 0\n      };\n    }\n    /**\n     * Setter for the element size.\n     *\n     * @param {number} width New width of the element.\n     * @param {number} height New height of the element.\n     */\n\n  }, {\n    key: \"setSize\",\n    value: function setSize(width, height) {\n      if (width) {\n        this._element.style.width = width + UNIT;\n      }\n\n      if (height) {\n        this._element.style.height = height + UNIT;\n      }\n    }\n    /**\n     * Getter for the element position.\n     *\n     * @returns {object} Object contains height and width of the element.\n     */\n\n  }, {\n    key: \"getSize\",\n    value: function getSize() {\n      return {\n        width: this._element.style.width ? parseInt(this._element.style.width, 10) : 0,\n        height: this._element.style.height ? parseInt(this._element.style.height, 10) : 0\n      };\n    }\n    /**\n     * Setter for the element offset. Offset means marginTop and marginLeft of the element.\n     *\n     * @param {number} top New margin top of the element.\n     * @param {number} left New margin left of the element.\n     */\n\n  }, {\n    key: \"setOffset\",\n    value: function setOffset(top, left) {\n      if (top) {\n        this._element.style.marginTop = top + UNIT;\n      }\n\n      if (left) {\n        this._element.style.marginLeft = left + UNIT;\n      }\n    }\n    /**\n     * Getter for the element offset.\n     *\n     * @returns {object} Object contains top and left offset of the element.\n     */\n\n  }, {\n    key: \"getOffset\",\n    value: function getOffset() {\n      return {\n        top: this._element.style.marginTop ? parseInt(this._element.style.marginTop, 10) : 0,\n        left: this._element.style.marginLeft ? parseInt(this._element.style.marginLeft, 10) : 0\n      };\n    }\n  }]);\n\n  return BaseUI;\n}();\n\nexport default BaseUI;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport BaseUI from \"./_base.mjs\";\nimport { addClass } from \"../../../helpers/dom/element.mjs\";\nvar CSS_CLASSNAME = 'ht__manualRowMove--guideline';\n/**\n * @private\n * @class GuidelineUI\n */\n\nvar GuidelineUI = /*#__PURE__*/function (_BaseUI) {\n  _inherits(GuidelineUI, _BaseUI);\n\n  var _super = _createSuper(GuidelineUI);\n\n  function GuidelineUI() {\n    _classCallCheck(this, GuidelineUI);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(GuidelineUI, [{\n    key: \"build\",\n    value:\n    /**\n     * Custom className on build process.\n     */\n    function build() {\n      _get(_getPrototypeOf(GuidelineUI.prototype), \"build\", this).call(this);\n\n      addClass(this._element, CSS_CLASSNAME);\n    }\n  }]);\n\n  return GuidelineUI;\n}(BaseUI);\n\nexport default GuidelineUI;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { addClass, closest, hasClass, removeClass, outerWidth, isDetached } from \"../../helpers/dom/element.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { arrayEach } from \"../../helpers/array.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport { PhysicalIndexToValueMap as IndexToValueMap } from \"../../translations/index.mjs\";\nimport { ViewportRowsCalculator } from \"../../3rdparty/walkontable/src/index.mjs\"; // Developer note! Whenever you make a change in this file, make an analogous change in manualColumnResize.js\n\nexport var PLUGIN_KEY = 'manualRowResize';\nexport var PLUGIN_PRIORITY = 30;\nvar PERSISTENT_STATE_KEY = 'manualRowHeights';\nvar privatePool = new WeakMap();\n/**\n * @plugin ManualRowResize\n * @class ManualRowResize\n *\n * @description\n * This plugin allows to change rows height. To make rows height persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * The plugin creates additional components to make resizing possibly using user interface:\n * - handle - the draggable element that sets the desired height of the row.\n * - guide - the helper guide that shows the desired height as a horizontal guide.\n */\n\nexport var ManualRowResize = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(ManualRowResize, _BasePlugin);\n\n  var _super = _createSuper(ManualRowResize);\n\n  function ManualRowResize(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, ManualRowResize);\n\n    _this = _super.call(this, hotInstance);\n    var rootDocument = _this.hot.rootDocument;\n    _this.currentTH = null;\n    _this.currentRow = null;\n    _this.selectedRows = [];\n    _this.currentHeight = null;\n    _this.newSize = null;\n    _this.startY = null;\n    _this.startHeight = null;\n    _this.startOffset = null;\n    _this.handle = rootDocument.createElement('DIV');\n    _this.guide = rootDocument.createElement('DIV');\n    _this.eventManager = new EventManager(_assertThisInitialized(_this));\n    _this.pressed = null;\n    _this.dblclick = 0;\n    _this.autoresizeTimeout = null;\n    /**\n     * PhysicalIndexToValueMap to keep and track widths for physical row indexes.\n     *\n     * @private\n     * @type {PhysicalIndexToValueMap}\n     */\n\n    _this.rowHeightsMap = void 0;\n    /**\n     * Private pool to save configuration from updateSettings.\n     */\n\n    privatePool.set(_assertThisInitialized(_this), {\n      config: void 0\n    });\n    addClass(_this.handle, 'manualRowResizer');\n    addClass(_this.guide, 'manualRowResizerGuide');\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ManualRowResize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(ManualRowResize, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.rowHeightsMap = new IndexToValueMap();\n      this.rowHeightsMap.addLocalHook('init', function () {\n        return _this2.onMapInit();\n      });\n      this.hot.rowIndexMapper.registerMap(this.pluginName, this.rowHeightsMap);\n      this.addHook('modifyRowHeight', function (height, row) {\n        return _this2.onModifyRowHeight(height, row);\n      });\n      this.bindEvents();\n\n      _get(_getPrototypeOf(ManualRowResize.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(_getPrototypeOf(ManualRowResize.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      var priv = privatePool.get(this);\n      priv.config = this.rowHeightsMap.getValues();\n      this.hot.rowIndexMapper.unregisterMap(this.pluginName);\n\n      _get(_getPrototypeOf(ManualRowResize.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Saves the current sizes using the persistentState plugin (the {@link Options#persistentState} option has to be\n     * enabled).\n     *\n     * @fires Hooks#persistentStateSave\n     */\n\n  }, {\n    key: \"saveManualRowHeights\",\n    value: function saveManualRowHeights() {\n      this.hot.runHooks('persistentStateSave', PERSISTENT_STATE_KEY, this.rowHeightsMap.getValues());\n    }\n    /**\n     * Loads the previously saved sizes using the persistentState plugin (the {@link Options#persistentState} option\n     * has be enabled).\n     *\n     * @returns {Array}\n     * @fires Hooks#persistentStateLoad\n     */\n\n  }, {\n    key: \"loadManualRowHeights\",\n    value: function loadManualRowHeights() {\n      var storedState = {};\n      this.hot.runHooks('persistentStateLoad', PERSISTENT_STATE_KEY, storedState);\n      return storedState.value;\n    }\n    /**\n     * Sets the new height for specified row index.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} height Row height.\n     * @returns {number} Returns new height.\n     */\n\n  }, {\n    key: \"setManualSize\",\n    value: function setManualSize(row, height) {\n      var physicalRow = this.hot.toPhysicalRow(row);\n      var newHeight = Math.max(height, ViewportRowsCalculator.DEFAULT_HEIGHT);\n      this.rowHeightsMap.setValueAtIndex(physicalRow, newHeight);\n      return newHeight;\n    }\n    /**\n     * Sets the resize handle position.\n     *\n     * @private\n     * @param {HTMLCellElement} TH TH HTML element.\n     */\n\n  }, {\n    key: \"setupHandlePosition\",\n    value: function setupHandlePosition(TH) {\n      var _this3 = this;\n\n      this.currentTH = TH;\n      var view = this.hot.view;\n      var wt = view.wt;\n      var cellCoords = view.wt.wtTable.getCoords(this.currentTH);\n      var row = cellCoords.row; // Ignore row headers.\n\n      if (row < 0) {\n        return;\n      }\n\n      var headerWidth = outerWidth(this.currentTH);\n      var box = this.currentTH.getBoundingClientRect(); // Read \"fixedRowsTop\" and \"fixedRowsBottom\" through the Walkontable as in that context, the fixed\n      // rows are modified (reduced by the number of hidden rows) by TableView module.\n\n      var fixedRowTop = row < wt.getSetting('fixedRowsTop');\n      var fixedRowBottom = row >= view.countNotHiddenRowIndexes(0, 1) - wt.getSetting('fixedRowsBottom');\n      var relativeHeaderPosition;\n\n      if (fixedRowTop) {\n        relativeHeaderPosition = wt.wtOverlays.topLeftCornerOverlay.getRelativeCellPosition(this.currentTH, cellCoords.row, cellCoords.col);\n      } else if (fixedRowBottom) {\n        relativeHeaderPosition = wt.wtOverlays.bottomLeftCornerOverlay.getRelativeCellPosition(this.currentTH, cellCoords.row, cellCoords.col);\n      } // If the TH is not a child of the top-left/bottom-left overlay, recalculate using\n      // the left overlay - as this overlay contains the rest of the headers.\n\n\n      if (!relativeHeaderPosition) {\n        relativeHeaderPosition = wt.wtOverlays.leftOverlay.getRelativeCellPosition(this.currentTH, cellCoords.row, cellCoords.col);\n      }\n\n      this.currentRow = this.hot.rowIndexMapper.getVisualFromRenderableIndex(row);\n      this.selectedRows = [];\n      var isFullRowSelected = this.hot.selection.isSelectedByCorner() || this.hot.selection.isSelectedByRowHeader();\n\n      if (this.hot.selection.isSelected() && isFullRowSelected) {\n        var selectionRanges = this.hot.getSelectedRange();\n        arrayEach(selectionRanges, function (selectionRange) {\n          var fromRow = selectionRange.getTopLeftCorner().row;\n          var toRow = selectionRange.getBottomLeftCorner().row; // Add every selected row for resize action.\n\n          rangeEach(fromRow, toRow, function (rowIndex) {\n            if (!_this3.selectedRows.includes(rowIndex)) {\n              _this3.selectedRows.push(rowIndex);\n            }\n          });\n        });\n      } // Resizing element beyond the current selection (also when there is no selection).\n\n\n      if (!this.selectedRows.includes(this.currentRow)) {\n        this.selectedRows = [this.currentRow];\n      }\n\n      this.startOffset = relativeHeaderPosition.top - 6;\n      this.startHeight = parseInt(box.height, 10);\n      this.handle.style.top = \"\".concat(this.startOffset + this.startHeight, \"px\");\n      this.handle.style.left = \"\".concat(relativeHeaderPosition.left, \"px\");\n      this.handle.style.width = \"\".concat(headerWidth, \"px\");\n      this.hot.rootElement.appendChild(this.handle);\n    }\n    /**\n     * Refresh the resize handle position.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"refreshHandlePosition\",\n    value: function refreshHandlePosition() {\n      this.handle.style.top = \"\".concat(this.startOffset + this.currentHeight, \"px\");\n    }\n    /**\n     * Sets the resize guide position.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"setupGuidePosition\",\n    value: function setupGuidePosition() {\n      var handleWidth = parseInt(outerWidth(this.handle), 10);\n      var handleRightPosition = parseInt(this.handle.style.left, 10) + handleWidth;\n      var maximumVisibleElementWidth = parseInt(this.hot.view.maximumVisibleElementWidth(0), 10);\n      addClass(this.handle, 'active');\n      addClass(this.guide, 'active');\n      this.guide.style.top = this.handle.style.top;\n      this.guide.style.left = \"\".concat(handleRightPosition, \"px\");\n      this.guide.style.width = \"\".concat(maximumVisibleElementWidth - handleWidth, \"px\");\n      this.hot.rootElement.appendChild(this.guide);\n    }\n    /**\n     * Refresh the resize guide position.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"refreshGuidePosition\",\n    value: function refreshGuidePosition() {\n      this.guide.style.top = this.handle.style.top;\n    }\n    /**\n     * Hides both the resize handle and resize guide.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"hideHandleAndGuide\",\n    value: function hideHandleAndGuide() {\n      removeClass(this.handle, 'active');\n      removeClass(this.guide, 'active');\n    }\n    /**\n     * Checks if provided element is considered as a row header.\n     *\n     * @private\n     * @param {HTMLElement} element HTML element.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"checkIfRowHeader\",\n    value: function checkIfRowHeader(element) {\n      var _element$parentNode, _element$parentNode$p;\n\n      var thElement = closest(element, ['TH'], this.hot.rootElement);\n      return thElement && ((_element$parentNode = element.parentNode) === null || _element$parentNode === void 0 ? void 0 : (_element$parentNode$p = _element$parentNode.parentNode) === null || _element$parentNode$p === void 0 ? void 0 : _element$parentNode$p.tagName) === 'TBODY';\n    }\n    /**\n     * Gets the TH element from the provided element.\n     *\n     * @private\n     * @param {HTMLElement} element HTML element.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: \"getClosestTHParent\",\n    value: function getClosestTHParent(element) {\n      if (element.tagName !== 'TABLE') {\n        if (element.tagName === 'TH') {\n          return element;\n        }\n\n        return this.getClosestTHParent(element.parentNode);\n      }\n\n      return null;\n    }\n    /**\n     * Returns the actual height for the provided row index.\n     *\n     * @private\n     * @param {number} row Visual row index.\n     * @returns {number} Actual row height.\n     */\n\n  }, {\n    key: \"getActualRowHeight\",\n    value: function getActualRowHeight(row) {\n      // TODO: this should utilize `this.hot.getRowHeight` after it's fixed and working properly.\n      var walkontableHeight = this.hot.view.wt.wtTable.getRowHeight(row);\n\n      if (walkontableHeight !== void 0 && this.newSize < walkontableHeight) {\n        return walkontableHeight;\n      }\n\n      return this.newSize;\n    }\n    /**\n     * 'mouseover' event callback - set the handle position.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event.\n     */\n\n  }, {\n    key: \"onMouseOver\",\n    value: function onMouseOver(event) {\n      // Workaround for #6926 - if the `event.target` is temporarily detached, we can skip this callback and wait for\n      // the next `onmouseover`.\n      if (isDetached(event.target)) {\n        return;\n      }\n\n      if (this.checkIfRowHeader(event.target)) {\n        var th = this.getClosestTHParent(event.target);\n\n        if (th) {\n          if (!this.pressed) {\n            this.setupHandlePosition(th);\n          }\n        }\n      }\n    }\n    /**\n     * Auto-size row after doubleclick - callback.\n     *\n     * @private\n     * @fires Hooks#beforeRowResize\n     * @fires Hooks#afterRowResize\n     */\n\n  }, {\n    key: \"afterMouseDownTimeout\",\n    value: function afterMouseDownTimeout() {\n      var _this4 = this;\n\n      var render = function render() {\n        _this4.hot.forceFullRender = true;\n\n        _this4.hot.view.render(); // updates all\n\n\n        _this4.hot.view.adjustElementsSize(true);\n      };\n\n      var resize = function resize(row, forceRender) {\n        var hookNewSize = _this4.hot.runHooks('beforeRowResize', _this4.getActualRowHeight(row), row, true);\n\n        if (hookNewSize !== void 0) {\n          _this4.newSize = hookNewSize;\n        }\n\n        _this4.setManualSize(row, _this4.newSize); // double click sets auto row size\n\n\n        _this4.hot.runHooks('afterRowResize', _this4.getActualRowHeight(row), row, true);\n\n        if (forceRender) {\n          render();\n        }\n      };\n\n      if (this.dblclick >= 2) {\n        var selectedRowsLength = this.selectedRows.length;\n\n        if (selectedRowsLength > 1) {\n          arrayEach(this.selectedRows, function (selectedRow) {\n            resize(selectedRow);\n          });\n          render();\n        } else {\n          arrayEach(this.selectedRows, function (selectedRow) {\n            resize(selectedRow, true);\n          });\n        }\n      }\n\n      this.dblclick = 0;\n      this.autoresizeTimeout = null;\n    }\n    /**\n     * 'mousedown' event callback.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event.\n     */\n\n  }, {\n    key: \"onMouseDown\",\n    value: function onMouseDown(event) {\n      var _this5 = this;\n\n      if (hasClass(event.target, 'manualRowResizer')) {\n        this.setupHandlePosition(this.currentTH);\n        this.setupGuidePosition();\n        this.pressed = true;\n\n        if (this.autoresizeTimeout === null) {\n          this.autoresizeTimeout = setTimeout(function () {\n            return _this5.afterMouseDownTimeout();\n          }, 500);\n\n          this.hot._registerTimeout(this.autoresizeTimeout);\n        }\n\n        this.dblclick += 1;\n        this.startY = event.pageY;\n        this.newSize = this.startHeight;\n      }\n    }\n    /**\n     * 'mousemove' event callback - refresh the handle and guide positions, cache the new row height.\n     *\n     * @private\n     * @param {MouseEvent} event The mouse event.\n     */\n\n  }, {\n    key: \"onMouseMove\",\n    value: function onMouseMove(event) {\n      var _this6 = this;\n\n      if (this.pressed) {\n        this.currentHeight = this.startHeight + (event.pageY - this.startY);\n        arrayEach(this.selectedRows, function (selectedRow) {\n          _this6.newSize = _this6.setManualSize(selectedRow, _this6.currentHeight);\n        });\n        this.refreshHandlePosition();\n        this.refreshGuidePosition();\n      }\n    }\n    /**\n     * 'mouseup' event callback - apply the row resizing.\n     *\n     * @private\n     *\n     * @fires Hooks#beforeRowResize\n     * @fires Hooks#afterRowResize\n     */\n\n  }, {\n    key: \"onMouseUp\",\n    value: function onMouseUp() {\n      var _this7 = this;\n\n      var render = function render() {\n        _this7.hot.forceFullRender = true;\n\n        _this7.hot.view.render(); // updates all\n\n\n        _this7.hot.view.adjustElementsSize(true);\n      };\n\n      var runHooks = function runHooks(row, forceRender) {\n        _this7.hot.runHooks('beforeRowResize', _this7.getActualRowHeight(row), row, false);\n\n        if (forceRender) {\n          render();\n        }\n\n        _this7.saveManualRowHeights();\n\n        _this7.hot.runHooks('afterRowResize', _this7.getActualRowHeight(row), row, false);\n      };\n\n      if (this.pressed) {\n        this.hideHandleAndGuide();\n        this.pressed = false;\n\n        if (this.newSize !== this.startHeight) {\n          var selectedRowsLength = this.selectedRows.length;\n\n          if (selectedRowsLength > 1) {\n            arrayEach(this.selectedRows, function (selectedRow) {\n              runHooks(selectedRow);\n            });\n            render();\n          } else {\n            arrayEach(this.selectedRows, function (selectedRow) {\n              runHooks(selectedRow, true);\n            });\n          }\n        }\n\n        this.setupHandlePosition(this.currentTH);\n      }\n    }\n    /**\n     * Binds the mouse events.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"bindEvents\",\n    value: function bindEvents() {\n      var _this8 = this;\n\n      var _this$hot = this.hot,\n          rootElement = _this$hot.rootElement,\n          rootWindow = _this$hot.rootWindow;\n      this.eventManager.addEventListener(rootElement, 'mouseover', function (e) {\n        return _this8.onMouseOver(e);\n      });\n      this.eventManager.addEventListener(rootElement, 'mousedown', function (e) {\n        return _this8.onMouseDown(e);\n      });\n      this.eventManager.addEventListener(rootWindow, 'mousemove', function (e) {\n        return _this8.onMouseMove(e);\n      });\n      this.eventManager.addEventListener(rootWindow, 'mouseup', function () {\n        return _this8.onMouseUp();\n      });\n    }\n    /**\n     * Modifies the provided row height, based on the plugin settings.\n     *\n     * @private\n     * @param {number} height Row height.\n     * @param {number} row Visual row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"onModifyRowHeight\",\n    value: function onModifyRowHeight(height, row) {\n      var newHeight = height;\n\n      if (this.enabled) {\n        var physicalRow = this.hot.toPhysicalRow(row);\n        var rowHeight = this.rowHeightsMap.getValueAtIndex(physicalRow);\n\n        if (this.hot.getSettings()[PLUGIN_KEY] && rowHeight) {\n          newHeight = rowHeight;\n        }\n      }\n\n      return newHeight;\n    }\n    /**\n     * Callback to call on map's `init` local hook.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMapInit\",\n    value: function onMapInit() {\n      var _this9 = this;\n\n      var priv = privatePool.get(this);\n      var initialSetting = this.hot.getSettings()[PLUGIN_KEY];\n      var loadedManualRowHeights = this.loadManualRowHeights();\n      this.hot.batchExecution(function () {\n        if (typeof loadedManualRowHeights !== 'undefined') {\n          loadedManualRowHeights.forEach(function (height, index) {\n            _this9.rowHeightsMap.setValueAtIndex(index, height);\n          });\n        } else if (Array.isArray(initialSetting)) {\n          initialSetting.forEach(function (height, index) {\n            _this9.rowHeightsMap.setValueAtIndex(index, height);\n          });\n          priv.config = initialSetting;\n        } else if (initialSetting === true && Array.isArray(priv.config)) {\n          priv.config.forEach(function (height, index) {\n            _this9.rowHeightsMap.setValueAtIndex(index, height);\n          });\n        }\n      }, true);\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _get(_getPrototypeOf(ManualRowResize.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return ManualRowResize;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nimport { stopImmediatePropagation } from \"../../helpers/dom/event.mjs\";\nimport { CellCoords, CellRange } from \"../../3rdparty/walkontable/src/index.mjs\";\nimport MergedCellsCollection from \"./cellsCollection.mjs\";\nimport MergedCellCoords from \"./cellCoords.mjs\";\nimport AutofillCalculations from \"./calculations/autofill.mjs\";\nimport SelectionCalculations from \"./calculations/selection.mjs\";\nimport toggleMergeItem from \"./contextMenuItem/toggleMerge.mjs\";\nimport { arrayEach } from \"../../helpers/array.mjs\";\nimport { isObject, clone } from \"../../helpers/object.mjs\";\nimport { warn } from \"../../helpers/console.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport { applySpanProperties } from \"./utils.mjs\";\nHooks.getSingleton().register('beforeMergeCells');\nHooks.getSingleton().register('afterMergeCells');\nHooks.getSingleton().register('beforeUnmergeCells');\nHooks.getSingleton().register('afterUnmergeCells');\nexport var PLUGIN_KEY = 'mergeCells';\nexport var PLUGIN_PRIORITY = 150;\nvar privatePool = new WeakMap();\n/**\n * @plugin MergeCells\n * @class MergeCells\n *\n * @description\n * Plugin, which allows merging cells in the table (using the initial configuration, API or context menu).\n *\n * @example\n *\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *  data: getData(),\n *  mergeCells: [\n *    {row: 0, col: 3, rowspan: 3, colspan: 3},\n *    {row: 2, col: 6, rowspan: 2, colspan: 2},\n *    {row: 4, col: 8, rowspan: 3, colspan: 3}\n *  ],\n * ```\n */\n\nexport var MergeCells = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(MergeCells, _BasePlugin);\n\n  var _super = _createSuper(MergeCells);\n\n  function MergeCells(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, MergeCells);\n\n    _this = _super.call(this, hotInstance);\n    privatePool.set(_assertThisInitialized(_this), {\n      lastDesiredCoords: null\n    });\n    /**\n     * A container for all the merged cells.\n     *\n     * @private\n     * @type {MergedCellsCollection}\n     */\n\n    _this.mergedCellsCollection = null;\n    /**\n     * Instance of the class responsible for all the autofill-related calculations.\n     *\n     * @private\n     * @type {AutofillCalculations}\n     */\n\n    _this.autofillCalculations = null;\n    /**\n     * Instance of the class responsible for the selection-related calculations.\n     *\n     * @private\n     * @type {SelectionCalculations}\n     */\n\n    _this.selectionCalculations = null;\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link MergeCells#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(MergeCells, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.mergedCellsCollection = new MergedCellsCollection(this);\n      this.autofillCalculations = new AutofillCalculations(this);\n      this.selectionCalculations = new SelectionCalculations(this);\n      this.addHook('afterInit', function () {\n        return _this2.onAfterInit.apply(_this2, arguments);\n      });\n      this.addHook('beforeKeyDown', function () {\n        return _this2.onBeforeKeyDown.apply(_this2, arguments);\n      });\n      this.addHook('modifyTransformStart', function () {\n        return _this2.onModifyTransformStart.apply(_this2, arguments);\n      });\n      this.addHook('afterModifyTransformStart', function () {\n        return _this2.onAfterModifyTransformStart.apply(_this2, arguments);\n      });\n      this.addHook('modifyTransformEnd', function () {\n        return _this2.onModifyTransformEnd.apply(_this2, arguments);\n      });\n      this.addHook('modifyGetCellCoords', function () {\n        return _this2.onModifyGetCellCoords.apply(_this2, arguments);\n      });\n      this.addHook('beforeSetRangeStart', function () {\n        return _this2.onBeforeSetRangeStart.apply(_this2, arguments);\n      });\n      this.addHook('beforeSetRangeStartOnly', function () {\n        return _this2.onBeforeSetRangeStart.apply(_this2, arguments);\n      });\n      this.addHook('beforeSetRangeEnd', function () {\n        return _this2.onBeforeSetRangeEnd.apply(_this2, arguments);\n      });\n      this.addHook('afterIsMultipleSelection', function () {\n        return _this2.onAfterIsMultipleSelection.apply(_this2, arguments);\n      });\n      this.addHook('afterRenderer', function () {\n        return _this2.onAfterRenderer.apply(_this2, arguments);\n      });\n      this.addHook('afterContextMenuDefaultOptions', function () {\n        return _this2.addMergeActionsToContextMenu.apply(_this2, arguments);\n      });\n      this.addHook('afterGetCellMeta', function () {\n        return _this2.onAfterGetCellMeta.apply(_this2, arguments);\n      });\n      this.addHook('afterViewportRowCalculatorOverride', function () {\n        return _this2.onAfterViewportRowCalculatorOverride.apply(_this2, arguments);\n      });\n      this.addHook('afterViewportColumnCalculatorOverride', function () {\n        return _this2.onAfterViewportColumnCalculatorOverride.apply(_this2, arguments);\n      });\n      this.addHook('modifyAutofillRange', function () {\n        return _this2.onModifyAutofillRange.apply(_this2, arguments);\n      });\n      this.addHook('afterCreateCol', function () {\n        return _this2.onAfterCreateCol.apply(_this2, arguments);\n      });\n      this.addHook('afterRemoveCol', function () {\n        return _this2.onAfterRemoveCol.apply(_this2, arguments);\n      });\n      this.addHook('afterCreateRow', function () {\n        return _this2.onAfterCreateRow.apply(_this2, arguments);\n      });\n      this.addHook('afterRemoveRow', function () {\n        return _this2.onAfterRemoveRow.apply(_this2, arguments);\n      });\n      this.addHook('afterChange', function () {\n        return _this2.onAfterChange.apply(_this2, arguments);\n      });\n      this.addHook('beforeDrawBorders', function () {\n        return _this2.onBeforeDrawAreaBorders.apply(_this2, arguments);\n      });\n      this.addHook('afterDrawSelection', function () {\n        return _this2.onAfterDrawSelection.apply(_this2, arguments);\n      });\n      this.addHook('beforeRemoveCellClassNames', function () {\n        return _this2.onBeforeRemoveCellClassNames.apply(_this2, arguments);\n      });\n      this.addHook('beforeUndoStackChange', function (action, source) {\n        if (source === 'MergeCells') {\n          return false;\n        }\n      });\n\n      _get(_getPrototypeOf(MergeCells.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.clearCollections();\n      this.hot.render();\n\n      _get(_getPrototypeOf(MergeCells.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      var settings = this.hot.getSettings()[PLUGIN_KEY];\n      this.disablePlugin();\n      this.enablePlugin();\n      this.generateFromSettings(settings);\n\n      _get(_getPrototypeOf(MergeCells.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Validates a single setting object, represented by a single merged cell information object.\n     *\n     * @private\n     * @param {object} setting An object with `row`, `col`, `rowspan` and `colspan` properties.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"validateSetting\",\n    value: function validateSetting(setting) {\n      var valid = true;\n\n      if (!setting) {\n        return false;\n      }\n\n      if (MergedCellCoords.containsNegativeValues(setting)) {\n        warn(MergedCellCoords.NEGATIVE_VALUES_WARNING(setting));\n        valid = false;\n      } else if (MergedCellCoords.isOutOfBounds(setting, this.hot.countRows(), this.hot.countCols())) {\n        warn(MergedCellCoords.IS_OUT_OF_BOUNDS_WARNING(setting));\n        valid = false;\n      } else if (MergedCellCoords.isSingleCell(setting)) {\n        warn(MergedCellCoords.IS_SINGLE_CELL(setting));\n        valid = false;\n      } else if (MergedCellCoords.containsZeroSpan(setting)) {\n        warn(MergedCellCoords.ZERO_SPAN_WARNING(setting));\n        valid = false;\n      }\n\n      return valid;\n    }\n    /**\n     * Generates the merged cells from the settings provided to the plugin.\n     *\n     * @private\n     * @param {Array|boolean} settings The settings provided to the plugin.\n     */\n\n  }, {\n    key: \"generateFromSettings\",\n    value: function generateFromSettings(settings) {\n      var _this3 = this;\n\n      if (Array.isArray(settings)) {\n        var _this$hot;\n\n        var populationArgumentsList = [];\n        arrayEach(settings, function (setting) {\n          if (!_this3.validateSetting(setting)) {\n            return;\n          }\n\n          var highlight = new CellCoords(setting.row, setting.col);\n          var rangeEnd = new CellCoords(setting.row + setting.rowspan - 1, setting.col + setting.colspan - 1);\n          var mergeRange = new CellRange(highlight, highlight, rangeEnd);\n          populationArgumentsList.push(_this3.mergeRange(mergeRange, true, true));\n        }); // remove 'empty' setting objects, caused by improper merge range declarations\n\n        populationArgumentsList = populationArgumentsList.filter(function (value) {\n          return value !== true;\n        });\n        var bulkPopulationData = this.getBulkCollectionData(populationArgumentsList);\n\n        (_this$hot = this.hot).populateFromArray.apply(_this$hot, _toConsumableArray(bulkPopulationData));\n      }\n    }\n    /**\n     * Generates a bulk set of all the data to be populated to fill the data \"under\" the added merged cells.\n     *\n     * @private\n     * @param {Array} populationArgumentsList Array in a form of `[row, column, dataUnderCollection]`.\n     * @returns {Array} Array in a form of `[row, column, dataOfAllCollections]`.\n     */\n\n  }, {\n    key: \"getBulkCollectionData\",\n    value: function getBulkCollectionData(populationArgumentsList) {\n      var _this$hot2;\n\n      var populationDataRange = this.getBulkCollectionDataRange(populationArgumentsList);\n\n      var dataAtRange = (_this$hot2 = this.hot).getData.apply(_this$hot2, _toConsumableArray(populationDataRange));\n\n      var newDataAtRange = dataAtRange.splice(0);\n      arrayEach(populationArgumentsList, function (mergedCellArguments) {\n        var _mergedCellArguments = _slicedToArray(mergedCellArguments, 3),\n            mergedCellRowIndex = _mergedCellArguments[0],\n            mergedCellColumnIndex = _mergedCellArguments[1],\n            mergedCellData = _mergedCellArguments[2];\n\n        arrayEach(mergedCellData, function (mergedCellRow, rowIndex) {\n          arrayEach(mergedCellRow, function (mergedCellElement, columnIndex) {\n            newDataAtRange[mergedCellRowIndex - populationDataRange[0] + rowIndex][mergedCellColumnIndex - populationDataRange[1] + columnIndex] = mergedCellElement; // eslint-disable-line max-len\n          });\n        });\n      });\n      return [populationDataRange[0], populationDataRange[1], newDataAtRange];\n    }\n    /**\n     * Gets the range of combined data ranges provided in a form of an array of arrays ([row, column, dataUnderCollection]).\n     *\n     * @private\n     * @param {Array} populationArgumentsList Array containing argument lists for the `populateFromArray` method - row, column and data for population.\n     * @returns {Array[]} Start and end coordinates of the merged cell range. (in a form of [rowIndex, columnIndex]).\n     */\n\n  }, {\n    key: \"getBulkCollectionDataRange\",\n    value: function getBulkCollectionDataRange(populationArgumentsList) {\n      var start = [0, 0];\n      var end = [0, 0];\n      var mergedCellRow = null;\n      var mergedCellColumn = null;\n      var mergedCellData = null;\n      arrayEach(populationArgumentsList, function (mergedCellArguments) {\n        mergedCellRow = mergedCellArguments[0];\n        mergedCellColumn = mergedCellArguments[1];\n        mergedCellData = mergedCellArguments[2];\n        start[0] = Math.min(mergedCellRow, start[0]);\n        start[1] = Math.min(mergedCellColumn, start[1]);\n        end[0] = Math.max(mergedCellRow + mergedCellData.length - 1, end[0]);\n        end[1] = Math.max(mergedCellColumn + mergedCellData[0].length - 1, end[1]);\n      });\n      return [].concat(start, end);\n    }\n    /**\n     * Clears the merged cells from the merged cell container.\n     */\n\n  }, {\n    key: \"clearCollections\",\n    value: function clearCollections() {\n      this.mergedCellsCollection.clear();\n    }\n    /**\n     * Returns `true` if a range is mergeable.\n     *\n     * @private\n     * @param {object} newMergedCellInfo Merged cell information object to test.\n     * @param {boolean} [auto=false] `true` if triggered at initialization.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"canMergeRange\",\n    value: function canMergeRange(newMergedCellInfo) {\n      var auto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      return auto ? true : this.validateSetting(newMergedCellInfo);\n    }\n    /**\n     * Merge or unmerge, based on last selected range.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"toggleMergeOnSelection\",\n    value: function toggleMergeOnSelection() {\n      var currentRange = this.hot.getSelectedRangeLast();\n\n      if (!currentRange) {\n        return;\n      }\n\n      currentRange.setDirection('NW-SE');\n      var from = currentRange.from,\n          to = currentRange.to;\n      this.toggleMerge(currentRange);\n      this.hot.selectCell(from.row, from.col, to.row, to.col, false);\n    }\n    /**\n     * Merges the selection provided as a cell range.\n     *\n     * @param {CellRange} [cellRange] Selection cell range.\n     */\n\n  }, {\n    key: \"mergeSelection\",\n    value: function mergeSelection() {\n      var cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hot.getSelectedRangeLast();\n\n      if (!cellRange) {\n        return;\n      }\n\n      cellRange.setDirection('NW-SE');\n      var from = cellRange.from,\n          to = cellRange.to;\n      this.unmergeRange(cellRange, true);\n      this.mergeRange(cellRange);\n      this.hot.selectCell(from.row, from.col, to.row, to.col, false);\n    }\n    /**\n     * Unmerges the selection provided as a cell range.\n     *\n     * @param {CellRange} [cellRange] Selection cell range.\n     */\n\n  }, {\n    key: \"unmergeSelection\",\n    value: function unmergeSelection() {\n      var cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hot.getSelectedRangeLast();\n\n      if (!cellRange) {\n        return;\n      }\n\n      var from = cellRange.from,\n          to = cellRange.to;\n      this.unmergeRange(cellRange, true);\n      this.hot.selectCell(from.row, from.col, to.row, to.col, false);\n    }\n    /**\n     * Merges cells in the provided cell range.\n     *\n     * @private\n     * @param {CellRange} cellRange Cell range to merge.\n     * @param {boolean} [auto=false] `true` if is called automatically, e.g. At initialization.\n     * @param {boolean} [preventPopulation=false] `true`, if the method should not run `populateFromArray` at the end, but rather return its arguments.\n     * @returns {Array|boolean} Returns an array of [row, column, dataUnderCollection] if preventPopulation is set to true. If the the merging process went successful, it returns `true`, otherwise - `false`.\n     * @fires Hooks#beforeMergeCells\n     * @fires Hooks#afterMergeCells\n     */\n\n  }, {\n    key: \"mergeRange\",\n    value: function mergeRange(cellRange) {\n      var _this4 = this;\n\n      var auto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var preventPopulation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var topLeft = cellRange.getTopLeftCorner();\n      var bottomRight = cellRange.getBottomRightCorner();\n      var mergeParent = {\n        row: topLeft.row,\n        col: topLeft.col,\n        rowspan: bottomRight.row - topLeft.row + 1,\n        colspan: bottomRight.col - topLeft.col + 1\n      };\n      var clearedData = [];\n      var populationInfo = null;\n\n      if (!this.canMergeRange(mergeParent, auto)) {\n        return false;\n      }\n\n      this.hot.runHooks('beforeMergeCells', cellRange, auto);\n      rangeEach(0, mergeParent.rowspan - 1, function (i) {\n        rangeEach(0, mergeParent.colspan - 1, function (j) {\n          var clearedValue = null;\n\n          if (!clearedData[i]) {\n            clearedData[i] = [];\n          }\n\n          if (i === 0 && j === 0) {\n            clearedValue = _this4.hot.getDataAtCell(mergeParent.row, mergeParent.col);\n          } else {\n            _this4.hot.setCellMeta(mergeParent.row + i, mergeParent.col + j, 'hidden', true);\n          }\n\n          clearedData[i][j] = clearedValue;\n        });\n      });\n      this.hot.setCellMeta(mergeParent.row, mergeParent.col, 'spanned', true);\n      var mergedCellAdded = this.mergedCellsCollection.add(mergeParent);\n\n      if (mergedCellAdded) {\n        if (preventPopulation) {\n          populationInfo = [mergeParent.row, mergeParent.col, clearedData];\n        } else {\n          this.hot.populateFromArray(mergeParent.row, mergeParent.col, clearedData, void 0, void 0, this.pluginName);\n        }\n\n        this.hot.runHooks('afterMergeCells', cellRange, mergeParent, auto);\n        return populationInfo;\n      }\n\n      return true;\n    }\n    /**\n     * Unmerges the selection provided as a cell range. If no cell range is provided, it uses the current selection.\n     *\n     * @private\n     * @param {CellRange} cellRange Selection cell range.\n     * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n     *\n     * @fires Hooks#beforeUnmergeCells\n     * @fires Hooks#afterUnmergeCells\n     */\n\n  }, {\n    key: \"unmergeRange\",\n    value: function unmergeRange(cellRange) {\n      var _this5 = this;\n\n      var auto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var mergedCells = this.mergedCellsCollection.getWithinRange(cellRange);\n\n      if (!mergedCells) {\n        return;\n      }\n\n      this.hot.runHooks('beforeUnmergeCells', cellRange, auto);\n      arrayEach(mergedCells, function (currentCollection) {\n        _this5.mergedCellsCollection.remove(currentCollection.row, currentCollection.col);\n\n        rangeEach(0, currentCollection.rowspan - 1, function (i) {\n          rangeEach(0, currentCollection.colspan - 1, function (j) {\n            _this5.hot.removeCellMeta(currentCollection.row + i, currentCollection.col + j, 'hidden');\n          });\n        });\n\n        _this5.hot.removeCellMeta(currentCollection.row, currentCollection.col, 'spanned');\n      });\n      this.hot.runHooks('afterUnmergeCells', cellRange, auto);\n      this.hot.render();\n    }\n    /**\n     * Merges or unmerges, based on the cell range provided as `cellRange`.\n     *\n     * @private\n     * @param {CellRange} cellRange The cell range to merge or unmerged.\n     */\n\n  }, {\n    key: \"toggleMerge\",\n    value: function toggleMerge(cellRange) {\n      var mergedCell = this.mergedCellsCollection.get(cellRange.from.row, cellRange.from.col);\n      var mergedCellCoversWholeRange = mergedCell.row === cellRange.from.row && mergedCell.col === cellRange.from.col && mergedCell.row + mergedCell.rowspan - 1 === cellRange.to.row && mergedCell.col + mergedCell.colspan - 1 === cellRange.to.col;\n\n      if (mergedCellCoversWholeRange) {\n        this.unmergeRange(cellRange);\n      } else {\n        this.mergeSelection(cellRange);\n      }\n    }\n    /**\n     * Merges the specified range.\n     *\n     * @param {number} startRow Start row of the merged cell.\n     * @param {number} startColumn Start column of the merged cell.\n     * @param {number} endRow End row of the merged cell.\n     * @param {number} endColumn End column of the merged cell.\n     * @fires Hooks#beforeMergeCells\n     * @fires Hooks#afterMergeCells\n     */\n\n  }, {\n    key: \"merge\",\n    value: function merge(startRow, startColumn, endRow, endColumn) {\n      var start = new CellCoords(startRow, startColumn);\n      var end = new CellCoords(endRow, endColumn);\n      this.mergeRange(new CellRange(start, start, end));\n    }\n    /**\n     * Unmerges the merged cell in the provided range.\n     *\n     * @param {number} startRow Start row of the merged cell.\n     * @param {number} startColumn Start column of the merged cell.\n     * @param {number} endRow End row of the merged cell.\n     * @param {number} endColumn End column of the merged cell.\n     * @fires Hooks#beforeUnmergeCells\n     * @fires Hooks#afterUnmergeCells\n     */\n\n  }, {\n    key: \"unmerge\",\n    value: function unmerge(startRow, startColumn, endRow, endColumn) {\n      var start = new CellCoords(startRow, startColumn);\n      var end = new CellCoords(endRow, endColumn);\n      this.unmergeRange(new CellRange(start, start, end));\n    }\n    /**\n     * `afterInit` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterInit\",\n    value: function onAfterInit() {\n      this.generateFromSettings(this.hot.getSettings()[PLUGIN_KEY]);\n      this.hot.render();\n    }\n    /**\n     * `beforeKeyDown` hook callback.\n     *\n     * @private\n     * @param {KeyboardEvent} event The `keydown` event object.\n     */\n\n  }, {\n    key: \"onBeforeKeyDown\",\n    value: function onBeforeKeyDown(event) {\n      var ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey;\n\n      if (ctrlDown && event.keyCode === 77) {\n        // CTRL + M\n        this.toggleMerge(this.hot.getSelectedRangeLast());\n        this.hot.render();\n        stopImmediatePropagation(event);\n      }\n    }\n    /**\n     * Modifies the information on whether the current selection contains multiple cells. The `afterIsMultipleSelection` hook callback.\n     *\n     * @private\n     * @param {boolean} isMultiple Determines whether the current selection contains multiple cells.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"onAfterIsMultipleSelection\",\n    value: function onAfterIsMultipleSelection(isMultiple) {\n      if (isMultiple) {\n        var mergedCells = this.mergedCellsCollection.mergedCells;\n        var selectionRange = this.hot.getSelectedRangeLast();\n\n        for (var group = 0; group < mergedCells.length; group += 1) {\n          if (selectionRange.from.row === mergedCells[group].row && selectionRange.from.col === mergedCells[group].col && selectionRange.to.row === mergedCells[group].row + mergedCells[group].rowspan - 1 && selectionRange.to.col === mergedCells[group].col + mergedCells[group].colspan - 1) {\n            return false;\n          }\n        }\n      }\n\n      return isMultiple;\n    }\n    /**\n     * `modifyTransformStart` hook callback.\n     *\n     * @private\n     * @param {object} delta The transformation delta.\n     */\n\n  }, {\n    key: \"onModifyTransformStart\",\n    value: function onModifyTransformStart(delta) {\n      var priv = privatePool.get(this);\n      var currentlySelectedRange = this.hot.getSelectedRangeLast();\n      var newDelta = {\n        row: delta.row,\n        col: delta.col\n      };\n      var nextPosition = null;\n      var currentPosition = new CellCoords(currentlySelectedRange.highlight.row, currentlySelectedRange.highlight.col);\n      var mergedParent = this.mergedCellsCollection.get(currentPosition.row, currentPosition.col);\n\n      if (!priv.lastDesiredCoords) {\n        priv.lastDesiredCoords = new CellCoords(null, null);\n      }\n\n      if (mergedParent) {\n        // only merge selected\n        var mergeTopLeft = new CellCoords(mergedParent.row, mergedParent.col);\n        var mergeBottomRight = new CellCoords(mergedParent.row + mergedParent.rowspan - 1, mergedParent.col + mergedParent.colspan - 1);\n        var mergeRange = new CellRange(mergeTopLeft, mergeTopLeft, mergeBottomRight);\n\n        if (!mergeRange.includes(priv.lastDesiredCoords)) {\n          priv.lastDesiredCoords = new CellCoords(null, null); // reset outdated version of lastDesiredCoords\n        }\n\n        newDelta.row = priv.lastDesiredCoords.row ? priv.lastDesiredCoords.row - currentPosition.row : newDelta.row;\n        newDelta.col = priv.lastDesiredCoords.col ? priv.lastDesiredCoords.col - currentPosition.col : newDelta.col;\n\n        if (delta.row > 0) {\n          // moving down\n          newDelta.row = mergedParent.row + mergedParent.rowspan - 1 - currentPosition.row + delta.row;\n        } else if (delta.row < 0) {\n          // moving up\n          newDelta.row = currentPosition.row - mergedParent.row + delta.row;\n        }\n\n        if (delta.col > 0) {\n          // moving right\n          newDelta.col = mergedParent.col + mergedParent.colspan - 1 - currentPosition.col + delta.col;\n        } else if (delta.col < 0) {\n          // moving left\n          newDelta.col = currentPosition.col - mergedParent.col + delta.col;\n        }\n      }\n\n      nextPosition = new CellCoords(currentlySelectedRange.highlight.row + newDelta.row, currentlySelectedRange.highlight.col + newDelta.col);\n      var nextPositionMergedCell = this.mergedCellsCollection.get(nextPosition.row, nextPosition.col);\n\n      if (nextPositionMergedCell) {\n        // skipping the invisible cells in the merge range\n        var firstRenderableCoords = this.mergedCellsCollection.getFirstRenderableCoords(nextPositionMergedCell.row, nextPositionMergedCell.col);\n        priv.lastDesiredCoords = nextPosition;\n        newDelta = {\n          row: firstRenderableCoords.row - currentPosition.row,\n          col: firstRenderableCoords.col - currentPosition.col\n        };\n      }\n\n      if (newDelta.row !== 0) {\n        delta.row = newDelta.row;\n      }\n\n      if (newDelta.col !== 0) {\n        delta.col = newDelta.col;\n      }\n    }\n    /**\n     * `modifyTransformEnd` hook callback. Needed to handle \"jumping over\" merged merged cells, while selecting.\n     *\n     * @private\n     * @param {object} delta The transformation delta.\n     */\n\n  }, {\n    key: \"onModifyTransformEnd\",\n    value: function onModifyTransformEnd(delta) {\n      var _this6 = this;\n\n      var currentSelectionRange = this.hot.getSelectedRangeLast();\n      var newDelta = clone(delta);\n      var newSelectionRange = this.selectionCalculations.getUpdatedSelectionRange(currentSelectionRange, delta);\n      var tempDelta = clone(newDelta);\n      var mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(newSelectionRange, true);\n\n      do {\n        tempDelta = clone(newDelta);\n        this.selectionCalculations.getUpdatedSelectionRange(currentSelectionRange, newDelta);\n        arrayEach(mergedCellsWithinRange, function (mergedCell) {\n          _this6.selectionCalculations.snapDelta(newDelta, currentSelectionRange, mergedCell);\n        });\n      } while (newDelta.row !== tempDelta.row || newDelta.col !== tempDelta.col);\n\n      delta.row = newDelta.row;\n      delta.col = newDelta.col;\n    }\n    /**\n     * `modifyGetCellCoords` hook callback. Swaps the `getCell` coords with the merged parent coords.\n     *\n     * @private\n     * @param {number} row Row index.\n     * @param {number} column Visual column index.\n     * @returns {Array|undefined} Visual coordinates of the merge.\n     */\n\n  }, {\n    key: \"onModifyGetCellCoords\",\n    value: function onModifyGetCellCoords(row, column) {\n      if (row < 0 || column < 0) {\n        return;\n      }\n\n      var mergeParent = this.mergedCellsCollection.get(row, column);\n\n      if (!mergeParent) {\n        return;\n      }\n\n      var mergeRow = mergeParent.row,\n          mergeColumn = mergeParent.col,\n          colspan = mergeParent.colspan,\n          rowspan = mergeParent.rowspan;\n      return [// Most top-left merged cell coords.\n      mergeRow, mergeColumn, // Most bottom-right merged cell coords.\n      mergeRow + rowspan - 1, mergeColumn + colspan - 1];\n    }\n    /**\n     * `afterContextMenuDefaultOptions` hook callback.\n     *\n     * @private\n     * @param {object} defaultOptions The default context menu options.\n     */\n\n  }, {\n    key: \"addMergeActionsToContextMenu\",\n    value: function addMergeActionsToContextMenu(defaultOptions) {\n      defaultOptions.items.push({\n        name: '---------'\n      }, toggleMergeItem(this));\n    }\n    /**\n     * `afterRenderer` hook callback.\n     *\n     * @private\n     * @param {HTMLElement} TD The cell to be modified.\n     * @param {number} row Row index.\n     * @param {number} col Visual column index.\n     */\n\n  }, {\n    key: \"onAfterRenderer\",\n    value: function onAfterRenderer(TD, row, col) {\n      var mergedCell = this.mergedCellsCollection.get(row, col); // We shouldn't override data in the collection.\n\n      var mergedCellCopy = isObject(mergedCell) ? clone(mergedCell) : void 0;\n\n      if (isObject(mergedCellCopy)) {\n        var _this$hot3 = this.hot,\n            rowMapper = _this$hot3.rowIndexMapper,\n            columnMapper = _this$hot3.columnIndexMapper;\n        var mergeRow = mergedCellCopy.row,\n            mergeColumn = mergedCellCopy.col,\n            colspan = mergedCellCopy.colspan,\n            rowspan = mergedCellCopy.rowspan;\n\n        var _this$translateMerged = this.translateMergedCellToRenderable(mergeRow, rowspan, mergeColumn, colspan),\n            _this$translateMerged2 = _slicedToArray(_this$translateMerged, 2),\n            lastMergedRowIndex = _this$translateMerged2[0],\n            lastMergedColumnIndex = _this$translateMerged2[1];\n\n        var renderedRowIndex = rowMapper.getRenderableFromVisualIndex(row);\n        var renderedColumnIndex = columnMapper.getRenderableFromVisualIndex(col);\n        var maxRowSpan = lastMergedRowIndex - renderedRowIndex + 1; // Number of rendered columns.\n\n        var maxColSpan = lastMergedColumnIndex - renderedColumnIndex + 1; // Number of rendered columns.\n        // We just try to determine some values basing on the actual number of rendered indexes (some columns may be hidden).\n\n        mergedCellCopy.row = rowMapper.getFirstNotHiddenIndex(mergedCellCopy.row, 1); // We just try to determine some values basing on the actual number of rendered indexes (some columns may be hidden).\n\n        mergedCellCopy.col = columnMapper.getFirstNotHiddenIndex(mergedCellCopy.col, 1); // The `rowSpan` property for a `TD` element should be at most equal to number of rendered rows in the merge area.\n\n        mergedCellCopy.rowspan = Math.min(mergedCellCopy.rowspan, maxRowSpan); // The `colSpan` property for a `TD` element should be at most equal to number of rendered columns in the merge area.\n\n        mergedCellCopy.colspan = Math.min(mergedCellCopy.colspan, maxColSpan);\n      }\n\n      applySpanProperties(TD, mergedCellCopy, row, col);\n    }\n    /**\n     * `beforeSetRangeStart` and `beforeSetRangeStartOnly` hook callback.\n     * A selection within merge area should be rewritten to the start of merge area.\n     *\n     * @private\n     * @param {object} coords Cell coords.\n     */\n\n  }, {\n    key: \"onBeforeSetRangeStart\",\n    value: function onBeforeSetRangeStart(coords) {\n      // TODO: It is a workaround, but probably this hook may be needed. Every selection on the merge area\n      // could set start point of the selection to the start of the merge area. However, logic inside `expandByRange` need\n      // an initial start point. Click on the merge cell when there are some hidden indexes break the logic in some cases.\n      // Please take a look at #7010 for more information. I'm not sure if selection directions are calculated properly\n      // and what was idea for flipping direction inside `expandByRange` method.\n      if (this.mergedCellsCollection.isFirstRenderableMergedCell(coords.row, coords.col)) {\n        var mergeParent = this.mergedCellsCollection.get(coords.row, coords.col);\n        var _ref = [mergeParent.row, mergeParent.col];\n        coords.row = _ref[0];\n        coords.col = _ref[1];\n      }\n    }\n    /**\n     * `beforeSetRangeEnd` hook callback.\n     * While selecting cells with keyboard or mouse, make sure that rectangular area is expanded to the extent of the merged cell.\n     *\n     * Note: Please keep in mind that callback may modify both start and end range coordinates by the reference.\n     *\n     * @private\n     * @param {object} coords Cell coords.\n     */\n\n  }, {\n    key: \"onBeforeSetRangeEnd\",\n    value: function onBeforeSetRangeEnd(coords) {\n      var selRange = this.hot.getSelectedRangeLast();\n      selRange.highlight = new CellCoords(selRange.highlight.row, selRange.highlight.col); // clone in case we will modify its reference\n\n      selRange.to = coords;\n      var rangeExpanded = false;\n\n      if (this.hot.selection.isSelectedByColumnHeader() || this.hot.selection.isSelectedByRowHeader()) {\n        return;\n      }\n\n      do {\n        rangeExpanded = false;\n\n        for (var i = 0; i < this.mergedCellsCollection.mergedCells.length; i += 1) {\n          var cellInfo = this.mergedCellsCollection.mergedCells[i];\n          var mergedCellRange = cellInfo.getRange();\n\n          if (selRange.expandByRange(mergedCellRange)) {\n            coords.row = selRange.to.row;\n            coords.col = selRange.to.col;\n            rangeExpanded = true;\n          }\n        }\n      } while (rangeExpanded);\n    }\n    /**\n     * The `afterGetCellMeta` hook callback.\n     *\n     * @private\n     * @param {number} row Row index.\n     * @param {number} col Column index.\n     * @param {object} cellProperties The cell properties object.\n     */\n\n  }, {\n    key: \"onAfterGetCellMeta\",\n    value: function onAfterGetCellMeta(row, col, cellProperties) {\n      var mergeParent = this.mergedCellsCollection.get(row, col);\n\n      if (mergeParent) {\n        if (mergeParent.row !== row || mergeParent.col !== col) {\n          cellProperties.copyable = false;\n        } else {\n          cellProperties.rowspan = mergeParent.rowspan;\n          cellProperties.colspan = mergeParent.colspan;\n        }\n      }\n    }\n    /**\n     * `afterViewportRowCalculatorOverride` hook callback.\n     *\n     * @private\n     * @param {object} calc The row calculator object.\n     */\n\n  }, {\n    key: \"onAfterViewportRowCalculatorOverride\",\n    value: function onAfterViewportRowCalculatorOverride(calc) {\n      var nrOfColumns = this.hot.countCols();\n      this.modifyViewportRowStart(calc, nrOfColumns);\n      this.modifyViewportRowEnd(calc, nrOfColumns);\n    }\n    /**\n     * Modify viewport start when needed. We extend viewport when merged cells aren't fully visible.\n     *\n     * @private\n     * @param {object} calc The row calculator object.\n     * @param {number} nrOfColumns Number of visual columns.\n     */\n\n  }, {\n    key: \"modifyViewportRowStart\",\n    value: function modifyViewportRowStart(calc, nrOfColumns) {\n      var rowMapper = this.hot.rowIndexMapper;\n      var visualStartRow = rowMapper.getVisualFromRenderableIndex(calc.startRow);\n\n      for (var visualColumnIndex = 0; visualColumnIndex < nrOfColumns; visualColumnIndex += 1) {\n        var mergeParentForViewportStart = this.mergedCellsCollection.get(visualStartRow, visualColumnIndex);\n\n        if (isObject(mergeParentForViewportStart)) {\n          var renderableIndexAtMergeStart = rowMapper.getRenderableFromVisualIndex(rowMapper.getFirstNotHiddenIndex(mergeParentForViewportStart.row, 1)); // Merge start is out of the viewport (i.e. when we scrolled to the bottom and we can see just part of a merge).\n\n          if (renderableIndexAtMergeStart < calc.startRow) {\n            // We extend viewport when some rows have been merged.\n            calc.startRow = renderableIndexAtMergeStart; // We are looking for next merges inside already extended viewport (starting again from row equal to 0).\n\n            this.modifyViewportRowStart(calc, nrOfColumns); // recursively search upwards\n\n            return; // Finish the current loop. Everything will be checked from the beginning by above recursion.\n          }\n        }\n      }\n    }\n    /**\n     *  Modify viewport end when needed. We extend viewport when merged cells aren't fully visible.\n     *\n     * @private\n     * @param {object} calc The row calculator object.\n     * @param {number} nrOfColumns Number of visual columns.\n     */\n\n  }, {\n    key: \"modifyViewportRowEnd\",\n    value: function modifyViewportRowEnd(calc, nrOfColumns) {\n      var rowMapper = this.hot.rowIndexMapper;\n      var visualEndRow = rowMapper.getVisualFromRenderableIndex(calc.endRow);\n\n      for (var visualColumnIndex = 0; visualColumnIndex < nrOfColumns; visualColumnIndex += 1) {\n        var mergeParentForViewportEnd = this.mergedCellsCollection.get(visualEndRow, visualColumnIndex);\n\n        if (isObject(mergeParentForViewportEnd)) {\n          var mergeEnd = mergeParentForViewportEnd.row + mergeParentForViewportEnd.rowspan - 1;\n          var renderableIndexAtMergeEnd = rowMapper.getRenderableFromVisualIndex(rowMapper.getFirstNotHiddenIndex(mergeEnd, -1)); // Merge end is out of the viewport.\n\n          if (renderableIndexAtMergeEnd > calc.endRow) {\n            // We extend the viewport when some rows have been merged.\n            calc.endRow = renderableIndexAtMergeEnd; // We are looking for next merges inside already extended viewport (starting again from row equal to 0).\n\n            this.modifyViewportRowEnd(calc, nrOfColumns); // recursively search upwards\n\n            return; // Finish the current loop. Everything will be checked from the beginning by above recursion.\n          }\n        }\n      }\n    }\n    /**\n     * `afterViewportColumnCalculatorOverride` hook callback.\n     *\n     * @private\n     * @param {object} calc The column calculator object.\n     */\n\n  }, {\n    key: \"onAfterViewportColumnCalculatorOverride\",\n    value: function onAfterViewportColumnCalculatorOverride(calc) {\n      var nrOfRows = this.hot.countRows();\n      this.modifyViewportColumnStart(calc, nrOfRows);\n      this.modifyViewportColumnEnd(calc, nrOfRows);\n    }\n    /**\n     * Modify viewport start when needed. We extend viewport when merged cells aren't fully visible.\n     *\n     * @private\n     * @param {object} calc The column calculator object.\n     * @param {number} nrOfRows Number of visual rows.\n     */\n\n  }, {\n    key: \"modifyViewportColumnStart\",\n    value: function modifyViewportColumnStart(calc, nrOfRows) {\n      var columnMapper = this.hot.columnIndexMapper;\n      var visualStartCol = columnMapper.getVisualFromRenderableIndex(calc.startColumn);\n\n      for (var visualRowIndex = 0; visualRowIndex < nrOfRows; visualRowIndex += 1) {\n        var mergeParentForViewportStart = this.mergedCellsCollection.get(visualRowIndex, visualStartCol);\n\n        if (isObject(mergeParentForViewportStart)) {\n          var renderableIndexAtMergeStart = columnMapper.getRenderableFromVisualIndex(columnMapper.getFirstNotHiddenIndex(mergeParentForViewportStart.col, 1)); // Merge start is out of the viewport (i.e. when we scrolled to the right and we can see just part of a merge).\n\n          if (renderableIndexAtMergeStart < calc.startColumn) {\n            // We extend viewport when some columns have been merged.\n            calc.startColumn = renderableIndexAtMergeStart; // We are looking for next merges inside already extended viewport (starting again from column equal to 0).\n\n            this.modifyViewportColumnStart(calc, nrOfRows); // recursively search upwards\n\n            return; // Finish the current loop. Everything will be checked from the beginning by above recursion.\n          }\n        }\n      }\n    }\n    /**\n     *  Modify viewport end when needed. We extend viewport when merged cells aren't fully visible.\n     *\n     * @private\n     * @param {object} calc The column calculator object.\n     * @param {number} nrOfRows Number of visual rows.\n     */\n\n  }, {\n    key: \"modifyViewportColumnEnd\",\n    value: function modifyViewportColumnEnd(calc, nrOfRows) {\n      var columnMapper = this.hot.columnIndexMapper;\n      var visualEndCol = columnMapper.getVisualFromRenderableIndex(calc.endColumn);\n\n      for (var visualRowIndex = 0; visualRowIndex < nrOfRows; visualRowIndex += 1) {\n        var mergeParentForViewportEnd = this.mergedCellsCollection.get(visualRowIndex, visualEndCol);\n\n        if (isObject(mergeParentForViewportEnd)) {\n          var mergeEnd = mergeParentForViewportEnd.col + mergeParentForViewportEnd.colspan - 1;\n          var renderableIndexAtMergeEnd = columnMapper.getRenderableFromVisualIndex(columnMapper.getFirstNotHiddenIndex(mergeEnd, -1)); // Merge end is out of the viewport.\n\n          if (renderableIndexAtMergeEnd > calc.endColumn) {\n            // We extend the viewport when some columns have been merged.\n            calc.endColumn = renderableIndexAtMergeEnd; // We are looking for next merges inside already extended viewport (starting again from column equal to 0).\n\n            this.modifyViewportColumnEnd(calc, nrOfRows); // recursively search upwards\n\n            return; // Finish the current loop. Everything will be checked from the beginning by above recursion.\n          }\n        }\n      }\n    }\n    /**\n     * Translates merged cell coordinates to renderable indexes.\n     *\n     * @private\n     * @param {number} parentRow Visual row index.\n     * @param {number} rowspan Rowspan which describes shift which will be applied to parent row\n     *                         to calculate renderable index which points to the most bottom\n     *                         index position. Pass rowspan as `0` to calculate the most top\n     *                         index position.\n     * @param {number} parentColumn Visual column index.\n     * @param {number} colspan Colspan which describes shift which will be applied to parent column\n     *                         to calculate renderable index which points to the most right\n     *                         index position. Pass colspan as `0` to calculate the most left\n     *                         index position.\n     * @returns {number[]}\n     */\n\n  }, {\n    key: \"translateMergedCellToRenderable\",\n    value: function translateMergedCellToRenderable(parentRow, rowspan, parentColumn, colspan) {\n      var _this$hot4 = this.hot,\n          rowMapper = _this$hot4.rowIndexMapper,\n          columnMapper = _this$hot4.columnIndexMapper;\n      var firstNonHiddenRow;\n      var firstNonHiddenColumn;\n\n      if (rowspan === 0) {\n        firstNonHiddenRow = rowMapper.getFirstNotHiddenIndex(parentRow, 1);\n      } else {\n        firstNonHiddenRow = rowMapper.getFirstNotHiddenIndex(parentRow + rowspan - 1, -1);\n      }\n\n      if (colspan === 0) {\n        firstNonHiddenColumn = columnMapper.getFirstNotHiddenIndex(parentColumn, 1);\n      } else {\n        firstNonHiddenColumn = columnMapper.getFirstNotHiddenIndex(parentColumn + colspan - 1, -1);\n      }\n\n      var renderableRow = parentRow >= 0 ? rowMapper.getRenderableFromVisualIndex(firstNonHiddenRow) : parentRow;\n      var renderableColumn = parentColumn >= 0 ? columnMapper.getRenderableFromVisualIndex(firstNonHiddenColumn) : parentColumn;\n      return [renderableRow, renderableColumn];\n    }\n    /**\n     * The `modifyAutofillRange` hook callback.\n     *\n     * @private\n     * @param {Array} drag The drag area coordinates.\n     * @param {Array} select The selection information.\n     * @returns {Array} The new drag area.\n     */\n\n  }, {\n    key: \"onModifyAutofillRange\",\n    value: function onModifyAutofillRange(drag, select) {\n      this.autofillCalculations.correctSelectionAreaSize(select);\n      var dragDirection = this.autofillCalculations.getDirection(select, drag);\n      var dragArea = drag;\n\n      if (this.autofillCalculations.dragAreaOverlapsCollections(select, dragArea, dragDirection)) {\n        dragArea = select;\n        return dragArea;\n      }\n\n      var mergedCellsWithinSelectionArea = this.mergedCellsCollection.getWithinRange({\n        from: {\n          row: select[0],\n          col: select[1]\n        },\n        to: {\n          row: select[2],\n          col: select[3]\n        }\n      });\n\n      if (!mergedCellsWithinSelectionArea) {\n        return dragArea;\n      }\n\n      dragArea = this.autofillCalculations.snapDragArea(select, dragArea, dragDirection, mergedCellsWithinSelectionArea);\n      return dragArea;\n    }\n    /**\n     * `afterCreateCol` hook callback.\n     *\n     * @private\n     * @param {number} column Column index.\n     * @param {number} count Number of created columns.\n     */\n\n  }, {\n    key: \"onAfterCreateCol\",\n    value: function onAfterCreateCol(column, count) {\n      this.mergedCellsCollection.shiftCollections('right', column, count);\n    }\n    /**\n     * `afterRemoveCol` hook callback.\n     *\n     * @private\n     * @param {number} column Column index.\n     * @param {number} count Number of removed columns.\n     */\n\n  }, {\n    key: \"onAfterRemoveCol\",\n    value: function onAfterRemoveCol(column, count) {\n      this.mergedCellsCollection.shiftCollections('left', column, count);\n    }\n    /**\n     * `afterCreateRow` hook callback.\n     *\n     * @private\n     * @param {number} row Row index.\n     * @param {number} count Number of created rows.\n     * @param {string} source Source of change.\n     */\n\n  }, {\n    key: \"onAfterCreateRow\",\n    value: function onAfterCreateRow(row, count, source) {\n      if (source === 'auto') {\n        return;\n      }\n\n      this.mergedCellsCollection.shiftCollections('down', row, count);\n    }\n    /**\n     * `afterRemoveRow` hook callback.\n     *\n     * @private\n     * @param {number} row Row index.\n     * @param {number} count Number of removed rows.\n     */\n\n  }, {\n    key: \"onAfterRemoveRow\",\n    value: function onAfterRemoveRow(row, count) {\n      this.mergedCellsCollection.shiftCollections('up', row, count);\n    }\n    /**\n     * `afterChange` hook callback. Used to propagate merged cells after using Autofill.\n     *\n     * @private\n     * @param {Array} changes The changes array.\n     * @param {string} source Determines the source of the change.\n     */\n\n  }, {\n    key: \"onAfterChange\",\n    value: function onAfterChange(changes, source) {\n      if (source !== 'Autofill.fill') {\n        return;\n      }\n\n      this.autofillCalculations.recreateAfterDataPopulation(changes);\n    }\n    /**\n     * `beforeDrawAreaBorders` hook callback.\n     *\n     * @private\n     * @param {Array} corners Visual coordinates of the area corners.\n     * @param {string} className Class name for the area.\n     */\n\n  }, {\n    key: \"onBeforeDrawAreaBorders\",\n    value: function onBeforeDrawAreaBorders(corners, className) {\n      if (className && className === 'area') {\n        var selectedRange = this.hot.getSelectedRangeLast();\n        var mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(selectedRange);\n        arrayEach(mergedCellsWithinRange, function (mergedCell) {\n          if (selectedRange.getBottomRightCorner().row === mergedCell.getLastRow() && selectedRange.getBottomRightCorner().col === mergedCell.getLastColumn()) {\n            corners[2] = mergedCell.row;\n            corners[3] = mergedCell.col;\n          }\n        });\n      }\n    }\n    /**\n     * `afterModifyTransformStart` hook callback. Fixes a problem with navigating through merged cells at the edges of the table\n     * with the ENTER/SHIFT+ENTER/TAB/SHIFT+TAB keys.\n     *\n     * @private\n     * @param {CellCoords} coords Coordinates of the to-be-selected cell.\n     * @param {number} rowTransformDir Row transformation direction (negative value = up, 0 = none, positive value = down).\n     * @param {number} colTransformDir Column transformation direction (negative value = up, 0 = none, positive value = down).\n     */\n\n  }, {\n    key: \"onAfterModifyTransformStart\",\n    value: function onAfterModifyTransformStart(coords, rowTransformDir, colTransformDir) {\n      if (!this.enabled) {\n        return;\n      }\n\n      var mergedCellAtCoords = this.mergedCellsCollection.get(coords.row, coords.col);\n\n      if (!mergedCellAtCoords) {\n        return;\n      }\n\n      var goingDown = rowTransformDir > 0;\n      var goingUp = rowTransformDir < 0;\n      var goingLeft = colTransformDir < 0;\n      var goingRight = colTransformDir > 0;\n      var mergedCellOnBottomEdge = mergedCellAtCoords.row + mergedCellAtCoords.rowspan - 1 === this.hot.countRows() - 1;\n      var mergedCellOnTopEdge = mergedCellAtCoords.row === 0;\n      var mergedCellOnRightEdge = mergedCellAtCoords.col + mergedCellAtCoords.colspan - 1 === this.hot.countCols() - 1;\n      var mergedCellOnLeftEdge = mergedCellAtCoords.col === 0;\n\n      if (goingDown && mergedCellOnBottomEdge || goingUp && mergedCellOnTopEdge || goingRight && mergedCellOnRightEdge || goingLeft && mergedCellOnLeftEdge) {\n        coords.row = mergedCellAtCoords.row;\n        coords.col = mergedCellAtCoords.col;\n      }\n    }\n    /**\n     * `afterDrawSelection` hook callback. Used to add the additional class name for the entirely-selected merged cells.\n     *\n     * @private\n     * @param {number} currentRow Visual row index of the currently processed cell.\n     * @param {number} currentColumn Visual column index of the currently cell.\n     * @param {Array} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow, endColumn]`.\n     * @param {number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n     * @returns {string|undefined} A `String`, which will act as an additional `className` to be added to the currently processed cell.\n     */\n\n  }, {\n    key: \"onAfterDrawSelection\",\n    value: function onAfterDrawSelection(currentRow, currentColumn, cornersOfSelection, layerLevel) {\n      // Nothing's selected (hook might be triggered by the custom borders)\n      if (!cornersOfSelection) {\n        return;\n      }\n\n      return this.selectionCalculations.getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel);\n    }\n    /**\n     * `beforeRemoveCellClassNames` hook callback. Used to remove additional class name from all cells in the table.\n     *\n     * @private\n     * @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.\n     */\n\n  }, {\n    key: \"onBeforeRemoveCellClassNames\",\n    value: function onBeforeRemoveCellClassNames() {\n      return this.selectionCalculations.getSelectedMergedCellClassNameToRemove();\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return MergeCells;\n}(BasePlugin);", "var _templateObject;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.object.freeze.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport MergedCellCoords from \"./cellCoords.mjs\";\nimport { CellCoords, CellRange } from \"../../3rdparty/walkontable/src/index.mjs\";\nimport { rangeEach, rangeEachReverse } from \"../../helpers/number.mjs\";\nimport { warn } from \"../../helpers/console.mjs\";\nimport { arrayEach } from \"../../helpers/array.mjs\";\nimport { applySpanProperties } from \"./utils.mjs\";\nimport { toSingleLine } from \"../../helpers/templateLiteralTag.mjs\";\n/**\n * Defines a container object for the merged cells.\n *\n * @private\n * @class MergedCellsCollection\n */\n\nvar MergedCellsCollection = /*#__PURE__*/function () {\n  function MergedCellsCollection(plugin) {\n    _classCallCheck(this, MergedCellsCollection);\n\n    /**\n     * Reference to the Merge Cells plugin.\n     *\n     * @type {MergeCells}\n     */\n    this.plugin = plugin;\n    /**\n     * Array of merged cells.\n     *\n     * @type {Array}\n     */\n\n    this.mergedCells = [];\n    /**\n     * The Handsontable instance.\n     *\n     * @type {Handsontable}\n     */\n\n    this.hot = plugin.hot;\n  }\n  /**\n   * Get a warning message for when the declared merged cell data overlaps already existing merged cells.\n   *\n   * @param {object} newMergedCell Object containg information about the merged cells that was about to be added.\n   * @returns {string}\n   */\n\n\n  _createClass(MergedCellsCollection, [{\n    key: \"get\",\n    value:\n    /**\n     * Get a merged cell from the container, based on the provided arguments. You can provide either the \"starting coordinates\"\n     * of a merged cell, or any coordinates from the body of the merged cell.\n     *\n     * @param {number} row Row index.\n     * @param {number} column Column index.\n     * @returns {MergedCellCoords|boolean} Returns a wanted merged cell on success and `false` on failure.\n     */\n    function get(row, column) {\n      var mergedCells = this.mergedCells;\n      var result = false;\n      arrayEach(mergedCells, function (mergedCell) {\n        if (mergedCell.row <= row && mergedCell.row + mergedCell.rowspan - 1 >= row && mergedCell.col <= column && mergedCell.col + mergedCell.colspan - 1 >= column) {\n          result = mergedCell;\n          return false;\n        }\n\n        return true;\n      });\n      return result;\n    }\n    /**\n     * Get a merged cell containing the provided range.\n     *\n     * @param {CellRange|object} range The range to search merged cells for.\n     * @returns {MergedCellCoords|boolean}\n     */\n\n  }, {\n    key: \"getByRange\",\n    value: function getByRange(range) {\n      var mergedCells = this.mergedCells;\n      var result = false;\n      arrayEach(mergedCells, function (mergedCell) {\n        if (mergedCell.row <= range.from.row && mergedCell.row + mergedCell.rowspan - 1 >= range.to.row && mergedCell.col <= range.from.col && mergedCell.col + mergedCell.colspan - 1 >= range.to.col) {\n          result = mergedCell;\n          return result;\n        }\n\n        return true;\n      });\n      return result;\n    }\n    /**\n     * Get a merged cell contained in the provided range.\n     *\n     * @param {CellRange|object} range The range to search merged cells in.\n     * @param {boolean} [countPartials=false] If set to `true`, all the merged cells overlapping the range will be taken into calculation.\n     * @returns {Array|boolean} Array of found merged cells of `false` if none were found.\n     */\n\n  }, {\n    key: \"getWithinRange\",\n    value: function getWithinRange(range) {\n      var countPartials = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var mergedCells = this.mergedCells;\n      var foundMergedCells = [];\n      var testedRange = range;\n\n      if (!testedRange.includesRange) {\n        var from = new CellCoords(testedRange.from.row, testedRange.from.col);\n        var to = new CellCoords(testedRange.to.row, testedRange.to.col);\n        testedRange = new CellRange(from, from, to);\n      }\n\n      arrayEach(mergedCells, function (mergedCell) {\n        var mergedCellTopLeft = new CellCoords(mergedCell.row, mergedCell.col);\n        var mergedCellBottomRight = new CellCoords(mergedCell.row + mergedCell.rowspan - 1, mergedCell.col + mergedCell.colspan - 1);\n        var mergedCellRange = new CellRange(mergedCellTopLeft, mergedCellTopLeft, mergedCellBottomRight);\n\n        if (countPartials) {\n          if (testedRange.overlaps(mergedCellRange)) {\n            foundMergedCells.push(mergedCell);\n          }\n        } else if (testedRange.includesRange(mergedCellRange)) {\n          foundMergedCells.push(mergedCell);\n        }\n      });\n      return foundMergedCells.length ? foundMergedCells : false;\n    }\n    /**\n     * Add a merged cell to the container.\n     *\n     * @param {object} mergedCellInfo The merged cell information object. Has to contain `row`, `col`, `colspan` and `rowspan` properties.\n     * @returns {MergedCellCoords|boolean} Returns the new merged cell on success and `false` on failure.\n     */\n\n  }, {\n    key: \"add\",\n    value: function add(mergedCellInfo) {\n      var mergedCells = this.mergedCells;\n      var row = mergedCellInfo.row;\n      var column = mergedCellInfo.col;\n      var rowspan = mergedCellInfo.rowspan;\n      var colspan = mergedCellInfo.colspan;\n      var newMergedCell = new MergedCellCoords(row, column, rowspan, colspan);\n      var alreadyExists = this.get(row, column);\n      var isOverlapping = this.isOverlapping(newMergedCell);\n\n      if (!alreadyExists && !isOverlapping) {\n        if (this.hot) {\n          newMergedCell.normalize(this.hot);\n        }\n\n        mergedCells.push(newMergedCell);\n        return newMergedCell;\n      }\n\n      warn(MergedCellsCollection.IS_OVERLAPPING_WARNING(newMergedCell));\n      return false;\n    }\n    /**\n     * Remove a merged cell from the container. You can provide either the \"starting coordinates\"\n     * of a merged cell, or any coordinates from the body of the merged cell.\n     *\n     * @param {number} row Row index.\n     * @param {number} column Column index.\n     * @returns {MergedCellCoords|boolean} Returns the removed merged cell on success and `false` on failure.\n     */\n\n  }, {\n    key: \"remove\",\n    value: function remove(row, column) {\n      var mergedCells = this.mergedCells;\n      var wantedCollection = this.get(row, column);\n      var wantedCollectionIndex = wantedCollection ? this.mergedCells.indexOf(wantedCollection) : -1;\n\n      if (wantedCollection && wantedCollectionIndex !== -1) {\n        mergedCells.splice(wantedCollectionIndex, 1);\n        return wantedCollection;\n      }\n\n      return false;\n    }\n    /**\n     * Clear all the merged cells.\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      var _this = this;\n\n      var mergedCells = this.mergedCells;\n      var mergedCellParentsToClear = [];\n      var hiddenCollectionElements = [];\n      arrayEach(mergedCells, function (mergedCell) {\n        var TD = _this.hot.getCell(mergedCell.row, mergedCell.col);\n\n        if (TD) {\n          mergedCellParentsToClear.push([TD, _this.get(mergedCell.row, mergedCell.col), mergedCell.row, mergedCell.col]);\n        }\n      });\n      this.mergedCells.length = 0;\n      arrayEach(mergedCellParentsToClear, function (mergedCell, i) {\n        rangeEach(0, mergedCell.rowspan - 1, function (j) {\n          rangeEach(0, mergedCell.colspan - 1, function (k) {\n            if (k !== 0 || j !== 0) {\n              var TD = _this.hot.getCell(mergedCell.row + j, mergedCell.col + k);\n\n              if (TD) {\n                hiddenCollectionElements.push([TD, null, null, null]);\n              }\n            }\n          });\n        });\n        mergedCellParentsToClear[i][1] = null;\n      });\n      arrayEach(mergedCellParentsToClear, function (mergedCellParents) {\n        applySpanProperties.apply(void 0, _toConsumableArray(mergedCellParents));\n      });\n      arrayEach(hiddenCollectionElements, function (hiddenCollectionElement) {\n        applySpanProperties.apply(void 0, _toConsumableArray(hiddenCollectionElement));\n      });\n    }\n    /**\n     * Check if the provided merged cell overlaps with the others in the container.\n     *\n     * @param {MergedCellCoords} mergedCell The merged cell to check against all others in the container.\n     * @returns {boolean} `true` if the provided merged cell overlaps with the others, `false` otherwise.\n     */\n\n  }, {\n    key: \"isOverlapping\",\n    value: function isOverlapping(mergedCell) {\n      var mergedCellRange = new CellRange(new CellCoords(0, 0), new CellCoords(mergedCell.row, mergedCell.col), new CellCoords(mergedCell.row + mergedCell.rowspan - 1, mergedCell.col + mergedCell.colspan - 1));\n      var result = false;\n      arrayEach(this.mergedCells, function (col) {\n        var currentRange = new CellRange(new CellCoords(0, 0), new CellCoords(col.row, col.col), new CellCoords(col.row + col.rowspan - 1, col.col + col.colspan - 1));\n\n        if (currentRange.overlaps(mergedCellRange)) {\n          result = true;\n          return false;\n        }\n\n        return true;\n      });\n      return result;\n    }\n    /**\n     * Check whether the provided row/col coordinates direct to a first not hidden cell within merge area.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isFirstRenderableMergedCell\",\n    value: function isFirstRenderableMergedCell(row, column) {\n      var mergeParent = this.get(row, column); // Return if row and column indexes are within merge area and if they are first rendered indexes within the area.\n\n      return mergeParent && this.hot.rowIndexMapper.getFirstNotHiddenIndex(mergeParent.row, 1) === row && this.hot.columnIndexMapper.getFirstNotHiddenIndex(mergeParent.col, 1) === column;\n    }\n    /**\n     * Get the first renderable coords of the merged cell at the provided coordinates.\n     *\n     * @param {number} row Visual row index.\n     * @param {number} column Visual column index.\n     * @returns {CellCoords} A `CellCoords` object with the coordinates to the first renderable cell within the\n     *                        merged cell.\n     */\n\n  }, {\n    key: \"getFirstRenderableCoords\",\n    value: function getFirstRenderableCoords(row, column) {\n      var mergeParent = this.get(row, column);\n\n      if (!mergeParent || this.isFirstRenderableMergedCell(row, column)) {\n        return new CellCoords(row, column);\n      }\n\n      var firstRenderableRow = this.hot.rowIndexMapper.getFirstNotHiddenIndex(mergeParent.row, 1);\n      var firstRenderableColumn = this.hot.columnIndexMapper.getFirstNotHiddenIndex(mergeParent.col, 1);\n      return new CellCoords(firstRenderableRow, firstRenderableColumn);\n    }\n    /**\n     * Shift the merged cell in the direction and by an offset defined in the arguments.\n     *\n     * @param {string} direction `right`, `left`, `up` or `down`.\n     * @param {number} index Index where the change, which caused the shifting took place.\n     * @param {number} count Number of rows/columns added/removed in the preceding action.\n     */\n\n  }, {\n    key: \"shiftCollections\",\n    value: function shiftCollections(direction, index, count) {\n      var _this2 = this;\n\n      var shiftVector = [0, 0];\n\n      switch (direction) {\n        case 'right':\n          shiftVector[0] += count;\n          break;\n\n        case 'left':\n          shiftVector[0] -= count;\n          break;\n\n        case 'down':\n          shiftVector[1] += count;\n          break;\n\n        case 'up':\n          shiftVector[1] -= count;\n          break;\n\n        default:\n      }\n\n      arrayEach(this.mergedCells, function (currentMerge) {\n        currentMerge.shift(shiftVector, index);\n      });\n      rangeEachReverse(this.mergedCells.length - 1, 0, function (i) {\n        var currentMerge = _this2.mergedCells[i];\n\n        if (currentMerge && currentMerge.removed) {\n          _this2.mergedCells.splice(_this2.mergedCells.indexOf(currentMerge), 1);\n        }\n      });\n    }\n  }], [{\n    key: \"IS_OVERLAPPING_WARNING\",\n    value: function IS_OVERLAPPING_WARNING(newMergedCell) {\n      return toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"The merged cell declared at [\", \", \", \"], overlaps \\n      with the other declared merged cell. The overlapping merged cell was not added to the table, please \\n      fix your setup.\"], [\"The merged cell declared at [\", \", \", \"], overlaps\\\\x20\\n      with the other declared merged cell. The overlapping merged cell was not added to the table, please\\\\x20\\n      fix your setup.\"])), newMergedCell.row, newMergedCell.col);\n    }\n  }]);\n\n  return MergedCellsCollection;\n}();\n\nexport default MergedCellsCollection;", "import \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\n\nvar _templateObject, _templateObject2, _templateObject3, _templateObject4;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { CellCoords, CellRange } from \"../../3rdparty/walkontable/src/index.mjs\";\nimport { toSingleLine } from \"../../helpers/templateLiteralTag.mjs\";\n/**\n * The `MergedCellCoords` class represents a single merged cell.\n *\n * @private\n * @class MergedCellCoords\n */\n\nvar MergedCellCoords = /*#__PURE__*/function () {\n  function MergedCellCoords(row, column, rowspan, colspan) {\n    _classCallCheck(this, MergedCellCoords);\n\n    /**\n     * The index of the topmost merged cell row.\n     *\n     * @type {number}\n     */\n    this.row = row;\n    /**\n     * The index of the leftmost column.\n     *\n     * @type {number}\n     */\n\n    this.col = column;\n    /**\n     * The `rowspan` value of the merged cell.\n     *\n     * @type {number}\n     */\n\n    this.rowspan = rowspan;\n    /**\n     * The `colspan` value of the merged cell.\n     *\n     * @type {number}\n     */\n\n    this.colspan = colspan;\n    /**\n     * `true` only if the merged cell is bound to be removed.\n     *\n     * @type {boolean}\n     */\n\n    this.removed = false;\n  }\n  /**\n   * Get a warning message for when the declared merged cell data contains negative values.\n   *\n   * @param {object} newMergedCell Object containg information about the merged cells that was about to be added.\n   * @returns {string}\n   */\n\n\n  _createClass(MergedCellCoords, [{\n    key: \"normalize\",\n    value:\n    /**\n     * Sanitize (prevent from going outside the boundaries) the merged cell.\n     *\n     * @param {Core} hotInstance The Handsontable instance.\n     */\n    function normalize(hotInstance) {\n      var totalRows = hotInstance.countRows();\n      var totalColumns = hotInstance.countCols();\n\n      if (this.row < 0) {\n        this.row = 0;\n      } else if (this.row > totalRows - 1) {\n        this.row = totalRows - 1;\n      }\n\n      if (this.col < 0) {\n        this.col = 0;\n      } else if (this.col > totalColumns - 1) {\n        this.col = totalColumns - 1;\n      }\n\n      if (this.row + this.rowspan > totalRows - 1) {\n        this.rowspan = totalRows - this.row;\n      }\n\n      if (this.col + this.colspan > totalColumns - 1) {\n        this.colspan = totalColumns - this.col;\n      }\n    }\n    /**\n     * Returns `true` if the provided coordinates are inside the merged cell.\n     *\n     * @param {number} row The row index.\n     * @param {number} column The column index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"includes\",\n    value: function includes(row, column) {\n      return this.row <= row && this.col <= column && this.row + this.rowspan - 1 >= row && this.col + this.colspan - 1 >= column;\n    }\n    /**\n     * Returns `true` if the provided `column` property is within the column span of the merged cell.\n     *\n     * @param {number} column The column index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"includesHorizontally\",\n    value: function includesHorizontally(column) {\n      return this.col <= column && this.col + this.colspan - 1 >= column;\n    }\n    /**\n     * Returns `true` if the provided `row` property is within the row span of the merged cell.\n     *\n     * @param {number} row Row index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"includesVertically\",\n    value: function includesVertically(row) {\n      return this.row <= row && this.row + this.rowspan - 1 >= row;\n    }\n    /**\n     * Shift (and possibly resize, if needed) the merged cell.\n     *\n     * @param {Array} shiftVector 2-element array containing the information on the shifting in the `x` and `y` axis.\n     * @param {number} indexOfChange Index of the preceding change.\n     * @returns {boolean} Returns `false` if the whole merged cell was removed.\n     */\n\n  }, {\n    key: \"shift\",\n    value: function shift(shiftVector, indexOfChange) {\n      var shiftValue = shiftVector[0] || shiftVector[1];\n      var shiftedIndex = indexOfChange + Math.abs(shiftVector[0] || shiftVector[1]) - 1;\n      var span = shiftVector[0] ? 'colspan' : 'rowspan';\n      var index = shiftVector[0] ? 'col' : 'row';\n      var changeStart = Math.min(indexOfChange, shiftedIndex);\n      var changeEnd = Math.max(indexOfChange, shiftedIndex);\n      var mergeStart = this[index];\n      var mergeEnd = this[index] + this[span] - 1;\n\n      if (mergeStart >= indexOfChange) {\n        this[index] += shiftValue;\n      } // adding rows/columns\n\n\n      if (shiftValue > 0) {\n        if (indexOfChange <= mergeEnd && indexOfChange > mergeStart) {\n          this[span] += shiftValue;\n        } // removing rows/columns\n\n      } else if (shiftValue < 0) {\n        // removing the whole merge\n        if (changeStart <= mergeStart && changeEnd >= mergeEnd) {\n          this.removed = true;\n          return false; // removing the merge partially, including the beginning\n        } else if (mergeStart >= changeStart && mergeStart <= changeEnd) {\n          var removedOffset = changeEnd - mergeStart + 1;\n          var preRemovedOffset = Math.abs(shiftValue) - removedOffset;\n          this[index] -= preRemovedOffset + shiftValue;\n          this[span] -= removedOffset; // removing the middle part of the merge\n        } else if (mergeStart <= changeStart && mergeEnd >= changeEnd) {\n          this[span] += shiftValue; // removing the end part of the merge\n        } else if (mergeStart <= changeStart && mergeEnd >= changeStart && mergeEnd < changeEnd) {\n          var removedPart = mergeEnd - changeStart + 1;\n          this[span] -= removedPart;\n        }\n      }\n\n      return true;\n    }\n    /**\n     * Check if the second provided merged cell is \"farther\" in the provided direction.\n     *\n     * @param {MergedCellCoords} mergedCell The merged cell to check.\n     * @param {string} direction Drag direction.\n     * @returns {boolean|null} `true` if the second provided merged cell is \"farther\".\n     */\n\n  }, {\n    key: \"isFarther\",\n    value: function isFarther(mergedCell, direction) {\n      if (!mergedCell) {\n        return true;\n      }\n\n      if (direction === 'down') {\n        return mergedCell.row + mergedCell.rowspan - 1 < this.row + this.rowspan - 1;\n      } else if (direction === 'up') {\n        return mergedCell.row > this.row;\n      } else if (direction === 'right') {\n        return mergedCell.col + mergedCell.colspan - 1 < this.col + this.colspan - 1;\n      } else if (direction === 'left') {\n        return mergedCell.col > this.col;\n      }\n\n      return null;\n    }\n    /**\n     * Get the bottom row index of the merged cell.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getLastRow\",\n    value: function getLastRow() {\n      return this.row + this.rowspan - 1;\n    }\n    /**\n     * Get the rightmost column index of the merged cell.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getLastColumn\",\n    value: function getLastColumn() {\n      return this.col + this.colspan - 1;\n    }\n    /**\n     * Get the range coordinates of the merged cell.\n     *\n     * @returns {CellRange}\n     */\n\n  }, {\n    key: \"getRange\",\n    value: function getRange() {\n      return new CellRange(new CellCoords(this.row, this.col), new CellCoords(this.row, this.col), new CellCoords(this.getLastRow(), this.getLastColumn()));\n    }\n  }], [{\n    key: \"NEGATIVE_VALUES_WARNING\",\n    value: function NEGATIVE_VALUES_WARNING(newMergedCell) {\n      return toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"The merged cell declared with {row: \", \", col: \", \", \\n      rowspan: \", \", colspan: \", \"} contains negative values, which is \\n      not supported. It will not be added to the collection.\"], [\"The merged cell declared with {row: \", \", col: \", \",\\\\x20\\n      rowspan: \", \", colspan: \", \"} contains negative values, which is\\\\x20\\n      not supported. It will not be added to the collection.\"])), newMergedCell.row, newMergedCell.col, newMergedCell.rowspan, newMergedCell.colspan);\n    }\n    /**\n     * Get a warning message for when the declared merged cell data contains values exceeding the table limits.\n     *\n     * @param {object} newMergedCell Object containg information about the merged cells that was about to be added.\n     * @returns {string}\n     */\n\n  }, {\n    key: \"IS_OUT_OF_BOUNDS_WARNING\",\n    value: function IS_OUT_OF_BOUNDS_WARNING(newMergedCell) {\n      return toSingleLine(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral([\"The merged cell declared at [\", \", \", \"] is positioned \\n      (or positioned partially) outside of the table range. It was not added to the table, please fix your setup.\"], [\"The merged cell declared at [\", \", \", \"] is positioned\\\\x20\\n      (or positioned partially) outside of the table range. It was not added to the table, please fix your setup.\"])), newMergedCell.row, newMergedCell.col);\n    }\n    /**\n     * Get a warning message for when the declared merged cell data represents a single cell.\n     *\n     * @param {object} newMergedCell Object containg information about the merged cells that was about to be added.\n     * @returns {string}\n     */\n\n  }, {\n    key: \"IS_SINGLE_CELL\",\n    value: function IS_SINGLE_CELL(newMergedCell) {\n      return toSingleLine(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral([\"The merged cell declared at [\", \", \", \"] has both \\\"rowspan\\\" \\n      and \\\"colspan\\\" declared as \\\"1\\\", which makes it a single cell. It cannot be added to the collection.\"], [\"The merged cell declared at [\", \", \", \"] has both \\\"rowspan\\\"\\\\x20\\n      and \\\"colspan\\\" declared as \\\"1\\\", which makes it a single cell. It cannot be added to the collection.\"])), newMergedCell.row, newMergedCell.col);\n    }\n    /**\n     * Get a warning message for when the declared merged cell data contains \"colspan\" or \"rowspan\", that equals 0.\n     *\n     * @param {object} newMergedCell Object containg information about the merged cells that was about to be added.\n     * @returns {string}\n     */\n\n  }, {\n    key: \"ZERO_SPAN_WARNING\",\n    value: function ZERO_SPAN_WARNING(newMergedCell) {\n      return toSingleLine(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral([\"The merged cell declared at [\", \", \", \"] has \\\"rowspan\\\" \\n      or \\\"colspan\\\" declared as \\\"0\\\", which is not supported. It cannot be added to the collection.\"], [\"The merged cell declared at [\", \", \", \"] has \\\"rowspan\\\"\\\\x20\\n      or \\\"colspan\\\" declared as \\\"0\\\", which is not supported. It cannot be added to the collection.\"])), newMergedCell.row, newMergedCell.col);\n    }\n    /**\n     * Check whether the values provided for a merged cell contain any negative values.\n     *\n     * @param {object} mergedCellInfo Object containing the `row`, `col`, `rowspan` and `colspan` properties.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"containsNegativeValues\",\n    value: function containsNegativeValues(mergedCellInfo) {\n      return mergedCellInfo.row < 0 || mergedCellInfo.col < 0 || mergedCellInfo.rowspan < 0 || mergedCellInfo.colspan < 0;\n    }\n    /**\n     * Check whether the provided merged cell information object represents a single cell.\n     *\n     * @private\n     * @param {object} mergedCellInfo An object with `row`, `col`, `rowspan` and `colspan` properties.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSingleCell\",\n    value: function isSingleCell(mergedCellInfo) {\n      return mergedCellInfo.colspan === 1 && mergedCellInfo.rowspan === 1;\n    }\n    /**\n     * Check whether the provided merged cell information object contains a rowspan or colspan of 0.\n     *\n     * @private\n     * @param {object} mergedCellInfo An object with `row`, `col`, `rowspan` and `colspan` properties.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"containsZeroSpan\",\n    value: function containsZeroSpan(mergedCellInfo) {\n      return mergedCellInfo.colspan === 0 || mergedCellInfo.rowspan === 0;\n    }\n    /**\n     * Check whether the provided merged cell object is to be declared out of bounds of the table.\n     *\n     * @param {object} mergeCell Object containing the `row`, `col`, `rowspan` and `colspan` properties.\n     * @param {number} rowCount Number of rows in the table.\n     * @param {number} columnCount Number of rows in the table.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isOutOfBounds\",\n    value: function isOutOfBounds(mergeCell, rowCount, columnCount) {\n      return mergeCell.row < 0 || mergeCell.col < 0 || mergeCell.row >= rowCount || mergeCell.row + mergeCell.rowspan - 1 >= rowCount || mergeCell.col >= columnCount || mergeCell.col + mergeCell.colspan - 1 >= columnCount;\n    }\n  }]);\n\n  return MergedCellCoords;\n}();\n\nexport default MergedCellCoords;", "import \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\n\n/**\n * Apply the `colspan`/`rowspan` properties.\n *\n * @param {HTMLElement} TD The soon-to-be-modified cell.\n * @param {MergedCellCoords} mergedCellInfo The merged cell in question.\n * @param {number} row Row index.\n * @param {number} col Column index.\n */\nexport function applySpanProperties(TD, mergedCellInfo, row, col) {\n  if (mergedCellInfo) {\n    if (mergedCellInfo.row === row && mergedCellInfo.col === col) {\n      TD.setAttribute('rowspan', mergedCellInfo.rowspan.toString());\n      TD.setAttribute('colspan', mergedCellInfo.colspan.toString());\n    } else {\n      TD.removeAttribute('rowspan');\n      TD.removeAttribute('colspan');\n      TD.style.display = 'none';\n    }\n  } else {\n    TD.removeAttribute('rowspan');\n    TD.removeAttribute('colspan');\n    TD.style.display = '';\n  }\n}", "function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { extend } from \"../../../helpers/object.mjs\";\nimport { CellCoords, CellRange } from \"../../../3rdparty/walkontable/src/index.mjs\";\nimport { arrayEach } from \"../../../helpers/array.mjs\";\n/**\n * Class responsible for all of the Autofill-related operations on merged cells.\n *\n * @private\n * @class AutofillCalculations\n */\n\nvar AutofillCalculations = /*#__PURE__*/function () {\n  function AutofillCalculations(plugin) {\n    _classCallCheck(this, AutofillCalculations);\n\n    /**\n     * Reference to the Merge Cells plugin.\n     *\n     * @type {MergeCells}\n     */\n    this.plugin = plugin;\n    /**\n     * Reference to the MergedCellsCollection class instance.\n     *\n     * @type {MergedCellsCollection}\n     */\n\n    this.mergedCellsCollection = this.plugin.mergedCellsCollection;\n    /**\n     * Cache of the currently processed autofill data.\n     *\n     * @private\n     * @type {object}\n     */\n\n    this.currentFillData = null;\n  }\n  /**\n   * Correct the provided selection area, so it's not selecting only a part of a merged cell.\n   *\n   * @param {Array} selectionArea The selection to correct.\n   */\n\n\n  _createClass(AutofillCalculations, [{\n    key: \"correctSelectionAreaSize\",\n    value: function correctSelectionAreaSize(selectionArea) {\n      if (selectionArea[0] === selectionArea[2] && selectionArea[1] === selectionArea[3]) {\n        var mergedCell = this.mergedCellsCollection.get(selectionArea[0], selectionArea[1]);\n\n        if (mergedCell) {\n          selectionArea[2] = selectionArea[0] + mergedCell.rowspan - 1;\n          selectionArea[3] = selectionArea[1] + mergedCell.colspan - 1;\n        }\n      }\n    }\n    /**\n     * Get the direction of the autofill process.\n     *\n     * @param {Array} selectionArea The selection area.\n     * @param {Array} finalArea The final area (base + drag).\n     * @returns {string} `up`, `down`, `left` or `right`.\n     */\n\n  }, {\n    key: \"getDirection\",\n    value: function getDirection(selectionArea, finalArea) {\n      var direction = null;\n\n      if (finalArea[0] === selectionArea[0] && finalArea[1] === selectionArea[1] && finalArea[3] === selectionArea[3]) {\n        direction = 'down';\n      } else if (finalArea[2] === selectionArea[2] && finalArea[1] === selectionArea[1] && finalArea[3] === selectionArea[3]) {\n        direction = 'up';\n      } else if (finalArea[1] === selectionArea[1] && finalArea[2] === selectionArea[2]) {\n        direction = 'right';\n      } else {\n        direction = 'left';\n      }\n\n      return direction;\n    }\n    /**\n     * Snap the drag area to the farthest merged cell, so it won't clip any of the merged cells.\n     *\n     * @param {Array} baseArea The base selected area.\n     * @param {Array} dragArea The drag area.\n     * @param {string} dragDirection The autofill drag direction.\n     * @param {Array} foundMergedCells MergeCellCoords found in the base selection area.\n     * @returns {Array} The new drag area.\n     */\n\n  }, {\n    key: \"snapDragArea\",\n    value: function snapDragArea(baseArea, dragArea, dragDirection, foundMergedCells) {\n      var newDragArea = dragArea.slice(0);\n      var fillSize = this.getAutofillSize(baseArea, dragArea, dragDirection);\n\n      var _baseArea = _slicedToArray(baseArea, 4),\n          baseAreaStartRow = _baseArea[0],\n          baseAreaStartColumn = _baseArea[1],\n          baseAreaEndRow = _baseArea[2],\n          baseAreaEndColumn = _baseArea[3];\n\n      var verticalDirection = ['up', 'down'].indexOf(dragDirection) > -1;\n      var fullCycle = verticalDirection ? baseAreaEndRow - baseAreaStartRow + 1 : baseAreaEndColumn - baseAreaStartColumn + 1;\n      var fulls = Math.floor(fillSize / fullCycle) * fullCycle;\n      var partials = fillSize - fulls;\n      var farthestCollection = this.getFarthestCollection(baseArea, dragArea, dragDirection, foundMergedCells);\n\n      if (farthestCollection) {\n        if (dragDirection === 'down') {\n          var fill = farthestCollection.row + farthestCollection.rowspan - baseAreaStartRow - partials;\n          var newLimit = newDragArea[2] + fill;\n\n          if (newLimit >= this.plugin.hot.countRows()) {\n            newDragArea[2] -= partials;\n          } else {\n            newDragArea[2] += partials ? fill : 0;\n          }\n        } else if (dragDirection === 'right') {\n          var _fill = farthestCollection.col + farthestCollection.colspan - baseAreaStartColumn - partials;\n\n          var _newLimit = newDragArea[3] + _fill;\n\n          if (_newLimit >= this.plugin.hot.countCols()) {\n            newDragArea[3] -= partials;\n          } else {\n            newDragArea[3] += partials ? _fill : 0;\n          }\n        } else if (dragDirection === 'up') {\n          var _fill2 = baseAreaEndRow - partials - farthestCollection.row + 1;\n\n          var _newLimit2 = newDragArea[0] + _fill2;\n\n          if (_newLimit2 < 0) {\n            newDragArea[0] += partials;\n          } else {\n            newDragArea[0] -= partials ? _fill2 : 0;\n          }\n        } else if (dragDirection === 'left') {\n          var _fill3 = baseAreaEndColumn - partials - farthestCollection.col + 1;\n\n          var _newLimit3 = newDragArea[1] + _fill3;\n\n          if (_newLimit3 < 0) {\n            newDragArea[1] += partials;\n          } else {\n            newDragArea[1] -= partials ? _fill3 : 0;\n          }\n        }\n      }\n\n      this.updateCurrentFillCache({\n        baseArea: baseArea,\n        dragDirection: dragDirection,\n        foundMergedCells: foundMergedCells,\n        fillSize: fillSize,\n        dragArea: newDragArea,\n        cycleLength: fullCycle\n      });\n      return newDragArea;\n    }\n    /**\n     * Update the current fill cache with the provided object.\n     *\n     * @private\n     * @param {object} updateObject The current filled object cache.\n     */\n\n  }, {\n    key: \"updateCurrentFillCache\",\n    value: function updateCurrentFillCache(updateObject) {\n      if (!this.currentFillData) {\n        this.currentFillData = {};\n      }\n\n      extend(this.currentFillData, updateObject);\n    }\n    /**\n     * Get the \"length\" of the drag area.\n     *\n     * @private\n     * @param {Array} baseArea The base selection area.\n     * @param {Array} dragArea The drag area (containing the base area).\n     * @param {string} direction The drag direction.\n     * @returns {number|null} The \"length\" (height or width, depending on the direction) of the drag.\n     */\n\n  }, {\n    key: \"getAutofillSize\",\n    value: function getAutofillSize(baseArea, dragArea, direction) {\n      var _baseArea2 = _slicedToArray(baseArea, 4),\n          baseAreaStartRow = _baseArea2[0],\n          baseAreaStartColumn = _baseArea2[1],\n          baseAreaEndRow = _baseArea2[2],\n          baseAreaEndColumn = _baseArea2[3];\n\n      var _dragArea = _slicedToArray(dragArea, 4),\n          dragAreaStartRow = _dragArea[0],\n          dragAreaStartColumn = _dragArea[1],\n          dragAreaEndRow = _dragArea[2],\n          dragAreaEndColumn = _dragArea[3];\n\n      switch (direction) {\n        case 'up':\n          return baseAreaStartRow - dragAreaStartRow;\n\n        case 'down':\n          return dragAreaEndRow - baseAreaEndRow;\n\n        case 'left':\n          return baseAreaStartColumn - dragAreaStartColumn;\n\n        case 'right':\n          return dragAreaEndColumn - baseAreaEndColumn;\n\n        default:\n          return null;\n      }\n    }\n    /**\n     * Trim the default drag area (containing the selection area) to the drag-only area.\n     *\n     * @private\n     * @param {Array} baseArea The base selection area.\n     * @param {Array} dragArea The base selection area extended by the drag area.\n     * @param {string} direction Drag direction.\n     * @returns {Array|null} Array representing the drag area coordinates.\n     */\n\n  }, {\n    key: \"getDragArea\",\n    value: function getDragArea(baseArea, dragArea, direction) {\n      var _baseArea3 = _slicedToArray(baseArea, 4),\n          baseAreaStartRow = _baseArea3[0],\n          baseAreaStartColumn = _baseArea3[1],\n          baseAreaEndRow = _baseArea3[2],\n          baseAreaEndColumn = _baseArea3[3];\n\n      var _dragArea2 = _slicedToArray(dragArea, 4),\n          dragAreaStartRow = _dragArea2[0],\n          dragAreaStartColumn = _dragArea2[1],\n          dragAreaEndRow = _dragArea2[2],\n          dragAreaEndColumn = _dragArea2[3];\n\n      switch (direction) {\n        case 'up':\n          return [dragAreaStartRow, dragAreaStartColumn, baseAreaStartRow - 1, baseAreaEndColumn];\n\n        case 'down':\n          return [baseAreaEndRow + 1, baseAreaStartColumn, dragAreaEndRow, baseAreaEndColumn];\n\n        case 'left':\n          return [dragAreaStartRow, dragAreaStartColumn, baseAreaEndRow, baseAreaStartColumn - 1];\n\n        case 'right':\n          return [baseAreaStartRow, baseAreaEndColumn + 1, dragAreaEndRow, dragAreaEndColumn];\n\n        default:\n          return null;\n      }\n    }\n    /**\n     * Get the to-be-farthest merged cell in the newly filled area.\n     *\n     * @private\n     * @param {Array} baseArea The base selection area.\n     * @param {Array} dragArea The drag area (containing the base area).\n     * @param {string} direction The drag direction.\n     * @param {Array} mergedCellArray Array of the merged cells found in the base area.\n     * @returns {MergedCellCoords|null}\n     */\n\n  }, {\n    key: \"getFarthestCollection\",\n    value: function getFarthestCollection(baseArea, dragArea, direction, mergedCellArray) {\n      var _baseArea4 = _slicedToArray(baseArea, 4),\n          baseAreaStartRow = _baseArea4[0],\n          baseAreaStartColumn = _baseArea4[1],\n          baseAreaEndRow = _baseArea4[2],\n          baseAreaEndColumn = _baseArea4[3];\n\n      var verticalDirection = ['up', 'down'].indexOf(direction) > -1;\n      var baseEnd = verticalDirection ? baseAreaEndRow : baseAreaEndColumn;\n      var baseStart = verticalDirection ? baseAreaStartRow : baseAreaStartColumn;\n      var fillSize = this.getAutofillSize(baseArea, dragArea, direction);\n      var fullCycle = verticalDirection ? baseAreaEndRow - baseAreaStartRow + 1 : baseAreaEndColumn - baseAreaStartColumn + 1;\n      var fulls = Math.floor(fillSize / fullCycle) * fullCycle;\n      var partials = fillSize - fulls;\n      var inclusionFunctionName = null;\n      var farthestCollection = null;\n      var endOfDragRecreationIndex = null;\n\n      switch (direction) {\n        case 'up':\n          inclusionFunctionName = 'includesVertically';\n          endOfDragRecreationIndex = baseEnd - partials + 1;\n          break;\n\n        case 'left':\n          inclusionFunctionName = 'includesHorizontally';\n          endOfDragRecreationIndex = baseEnd - partials + 1;\n          break;\n\n        case 'down':\n          inclusionFunctionName = 'includesVertically';\n          endOfDragRecreationIndex = baseStart + partials - 1;\n          break;\n\n        case 'right':\n          inclusionFunctionName = 'includesHorizontally';\n          endOfDragRecreationIndex = baseStart + partials - 1;\n          break;\n\n        default:\n      }\n\n      arrayEach(mergedCellArray, function (currentCollection) {\n        if (currentCollection[inclusionFunctionName](endOfDragRecreationIndex) && currentCollection.isFarther(farthestCollection, direction)) {\n          farthestCollection = currentCollection;\n        }\n      });\n      return farthestCollection;\n    }\n    /**\n     * Recreate the merged cells after the autofill process.\n     *\n     * @param {Array} changes Changes made.\n     */\n\n  }, {\n    key: \"recreateAfterDataPopulation\",\n    value: function recreateAfterDataPopulation(changes) {\n      if (!this.currentFillData) {\n        return;\n      }\n\n      var fillRange = this.getRangeFromChanges(changes);\n      var foundMergedCells = this.currentFillData.foundMergedCells;\n      var dragDirection = this.currentFillData.dragDirection;\n\n      var inBounds = function inBounds(current, offset) {\n        switch (dragDirection) {\n          case 'up':\n            return current.row - offset >= fillRange.from.row;\n\n          case 'down':\n            return current.row + current.rowspan - 1 + offset <= fillRange.to.row;\n\n          case 'left':\n            return current.col - offset >= fillRange.from.column;\n\n          case 'right':\n            return current.col + current.colspan - 1 + offset <= fillRange.to.column;\n\n          default:\n            return null;\n        }\n      };\n\n      var fillOffset = 0;\n      var current = null;\n      var multiplier = 1;\n\n      do {\n        for (var j = 0; j < foundMergedCells.length; j += 1) {\n          current = foundMergedCells[j];\n          fillOffset = multiplier * this.currentFillData.cycleLength;\n\n          if (inBounds(current, fillOffset)) {\n            switch (dragDirection) {\n              case 'up':\n                this.plugin.mergedCellsCollection.add({\n                  row: current.row - fillOffset,\n                  rowspan: current.rowspan,\n                  col: current.col,\n                  colspan: current.colspan\n                });\n                break;\n\n              case 'down':\n                this.plugin.mergedCellsCollection.add({\n                  row: current.row + fillOffset,\n                  rowspan: current.rowspan,\n                  col: current.col,\n                  colspan: current.colspan\n                });\n                break;\n\n              case 'left':\n                this.plugin.mergedCellsCollection.add({\n                  row: current.row,\n                  rowspan: current.rowspan,\n                  col: current.col - fillOffset,\n                  colspan: current.colspan\n                });\n                break;\n\n              case 'right':\n                this.plugin.mergedCellsCollection.add({\n                  row: current.row,\n                  rowspan: current.rowspan,\n                  col: current.col + fillOffset,\n                  colspan: current.colspan\n                });\n                break;\n\n              default:\n            }\n          }\n\n          if (j === foundMergedCells.length - 1) {\n            multiplier += 1;\n          }\n        }\n      } while (inBounds(current, fillOffset));\n\n      this.currentFillData = null;\n      this.plugin.hot.render();\n    }\n    /**\n     * Get the drag range from the changes made.\n     *\n     * @private\n     * @param {Array} changes The changes made.\n     * @returns {object} Object with `from` and `to` properties, both containing `row` and `column` keys.\n     */\n\n  }, {\n    key: \"getRangeFromChanges\",\n    value: function getRangeFromChanges(changes) {\n      var _this = this;\n\n      var rows = {\n        min: null,\n        max: null\n      };\n      var columns = {\n        min: null,\n        max: null\n      };\n      arrayEach(changes, function (change) {\n        var rowIndex = change[0];\n\n        var columnIndex = _this.plugin.hot.propToCol(change[1]);\n\n        if (rows.min === null || rowIndex < rows.min) {\n          rows.min = rowIndex;\n        }\n\n        if (rows.max === null || rowIndex > rows.max) {\n          rows.max = rowIndex;\n        }\n\n        if (columns.min === null || columnIndex < columns.min) {\n          columns.min = columnIndex;\n        }\n\n        if (columns.max === null || columnIndex > columns.max) {\n          columns.max = columnIndex;\n        }\n      });\n      return {\n        from: {\n          row: rows.min,\n          column: columns.min\n        },\n        to: {\n          row: rows.max,\n          column: columns.max\n        }\n      };\n    }\n    /**\n     * Check if the drag area contains any merged cells.\n     *\n     * @param {Array} baseArea The base selection area.\n     * @param {Array} fullArea The base area extended by the drag area.\n     * @param {string} direction Drag direction.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"dragAreaOverlapsCollections\",\n    value: function dragAreaOverlapsCollections(baseArea, fullArea, direction) {\n      var dragArea = this.getDragArea(baseArea, fullArea, direction);\n\n      var _dragArea3 = _slicedToArray(dragArea, 4),\n          dragAreaStartRow = _dragArea3[0],\n          dragAreaStartColumn = _dragArea3[1],\n          dragAreaEndRow = _dragArea3[2],\n          dragAreaEndColumn = _dragArea3[3];\n\n      var topLeft = new CellCoords(dragAreaStartRow, dragAreaStartColumn);\n      var bottomRight = new CellCoords(dragAreaEndRow, dragAreaEndColumn);\n      var dragRange = new CellRange(topLeft, topLeft, bottomRight);\n      return !!this.mergedCellsCollection.getWithinRange(dragRange, true);\n    }\n  }]);\n\n  return AutofillCalculations;\n}();\n\nexport default AutofillCalculations;", "import \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { CellCoords, CellRange } from \"../../../3rdparty/walkontable/src/index.mjs\";\n/**\n * Class responsible for all of the Selection-related operations on merged cells.\n *\n * @private\n * @class SelectionCalculations\n */\n\nvar SelectionCalculations = /*#__PURE__*/function () {\n  function SelectionCalculations(plugin) {\n    _classCallCheck(this, SelectionCalculations);\n\n    /**\n     * Reference to the Merge Cells plugin.\n     *\n     * @type {MergeCells}\n     */\n    this.plugin = plugin;\n    /**\n     * Class name used for fully selected merged cells.\n     *\n     * @type {string}\n     */\n\n    this.fullySelectedMergedCellClassName = 'fullySelectedMergedCell';\n  }\n  /**\n   * \"Snap\" the delta value according to defined merged cells. (In other words, compensate the rowspan -\n   * e.g. Going up with `delta.row = -1` over a merged cell with `rowspan = 3`, `delta.row` should change to `-3`.).\n   *\n   * @param {object} delta The delta object containing `row` and `col` properties.\n   * @param {CellRange} selectionRange The selection range.\n   * @param {object} mergedCell A merged cell object.\n   */\n\n\n  _createClass(SelectionCalculations, [{\n    key: \"snapDelta\",\n    value: function snapDelta(delta, selectionRange, mergedCell) {\n      var cellCoords = selectionRange.to;\n      var newRow = cellCoords.row + delta.row;\n      var newColumn = cellCoords.col + delta.col;\n\n      if (delta.row) {\n        this.jumpOverMergedCell(delta, mergedCell, newRow);\n      } else if (delta.col) {\n        this.jumpOverMergedCell(delta, mergedCell, newColumn);\n      }\n    }\n    /**\n     * \"Jump\" over the merged cell (compensate for the indexes within the merged cell to get past it).\n     *\n     * @private\n     * @param {object} delta The delta object.\n     * @param {MergedCellCoords} mergedCell The merge cell object.\n     * @param {number} newIndex New row/column index, created with the delta.\n     */\n\n  }, {\n    key: \"jumpOverMergedCell\",\n    value: function jumpOverMergedCell(delta, mergedCell, newIndex) {\n      var flatDelta = delta.row || delta.col;\n      var includesIndex = null;\n      var firstIndex = null;\n      var lastIndex = null;\n\n      if (delta.row) {\n        includesIndex = mergedCell.includesVertically(newIndex);\n        firstIndex = mergedCell.row;\n        lastIndex = mergedCell.getLastRow();\n      } else if (delta.col) {\n        includesIndex = mergedCell.includesHorizontally(newIndex);\n        firstIndex = mergedCell.col;\n        lastIndex = mergedCell.getLastColumn();\n      }\n\n      if (flatDelta === 0) {\n        return;\n      } else if (flatDelta > 0) {\n        if (includesIndex && newIndex !== firstIndex) {\n          flatDelta += lastIndex - newIndex + 1;\n        }\n      } else if (includesIndex && newIndex !== lastIndex) {\n        flatDelta -= newIndex - firstIndex + 1;\n      }\n\n      if (delta.row) {\n        delta.row = flatDelta;\n      } else if (delta.col) {\n        delta.col = flatDelta;\n      }\n    }\n    /**\n     * Get a selection range with `to` property incremented by the provided delta.\n     *\n     * @param {CellRange} oldSelectionRange The base selection range.\n     * @param {object} delta The delta object with `row` and `col` properties.\n     * @returns {CellRange} A new `CellRange` object.\n     */\n\n  }, {\n    key: \"getUpdatedSelectionRange\",\n    value: function getUpdatedSelectionRange(oldSelectionRange, delta) {\n      return new CellRange(oldSelectionRange.highlight, oldSelectionRange.from, new CellCoords(oldSelectionRange.to.row + delta.row, oldSelectionRange.to.col + delta.col));\n    }\n    /**\n     * Generate an additional class name for the entirely-selected merged cells.\n     *\n     * @param {number} currentRow Visual row index of the currently processed cell.\n     * @param {number} currentColumn Visual column index of the currently cell.\n     * @param {Array} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow, endColumn]`.\n     * @param {number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n     * @returns {string|undefined} A `String`, which will act as an additional `className` to be added to the currently processed cell.\n     */\n\n  }, {\n    key: \"getSelectedMergedCellClassName\",\n    value: function getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel) {\n      var startRow = Math.min(cornersOfSelection[0], cornersOfSelection[2]);\n      var startColumn = Math.min(cornersOfSelection[1], cornersOfSelection[3]);\n      var endRow = Math.max(cornersOfSelection[0], cornersOfSelection[2]);\n      var endColumn = Math.max(cornersOfSelection[1], cornersOfSelection[3]);\n\n      if (layerLevel === void 0) {\n        return;\n      }\n\n      var isFirstRenderableMergedCell = this.plugin.mergedCellsCollection.isFirstRenderableMergedCell(currentRow, currentColumn); // We add extra classes just to the first renderable merged cell.\n\n      if (!isFirstRenderableMergedCell) {\n        return;\n      }\n\n      var mergedCell = this.plugin.mergedCellsCollection.get(currentRow, currentColumn);\n\n      if (!mergedCell) {\n        return;\n      }\n\n      var mergeRowEnd = mergedCell.getLastRow();\n      var mergeColumnEnd = mergedCell.getLastColumn();\n      var fullMergeAreaWithinSelection = startRow <= mergedCell.row && startColumn <= mergedCell.col && endRow >= mergeRowEnd && endColumn >= mergeColumnEnd;\n\n      if (fullMergeAreaWithinSelection) {\n        return \"\".concat(this.fullySelectedMergedCellClassName, \"-\").concat(layerLevel);\n      } else if (this.plugin.selectionCalculations.isMergeCellFullySelected(mergedCell, this.plugin.hot.getSelectedRange())) {\n        // eslint-disable-line max-len\n        return \"\".concat(this.fullySelectedMergedCellClassName, \"-multiple\");\n      }\n    }\n    /**\n     * Check if the provided merged cell is fully selected (by one or many layers of selection).\n     *\n     * @param {MergedCellCoords} mergedCell The merged cell to be processed.\n     * @param {CellRange[]} selectionRangesArray Array of selection ranges.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isMergeCellFullySelected\",\n    value: function isMergeCellFullySelected(mergedCell, selectionRangesArray) {\n      var mergedCellIndividualCoords = [];\n\n      if (!selectionRangesArray || !mergedCell) {\n        return false;\n      }\n\n      for (var r = 0; r < mergedCell.rowspan; r += 1) {\n        for (var c = 0; c < mergedCell.colspan; c += 1) {\n          mergedCellIndividualCoords.push(new CellCoords(mergedCell.row + r, mergedCell.col + c));\n        }\n      }\n\n      for (var i = 0; i < mergedCellIndividualCoords.length; i += 1) {\n        var insideSelections = [];\n\n        for (var s = 0; s < selectionRangesArray.length; s += 1) {\n          insideSelections[s] = selectionRangesArray[s].includes(mergedCellIndividualCoords[i]);\n        }\n\n        if (!insideSelections.includes(true)) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n    /**\n     * Generate an array of the entirely-selected merged cells' class names.\n     *\n     * @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.\n     */\n\n  }, {\n    key: \"getSelectedMergedCellClassNameToRemove\",\n    value: function getSelectedMergedCellClassNameToRemove() {\n      var classNames = [];\n\n      for (var i = 0; i <= 7; i += 1) {\n        classNames.push(\"\".concat(this.fullySelectedMergedCellClassName, \"-\").concat(i));\n      }\n\n      classNames.push(\"\".concat(this.fullySelectedMergedCellClassName, \"-multiple\"));\n      return classNames;\n    }\n  }]);\n\n  return SelectionCalculations;\n}();\n\nexport default SelectionCalculations;", "import * as C from \"../../../i18n/constants.mjs\";\nimport MergedCellCoords from \"../cellCoords.mjs\";\n/**\n * @param {*} plugin The plugin instance.\n * @returns {object}\n */\n\nexport default function toggleMergeItem(plugin) {\n  return {\n    key: 'mergeCells',\n    name: function name() {\n      var sel = this.getSelectedLast();\n\n      if (sel) {\n        var info = plugin.mergedCellsCollection.get(sel[0], sel[1]);\n\n        if (info.row === sel[0] && info.col === sel[1] && info.row + info.rowspan - 1 === sel[2] && info.col + info.colspan - 1 === sel[3]) {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNMERGE_CELLS);\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_MERGE_CELLS);\n    },\n    callback: function callback() {\n      plugin.toggleMergeOnSelection();\n    },\n    disabled: function disabled() {\n      var sel = this.getSelectedLast();\n\n      if (!sel) {\n        return true;\n      }\n\n      var isSingleCell = MergedCellCoords.isSingleCell({\n        row: sel[0],\n        col: sel[1],\n        rowspan: sel[2] - sel[0] + 1,\n        colspan: sel[3] - sel[1] + 1\n      });\n      return isSingleCell || this.selection.isSelectedByCorner();\n    },\n    hidden: false\n  };\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { ColumnSorting } from \"../columnSorting/index.mjs\";\nimport { registerRootComparator } from \"../columnSorting/sortService/index.mjs\";\nimport { wasHeaderClickedProperly } from \"../columnSorting/utils.mjs\";\nimport { isPressedCtrlKey } from \"../../utils/keyStateObserver.mjs\";\nimport { addClass, removeClass } from \"../../helpers/dom/element.mjs\";\nimport { rootComparator } from \"./rootComparator.mjs\";\nimport { warnAboutPluginsConflict } from \"./utils.mjs\";\nimport { getClassesToAdd, getClassesToRemove } from \"./domHelpers.mjs\";\nexport var PLUGIN_KEY = 'multiColumnSorting';\nexport var PLUGIN_PRIORITY = 170;\nvar APPEND_COLUMN_CONFIG_STRATEGY = 'append';\nvar CONFLICTED_PLUGIN_KEY = 'columnSorting';\nregisterRootComparator(PLUGIN_KEY, rootComparator);\n/**\n * @plugin MultiColumnSorting\n * @class MultiColumnSorting\n *\n * @description\n * This plugin sorts the view by columns (but does not sort the data source!). To enable the plugin, set the\n * {@link Options#multiColumnSorting} property to the correct value (see the examples below).\n *\n * @example\n * ```js\n * // as boolean\n * multiColumnSorting: true\n *\n * // as an object with initial sort config (sort ascending for column at index 1 and then sort descending for column at index 0)\n * multiColumnSorting: {\n *   initialConfig: [{\n *     column: 1,\n *     sortOrder: 'asc'\n *   }, {\n *     column: 0,\n *     sortOrder: 'desc'\n *   }]\n * }\n *\n * // as an object which define specific sorting options for all columns\n * multiColumnSorting: {\n *   sortEmptyCells: true, // true = the table sorts empty cells, false = the table moves all empty cells to the end of the table (by default)\n *   indicator: true, // true = shows indicator for all columns (by default), false = don't show indicator for columns\n *   headerAction: true, // true = allow to click on the headers to sort (by default), false = turn off possibility to click on the headers to sort\n *   compareFunctionFactory: function(sortOrder, columnMeta) {\n *     return function(value, nextValue) {\n *       // Some value comparisons which will return -1, 0 or 1...\n *     }\n *   }\n * }\n *\n * // as an object passed to the `column` property, allows specifying a custom options for the desired column.\n * // please take a look at documentation of `column` property: {@link Options#columns}\n * columns: [{\n *   multiColumnSorting: {\n *     indicator: false, // disable indicator for the first column,\n *     sortEmptyCells: true,\n *     headerAction: false, // clicks on the first column won't sort\n *     compareFunctionFactory: function(sortOrder, columnMeta) {\n *       return function(value, nextValue) {\n *         return 0; // Custom compare function for the first column (don't sort)\n *       }\n *     }\n *   }\n * }]\n * ```\n */\n\nexport var MultiColumnSorting = /*#__PURE__*/function (_ColumnSorting) {\n  _inherits(MultiColumnSorting, _ColumnSorting);\n\n  var _super = _createSuper(MultiColumnSorting);\n\n  function MultiColumnSorting(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, MultiColumnSorting);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Main settings key designed for the plugin.\n     *\n     * @private\n     * @type {string}\n     */\n\n    _this.pluginKey = PLUGIN_KEY;\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the Handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link MultiColumnSorting#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(MultiColumnSorting, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return _get(_getPrototypeOf(MultiColumnSorting.prototype), \"isEnabled\", this).call(this);\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      if (!this.enabled && this.hot.getSettings()[this.pluginKey] && this.hot.getSettings()[CONFLICTED_PLUGIN_KEY]) {\n        warnAboutPluginsConflict();\n      }\n\n      _get(_getPrototypeOf(MultiColumnSorting.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      _get(_getPrototypeOf(MultiColumnSorting.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Sorts the table by chosen columns and orders.\n     *\n     * @param {undefined|object|Array} sortConfig Single column sort configuration or full sort configuration (for all sorted columns).\n     * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n     * sort order (`asc` for ascending, `desc` for descending).\n     *\n     * **Note**: Please keep in mind that every call of `sort` function set an entirely new sort order. Previous sort configs aren't preserved.\n     *\n     * @example\n     * ```js\n     * // sort ascending first visual column\n     * hot.getPlugin('multiColumnSorting').sort({ column: 0, sortOrder: 'asc' });\n     *\n     * // sort first two visual column in the defined sequence\n     * hot.getPlugin('multiColumnSorting').sort([{\n     *   column: 1, sortOrder: 'asc'\n     * }, {\n     *   column: 0, sortOrder: 'desc'\n     * }]);\n     * ```\n     *\n     * @fires Hooks#beforeColumnSort\n     * @fires Hooks#afterColumnSort\n     */\n\n  }, {\n    key: \"sort\",\n    value: function sort(sortConfig) {\n      _get(_getPrototypeOf(MultiColumnSorting.prototype), \"sort\", this).call(this, sortConfig);\n    }\n    /**\n     * Clear the sort performed on the table.\n     */\n\n  }, {\n    key: \"clearSort\",\n    value: function clearSort() {\n      _get(_getPrototypeOf(MultiColumnSorting.prototype), \"clearSort\", this).call(this);\n    }\n    /**\n     * Checks if the table is sorted (any column have to be sorted).\n     *\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isSorted\",\n    value: function isSorted() {\n      return _get(_getPrototypeOf(MultiColumnSorting.prototype), \"isSorted\", this).call(this);\n    }\n    /**\n     * Get sort configuration for particular column or for all sorted columns. Objects contain `column` and `sortOrder` properties.\n     *\n     * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key. They are handled by the `sort` function.\n     *\n     * @param {number} [column] Visual column index.\n     * @returns {undefined|object|Array}\n     */\n\n  }, {\n    key: \"getSortConfig\",\n    value: function getSortConfig(column) {\n      return _get(_getPrototypeOf(MultiColumnSorting.prototype), \"getSortConfig\", this).call(this, column);\n    }\n    /**\n     * @description\n     * Warn: Useful mainly for providing server side sort implementation (see in the example below). It doesn't sort the data set. It just sets sort configuration for all sorted columns.\n     * Note: Please keep in mind that this method doesn't re-render the table.\n     *\n     * @example\n     * ```js\n     * beforeColumnSort: function(currentSortConfig, destinationSortConfigs) {\n     *   const columnSortPlugin = this.getPlugin('multiColumnSorting');\n     *\n     *   columnSortPlugin.setSortConfig(destinationSortConfigs);\n     *\n     *   // const newData = ... // Calculated data set, ie. from an AJAX call.\n     *\n     *   this.loadData(newData); // Load new data set and re-render the table.\n     *\n     *   return false; // The blockade for the default sort action.\n     * }\n     * ```\n     *\n     * @param {undefined|object|Array} sortConfig Single column sort configuration or full sort configuration (for all sorted columns).\n     * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n     * sort order (`asc` for ascending, `desc` for descending).\n     */\n\n  }, {\n    key: \"setSortConfig\",\n    value: function setSortConfig(sortConfig) {\n      _get(_getPrototypeOf(MultiColumnSorting.prototype), \"setSortConfig\", this).call(this, sortConfig);\n    }\n    /**\n     * Get normalized sort configs.\n     *\n     * @private\n     * @param {object|Array} [sortConfig=[]] Single column sort configuration or full sort configuration (for all sorted columns).\n     * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n     * sort order (`asc` for ascending, `desc` for descending).\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"getNormalizedSortConfigs\",\n    value: function getNormalizedSortConfigs() {\n      var sortConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n      if (Array.isArray(sortConfig)) {\n        return sortConfig;\n      }\n\n      return [sortConfig];\n    }\n    /**\n     * Update header classes.\n     *\n     * @private\n     * @param {HTMLElement} headerSpanElement Header span element.\n     * @param {...*} args Extra arguments for helpers.\n     */\n\n  }, {\n    key: \"updateHeaderClasses\",\n    value: function updateHeaderClasses(headerSpanElement) {\n      var _get2;\n\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      (_get2 = _get(_getPrototypeOf(MultiColumnSorting.prototype), \"updateHeaderClasses\", this)).call.apply(_get2, [this, headerSpanElement].concat(args));\n\n      removeClass(headerSpanElement, getClassesToRemove(headerSpanElement));\n\n      if (this.enabled !== false) {\n        addClass(headerSpanElement, getClassesToAdd.apply(void 0, args));\n      }\n    }\n    /**\n     * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called\n     * for `updateSettings` in specific situations.\n     *\n     * @private\n     * @param {object} newSettings New settings object.\n     */\n\n  }, {\n    key: \"onUpdateSettings\",\n    value: function onUpdateSettings(newSettings) {\n      if (this.hot.getSettings()[this.pluginKey] && this.hot.getSettings()[CONFLICTED_PLUGIN_KEY]) {\n        warnAboutPluginsConflict();\n      }\n\n      _get(_getPrototypeOf(MultiColumnSorting.prototype), \"onUpdateSettings\", this).call(this, newSettings);\n    }\n    /**\n     * Callback for the `onAfterOnCellMouseDown` hook.\n     *\n     * @private\n     * @param {Event} event Event which are provided by hook.\n     * @param {CellCoords} coords Visual coords of the selected cell.\n     */\n\n  }, {\n    key: \"onAfterOnCellMouseDown\",\n    value: function onAfterOnCellMouseDown(event, coords) {\n      if (wasHeaderClickedProperly(coords.row, coords.col, event) === false) {\n        return;\n      }\n\n      if (this.wasClickableHeaderClicked(event, coords.col)) {\n        if (isPressedCtrlKey()) {\n          this.hot.deselectCell();\n          this.hot.selectColumns(coords.col);\n          this.sort(this.getNextSortConfig(coords.col, APPEND_COLUMN_CONFIG_STRATEGY));\n        } else {\n          this.sort(this.getColumnNextConfig(coords.col));\n        }\n      }\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return MultiColumnSorting;\n}(ColumnSorting);", "import \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { getCompareFunctionFactory, DO_NOT_SWAP } from \"../columnSorting/sortService/index.mjs\";\n/**\n * Sort comparator handled by conventional sort algorithm.\n *\n * @param {Array} sortingOrders Sort orders (`asc` for ascending, `desc` for descending).\n * @param {Array} columnMetas Column meta objects.\n * @returns {Function}\n */\n\nexport function rootComparator(sortingOrders, columnMetas) {\n  return function (rowIndexWithValues, nextRowIndexWithValues) {\n    // We sort array of arrays. Single array is in form [rowIndex, ...values].\n    // We compare just values, stored at second index of array.\n    var _rowIndexWithValues = _toArray(rowIndexWithValues),\n        values = _rowIndexWithValues.slice(1);\n\n    var _nextRowIndexWithValu = _toArray(nextRowIndexWithValues),\n        nextValues = _nextRowIndexWithValu.slice(1);\n\n    return function getCompareResult(column) {\n      var sortingOrder = sortingOrders[column];\n      var columnMeta = columnMetas[column];\n      var value = values[column];\n      var nextValue = nextValues[column];\n      var pluginSettings = columnMeta.multiColumnSorting;\n      var compareFunctionFactory = pluginSettings.compareFunctionFactory ? pluginSettings.compareFunctionFactory : getCompareFunctionFactory(columnMeta.type);\n      var compareResult = compareFunctionFactory(sortingOrder, columnMeta, pluginSettings)(value, nextValue);\n\n      if (compareResult === DO_NOT_SWAP) {\n        var nextSortedColumn = column + 1;\n\n        if (typeof columnMetas[nextSortedColumn] !== 'undefined') {\n          return getCompareResult(nextSortedColumn);\n        }\n      }\n\n      return compareResult;\n    }(0);\n  };\n}", "import \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\n\nvar _templateObject;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nimport { warn } from \"../../helpers/console.mjs\";\nimport { toSingleLine } from \"../../helpers/templateLiteralTag.mjs\";\n/**\n * Warn users about problems when using `columnSorting` and `multiColumnSorting` plugins simultaneously.\n */\n\nexport function warnAboutPluginsConflict() {\n  warn(toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"Plugins `columnSorting` and `multiColumnSorting` should not be enabled simultaneously. \\n    Only `multiColumnSorting` will work.\"], [\"Plugins \\\\`columnSorting\\\\` and \\\\`multiColumnSorting\\\\` should not be enabled simultaneously. \\n    Only \\\\`multiColumnSorting\\\\` will work.\"]))));\n}", "import \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/es.regexp.constructor.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nvar COLUMN_ORDER_PREFIX = 'sort';\n/**\n * Get CSS classes which should be added to particular column header.\n *\n * @param {object} columnStatesManager Instance of column state manager.\n * @param {number} column Visual column index.\n * @param {boolean} showSortIndicator Indicates if indicator should be shown for the particular column.\n * @returns {Array} Array of CSS classes.\n */\n\nexport function getClassesToAdd(columnStatesManager, column, showSortIndicator) {\n  var cssClasses = [];\n\n  if (showSortIndicator === false) {\n    return cssClasses;\n  }\n\n  if (columnStatesManager.isColumnSorted(column) && columnStatesManager.getNumberOfSortedColumns() > 1) {\n    cssClasses.push(\"\".concat(COLUMN_ORDER_PREFIX, \"-\").concat(columnStatesManager.getIndexOfColumnInSortQueue(column) + 1));\n  }\n\n  return cssClasses;\n}\n/**\n * Get CSS classes which should be removed from column header.\n *\n * @param {HTMLElement} htmlElement An element to process.\n * @returns {Array} Array of CSS classes.\n */\n\nexport function getClassesToRemove(htmlElement) {\n  var cssClasses = htmlElement.className.split(' ');\n  var sortSequenceRegExp = new RegExp(\"^\".concat(COLUMN_ORDER_PREFIX, \"-[0-9]{1,2}$\"));\n  return cssClasses.filter(function (cssClass) {\n    return sortSequenceRegExp.test(cssClass);\n  });\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { getWindowScrollTop, hasClass, getWindowScrollLeft } from \"../../helpers/dom/element.mjs\";\nimport { isMobileBrowser } from \"../../helpers/browser.mjs\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport EventManager from \"../../eventManager.mjs\";\nimport { CellCoords } from \"../../3rdparty/walkontable/src/index.mjs\";\nexport var PLUGIN_KEY = 'multipleSelectionHandles';\nexport var PLUGIN_PRIORITY = 160;\n/**\n * @private\n * @plugin MultipleSelectionHandles\n * @class MultipleSelectionHandles\n */\n\nexport var MultipleSelectionHandles = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(MultipleSelectionHandles, _BasePlugin);\n\n  var _super = _createSuper(MultipleSelectionHandles);\n\n  /**\n   * @param {object} hotInstance The handsontable instance.\n   */\n  function MultipleSelectionHandles(hotInstance) {\n    var _this2;\n\n    _classCallCheck(this, MultipleSelectionHandles);\n\n    _this2 = _super.call(this, hotInstance);\n    /**\n     * @type {Array}\n     */\n\n    _this2.dragged = [];\n    /**\n     * Instance of EventManager.\n     *\n     * @type {EventManager}\n     */\n\n    _this2.eventManager = null;\n    /**\n     * @type {null}\n     */\n\n    _this2.lastSetCell = null;\n    return _this2;\n  }\n  /**\n   * Check if the plugin is enabled in the handsontable settings.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(MultipleSelectionHandles, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return isMobileBrowser();\n    }\n    /**\n     * Enable plugin for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      if (this.enabled) {\n        return;\n      }\n\n      if (!this.eventManager) {\n        this.eventManager = new EventManager(this);\n      }\n\n      this.registerListeners();\n\n      _get(_getPrototypeOf(MultipleSelectionHandles.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Bind the touch events.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"registerListeners\",\n    value: function registerListeners() {\n      var _this3 = this;\n\n      var _this = this;\n\n      var rootElement = this.hot.rootElement;\n      /**\n       * @private\n       * @param {string} query Query for the position.\n       * @returns {boolean}\n       */\n\n      function removeFromDragged(query) {\n        if (_this.dragged.length === 1) {\n          // clear array\n          _this.dragged.splice(0, _this.dragged.length);\n\n          return true;\n        }\n\n        var entryPosition = _this.dragged.indexOf(query);\n\n        if (entryPosition === -1) {\n          return false;\n        } else if (entryPosition === 0) {\n          _this.dragged = _this.dragged.slice(0, 1);\n        } else if (entryPosition === 1) {\n          _this.dragged = _this.dragged.slice(-1);\n        }\n      }\n\n      this.eventManager.addEventListener(rootElement, 'touchstart', function (event) {\n        var selectedRange;\n\n        if (hasClass(event.target, 'topLeftSelectionHandle-HitArea')) {\n          selectedRange = _this.hot.getSelectedRangeLast();\n\n          _this.dragged.push('topLeft');\n\n          _this.touchStartRange = {\n            width: selectedRange.getWidth(),\n            height: selectedRange.getHeight(),\n            direction: selectedRange.getDirection()\n          };\n          event.preventDefault();\n          return false;\n        } else if (hasClass(event.target, 'bottomRightSelectionHandle-HitArea')) {\n          selectedRange = _this.hot.getSelectedRangeLast();\n\n          _this.dragged.push('bottomRight');\n\n          _this.touchStartRange = {\n            width: selectedRange.getWidth(),\n            height: selectedRange.getHeight(),\n            direction: selectedRange.getDirection()\n          };\n          event.preventDefault();\n          return false;\n        }\n      });\n      this.eventManager.addEventListener(rootElement, 'touchend', function (event) {\n        if (hasClass(event.target, 'topLeftSelectionHandle-HitArea')) {\n          removeFromDragged.call(_this, 'topLeft');\n          _this.touchStartRange = void 0;\n          event.preventDefault();\n          return false;\n        } else if (hasClass(event.target, 'bottomRightSelectionHandle-HitArea')) {\n          removeFromDragged.call(_this, 'bottomRight');\n          _this.touchStartRange = void 0;\n          event.preventDefault();\n          return false;\n        }\n      });\n      this.eventManager.addEventListener(rootElement, 'touchmove', function (event) {\n        var _this3$hot = _this3.hot,\n            rootWindow = _this3$hot.rootWindow,\n            rootDocument = _this3$hot.rootDocument;\n        var scrollTop = getWindowScrollTop(rootWindow);\n        var scrollLeft = getWindowScrollLeft(rootWindow);\n        var targetCoords;\n        var selectedRange;\n        var rangeWidth;\n        var rangeHeight;\n        var rangeDirection;\n        var newRangeCoords;\n\n        if (_this.dragged.length === 0) {\n          return;\n        }\n\n        var endTarget = rootDocument.elementFromPoint(event.touches[0].screenX - scrollLeft, event.touches[0].screenY - scrollTop);\n\n        if (!endTarget || endTarget === _this.lastSetCell) {\n          return;\n        }\n\n        if (endTarget.nodeName === 'TD' || endTarget.nodeName === 'TH') {\n          targetCoords = _this.hot.getCoords(endTarget);\n\n          if (targetCoords.col === -1) {\n            targetCoords.col = 0;\n          }\n\n          selectedRange = _this.hot.getSelectedRangeLast();\n          rangeWidth = selectedRange.getWidth();\n          rangeHeight = selectedRange.getHeight();\n          rangeDirection = selectedRange.getDirection();\n\n          if (rangeWidth === 1 && rangeHeight === 1) {\n            _this.hot.selection.setRangeEnd(targetCoords);\n          }\n\n          newRangeCoords = _this.getCurrentRangeCoords(selectedRange, targetCoords, _this.touchStartRange.direction, rangeDirection, _this.dragged[0]);\n\n          if (newRangeCoords.start !== null) {\n            _this.hot.selection.setRangeStart(newRangeCoords.start);\n          }\n\n          _this.hot.selection.setRangeEnd(newRangeCoords.end);\n\n          _this.lastSetCell = endTarget;\n        }\n\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: \"getCurrentRangeCoords\",\n    value: function getCurrentRangeCoords(selectedRange, currentTouch, touchStartDirection, currentDirection, draggedHandle) {\n      var topLeftCorner = selectedRange.getTopLeftCorner();\n      var bottomRightCorner = selectedRange.getBottomRightCorner();\n      var bottomLeftCorner = selectedRange.getBottomLeftCorner();\n      var topRightCorner = selectedRange.getTopRightCorner();\n      var newCoords = {\n        start: null,\n        end: null\n      };\n\n      switch (touchStartDirection) {\n        case 'NE-SW':\n          switch (currentDirection) {\n            case 'NE-SW':\n            case 'NW-SE':\n              if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: new CellCoords(currentTouch.row, selectedRange.highlight.col),\n                  end: new CellCoords(bottomLeftCorner.row, currentTouch.col)\n                };\n              } else {\n                newCoords = {\n                  start: new CellCoords(selectedRange.highlight.row, currentTouch.col),\n                  end: new CellCoords(currentTouch.row, topLeftCorner.col)\n                };\n              }\n\n              break;\n\n            case 'SE-NW':\n              if (draggedHandle === 'bottomRight') {\n                newCoords = {\n                  start: new CellCoords(bottomRightCorner.row, currentTouch.col),\n                  end: new CellCoords(currentTouch.row, topLeftCorner.col)\n                };\n              }\n\n              break;\n\n            default:\n              break;\n          }\n\n          break;\n\n        case 'NW-SE':\n          switch (currentDirection) {\n            case 'NE-SW':\n              if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: currentTouch,\n                  end: bottomLeftCorner\n                };\n              } else {\n                newCoords.end = currentTouch;\n              }\n\n              break;\n\n            case 'NW-SE':\n              if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: currentTouch,\n                  end: bottomRightCorner\n                };\n              } else {\n                newCoords.end = currentTouch;\n              }\n\n              break;\n\n            case 'SE-NW':\n              if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: currentTouch,\n                  end: topLeftCorner\n                };\n              } else {\n                newCoords.end = currentTouch;\n              }\n\n              break;\n\n            case 'SW-NE':\n              if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: currentTouch,\n                  end: topRightCorner\n                };\n              } else {\n                newCoords.end = currentTouch;\n              }\n\n              break;\n\n            default:\n              break;\n          }\n\n          break;\n\n        case 'SW-NE':\n          switch (currentDirection) {\n            case 'NW-SE':\n              if (draggedHandle === 'bottomRight') {\n                newCoords = {\n                  start: new CellCoords(currentTouch.row, topLeftCorner.col),\n                  end: new CellCoords(bottomLeftCorner.row, currentTouch.col)\n                };\n              } else {\n                newCoords = {\n                  start: new CellCoords(topLeftCorner.row, currentTouch.col),\n                  end: new CellCoords(currentTouch.row, bottomRightCorner.col)\n                };\n              }\n\n              break;\n            // case 'NE-SW':\n            //\n            //  break;\n\n            case 'SW-NE':\n              if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: new CellCoords(selectedRange.highlight.row, currentTouch.col),\n                  end: new CellCoords(currentTouch.row, bottomRightCorner.col)\n                };\n              } else {\n                newCoords = {\n                  start: new CellCoords(currentTouch.row, topLeftCorner.col),\n                  end: new CellCoords(topLeftCorner.row, currentTouch.col)\n                };\n              }\n\n              break;\n\n            case 'SE-NW':\n              if (draggedHandle === 'bottomRight') {\n                newCoords = {\n                  start: new CellCoords(currentTouch.row, topRightCorner.col),\n                  end: new CellCoords(topLeftCorner.row, currentTouch.col)\n                };\n              } else if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: bottomLeftCorner,\n                  end: currentTouch\n                };\n              }\n\n              break;\n\n            default:\n              break;\n          }\n\n          break;\n\n        case 'SE-NW':\n          switch (currentDirection) {\n            case 'NW-SE':\n            case 'NE-SW':\n            case 'SW-NE':\n              if (draggedHandle === 'topLeft') {\n                newCoords.end = currentTouch;\n              }\n\n              break;\n\n            case 'SE-NW':\n              if (draggedHandle === 'topLeft') {\n                newCoords.end = currentTouch;\n              } else {\n                newCoords = {\n                  start: currentTouch,\n                  end: topLeftCorner\n                };\n              }\n\n              break;\n\n            default:\n              break;\n          }\n\n          break;\n\n        default:\n          break;\n      }\n\n      return newCoords;\n    }\n    /**\n     * Check if user is currently dragging the handle.\n     *\n     * @returns {boolean} Dragging state.\n     */\n\n  }, {\n    key: \"isDragged\",\n    value: function isDragged() {\n      return this.dragged.length > 0;\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return MultipleSelectionHandles;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\n\nvar _templateObject, _templateObject2;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\n\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\n\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\n\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n\nimport { addClass, removeClass, fastInnerHTML, empty } from \"../../helpers/dom/element.mjs\";\nimport { isNumeric } from \"../../helpers/number.mjs\";\nimport { isLeftClick, isRightClick } from \"../../helpers/dom/event.mjs\";\nimport { toSingleLine } from \"../../helpers/templateLiteralTag.mjs\";\nimport { warn } from \"../../helpers/console.mjs\";\nimport { ACTIVE_HEADER_TYPE, HEADER_TYPE } from \"../../selection/index.mjs\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport StateManager from \"./stateManager/index.mjs\";\nimport GhostTable from \"./utils/ghostTable.mjs\";\nexport var PLUGIN_KEY = 'nestedHeaders';\nexport var PLUGIN_PRIORITY = 280;\n/**\n * @plugin NestedHeaders\n * @class NestedHeaders\n *\n * @description\n * The plugin allows to create a nested header structure, using the HTML's colspan attribute.\n *\n * To make any header wider (covering multiple table columns), it's corresponding configuration array element should be\n * provided as an object with `label` and `colspan` properties. The `label` property defines the header's label,\n * while the `colspan` property defines a number of columns that the header should cover.\n *\n * __Note__ that the plugin supports a *nested* structure, which means, any header cannot be wider than it's \"parent\". In\n * other words, headers cannot overlap each other.\n * @example\n *\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   nestedHeaders: [\n *     ['A', {label: 'B', colspan: 8}, 'C'],\n *     ['D', {label: 'E', colspan: 4}, {label: 'F', colspan: 4}, 'G'],\n *     ['H', {label: 'I', colspan: 2}, {label: 'J', colspan: 2}, {label: 'K', colspan: 2}, {label: 'L', colspan: 2}, 'M'],\n *     ['N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W']\n *  ],\n * ```\n */\n\nvar _stateManager = /*#__PURE__*/new WeakMap();\n\nvar _hidingIndexMapObserver = /*#__PURE__*/new WeakMap();\n\nexport var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(NestedHeaders, _BasePlugin);\n\n  var _super = _createSuper(NestedHeaders);\n\n  function NestedHeaders() {\n    var _this;\n\n    _classCallCheck(this, NestedHeaders);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _classPrivateFieldInitSpec(_assertThisInitialized(_this), _stateManager, {\n      writable: true,\n      value: new StateManager()\n    });\n\n    _classPrivateFieldInitSpec(_assertThisInitialized(_this), _hidingIndexMapObserver, {\n      writable: true,\n      value: null\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"ghostTable\", new GhostTable(_assertThisInitialized(_this)));\n\n    _defineProperty(_assertThisInitialized(_this), \"detectedOverlappedHeaders\", false);\n\n    return _this;\n  }\n\n  _createClass(NestedHeaders, [{\n    key: \"isEnabled\",\n    value:\n    /**\n     * Check if plugin is enabled.\n     *\n     * @returns {boolean}\n     */\n    function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      var _this$hot$getSettings = this.hot.getSettings(),\n          nestedHeaders = _this$hot$getSettings.nestedHeaders;\n\n      if (!Array.isArray(nestedHeaders) || !Array.isArray(nestedHeaders[0])) {\n        warn(toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"Your Nested Headers plugin configuration is invalid. The settings has to be \\n                        passed as an array of arrays e.q. [['A1', { label: 'A2', colspan: 2 }]]\"], [\"Your Nested Headers plugin configuration is invalid. The settings has to be\\\\x20\\n                        passed as an array of arrays e.q. [['A1', { label: 'A2', colspan: 2 }]]\"]))));\n      }\n\n      this.addHook('init', function () {\n        return _this2.onInit();\n      });\n      this.addHook('afterLoadData', function () {\n        return _this2.onAfterLoadData.apply(_this2, arguments);\n      });\n      this.addHook('beforeOnCellMouseDown', function () {\n        return _this2.onBeforeOnCellMouseDown.apply(_this2, arguments);\n      });\n      this.addHook('afterOnCellMouseDown', function () {\n        return _this2.onAfterOnCellMouseDown.apply(_this2, arguments);\n      });\n      this.addHook('beforeOnCellMouseOver', function () {\n        return _this2.onBeforeOnCellMouseOver.apply(_this2, arguments);\n      });\n      this.addHook('afterGetColumnHeaderRenderers', function (array) {\n        return _this2.onAfterGetColumnHeaderRenderers(array);\n      });\n      this.addHook('modifyColWidth', function () {\n        return _this2.onModifyColWidth.apply(_this2, arguments);\n      });\n      this.addHook('beforeHighlightingColumnHeader', function () {\n        return _this2.onBeforeHighlightingColumnHeader.apply(_this2, arguments);\n      });\n      this.addHook('afterViewportColumnCalculatorOverride', function () {\n        return _this2.onAfterViewportColumnCalculatorOverride.apply(_this2, arguments);\n      });\n\n      _get(_getPrototypeOf(NestedHeaders.prototype), \"enablePlugin\", this).call(this);\n\n      this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      var _this3 = this;\n\n      if (!this.hot.view) {\n        // @TODO: Workaround for broken plugin initialization abstraction.\n        return;\n      }\n\n      var _this$hot$getSettings2 = this.hot.getSettings(),\n          nestedHeaders = _this$hot$getSettings2.nestedHeaders;\n\n      _classPrivateFieldGet(this, _stateManager).setColumnsLimit(this.hot.countCols());\n\n      if (Array.isArray(nestedHeaders)) {\n        this.detectedOverlappedHeaders = _classPrivateFieldGet(this, _stateManager).setState(nestedHeaders);\n      }\n\n      if (this.detectedOverlappedHeaders) {\n        warn(toSingleLine(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral([\"Your Nested Headers plugin setup contains overlapping headers. This kind of configuration \\n                        is currently not supported.\"], [\"Your Nested Headers plugin setup contains overlapping headers. This kind of configuration\\\\x20\\n                        is currently not supported.\"]))));\n      }\n\n      if (this.enabled) {\n        // This line covers the case when a developer uses the external hiding maps to manipulate\n        // the columns' visibility. The tree state built from the settings - which is always built\n        // as if all the columns are visible, needs to be modified to be in sync with a dataset.\n        this.hot.columnIndexMapper.hidingMapsCollection.getMergedValues().forEach(function (isColumnHidden, physicalColumnIndex) {\n          var actionName = isColumnHidden === true ? 'hide-column' : 'show-column';\n\n          _classPrivateFieldGet(_this3, _stateManager).triggerColumnModification(actionName, physicalColumnIndex);\n        });\n      }\n\n      if (!_classPrivateFieldGet(this, _hidingIndexMapObserver) && this.enabled) {\n        _classPrivateFieldSet(this, _hidingIndexMapObserver, this.hot.columnIndexMapper.createChangesObserver('hiding').subscribe(function (changes) {\n          changes.forEach(function (_ref) {\n            var op = _ref.op,\n                columnIndex = _ref.index,\n                newValue = _ref.newValue;\n\n            if (op === 'replace') {\n              var actionName = newValue === true ? 'hide-column' : 'show-column';\n\n              _classPrivateFieldGet(_this3, _stateManager).triggerColumnModification(actionName, columnIndex);\n            }\n          });\n        }));\n      }\n\n      this.ghostTable.buildWidthsMapper();\n\n      _get(_getPrototypeOf(NestedHeaders.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.clearColspans();\n\n      _classPrivateFieldGet(this, _stateManager).clear();\n\n      _classPrivateFieldGet(this, _hidingIndexMapObserver).unsubscribe();\n\n      _classPrivateFieldSet(this, _hidingIndexMapObserver, null);\n\n      this.ghostTable.clear();\n\n      _get(_getPrototypeOf(NestedHeaders.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Returns an instance of the internal state manager of the plugin.\n     *\n     * @private\n     * @returns {StateManager}\n     */\n\n  }, {\n    key: \"getStateManager\",\n    value: function getStateManager() {\n      return _classPrivateFieldGet(this, _stateManager);\n    }\n    /**\n     * Gets a total number of headers levels.\n     *\n     * @private\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getLayersCount\",\n    value: function getLayersCount() {\n      return _classPrivateFieldGet(this, _stateManager).getLayersCount();\n    }\n    /**\n     * Gets column settings for a specified header. The returned object contains\n     * information about the header label, its colspan length, or if it is hidden\n     * in the header renderers.\n     *\n     * @private\n     * @param {number} headerLevel Header level (0 = most distant to the table).\n     * @param {number} columnIndex A visual column index.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getHeaderSettings\",\n    value: function getHeaderSettings(headerLevel, columnIndex) {\n      return _classPrivateFieldGet(this, _stateManager).getHeaderSettings(headerLevel, columnIndex);\n    }\n    /**\n     * Clear the colspans remaining after plugin usage.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"clearColspans\",\n    value: function clearColspans() {\n      if (!this.hot.view) {\n        return;\n      }\n\n      var wt = this.hot.view.wt;\n      var headerLevels = wt.getSetting('columnHeaders').length;\n      var mainHeaders = wt.wtTable.THEAD;\n      var topHeaders = wt.wtOverlays.topOverlay.clone.wtTable.THEAD;\n      var topLeftCornerHeaders = wt.wtOverlays.topLeftCornerOverlay ? wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.THEAD : null;\n\n      for (var i = 0; i < headerLevels; i++) {\n        var masterLevel = mainHeaders.childNodes[i];\n\n        if (!masterLevel) {\n          break;\n        }\n\n        var topLevel = topHeaders.childNodes[i];\n        var topLeftCornerLevel = topLeftCornerHeaders ? topLeftCornerHeaders.childNodes[i] : null;\n\n        for (var j = 0, masterNodes = masterLevel.childNodes.length; j < masterNodes; j++) {\n          masterLevel.childNodes[j].removeAttribute('colspan');\n          removeClass(masterLevel.childNodes[j], 'hiddenHeader');\n\n          if (topLevel && topLevel.childNodes[j]) {\n            topLevel.childNodes[j].removeAttribute('colspan');\n            removeClass(topLevel.childNodes[j], 'hiddenHeader');\n          }\n\n          if (topLeftCornerHeaders && topLeftCornerLevel && topLeftCornerLevel.childNodes[j]) {\n            topLeftCornerLevel.childNodes[j].removeAttribute('colspan');\n            removeClass(topLeftCornerLevel.childNodes[j], 'hiddenHeader');\n          }\n        }\n      }\n    }\n    /**\n     * Generates the appropriate header renderer for a header row.\n     *\n     * @private\n     * @param {number} headerLevel The index of header level counting from the top (positive\n     *                             values counting from 0 to N).\n     * @returns {Function}\n     * @fires Hooks#afterGetColHeader\n     */\n\n  }, {\n    key: \"headerRendererFactory\",\n    value: function headerRendererFactory(headerLevel) {\n      var _this4 = this;\n\n      var fixedColumnsLeft = this.hot.view.wt.getSetting('fixedColumnsLeft');\n      return function (renderedColumnIndex, TH) {\n        var _classPrivateFieldGet2;\n\n        var _this4$hot = _this4.hot,\n            rootDocument = _this4$hot.rootDocument,\n            columnIndexMapper = _this4$hot.columnIndexMapper,\n            view = _this4$hot.view;\n        var visualColumnsIndex = columnIndexMapper.getVisualFromRenderableIndex(renderedColumnIndex);\n\n        if (visualColumnsIndex === null) {\n          visualColumnsIndex = renderedColumnIndex;\n        }\n\n        TH.removeAttribute('colspan');\n        removeClass(TH, 'hiddenHeader');\n\n        var _ref2 = (_classPrivateFieldGet2 = _classPrivateFieldGet(_this4, _stateManager).getHeaderSettings(headerLevel, visualColumnsIndex)) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : {\n          label: ''\n        },\n            colspan = _ref2.colspan,\n            label = _ref2.label,\n            isHidden = _ref2.isHidden,\n            isPlaceholder = _ref2.isPlaceholder;\n\n        if (isPlaceholder || isHidden) {\n          addClass(TH, 'hiddenHeader');\n        } else if (colspan > 1) {\n          var _view$wt$wtOverlays$t, _view$wt$wtOverlays$l;\n\n          var isTopLeftOverlay = (_view$wt$wtOverlays$t = view.wt.wtOverlays.topLeftCornerOverlay) === null || _view$wt$wtOverlays$t === void 0 ? void 0 : _view$wt$wtOverlays$t.clone.wtTable.THEAD.contains(TH);\n          var isLeftOverlay = (_view$wt$wtOverlays$l = view.wt.wtOverlays.leftOverlay) === null || _view$wt$wtOverlays$l === void 0 ? void 0 : _view$wt$wtOverlays$l.clone.wtTable.THEAD.contains(TH); // Check if there is a fixed column enabled, if so then reduce colspan to fixed column width.\n\n          var correctedColspan = isTopLeftOverlay || isLeftOverlay ? Math.min(colspan, fixedColumnsLeft - renderedColumnIndex) : colspan;\n\n          if (correctedColspan > 1) {\n            TH.setAttribute('colspan', correctedColspan);\n          }\n        }\n\n        var divEl = rootDocument.createElement('div');\n        var spanEl = rootDocument.createElement('span');\n        addClass(divEl, 'relative');\n        addClass(spanEl, 'colHeader');\n        fastInnerHTML(spanEl, label);\n        divEl.appendChild(spanEl);\n        empty(TH);\n        TH.appendChild(divEl);\n\n        _this4.hot.runHooks('afterGetColHeader', visualColumnsIndex, TH);\n      };\n    }\n    /**\n     * Allows to control which header DOM element will be used to highlight.\n     *\n     * @private\n     * @param {number} visualColumn A visual column index of the highlighted row header.\n     * @param {number} headerLevel A row header level that is currently highlighted.\n     * @param {object} highlightMeta An object with meta data that describes the highlight state.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"onBeforeHighlightingColumnHeader\",\n    value: function onBeforeHighlightingColumnHeader(visualColumn, headerLevel, highlightMeta) {\n      var headerNodeData = _classPrivateFieldGet(this, _stateManager).getHeaderTreeNodeData(headerLevel, visualColumn);\n\n      if (!headerNodeData) {\n        return visualColumn;\n      }\n\n      var classNames = highlightMeta.classNames,\n          columnCursor = highlightMeta.columnCursor,\n          selectionType = highlightMeta.selectionType,\n          selectionWidth = highlightMeta.selectionWidth;\n\n      var _classPrivateFieldGet3 = _classPrivateFieldGet(this, _stateManager).getHeaderSettings(headerLevel, visualColumn),\n          isRoot = _classPrivateFieldGet3.isRoot,\n          colspan = _classPrivateFieldGet3.colspan;\n\n      if (selectionType === HEADER_TYPE) {\n        if (!isRoot) {\n          return headerNodeData.columnIndex;\n        }\n      } else if (selectionType === ACTIVE_HEADER_TYPE) {\n        if (colspan > selectionWidth - columnCursor || !isRoot) {\n          // Reset the class names array so the generated TH element won't be modified.\n          classNames.length = 0;\n        }\n      }\n\n      return visualColumn;\n    }\n    /**\n     * Allows to block the column selection that is controlled by the core Selection module.\n     *\n     * @private\n     * @param {MouseEvent} event Mouse event.\n     * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n     * @param {CellCoords} TD The table cell or header element.\n     * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n     *                            a boolean value that allows or disallows changing the selection for that particular area.\n     */\n\n  }, {\n    key: \"onBeforeOnCellMouseDown\",\n    value: function onBeforeOnCellMouseDown(event, coords, TD, controller) {\n      var headerNodeData = this._getHeaderTreeNodeDataByCoords(coords);\n\n      if (headerNodeData) {\n        // Block the Selection module in controlling how the columns are selected. Pass the\n        // responsibility of the column selection to this plugin (see \"onAfterOnCellMouseDown\" hook).\n        controller.column = true;\n      }\n    }\n    /**\n     * Allows to control how the column selection based on the coordinates and the nested headers is made.\n     *\n     * @private\n     * @param {MouseEvent} event Mouse event.\n     * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n     */\n\n  }, {\n    key: \"onAfterOnCellMouseDown\",\n    value: function onAfterOnCellMouseDown(event, coords) {\n      var headerNodeData = this._getHeaderTreeNodeDataByCoords(coords);\n\n      if (!headerNodeData) {\n        return;\n      }\n\n      var selection = this.hot.selection;\n      var currentSelection = selection.isSelected() ? selection.getSelectedRange().current() : null;\n      var columnsToSelect = [];\n      var columnIndex = headerNodeData.columnIndex,\n          origColspan = headerNodeData.origColspan; // The Selection module doesn't allow it to extend its behavior easily. That's why here we need\n      // to re-implement the \"click\" and \"shift\" behavior. As a workaround, the logic for the nested\n      // headers must implement a similar logic as in the original Selection handler\n      // (see src/selection/mouseEventHandler.js).\n\n      var allowRightClickSelection = !selection.inInSelection(coords);\n\n      if (event.shiftKey && currentSelection) {\n        if (coords.col < currentSelection.from.col) {\n          columnsToSelect.push(currentSelection.getTopRightCorner().col, columnIndex, coords.row);\n        } else if (coords.col > currentSelection.from.col) {\n          columnsToSelect.push(currentSelection.getTopLeftCorner().col, columnIndex + origColspan - 1, coords.row);\n        } else {\n          columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, coords.row);\n        }\n      } else if (isLeftClick(event) || isRightClick(event) && allowRightClickSelection) {\n        columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, coords.row);\n      } // The plugin takes control of the how the columns are selected.\n\n\n      selection.selectColumns.apply(selection, columnsToSelect);\n    }\n    /**\n     * Makes the header-selection properly select the nested headers.\n     *\n     * @private\n     * @param {MouseEvent} event Mouse event.\n     * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n     * @param {HTMLElement} TD The cell element.\n     * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n     *                            a boolean value that allows or disallows changing the selection for that particular area.\n     */\n\n  }, {\n    key: \"onBeforeOnCellMouseOver\",\n    value: function onBeforeOnCellMouseOver(event, coords, TD, controller) {\n      var _this$hot;\n\n      if (!this.hot.view.isMouseDown()) {\n        return;\n      }\n\n      var headerNodeData = this._getHeaderTreeNodeDataByCoords(coords);\n\n      if (!headerNodeData) {\n        return;\n      }\n\n      var columnIndex = headerNodeData.columnIndex,\n          origColspan = headerNodeData.origColspan;\n      var selectedRange = this.hot.getSelectedRangeLast();\n      var topLeftCoords = selectedRange.getTopLeftCorner();\n      var bottomRightCoords = selectedRange.getBottomRightCorner();\n      var from = selectedRange.from; // Block the Selection module in controlling how the columns and cells are selected.\n      // From now on, the plugin is responsible for the selection.\n\n      controller.column = true;\n      controller.cell = true;\n      var columnsToSelect = [];\n\n      if (coords.col < from.col) {\n        columnsToSelect.push(bottomRightCoords.col, columnIndex);\n      } else if (coords.col > from.col) {\n        columnsToSelect.push(topLeftCoords.col, columnIndex + origColspan - 1);\n      } else {\n        columnsToSelect.push(columnIndex, columnIndex + origColspan - 1);\n      }\n\n      (_this$hot = this.hot).selectColumns.apply(_this$hot, columnsToSelect);\n    }\n    /**\n     * `afterGetColumnHeader` hook callback - prepares the header structure.\n     *\n     * @private\n     * @param {Array} renderersArray Array of renderers.\n     */\n\n  }, {\n    key: \"onAfterGetColumnHeaderRenderers\",\n    value: function onAfterGetColumnHeaderRenderers(renderersArray) {\n      if (renderersArray) {\n        renderersArray.length = 0;\n\n        for (var headerLayer = 0; headerLayer < _classPrivateFieldGet(this, _stateManager).getLayersCount(); headerLayer++) {\n          renderersArray.push(this.headerRendererFactory(headerLayer));\n        }\n      }\n    }\n    /**\n     * Make the renderer render the first nested column in its entirety.\n     *\n     * @private\n     * @param {object} calc Viewport column calculator.\n     */\n\n  }, {\n    key: \"onAfterViewportColumnCalculatorOverride\",\n    value: function onAfterViewportColumnCalculatorOverride(calc) {\n      var headerLayersCount = _classPrivateFieldGet(this, _stateManager).getLayersCount();\n\n      var newStartColumn = calc.startColumn;\n      var nonRenderable = !!headerLayersCount;\n\n      for (var headerLayer = 0; headerLayer < headerLayersCount; headerLayer++) {\n        var startColumn = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(headerLayer, calc.startColumn);\n\n        var renderedStartColumn = this.hot.columnIndexMapper.getRenderableFromVisualIndex(startColumn); // If any of the headers for that column index is rendered, all of them should be rendered properly, see\n        // comment below.\n\n        if (startColumn >= 0) {\n          nonRenderable = false;\n        } // `renderedStartColumn` can be `null` if the leftmost columns are hidden. In that case -> ignore that header\n        // level, as it should be handled by the \"parent\" header\n\n\n        if (isNumeric(renderedStartColumn) && renderedStartColumn < calc.startColumn) {\n          newStartColumn = renderedStartColumn;\n          break;\n        }\n      } // If no headers for the provided column index are renderable, start rendering from the beginning of the upmost\n      // header for that position.\n\n\n      calc.startColumn = nonRenderable ? _classPrivateFieldGet(this, _stateManager).getHeaderTreeNodeData(0, newStartColumn).columnIndex : newStartColumn;\n    }\n    /**\n     * `modifyColWidth` hook callback - returns width from cache, when is greater than incoming from hook.\n     *\n     * @private\n     * @param {number} width Width from hook.\n     * @param {number} column Visual index of an column.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"onModifyColWidth\",\n    value: function onModifyColWidth(width, column) {\n      var cachedWidth = this.ghostTable.widthsCache[column];\n      return width > cachedWidth ? width : cachedWidth;\n    }\n    /**\n     * Updates the plugin state after HoT initialization.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onInit\",\n    value: function onInit() {\n      // @TODO: Workaround for broken plugin initialization abstraction.\n      this.updatePlugin();\n    }\n    /**\n     * Updates the plugin state after new dataset load.\n     *\n     * @private\n     * @param {Array[]} sourceData Array of arrays or array of objects containing data.\n     * @param {boolean} initialLoad Flag that determines whether the data has been loaded\n     *                              during the initialization.\n     */\n\n  }, {\n    key: \"onAfterLoadData\",\n    value: function onAfterLoadData(sourceData, initialLoad) {\n      if (!initialLoad) {\n        this.updatePlugin();\n      }\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _classPrivateFieldSet(this, _stateManager, null);\n\n      if (_classPrivateFieldGet(this, _hidingIndexMapObserver) !== null) {\n        _classPrivateFieldGet(this, _hidingIndexMapObserver).unsubscribe();\n\n        _classPrivateFieldSet(this, _hidingIndexMapObserver, null);\n      }\n\n      _get(_getPrototypeOf(NestedHeaders.prototype), \"destroy\", this).call(this);\n    }\n    /**\n     * Gets the tree data that belongs to the column headers pointed by the passed coordinates.\n     *\n     * @private\n     * @param {CellCoords} coords The CellCoords instance.\n     * @returns {object|undefined}\n     */\n\n  }, {\n    key: \"_getHeaderTreeNodeDataByCoords\",\n    value: function _getHeaderTreeNodeDataByCoords(coords) {\n      if (coords.row >= 0 || coords.col < 0) {\n        return;\n      }\n\n      return _classPrivateFieldGet(this, _stateManager).getHeaderTreeNodeData(coords.row, coords.col);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n    /**\n     * The state manager for the nested headers.\n     *\n     * @private\n     * @type {StateManager}\n     */\n\n  }]);\n\n  return NestedHeaders;\n}(BasePlugin);", "import \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\nvar _excluded = [\"row\"];\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\n\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\n\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\n\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n\nimport { arrayMap, arrayReduce } from \"../../../helpers/array.mjs\";\nimport SourceSettings from \"./sourceSettings.mjs\";\nimport HeadersTree from \"./headersTree.mjs\";\nimport { triggerNodeModification as _triggerNodeModification } from \"./nodeModifiers/index.mjs\";\nimport { generateMatrix } from \"./matrixGenerator.mjs\";\n/**\n * The state manager is a source of truth for nested headers configuration.\n * The state generation process is divided into three stages.\n *\n *   +---------------------+  1. User-defined configuration normalization;\n *   \u2502                     \u2502  The source settings class normalizes and shares API for\n *   \u2502   SourceSettings    \u2502  raw settings passed by the developer. It is only consumed by\n *   \u2502                     \u2502  the header tree module.\n *   +---------------------+\n *             \u2502\n *            \\\u2502/\n *   +---------------------+  2. Building a tree structure for validation and easier node manipulation;\n *   \u2502                     \u2502  The header tree generates a tree based on source settings for future\n *   \u2502     HeadersTree     \u2502  node manipulation (such as collapsible columns feature). While generating a tree\n *   \u2502                     \u2502  the source settings is checked to see if the configuration has overlapping headers.\n *   +---------------------+  If `true` the colspan matrix generation is skipped, overlapped headers are not supported.\n *             \u2502\n *            \\\u2502/\n *   +---------------------+  3. Matrix generation;\n *   \u2502                     \u2502  Based on built trees the matrix generation is performed. That part of code\n *   \u2502  matrix generation  \u2502  generates an array structure similar to normalized data from the SourceSettings\n *   \u2502                     \u2502  but with the difference that this structure contains column settings which changed\n *   +---------------------+  during runtime (after the tree manipulation) e.q after collapse or expand column.\n *                            That settings describes how the TH element should be modified (colspan attribute,\n *                            CSS classes, etc) for a specific column and layer level.\n *\n * @class StateManager\n */\n\nvar _sourceSettings = /*#__PURE__*/new WeakMap();\n\nvar _headersTree = /*#__PURE__*/new WeakMap();\n\nvar _stateMatrix = /*#__PURE__*/new WeakMap();\n\nvar StateManager = /*#__PURE__*/function () {\n  function StateManager() {\n    _classCallCheck(this, StateManager);\n\n    _classPrivateFieldInitSpec(this, _sourceSettings, {\n      writable: true,\n      value: new SourceSettings()\n    });\n\n    _classPrivateFieldInitSpec(this, _headersTree, {\n      writable: true,\n      value: new HeadersTree(_classPrivateFieldGet(this, _sourceSettings))\n    });\n\n    _classPrivateFieldInitSpec(this, _stateMatrix, {\n      writable: true,\n      value: [[]]\n    });\n  }\n\n  _createClass(StateManager, [{\n    key: \"setState\",\n    value:\n    /**\n     * Sets a new state for the nested headers plugin based on settings passed\n     * directly to the plugin.\n     *\n     * @param {Array[]} nestedHeadersSettings The user-defined settings.\n     * @returns {boolean} Returns `true` if the settings are processed correctly, `false` otherwise.\n     */\n    function setState(nestedHeadersSettings) {\n      _classPrivateFieldGet(this, _sourceSettings).setData(nestedHeadersSettings);\n\n      var hasError = false;\n\n      try {\n        _classPrivateFieldGet(this, _headersTree).buildTree();\n      } catch (ex) {\n        _classPrivateFieldGet(this, _headersTree).clear();\n\n        _classPrivateFieldGet(this, _sourceSettings).clear();\n\n        hasError = true;\n      }\n\n      _classPrivateFieldSet(this, _stateMatrix, generateMatrix(_classPrivateFieldGet(this, _headersTree).getRoots()));\n\n      return hasError;\n    }\n    /**\n     * Sets columns limit to the state will be trimmed. All headers (colspans) which\n     * overlap the column limit will be reduced to keep the structure solid.\n     *\n     * @param {number} columnsCount The number of columns to limit to.\n     */\n\n  }, {\n    key: \"setColumnsLimit\",\n    value: function setColumnsLimit(columnsCount) {\n      _classPrivateFieldGet(this, _sourceSettings).setColumnsLimit(columnsCount);\n    }\n    /**\n     * Merges settings with current plugin state.\n     *\n     * By default only foreign keys are merged with source state and passed to the tree. But only\n     * known keys are exported to matrix.\n     *\n     * @param {object[]} settings An array of objects to merge with the current source settings.\n     *                            It is a requirement that every object has `row` and `col` properties\n     *                            which points to the specific header settings object.\n     */\n\n  }, {\n    key: \"mergeStateWith\",\n    value: function mergeStateWith(settings) {\n      var _this = this;\n\n      var transformedSettings = arrayMap(settings, function (_ref) {\n        var row = _ref.row,\n            rest = _objectWithoutProperties(_ref, _excluded);\n\n        return _objectSpread({\n          row: row < 0 ? _this.rowCoordsToLevel(row) : row\n        }, rest);\n      });\n\n      _classPrivateFieldGet(this, _sourceSettings).mergeWith(transformedSettings);\n\n      _classPrivateFieldGet(this, _headersTree).buildTree();\n\n      _classPrivateFieldSet(this, _stateMatrix, generateMatrix(_classPrivateFieldGet(this, _headersTree).getRoots()));\n    }\n    /**\n     * Maps the current state with a callback. For each header settings the callback function\n     * is called. If the function returns value that value is merged with the state.\n     *\n     * By default only foreign keys are merged with source state and passed to the tree. But only\n     * known keys are exported to matrix.\n     *\n     * @param {Function} callback A function that is called for every header source settings.\n     *                            Each time the callback is called, the returned value extends\n     *                            header settings.\n     */\n\n  }, {\n    key: \"mapState\",\n    value: function mapState(callback) {\n      _classPrivateFieldGet(this, _sourceSettings).map(callback);\n\n      _classPrivateFieldGet(this, _headersTree).buildTree();\n\n      _classPrivateFieldSet(this, _stateMatrix, generateMatrix(_classPrivateFieldGet(this, _headersTree).getRoots()));\n    }\n    /**\n     * Maps the current tree nodes with a callback. For each node the callback function\n     * is called. If the function returns value that value is added to returned array.\n     *\n     * @param {Function} callback A function that is called for every tree node.\n     *                            Each time the callback is called, the returned value is\n     *                            added to returned array.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"mapNodes\",\n    value: function mapNodes(callback) {\n      return arrayReduce(_classPrivateFieldGet(this, _headersTree).getRoots(), function (acc, rootNode) {\n        rootNode.walkDown(function (node) {\n          var result = callback(node.data);\n\n          if (result !== void 0) {\n            acc.push(result);\n          }\n        });\n        return acc;\n      }, []);\n    }\n    /**\n     * Triggers an action (e.g. \"collapse\") from the NodeModifiers module. The module\n     * modifies a tree structure in such a way as to obtain the correct structure consistent with the\n     * called action.\n     *\n     * @param {string} action An action name to trigger.\n     * @param {number} headerLevel Header level index (there is support for negative and positive values).\n     * @param {number} columnIndex A visual column index.\n     * @returns {object|undefined}\n     */\n\n  }, {\n    key: \"triggerNodeModification\",\n    value: function triggerNodeModification(action, headerLevel, columnIndex) {\n      if (headerLevel < 0) {\n        headerLevel = this.rowCoordsToLevel(headerLevel);\n      }\n\n      var nodeToProcess = _classPrivateFieldGet(this, _headersTree).getNode(headerLevel, columnIndex);\n\n      var actionResult;\n\n      if (nodeToProcess) {\n        actionResult = _triggerNodeModification(action, nodeToProcess, columnIndex); // TODO (perf-tip): Trigger matrix generation once after multiple node modifications.\n\n        _classPrivateFieldSet(this, _stateMatrix, generateMatrix(_classPrivateFieldGet(this, _headersTree).getRoots()));\n      }\n\n      return actionResult;\n    }\n    /**\n     * Triggers an action (e.g. \"hide-column\") from the NodeModifiers module. The action is\n     * triggered starting from the lowest header. The module modifies a tree structure in\n     * such a way as to obtain the correct structure consistent with the called action.\n     *\n     * @param {string} action An action name to trigger.\n     * @param {number} columnIndex A visual column index.\n     * @returns {object|undefined}\n     */\n\n  }, {\n    key: \"triggerColumnModification\",\n    value: function triggerColumnModification(action, columnIndex) {\n      return this.triggerNodeModification(action, -1, columnIndex);\n    }\n    /* eslint-disable jsdoc/require-description-complete-sentence */\n\n    /**\n     * @memberof StateManager#\n     * @function rowCoordsToLevel\n     *\n     * Translates row coordinates into header level. The row coordinates counts from -1 to -N\n     * and describes headers counting from most closest to most distant from the table.\n     * The header levels are counted from 0 to N where 0 describes most distant header\n     * from the table.\n     *\n     *  Row coords             Header level\n     *           +--------------+\n     *       -3  \u2502 A1 \u2502 A1      \u2502  0\n     *           +--------------+\n     *       -2  \u2502 B1 \u2502 B2 \u2502 B3 \u2502  1\n     *           +--------------+\n     *       -1  \u2502 C1 \u2502 C2 \u2502 C3 \u2502  2\n     *           +==============+\n     *           \u2502    \u2502    \u2502    \u2502\n     *           +--------------+\n     *           \u2502    \u2502    \u2502    \u2502\n     *\n     * @param {number} rowIndex A visual row index.\n     * @returns {number} Returns unsigned number.\n     */\n\n    /* eslint-enable jsdoc/require-description-complete-sentence */\n\n  }, {\n    key: \"rowCoordsToLevel\",\n    value: function rowCoordsToLevel(rowIndex) {\n      var layersCount = Math.max(this.getLayersCount(), 1);\n      var highestPossibleLevel = layersCount - 1;\n      var lowestPossibleLevel = 0;\n      return Math.min(Math.max(rowIndex + layersCount, lowestPossibleLevel), highestPossibleLevel);\n    }\n    /* eslint-disable jsdoc/require-description-complete-sentence */\n\n    /**\n     * @memberof StateManager#\n     * @function levelToRowCoords\n     *\n     * Translates header level into row coordinates. The row coordinates counts from -1 to -N\n     * and describes headers counting from most closest to most distant from the table.\n     * The header levels are counted from 0 to N where 0 describes most distant header\n     * from the table.\n     *\n     *  Header level            Row coords\n     *           +--------------+\n     *        0  \u2502 A1 \u2502 A1      \u2502  -3\n     *           +--------------+\n     *        1  \u2502 B1 \u2502 B2 \u2502 B3 \u2502  -2\n     *           +--------------+\n     *        2  \u2502 C1 \u2502 C2 \u2502 C3 \u2502  -1\n     *           +==============+\n     *           \u2502    \u2502    \u2502    \u2502\n     *           +--------------+\n     *           \u2502    \u2502    \u2502    \u2502\n     *\n     * @param {number} headerLevel Header level index.\n     * @returns {number} Returns negative number.\n     */\n\n    /* eslint-enable jsdoc/require-description-complete-sentence */\n\n  }, {\n    key: \"levelToRowCoords\",\n    value: function levelToRowCoords(headerLevel) {\n      var layersCount = Math.max(this.getLayersCount(), 1);\n      var highestPossibleRow = -1;\n      var lowestPossibleRow = -layersCount;\n      return Math.min(Math.max(headerLevel - layersCount, lowestPossibleRow), highestPossibleRow);\n    }\n    /**\n     * Gets column header settings for a specified column and header index. The returned object contains\n     * all information necessary for header renderers. It contains header label, colspan length, or hidden\n     * flag.\n     *\n     * @param {number} headerLevel Header level (there is support for negative and positive values).\n     * @param {number} columnIndex A visual column index.\n     * @returns {object|null}\n     */\n\n  }, {\n    key: \"getHeaderSettings\",\n    value: function getHeaderSettings(headerLevel, columnIndex) {\n      var _classPrivateFieldGet2, _classPrivateFieldGet3;\n\n      if (headerLevel < 0) {\n        headerLevel = this.rowCoordsToLevel(headerLevel);\n      }\n\n      if (headerLevel >= this.getLayersCount()) {\n        return null;\n      }\n\n      return (_classPrivateFieldGet2 = (_classPrivateFieldGet3 = _classPrivateFieldGet(this, _stateMatrix)[headerLevel]) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3[columnIndex]) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : null;\n    }\n    /**\n     * Gets tree data that is connected to the column header. The returned object contains all information\n     * necessary for modifying tree structure (column collapsing, hiding, etc.). It contains a header\n     * label, colspan length, or visual column index that indicates which column index the node is rendered from.\n     *\n     * @param {number} headerLevel Header level (there is support for negative and positive values).\n     * @param {number} columnIndex A visual column index.\n     * @returns {object|null}\n     */\n\n  }, {\n    key: \"getHeaderTreeNodeData\",\n    value: function getHeaderTreeNodeData(headerLevel, columnIndex) {\n      if (headerLevel < 0) {\n        headerLevel = this.rowCoordsToLevel(headerLevel);\n      }\n\n      var node = _classPrivateFieldGet(this, _headersTree).getNode(headerLevel, columnIndex);\n\n      if (!node) {\n        return null;\n      }\n\n      return _objectSpread({}, node.data);\n    }\n    /**\n     * The method is helpful in cases where the column index targets in-between currently\n     * collapsed column. In that case, the method returns the left-most column index\n     * where the nested header begins.\n     *\n     * @param {number} headerLevel Header level (there is support for negative and positive values).\n     * @param {number} columnIndex A visual column index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"findLeftMostColumnIndex\",\n    value: function findLeftMostColumnIndex(headerLevel, columnIndex) {\n      var _this$getHeaderSettin;\n\n      var _ref2 = (_this$getHeaderSettin = this.getHeaderSettings(headerLevel, columnIndex)) !== null && _this$getHeaderSettin !== void 0 ? _this$getHeaderSettin : {\n        isRoot: true\n      },\n          isRoot = _ref2.isRoot;\n\n      if (isRoot) {\n        return columnIndex;\n      }\n\n      var stepBackColumn = columnIndex - 1;\n\n      while (stepBackColumn >= 0) {\n        var _this$getHeaderSettin2;\n\n        var _ref3 = (_this$getHeaderSettin2 = this.getHeaderSettings(headerLevel, stepBackColumn)) !== null && _this$getHeaderSettin2 !== void 0 ? _this$getHeaderSettin2 : {\n          isRoot: true\n        },\n            isRootNode = _ref3.isRoot;\n\n        if (isRootNode) {\n          break;\n        }\n\n        stepBackColumn -= 1;\n      }\n\n      return stepBackColumn;\n    }\n    /**\n     * Gets a total number of headers levels.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getLayersCount\",\n    value: function getLayersCount() {\n      return _classPrivateFieldGet(this, _sourceSettings).getLayersCount();\n    }\n    /**\n     * Gets a total number of columns count.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getColumnsCount\",\n    value: function getColumnsCount() {\n      return _classPrivateFieldGet(this, _sourceSettings).getColumnsCount();\n    }\n    /**\n     * Clears the column state manager to the initial state.\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      _classPrivateFieldSet(this, _stateMatrix, []);\n\n      _classPrivateFieldGet(this, _sourceSettings).clear();\n\n      _classPrivateFieldGet(this, _headersTree).clear();\n    }\n  }]);\n\n  return StateManager;\n}();\n\nexport { StateManager as default };", "import \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\nvar _excluded = [\"row\", \"col\"];\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\n\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\n\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\n\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\nimport { extend, isObject } from \"../../../helpers/object.mjs\";\nimport { arrayEach } from \"../../../helpers/array.mjs\";\nimport { normalizeSettings } from \"./settingsNormalizer.mjs\";\n/**\n * List of properties which are configurable. That properties can be changed using public API.\n *\n * @type {string[]}\n */\n\nexport var HEADER_CONFIGURABLE_PROPS = ['label', 'collapsible'];\n/**\n * The class manages and normalizes settings passed by the developer\n * into the nested headers plugin. The SourceSettings class is a\n * source of truth for tree builder (HeaderTree) module.\n *\n * @private\n * @class SourceSettings\n */\n\nvar _data = /*#__PURE__*/new WeakMap();\n\nvar _dataLength = /*#__PURE__*/new WeakMap();\n\nvar _columnsLimit = /*#__PURE__*/new WeakMap();\n\nvar SourceSettings = /*#__PURE__*/function () {\n  function SourceSettings() {\n    _classCallCheck(this, SourceSettings);\n\n    _classPrivateFieldInitSpec(this, _data, {\n      writable: true,\n      value: []\n    });\n\n    _classPrivateFieldInitSpec(this, _dataLength, {\n      writable: true,\n      value: 0\n    });\n\n    _classPrivateFieldInitSpec(this, _columnsLimit, {\n      writable: true,\n      value: Infinity\n    });\n  }\n\n  _createClass(SourceSettings, [{\n    key: \"setColumnsLimit\",\n    value:\n    /**\n     * Sets columns limit to the source settings will be trimmed. All headers which\n     * overlap the column limit will be reduced to keep the structure solid.\n     *\n     * @param {number} columnsCount The number of columns to limit to.\n     */\n    function setColumnsLimit(columnsCount) {\n      _classPrivateFieldSet(this, _columnsLimit, columnsCount);\n    }\n    /**\n     * Sets a new nested header configuration.\n     *\n     * @param {Array[]} [nestedHeadersSettings=[]] The user-defined nested headers settings.\n     */\n\n  }, {\n    key: \"setData\",\n    value: function setData() {\n      var nestedHeadersSettings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n      _classPrivateFieldSet(this, _data, normalizeSettings(nestedHeadersSettings, _classPrivateFieldGet(this, _columnsLimit)));\n\n      _classPrivateFieldSet(this, _dataLength, _classPrivateFieldGet(this, _data).length);\n    }\n    /**\n     * Gets normalized source settings.\n     *\n     * @returns {Array[]}\n     */\n\n  }, {\n    key: \"getData\",\n    value: function getData() {\n      return _classPrivateFieldGet(this, _data);\n    }\n    /**\n     * Merges settings with current source settings.\n     *\n     * @param {object[]} additionalSettings An array of objects with `row`, `col` and additional\n     *                                      properties to merge with current source settings.\n     */\n\n  }, {\n    key: \"mergeWith\",\n    value: function mergeWith(additionalSettings) {\n      var _this = this;\n\n      arrayEach(additionalSettings, function (_ref) {\n        var row = _ref.row,\n            col = _ref.col,\n            rest = _objectWithoutProperties(_ref, _excluded);\n\n        var headerSettings = _this.getHeaderSettings(row, col);\n\n        if (headerSettings !== null) {\n          extend(headerSettings, rest, HEADER_CONFIGURABLE_PROPS);\n        }\n      });\n    }\n    /**\n     * Maps the current state with a callback. For each source settings the callback function\n     * is called. If the function returns value that value is merged with the source settings.\n     *\n     * @param {Function} callback A function that is called for every header settings.\n     *                            Each time the callback is called, the returned value extends\n     *                            header settings.\n     */\n\n  }, {\n    key: \"map\",\n    value: function map(callback) {\n      arrayEach(_classPrivateFieldGet(this, _data), function (header) {\n        arrayEach(header, function (headerSettings) {\n          var propsToExtend = callback(_objectSpread({}, headerSettings));\n\n          if (isObject(propsToExtend)) {\n            extend(headerSettings, propsToExtend, HEADER_CONFIGURABLE_PROPS);\n          }\n        });\n      });\n    }\n    /**\n     * Gets source column header settings for a specified header. The returned\n     * object contains information about the header label, its colspan length,\n     * or if it is hidden in the header renderers.\n     *\n     * @param {number} headerLevel Header level (0 = most distant to the table).\n     * @param {number} columnIndex A visual column index.\n     * @returns {object|null}\n     */\n\n  }, {\n    key: \"getHeaderSettings\",\n    value: function getHeaderSettings(headerLevel, columnIndex) {\n      var _headersSettings$colu;\n\n      if (headerLevel >= _classPrivateFieldGet(this, _dataLength) || headerLevel < 0) {\n        return null;\n      }\n\n      var headersSettings = _classPrivateFieldGet(this, _data)[headerLevel];\n\n      if (columnIndex >= headersSettings.length) {\n        return null;\n      }\n\n      return (_headersSettings$colu = headersSettings[columnIndex]) !== null && _headersSettings$colu !== void 0 ? _headersSettings$colu : null;\n    }\n    /**\n     * Gets source of column headers settings for specified headers. If the retrieved column\n     * settings overlap the range \"box\" determined by \"columnIndex\" and \"columnsLength\"\n     * the exception will be thrown.\n     *\n     * @param {number} headerLevel Header level (0 = most distant to the table).\n     * @param {number} columnIndex A visual column index from which the settings will be extracted.\n     * @param {number} [columnsLength=1] The number of columns involved in the extraction of settings.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getHeadersSettings\",\n    value: function getHeadersSettings(headerLevel, columnIndex) {\n      var columnsLength = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n      var headersSettingsChunks = [];\n\n      if (headerLevel >= _classPrivateFieldGet(this, _dataLength) || headerLevel < 0) {\n        return headersSettingsChunks;\n      }\n\n      var headersSettings = _classPrivateFieldGet(this, _data)[headerLevel];\n\n      var currentLength = 0;\n\n      for (var i = columnIndex; i < headersSettings.length; i++) {\n        var headerSettings = headersSettings[i];\n\n        if (headerSettings.isPlaceholder) {\n          throw new Error('The first column settings cannot overlap the other header layers');\n        }\n\n        currentLength += headerSettings.colspan;\n        headersSettingsChunks.push(headerSettings);\n\n        if (headerSettings.colspan > 1) {\n          i += headerSettings.colspan - 1;\n        } // We met the current sum of the child colspans\n\n\n        if (currentLength === columnsLength) {\n          break;\n        } // We exceeds the current sum of the child colspans, the last columns colspan overlaps the \"columnsLength\" length.\n\n\n        if (currentLength > columnsLength) {\n          throw new Error('The last column settings cannot overlap the other header layers');\n        }\n      }\n\n      return headersSettingsChunks;\n    }\n    /**\n     * Gets a total number of headers levels.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getLayersCount\",\n    value: function getLayersCount() {\n      return _classPrivateFieldGet(this, _dataLength);\n    }\n    /**\n     * Gets a total number of columns count.\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getColumnsCount\",\n    value: function getColumnsCount() {\n      return _classPrivateFieldGet(this, _dataLength) > 0 ? _classPrivateFieldGet(this, _data)[0].length : 0;\n    }\n    /**\n     * Clears the data.\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      _classPrivateFieldSet(this, _data, []);\n\n      _classPrivateFieldSet(this, _dataLength, 0);\n    }\n  }]);\n\n  return SourceSettings;\n}();\n\nexport { SourceSettings as default };", "import \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\nimport { arrayEach, arrayMap } from \"../../../helpers/array.mjs\";\nimport { isObject } from \"../../../helpers/object.mjs\";\nimport { stringify } from \"../../../helpers/mixed.mjs\";\nimport { createDefaultHeaderSettings, createPlaceholderHeaderSettings } from \"./utils.mjs\";\n/**\n * A function that normalizes user-defined settings into one predictable\n * structure. Currently, the developer can declare nested headers by passing\n * the following unstructured (and sometimes uncompleted) array.\n *   [\n *     [{ label: 'A1', colspan: 2 }],\n *     [{ label: true }, 'B2', 4],\n *     [],\n *   ]\n *\n * The normalization process equalizes the length of columns to each header\n * layers to the same length and generates object settings with a common shape.\n * So the above mentioned example will be normalized into this:\n *   [\n *     [\n *       { label: 'A1', colspan: 2, isHidden: false, ... },\n *       { label: '', colspan: 1, isHidden: true, ... },\n *       { label: '', colspan: 1, isHidden: false, ... },\n *     ],\n *     [\n *       { label: 'true', colspan: 1, isHidden: false, ... },\n *       { label: 'B2', colspan: 1, isHidden: false, ... },\n *       { label: '4', colspan: 1, isHidden: false, ... },\n *     ],\n *     [\n *       { label: '', colspan: 1, isHidden: false, ... },\n *       { label: '', colspan: 1, isHidden: false, ... },\n *       { label: '', colspan: 1, isHidden: false, ... },\n *     ],\n *   ]\n *\n * @param {Array[]} sourceSettings An array with defined nested headers settings.\n * @param {number} [columnsLimit=Infinity] A number of columns to which the structure\n *                                         will be trimmed. While trimming the colspan\n *                                         values are adjusted to preserve the original\n *                                         structure.\n * @returns {Array[]}\n */\n\nexport function normalizeSettings(sourceSettings) {\n  var columnsLimit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Infinity;\n  var normalizedSettings = [];\n\n  if (columnsLimit === 0) {\n    return normalizedSettings;\n  } // Normalize array items (header settings) into one shape - literal object with default props.\n\n\n  arrayEach(sourceSettings, function (headersSettings) {\n    var columns = [];\n    var columnIndex = 0;\n    normalizedSettings.push(columns);\n    arrayEach(headersSettings, function (sourceHeaderSettings) {\n      var headerSettings = createDefaultHeaderSettings();\n\n      if (isObject(sourceHeaderSettings)) {\n        var label = sourceHeaderSettings.label,\n            colspan = sourceHeaderSettings.colspan;\n        headerSettings.label = stringify(label);\n\n        if (typeof colspan === 'number' && colspan > 1) {\n          headerSettings.colspan = colspan;\n          headerSettings.origColspan = colspan;\n        }\n      } else {\n        headerSettings.label = stringify(sourceHeaderSettings);\n      }\n\n      columnIndex += headerSettings.origColspan;\n      var cancelProcessing = false;\n\n      if (columnIndex >= columnsLimit) {\n        // Adjust the colspan value to not overlap the columns limit.\n        headerSettings.colspan = headerSettings.origColspan - (columnIndex - columnsLimit);\n        headerSettings.origColspan = headerSettings.colspan;\n        cancelProcessing = true;\n      }\n\n      columns.push(headerSettings);\n\n      if (headerSettings.colspan > 1) {\n        for (var i = 0; i < headerSettings.colspan - 1; i++) {\n          columns.push(createPlaceholderHeaderSettings());\n        }\n      }\n\n      return !cancelProcessing;\n    });\n  });\n  var columnsLength = Math.max.apply(Math, _toConsumableArray(arrayMap(normalizedSettings, function (headersSettings) {\n    return headersSettings.length;\n  }))); // Normalize the length of each header layer to the same columns length.\n\n  arrayEach(normalizedSettings, function (headersSettings) {\n    if (headersSettings.length < columnsLength) {\n      var defaultSettings = arrayMap(new Array(columnsLength - headersSettings.length), function () {\n        return createDefaultHeaderSettings();\n      });\n      headersSettings.splice.apply(headersSettings, [headersSettings.length, 0].concat(_toConsumableArray(defaultSettings)));\n    }\n  });\n  return normalizedSettings;\n}", "/**\n * @typedef {object} DefaultHeaderSettings\n * @property {string} label The name/label of the column header.\n * @property {number} colspan Current calculated colspan value of the rendered column header element.\n * @property {number} origColspan Original colspan value, set once while parsing user-defined nested header settings.\n * @property {boolean} collapsible The flag determines whether the node is collapsible (can be collpased/expanded).\n * @property {number[]} crossHiddenColumns The list of visual column indexes which indicates that the specified columns within\n *                                         the header settings are hidden.\n * @property {boolean} isCollapsed The flag determines whether the node is collapsed.\n * @property {boolean} isHidden The flag determines whether the column header at specified index is hidden. If true\n *                              the TH element will be rendered as hidden (display: none).\n * @property {boolean} isRoot The flag which determines whether the column header settings is accually not renderable. That kind\n *                            of objects are generated after colspaned header to fill an array to correct size.\n *\n *                            For example for header with colspan = 8 the 7 blank objects are generated to fill the array settings\n *                            to length = 8.\n * @property {boolean} isPlaceholder The flag determines whether the column header at the specified index is non-renderable.\n */\n\n/**\n * Creates the header settings object with default values.\n *\n * @param {DefaultHeaderSettings} initialValues The initial values for the header settings object.\n * @returns {DefaultHeaderSettings}\n */\nexport function createDefaultHeaderSettings() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      _ref$label = _ref.label,\n      label = _ref$label === void 0 ? '' : _ref$label,\n      _ref$colspan = _ref.colspan,\n      colspan = _ref$colspan === void 0 ? 1 : _ref$colspan,\n      _ref$origColspan = _ref.origColspan,\n      origColspan = _ref$origColspan === void 0 ? 1 : _ref$origColspan,\n      _ref$collapsible = _ref.collapsible,\n      collapsible = _ref$collapsible === void 0 ? false : _ref$collapsible,\n      _ref$crossHiddenColum = _ref.crossHiddenColumns,\n      crossHiddenColumns = _ref$crossHiddenColum === void 0 ? [] : _ref$crossHiddenColum,\n      _ref$isCollapsed = _ref.isCollapsed,\n      isCollapsed = _ref$isCollapsed === void 0 ? false : _ref$isCollapsed,\n      _ref$isHidden = _ref.isHidden,\n      isHidden = _ref$isHidden === void 0 ? false : _ref$isHidden,\n      _ref$isRoot = _ref.isRoot,\n      isRoot = _ref$isRoot === void 0 ? false : _ref$isRoot,\n      _ref$isPlaceholder = _ref.isPlaceholder,\n      isPlaceholder = _ref$isPlaceholder === void 0 ? false : _ref$isPlaceholder;\n\n  return {\n    label: label,\n    colspan: colspan,\n    origColspan: origColspan,\n    collapsible: collapsible,\n    isCollapsed: isCollapsed,\n    crossHiddenColumns: crossHiddenColumns,\n    isHidden: isHidden,\n    isRoot: isRoot,\n    isPlaceholder: isPlaceholder\n  };\n}\n/**\n * Creates the header settings placeholder object. Those settings tell the header renderers\n * that this TH element should not be rendered (the node will be overlapped by the previously\n * created node with colspan bigger than 1).\n *\n * @returns {object}\n */\n\nexport function createPlaceholderHeaderSettings() {\n  return {\n    label: '',\n    isPlaceholder: true\n  };\n}", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\n\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\n\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\n\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\nimport { arrayEach } from \"../../../helpers/array.mjs\";\nimport TreeNode from \"../../../utils/dataStructures/tree.mjs\";\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @private\n * @class HeadersTree\n *\n * The header tree class keeps nested header settings in the tree\n * structure for easier node manipulation (e.q collapse or expand column).\n * That trees represent the current state of the nested headers. From the\n * trees, the matrix is generated for nested header renderers.\n *\n * The second role of the module is validation. While building the tree,\n * there is check whether the configuration contains overlapping\n * headers. If true, then the exception is thrown.\n *\n * The tree is static; it means that its column indexing never changes\n * even when a collapsing header is performed. The structure is based\n * on visual column indexes.\n *\n * For example, for that header configuration:\n *   +----+----+----+----+----+\n *   \u2502 A1                \u2502 A2 \u2502\n *   +----+----+----+----+----+\n *   \u2502 B1           \u2502 B2 \u2502 B3 \u2502\n *   +----+----+----+----+----+\n *   \u2502 C1      \u2502 C2 \u2502 C3 \u2502 C4 \u2502\n *   +----+----+----+----+----+\n *\n * The tree structures look like:\n *                (0)                      (4)           // a visual column index\n *                 \u2502                        \u2502\n *        .------(A1)------.              (A2)--.\n *   .--(B1)--.           (B2)--.              (B3)--.\n *  (C1)     (C2)              (C3)                 (C4)\n *\n */\n\n/* eslint-enable jsdoc/require-description-complete-sentence */\n\nvar _rootNodes = /*#__PURE__*/new WeakMap();\n\nvar _rootsIndex = /*#__PURE__*/new WeakMap();\n\nvar _sourceSettings = /*#__PURE__*/new WeakMap();\n\nvar HeadersTree = /*#__PURE__*/function () {\n  /**\n   * The collection of nested headers settings structured into trees. The root trees are stored\n   * under the visual column index.\n   *\n   * @private\n   * @type {Map<number, TreeNode>}\n   */\n\n  /**\n   * A map that translates the visual column indexes that intersect the range\n   * defined by the header colspan width to the root index.\n   *\n   * @private\n   * @type {Map<number, number>}\n   */\n\n  /**\n   * The instance of the SourceSettings class.\n   *\n   * @private\n   * @type {SourceSettings}\n   */\n  function HeadersTree(sourceSettings) {\n    _classCallCheck(this, HeadersTree);\n\n    _classPrivateFieldInitSpec(this, _rootNodes, {\n      writable: true,\n      value: new Map()\n    });\n\n    _classPrivateFieldInitSpec(this, _rootsIndex, {\n      writable: true,\n      value: new Map()\n    });\n\n    _classPrivateFieldInitSpec(this, _sourceSettings, {\n      writable: true,\n      value: null\n    });\n\n    _classPrivateFieldSet(this, _sourceSettings, sourceSettings);\n  }\n  /**\n   * Gets an array of the all root nodes.\n   *\n   * @returns {TreeNode[]}\n   */\n\n\n  _createClass(HeadersTree, [{\n    key: \"getRoots\",\n    value: function getRoots() {\n      return Array.from(_classPrivateFieldGet(this, _rootNodes).values());\n    }\n    /**\n     * Gets a root node by specified visual column index.\n     *\n     * @param {number} columnIndex A visual column index.\n     * @returns {TreeNode|undefined}\n     */\n\n  }, {\n    key: \"getRootByColumn\",\n    value: function getRootByColumn(columnIndex) {\n      var node;\n\n      if (_classPrivateFieldGet(this, _rootsIndex).has(columnIndex)) {\n        node = _classPrivateFieldGet(this, _rootNodes).get(_classPrivateFieldGet(this, _rootsIndex).get(columnIndex));\n      }\n\n      return node;\n    }\n    /**\n     * Gets a tree node by its position in the grid settings.\n     *\n     * @param {number} headerLevel Header level index (there is support only for positive values).\n     * @param {number} columnIndex A visual column index.\n     * @returns {TreeNode|undefined}\n     */\n\n  }, {\n    key: \"getNode\",\n    value: function getNode(headerLevel, columnIndex) {\n      var rootNode = this.getRootByColumn(columnIndex);\n\n      if (!rootNode) {\n        return;\n      } // Normalize the visual column index to a 0-based system for a specific \"box\" defined\n      // by root node colspan width.\n\n\n      var normColumnIndex = columnIndex - _classPrivateFieldGet(this, _rootsIndex).get(columnIndex);\n\n      var columnCursor = 0;\n      var treeNode; // Collect all parent nodes that depend on the collapsed node.\n\n      rootNode.walkDown(function (node) {\n        var _node$data = node.data,\n            origColspan = _node$data.origColspan,\n            nodeHeaderLevel = _node$data.headerLevel;\n\n        if (headerLevel === nodeHeaderLevel) {\n          if (normColumnIndex >= columnCursor && normColumnIndex <= columnCursor + origColspan - 1) {\n            treeNode = node;\n            return false; // Cancel tree traversing.\n          }\n\n          columnCursor += origColspan;\n        }\n      });\n      return treeNode;\n    }\n    /**\n     * Builds (or rebuilds if called again) root nodes indexes.\n     */\n\n  }, {\n    key: \"rebuildTreeIndex\",\n    value: function rebuildTreeIndex() {\n      var _this = this;\n\n      var columnIndex = 0;\n\n      _classPrivateFieldGet(this, _rootsIndex).clear();\n\n      arrayEach(_classPrivateFieldGet(this, _rootNodes), function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n            colspan = _ref2[1].data.colspan;\n\n        // Map tree range (colspan range/width) into visual column index of the root node.\n        for (var i = columnIndex; i < columnIndex + colspan; i++) {\n          _classPrivateFieldGet(_this, _rootsIndex).set(i, columnIndex);\n        }\n\n        columnIndex += colspan;\n      });\n    }\n    /**\n     * Builds trees based on SourceSettings class. Calling a method causes clearing the tree state built\n     * from the previous call.\n     */\n\n  }, {\n    key: \"buildTree\",\n    value: function buildTree() {\n      this.clear();\n\n      var columnsCount = _classPrivateFieldGet(this, _sourceSettings).getColumnsCount();\n\n      var columnIndex = 0;\n\n      while (columnIndex < columnsCount) {\n        var columnSettings = _classPrivateFieldGet(this, _sourceSettings).getHeaderSettings(0, columnIndex);\n\n        var rootNode = new TreeNode();\n\n        _classPrivateFieldGet(this, _rootNodes).set(columnIndex, rootNode);\n\n        this.buildLeaves(rootNode, columnIndex, 0, columnSettings.origColspan);\n        columnIndex += columnSettings.origColspan;\n      }\n\n      this.rebuildTreeIndex();\n    }\n    /**\n     * Builds leaves for specified tree node.\n     *\n     * @param {TreeNode} parentNode A node to which the leaves applies.\n     * @param {number} columnIndex A visual column index.\n     * @param {number} headerLevel Currently processed header level.\n     * @param {number} [extractionLength=1] Determines column extraction length for node children.\n     */\n\n  }, {\n    key: \"buildLeaves\",\n    value: function buildLeaves(parentNode, columnIndex, headerLevel) {\n      var _this2 = this;\n\n      var extractionLength = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n\n      var columnsSettings = _classPrivateFieldGet(this, _sourceSettings).getHeadersSettings(headerLevel, columnIndex, extractionLength);\n\n      headerLevel += 1;\n      arrayEach(columnsSettings, function (columnSettings) {\n        var nodeData = _objectSpread(_objectSpread({}, columnSettings), {}, {\n          /**\n           * The header level (tree node depth level).\n           *\n           * @type {number}\n           */\n          headerLevel: headerLevel - 1,\n\n          /**\n           * A visual column index.\n           *\n           * @type {number}\n           */\n          columnIndex: columnIndex\n        });\n\n        var node;\n\n        if (headerLevel === 1) {\n          // fill the root node\n          parentNode.data = nodeData;\n          node = parentNode;\n        } else {\n          node = new TreeNode(nodeData);\n          parentNode.addChild(node);\n        }\n\n        if (headerLevel < _classPrivateFieldGet(_this2, _sourceSettings).getLayersCount()) {\n          _this2.buildLeaves(node, columnIndex, headerLevel, columnSettings.origColspan);\n        }\n\n        columnIndex += columnSettings.origColspan;\n      });\n    }\n    /**\n     * Clears the tree to the initial state.\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      _classPrivateFieldGet(this, _rootNodes).clear();\n\n      _classPrivateFieldGet(this, _rootsIndex).clear();\n    }\n  }]);\n\n  return HeadersTree;\n}();\n\nexport { HeadersTree as default };", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptors.js\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/**\n * Depth-first pre-order strategy (https://en.wikipedia.org/wiki/Tree_traversal#Pre-order_(NLR)).\n *\n * @type {string}\n */\nexport var TRAVERSAL_DF_PRE = 'DF-pre-order';\n/**\n * @param {Function} callback A callback which will be called on each visited node.\n * @param {*} context A context to pass through.\n * @returns {boolean}\n */\n\nexport function depthFirstPreOrder(callback, context) {\n  var continueTraverse = callback.call(context, this);\n\n  for (var i = 0; i < this.childs.length; i++) {\n    if (continueTraverse === false) {\n      return false;\n    }\n\n    continueTraverse = depthFirstPreOrder.call(this.childs[i], callback, context);\n  }\n\n  return continueTraverse;\n}\n/**\n * Depth-first post-order strategy (https://en.wikipedia.org/wiki/Tree_traversal#Post-order_(NLR)).\n *\n * @type {string}\n */\n\nexport var TRAVERSAL_DF_POST = 'DF-post-order';\n/**\n * @param {Function} callback A callback which will be called on each visited node.\n * @param {*} context A context to pass through.\n * @returns {boolean}\n */\n\nfunction depthFirstPostOrder(callback, context) {\n  for (var i = 0; i < this.childs.length; i++) {\n    var continueTraverse = depthFirstPostOrder.call(this.childs[i], callback, context);\n\n    if (continueTraverse === false) {\n      return false;\n    }\n  }\n\n  return callback.call(context, this);\n}\n/**\n * Breadth-first traversal strategy (https://en.wikipedia.org/wiki/Tree_traversal#Breadth-first_search_/_level_order).\n *\n * @type {string}\n */\n\n\nexport var TRAVERSAL_BF = 'BF';\n/**\n * @param {Function} callback A callback which will be called on each visited node.\n * @param {*} context A context to pass through.\n */\n\nfunction breadthFirst(callback, context) {\n  var queue = [this];\n  /**\n   * Internal processor.\n   */\n\n  function process() {\n    if (queue.length === 0) {\n      return;\n    }\n\n    var node = queue.shift();\n    queue.push.apply(queue, _toConsumableArray(node.childs));\n\n    if (callback.call(context, node) !== false) {\n      process();\n    }\n  }\n\n  process();\n}\n/**\n * Default strategy for tree traversal.\n *\n * @type {string}\n */\n\n\nvar DEFAULT_TRAVERSAL_STRATEGY = TRAVERSAL_BF;\n/**\n * Collection of all available tree traversal strategies.\n *\n * @type {Map<string, Function>}\n */\n\nvar TRAVERSAL_STRATEGIES = new Map([[TRAVERSAL_DF_PRE, depthFirstPreOrder], [TRAVERSAL_DF_POST, depthFirstPostOrder], [TRAVERSAL_BF, breadthFirst]]);\n/**\n *\n */\n\nvar TreeNode = /*#__PURE__*/function () {\n  /**\n   * A tree data.\n   *\n   * @type {object}\n   */\n\n  /**\n   * A parent node.\n   *\n   * @type {TreeNode}\n   */\n\n  /**\n   * A tree leaves.\n   *\n   * @type {TreeNode[]}\n   */\n  function TreeNode(data) {\n    _classCallCheck(this, TreeNode);\n\n    _defineProperty(this, \"data\", {});\n\n    _defineProperty(this, \"parent\", null);\n\n    _defineProperty(this, \"childs\", []);\n\n    this.data = data;\n  }\n  /**\n   * Adds a node to tree leaves. Added node is linked with the parent node through \"parent\" property.\n   *\n   * @param {TreeNode} node A TreeNode to add.\n   */\n\n\n  _createClass(TreeNode, [{\n    key: \"addChild\",\n    value: function addChild(node) {\n      node.parent = this;\n      this.childs.push(node);\n    }\n    /* eslint-disable jsdoc/require-description-complete-sentence */\n\n    /**\n     * @memberof TreeNode#\n     * @function cloneTree\n     *\n     * Clones a tree structure deeply.\n     *\n     * For example, for giving a tree structure:\n     *      .--(B1)--.\n     *   .-(C1)   .-(C2)-.----.\n     *  (D1)     (D2)   (D3) (D4)\n     *\n     * Cloning a tree starting from C2 node creates a mirrored tree structure.\n     *     .-(C2')-.-----.\n     *    (D2')   (D3') (D4')\n     *\n     * The cloned tree can be safely modified without affecting the original structure.\n     * After modification, the clone can be merged with a tree using the \"replaceTreeWith\" method.\n     *\n     * @param {TreeNode} [nodeTree=this] A TreeNode to clone.\n     * @returns {TreeNode}\n     */\n\n    /* eslint-enable jsdoc/require-description-complete-sentence */\n\n  }, {\n    key: \"cloneTree\",\n    value: function cloneTree() {\n      var nodeTree = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this;\n      var clonedNode = new TreeNode(_objectSpread({}, nodeTree.data));\n\n      for (var i = 0; i < nodeTree.childs.length; i++) {\n        clonedNode.addChild(this.cloneTree(nodeTree.childs[i]));\n      }\n\n      return clonedNode;\n    }\n    /**\n     * Replaces the current node with a passed tree structure.\n     *\n     * @param {TreeNode} nodeTree A TreeNode to replace with.\n     */\n\n  }, {\n    key: \"replaceTreeWith\",\n    value: function replaceTreeWith(nodeTree) {\n      this.data = _objectSpread({}, nodeTree.data);\n      this.childs = [];\n\n      for (var i = 0; i < nodeTree.childs.length; i++) {\n        this.addChild(nodeTree.childs[i]);\n      }\n    }\n    /**\n     * Traverses the tree structure through node childs. The walk down traversing supports\n     * a three different strategies.\n     *  - Depth-first pre-order strategy (https://en.wikipedia.org/wiki/Tree_traversal#Pre-order_(NLR));\n     *  - Depth-first post-order strategy (https://en.wikipedia.org/wiki/Tree_traversal#Post-order_(NLR));\n     *  - Breadth-first traversal strategy (https://en.wikipedia.org/wiki/Tree_traversal#Breadth-first_search_/_level_order).\n     *\n     * @param {Function} callback The callback function which will be called for each node.\n     * @param {string} [traversalStrategy=DEFAULT_TRAVERSAL_STRATEGY] Traversing strategy.\n     */\n\n  }, {\n    key: \"walkDown\",\n    value: function walkDown(callback) {\n      var traversalStrategy = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_TRAVERSAL_STRATEGY;\n\n      if (!TRAVERSAL_STRATEGIES.has(traversalStrategy)) {\n        throw new Error(\"Traversal strategy \\\"\".concat(traversalStrategy, \"\\\" does not exist\"));\n      }\n\n      TRAVERSAL_STRATEGIES.get(traversalStrategy).call(this, callback, this);\n    }\n    /**\n     * Traverses the tree structure through node parents.\n     *\n     * @param {Function} callback The callback function which will be called for each node.\n     */\n\n  }, {\n    key: \"walkUp\",\n    value: function walkUp(callback) {\n      var context = this;\n\n      var process = function process(node) {\n        var continueTraverse = callback.call(context, node);\n\n        if (continueTraverse !== false && node.parent !== null) {\n          process(node.parent);\n        }\n      };\n\n      process(this);\n    }\n  }]);\n\n  return TreeNode;\n}();\n\nexport { TreeNode as default };", "import \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.map.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\n/**\n * The NodeModifiers module is responsible for the modification of a tree structure\n * in a way to achieve new column headers state.\n */\nimport { collapseNode } from \"./collapse.mjs\";\nimport { expandNode } from \"./expand.mjs\";\nimport { hideColumn } from \"./hideColumn.mjs\";\nimport { showColumn } from \"./showColumn.mjs\";\nvar availableModifiers = new Map([['collapse', collapseNode], ['expand', expandNode], ['hide-column', hideColumn], ['show-column', showColumn]]);\n/**\n * An entry point for triggering a node modifiers. If the triggered action\n * does not exist the exception is thrown.\n *\n * @param {string} actionName An action name to trigger.\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @param {number} gridColumnIndex The visual column index that comes from the nested headers grid.\n *                                 The index, as opposed to the `columnIndex` in the tree node\n *                                 (which describes the column index of the root node of the header\n *                                 element), describes the index passed from the grid. Hence, the\n *                                 index can be between the column index of the node and its colspan\n *                                 width.\n * @returns {object}\n */\n\nexport function triggerNodeModification(actionName, nodeToProcess, gridColumnIndex) {\n  if (!availableModifiers.has(actionName)) {\n    throw new Error(\"The node modifier action (\\\"\".concat(actionName, \"\\\") does not exist.\"));\n  }\n\n  return availableModifiers.get(actionName)(nodeToProcess, gridColumnIndex);\n}", "import \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport { arrayEach } from \"../../../../helpers/array.mjs\";\nimport { expandNode } from \"./expand.mjs\";\nimport { getFirstChildProperty, isNodeReflectsFirstChildColspan, traverseHiddenNodeColumnIndexes } from \"./utils/tree.mjs\";\n/**\n * Collapsing a node is a process where the processing node is collapsed\n * to the colspan width of the first child. All node children, except the\n * first one, are hidden. To prevent losing a current state of node children\n * on the right, all nodes are cloned (and restored while expanding), and\n * only then original nodes are modified (hidden in this case).\n *\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @returns {object} Returns an object with properties:\n *                    - rollbackModification: The function that rollbacks\n *                      the tree to the previous state.\n *                    - affectedColumns: The list of the visual column\n *                      indexes which are affected. That list is passed\n *                      to the hiddens column logic.\n *                    - colspanCompensation: The number of colspan by\n *                      which the processed node colspan was reduced.\n */\n\nexport function collapseNode(nodeToProcess) {\n  var _getFirstChildPropert;\n\n  var nodeData = nodeToProcess.data,\n      nodeChilds = nodeToProcess.childs;\n\n  if (nodeData.isCollapsed || nodeData.isHidden || nodeData.origColspan <= 1) {\n    return {\n      rollbackModification: function rollbackModification() {},\n      affectedColumns: [],\n      colspanCompensation: 0\n    };\n  }\n\n  var isNodeReflected = isNodeReflectsFirstChildColspan(nodeToProcess);\n\n  if (isNodeReflected) {\n    return collapseNode(nodeChilds[0]);\n  }\n\n  nodeData.isCollapsed = true;\n  var allLeavesExceptMostLeft = nodeChilds.slice(1);\n  var affectedColumns = new Set();\n\n  if (allLeavesExceptMostLeft.length > 0) {\n    arrayEach(allLeavesExceptMostLeft, function (node) {\n      traverseHiddenNodeColumnIndexes(node, function (gridColumnIndex) {\n        affectedColumns.add(gridColumnIndex);\n      }); // Clone the tree to preserve original tree state after header expanding.\n\n      node.data.clonedTree = node.cloneTree(); // Hide all leaves except the first leaf on the left (on headers context hide all\n      // headers on the right).\n\n      node.walkDown(function (_ref) {\n        var data = _ref.data;\n        data.isHidden = true;\n      });\n    });\n  } else {\n    var origColspan = nodeData.origColspan,\n        columnIndex = nodeData.columnIndex; // Add column to \"affected\" started from 1. The header without children can not be\n    // collapsed so the first have to be visible (untouched).\n\n    for (var i = 1; i < origColspan; i++) {\n      var gridColumnIndex = columnIndex + i;\n      affectedColumns.add(gridColumnIndex);\n    }\n  } // Calculate by how many colspan it needs to reduce the headings to match them to\n  // the first child colspan width.\n\n\n  var colspanCompensation = nodeData.colspan - ((_getFirstChildPropert = getFirstChildProperty(nodeToProcess, 'colspan')) !== null && _getFirstChildPropert !== void 0 ? _getFirstChildPropert : 1);\n  nodeToProcess.walkUp(function (node) {\n    var data = node.data;\n    data.colspan -= colspanCompensation;\n\n    if (data.colspan <= 1) {\n      data.colspan = 1;\n      data.isCollapsed = true;\n    } else if (isNodeReflectsFirstChildColspan(node)) {\n      data.isCollapsed = getFirstChildProperty(node, 'isCollapsed');\n    }\n  });\n  return {\n    rollbackModification: function rollbackModification() {\n      return expandNode(nodeToProcess);\n    },\n    affectedColumns: Array.from(affectedColumns),\n    colspanCompensation: colspanCompensation\n  };\n}", "import \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport { arrayEach } from \"../../../../helpers/array.mjs\";\nimport { collapseNode } from \"./collapse.mjs\";\nimport { getFirstChildProperty, isNodeReflectsFirstChildColspan, traverseHiddenNodeColumnIndexes } from \"./utils/tree.mjs\";\n/**\n * Expanding a node is a process where the processing node is expanded to\n * its original colspan width. To restore an original state of all node\n * children on the right, the modified nodes are replaced with the cloned\n * nodes (they were cloned while collapsing).\n *\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @returns {object} Returns an object with properties:\n *                    - rollbackModification: The function that rollbacks\n *                      the tree to the previous state.\n *                    - affectedColumns: The list of the visual column\n *                      indexes which are affected. That list is passed\n *                      to the hiddens column logic.\n *                    - colspanCompensation: The number of colspan by\n *                      which the processed node colspan was increased.\n */\n\nexport function expandNode(nodeToProcess) {\n  var nodeData = nodeToProcess.data,\n      nodeChilds = nodeToProcess.childs;\n\n  if (!nodeData.isCollapsed || nodeData.isHidden || nodeData.origColspan <= 1) {\n    return {\n      rollbackModification: function rollbackModification() {},\n      affectedColumns: [],\n      colspanCompensation: 0\n    };\n  }\n\n  var isNodeReflected = isNodeReflectsFirstChildColspan(nodeToProcess);\n\n  if (isNodeReflected) {\n    return expandNode(nodeChilds[0]);\n  }\n\n  nodeData.isCollapsed = false;\n  var allLeavesExceptMostLeft = nodeChilds.slice(1);\n  var affectedColumns = new Set();\n  var colspanCompensation = 0;\n\n  if (allLeavesExceptMostLeft.length > 0) {\n    arrayEach(allLeavesExceptMostLeft, function (node) {\n      // Restore original state of the collapsed headers.\n      node.replaceTreeWith(node.data.clonedTree);\n      node.data.clonedTree = null;\n      var leafData = node.data; // Calculate by how many colspan it needs to increase the headings to match them to\n      // the colspan width of all its children.\n\n      colspanCompensation += leafData.colspan;\n      traverseHiddenNodeColumnIndexes(node, function (gridColumnIndex) {\n        affectedColumns.add(gridColumnIndex);\n      });\n    });\n  } else {\n    var colspan = nodeData.colspan,\n        origColspan = nodeData.origColspan,\n        columnIndex = nodeData.columnIndex; // In a case when the node doesn't have any children restore the colspan width to\n    // its original state.\n\n    colspanCompensation = origColspan - colspan; // Add column to \"affected\" started from 1. The header without children can not be\n    // collapsed so the first column is already visible and we shouldn't touch it.\n\n    for (var i = 1; i < origColspan; i++) {\n      affectedColumns.add(columnIndex + i);\n    }\n  }\n\n  nodeToProcess.walkUp(function (node) {\n    var data = node.data;\n    data.colspan += colspanCompensation;\n\n    if (data.colspan >= data.origColspan) {\n      data.colspan = data.origColspan;\n      data.isCollapsed = false;\n    } else if (isNodeReflectsFirstChildColspan(node)) {\n      data.isCollapsed = getFirstChildProperty(node, 'isCollapsed');\n    }\n  });\n  return {\n    rollbackModification: function rollbackModification() {\n      return collapseNode(nodeToProcess);\n    },\n    affectedColumns: Array.from(affectedColumns),\n    colspanCompensation: colspanCompensation\n  };\n}", "/**\n * Traverses the tree nodes and calls a callback when no hidden node is found. The callback\n * is called with visual column index then.\n *\n * @param {TreeNode} node A tree node to traverse.\n * @param {Function} callback The callback function which will be called for each node.\n */\nexport function traverseHiddenNodeColumnIndexes(node, callback) {\n  node.walkDown(function (_ref) {\n    var data = _ref.data,\n        childs = _ref.childs;\n\n    if (!data.isHidden) {\n      callback(data.columnIndex);\n\n      if (childs.length === 0) {\n        for (var i = 1; i < data.colspan; i++) {\n          callback(data.columnIndex + i);\n        }\n      }\n    }\n  });\n}\n/**\n * A tree helper for retrieving a data from the first child.\n *\n * @param {TreeNode} node A tree node to check.\n * @param {string} propertyName A name of the property whose value you want to get.\n * @returns {*}\n */\n\nexport function getFirstChildProperty(_ref2, propertyName) {\n  var childs = _ref2.childs;\n\n  if (childs.length === 0) {\n    return;\n  }\n\n  return childs[0].data[propertyName];\n}\n/**\n * A tree helper which checks if passed node has the same original colspan as its\n * first child. In that case the node is treated as \"mirrored\" or \"reflected\" every\n * action performed on one of that nodes should be reflected to other \"mirrored\" node.\n *\n * In that case nodes A1 and A2 are \"reflected\"\n *   +----+----+----+----+\n *   | A1      | B1      |\n *   +----+----+----+----+\n *   | A2      | B2 | B3 |\n *   +----+----+----+----+.\n *\n * @param {TreeNode} node A tree node to check.\n * @returns {boolean}\n */\n\nexport function isNodeReflectsFirstChildColspan(node) {\n  return getFirstChildProperty(node, 'origColspan') === node.data.origColspan;\n}", "import \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\n\nvar _templateObject;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nimport \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport { toSingleLine } from \"../../../../helpers/templateLiteralTag.mjs\";\n/**\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @param {number} gridColumnIndex The visual column index that triggers the node modification.\n *                                 The index can be between the root node column index and\n *                                 column index plus node colspan length.\n */\n\nexport function hideColumn(nodeToProcess, gridColumnIndex) {\n  if (!Number.isInteger(gridColumnIndex)) {\n    throw new Error('The passed gridColumnIndex argument has invalid type.');\n  }\n\n  if (nodeToProcess.childs.length > 0) {\n    throw new Error(toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"The passed node is not the last node on the tree. Only for \\nthe last node, the hide column modification can be applied.\"], [\"The passed node is not the last node on the tree. Only for\\\\x20\\nthe last node, the hide column modification can be applied.\"]))));\n  }\n\n  var crossHiddenColumns = nodeToProcess.data.crossHiddenColumns;\n\n  if (crossHiddenColumns.includes(gridColumnIndex)) {\n    return;\n  }\n\n  var isCollapsibleNode = false;\n  nodeToProcess.walkUp(function (node) {\n    var collapsible = node.data.collapsible;\n\n    if (collapsible) {\n      isCollapsibleNode = true;\n      return false; // Cancel tree traversing\n    }\n  }); // TODO: When the node is collapsible do not hide the column. Currently collapsible headers\n  // does not work with hidden columns (hidden index map types).\n\n  if (isCollapsibleNode) {\n    return;\n  }\n\n  nodeToProcess.walkUp(function (node) {\n    var data = node.data;\n    data.crossHiddenColumns.push(gridColumnIndex);\n\n    if (data.colspan > 1) {\n      data.colspan -= 1;\n    } else {\n      data.isHidden = true;\n    }\n  });\n}", "import \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\n\nvar _templateObject;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nimport \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport { toSingleLine } from \"../../../../helpers/templateLiteralTag.mjs\";\n/**\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @param {number} gridColumnIndex The visual column index that triggers the node modification.\n *                                 The index can be between the root node column index and\n *                                 column index plus node colspan length.\n */\n\nexport function showColumn(nodeToProcess, gridColumnIndex) {\n  if (!Number.isInteger(gridColumnIndex)) {\n    throw new Error('The passed gridColumnIndex argument has invalid type.');\n  }\n\n  if (nodeToProcess.childs.length > 0) {\n    throw new Error(toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"The passed node is not the last node on the tree. Only for \\nthe last node, the show column modification can be applied.\"], [\"The passed node is not the last node on the tree. Only for\\\\x20\\nthe last node, the show column modification can be applied.\"]))));\n  }\n\n  var crossHiddenColumns = nodeToProcess.data.crossHiddenColumns;\n\n  if (!crossHiddenColumns.includes(gridColumnIndex)) {\n    return;\n  }\n\n  var isCollapsibleNode = false;\n  nodeToProcess.walkUp(function (node) {\n    var collapsible = node.data.collapsible;\n\n    if (collapsible) {\n      isCollapsibleNode = true;\n      return false; // Cancel tree traversing\n    }\n  }); // TODO: When the node is collapsible do not show the column. Currently collapsible headers\n  // does not work with hidden columns (hidden index map types).\n\n  if (isCollapsibleNode) {\n    return;\n  }\n\n  nodeToProcess.walkUp(function (node) {\n    var data = node.data;\n    data.crossHiddenColumns.splice(data.crossHiddenColumns.indexOf(gridColumnIndex), 1);\n\n    if (!data.isHidden && data.colspan < data.origColspan) {\n      data.colspan += 1;\n    }\n\n    data.isHidden = false;\n  });\n}", "var _excluded = [\"crossHiddenColumns\"];\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.symbol.js\";\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\nimport { arrayEach } from \"../../../helpers/array.mjs\";\nimport { createDefaultHeaderSettings, createPlaceholderHeaderSettings } from \"./utils.mjs\";\n/**\n * A function that dump a tree structure into multidimensional array. That structure is\n * later processed by header renderers to modify TH elements to achieve a proper\n * DOM structure.\n *\n * That structure contains settings object for every TH element generated by Walkontable.\n * The matrix operates on visual column index.\n *\n * Output example:\n *   [\n *     [\n *       { label: 'A1', colspan: 2, origColspan: 2, isHidden: false, ... },\n *       { label: '', colspan: 1, origColspan: 1, isHidden: true, ... },\n *       { label: '', colspan: 1, origColspan: 1, isHidden: false, ... },\n *     ],\n *     [\n *       { label: 'true', colspan: 1, origColspan: 1, isHidden: false, ... },\n *       { label: 'B2', colspan: 1, origColspan: 1, isHidden: false, ... },\n *       { label: '4', colspan: 1, origColspan: 1, isHidden: false, ... },\n *     ],\n *     [\n *       { label: '', colspan: 1, origColspan: 1, isHidden: false, ... },\n *       { label: '', colspan: 1, origColspan: 1, isHidden: false, ... },\n *       { label: '', colspan: 1, origColspan: 1, isHidden: false, ... },\n *     ],\n *   ]\n *\n * @param {TreeNode[]} headerRoots An array of root nodes.\n * @returns {Array[]}\n */\n\nexport function generateMatrix(headerRoots) {\n  var matrix = [];\n  arrayEach(headerRoots, function (rootNode) {\n    rootNode.walkDown(function (node) {\n      var nodeData = node.data;\n      var origColspan = nodeData.origColspan,\n          columnIndex = nodeData.columnIndex,\n          headerLevel = nodeData.headerLevel,\n          crossHiddenColumns = nodeData.crossHiddenColumns;\n      var colspanHeaderLayer = createNestedArrayIfNecessary(matrix, headerLevel);\n      var isRootSettingsFound = false;\n\n      for (var i = columnIndex; i < columnIndex + origColspan; i++) {\n        var isColumnHidden = crossHiddenColumns.includes(i);\n\n        if (isColumnHidden || isRootSettingsFound) {\n          colspanHeaderLayer.push(createPlaceholderHeaderSettings(nodeData));\n        } else {\n          var headerRootSettings = createHeaderSettings(nodeData);\n          headerRootSettings.isRoot = true;\n          colspanHeaderLayer.push(headerRootSettings);\n          isRootSettingsFound = true;\n        }\n      }\n    });\n  });\n  return matrix;\n}\n/**\n * Creates header settings object.\n *\n * @param {object} nodeData The tree data object.\n * @returns {object}\n */\n\nfunction createHeaderSettings(nodeData) {\n  // For the matrix module we do not need to export \"crossHiddenColumns\" key. It's redundant here.\n  var _createDefaultHeaderS = createDefaultHeaderSettings(nodeData),\n      crossHiddenColumns = _createDefaultHeaderS.crossHiddenColumns,\n      headerRootSettings = _objectWithoutProperties(_createDefaultHeaderS, _excluded);\n\n  return headerRootSettings;\n}\n/**\n * Internal helper which ensures that subarray exists under specified index.\n *\n * @param {Array[]} array An array to check.\n * @param {number} index An array index under the subarray should be checked.\n * @returns {Array}\n */\n\n\nfunction createNestedArrayIfNecessary(array, index) {\n  var subArray;\n\n  if (Array.isArray(array[index])) {\n    subArray = array[index];\n  } else {\n    subArray = [];\n    array[index] = subArray;\n  }\n\n  return subArray;\n}", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { fastInnerHTML } from \"../../../helpers/dom/element.mjs\";\nimport { clone } from \"../../../helpers/object.mjs\";\n/**\n * @private\n */\n\nvar GhostTable = /*#__PURE__*/function () {\n  function GhostTable(plugin) {\n    _classCallCheck(this, GhostTable);\n\n    /**\n     * Reference to NestedHeaders plugin.\n     *\n     * @type {NestedHeaders}\n     */\n    this.nestedHeaders = plugin;\n    /**\n     * Temporary element created to get minimal headers widths.\n     *\n     * @type {*}\n     */\n\n    this.container = void 0;\n    /**\n     * Cached the headers widths.\n     *\n     * @type {Array}\n     */\n\n    this.widthsCache = [];\n  }\n  /**\n   * Build cache of the headers widths.\n   *\n   * @private\n   */\n\n\n  _createClass(GhostTable, [{\n    key: \"buildWidthsMapper\",\n    value: function buildWidthsMapper() {\n      this.container = this.nestedHeaders.hot.rootDocument.createElement('div');\n      this.buildGhostTable(this.container);\n      this.nestedHeaders.hot.rootElement.appendChild(this.container);\n      var columns = this.container.querySelectorAll('tr:last-of-type th');\n      var maxColumns = columns.length;\n      this.widthsCache.length = 0;\n\n      for (var i = 0; i < maxColumns; i++) {\n        this.widthsCache.push(columns[i].offsetWidth);\n      }\n\n      this.container.parentNode.removeChild(this.container);\n      this.container = null;\n      this.nestedHeaders.hot.render();\n    }\n    /**\n     * Build temporary table for getting minimal columns widths.\n     *\n     * @private\n     * @param {HTMLElement} container The element where the DOM nodes are injected.\n     */\n\n  }, {\n    key: \"buildGhostTable\",\n    value: function buildGhostTable(container) {\n      var rootDocument = this.nestedHeaders.hot.rootDocument;\n      var fragment = rootDocument.createDocumentFragment();\n      var table = rootDocument.createElement('table');\n      var lastRowColspan = false;\n      var isDropdownEnabled = !!this.nestedHeaders.hot.getSettings().dropdownMenu;\n      var maxRows = this.nestedHeaders.getLayersCount();\n      var maxCols = this.nestedHeaders.hot.countCols();\n      var lastRowIndex = maxRows - 1;\n\n      for (var row = 0; row < maxRows; row++) {\n        var tr = rootDocument.createElement('tr');\n        lastRowColspan = false;\n\n        for (var col = 0; col < maxCols; col++) {\n          var td = rootDocument.createElement('th');\n          var headerObj = clone(this.nestedHeaders.getHeaderSettings(row, col));\n\n          if (headerObj && !headerObj.isHidden) {\n            if (row === lastRowIndex) {\n              if (headerObj.colspan > 1) {\n                lastRowColspan = true;\n              }\n\n              if (isDropdownEnabled) {\n                headerObj.label += '<button class=\"changeType\"></button>';\n              }\n            }\n\n            fastInnerHTML(td, headerObj.label); // The guard here is needed because on IE11 an error is thrown if you\n            // try to assign an incorrect value to `td.colSpan` here.\n\n            if (headerObj.colspan !== undefined) {\n              td.colSpan = headerObj.colspan;\n            }\n\n            tr.appendChild(td);\n          }\n        }\n\n        table.appendChild(tr);\n      } // We have to be sure the last row contains only the single columns.\n\n\n      if (lastRowColspan) {\n        {\n          var _tr = rootDocument.createElement('tr');\n\n          for (var _col = 0; _col < maxCols; _col++) {\n            var _td = rootDocument.createElement('th');\n\n            _tr.appendChild(_td);\n          }\n\n          table.appendChild(_tr);\n        }\n      }\n\n      fragment.appendChild(table);\n      container.appendChild(fragment);\n    }\n    /**\n     * Clear the widths cache.\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.container = null;\n      this.widthsCache.length = 0;\n    }\n  }]);\n\n  return GhostTable;\n}();\n\nexport default GhostTable;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.reduce.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport DataManager from \"./data/dataManager.mjs\";\nimport CollapsingUI from \"./ui/collapsing.mjs\";\nimport HeadersUI from \"./ui/headers.mjs\";\nimport ContextMenuUI from \"./ui/contextMenu.mjs\";\nimport { error } from \"../../helpers/console.mjs\";\nimport { isArrayOfObjects } from \"../../helpers/data.mjs\";\nimport { TrimmingMap } from \"../../translations/index.mjs\";\nimport RowMoveController from \"./utils/rowMoveController.mjs\";\nexport var PLUGIN_KEY = 'nestedRows';\nexport var PLUGIN_PRIORITY = 300;\nvar privatePool = new WeakMap();\n/**\n * Error message for the wrong data type error.\n */\n\nvar WRONG_DATA_TYPE_ERROR = 'The Nested Rows plugin requires an Array of Objects as a dataset to be' + ' provided. The plugin has been disabled.';\n/**\n * @plugin NestedRows\n * @class NestedRows\n *\n * @description\n * Plugin responsible for displaying and operating on data sources with nested structures.\n */\n\nexport var NestedRows = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(NestedRows, _BasePlugin);\n\n  var _super = _createSuper(NestedRows);\n\n  function NestedRows(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, NestedRows);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Reference to the DataManager instance.\n     *\n     * @private\n     * @type {object}\n     */\n\n    _this.dataManager = null;\n    /**\n     * Reference to the HeadersUI instance.\n     *\n     * @private\n     * @type {object}\n     */\n\n    _this.headersUI = null;\n    /**\n     * Map of skipped rows by plugin.\n     *\n     * @private\n     * @type {null|TrimmingMap}\n     */\n\n    _this.collapsedRowsMap = null;\n    privatePool.set(_assertThisInitialized(_this), {\n      movedToCollapsed: false,\n      skipRender: null,\n      skipCoreAPIModifiers: false\n    });\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link NestedRows#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(NestedRows, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.collapsedRowsMap = this.hot.rowIndexMapper.registerMap('nestedRows', new TrimmingMap());\n      this.dataManager = new DataManager(this, this.hot);\n      this.collapsingUI = new CollapsingUI(this, this.hot);\n      this.headersUI = new HeadersUI(this, this.hot);\n      this.contextMenuUI = new ContextMenuUI(this, this.hot);\n      this.rowMoveController = new RowMoveController(this);\n      this.addHook('afterInit', function () {\n        return _this2.onAfterInit.apply(_this2, arguments);\n      });\n      this.addHook('beforeViewRender', function () {\n        return _this2.onBeforeViewRender.apply(_this2, arguments);\n      });\n      this.addHook('modifyRowData', function () {\n        return _this2.onModifyRowData.apply(_this2, arguments);\n      });\n      this.addHook('modifySourceLength', function () {\n        return _this2.onModifySourceLength.apply(_this2, arguments);\n      });\n      this.addHook('beforeDataSplice', function () {\n        return _this2.onBeforeDataSplice.apply(_this2, arguments);\n      });\n      this.addHook('filterData', function () {\n        return _this2.onFilterData.apply(_this2, arguments);\n      });\n      this.addHook('afterContextMenuDefaultOptions', function () {\n        return _this2.onAfterContextMenuDefaultOptions.apply(_this2, arguments);\n      });\n      this.addHook('afterGetRowHeader', function () {\n        return _this2.onAfterGetRowHeader.apply(_this2, arguments);\n      });\n      this.addHook('beforeOnCellMouseDown', function () {\n        return _this2.onBeforeOnCellMouseDown.apply(_this2, arguments);\n      });\n      this.addHook('beforeRemoveRow', function () {\n        return _this2.onBeforeRemoveRow.apply(_this2, arguments);\n      });\n      this.addHook('afterRemoveRow', function () {\n        return _this2.onAfterRemoveRow.apply(_this2, arguments);\n      });\n      this.addHook('beforeAddChild', function () {\n        return _this2.onBeforeAddChild.apply(_this2, arguments);\n      });\n      this.addHook('afterAddChild', function () {\n        return _this2.onAfterAddChild.apply(_this2, arguments);\n      });\n      this.addHook('beforeDetachChild', function () {\n        return _this2.onBeforeDetachChild.apply(_this2, arguments);\n      });\n      this.addHook('afterDetachChild', function () {\n        return _this2.onAfterDetachChild.apply(_this2, arguments);\n      });\n      this.addHook('modifyRowHeaderWidth', function () {\n        return _this2.onModifyRowHeaderWidth.apply(_this2, arguments);\n      });\n      this.addHook('afterCreateRow', function () {\n        return _this2.onAfterCreateRow.apply(_this2, arguments);\n      });\n      this.addHook('beforeRowMove', function () {\n        return _this2.onBeforeRowMove.apply(_this2, arguments);\n      });\n      this.addHook('beforeLoadData', function (data) {\n        return _this2.onBeforeLoadData(data);\n      });\n\n      _get(_getPrototypeOf(NestedRows.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.hot.rowIndexMapper.unregisterMap('nestedRows');\n\n      _get(_getPrototypeOf(NestedRows.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin(); // We store a state of the data manager.\n\n      var currentSourceData = this.dataManager.getData();\n      this.enablePlugin(); // After enabling plugin previously stored data is restored.\n\n      this.dataManager.updateWithData(currentSourceData);\n\n      _get(_getPrototypeOf(NestedRows.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * `beforeRowMove` hook callback.\n     *\n     * @private\n     * @param {Array} rows Array of visual row indexes to be moved.\n     * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements\n     *   will be placed after the moving action. To check the visualization of the final index, please take a look at\n     *   [documentation](@/guides/rows/row-summary.md).\n     * @param {undefined|number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we\n     *   are going to drop the moved elements. To check visualization of drop index please take a look at\n     *   [documentation](@/guides/rows/row-summary.md).\n     * @param {boolean} movePossible Indicates if it's possible to move rows to the desired position.\n     * @fires Hooks#afterRowMove\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"onBeforeRowMove\",\n    value: function onBeforeRowMove(rows, finalIndex, dropIndex, movePossible) {\n      return this.rowMoveController.onBeforeRowMove(rows, finalIndex, dropIndex, movePossible);\n    }\n    /**\n     * Enable the modify hook skipping flag - allows retrieving the data from Handsontable without this plugin's\n     * modifications.\n     */\n\n  }, {\n    key: \"disableCoreAPIModifiers\",\n    value: function disableCoreAPIModifiers() {\n      var priv = privatePool.get(this);\n      priv.skipCoreAPIModifiers = true;\n    }\n    /**\n     * Disable the modify hook skipping flag.\n     */\n\n  }, {\n    key: \"enableCoreAPIModifiers\",\n    value: function enableCoreAPIModifiers() {\n      var priv = privatePool.get(this);\n      priv.skipCoreAPIModifiers = false;\n    }\n    /**\n     * `beforeOnCellMousedown` hook callback.\n     *\n     * @private\n     * @param {MouseEvent} event Mousedown event.\n     * @param {object} coords Cell coords.\n     * @param {HTMLElement} TD Clicked cell.\n     */\n\n  }, {\n    key: \"onBeforeOnCellMouseDown\",\n    value: function onBeforeOnCellMouseDown(event, coords, TD) {\n      this.collapsingUI.toggleState(event, coords, TD);\n    }\n    /**\n     * The modifyRowData hook callback.\n     *\n     * @private\n     * @param {number} row Visual row index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"onModifyRowData\",\n    value: function onModifyRowData(row) {\n      var priv = privatePool.get(this);\n\n      if (priv.skipCoreAPIModifiers) {\n        return;\n      }\n\n      return this.dataManager.getDataObject(row);\n    }\n    /**\n     * Modify the source data length to match the length of the nested structure.\n     *\n     * @private\n     * @returns {number}\n     */\n\n  }, {\n    key: \"onModifySourceLength\",\n    value: function onModifySourceLength() {\n      var priv = privatePool.get(this);\n\n      if (priv.skipCoreAPIModifiers) {\n        return;\n      }\n\n      return this.dataManager.countAllRows();\n    }\n    /**\n     * @private\n     * @param {number} index The index where the data was spliced.\n     * @param {number} amount An amount of items to remove.\n     * @param {object} element An element to add.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"onBeforeDataSplice\",\n    value: function onBeforeDataSplice(index, amount, element) {\n      var priv = privatePool.get(this);\n\n      if (priv.skipCoreAPIModifiers || this.dataManager.isRowHighestLevel(index)) {\n        return true;\n      }\n\n      this.dataManager.spliceData(index, amount, element);\n      return false;\n    }\n    /**\n     * Provide custom source data filtering. It's handled by core method and replaces the native filtering.\n     *\n     * @private\n     * @param {number} index The index where the data filtering starts.\n     * @param {number} amount An amount of rows which filtering applies to.\n     * @param {number} physicalRows Physical row indexes.\n     * @returns {Array}\n     */\n\n  }, {\n    key: \"onFilterData\",\n    value: function onFilterData(index, amount, physicalRows) {\n      var priv = privatePool.get(this);\n      this.collapsingUI.collapsedRowsStash.stash();\n      this.collapsingUI.collapsedRowsStash.trimStash(physicalRows[0], amount);\n      this.collapsingUI.collapsedRowsStash.shiftStash(physicalRows[0], null, -1 * amount);\n      this.dataManager.filterData(index, amount, physicalRows);\n      priv.skipRender = true;\n      return this.dataManager.getData().slice(); // Data contains reference sometimes.\n    }\n    /**\n     * `afterContextMenuDefaultOptions` hook callback.\n     *\n     * @private\n     * @param {object} defaultOptions The default context menu items order.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"onAfterContextMenuDefaultOptions\",\n    value: function onAfterContextMenuDefaultOptions(defaultOptions) {\n      return this.contextMenuUI.appendOptions(defaultOptions);\n    }\n    /**\n     * `afterGetRowHeader` hook callback.\n     *\n     * @private\n     * @param {number} row Row index.\n     * @param {HTMLElement} TH Row header element.\n     */\n\n  }, {\n    key: \"onAfterGetRowHeader\",\n    value: function onAfterGetRowHeader(row, TH) {\n      this.headersUI.appendLevelIndicators(row, TH);\n    }\n    /**\n     * `modifyRowHeaderWidth` hook callback.\n     *\n     * @private\n     * @param {number} rowHeaderWidth The initial row header width(s).\n     * @returns {number}\n     */\n\n  }, {\n    key: \"onModifyRowHeaderWidth\",\n    value: function onModifyRowHeaderWidth(rowHeaderWidth) {\n      return this.headersUI.rowHeaderWidthCache || rowHeaderWidth;\n    }\n    /**\n     * `onAfterRemoveRow` hook callback.\n     *\n     * @private\n     * @param {number} index Removed row.\n     * @param {number} amount Amount of removed rows.\n     * @param {Array} logicRows An array of the removed physical rows.\n     * @param {string} source Source of action.\n     */\n\n  }, {\n    key: \"onAfterRemoveRow\",\n    value: function onAfterRemoveRow(index, amount, logicRows, source) {\n      var _this3 = this;\n\n      if (source === this.pluginName) {\n        return;\n      }\n\n      var priv = privatePool.get(this);\n      setTimeout(function () {\n        priv.skipRender = null;\n\n        _this3.headersUI.updateRowHeaderWidth();\n\n        _this3.collapsingUI.collapsedRowsStash.applyStash();\n      }, 0);\n    }\n    /**\n     * Callback for the `beforeRemoveRow` change list of removed physical indexes by reference. Removing parent node\n     * has effect in removing children nodes.\n     *\n     * @private\n     * @param {number} index Visual index of starter row.\n     * @param {number} amount Amount of rows to be removed.\n     * @param {Array} physicalRows List of physical indexes.\n     */\n\n  }, {\n    key: \"onBeforeRemoveRow\",\n    value: function onBeforeRemoveRow(index, amount, physicalRows) {\n      var _this4 = this;\n\n      var modifiedPhysicalRows = Array.from(physicalRows.reduce(function (removedRows, physicalIndex) {\n        if (_this4.dataManager.isParent(physicalIndex)) {\n          var children = _this4.dataManager.getDataObject(physicalIndex).__children; // Preserve a parent in the list of removed rows.\n\n\n          removedRows.add(physicalIndex);\n\n          if (Array.isArray(children)) {\n            // Add a children to the list of removed rows.\n            children.forEach(function (child) {\n              return removedRows.add(_this4.dataManager.getRowIndex(child));\n            });\n          }\n\n          return removedRows;\n        } // Don't modify list of removed rows when already checked element isn't a parent.\n\n\n        return removedRows.add(physicalIndex);\n      }, new Set())); // Modifying hook's argument by the reference.\n\n      physicalRows.length = 0;\n      physicalRows.push.apply(physicalRows, _toConsumableArray(modifiedPhysicalRows));\n    }\n    /**\n     * `beforeAddChild` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onBeforeAddChild\",\n    value: function onBeforeAddChild() {\n      this.collapsingUI.collapsedRowsStash.stash();\n    }\n    /**\n     * `afterAddChild` hook callback.\n     *\n     * @private\n     * @param {object} parent Parent element.\n     * @param {object} element New child element.\n     */\n\n  }, {\n    key: \"onAfterAddChild\",\n    value: function onAfterAddChild(parent, element) {\n      this.collapsingUI.collapsedRowsStash.shiftStash(this.dataManager.getRowIndex(element));\n      this.collapsingUI.collapsedRowsStash.applyStash();\n      this.headersUI.updateRowHeaderWidth();\n    }\n    /**\n     * `beforeDetachChild` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onBeforeDetachChild\",\n    value: function onBeforeDetachChild() {\n      this.collapsingUI.collapsedRowsStash.stash();\n    }\n    /**\n     * `afterDetachChild` hook callback.\n     *\n     * @private\n     * @param {object} parent Parent element.\n     * @param {object} element New child element.\n     * @param {number} finalElementRowIndex The final row index of the detached element.\n     */\n\n  }, {\n    key: \"onAfterDetachChild\",\n    value: function onAfterDetachChild(parent, element, finalElementRowIndex) {\n      this.collapsingUI.collapsedRowsStash.shiftStash(finalElementRowIndex, null, -1);\n      this.collapsingUI.collapsedRowsStash.applyStash();\n      this.headersUI.updateRowHeaderWidth();\n    }\n    /**\n     * `afterCreateRow` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterCreateRow\",\n    value: function onAfterCreateRow() {\n      this.dataManager.rewriteCache();\n    }\n    /**\n     * `afterInit` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterInit\",\n    value: function onAfterInit() {\n      var deepestLevel = Math.max.apply(Math, _toConsumableArray(this.dataManager.cache.levels));\n\n      if (deepestLevel > 0) {\n        this.headersUI.updateRowHeaderWidth(deepestLevel);\n      }\n    }\n    /**\n     * `beforeViewRender` hook callback.\n     *\n     * @param {boolean} force Indicates if the render call was trigered by a change of settings or data.\n     * @param {object} skipRender An object, holder for skipRender functionality.\n     * @private\n     */\n\n  }, {\n    key: \"onBeforeViewRender\",\n    value: function onBeforeViewRender(force, skipRender) {\n      var priv = privatePool.get(this);\n\n      if (priv.skipRender) {\n        skipRender.skipRender = true;\n      }\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _get(_getPrototypeOf(NestedRows.prototype), \"destroy\", this).call(this);\n    }\n    /**\n     * `beforeLoadData` hook callback.\n     *\n     * @param {Array} data The source data.\n     * @private\n     */\n\n  }, {\n    key: \"onBeforeLoadData\",\n    value: function onBeforeLoadData(data) {\n      if (!isArrayOfObjects(data)) {\n        error(WRONG_DATA_TYPE_ERROR);\n        this.hot.getSettings()[PLUGIN_KEY] = false;\n        this.disablePlugin();\n        return;\n      }\n\n      this.dataManager.setData(data);\n      this.dataManager.rewriteCache();\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return NestedRows;\n}(BasePlugin);", "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { rangeEach } from \"../../../helpers/number.mjs\";\nimport { objectEach } from \"../../../helpers/object.mjs\";\nimport { arrayEach } from \"../../../helpers/array.mjs\";\n/**\n * Class responsible for making data operations.\n *\n * @private\n */\n\nvar DataManager = /*#__PURE__*/function () {\n  function DataManager(nestedRowsPlugin, hotInstance) {\n    _classCallCheck(this, DataManager);\n\n    /**\n     * Main Handsontable instance reference.\n     *\n     * @type {object}\n     */\n    this.hot = hotInstance;\n    /**\n     * Reference to the source data object.\n     *\n     * @type {Handsontable.CellValue[][]|Handsontable.RowObject[]}\n     */\n\n    this.data = null;\n    /**\n     * Reference to the NestedRows plugin.\n     *\n     * @type {object}\n     */\n\n    this.plugin = nestedRowsPlugin;\n    /**\n     * Map of row object parents.\n     *\n     * @type {WeakMap}\n     */\n\n    this.parentReference = new WeakMap();\n    /**\n     * Nested structure cache.\n     *\n     * @type {object}\n     */\n\n    this.cache = {\n      levels: [],\n      levelCount: 0,\n      rows: [],\n      nodeInfo: new WeakMap()\n    };\n  }\n  /**\n   * Set the data for the manager.\n   *\n   * @param {Handsontable.CellValue[][]|Handsontable.RowObject[]} data Data for the manager.\n   */\n\n\n  _createClass(DataManager, [{\n    key: \"setData\",\n    value: function setData(data) {\n      this.data = data;\n    }\n    /**\n     * Get the data cached in the manager.\n     *\n     * @returns {Handsontable.CellValue[][]|Handsontable.RowObject[]}\n     */\n\n  }, {\n    key: \"getData\",\n    value: function getData() {\n      return this.data;\n    }\n    /**\n     * Load the \"raw\" source data, without NestedRows' modifications.\n     *\n     * @returns {Handsontable.CellValue[][]|Handsontable.RowObject[]}\n     */\n\n  }, {\n    key: \"getRawSourceData\",\n    value: function getRawSourceData() {\n      var rawSourceData = null;\n      this.plugin.disableCoreAPIModifiers();\n      rawSourceData = this.hot.getSourceData();\n      this.plugin.enableCoreAPIModifiers();\n      return rawSourceData;\n    }\n    /**\n     * Update the Data Manager with new data and refresh cache.\n     *\n     * @param {Handsontable.CellValue[][]|Handsontable.RowObject[]} data Data for the manager.\n     */\n\n  }, {\n    key: \"updateWithData\",\n    value: function updateWithData(data) {\n      this.setData(data);\n      this.rewriteCache();\n    }\n    /**\n     * Rewrite the nested structure cache.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"rewriteCache\",\n    value: function rewriteCache() {\n      var _this = this;\n\n      this.cache = {\n        levels: [],\n        levelCount: 0,\n        rows: [],\n        nodeInfo: new WeakMap()\n      };\n      rangeEach(0, this.data.length - 1, function (i) {\n        _this.cacheNode(_this.data[i], 0, null);\n      });\n    }\n    /**\n     * Cache a data node.\n     *\n     * @private\n     * @param {object} node Node to cache.\n     * @param {number} level Level of the node.\n     * @param {object} parent Parent of the node.\n     */\n\n  }, {\n    key: \"cacheNode\",\n    value: function cacheNode(node, level, parent) {\n      var _this2 = this;\n\n      if (!this.cache.levels[level]) {\n        this.cache.levels[level] = [];\n        this.cache.levelCount += 1;\n      }\n\n      this.cache.levels[level].push(node);\n      this.cache.rows.push(node);\n      this.cache.nodeInfo.set(node, {\n        parent: parent,\n        row: this.cache.rows.length - 1,\n        level: level\n      });\n\n      if (this.hasChildren(node)) {\n        arrayEach(node.__children, function (elem) {\n          _this2.cacheNode(elem, level + 1, node);\n        });\n      }\n    }\n    /**\n     * Get the date for the provided visual row number.\n     *\n     * @param {number} row Row index.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getDataObject\",\n    value: function getDataObject(row) {\n      return row === null || row === void 0 ? null : this.cache.rows[row];\n    }\n    /**\n     * Read the row tree in search for a specific row index or row object.\n     *\n     * @private\n     * @param {object} parent The initial parent object.\n     * @param {number} readCount Number of read nodes.\n     * @param {number} neededIndex The row index we search for.\n     * @param {object} neededObject The row object we search for.\n     * @returns {number|object}\n     */\n\n  }, {\n    key: \"readTreeNodes\",\n    value: function readTreeNodes(parent, readCount, neededIndex, neededObject) {\n      var _this3 = this;\n\n      var rootLevel = false;\n      var readNodesCount = readCount;\n\n      if (isNaN(readNodesCount) && readNodesCount.end) {\n        return readNodesCount;\n      }\n\n      var parentObj = parent;\n\n      if (!parentObj) {\n        parentObj = {\n          __children: this.data\n        };\n        rootLevel = true;\n        readNodesCount -= 1;\n      }\n\n      if (neededIndex !== null && neededIndex !== void 0 && readNodesCount === neededIndex) {\n        return {\n          result: parentObj,\n          end: true\n        };\n      }\n\n      if (neededObject !== null && neededObject !== void 0 && parentObj === neededObject) {\n        return {\n          result: readNodesCount,\n          end: true\n        };\n      }\n\n      readNodesCount += 1;\n\n      if (parentObj.__children) {\n        arrayEach(parentObj.__children, function (val) {\n          _this3.parentReference.set(val, rootLevel ? null : parentObj);\n\n          readNodesCount = _this3.readTreeNodes(val, readNodesCount, neededIndex, neededObject);\n\n          if (isNaN(readNodesCount) && readNodesCount.end) {\n            return false;\n          }\n        });\n      }\n\n      return readNodesCount;\n    }\n    /**\n     * Mock a parent node.\n     *\n     * @private\n     * @returns {*}\n     */\n\n  }, {\n    key: \"mockParent\",\n    value: function mockParent() {\n      var fakeParent = this.mockNode();\n      fakeParent.__children = this.data;\n      return fakeParent;\n    }\n    /**\n     * Mock a data node.\n     *\n     * @private\n     * @returns {{}}\n     */\n\n  }, {\n    key: \"mockNode\",\n    value: function mockNode() {\n      var fakeNode = {};\n      objectEach(this.data[0], function (val, key) {\n        fakeNode[key] = null;\n      });\n      return fakeNode;\n    }\n    /**\n     * Get the row index for the provided row object.\n     *\n     * @param {object} rowObj The row object.\n     * @returns {number} Row index.\n     */\n\n  }, {\n    key: \"getRowIndex\",\n    value: function getRowIndex(rowObj) {\n      return rowObj === null || rowObj === void 0 ? null : this.cache.nodeInfo.get(rowObj).row;\n    }\n    /**\n     * Get the index of the provided row index/row object within its parent.\n     *\n     * @param {number|object} row Row index / row object.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"getRowIndexWithinParent\",\n    value: function getRowIndexWithinParent(row) {\n      var rowObj = null;\n\n      if (isNaN(row)) {\n        rowObj = row;\n      } else {\n        rowObj = this.getDataObject(row);\n      }\n\n      var parent = this.getRowParent(row);\n\n      if (parent === null || parent === void 0) {\n        return this.data.indexOf(rowObj);\n      }\n\n      return parent.__children.indexOf(rowObj);\n    }\n    /**\n     * Count all rows (including all parents and children).\n     *\n     * @returns {number}\n     */\n\n  }, {\n    key: \"countAllRows\",\n    value: function countAllRows() {\n      var rootNodeMock = {\n        __children: this.data\n      };\n      return this.countChildren(rootNodeMock);\n    }\n    /**\n     * Count children of the provided parent.\n     *\n     * @param {object|number} parent Parent node.\n     * @returns {number} Children count.\n     */\n\n  }, {\n    key: \"countChildren\",\n    value: function countChildren(parent) {\n      var _this4 = this;\n\n      var rowCount = 0;\n      var parentNode = parent;\n\n      if (!isNaN(parentNode)) {\n        parentNode = this.getDataObject(parentNode);\n      }\n\n      if (!parentNode || !parentNode.__children) {\n        return 0;\n      }\n\n      arrayEach(parentNode.__children, function (elem) {\n        rowCount += 1;\n\n        if (elem.__children) {\n          rowCount += _this4.countChildren(elem);\n        }\n      });\n      return rowCount;\n    }\n    /**\n     * Get the parent of the row at the provided index.\n     *\n     * @param {number|object} row Physical row index.\n     * @returns {object}\n     */\n\n  }, {\n    key: \"getRowParent\",\n    value: function getRowParent(row) {\n      var rowObject;\n\n      if (isNaN(row)) {\n        rowObject = row;\n      } else {\n        rowObject = this.getDataObject(row);\n      }\n\n      return this.getRowObjectParent(rowObject);\n    }\n    /**\n     * Get the parent of the provided row object.\n     *\n     * @private\n     * @param {object} rowObject The row object (tree node).\n     * @returns {object|null}\n     */\n\n  }, {\n    key: \"getRowObjectParent\",\n    value: function getRowObjectParent(rowObject) {\n      if (!rowObject || _typeof(rowObject) !== 'object') {\n        return null;\n      }\n\n      return this.cache.nodeInfo.get(rowObject).parent;\n    }\n    /**\n     * Get the nesting level for the row with the provided row index.\n     *\n     * @param {number} row Row index.\n     * @returns {number|null} Row level or null, when row doesn't exist.\n     */\n\n  }, {\n    key: \"getRowLevel\",\n    value: function getRowLevel(row) {\n      var rowObject = null;\n\n      if (isNaN(row)) {\n        rowObject = row;\n      } else {\n        rowObject = this.getDataObject(row);\n      }\n\n      return rowObject ? this.getRowObjectLevel(rowObject) : null;\n    }\n    /**\n     * Get the nesting level for the row with the provided row index.\n     *\n     * @private\n     * @param {object} rowObject Row object.\n     * @returns {number} Row level.\n     */\n\n  }, {\n    key: \"getRowObjectLevel\",\n    value: function getRowObjectLevel(rowObject) {\n      return rowObject === null || rowObject === void 0 ? null : this.cache.nodeInfo.get(rowObject).level;\n    }\n    /**\n     * Check if the provided row/row element has children.\n     *\n     * @param {number|object} row Row number or row element.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"hasChildren\",\n    value: function hasChildren(row) {\n      var rowObj = row;\n\n      if (!isNaN(rowObj)) {\n        rowObj = this.getDataObject(rowObj);\n      }\n\n      return !!(rowObj.__children && rowObj.__children.length);\n    }\n    /**\n     * Returns `true` if the row at the provided index has a parent.\n     *\n     * @param {number} index Row index.\n     * @returns {boolean} `true` if the row at the provided index has a parent, `false` otherwise.\n     */\n\n  }, {\n    key: \"isChild\",\n    value: function isChild(index) {\n      return this.getRowParent(index) !== null;\n    }\n    /**\n     * Get child at a provided index from the parent element.\n     *\n     * @param {object} parent The parent row object.\n     * @param {number} index Index of the child element to be retrieved.\n     * @returns {object|null} The child element or `null` if the child doesn't exist.\n     */\n\n  }, {\n    key: \"getChild\",\n    value: function getChild(parent, index) {\n      var _parent$__children;\n\n      return ((_parent$__children = parent.__children) === null || _parent$__children === void 0 ? void 0 : _parent$__children[index]) || null;\n    }\n    /**\n     * Return `true` of the row at the provided index is located at the topmost level.\n     *\n     * @param {number} index Row index.\n     * @returns {boolean} `true` of the row at the provided index is located at the topmost level, `false` otherwise.\n     */\n\n  }, {\n    key: \"isRowHighestLevel\",\n    value: function isRowHighestLevel(index) {\n      return !this.isChild(index);\n    }\n    /**\n     * Return `true` if the provided row index / row object represents a parent in the nested structure.\n     *\n     * @param {number|object} row Row index / row object.\n     * @returns {boolean} `true` if the row is a parent, `false` otherwise.\n     */\n\n  }, {\n    key: \"isParent\",\n    value: function isParent(row) {\n      var _rowObj$__children;\n\n      var rowObj = row;\n\n      if (!isNaN(rowObj)) {\n        rowObj = this.getDataObject(rowObj);\n      }\n\n      return rowObj && !!rowObj.__children && ((_rowObj$__children = rowObj.__children) === null || _rowObj$__children === void 0 ? void 0 : _rowObj$__children.length) !== 0;\n    }\n    /**\n     * Add a child to the provided parent. It's optional to add a row object as the \"element\".\n     *\n     * @param {object} parent The parent row object.\n     * @param {object} [element] The element to add as a child.\n     */\n\n  }, {\n    key: \"addChild\",\n    value: function addChild(parent, element) {\n      var childElement = element;\n      this.hot.runHooks('beforeAddChild', parent, childElement);\n      var parentIndex = null;\n\n      if (parent) {\n        parentIndex = this.getRowIndex(parent);\n      }\n\n      this.hot.runHooks('beforeCreateRow', parentIndex + this.countChildren(parent) + 1, 1);\n      var functionalParent = parent;\n\n      if (!parent) {\n        functionalParent = this.mockParent();\n      }\n\n      if (!functionalParent.__children) {\n        functionalParent.__children = [];\n      }\n\n      if (!childElement) {\n        childElement = this.mockNode();\n      }\n\n      functionalParent.__children.push(childElement);\n\n      this.rewriteCache();\n      var newRowIndex = this.getRowIndex(childElement);\n      this.hot.rowIndexMapper.insertIndexes(newRowIndex, 1);\n      this.hot.runHooks('afterCreateRow', newRowIndex, 1);\n      this.hot.runHooks('afterAddChild', parent, childElement);\n    }\n    /**\n     * Add a child node to the provided parent at a specified index.\n     *\n     * @param {object} parent Parent node.\n     * @param {number} index Index to insert the child element at.\n     * @param {object} [element] Element (node) to insert.\n     */\n\n  }, {\n    key: \"addChildAtIndex\",\n    value: function addChildAtIndex(parent, index, element) {\n      var childElement = element;\n      var flattenedIndex;\n\n      if (!childElement) {\n        childElement = this.mockNode();\n      }\n\n      this.hot.runHooks('beforeAddChild', parent, childElement, index);\n\n      if (parent) {\n        var parentIndex = this.getRowIndex(parent);\n        var finalChildIndex = parentIndex + index + 1;\n        this.hot.runHooks('beforeCreateRow', finalChildIndex, 1);\n\n        parent.__children.splice(index, null, childElement);\n\n        this.rewriteCache();\n        this.plugin.disableCoreAPIModifiers();\n        this.hot.setSourceDataAtCell(this.getRowIndexWithinParent(parent), '__children', parent.__children, 'NestedRows.addChildAtIndex');\n        this.hot.rowIndexMapper.insertIndexes(finalChildIndex, 1);\n        this.plugin.enableCoreAPIModifiers();\n        this.hot.runHooks('afterCreateRow', finalChildIndex, 1);\n        flattenedIndex = finalChildIndex;\n      } else {\n        this.plugin.disableCoreAPIModifiers();\n        this.hot.alter('insert_row', index, 1, 'NestedRows.addChildAtIndex');\n        this.plugin.enableCoreAPIModifiers();\n        flattenedIndex = this.getRowIndex(this.data[index]);\n      } // Workaround for refreshing cache losing the reference to the mocked row.\n\n\n      childElement = this.getDataObject(flattenedIndex);\n      this.hot.runHooks('afterAddChild', parent, childElement, index);\n    }\n    /**\n     * Add a sibling element at the specified index.\n     *\n     * @param {number} index New element sibling's index.\n     * @param {('above'|'below')} where Direction in which the sibling is to be created.\n     */\n\n  }, {\n    key: \"addSibling\",\n    value: function addSibling(index) {\n      var where = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'below';\n      var translatedIndex = this.translateTrimmedRow(index);\n      var parent = this.getRowParent(translatedIndex);\n      var indexWithinParent = this.getRowIndexWithinParent(translatedIndex);\n\n      switch (where) {\n        case 'below':\n          this.addChildAtIndex(parent, indexWithinParent + 1, null);\n          break;\n\n        case 'above':\n          this.addChildAtIndex(parent, indexWithinParent, null);\n          break;\n\n        default:\n          break;\n      }\n    }\n    /**\n     * Detach the provided element from its parent and add it right after it.\n     *\n     * @param {object|Array} elements Row object or an array of selected coordinates.\n     * @param {boolean} [forceRender=true] If true (default), it triggers render after finished.\n     */\n\n  }, {\n    key: \"detachFromParent\",\n    value: function detachFromParent(elements) {\n      var _this5 = this;\n\n      var forceRender = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var element = null;\n      var rowObjects = [];\n\n      if (Array.isArray(elements)) {\n        rangeEach(elements[0], elements[2], function (i) {\n          var translatedIndex = _this5.translateTrimmedRow(i);\n\n          rowObjects.push(_this5.getDataObject(translatedIndex));\n        });\n        rangeEach(0, rowObjects.length - 2, function (i) {\n          _this5.detachFromParent(rowObjects[i], false);\n        });\n        element = rowObjects[rowObjects.length - 1];\n      } else {\n        element = elements;\n      }\n\n      var childRowIndex = this.getRowIndex(element);\n      var childCount = this.countChildren(element);\n      var indexWithinParent = this.getRowIndexWithinParent(element);\n      var parent = this.getRowParent(element);\n      var grandparent = this.getRowParent(parent);\n      var grandparentRowIndex = this.getRowIndex(grandparent);\n      var movedElementRowIndex = null;\n      this.hot.runHooks('beforeDetachChild', parent, element);\n\n      if (indexWithinParent !== null && indexWithinParent !== void 0) {\n        var removedRowIndexes = Array.from(new Array(childRowIndex + childCount + 1).keys()).splice(-1 * (childCount + 1));\n        this.hot.runHooks('beforeRemoveRow', childRowIndex, childCount + 1, removedRowIndexes, this.plugin.pluginName);\n\n        parent.__children.splice(indexWithinParent, 1);\n\n        this.rewriteCache();\n        this.hot.runHooks('afterRemoveRow', childRowIndex, childCount + 1, removedRowIndexes, this.plugin.pluginName);\n\n        if (grandparent) {\n          movedElementRowIndex = grandparentRowIndex + this.countChildren(grandparent);\n          var lastGrandparentChild = this.getChild(grandparent, this.countChildren(grandparent) - 1);\n          var lastGrandparentChildIndex = this.getRowIndex(lastGrandparentChild);\n          this.hot.runHooks('beforeCreateRow', lastGrandparentChildIndex + 1, childCount + 1, this.plugin.pluginName);\n\n          grandparent.__children.push(element);\n        } else {\n          movedElementRowIndex = this.hot.countRows() + 1;\n          this.hot.runHooks('beforeCreateRow', movedElementRowIndex - 2, childCount + 1, this.plugin.pluginName);\n          this.data.push(element);\n        }\n      }\n\n      this.rewriteCache();\n      this.hot.runHooks('afterCreateRow', movedElementRowIndex - 2, childCount + 1, this.plugin.pluginName);\n      this.hot.runHooks('afterDetachChild', parent, element, this.getRowIndex(element));\n\n      if (forceRender) {\n        this.hot.render();\n      }\n    }\n    /**\n     * Filter the data by the `logicRows` array.\n     *\n     * @private\n     * @param {number} index Index of the first row to remove.\n     * @param {number} amount Number of elements to remove.\n     * @param {Array} logicRows Array of indexes to remove.\n     */\n\n  }, {\n    key: \"filterData\",\n    value: function filterData(index, amount, logicRows) {\n      var _this6 = this;\n\n      // TODO: why are the first 2 arguments not used?\n      var elementsToRemove = [];\n      arrayEach(logicRows, function (elem) {\n        elementsToRemove.push(_this6.getDataObject(elem));\n      });\n      arrayEach(elementsToRemove, function (elem) {\n        var indexWithinParent = _this6.getRowIndexWithinParent(elem);\n\n        var tempParent = _this6.getRowParent(elem);\n\n        if (tempParent === null) {\n          _this6.data.splice(indexWithinParent, 1);\n        } else {\n          tempParent.__children.splice(indexWithinParent, 1);\n        }\n      });\n      this.rewriteCache();\n    }\n    /**\n     * Used to splice the source data. Needed to properly modify the nested structure, which wouldn't work with the\n     * default script.\n     *\n     * @private\n     * @param {number} index Physical index of the element at the splice beginning.\n     * @param {number} amount Number of elements to be removed.\n     * @param {object[]} elements Array of row objects to add.\n     */\n\n  }, {\n    key: \"spliceData\",\n    value: function spliceData(index, amount, elements) {\n      var previousElement = this.getDataObject(index - 1);\n      var newRowParent = null;\n      var indexWithinParent = index;\n\n      if (previousElement && previousElement.__children && previousElement.__children.length === 0) {\n        newRowParent = previousElement;\n        indexWithinParent = 0;\n      } else if (index < this.countAllRows()) {\n        newRowParent = this.getRowParent(index);\n        indexWithinParent = this.getRowIndexWithinParent(index);\n      }\n\n      if (newRowParent) {\n        if (elements) {\n          var _newRowParent$__child;\n\n          (_newRowParent$__child = newRowParent.__children).splice.apply(_newRowParent$__child, [indexWithinParent, amount].concat(_toConsumableArray(elements)));\n        } else {\n          newRowParent.__children.splice(indexWithinParent, amount);\n        }\n      } else if (elements) {\n        var _this$data;\n\n        (_this$data = this.data).splice.apply(_this$data, [indexWithinParent, amount].concat(_toConsumableArray(elements)));\n      } else {\n        this.data.splice(indexWithinParent, amount);\n      }\n\n      this.rewriteCache();\n    }\n    /**\n     * Update the `__children` key of the upmost parent of the provided row object.\n     *\n     * @private\n     * @param {object} rowElement Row object.\n     */\n\n  }, {\n    key: \"syncRowWithRawSource\",\n    value: function syncRowWithRawSource(rowElement) {\n      var upmostParent = rowElement;\n      var tempParent = null;\n\n      do {\n        tempParent = this.getRowParent(tempParent);\n\n        if (tempParent !== null) {\n          upmostParent = tempParent;\n        }\n      } while (tempParent !== null);\n\n      this.plugin.disableCoreAPIModifiers();\n      this.hot.setSourceDataAtCell(this.getRowIndex(upmostParent), '__children', upmostParent.__children, 'NestedRows.syncRowWithRawSource');\n      this.plugin.enableCoreAPIModifiers();\n    }\n    /* eslint-disable jsdoc/require-param */\n\n    /**\n     * Move a single row.\n     *\n     * @param {number} fromIndex Index of the row to be moved.\n     * @param {number} toIndex Index of the destination.\n     * @param {boolean} moveToCollapsed `true` if moving a row to a collapsed parent.\n     * @param {boolean} moveToLastChild `true` if moving a row to be a last child of the new parent.\n     */\n\n    /* eslint-enable jsdoc/require-param */\n\n  }, {\n    key: \"moveRow\",\n    value: function moveRow(fromIndex, toIndex, moveToCollapsed, moveToLastChild) {\n      var moveToLastRow = toIndex === this.hot.countRows();\n      var fromParent = this.getRowParent(fromIndex);\n      var indexInFromParent = this.getRowIndexWithinParent(fromIndex);\n\n      var elemToMove = fromParent.__children.slice(indexInFromParent, indexInFromParent + 1);\n\n      var movingUp = fromIndex > toIndex;\n      var toParent = moveToLastRow ? this.getRowParent(toIndex - 1) : this.getRowParent(toIndex);\n\n      if (toParent === null || toParent === void 0) {\n        toParent = this.getRowParent(toIndex - 1);\n      }\n\n      if (toParent === null || toParent === void 0) {\n        toParent = this.getDataObject(toIndex - 1);\n      }\n\n      if (!toParent) {\n        toParent = this.getDataObject(toIndex);\n        toParent.__children = [];\n      } else if (!toParent.__children) {\n        toParent.__children = [];\n      }\n\n      var indexInTargetParent = moveToLastRow || moveToCollapsed || moveToLastChild ? toParent.__children.length : this.getRowIndexWithinParent(toIndex);\n      var sameParent = fromParent === toParent;\n\n      toParent.__children.splice(indexInTargetParent, 0, elemToMove[0]);\n\n      fromParent.__children.splice(indexInFromParent + (movingUp && sameParent ? 1 : 0), 1); // Sync the changes in the cached data with the actual data stored in HOT.\n\n\n      this.syncRowWithRawSource(fromParent);\n\n      if (!sameParent) {\n        this.syncRowWithRawSource(toParent);\n      }\n    }\n    /**\n     * Translate the visual row index to the physical index, taking into consideration the state of collapsed rows.\n     *\n     * @private\n     * @param {number} row Row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"translateTrimmedRow\",\n    value: function translateTrimmedRow(row) {\n      if (this.plugin.collapsingUI) {\n        return this.plugin.collapsingUI.translateTrimmedRow(row);\n      }\n\n      return row;\n    }\n    /**\n     * Translate the physical row index to the visual index, taking into consideration the state of collapsed rows.\n     *\n     * @private\n     * @param {number} row Row index.\n     * @returns {number}\n     */\n\n  }, {\n    key: \"untranslateTrimmedRow\",\n    value: function untranslateTrimmedRow(row) {\n      if (this.plugin.collapsingUI) {\n        return this.plugin.collapsingUI.untranslateTrimmedRow(row);\n      }\n\n      return row;\n    }\n  }]);\n\n  return DataManager;\n}();\n\nexport default DataManager;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { stopImmediatePropagation } from \"../../../helpers/dom/event.mjs\";\nimport { arrayEach } from \"../../../helpers/array.mjs\";\nimport { rangeEach } from \"../../../helpers/number.mjs\";\nimport { hasClass } from \"../../../helpers/dom/element.mjs\";\nimport BaseUI from \"./_base.mjs\";\nimport HeadersUI from \"./headers.mjs\";\n/**\n * Class responsible for the UI for collapsing and expanding groups.\n *\n * @private\n * @class\n * @augments BaseUI\n */\n\nvar CollapsingUI = /*#__PURE__*/function (_BaseUI) {\n  _inherits(CollapsingUI, _BaseUI);\n\n  var _super = _createSuper(CollapsingUI);\n\n  function CollapsingUI(nestedRowsPlugin, hotInstance) {\n    var _this;\n\n    _classCallCheck(this, CollapsingUI);\n\n    _this = _super.call(this, nestedRowsPlugin, hotInstance);\n    /**\n     * Reference to the TrimRows plugin.\n     */\n\n    _this.dataManager = _this.plugin.dataManager;\n    _this.collapsedRows = [];\n    _this.collapsedRowsStash = {\n      stash: function stash() {\n        var forceRender = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n        _this.lastCollapsedRows = _this.collapsedRows.slice(0); // Workaround for wrong indexes being set in the trimRows plugin\n\n        _this.expandMultipleChildren(_this.lastCollapsedRows, forceRender);\n      },\n      shiftStash: function shiftStash(baseIndex, targetIndex) {\n        var delta = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\n        if (targetIndex === null || targetIndex === void 0) {\n          targetIndex = Infinity;\n        }\n\n        arrayEach(_this.lastCollapsedRows, function (elem, i) {\n          if (elem >= baseIndex && elem < targetIndex) {\n            _this.lastCollapsedRows[i] = elem + delta;\n          }\n        });\n      },\n      applyStash: function applyStash() {\n        var forceRender = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n        _this.collapseMultipleChildren(_this.lastCollapsedRows, forceRender);\n\n        _this.lastCollapsedRows = void 0;\n      },\n      trimStash: function trimStash(realElementIndex, amount) {\n        rangeEach(realElementIndex, realElementIndex + amount - 1, function (i) {\n          var indexOfElement = _this.lastCollapsedRows.indexOf(i);\n\n          if (indexOfElement > -1) {\n            _this.lastCollapsedRows.splice(indexOfElement, 1);\n          }\n        });\n      }\n    };\n    return _this;\n  }\n  /**\n   * Collapse the children of the row passed as an argument.\n   *\n   * @param {number|object} row The parent row.\n   * @param {boolean} [forceRender=true] Whether to render the table after the function ends.\n   * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n   * @returns {Array}\n   */\n\n\n  _createClass(CollapsingUI, [{\n    key: \"collapseChildren\",\n    value: function collapseChildren(row) {\n      var _this2 = this;\n\n      var forceRender = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var doTrimming = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      var rowsToCollapse = [];\n      var rowObject = null;\n      var rowIndex = null;\n      var rowsToTrim = null;\n\n      if (isNaN(row)) {\n        rowObject = row;\n        rowIndex = this.dataManager.getRowIndex(rowObject);\n      } else {\n        rowObject = this.dataManager.getDataObject(row);\n        rowIndex = row;\n      }\n\n      if (this.dataManager.hasChildren(rowObject)) {\n        arrayEach(rowObject.__children, function (elem) {\n          rowsToCollapse.push(_this2.dataManager.getRowIndex(elem));\n        });\n      }\n\n      rowsToTrim = this.collapseRows(rowsToCollapse, true, false);\n\n      if (doTrimming) {\n        this.trimRows(rowsToTrim);\n      }\n\n      if (forceRender) {\n        this.renderAndAdjust();\n      }\n\n      if (this.collapsedRows.indexOf(rowIndex) === -1) {\n        this.collapsedRows.push(rowIndex);\n      }\n\n      return rowsToTrim;\n    }\n    /**\n     * Collapse multiple children.\n     *\n     * @param {Array} rows Rows to collapse (including their children).\n     * @param {boolean} [forceRender=true] `true` if the table should be rendered after finishing the function.\n     * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n     */\n\n  }, {\n    key: \"collapseMultipleChildren\",\n    value: function collapseMultipleChildren(rows) {\n      var _this3 = this;\n\n      var forceRender = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var doTrimming = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      var rowsToTrim = [];\n      arrayEach(rows, function (elem) {\n        rowsToTrim.push.apply(rowsToTrim, _toConsumableArray(_this3.collapseChildren(elem, false, false)));\n      });\n\n      if (doTrimming) {\n        this.trimRows(rowsToTrim);\n      }\n\n      if (forceRender) {\n        this.renderAndAdjust();\n      }\n    }\n    /**\n     * Collapse a single row.\n     *\n     * @param {number} rowIndex Index of the row to collapse.\n     * @param {boolean} [recursive=true] `true` if it should collapse the row's children.\n     */\n\n  }, {\n    key: \"collapseRow\",\n    value: function collapseRow(rowIndex) {\n      var recursive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      this.collapseRows([rowIndex], recursive);\n    }\n    /**\n     * Collapse multiple rows.\n     *\n     * @param {Array} rowIndexes Array of row indexes to collapse.\n     * @param {boolean} [recursive=true] `true` if it should collapse the rows' children.\n     * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n     * @returns {Array} Rows prepared for trimming (or trimmed, if doTrimming == true).\n     */\n\n  }, {\n    key: \"collapseRows\",\n    value: function collapseRows(rowIndexes) {\n      var _this4 = this;\n\n      var recursive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var doTrimming = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var rowsToTrim = [];\n      arrayEach(rowIndexes, function (elem) {\n        rowsToTrim.push(elem);\n\n        if (recursive) {\n          _this4.collapseChildRows(elem, rowsToTrim);\n        }\n      });\n\n      if (doTrimming) {\n        this.trimRows(rowsToTrim);\n      }\n\n      return rowsToTrim;\n    }\n    /**\n     * Collapse child rows of the row at the provided index.\n     *\n     * @param {number} parentIndex Index of the parent node.\n     * @param {Array} [rowsToTrim=[]] Array of rows to trim. Defaults to an empty array.\n     * @param {boolean} [recursive] `true` if the collapsing process should be recursive.\n     * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n     */\n\n  }, {\n    key: \"collapseChildRows\",\n    value: function collapseChildRows(parentIndex) {\n      var _this5 = this;\n\n      var rowsToTrim = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      var recursive = arguments.length > 2 ? arguments[2] : undefined;\n      var doTrimming = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n      if (this.dataManager.hasChildren(parentIndex)) {\n        var parentObject = this.dataManager.getDataObject(parentIndex);\n        arrayEach(parentObject.__children, function (elem) {\n          var elemIndex = _this5.dataManager.getRowIndex(elem);\n\n          rowsToTrim.push(elemIndex);\n\n          _this5.collapseChildRows(elemIndex, rowsToTrim);\n        });\n      }\n\n      if (doTrimming) {\n        this.trimRows(rowsToTrim);\n      }\n    }\n    /**\n     * Expand a single row.\n     *\n     * @param {number} rowIndex Index of the row to expand.\n     * @param {boolean} [recursive=true] `true` if it should expand the row's children recursively.\n     */\n\n  }, {\n    key: \"expandRow\",\n    value: function expandRow(rowIndex) {\n      var recursive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      this.expandRows([rowIndex], recursive);\n    }\n    /**\n     * Expand multiple rows.\n     *\n     * @param {Array} rowIndexes Array of indexes of the rows to expand.\n     * @param {boolean} [recursive=true] `true` if it should expand the rows' children recursively.\n     * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n     * @returns {Array} Array of row indexes to be untrimmed.\n     */\n\n  }, {\n    key: \"expandRows\",\n    value: function expandRows(rowIndexes) {\n      var _this6 = this;\n\n      var recursive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var doTrimming = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var rowsToUntrim = [];\n      arrayEach(rowIndexes, function (elem) {\n        rowsToUntrim.push(elem);\n\n        if (recursive) {\n          _this6.expandChildRows(elem, rowsToUntrim);\n        }\n      });\n\n      if (doTrimming) {\n        this.untrimRows(rowsToUntrim);\n      }\n\n      return rowsToUntrim;\n    }\n    /**\n     * Expand child rows of the provided index.\n     *\n     * @param {number} parentIndex Index of the parent row.\n     * @param {Array} [rowsToUntrim=[]] Array of the rows to be untrimmed.\n     * @param {boolean} [recursive] `true` if it should expand the rows' children recursively.\n     * @param {boolean} [doTrimming=false] I determine whether collapsing should envolve trimming rows.\n     */\n\n  }, {\n    key: \"expandChildRows\",\n    value: function expandChildRows(parentIndex) {\n      var _this7 = this;\n\n      var rowsToUntrim = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      var recursive = arguments.length > 2 ? arguments[2] : undefined;\n      var doTrimming = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n      if (this.dataManager.hasChildren(parentIndex)) {\n        var parentObject = this.dataManager.getDataObject(parentIndex);\n        arrayEach(parentObject.__children, function (elem) {\n          if (!_this7.isAnyParentCollapsed(elem)) {\n            var elemIndex = _this7.dataManager.getRowIndex(elem);\n\n            rowsToUntrim.push(elemIndex);\n\n            _this7.expandChildRows(elemIndex, rowsToUntrim);\n          }\n        });\n      }\n\n      if (doTrimming) {\n        this.untrimRows(rowsToUntrim);\n      }\n    }\n    /**\n     * Expand the children of the row passed as an argument.\n     *\n     * @param {number|object} row Parent row.\n     * @param {boolean} [forceRender=true] Whether to render the table after the function ends.\n     * @param {boolean} [doTrimming=true] If set to `true`, the trimming will be applied when the function finishes.\n     * @returns {number[]}\n     */\n\n  }, {\n    key: \"expandChildren\",\n    value: function expandChildren(row) {\n      var _this8 = this;\n\n      var forceRender = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var doTrimming = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      var rowsToExpand = [];\n      var rowObject = null;\n      var rowIndex = null;\n      var rowsToUntrim = null;\n\n      if (isNaN(row)) {\n        rowObject = row;\n        rowIndex = this.dataManager.getRowIndex(row);\n      } else {\n        rowObject = this.dataManager.getDataObject(row);\n        rowIndex = row;\n      }\n\n      this.collapsedRows.splice(this.collapsedRows.indexOf(rowIndex), 1);\n\n      if (this.dataManager.hasChildren(rowObject)) {\n        arrayEach(rowObject.__children, function (elem) {\n          var childIndex = _this8.dataManager.getRowIndex(elem);\n\n          rowsToExpand.push(childIndex);\n        });\n      }\n\n      rowsToUntrim = this.expandRows(rowsToExpand, true, false);\n\n      if (doTrimming) {\n        this.untrimRows(rowsToUntrim);\n      }\n\n      if (forceRender) {\n        this.renderAndAdjust();\n      }\n\n      return rowsToUntrim;\n    }\n    /**\n     * Expand multiple rows' children.\n     *\n     * @param {Array} rows Array of rows which children are about to be expanded.\n     * @param {boolean} [forceRender=true] `true` if the table should render after finishing the function.\n     * @param {boolean} [doTrimming=true] `true` if the rows should be untrimmed after finishing the function.\n     */\n\n  }, {\n    key: \"expandMultipleChildren\",\n    value: function expandMultipleChildren(rows) {\n      var _this9 = this;\n\n      var forceRender = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var doTrimming = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      var rowsToUntrim = [];\n      arrayEach(rows, function (elem) {\n        rowsToUntrim.push.apply(rowsToUntrim, _toConsumableArray(_this9.expandChildren(elem, false, false)));\n      });\n\n      if (doTrimming) {\n        this.untrimRows(rowsToUntrim);\n      }\n\n      if (forceRender) {\n        this.renderAndAdjust();\n      }\n    }\n    /**\n     * Collapse all collapsable rows.\n     */\n\n  }, {\n    key: \"collapseAll\",\n    value: function collapseAll() {\n      var _this10 = this;\n\n      var data = this.dataManager.getData();\n      var parentsToCollapse = [];\n      arrayEach(data, function (elem) {\n        if (_this10.dataManager.hasChildren(elem)) {\n          parentsToCollapse.push(elem);\n        }\n      });\n      this.collapseMultipleChildren(parentsToCollapse);\n      this.renderAndAdjust();\n    }\n    /**\n     * Expand all collapsable rows.\n     */\n\n  }, {\n    key: \"expandAll\",\n    value: function expandAll() {\n      var _this11 = this;\n\n      var data = this.dataManager.getData();\n      var parentsToExpand = [];\n      arrayEach(data, function (elem) {\n        if (_this11.dataManager.hasChildren(elem)) {\n          parentsToExpand.push(elem);\n        }\n      });\n      this.expandMultipleChildren(parentsToExpand);\n      this.renderAndAdjust();\n    }\n    /**\n     * Trim rows.\n     *\n     * @param {Array} rows Physical row indexes.\n     */\n\n  }, {\n    key: \"trimRows\",\n    value: function trimRows(rows) {\n      var _this12 = this;\n\n      this.hot.batchExecution(function () {\n        arrayEach(rows, function (physicalRow) {\n          _this12.plugin.collapsedRowsMap.setValueAtIndex(physicalRow, true);\n        });\n      }, true);\n    }\n    /**\n     * Untrim rows.\n     *\n     * @param {Array} rows Physical row indexes.\n     */\n\n  }, {\n    key: \"untrimRows\",\n    value: function untrimRows(rows) {\n      var _this13 = this;\n\n      this.hot.batchExecution(function () {\n        arrayEach(rows, function (physicalRow) {\n          _this13.plugin.collapsedRowsMap.setValueAtIndex(physicalRow, false);\n        });\n      }, true);\n    }\n    /**\n     * Check if all child rows are collapsed.\n     *\n     * @private\n     * @param {number|object|null} row The parent row. `null` for the top level.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"areChildrenCollapsed\",\n    value: function areChildrenCollapsed(row) {\n      var _this14 = this;\n\n      var rowObj = isNaN(row) ? row : this.dataManager.getDataObject(row);\n      var allCollapsed = true; // Checking the children of the top-level \"parent\"\n\n      if (rowObj === null) {\n        rowObj = {\n          __children: this.dataManager.data\n        };\n      }\n\n      if (this.dataManager.hasChildren(rowObj)) {\n        arrayEach(rowObj.__children, function (elem) {\n          var rowIndex = _this14.dataManager.getRowIndex(elem);\n\n          if (!_this14.plugin.collapsedRowsMap.getValueAtIndex(rowIndex)) {\n            allCollapsed = false;\n            return false;\n          }\n        });\n      }\n\n      return allCollapsed;\n    }\n    /**\n     * Check if any of the row object parents are collapsed.\n     *\n     * @private\n     * @param {object} rowObj Row object.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isAnyParentCollapsed\",\n    value: function isAnyParentCollapsed(rowObj) {\n      var parent = rowObj;\n\n      while (parent !== null) {\n        parent = this.dataManager.getRowParent(parent);\n        var parentIndex = this.dataManager.getRowIndex(parent);\n\n        if (this.collapsedRows.indexOf(parentIndex) > -1) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n    /**\n     * Toggle collapsed state. Callback for the `beforeOnCellMousedown` hook.\n     *\n     * @private\n     * @param {MouseEvent} event `mousedown` event.\n     * @param {object} coords Coordinates of the clicked cell/header.\n     */\n\n  }, {\n    key: \"toggleState\",\n    value: function toggleState(event, coords) {\n      if (coords.col >= 0) {\n        return;\n      }\n\n      var row = this.translateTrimmedRow(coords.row);\n\n      if (hasClass(event.target, HeadersUI.CSS_CLASSES.button)) {\n        if (this.areChildrenCollapsed(row)) {\n          this.expandChildren(row);\n        } else {\n          this.collapseChildren(row);\n        }\n\n        stopImmediatePropagation(event);\n      }\n    }\n    /**\n     * Translate visual row after trimming to physical base row index.\n     *\n     * @private\n     * @param {number} row Row index.\n     * @returns {number} Base row index.\n     */\n\n  }, {\n    key: \"translateTrimmedRow\",\n    value: function translateTrimmedRow(row) {\n      return this.hot.toPhysicalRow(row);\n    }\n    /**\n     * Translate physical row after trimming to visual base row index.\n     *\n     * @private\n     * @param {number} row Row index.\n     * @returns {number} Base row index.\n     */\n\n  }, {\n    key: \"untranslateTrimmedRow\",\n    value: function untranslateTrimmedRow(row) {\n      return this.hot.toVisualRow(row);\n    }\n    /**\n     * Helper function to render the table and call the `adjustElementsSize` method.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"renderAndAdjust\",\n    value: function renderAndAdjust() {\n      this.hot.render(); // Dirty workaround to prevent scroll height not adjusting to the table height. Needs refactoring in the future.\n\n      this.hot.view.adjustElementsSize();\n    }\n  }]);\n\n  return CollapsingUI;\n}(BaseUI);\n\nexport default CollapsingUI;", "function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Base class for the Nested Rows' UI sub-classes.\n *\n * @private\n * @class\n */\nvar BaseUI = /*#__PURE__*/_createClass(function BaseUI(pluginInstance, hotInstance) {\n  _classCallCheck(this, BaseUI);\n\n  /**\n   * Instance of Handsontable.\n   *\n   * @type {Core}\n   */\n  this.hot = hotInstance;\n  /**\n   * Reference to the main plugin instance.\n   */\n\n  this.plugin = pluginInstance;\n});\n\nexport default BaseUI;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { arrayEach } from \"../../../helpers/array.mjs\";\nimport { rangeEach } from \"../../../helpers/number.mjs\";\nimport { addClass } from \"../../../helpers/dom/element.mjs\";\nimport BaseUI from \"./_base.mjs\";\n/**\n * Class responsible for the UI in the Nested Rows' row headers.\n *\n * @private\n * @class HeadersUI\n * @augments BaseUI\n */\n\nvar HeadersUI = /*#__PURE__*/function (_BaseUI) {\n  _inherits(HeadersUI, _BaseUI);\n\n  var _super = _createSuper(HeadersUI);\n\n  function HeadersUI(nestedRowsPlugin, hotInstance) {\n    var _this;\n\n    _classCallCheck(this, HeadersUI);\n\n    _this = _super.call(this, nestedRowsPlugin, hotInstance);\n    /**\n     * Reference to the DataManager instance connected with the Nested Rows plugin.\n     *\n     * @type {DataManager}\n     */\n\n    _this.dataManager = _this.plugin.dataManager; // /**\n    //  * Level cache array.\n    //  *\n    //  * @type {Array}\n    //  */\n    // this.levelCache = this.dataManager.cache.levels;\n\n    /**\n     * Reference to the CollapsingUI instance connected with the Nested Rows plugin.\n     *\n     * @type {CollapsingUI}\n     */\n\n    _this.collapsingUI = _this.plugin.collapsingUI;\n    /**\n     * Cache for the row headers width.\n     *\n     * @type {null|number}\n     */\n\n    _this.rowHeaderWidthCache = null;\n    return _this;\n  }\n  /**\n   * Append nesting indicators and buttons to the row headers.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @param {HTMLElement} TH TH 3element.\n   */\n\n\n  _createClass(HeadersUI, [{\n    key: \"appendLevelIndicators\",\n    value: function appendLevelIndicators(row, TH) {\n      var rowIndex = this.hot.toPhysicalRow(row);\n      var rowLevel = this.dataManager.getRowLevel(rowIndex);\n      var rowObject = this.dataManager.getDataObject(rowIndex);\n      var innerDiv = TH.getElementsByTagName('DIV')[0];\n      var innerSpan = innerDiv.querySelector('span.rowHeader');\n      var previousIndicators = innerDiv.querySelectorAll('[class^=\"ht_nesting\"]');\n      arrayEach(previousIndicators, function (elem) {\n        if (elem) {\n          innerDiv.removeChild(elem);\n        }\n      });\n      addClass(TH, HeadersUI.CSS_CLASSES.indicatorContainer);\n\n      if (rowLevel) {\n        var rootDocument = this.hot.rootDocument;\n        var initialContent = innerSpan.cloneNode(true);\n        innerDiv.innerHTML = '';\n        rangeEach(0, rowLevel - 1, function () {\n          var levelIndicator = rootDocument.createElement('SPAN');\n          addClass(levelIndicator, HeadersUI.CSS_CLASSES.emptyIndicator);\n          innerDiv.appendChild(levelIndicator);\n        });\n        innerDiv.appendChild(initialContent);\n      }\n\n      if (this.dataManager.hasChildren(rowObject)) {\n        var buttonsContainer = this.hot.rootDocument.createElement('DIV');\n        addClass(TH, HeadersUI.CSS_CLASSES.parent);\n\n        if (this.collapsingUI.areChildrenCollapsed(rowIndex)) {\n          addClass(buttonsContainer, \"\".concat(HeadersUI.CSS_CLASSES.button, \" \").concat(HeadersUI.CSS_CLASSES.expandButton));\n        } else {\n          addClass(buttonsContainer, \"\".concat(HeadersUI.CSS_CLASSES.button, \" \").concat(HeadersUI.CSS_CLASSES.collapseButton));\n        }\n\n        innerDiv.appendChild(buttonsContainer);\n      }\n    }\n    /**\n     * Update the row header width according to number of levels in the dataset.\n     *\n     * @private\n     * @param {number} deepestLevel Cached deepest level of nesting.\n     */\n\n  }, {\n    key: \"updateRowHeaderWidth\",\n    value: function updateRowHeaderWidth(deepestLevel) {\n      var deepestLevelIndex = deepestLevel;\n\n      if (!deepestLevelIndex) {\n        deepestLevelIndex = this.dataManager.cache.levelCount;\n      }\n\n      this.rowHeaderWidthCache = Math.max(50, 11 + 10 * deepestLevelIndex + 25);\n      this.hot.render();\n    }\n  }], [{\n    key: \"CSS_CLASSES\",\n    get:\n    /**\n     * CSS classes used in the row headers.\n     *\n     * @type {object}\n     */\n    function get() {\n      return {\n        indicatorContainer: 'ht_nestingLevels',\n        parent: 'ht_nestingParent',\n        indicator: 'ht_nestingLevel',\n        emptyIndicator: 'ht_nestingLevel_empty',\n        button: 'ht_nestingButton',\n        expandButton: 'ht_nestingExpand',\n        collapseButton: 'ht_nestingCollapse'\n      };\n    }\n  }]);\n\n  return HeadersUI;\n}(BaseUI);\n\nexport default HeadersUI;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.weak-map.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport { rangeEach } from \"../../../helpers/number.mjs\";\nimport { arrayEach } from \"../../../helpers/array.mjs\";\nimport * as C from \"../../../i18n/constants.mjs\";\nimport BaseUI from \"./_base.mjs\";\nvar privatePool = new WeakMap();\n/**\n * Class responsible for the Context Menu entries for the Nested Rows plugin.\n *\n * @private\n * @class ContextMenuUI\n * @augments BaseUI\n */\n\nvar ContextMenuUI = /*#__PURE__*/function (_BaseUI) {\n  _inherits(ContextMenuUI, _BaseUI);\n\n  var _super = _createSuper(ContextMenuUI);\n\n  function ContextMenuUI(nestedRowsPlugin, hotInstance) {\n    var _this;\n\n    _classCallCheck(this, ContextMenuUI);\n\n    _this = _super.call(this, nestedRowsPlugin, hotInstance);\n    privatePool.set(_assertThisInitialized(_this), {\n      row_above: function row_above(key, selection) {\n        var lastSelection = selection[selection.length - 1];\n\n        _this.dataManager.addSibling(lastSelection.start.row, 'above');\n      },\n      row_below: function row_below(key, selection) {\n        var lastSelection = selection[selection.length - 1];\n\n        _this.dataManager.addSibling(lastSelection.start.row, 'below');\n      }\n    });\n    /**\n     * Reference to the DataManager instance connected with the Nested Rows plugin.\n     *\n     * @type {DataManager}\n     */\n\n    _this.dataManager = _this.plugin.dataManager;\n    return _this;\n  }\n  /**\n   * Append options to the context menu. (Propagated from the `afterContextMenuDefaultOptions` hook callback)\n   * f.\n   *\n   * @private\n   * @param {object} defaultOptions Default context menu options.\n   * @returns {*}\n   */\n\n\n  _createClass(ContextMenuUI, [{\n    key: \"appendOptions\",\n    value: function appendOptions(defaultOptions) {\n      var _this2 = this;\n\n      var newEntries = [{\n        key: 'add_child',\n        name: function name() {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD);\n        },\n        callback: function callback() {\n          var translatedRowIndex = _this2.dataManager.translateTrimmedRow(_this2.hot.getSelectedLast()[0]);\n\n          var parent = _this2.dataManager.getDataObject(translatedRowIndex);\n\n          _this2.dataManager.addChild(parent);\n        },\n        disabled: function disabled() {\n          var selected = _this2.hot.getSelectedLast();\n\n          return !selected || selected[0] < 0 || _this2.hot.selection.isSelectedByColumnHeader() || _this2.hot.countRows() >= _this2.hot.getSettings().maxRows;\n        }\n      }, {\n        key: 'detach_from_parent',\n        name: function name() {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD);\n        },\n        callback: function callback() {\n          _this2.dataManager.detachFromParent(_this2.hot.getSelectedLast());\n        },\n        disabled: function disabled() {\n          var selected = _this2.hot.getSelectedLast();\n\n          var translatedRowIndex = _this2.dataManager.translateTrimmedRow(selected[0]);\n\n          var parent = _this2.dataManager.getRowParent(translatedRowIndex);\n\n          return !parent || !selected || selected[0] < 0 || _this2.hot.selection.isSelectedByColumnHeader() || _this2.hot.countRows() >= _this2.hot.getSettings().maxRows;\n        }\n      }, {\n        name: '---------'\n      }];\n      rangeEach(0, defaultOptions.items.length - 1, function (i) {\n        if (i === 0) {\n          arrayEach(newEntries, function (val, j) {\n            defaultOptions.items.splice(i + j, 0, val);\n          });\n          return false;\n        }\n      });\n      return this.modifyRowInsertingOptions(defaultOptions);\n    }\n    /**\n     * Modify how the row inserting options work.\n     *\n     * @private\n     * @param {object} defaultOptions Default context menu items.\n     * @returns {*}\n     */\n\n  }, {\n    key: \"modifyRowInsertingOptions\",\n    value: function modifyRowInsertingOptions(defaultOptions) {\n      var priv = privatePool.get(this);\n      rangeEach(0, defaultOptions.items.length - 1, function (i) {\n        var option = priv[defaultOptions.items[i].key];\n\n        if (option !== null && option !== void 0) {\n          defaultOptions.items[i].callback = option;\n        }\n      });\n      return defaultOptions;\n    }\n  }]);\n\n  return ContextMenuUI;\n}(BaseUI);\n\nexport default ContextMenuUI;", "import \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.object.freeze.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\n\nvar _templateObject;\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.array.concat.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { isUndefined } from \"../../../helpers/mixed.mjs\";\nimport { warn } from \"../../../helpers/console.mjs\";\nimport { toSingleLine } from \"../../../helpers/templateLiteralTag.mjs\";\nimport { CellCoords } from \"../../../3rdparty/walkontable/src/index.mjs\";\n/**\n * Helper class for the row-move-related operations.\n *\n * @private\n * @class RowMoveController\n */\n\nvar RowMoveController = /*#__PURE__*/function () {\n  function RowMoveController(plugin) {\n    _classCallCheck(this, RowMoveController);\n\n    /**\n     * Reference to the Nested Rows plugin instance.\n     *\n     * @type {NestedRows}\n     */\n    this.plugin = plugin;\n    /**\n     * Reference to the Handsontable instance.\n     *\n     * @type {Handsontable.Core}\n     */\n\n    this.hot = plugin.hot;\n    /**\n     * Reference to the Data Manager class instance.\n     *\n     * @type {DataManager}\n     */\n\n    this.dataManager = plugin.dataManager;\n    /**\n     * Reference to the Collapsing UI class instance.\n     *\n     * @type {CollapsingUI}\n     */\n\n    this.collapsingUI = plugin.collapsingUI;\n  }\n  /**\n   * `beforeRowMove` hook callback.\n   *\n   * @param {Array} rows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements\n   *   will be placed after the moving action. To check the visualization of the final index, please take a look at\n   *   [documentation](@/guides/rows/row-moving.md).\n   * @param {undefined|number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we\n   *   are going to drop the moved elements. To check visualization of drop index please take a look at\n   *   [documentation](@/guides/rows/row-moving.md).\n   * @param {boolean} movePossible Indicates if it's possible to move rows to the desired position.\n   * @fires Hooks#afterRowMove\n   * @returns {boolean}\n   */\n\n\n  _createClass(RowMoveController, [{\n    key: \"onBeforeRowMove\",\n    value: function onBeforeRowMove(rows, finalIndex, dropIndex, movePossible) {\n      var _this = this;\n\n      var improperUsage = this.displayAPICompatibilityWarning({\n        rows: rows,\n        finalIndex: finalIndex,\n        dropIndex: dropIndex,\n        movePossible: movePossible\n      });\n\n      if (improperUsage) {\n        return false;\n      }\n\n      this.movedToCollapsed = false;\n      var dropToLastRow = dropIndex === this.hot.countRows();\n      var physicalDropIndex = dropToLastRow ? this.hot.countSourceRows() : this.dataManager.translateTrimmedRow(dropIndex);\n      var allowMove = true;\n      var physicalStartIndexes = rows.map(function (rowIndex) {\n        // Don't do the logic for the rest of the rows, as it's bound to fail anyway.\n        if (!allowMove) {\n          return false;\n        }\n\n        var physicalRowIndex = _this.dataManager.translateTrimmedRow(rowIndex);\n\n        allowMove = _this.shouldAllowMoving(physicalRowIndex, physicalDropIndex);\n        return physicalRowIndex;\n      });\n      var willDataChange = physicalStartIndexes.indexOf(physicalDropIndex) === -1;\n\n      if (!allowMove || !willDataChange) {\n        return false;\n      }\n\n      var baseParent = this.getBaseParent(physicalStartIndexes);\n      var targetParent = this.getTargetParent(dropToLastRow, physicalDropIndex);\n      var sameParent = baseParent === targetParent;\n      this.movedToCollapsed = this.collapsingUI.areChildrenCollapsed(targetParent); // Stash the current state of collapsed rows\n\n      this.collapsingUI.collapsedRowsStash.stash();\n      this.shiftCollapsibleParentsLocations(physicalStartIndexes, physicalDropIndex, sameParent);\n      this.moveRows(physicalStartIndexes, physicalDropIndex, targetParent);\n      this.dataManager.rewriteCache();\n      this.moveCellsMeta(physicalStartIndexes, physicalDropIndex);\n      this.collapsingUI.collapsedRowsStash.applyStash(false); // TODO: Trying to mock real work of the `ManualRowMove` plugin. It was blocked by returning `false` below.\n\n      this.hot.runHooks('afterRowMove', rows, finalIndex, dropIndex, movePossible, movePossible && this.isRowOrderChanged(rows, finalIndex)); // Not necessary - added to keep compatibility with other plugins (namely: columnSummary).\n\n      this.hot.render();\n      this.selectCells(rows, dropIndex);\n      return false;\n    }\n    /**\n     * Display a `dragRows`/`moveRows` method compatibility warning if needed.\n     *\n     * @param {object} beforeMoveRowHookArgs A set of arguments from the `beforeMoveRow` hook.\n     * @returns {boolean} `true` if is a result of an improper usage of the moving API.\n     */\n\n  }, {\n    key: \"displayAPICompatibilityWarning\",\n    value: function displayAPICompatibilityWarning(beforeMoveRowHookArgs) {\n      var rows = beforeMoveRowHookArgs.rows,\n          finalIndex = beforeMoveRowHookArgs.finalIndex,\n          dropIndex = beforeMoveRowHookArgs.dropIndex,\n          movePossible = beforeMoveRowHookArgs.movePossible;\n      var shouldTerminate = false;\n\n      if (isUndefined(dropIndex)) {\n        warn(toSingleLine(_templateObject || (_templateObject = _taggedTemplateLiteral([\"Since version 8.0.0 of the Handsontable the 'moveRows' method isn't used for moving rows \\n      when the NestedRows plugin is enabled. Please use the 'dragRows' method instead.\"], [\"Since version 8.0.0 of the Handsontable the 'moveRows' method isn't used for moving rows\\\\x20\\n      when the NestedRows plugin is enabled. Please use the 'dragRows' method instead.\"])))); // TODO: Trying to mock real work of the `ManualRowMove` plugin. It was blocked by returning `false` below.\n\n        this.hot.runHooks('afterRowMove', rows, finalIndex, dropIndex, movePossible, false);\n        shouldTerminate = true;\n      }\n\n      return shouldTerminate;\n    }\n    /**\n     * Check if the moving action should be allowed.\n     *\n     * @param {number} physicalRowIndex Physical start row index.\n     * @param {number} physicalDropIndex Physical drop index.\n     * @returns {boolean} `true` if it should continue with the moving action.\n     */\n\n  }, {\n    key: \"shouldAllowMoving\",\n    value: function shouldAllowMoving(physicalRowIndex, physicalDropIndex) {\n      /*\n         We can't move rows when any of them is:\n         - a parent\n         - a top-level element\n         - is being moved to the top level\n         - is being moved to the position of any of the moved rows (not changing position)\n      */\n      return !(this.dataManager.isParent(physicalRowIndex) || this.dataManager.isRowHighestLevel(physicalRowIndex) || physicalRowIndex === physicalDropIndex || physicalDropIndex === 0);\n    }\n    /**\n     * Get the base row parent.\n     *\n     * @param {number} physicalStartIndexes Physical start row index.\n     * @returns {object|null} The base row parent.\n     */\n\n  }, {\n    key: \"getBaseParent\",\n    value: function getBaseParent(physicalStartIndexes) {\n      return this.dataManager.getRowParent(physicalStartIndexes[0]);\n    }\n    /**\n     * Get the target row parent.\n     *\n     * @param {boolean} dropToLastRow `true` if the row is moved to the last row of the table.\n     * @param {number} physicalDropIndex Physical drop row index.\n     * @returns {object|null} The target row parent.\n     */\n\n  }, {\n    key: \"getTargetParent\",\n    value: function getTargetParent(dropToLastRow, physicalDropIndex) {\n      var targetParent = this.dataManager.getRowParent(dropToLastRow ? physicalDropIndex - 1 : physicalDropIndex); // If we try to move an element to the place of a top-level parent, snap the element to the previous top-level\n      // parent's children instead\n\n      if (targetParent === null || targetParent === void 0) {\n        targetParent = this.dataManager.getRowParent(physicalDropIndex - 1);\n      }\n\n      return targetParent;\n    }\n    /**\n     * Shift the cached collapsible rows position according to the move action.\n     *\n     * @param {number[]} physicalStartIndexes Physical start row indexes.\n     * @param {number} physicalDropIndex Physical drop index.\n     * @param {boolean} sameParent `true` if the row's being moved between siblings of the same parent.\n     */\n\n  }, {\n    key: \"shiftCollapsibleParentsLocations\",\n    value: function shiftCollapsibleParentsLocations(physicalStartIndexes, physicalDropIndex, sameParent) {\n      if (!sameParent) {\n        if (Math.max.apply(Math, _toConsumableArray(physicalStartIndexes)) <= physicalDropIndex) {\n          this.collapsingUI.collapsedRowsStash.shiftStash(physicalStartIndexes[0], physicalDropIndex, -1 * physicalStartIndexes.length);\n        } else {\n          this.collapsingUI.collapsedRowsStash.shiftStash(physicalDropIndex, physicalStartIndexes[0], physicalStartIndexes.length);\n        }\n      }\n    }\n    /**\n     * Move the rows at the provided coordinates.\n     *\n     * @param {number[]} physicalStartIndexes Physical indexes of the rows about to be moved.\n     * @param {number} physicalDropIndex Physical drop index.\n     * @param {object} targetParent Parent of the destination row.\n     */\n\n  }, {\n    key: \"moveRows\",\n    value: function moveRows(physicalStartIndexes, physicalDropIndex, targetParent) {\n      var _this2 = this;\n\n      var moveToLastChild = physicalDropIndex === this.dataManager.getRowIndex(targetParent) + this.dataManager.countChildren(targetParent) + 1;\n      this.hot.batchRender(function () {\n        physicalStartIndexes.forEach(function (physicalStartIndex) {\n          _this2.dataManager.moveRow(physicalStartIndex, physicalDropIndex, _this2.movedToCollapsed, moveToLastChild);\n        });\n      });\n    }\n    /**\n     * Move the cell meta for multiple rows.\n     *\n     * @param {number[]} baseIndexes Array of indexes for the rows being moved.\n     * @param {number} targetIndex Index of the destination of the move.\n     */\n\n  }, {\n    key: \"moveCellsMeta\",\n    value: function moveCellsMeta(baseIndexes, targetIndex) {\n      var _this3 = this,\n          _this$hot;\n\n      var rowsOfMeta = [];\n      var movingDown = Math.max.apply(Math, _toConsumableArray(baseIndexes)) < targetIndex;\n      baseIndexes.forEach(function (baseIndex) {\n        rowsOfMeta.push(_this3.hot.getCellMetaAtRow(baseIndex));\n      });\n      this.hot.spliceCellsMeta(baseIndexes[0], baseIndexes.length);\n\n      (_this$hot = this.hot).spliceCellsMeta.apply(_this$hot, [targetIndex - (movingDown ? rowsOfMeta.length : 0), 0].concat(rowsOfMeta));\n    }\n    /**\n     * Select cells after the move.\n     *\n     * @param {Array} rows Array of visual row indexes to be moved.\n     * @param {undefined|number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we\n     *   are going to drop the moved elements. To check visualization of drop index please take a look at\n     *   [documentation](@/guides/rows/row-moving.md).\n     */\n\n  }, {\n    key: \"selectCells\",\n    value: function selectCells(rows, dropIndex) {\n      var rowsLen = rows.length;\n      var startRow = 0;\n      var endRow = 0;\n      var selection = null;\n      var lastColIndex = null;\n\n      if (this.movedToCollapsed) {\n        var physicalDropIndex = null;\n\n        if (rows[rowsLen - 1] < dropIndex) {\n          physicalDropIndex = this.dataManager.translateTrimmedRow(dropIndex - rowsLen);\n        } else {\n          physicalDropIndex = this.dataManager.translateTrimmedRow(dropIndex);\n        }\n\n        var parentObject = this.dataManager.getRowParent(physicalDropIndex === null ? this.hot.countSourceRows() - 1 : physicalDropIndex - 1);\n        var parentIndex = this.dataManager.getRowIndex(parentObject);\n        startRow = this.dataManager.untranslateTrimmedRow(parentIndex);\n        endRow = startRow;\n      } else if (rows[rowsLen - 1] < dropIndex) {\n        endRow = dropIndex - 1;\n        startRow = endRow - rowsLen + 1;\n      } else {\n        startRow = dropIndex;\n        endRow = startRow + rowsLen - 1;\n      }\n\n      selection = this.hot.selection;\n      lastColIndex = this.hot.countCols() - 1;\n      selection.setRangeStart(new CellCoords(startRow, 0));\n      selection.setRangeEnd(new CellCoords(endRow, lastColIndex), true);\n    } // TODO: Reimplementation of function which is inside the `ManualRowMove` plugin.\n\n    /**\n     * Indicates if order of rows was changed.\n     *\n     * @param {Array} movedRows Array of visual row indexes to be moved.\n     * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements\n     *   will be placed after the moving action. To check the visualization of the final index, please take a look at\n     *   [documentation](@/guides/rows/row-moving.md).\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isRowOrderChanged\",\n    value: function isRowOrderChanged(movedRows, finalIndex) {\n      return movedRows.some(function (row, nrOfMovedElement) {\n        return row - nrOfMovedElement !== finalIndex;\n      });\n    }\n  }]);\n\n  return RowMoveController;\n}();\n\nexport { RowMoveController as default };", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport Storage from \"./storage.mjs\";\nimport Hooks from \"../../pluginHooks.mjs\";\nHooks.getSingleton().register('persistentStateSave');\nHooks.getSingleton().register('persistentStateLoad');\nHooks.getSingleton().register('persistentStateReset');\nexport var PLUGIN_KEY = 'persistentState';\nexport var PLUGIN_PRIORITY = 0;\n/**\n * @plugin PersistentState\n * @class PersistentState\n *\n * @description\n * Save the state of column sorting, column positions and column sizes in local storage to preserve table state\n * between page reloads.\n *\n * In order to enable data storage mechanism, {@link Options#persistentState} option must be set to `true`.\n *\n * When persistentState is enabled it exposes 3 hooks:\n * - {@link Hooks#persistentStateSave} - Saves value under given key in browser local storage.\n * - {@link Hooks#persistentStateLoad} - Loads value, saved under given key, from browser local storage. The loaded\n * value will be saved in `saveTo.value`.\n * - {@link Hooks#persistentStateReset} - Clears the value saved under key. If no key is given, all values associated\n * with table will be cleared.\n *\n * __Note:__ The main reason behind using `persistentState` hooks rather than regular LocalStorage API is that it\n * ensures separation of data stored by multiple Handsontable instances. In other words, if you have two (or more)\n * instances of Handsontable on one page, data saved by one instance won't be accessible by the second instance.\n * Those two instances can store data under the same key and no data would be overwritten.\n *\n * __Important:__ In order for the data separation to work properly, make sure that each instance of Handsontable has a unique `id`.\n *\n */\n\nexport var PersistentState = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(PersistentState, _BasePlugin);\n\n  var _super = _createSuper(PersistentState);\n\n  function PersistentState(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, PersistentState);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Instance of {@link Storage}.\n     *\n     * @private\n     * @type {Storage}\n     */\n\n    _this.storage = void 0;\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link PersistentState#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(PersistentState, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      if (!this.storage) {\n        this.storage = new Storage(this.hot.rootElement.id, this.hot.rootWindow);\n      }\n\n      this.addHook('persistentStateSave', function (key, value) {\n        return _this2.saveValue(key, value);\n      });\n      this.addHook('persistentStateLoad', function (key, saveTo) {\n        return _this2.loadValue(key, saveTo);\n      });\n      this.addHook('persistentStateReset', function () {\n        return _this2.resetValue();\n      });\n\n      _get(_getPrototypeOf(PersistentState.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.storage = void 0;\n\n      _get(_getPrototypeOf(PersistentState.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(_getPrototypeOf(PersistentState.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Loads the value from local storage.\n     *\n     * @param {string} key Storage key.\n     * @param {object} saveTo Saved value from local storage.\n     */\n\n  }, {\n    key: \"loadValue\",\n    value: function loadValue(key, saveTo) {\n      saveTo.value = this.storage.loadValue(key);\n    }\n    /**\n     * Saves the data to local storage.\n     *\n     * @param {string} key Storage key.\n     * @param {Mixed} value Value to save.\n     */\n\n  }, {\n    key: \"saveValue\",\n    value: function saveValue(key, value) {\n      this.storage.saveValue(key, value);\n    }\n    /**\n     * Resets the data or all data from local storage.\n     *\n     * @param {string} key [optional] Storage key.\n     */\n\n  }, {\n    key: \"resetValue\",\n    value: function resetValue(key) {\n      if (typeof key === 'undefined') {\n        this.storage.resetAll();\n      } else {\n        this.storage.reset(key);\n      }\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _get(_getPrototypeOf(PersistentState.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return PersistentState;\n}(BasePlugin);", "import \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.index-of.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { arrayEach } from \"../../helpers/array.mjs\";\n/**\n * @private\n * @class Storage\n */\n\nvar Storage = /*#__PURE__*/function () {\n  // eslint-disable-next-line no-restricted-globals\n  function Storage(prefix) {\n    var rootWindow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n\n    _classCallCheck(this, Storage);\n\n    /**\n     * Reference to proper window.\n     *\n     * @type {Window}\n     */\n    this.rootWindow = rootWindow;\n    /**\n     * Prefix for key (id element).\n     *\n     * @type {string}\n     */\n\n    this.prefix = prefix;\n    /**\n     * Saved keys.\n     *\n     * @type {Array}\n     */\n\n    this.savedKeys = [];\n    this.loadSavedKeys();\n  }\n  /**\n   * Save data to localStorage.\n   *\n   * @param {string} key Key string.\n   * @param {Mixed} value Value to save.\n   */\n\n\n  _createClass(Storage, [{\n    key: \"saveValue\",\n    value: function saveValue(key, value) {\n      this.rootWindow.localStorage.setItem(\"\".concat(this.prefix, \"_\").concat(key), JSON.stringify(value));\n\n      if (this.savedKeys.indexOf(key) === -1) {\n        this.savedKeys.push(key);\n        this.saveSavedKeys();\n      }\n    }\n    /**\n     * Load data from localStorage.\n     *\n     * @param {string} key Key string.\n     * @param {object} defaultValue Object containing the loaded data.\n     *\n     * @returns {object|undefined}\n     */\n\n  }, {\n    key: \"loadValue\",\n    value: function loadValue(key, defaultValue) {\n      var itemKey = typeof key === 'undefined' ? defaultValue : key;\n      var value = this.rootWindow.localStorage.getItem(\"\".concat(this.prefix, \"_\").concat(itemKey));\n      return value === null ? void 0 : JSON.parse(value);\n    }\n    /**\n     * Reset given data from localStorage.\n     *\n     * @param {string} key Key string.\n     */\n\n  }, {\n    key: \"reset\",\n    value: function reset(key) {\n      this.rootWindow.localStorage.removeItem(\"\".concat(this.prefix, \"_\").concat(key));\n    }\n    /**\n     * Reset all data from localStorage.\n     *\n     */\n\n  }, {\n    key: \"resetAll\",\n    value: function resetAll() {\n      var _this = this;\n\n      arrayEach(this.savedKeys, function (value, index) {\n        _this.rootWindow.localStorage.removeItem(\"\".concat(_this.prefix, \"_\").concat(_this.savedKeys[index]));\n      });\n      this.clearSavedKeys();\n    }\n    /**\n     * Load and save all keys from localStorage.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"loadSavedKeys\",\n    value: function loadSavedKeys() {\n      var keysJSON = this.rootWindow.localStorage.getItem(\"\".concat(this.prefix, \"__persistentStateKeys\"));\n      var keys = typeof keysJSON === 'string' ? JSON.parse(keysJSON) : void 0;\n      this.savedKeys = keys || [];\n    }\n    /**\n     * Save saved key in localStorage.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"saveSavedKeys\",\n    value: function saveSavedKeys() {\n      this.rootWindow.localStorage.setItem(\"\".concat(this.prefix, \"__persistentStateKeys\"), JSON.stringify(this.savedKeys));\n    }\n    /**\n     * Clear saved key from localStorage.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"clearSavedKeys\",\n    value: function clearSavedKeys() {\n      this.savedKeys.length = 0;\n      this.saveSavedKeys();\n    }\n  }]);\n\n  return Storage;\n}();\n\nexport default Storage;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.search.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { isObject } from \"../../helpers/object.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport { isUndefined } from \"../../helpers/mixed.mjs\";\nexport var PLUGIN_KEY = 'search';\nexport var PLUGIN_PRIORITY = 190;\nvar DEFAULT_SEARCH_RESULT_CLASS = 'htSearchResult';\n\nvar DEFAULT_CALLBACK = function DEFAULT_CALLBACK(instance, row, col, data, testResult) {\n  instance.getCellMeta(row, col).isSearchResult = testResult;\n};\n\nvar DEFAULT_QUERY_METHOD = function DEFAULT_QUERY_METHOD(query, value, cellProperties) {\n  if (isUndefined(query) || query === null || !query.toLocaleLowerCase || query.length === 0) {\n    return false;\n  }\n\n  if (isUndefined(value) || value === null) {\n    return false;\n  }\n\n  return value.toString().toLocaleLowerCase(cellProperties.locale).indexOf(query.toLocaleLowerCase(cellProperties.locale)) !== -1;\n};\n/**\n * @plugin Search\n * @class Search\n *\n * @description\n * The search plugin provides an easy interface to search data across Handsontable.\n *\n * In order to enable search mechanism, {@link Options#search} option must be set to `true`.\n *\n * @example\n * ```js\n * // as boolean\n * search: true\n * // as a object with one or more options\n * search: {\n *   callback: myNewCallbackFunction,\n *   queryMethod: myNewQueryMethod,\n *   searchResultClass: 'customClass'\n * }\n *\n * // Access to search plugin instance:\n * const searchPlugin = hot.getPlugin('search');\n *\n * // Set callback programmatically:\n * searchPlugin.setCallback(myNewCallbackFunction);\n * // Set query method programmatically:\n * searchPlugin.setQueryMethod(myNewQueryMethod);\n * // Set search result cells class programmatically:\n * searchPlugin.setSearchResultClass(customClass);\n * ```\n */\n\n\nexport var Search = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(Search, _BasePlugin);\n\n  var _super = _createSuper(Search);\n\n  function Search(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, Search);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Function called during querying for each cell from the {@link DataMap}.\n     *\n     * @private\n     * @type {Function}\n     */\n\n    _this.callback = DEFAULT_CALLBACK;\n    /**\n     * Query function is responsible for determining whether a query matches the value stored in a cell.\n     *\n     * @private\n     * @type {Function}\n     */\n\n    _this.queryMethod = DEFAULT_QUERY_METHOD;\n    /**\n     * Class name added to each cell that belongs to the searched query.\n     *\n     * @private\n     * @type {string}\n     */\n\n    _this.searchResultClass = DEFAULT_SEARCH_RESULT_CLASS;\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link AutoRowSize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(Search, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      var searchSettings = this.hot.getSettings()[PLUGIN_KEY];\n      this.updatePluginSettings(searchSettings);\n      this.addHook('beforeRenderer', function () {\n        return _this2.onBeforeRenderer.apply(_this2, arguments);\n      });\n\n      _get(_getPrototypeOf(Search.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      var _this3 = this;\n\n      var beforeRendererCallback = function beforeRendererCallback() {\n        return _this3.onBeforeRenderer.apply(_this3, arguments);\n      };\n\n      this.hot.addHook('beforeRenderer', beforeRendererCallback);\n      this.hot.addHookOnce('afterViewRender', function () {\n        _this3.hot.removeHook('beforeRenderer', beforeRendererCallback);\n      });\n\n      _get(_getPrototypeOf(Search.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(_getPrototypeOf(Search.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Makes the query.\n     *\n     * @param {string} queryStr Value to be search.\n     * @param {Function} [callback] Callback function performed on cells with values which matches to the searched query.\n     * @param {Function} [queryMethod] Query function responsible for determining whether a query matches the value stored in a cell.\n     * @returns {object[]} Return an array of objects with `row`, `col`, `data` properties or empty array.\n     */\n\n  }, {\n    key: \"query\",\n    value: function query(queryStr) {\n      var _this4 = this;\n\n      var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getCallback();\n      var queryMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.getQueryMethod();\n      var rowCount = this.hot.countRows();\n      var colCount = this.hot.countCols();\n      var queryResult = [];\n      var instance = this.hot;\n      rangeEach(0, rowCount - 1, function (rowIndex) {\n        rangeEach(0, colCount - 1, function (colIndex) {\n          var cellData = _this4.hot.getDataAtCell(rowIndex, colIndex);\n\n          var cellProperties = _this4.hot.getCellMeta(rowIndex, colIndex);\n\n          var cellCallback = cellProperties.search.callback || callback;\n          var cellQueryMethod = cellProperties.search.queryMethod || queryMethod;\n          var testResult = cellQueryMethod(queryStr, cellData, cellProperties);\n\n          if (testResult) {\n            var singleResult = {\n              row: rowIndex,\n              col: colIndex,\n              data: cellData\n            };\n            queryResult.push(singleResult);\n          }\n\n          if (cellCallback) {\n            cellCallback(instance, rowIndex, colIndex, cellData, testResult);\n          }\n        });\n      });\n      return queryResult;\n    }\n    /**\n     * Gets the callback function.\n     *\n     * @returns {Function} Return the callback function.\n     */\n\n  }, {\n    key: \"getCallback\",\n    value: function getCallback() {\n      return this.callback;\n    }\n    /**\n     * Sets the callback function. This function will be called during querying for each cell.\n     *\n     * @param {Function} newCallback A callback function.\n     */\n\n  }, {\n    key: \"setCallback\",\n    value: function setCallback(newCallback) {\n      this.callback = newCallback;\n    }\n    /**\n     * Gets the query method function.\n     *\n     * @returns {Function} Return the query method.\n     */\n\n  }, {\n    key: \"getQueryMethod\",\n    value: function getQueryMethod() {\n      return this.queryMethod;\n    }\n    /**\n     * Sets the query method function. The function is responsible for determining whether a query matches the value stored in a cell.\n     *\n     * @param {Function} newQueryMethod A function with specific match logic.\n     */\n\n  }, {\n    key: \"setQueryMethod\",\n    value: function setQueryMethod(newQueryMethod) {\n      this.queryMethod = newQueryMethod;\n    }\n    /**\n     * Gets search result cells class name.\n     *\n     * @returns {string} Return the cell class name.\n     */\n\n  }, {\n    key: \"getSearchResultClass\",\n    value: function getSearchResultClass() {\n      return this.searchResultClass;\n    }\n    /**\n     * Sets search result cells class name. This class name will be added to each cell that belongs to the searched query.\n     *\n     * @param {string} newElementClass CSS class name.\n     */\n\n  }, {\n    key: \"setSearchResultClass\",\n    value: function setSearchResultClass(newElementClass) {\n      this.searchResultClass = newElementClass;\n    }\n    /**\n     * Updates the settings of the plugin.\n     *\n     * @param {object} searchSettings The plugin settings, taken from Handsontable configuration.\n     * @private\n     */\n\n  }, {\n    key: \"updatePluginSettings\",\n    value: function updatePluginSettings(searchSettings) {\n      if (isObject(searchSettings)) {\n        if (searchSettings.searchResultClass) {\n          this.setSearchResultClass(searchSettings.searchResultClass);\n        }\n\n        if (searchSettings.queryMethod) {\n          this.setQueryMethod(searchSettings.queryMethod);\n        }\n\n        if (searchSettings.callback) {\n          this.setCallback(searchSettings.callback);\n        }\n      }\n    }\n    /**\n     * The `beforeRenderer` hook callback.\n     *\n     * @private\n     * @param {HTMLTableCellElement} TD The rendered `TD` element.\n     * @param {number} row Visual row index.\n     * @param {number} col Visual column index.\n     * @param {string|number} prop Column property name or a column index, if datasource is an array of arrays.\n     * @param {string} value Value of the rendered cell.\n     * @param {object} cellProperties Object containing the cell's properties.\n     */\n\n  }, {\n    key: \"onBeforeRenderer\",\n    value: function onBeforeRenderer(TD, row, col, prop, value, cellProperties) {\n      // TODO: #4972\n      var className = cellProperties.className || [];\n      var classArray = [];\n\n      if (typeof className === 'string') {\n        classArray = className.split(' ');\n      } else {\n        var _classArray;\n\n        (_classArray = classArray).push.apply(_classArray, _toConsumableArray(className));\n      }\n\n      if (this.isEnabled() && cellProperties.isSearchResult) {\n        if (!classArray.includes(this.searchResultClass)) {\n          classArray.push(\"\".concat(this.searchResultClass));\n        }\n      } else if (classArray.includes(this.searchResultClass)) {\n        classArray.splice(classArray.indexOf(this.searchResultClass), 1);\n      }\n\n      cellProperties.className = classArray.join(' ');\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _get(_getPrototypeOf(Search.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return Search;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { addClass, removeClass } from \"../../helpers/dom/element.mjs\";\nimport { arrayEach } from \"../../helpers/array.mjs\";\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { isTouchSupported } from \"../../helpers/feature.mjs\";\nexport var PLUGIN_KEY = 'touchScroll';\nexport var PLUGIN_PRIORITY = 200;\n/**\n * @private\n * @plugin TouchScroll\n * @class TouchScroll\n */\n\nexport var TouchScroll = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(TouchScroll, _BasePlugin);\n\n  var _super = _createSuper(TouchScroll);\n\n  function TouchScroll(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, TouchScroll);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Collection of scrollbars to update.\n     *\n     * @type {Array}\n     */\n\n    _this.scrollbars = [];\n    /**\n     * Collection of overlays to update.\n     *\n     * @type {Array}\n     */\n\n    _this.clones = [];\n    /**\n     * Flag which determines if collection of overlays should be refilled on every table render.\n     *\n     * @type {boolean}\n     * @default false\n     */\n\n    _this.lockedCollection = false;\n    /**\n     * Flag which determines if walkontable should freeze overlays while scrolling.\n     *\n     * @type {boolean}\n     * @default false\n     */\n\n    _this.freezeOverlays = false;\n    return _this;\n  }\n  /**\n   * Check if plugin is enabled.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(TouchScroll, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return isTouchSupported();\n    }\n    /**\n     * Enable the plugin.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.addHook('afterViewRender', function () {\n        return _this2.onAfterViewRender();\n      });\n      this.registerEvents();\n\n      _get(_getPrototypeOf(TouchScroll.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin to use the latest options you have specified.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      this.lockedCollection = false;\n\n      _get(_getPrototypeOf(TouchScroll.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disable plugin for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      _get(_getPrototypeOf(TouchScroll.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Register all necessary events.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"registerEvents\",\n    value: function registerEvents() {\n      var _this3 = this;\n\n      this.addHook('beforeTouchScroll', function () {\n        return _this3.onBeforeTouchScroll();\n      });\n      this.addHook('afterMomentumScroll', function () {\n        return _this3.onAfterMomentumScroll();\n      });\n    }\n    /**\n     * After view render listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterViewRender\",\n    value: function onAfterViewRender() {\n      if (this.lockedCollection) {\n        return;\n      }\n\n      var _this$hot$view$wt$wtO = this.hot.view.wt.wtOverlays,\n          topOverlay = _this$hot$view$wt$wtO.topOverlay,\n          bottomOverlay = _this$hot$view$wt$wtO.bottomOverlay,\n          leftOverlay = _this$hot$view$wt$wtO.leftOverlay,\n          topLeftCornerOverlay = _this$hot$view$wt$wtO.topLeftCornerOverlay,\n          bottomLeftCornerOverlay = _this$hot$view$wt$wtO.bottomLeftCornerOverlay;\n      this.lockedCollection = true;\n      this.scrollbars.length = 0;\n      this.scrollbars.push(topOverlay);\n\n      if (bottomOverlay.clone) {\n        this.scrollbars.push(bottomOverlay);\n      }\n\n      this.scrollbars.push(leftOverlay);\n\n      if (topLeftCornerOverlay) {\n        this.scrollbars.push(topLeftCornerOverlay);\n      }\n\n      if (bottomLeftCornerOverlay && bottomLeftCornerOverlay.clone) {\n        this.scrollbars.push(bottomLeftCornerOverlay);\n      }\n\n      this.clones = [];\n\n      if (topOverlay.needFullRender) {\n        this.clones.push(topOverlay.clone.wtTable.holder.parentNode);\n      }\n\n      if (bottomOverlay.needFullRender) {\n        this.clones.push(bottomOverlay.clone.wtTable.holder.parentNode);\n      }\n\n      if (leftOverlay.needFullRender) {\n        this.clones.push(leftOverlay.clone.wtTable.holder.parentNode);\n      }\n\n      if (topLeftCornerOverlay) {\n        this.clones.push(topLeftCornerOverlay.clone.wtTable.holder.parentNode);\n      }\n\n      if (bottomLeftCornerOverlay && bottomLeftCornerOverlay.clone) {\n        this.clones.push(bottomLeftCornerOverlay.clone.wtTable.holder.parentNode);\n      }\n    }\n    /**\n     * Touch scroll listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onBeforeTouchScroll\",\n    value: function onBeforeTouchScroll() {\n      this.freezeOverlays = true;\n      arrayEach(this.clones, function (clone) {\n        addClass(clone, 'hide-tween');\n      });\n    }\n    /**\n     * After momentum scroll listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onAfterMomentumScroll\",\n    value: function onAfterMomentumScroll() {\n      var _this4 = this;\n\n      this.freezeOverlays = false;\n      arrayEach(this.clones, function (clone) {\n        removeClass(clone, 'hide-tween');\n        addClass(clone, 'show-tween');\n      });\n\n      this.hot._registerTimeout(function () {\n        arrayEach(_this4.clones, function (clone) {\n          removeClass(clone, 'show-tween');\n        });\n      }, 400);\n\n      arrayEach(this.scrollbars, function (scrollbar) {\n        scrollbar.refresh();\n        scrollbar.resetFixedPosition();\n      });\n      this.hot.view.wt.wtOverlays.syncScrollWithMaster();\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return TouchScroll;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.set.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.number.is-integer.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport \"core-js/modules/es.reflect.get.js\";\nimport \"core-js/modules/es.object.get-own-property-descriptor.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BasePlugin } from \"../base/index.mjs\";\nimport { TrimmingMap } from \"../../translations/index.mjs\";\nimport { arrayEach, arrayReduce } from \"../../helpers/array.mjs\";\nexport var PLUGIN_KEY = 'trimRows';\nexport var PLUGIN_PRIORITY = 330;\n/**\n * @plugin TrimRows\n * @class TrimRows\n *\n * @description\n * The plugin allows to trim certain rows. The trimming is achieved by applying the transformation algorithm to the data\n * transformation. In this case, when the row is trimmed it is not accessible using `getData*` methods thus the trimmed\n * data is not visible to other plugins.\n *\n * @example\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   // hide selected rows on table initialization\n *   trimRows: [1, 2, 5]\n * });\n *\n * // access the trimRows plugin instance\n * const trimRowsPlugin = hot.getPlugin('trimRows');\n *\n * // hide single row\n * trimRowsPlugin.trimRow(1);\n *\n * // hide multiple rows\n * trimRowsPlugin.trimRow(1, 2, 9);\n *\n * // or as an array\n * trimRowsPlugin.trimRows([1, 2, 9]);\n *\n * // show single row\n * trimRowsPlugin.untrimRow(1);\n *\n * // show multiple rows\n * trimRowsPlugin.untrimRow(1, 2, 9);\n *\n * // or as an array\n * trimRowsPlugin.untrimRows([1, 2, 9]);\n *\n * // rerender table to see the changes\n * hot.render();\n * ```\n */\n\nexport var TrimRows = /*#__PURE__*/function (_BasePlugin) {\n  _inherits(TrimRows, _BasePlugin);\n\n  var _super = _createSuper(TrimRows);\n\n  function TrimRows(hotInstance) {\n    var _this;\n\n    _classCallCheck(this, TrimRows);\n\n    _this = _super.call(this, hotInstance);\n    /**\n     * Map of skipped rows by the plugin.\n     *\n     * @private\n     * @type {null|TrimmingMap}\n     */\n\n    _this.trimmedRowsMap = null;\n    return _this;\n  }\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link AutoRowSize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n\n\n  _createClass(TrimRows, [{\n    key: \"isEnabled\",\n    value: function isEnabled() {\n      return !!this.hot.getSettings()[PLUGIN_KEY];\n    }\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"enablePlugin\",\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.trimmedRowsMap = this.hot.rowIndexMapper.registerMap('trimRows', new TrimmingMap());\n      this.trimmedRowsMap.addLocalHook('init', function () {\n        return _this2.onMapInit();\n      });\n\n      _get(_getPrototypeOf(TrimRows.prototype), \"enablePlugin\", this).call(this);\n    }\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: \"updatePlugin\",\n    value: function updatePlugin() {\n      var _this3 = this;\n\n      var trimmedRows = this.hot.getSettings()[PLUGIN_KEY];\n\n      if (Array.isArray(trimmedRows)) {\n        this.hot.batchExecution(function () {\n          _this3.trimmedRowsMap.clear();\n\n          arrayEach(trimmedRows, function (physicalRow) {\n            _this3.trimmedRowsMap.setValueAtIndex(physicalRow, true);\n          });\n        }, true);\n      }\n\n      _get(_getPrototypeOf(TrimRows.prototype), \"updatePlugin\", this).call(this);\n    }\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: \"disablePlugin\",\n    value: function disablePlugin() {\n      this.hot.rowIndexMapper.unregisterMap('trimRows');\n\n      _get(_getPrototypeOf(TrimRows.prototype), \"disablePlugin\", this).call(this);\n    }\n    /**\n     * Get list of trimmed rows.\n     *\n     * @returns {Array} Physical rows.\n     */\n\n  }, {\n    key: \"getTrimmedRows\",\n    value: function getTrimmedRows() {\n      return this.trimmedRowsMap.getTrimmedIndexes();\n    }\n    /**\n     * Trims the rows provided in the array.\n     *\n     * @param {number[]} rows Array of physical row indexes.\n     * @fires Hooks#beforeTrimRow\n     * @fires Hooks#afterTrimRow\n     */\n\n  }, {\n    key: \"trimRows\",\n    value: function trimRows(rows) {\n      var _this4 = this;\n\n      var currentTrimConfig = this.getTrimmedRows();\n      var isValidConfig = this.isValidConfig(rows);\n      var destinationTrimConfig = currentTrimConfig;\n\n      if (isValidConfig) {\n        destinationTrimConfig = Array.from(new Set(currentTrimConfig.concat(rows)));\n      }\n\n      var allowTrimRow = this.hot.runHooks('beforeTrimRow', currentTrimConfig, destinationTrimConfig, isValidConfig);\n\n      if (allowTrimRow === false) {\n        return;\n      }\n\n      if (isValidConfig) {\n        this.hot.batchExecution(function () {\n          arrayEach(rows, function (physicalRow) {\n            _this4.trimmedRowsMap.setValueAtIndex(physicalRow, true);\n          });\n        }, true);\n      }\n\n      this.hot.runHooks('afterTrimRow', currentTrimConfig, destinationTrimConfig, isValidConfig, isValidConfig && destinationTrimConfig.length > currentTrimConfig.length);\n    }\n    /**\n     * Trims the row provided as physical row index (counting from 0).\n     *\n     * @param {...number} row Physical row index.\n     */\n\n  }, {\n    key: \"trimRow\",\n    value: function trimRow() {\n      for (var _len = arguments.length, row = new Array(_len), _key = 0; _key < _len; _key++) {\n        row[_key] = arguments[_key];\n      }\n\n      this.trimRows(row);\n    }\n    /**\n     * Untrims the rows provided in the array.\n     *\n     * @param {number[]} rows Array of physical row indexes.\n     * @fires Hooks#beforeUntrimRow\n     * @fires Hooks#afterUntrimRow\n     */\n\n  }, {\n    key: \"untrimRows\",\n    value: function untrimRows(rows) {\n      var currentTrimConfig = this.getTrimmedRows();\n      var isValidConfig = this.isValidConfig(rows);\n      var destinationTrimConfig = currentTrimConfig;\n      var trimmingMapValues = this.trimmedRowsMap.getValues().slice();\n      var isAnyRowUntrimmed = rows.length > 0;\n\n      if (isValidConfig && isAnyRowUntrimmed) {\n        // Preparing new values for trimming map.\n        arrayEach(rows, function (physicalRow) {\n          trimmingMapValues[physicalRow] = false;\n        }); // Preparing new trimming config.\n\n        destinationTrimConfig = arrayReduce(trimmingMapValues, function (trimmedIndexes, isTrimmed, physicalIndex) {\n          if (isTrimmed) {\n            trimmedIndexes.push(physicalIndex);\n          }\n\n          return trimmedIndexes;\n        }, []);\n      }\n\n      var allowUntrimRow = this.hot.runHooks('beforeUntrimRow', currentTrimConfig, destinationTrimConfig, isValidConfig && isAnyRowUntrimmed);\n\n      if (allowUntrimRow === false) {\n        return;\n      }\n\n      if (isValidConfig && isAnyRowUntrimmed) {\n        this.trimmedRowsMap.setValues(trimmingMapValues);\n      }\n\n      this.hot.runHooks('afterUntrimRow', currentTrimConfig, destinationTrimConfig, isValidConfig && isAnyRowUntrimmed, isValidConfig && destinationTrimConfig.length < currentTrimConfig.length);\n    }\n    /**\n     * Untrims the row provided as row index (counting from 0).\n     *\n     * @param {...number} row Physical row index.\n     */\n\n  }, {\n    key: \"untrimRow\",\n    value: function untrimRow() {\n      for (var _len2 = arguments.length, row = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        row[_key2] = arguments[_key2];\n      }\n\n      this.untrimRows(row);\n    }\n    /**\n     * Checks if given row is hidden.\n     *\n     * @param {number} physicalRow Physical row index.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isTrimmed\",\n    value: function isTrimmed(physicalRow) {\n      return this.trimmedRowsMap.getValueAtIndex(physicalRow) || false;\n    }\n    /**\n     * Untrims all trimmed rows.\n     */\n\n  }, {\n    key: \"untrimAll\",\n    value: function untrimAll() {\n      this.untrimRows(this.getTrimmedRows());\n    }\n    /**\n     * Get if trim config is valid. Check whether all of the provided row indexes are within source data.\n     *\n     * @param {Array} trimmedRows List of physical row indexes.\n     * @returns {boolean}\n     */\n\n  }, {\n    key: \"isValidConfig\",\n    value: function isValidConfig(trimmedRows) {\n      var sourceRows = this.hot.countSourceRows();\n      return trimmedRows.every(function (trimmedRow) {\n        return Number.isInteger(trimmedRow) && trimmedRow >= 0 && trimmedRow < sourceRows;\n      });\n    }\n    /**\n     * On map initialized hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: \"onMapInit\",\n    value: function onMapInit() {\n      var _this5 = this;\n\n      var trimmedRows = this.hot.getSettings()[PLUGIN_KEY];\n\n      if (Array.isArray(trimmedRows)) {\n        this.hot.batchExecution(function () {\n          arrayEach(trimmedRows, function (physicalRow) {\n            _this5.trimmedRowsMap.setValueAtIndex(physicalRow, true);\n          });\n        }, true);\n      }\n    }\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _get(_getPrototypeOf(TrimRows.prototype), \"destroy\", this).call(this);\n    }\n  }], [{\n    key: \"PLUGIN_KEY\",\n    get: function get() {\n      return PLUGIN_KEY;\n    }\n  }, {\n    key: \"PLUGIN_PRIORITY\",\n    get: function get() {\n      return PLUGIN_PRIORITY;\n    }\n  }]);\n\n  return TrimRows;\n}(BasePlugin);", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport \"core-js/modules/es.array.find.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.array.reduce.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.splice.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.array.index-of.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport \"core-js/modules/es.symbol.iterator.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.from.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.object.set-prototype-of.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nimport \"core-js/modules/es.reflect.construct.js\";\nimport Hooks from \"../../pluginHooks.mjs\";\nimport { arrayMap, arrayEach } from \"../../helpers/array.mjs\";\nimport { rangeEach } from \"../../helpers/number.mjs\";\nimport { inherit, deepClone } from \"../../helpers/object.mjs\";\nimport { stopImmediatePropagation, isImmediatePropagationStopped } from \"../../helpers/dom/event.mjs\";\nimport { align } from \"../contextMenu/utils.mjs\";\nexport var PLUGIN_KEY = 'undoRedo';\n/**\n * @description\n * Handsontable UndoRedo plugin allows to undo and redo certain actions done in the table.\n *\n * __Note__, that not all actions are currently undo-able. The UndoRedo plugin is enabled by default.\n * @example\n * ```js\n * undo: true\n * ```\n * @class UndoRedo\n * @plugin UndoRedo\n * @param {Core} instance The Handsontable instance.\n */\n\nfunction UndoRedo(instance) {\n  var plugin = this;\n  this.instance = instance;\n  this.doneActions = [];\n  this.undoneActions = [];\n  this.ignoreNewActions = false;\n  this.enabled = false;\n  instance.addHook('afterChange', function (changes, source) {\n    var _this = this;\n\n    var changesLen = changes && changes.length;\n\n    if (!changesLen) {\n      return;\n    }\n\n    var hasDifferences = changes.find(function (change) {\n      var _change = _slicedToArray(change, 4),\n          oldValue = _change[2],\n          newValue = _change[3];\n\n      return oldValue !== newValue;\n    });\n\n    if (!hasDifferences) {\n      return;\n    }\n\n    var wrappedAction = function wrappedAction() {\n      var clonedChanges = changes.reduce(function (arr, change) {\n        arr.push(_toConsumableArray(change));\n        return arr;\n      }, []);\n      arrayEach(clonedChanges, function (change) {\n        change[1] = instance.propToCol(change[1]);\n      });\n      var selected = changesLen > 1 ? _this.getSelected() : [[clonedChanges[0][0], clonedChanges[0][1]]];\n      return new UndoRedo.ChangeAction(clonedChanges, selected);\n    };\n\n    plugin.done(wrappedAction, source);\n  });\n  instance.addHook('afterCreateRow', function (index, amount, source) {\n    plugin.done(function () {\n      return new UndoRedo.CreateRowAction(index, amount);\n    }, source);\n  });\n  instance.addHook('beforeRemoveRow', function (index, amount, logicRows, source) {\n    var wrappedAction = function wrappedAction() {\n      var originalData = plugin.instance.getSourceDataArray();\n      var rowIndex = (originalData.length + index) % originalData.length;\n      var physicalRowIndex = instance.toPhysicalRow(rowIndex);\n      var removedData = deepClone(originalData.slice(physicalRowIndex, physicalRowIndex + amount));\n      return new UndoRedo.RemoveRowAction(rowIndex, removedData, instance.getSettings().fixedRowsBottom, instance.getSettings().fixedRowsTop);\n    };\n\n    plugin.done(wrappedAction, source);\n  });\n  instance.addHook('afterCreateCol', function (index, amount, source) {\n    plugin.done(function () {\n      return new UndoRedo.CreateColumnAction(index, amount);\n    }, source);\n  });\n  instance.addHook('beforeRemoveCol', function (index, amount, logicColumns, source) {\n    var wrappedAction = function wrappedAction() {\n      var originalData = plugin.instance.getSourceDataArray();\n      var columnIndex = (plugin.instance.countCols() + index) % plugin.instance.countCols();\n      var removedData = [];\n      var headers = [];\n      var indexes = [];\n      rangeEach(originalData.length - 1, function (i) {\n        var column = [];\n        var origRow = originalData[i];\n        rangeEach(columnIndex, columnIndex + (amount - 1), function (j) {\n          column.push(origRow[instance.toPhysicalColumn(j)]);\n        });\n        removedData.push(column);\n      });\n      rangeEach(amount - 1, function (i) {\n        indexes.push(instance.toPhysicalColumn(columnIndex + i));\n      });\n\n      if (Array.isArray(instance.getSettings().colHeaders)) {\n        rangeEach(amount - 1, function (i) {\n          headers.push(instance.getSettings().colHeaders[instance.toPhysicalColumn(columnIndex + i)] || null);\n        });\n      }\n\n      var columnsMap = instance.columnIndexMapper.getIndexesSequence();\n      var rowsMap = instance.rowIndexMapper.getIndexesSequence();\n      return new UndoRedo.RemoveColumnAction(columnIndex, indexes, removedData, headers, columnsMap, rowsMap, instance.getSettings().fixedColumnsLeft);\n    };\n\n    plugin.done(wrappedAction, source);\n  });\n  instance.addHook('beforeCellAlignment', function (stateBefore, range, type, alignment) {\n    plugin.done(function () {\n      return new UndoRedo.CellAlignmentAction(stateBefore, range, type, alignment);\n    });\n  });\n  instance.addHook('beforeFilter', function (conditionsStack) {\n    plugin.done(function () {\n      return new UndoRedo.FiltersAction(conditionsStack);\n    });\n  });\n  instance.addHook('beforeRowMove', function (rows, finalIndex) {\n    if (rows === false) {\n      return;\n    }\n\n    plugin.done(function () {\n      return new UndoRedo.RowMoveAction(rows, finalIndex);\n    });\n  });\n  instance.addHook('beforeMergeCells', function (cellRange, auto) {\n    if (auto) {\n      return;\n    }\n\n    plugin.done(function () {\n      return new UndoRedo.MergeCellsAction(instance, cellRange);\n    });\n  });\n  instance.addHook('afterUnmergeCells', function (cellRange, auto) {\n    if (auto) {\n      return;\n    }\n\n    plugin.done(function () {\n      return new UndoRedo.UnmergeCellsAction(instance, cellRange);\n    });\n  }); // TODO: Why this callback is needed? One test doesn't pass after calling method right after plugin creation (outside the callback).\n\n  instance.addHook('afterInit', function () {\n    plugin.init();\n  });\n}\n/**\n * Stash information about performed actions.\n *\n * @function done\n * @memberof UndoRedo#\n * @fires Hooks#beforeUndoStackChange\n * @fires Hooks#afterUndoStackChange\n * @fires Hooks#beforeRedoStackChange\n * @fires Hooks#afterRedoStackChange\n * @param {Function} wrappedAction The action descriptor wrapped in a closure.\n * @param {string} [source] Source of the action. It is defined just for more general actions (not related to plugins).\n */\n\n\nUndoRedo.prototype.done = function (wrappedAction, source) {\n  if (this.ignoreNewActions) {\n    return;\n  }\n\n  var isBlockedByDefault = source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto';\n\n  if (isBlockedByDefault) {\n    return;\n  }\n\n  var doneActionsCopy = this.doneActions.slice();\n  var continueAction = this.instance.runHooks('beforeUndoStackChange', doneActionsCopy, source);\n\n  if (continueAction === false) {\n    return;\n  }\n\n  var newAction = wrappedAction();\n  var undoneActionsCopy = this.undoneActions.slice();\n  this.doneActions.push(newAction);\n  this.instance.runHooks('afterUndoStackChange', doneActionsCopy, this.doneActions.slice());\n  this.instance.runHooks('beforeRedoStackChange', undoneActionsCopy);\n  this.undoneActions.length = 0;\n  this.instance.runHooks('afterRedoStackChange', undoneActionsCopy, this.undoneActions.slice());\n};\n/**\n * Undo the last action performed to the table.\n *\n * @function undo\n * @memberof UndoRedo#\n * @fires Hooks#beforeUndoStackChange\n * @fires Hooks#afterUndoStackChange\n * @fires Hooks#beforeRedoStackChange\n * @fires Hooks#afterRedoStackChange\n * @fires Hooks#beforeUndo\n * @fires Hooks#afterUndo\n */\n\n\nUndoRedo.prototype.undo = function () {\n  if (this.isUndoAvailable()) {\n    var doneActionsCopy = this.doneActions.slice();\n    this.instance.runHooks('beforeUndoStackChange', doneActionsCopy);\n    var action = this.doneActions.pop();\n    this.instance.runHooks('afterUndoStackChange', doneActionsCopy, this.doneActions.slice());\n    var actionClone = deepClone(action);\n    var continueAction = this.instance.runHooks('beforeUndo', actionClone);\n\n    if (continueAction === false) {\n      return;\n    }\n\n    this.ignoreNewActions = true;\n    var that = this;\n    var undoneActionsCopy = this.undoneActions.slice();\n    this.instance.runHooks('beforeRedoStackChange', undoneActionsCopy);\n    action.undo(this.instance, function () {\n      that.ignoreNewActions = false;\n      that.undoneActions.push(action);\n    });\n    this.instance.runHooks('afterRedoStackChange', undoneActionsCopy, this.undoneActions.slice());\n    this.instance.runHooks('afterUndo', actionClone);\n  }\n};\n/**\n * Redo the previous action performed to the table (used to reverse an undo).\n *\n * @function redo\n * @memberof UndoRedo#\n * @fires Hooks#beforeUndoStackChange\n * @fires Hooks#afterUndoStackChange\n * @fires Hooks#beforeRedoStackChange\n * @fires Hooks#afterRedoStackChange\n * @fires Hooks#beforeRedo\n * @fires Hooks#afterRedo\n */\n\n\nUndoRedo.prototype.redo = function () {\n  if (this.isRedoAvailable()) {\n    var undoneActionsCopy = this.undoneActions.slice();\n    this.instance.runHooks('beforeRedoStackChange', undoneActionsCopy);\n    var action = this.undoneActions.pop();\n    this.instance.runHooks('afterRedoStackChange', undoneActionsCopy, this.undoneActions.slice());\n    var actionClone = deepClone(action);\n    var continueAction = this.instance.runHooks('beforeRedo', actionClone);\n\n    if (continueAction === false) {\n      return;\n    }\n\n    this.ignoreNewActions = true;\n    var that = this;\n    var doneActionsCopy = this.doneActions.slice();\n    this.instance.runHooks('beforeUndoStackChange', doneActionsCopy);\n    action.redo(this.instance, function () {\n      that.ignoreNewActions = false;\n      that.doneActions.push(action);\n    });\n    this.instance.runHooks('afterUndoStackChange', doneActionsCopy, this.doneActions.slice());\n    this.instance.runHooks('afterRedo', actionClone);\n  }\n};\n/**\n * Checks if undo action is available.\n *\n * @function isUndoAvailable\n * @memberof UndoRedo#\n * @returns {boolean} Return `true` if undo can be performed, `false` otherwise.\n */\n\n\nUndoRedo.prototype.isUndoAvailable = function () {\n  return this.doneActions.length > 0;\n};\n/**\n * Checks if redo action is available.\n *\n * @function isRedoAvailable\n * @memberof UndoRedo#\n * @returns {boolean} Return `true` if redo can be performed, `false` otherwise.\n */\n\n\nUndoRedo.prototype.isRedoAvailable = function () {\n  return this.undoneActions.length > 0;\n};\n/**\n * Clears undo history.\n *\n * @function clear\n * @memberof UndoRedo#\n */\n\n\nUndoRedo.prototype.clear = function () {\n  this.doneActions.length = 0;\n  this.undoneActions.length = 0;\n};\n/**\n * Checks if the plugin is enabled.\n *\n * @function isEnabled\n * @memberof UndoRedo#\n * @returns {boolean}\n */\n\n\nUndoRedo.prototype.isEnabled = function () {\n  return this.enabled;\n};\n/**\n * Enables the plugin.\n *\n * @function enable\n * @memberof UndoRedo#\n */\n\n\nUndoRedo.prototype.enable = function () {\n  if (this.isEnabled()) {\n    return;\n  }\n\n  var hot = this.instance;\n  this.enabled = true;\n  exposeUndoRedoMethods(hot);\n  hot.addHook('beforeKeyDown', onBeforeKeyDown);\n  hot.addHook('afterChange', onAfterChange);\n};\n/**\n * Disables the plugin.\n *\n * @function disable\n * @memberof UndoRedo#\n */\n\n\nUndoRedo.prototype.disable = function () {\n  if (!this.isEnabled()) {\n    return;\n  }\n\n  var hot = this.instance;\n  this.enabled = false;\n  removeExposedUndoRedoMethods(hot);\n  hot.removeHook('beforeKeyDown', onBeforeKeyDown);\n  hot.removeHook('afterChange', onAfterChange);\n};\n/**\n * Destroys the instance.\n *\n * @function destroy\n * @memberof UndoRedo#\n */\n\n\nUndoRedo.prototype.destroy = function () {\n  this.clear();\n  this.instance = null;\n  this.doneActions = null;\n  this.undoneActions = null;\n};\n\nUndoRedo.Action = function () {};\n\nUndoRedo.Action.prototype.undo = function () {};\n\nUndoRedo.Action.prototype.redo = function () {};\n/**\n * Change action.\n *\n * @private\n * @param {Array} changes 2D array containing information about each of the edited cells.\n * @param {number[]} selected The cell selection.\n */\n\n\nUndoRedo.ChangeAction = function (changes, selected) {\n  this.changes = changes;\n  this.selected = selected;\n  this.actionType = 'change';\n};\n\ninherit(UndoRedo.ChangeAction, UndoRedo.Action);\n\nUndoRedo.ChangeAction.prototype.undo = function (instance, undoneCallback) {\n  var data = deepClone(this.changes);\n  var emptyRowsAtTheEnd = instance.countEmptyRows(true);\n  var emptyColsAtTheEnd = instance.countEmptyCols(true);\n\n  for (var i = 0, len = data.length; i < len; i++) {\n    data[i].splice(3, 1);\n  }\n\n  instance.addHookOnce('afterChange', undoneCallback);\n  instance.setDataAtCell(data, null, null, 'UndoRedo.undo');\n\n  for (var _i2 = 0, _len = data.length; _i2 < _len; _i2++) {\n    var _data$_i = _slicedToArray(data[_i2], 2),\n        row = _data$_i[0],\n        column = _data$_i[1];\n\n    if (instance.getSettings().minSpareRows && row + 1 + instance.getSettings().minSpareRows === instance.countRows() && emptyRowsAtTheEnd === instance.getSettings().minSpareRows) {\n      instance.alter('remove_row', parseInt(row + 1, 10), instance.getSettings().minSpareRows);\n      instance.undoRedo.doneActions.pop();\n    }\n\n    if (instance.getSettings().minSpareCols && column + 1 + instance.getSettings().minSpareCols === instance.countCols() && emptyColsAtTheEnd === instance.getSettings().minSpareCols) {\n      instance.alter('remove_col', parseInt(column + 1, 10), instance.getSettings().minSpareCols);\n      instance.undoRedo.doneActions.pop();\n    }\n  }\n\n  instance.selectCells(this.selected, false, false);\n};\n\nUndoRedo.ChangeAction.prototype.redo = function (instance, onFinishCallback) {\n  var data = deepClone(this.changes);\n\n  for (var i = 0, len = data.length; i < len; i++) {\n    data[i].splice(2, 1);\n  }\n\n  instance.addHookOnce('afterChange', onFinishCallback);\n  instance.setDataAtCell(data, null, null, 'UndoRedo.redo');\n\n  if (this.selected) {\n    instance.selectCells(this.selected, false, false);\n  }\n};\n/**\n * Create row action.\n *\n * @private\n * @param {number} index The visual row index.\n * @param {number} amount The number of created rows.\n */\n\n\nUndoRedo.CreateRowAction = function (index, amount) {\n  this.index = index;\n  this.amount = amount;\n  this.actionType = 'insert_row';\n};\n\ninherit(UndoRedo.CreateRowAction, UndoRedo.Action);\n\nUndoRedo.CreateRowAction.prototype.undo = function (instance, undoneCallback) {\n  var rowCount = instance.countRows();\n  var minSpareRows = instance.getSettings().minSpareRows;\n\n  if (this.index >= rowCount && this.index - minSpareRows < rowCount) {\n    this.index -= minSpareRows; // work around the situation where the needed row was removed due to an 'undo' of a made change\n  }\n\n  instance.addHookOnce('afterRemoveRow', undoneCallback);\n  instance.alter('remove_row', this.index, this.amount, 'UndoRedo.undo');\n};\n\nUndoRedo.CreateRowAction.prototype.redo = function (instance, redoneCallback) {\n  instance.addHookOnce('afterCreateRow', redoneCallback);\n  instance.alter('insert_row', this.index, this.amount, 'UndoRedo.redo');\n};\n/**\n * Remove row action.\n *\n * @private\n * @param {number} index The visual row index.\n * @param {Array} data The removed data.\n * @param {number} fixedRowsBottom Number of fixed rows on the bottom. Remove row action change it sometimes.\n * @param {number} fixedRowsTop Number of fixed rows on the top. Remove row action change it sometimes.\n */\n\n\nUndoRedo.RemoveRowAction = function (index, data, fixedRowsBottom, fixedRowsTop) {\n  this.index = index;\n  this.data = data;\n  this.actionType = 'remove_row';\n  this.fixedRowsBottom = fixedRowsBottom;\n  this.fixedRowsTop = fixedRowsTop;\n};\n\ninherit(UndoRedo.RemoveRowAction, UndoRedo.Action);\n\nUndoRedo.RemoveRowAction.prototype.undo = function (instance, undoneCallback) {\n  var settings = instance.getSettings(); // Changing by the reference as `updateSettings` doesn't work the best.\n\n  settings.fixedRowsBottom = this.fixedRowsBottom;\n  settings.fixedRowsTop = this.fixedRowsTop;\n  instance.alter('insert_row', this.index, this.data.length, 'UndoRedo.undo');\n  instance.addHookOnce('afterViewRender', undoneCallback);\n  instance.populateFromArray(this.index, 0, this.data, void 0, void 0, 'UndoRedo.undo');\n};\n\nUndoRedo.RemoveRowAction.prototype.redo = function (instance, redoneCallback) {\n  instance.addHookOnce('afterRemoveRow', redoneCallback);\n  instance.alter('remove_row', this.index, this.data.length, 'UndoRedo.redo');\n};\n/**\n * Create column action.\n *\n * @private\n * @param {number} index The visual column index.\n * @param {number} amount The number of created columns.\n */\n\n\nUndoRedo.CreateColumnAction = function (index, amount) {\n  this.index = index;\n  this.amount = amount;\n  this.actionType = 'insert_col';\n};\n\ninherit(UndoRedo.CreateColumnAction, UndoRedo.Action);\n\nUndoRedo.CreateColumnAction.prototype.undo = function (instance, undoneCallback) {\n  instance.addHookOnce('afterRemoveCol', undoneCallback);\n  instance.alter('remove_col', this.index, this.amount, 'UndoRedo.undo');\n};\n\nUndoRedo.CreateColumnAction.prototype.redo = function (instance, redoneCallback) {\n  instance.addHookOnce('afterCreateCol', redoneCallback);\n  instance.alter('insert_col', this.index, this.amount, 'UndoRedo.redo');\n};\n/**\n * Remove column action.\n *\n * @private\n * @param {number} index The visual column index.\n * @param {number[]} indexes The visual column indexes.\n * @param {Array} data The removed data.\n * @param {Array} headers The header values.\n * @param {number[]} columnPositions The column position.\n * @param {number[]} rowPositions The row position.\n * @param {number} fixedColumnsLeft Number of fixed columns on the left. Remove column action change it sometimes.\n */\n\n\nUndoRedo.RemoveColumnAction = function (index, indexes, data, headers, columnPositions, rowPositions, fixedColumnsLeft) {\n  this.index = index;\n  this.indexes = indexes;\n  this.data = data;\n  this.amount = this.data[0].length;\n  this.headers = headers;\n  this.columnPositions = columnPositions.slice(0);\n  this.rowPositions = rowPositions.slice(0);\n  this.actionType = 'remove_col';\n  this.fixedColumnsLeft = fixedColumnsLeft;\n};\n\ninherit(UndoRedo.RemoveColumnAction, UndoRedo.Action);\n\nUndoRedo.RemoveColumnAction.prototype.undo = function (instance, undoneCallback) {\n  var _this2 = this;\n\n  var settings = instance.getSettings(); // Changing by the reference as `updateSettings` doesn't work the best.\n\n  settings.fixedColumnsLeft = this.fixedColumnsLeft;\n  var ascendingIndexes = this.indexes.slice(0).sort();\n\n  var sortByIndexes = function sortByIndexes(elem, j, arr) {\n    return arr[_this2.indexes.indexOf(ascendingIndexes[j])];\n  };\n\n  var removedDataLength = this.data.length;\n  var sortedData = [];\n\n  for (var rowIndex = 0; rowIndex < removedDataLength; rowIndex++) {\n    sortedData.push(arrayMap(this.data[rowIndex], sortByIndexes));\n  }\n\n  var sortedHeaders = arrayMap(this.headers, sortByIndexes);\n  var changes = [];\n  instance.alter('insert_col', this.indexes[0], this.indexes.length, 'UndoRedo.undo');\n  arrayEach(instance.getSourceDataArray(), function (rowData, rowIndex) {\n    arrayEach(ascendingIndexes, function (changedIndex, contiquesIndex) {\n      rowData[changedIndex] = sortedData[rowIndex][contiquesIndex];\n      changes.push([rowIndex, changedIndex, rowData[changedIndex]]);\n    });\n  });\n  instance.setSourceDataAtCell(changes, void 0, void 0, 'UndoRedo.undo');\n  instance.columnIndexMapper.insertIndexes(ascendingIndexes[0], ascendingIndexes.length);\n\n  if (typeof this.headers !== 'undefined') {\n    arrayEach(sortedHeaders, function (headerData, columnIndex) {\n      instance.getSettings().colHeaders[ascendingIndexes[columnIndex]] = headerData;\n    });\n  }\n\n  instance.batchExecution(function () {\n    // Restore row sequence in a case when all columns are removed. the original\n    // row sequence is lost in that case.\n    instance.rowIndexMapper.setIndexesSequence(_this2.rowPositions);\n    instance.columnIndexMapper.setIndexesSequence(_this2.columnPositions);\n  }, true);\n  instance.addHookOnce('afterViewRender', undoneCallback);\n  instance.render();\n};\n\nUndoRedo.RemoveColumnAction.prototype.redo = function (instance, redoneCallback) {\n  instance.addHookOnce('afterRemoveCol', redoneCallback);\n  instance.alter('remove_col', this.index, this.amount, 'UndoRedo.redo');\n};\n/**\n * Cell alignment action.\n *\n * @private\n * @param {Array} stateBefore The previous state.\n * @param {object} range The cell range.\n * @param {string} type The type of the alignment (\"top\", \"left\", \"bottom\" or \"right\").\n * @param {string} alignment The alignment CSS class.\n */\n\n\nUndoRedo.CellAlignmentAction = function (stateBefore, range, type, alignment) {\n  this.stateBefore = stateBefore;\n  this.range = range;\n  this.type = type;\n  this.alignment = alignment;\n};\n\nUndoRedo.CellAlignmentAction.prototype.undo = function (instance, undoneCallback) {\n  var _this3 = this;\n\n  arrayEach(this.range, function (range) {\n    range.forAll(function (row, col) {\n      // Alignment classes should only collected within cell ranges. We skip header coordinates.\n      if (row >= 0 && col >= 0) {\n        instance.setCellMeta(row, col, 'className', _this3.stateBefore[row][col] || ' htLeft');\n      }\n    });\n  });\n  instance.addHookOnce('afterViewRender', undoneCallback);\n  instance.render();\n};\n\nUndoRedo.CellAlignmentAction.prototype.redo = function (instance, undoneCallback) {\n  align(this.range, this.type, this.alignment, function (row, col) {\n    return instance.getCellMeta(row, col);\n  }, function (row, col, key, value) {\n    return instance.setCellMeta(row, col, key, value);\n  });\n  instance.addHookOnce('afterViewRender', undoneCallback);\n  instance.render();\n};\n/**\n * Filters action.\n *\n * @private\n * @param {Array} conditionsStack An array of the filter condition.\n */\n\n\nUndoRedo.FiltersAction = function (conditionsStack) {\n  this.conditionsStack = conditionsStack;\n  this.actionType = 'filter';\n};\n\ninherit(UndoRedo.FiltersAction, UndoRedo.Action);\n\nUndoRedo.FiltersAction.prototype.undo = function (instance, undoneCallback) {\n  var filters = instance.getPlugin('filters');\n  instance.addHookOnce('afterViewRender', undoneCallback);\n  filters.conditionCollection.importAllConditions(this.conditionsStack.slice(0, this.conditionsStack.length - 1));\n  filters.filter();\n};\n\nUndoRedo.FiltersAction.prototype.redo = function (instance, redoneCallback) {\n  var filters = instance.getPlugin('filters');\n  instance.addHookOnce('afterViewRender', redoneCallback);\n  filters.conditionCollection.importAllConditions(this.conditionsStack);\n  filters.filter();\n};\n/**\n * Merge Cells action.\n *\n * @util\n */\n\n\nvar MergeCellsAction = /*#__PURE__*/function (_UndoRedo$Action) {\n  _inherits(MergeCellsAction, _UndoRedo$Action);\n\n  var _super = _createSuper(MergeCellsAction);\n\n  function MergeCellsAction(instance, cellRange) {\n    var _this4;\n\n    _classCallCheck(this, MergeCellsAction);\n\n    _this4 = _super.call(this);\n    _this4.cellRange = cellRange;\n\n    var topLeftCorner = _this4.cellRange.getTopLeftCorner();\n\n    var bottomRightCorner = _this4.cellRange.getBottomRightCorner();\n\n    _this4.rangeData = instance.getData(topLeftCorner.row, topLeftCorner.col, bottomRightCorner.row, bottomRightCorner.col);\n    return _this4;\n  }\n\n  _createClass(MergeCellsAction, [{\n    key: \"undo\",\n    value: function undo(instance, undoneCallback) {\n      var mergeCellsPlugin = instance.getPlugin('mergeCells');\n      instance.addHookOnce('afterViewRender', undoneCallback);\n      mergeCellsPlugin.unmergeRange(this.cellRange, true);\n      var topLeftCorner = this.cellRange.getTopLeftCorner();\n      instance.populateFromArray(topLeftCorner.row, topLeftCorner.col, this.rangeData, void 0, void 0, 'MergeCells');\n    }\n  }, {\n    key: \"redo\",\n    value: function redo(instance, redoneCallback) {\n      var mergeCellsPlugin = instance.getPlugin('mergeCells');\n      instance.addHookOnce('afterViewRender', redoneCallback);\n      mergeCellsPlugin.mergeRange(this.cellRange);\n    }\n  }]);\n\n  return MergeCellsAction;\n}(UndoRedo.Action);\n\nUndoRedo.MergeCellsAction = MergeCellsAction;\n/**\n * Unmerge Cells action.\n *\n * @util\n */\n\nvar UnmergeCellsAction = /*#__PURE__*/function (_UndoRedo$Action2) {\n  _inherits(UnmergeCellsAction, _UndoRedo$Action2);\n\n  var _super2 = _createSuper(UnmergeCellsAction);\n\n  function UnmergeCellsAction(instance, cellRange) {\n    var _this5;\n\n    _classCallCheck(this, UnmergeCellsAction);\n\n    _this5 = _super2.call(this);\n    _this5.cellRange = cellRange;\n    return _this5;\n  }\n\n  _createClass(UnmergeCellsAction, [{\n    key: \"undo\",\n    value: function undo(instance, undoneCallback) {\n      var mergeCellsPlugin = instance.getPlugin('mergeCells');\n      instance.addHookOnce('afterViewRender', undoneCallback);\n      mergeCellsPlugin.mergeRange(this.cellRange, true);\n    }\n  }, {\n    key: \"redo\",\n    value: function redo(instance, redoneCallback) {\n      var mergeCellsPlugin = instance.getPlugin('mergeCells');\n      instance.addHookOnce('afterViewRender', redoneCallback);\n      mergeCellsPlugin.unmergeRange(this.cellRange, true);\n      instance.render();\n    }\n  }]);\n\n  return UnmergeCellsAction;\n}(UndoRedo.Action);\n\nUndoRedo.UnmergeCellsAction = UnmergeCellsAction;\n/**\n * ManualRowMove action.\n *\n * @TODO removeRow undo should works on logical index\n * @private\n * @param {number[]} rows An array with moved rows.\n * @param {number} finalIndex The destination index.\n */\n\nUndoRedo.RowMoveAction = function (rows, finalIndex) {\n  this.rows = rows.slice();\n  this.finalIndex = finalIndex;\n  this.actionType = 'row_move';\n};\n\ninherit(UndoRedo.RowMoveAction, UndoRedo.Action);\n\nUndoRedo.RowMoveAction.prototype.undo = function (instance, undoneCallback) {\n  var _this6 = this;\n\n  var manualRowMove = instance.getPlugin('manualRowMove');\n  var copyOfRows = [].concat(this.rows);\n  var rowsMovedUp = copyOfRows.filter(function (a) {\n    return a > _this6.finalIndex;\n  });\n  var rowsMovedDown = copyOfRows.filter(function (a) {\n    return a <= _this6.finalIndex;\n  });\n  var allMovedRows = rowsMovedUp.sort(function (a, b) {\n    return b - a;\n  }).concat(rowsMovedDown.sort(function (a, b) {\n    return a - b;\n  }));\n  instance.addHookOnce('afterViewRender', undoneCallback); // Moving rows from those with higher indexes to those with lower indexes when action was performed from bottom to top\n  // Moving rows from those with lower indexes to those with higher indexes when action was performed from top to bottom\n\n  for (var i = 0; i < allMovedRows.length; i += 1) {\n    var newPhysicalRow = instance.toVisualRow(allMovedRows[i]);\n    manualRowMove.moveRow(newPhysicalRow, allMovedRows[i]);\n  }\n\n  instance.render();\n  instance.deselectCell();\n  instance.selectRows(this.rows[0], this.rows[0] + this.rows.length - 1);\n};\n\nUndoRedo.RowMoveAction.prototype.redo = function (instance, redoneCallback) {\n  var manualRowMove = instance.getPlugin('manualRowMove');\n  instance.addHookOnce('afterViewRender', redoneCallback);\n  manualRowMove.moveRows(this.rows.slice(), this.finalIndex);\n  instance.render();\n  instance.deselectCell();\n  instance.selectRows(this.finalIndex, this.finalIndex + this.rows.length - 1);\n};\n/**\n * Enabling and disabling plugin and attaching its to an instance.\n *\n * @private\n */\n\n\nUndoRedo.prototype.init = function () {\n  var settings = this.instance.getSettings().undo;\n  var pluginEnabled = typeof settings === 'undefined' || settings;\n\n  if (!this.instance.undoRedo) {\n    this.instance.undoRedo = this;\n  }\n\n  if (pluginEnabled) {\n    this.instance.undoRedo.enable();\n  } else {\n    this.instance.undoRedo.disable();\n  }\n};\n/**\n * @param {Event} event The keyboard event object.\n */\n\n\nfunction onBeforeKeyDown(event) {\n  if (isImmediatePropagationStopped(event)) {\n    return;\n  }\n\n  var instance = this;\n  var editor = instance.getActiveEditor();\n\n  if (editor && editor.isOpened()) {\n    return;\n  }\n\n  var altKey = event.altKey,\n      ctrlKey = event.ctrlKey,\n      keyCode = event.keyCode,\n      metaKey = event.metaKey,\n      shiftKey = event.shiftKey;\n  var isCtrlDown = (ctrlKey || metaKey) && !altKey;\n\n  if (!isCtrlDown) {\n    return;\n  }\n\n  var isRedoHotkey = keyCode === 89 || shiftKey && keyCode === 90;\n\n  if (isRedoHotkey) {\n    // CTRL + Y or CTRL + SHIFT + Z\n    instance.undoRedo.redo();\n    stopImmediatePropagation(event);\n  } else if (keyCode === 90) {\n    // CTRL + Z\n    instance.undoRedo.undo();\n    stopImmediatePropagation(event);\n  }\n}\n/**\n * @param {Array} changes 2D array containing information about each of the edited cells.\n * @param {string} source String that identifies source of hook call.\n * @returns {boolean}\n */\n\n\nfunction onAfterChange(changes, source) {\n  var instance = this;\n\n  if (source === 'loadData') {\n    return instance.undoRedo.clear();\n  }\n}\n/**\n * @param {Core} instance The Handsontable instance.\n */\n\n\nfunction exposeUndoRedoMethods(instance) {\n  /**\n   * {@link UndoRedo#undo}.\n   *\n   * @alias undo\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n  instance.undo = function () {\n    return instance.undoRedo.undo();\n  };\n  /**\n   * {@link UndoRedo#redo}.\n   *\n   * @alias redo\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n\n\n  instance.redo = function () {\n    return instance.undoRedo.redo();\n  };\n  /**\n   * {@link UndoRedo#isUndoAvailable}.\n   *\n   * @alias isUndoAvailable\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n\n\n  instance.isUndoAvailable = function () {\n    return instance.undoRedo.isUndoAvailable();\n  };\n  /**\n   * {@link UndoRedo#isRedoAvailable}.\n   *\n   * @alias isRedoAvailable\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n\n\n  instance.isRedoAvailable = function () {\n    return instance.undoRedo.isRedoAvailable();\n  };\n  /**\n   * {@link UndoRedo#clear}.\n   *\n   * @alias clearUndo\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n\n\n  instance.clearUndo = function () {\n    return instance.undoRedo.clear();\n  };\n}\n/**\n * @param {Core} instance The Handsontable instance.\n */\n\n\nfunction removeExposedUndoRedoMethods(instance) {\n  delete instance.undo;\n  delete instance.redo;\n  delete instance.isUndoAvailable;\n  delete instance.isRedoAvailable;\n  delete instance.clearUndo;\n}\n\nvar hook = Hooks.getSingleton();\nhook.add('afterUpdateSettings', function () {\n  var _this$getPlugin;\n\n  (_this$getPlugin = this.getPlugin('undoRedo')) === null || _this$getPlugin === void 0 ? void 0 : _this$getPlugin.init();\n});\nhook.register('beforeUndo');\nhook.register('afterUndo');\nhook.register('beforeRedo');\nhook.register('afterRedo');\nUndoRedo.PLUGIN_KEY = PLUGIN_KEY;\nexport default UndoRedo;", "import { AutoColumnSize } from \"./autoColumnSize/index.mjs\";\nimport { Autofill } from \"./autofill/index.mjs\";\nimport { AutoRowSize } from \"./autoRowSize/index.mjs\";\nimport { BasePlugin } from \"./base/index.mjs\";\nimport { BindRowsWithHeaders } from \"./bindRowsWithHeaders/index.mjs\";\nimport { CollapsibleColumns } from \"./collapsibleColumns/index.mjs\";\nimport { ColumnSorting } from \"./columnSorting/index.mjs\";\nimport { ColumnSummary } from \"./columnSummary/index.mjs\";\nimport { Comments } from \"./comments/index.mjs\";\nimport { ContextMenu } from \"./contextMenu/index.mjs\";\nimport { CopyPaste } from \"./copyPaste/index.mjs\";\nimport { CustomBorders } from \"./customBorders/index.mjs\";\nimport { DragToScroll } from \"./dragToScroll/index.mjs\";\nimport { DropdownMenu } from \"./dropdownMenu/index.mjs\";\nimport { ExportFile } from \"./exportFile/index.mjs\";\nimport { Filters } from \"./filters/index.mjs\";\nimport { Formulas } from \"./formulas/index.mjs\";\nimport { HiddenColumns } from \"./hiddenColumns/index.mjs\";\nimport { HiddenRows } from \"./hiddenRows/index.mjs\";\nimport { ManualColumnFreeze } from \"./manualColumnFreeze/index.mjs\";\nimport { ManualColumnMove } from \"./manualColumnMove/index.mjs\";\nimport { ManualColumnResize } from \"./manualColumnResize/index.mjs\";\nimport { ManualRowMove } from \"./manualRowMove/index.mjs\";\nimport { ManualRowResize } from \"./manualRowResize/index.mjs\";\nimport { MergeCells } from \"./mergeCells/index.mjs\";\nimport { MultiColumnSorting } from \"./multiColumnSorting/index.mjs\";\nimport { MultipleSelectionHandles } from \"./multipleSelectionHandles/index.mjs\";\nimport { NestedHeaders } from \"./nestedHeaders/index.mjs\";\nimport { NestedRows } from \"./nestedRows/index.mjs\";\nimport { PersistentState } from \"./persistentState/index.mjs\";\nimport { Search } from \"./search/index.mjs\";\nimport { TouchScroll } from \"./touchScroll/index.mjs\";\nimport { TrimRows } from \"./trimRows/index.mjs\";\nimport { UndoRedo } from \"./undoRedo/index.mjs\";\nimport { registerPlugin } from \"./registry.mjs\";\n/**\n * Registers all available plugins.\n */\n\nexport function registerAllPlugins() {\n  registerPlugin(AutoColumnSize);\n  registerPlugin(Autofill);\n  registerPlugin(AutoRowSize);\n  registerPlugin(BindRowsWithHeaders);\n  registerPlugin(CollapsibleColumns);\n  registerPlugin(ColumnSorting);\n  registerPlugin(ColumnSummary);\n  registerPlugin(Comments);\n  registerPlugin(ContextMenu);\n  registerPlugin(CopyPaste);\n  registerPlugin(CustomBorders);\n  registerPlugin(DragToScroll);\n  registerPlugin(DropdownMenu);\n  registerPlugin(ExportFile);\n  registerPlugin(Filters);\n  registerPlugin(Formulas);\n  registerPlugin(HiddenColumns);\n  registerPlugin(HiddenRows);\n  registerPlugin(ManualColumnFreeze);\n  registerPlugin(ManualColumnMove);\n  registerPlugin(ManualColumnResize);\n  registerPlugin(ManualRowMove);\n  registerPlugin(ManualRowResize);\n  registerPlugin(MergeCells);\n  registerPlugin(MultiColumnSorting);\n  registerPlugin(MultipleSelectionHandles);\n  registerPlugin(NestedHeaders);\n  registerPlugin(NestedRows);\n  registerPlugin(PersistentState);\n  registerPlugin(Search);\n  registerPlugin(TouchScroll);\n  registerPlugin(TrimRows);\n  registerPlugin(UndoRedo);\n}\nexport { AutoColumnSize, Autofill, AutoRowSize, BasePlugin, BindRowsWithHeaders, CollapsibleColumns, ColumnSorting, ColumnSummary, Comments, ContextMenu, CopyPaste, CustomBorders, DragToScroll, DropdownMenu, ExportFile, Filters, Formulas, HiddenColumns, HiddenRows, ManualColumnFreeze, ManualColumnMove, ManualColumnResize, ManualRowMove, ManualRowResize, MergeCells, MultiColumnSorting, MultipleSelectionHandles, NestedHeaders, NestedRows, PersistentState, Search, TouchScroll, TrimRows, UndoRedo };\nexport { getPlugin, getPluginsNames, registerPlugin } from \"./registry.mjs\";", "/* eslint-disable handsontable/restricted-module-imports */\n// Since the Handsontable was modularized, importing some submodules is\n// restricted. Importing the main entry of the submodule can make the\n// \"dead\" code elimination process more difficult or even impossible.\n// The \"handsontable/restricted-module-imports\" rule is on guard.\n// This file exports the functions that allow include packages to\n// the Base version of the Handsontable, so that's why the rule is\n// disabled here (see more #7506).\nimport { registerAllEditors } from \"./editors/index.mjs\";\nimport { registerAllRenderers } from \"./renderers/index.mjs\";\nimport { registerAllValidators } from \"./validators/index.mjs\";\nimport { registerAllCellTypes } from \"./cellTypes/index.mjs\";\nimport { registerAllPlugins } from \"./plugins/index.mjs\";\n/* eslint-enable handsontable/restricted-module-imports */\n\nexport { registerAllEditors, registerAllRenderers, registerAllValidators, registerAllCellTypes, registerAllPlugins };\n/**\n * Registers all available Handsontable modules.\n */\n\nexport function registerAllModules() {\n  registerAllEditors();\n  registerAllRenderers();\n  registerAllValidators();\n  registerAllCellTypes();\n  registerAllPlugins();\n}", "import \"core-js/modules/es.array.concat.js\";\n\n/**\n * @param {Core} Handsontable The Handsontable instance.\n */\nexport default function jQueryWrapper(Handsontable) {\n  // eslint-disable-next-line\n  var jQuery = typeof window === 'undefined' ? false : window.jQuery;\n\n  if (!jQuery) {\n    return;\n  }\n\n  jQuery.fn.handsontable = function (action) {\n    var $this = this.first(); // Use only first element from list\n\n    var instance = $this.data('handsontable'); // Init case\n\n    if (typeof action !== 'string') {\n      var userSettings = action || {};\n\n      if (instance) {\n        instance.updateSettings(userSettings);\n      } else {\n        instance = new Handsontable.Core($this[0], userSettings);\n        $this.data('handsontable', instance);\n        instance.init();\n      }\n\n      return $this;\n    }\n\n    var output; // Action case\n\n    if (instance) {\n      if (typeof instance[action] !== 'undefined') {\n        var _instance$action;\n\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        output = (_instance$action = instance[action]).call.apply(_instance$action, [instance].concat(args));\n\n        if (action === 'destroy') {\n          $this.removeData();\n        }\n      } else {\n        throw new Error(\"Handsontable do not provide action: \".concat(action));\n      }\n    }\n\n    return output;\n  };\n}", "var _Handsontable$cellTyp, _Handsontable$editors, _Handsontable$rendere, _Handsontable$validat, _Handsontable$plugins;\n\nimport \"core-js/modules/es.object.get-own-property-names.js\";\nimport Handsontable from \"./base.mjs\";\nimport { registerAllModules } from \"./registry.mjs\";\nimport EventManager, { getListenersCounter } from \"./eventManager.mjs\";\nimport { getRegisteredMapsCounter } from \"./translations/index.mjs\";\nimport jQueryWrapper from \"./helpers/wrappers/jquery.mjs\";\nimport GhostTable from \"./utils/ghostTable.mjs\";\nimport * as parseTableHelpers from \"./utils/parseTable.mjs\";\nimport * as arrayHelpers from \"./helpers/array.mjs\";\nimport * as browserHelpers from \"./helpers/browser.mjs\";\nimport * as dataHelpers from \"./helpers/data.mjs\";\nimport * as dateHelpers from \"./helpers/date.mjs\";\nimport * as featureHelpers from \"./helpers/feature.mjs\";\nimport * as functionHelpers from \"./helpers/function.mjs\";\nimport * as mixedHelpers from \"./helpers/mixed.mjs\";\nimport * as numberHelpers from \"./helpers/number.mjs\";\nimport * as objectHelpers from \"./helpers/object.mjs\";\nimport * as stringHelpers from \"./helpers/string.mjs\";\nimport * as unicodeHelpers from \"./helpers/unicode.mjs\";\nimport * as domHelpers from \"./helpers/dom/element.mjs\";\nimport * as domEventHelpers from \"./helpers/dom/event.mjs\";\nimport { getRegisteredEditorNames, getEditor, registerEditor } from \"./editors/registry.mjs\";\nimport { getRegisteredRendererNames, getRenderer, registerRenderer } from \"./renderers/registry.mjs\";\nimport { getRegisteredValidatorNames, getValidator, registerValidator } from \"./validators/registry.mjs\";\nimport { getRegisteredCellTypeNames, getCellType, registerCellType } from \"./cellTypes/registry.mjs\";\nimport { getPluginsNames, getPlugin, registerPlugin } from \"./plugins/registry.mjs\";\nimport { BasePlugin } from \"./plugins/base/index.mjs\";\nregisterAllModules();\njQueryWrapper(Handsontable); // TODO: Remove this exports after rewrite tests about this module\n\nHandsontable.__GhostTable = GhostTable;\nHandsontable._getListenersCounter = getListenersCounter; // For MemoryLeak tests\n\nHandsontable._getRegisteredMapsCounter = getRegisteredMapsCounter; // For MemoryLeak tests\n\nHandsontable.EventManager = EventManager; // Export all helpers to the Handsontable object\n\nvar HELPERS = [arrayHelpers, browserHelpers, dataHelpers, dateHelpers, featureHelpers, functionHelpers, mixedHelpers, numberHelpers, objectHelpers, stringHelpers, unicodeHelpers, parseTableHelpers];\nvar DOM = [domHelpers, domEventHelpers];\nHandsontable.helper = {};\nHandsontable.dom = {}; // Fill general helpers.\n\narrayHelpers.arrayEach(HELPERS, function (helper) {\n  arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), function (key) {\n    if (key.charAt(0) !== '_') {\n      Handsontable.helper[key] = helper[key];\n    }\n  });\n}); // Fill DOM helpers.\n\narrayHelpers.arrayEach(DOM, function (helper) {\n  arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), function (key) {\n    if (key.charAt(0) !== '_') {\n      Handsontable.dom[key] = helper[key];\n    }\n  });\n}); // Export cell types.\n\nHandsontable.cellTypes = (_Handsontable$cellTyp = Handsontable.cellTypes) !== null && _Handsontable$cellTyp !== void 0 ? _Handsontable$cellTyp : {};\narrayHelpers.arrayEach(getRegisteredCellTypeNames(), function (cellTypeName) {\n  Handsontable.cellTypes[cellTypeName] = getCellType(cellTypeName);\n});\nHandsontable.cellTypes.registerCellType = registerCellType;\nHandsontable.cellTypes.getCellType = getCellType; // Export all registered editors from the Handsontable.\n\nHandsontable.editors = (_Handsontable$editors = Handsontable.editors) !== null && _Handsontable$editors !== void 0 ? _Handsontable$editors : {};\narrayHelpers.arrayEach(getRegisteredEditorNames(), function (editorName) {\n  Handsontable.editors[\"\".concat(stringHelpers.toUpperCaseFirst(editorName), \"Editor\")] = getEditor(editorName);\n});\nHandsontable.editors.registerEditor = registerEditor;\nHandsontable.editors.getEditor = getEditor; // Export all registered renderers from the Handsontable.\n\nHandsontable.renderers = (_Handsontable$rendere = Handsontable.renderers) !== null && _Handsontable$rendere !== void 0 ? _Handsontable$rendere : {};\narrayHelpers.arrayEach(getRegisteredRendererNames(), function (rendererName) {\n  var renderer = getRenderer(rendererName);\n\n  if (rendererName === 'base') {\n    Handsontable.renderers.cellDecorator = renderer;\n  }\n\n  Handsontable.renderers[\"\".concat(stringHelpers.toUpperCaseFirst(rendererName), \"Renderer\")] = renderer;\n});\nHandsontable.renderers.registerRenderer = registerRenderer;\nHandsontable.renderers.getRenderer = getRenderer; // Export all registered validators from the Handsontable.\n\nHandsontable.validators = (_Handsontable$validat = Handsontable.validators) !== null && _Handsontable$validat !== void 0 ? _Handsontable$validat : {};\narrayHelpers.arrayEach(getRegisteredValidatorNames(), function (validatorName) {\n  Handsontable.validators[\"\".concat(stringHelpers.toUpperCaseFirst(validatorName), \"Validator\")] = getValidator(validatorName);\n});\nHandsontable.validators.registerValidator = registerValidator;\nHandsontable.validators.getValidator = getValidator; // Export all registered plugins from the Handsontable.\n// Make sure to initialize the plugin dictionary as an empty object. Otherwise, while\n// transpiling the files into ES and CommonJS format, the injected CoreJS helper\n// `import \"core-js/modules/es.object.get-own-property-names\";` won't be processed\n// by the `./config/plugin/babel/add-import-extension` babel plugin. Thus, the distribution\n// files will be broken. The reason is not known right now (probably it's caused by bug in\n// the Babel or missing something in the plugin).\n\nHandsontable.plugins = (_Handsontable$plugins = Handsontable.plugins) !== null && _Handsontable$plugins !== void 0 ? _Handsontable$plugins : {};\narrayHelpers.arrayEach(getPluginsNames(), function (pluginName) {\n  Handsontable.plugins[pluginName] = getPlugin(pluginName);\n});\nHandsontable.plugins[\"\".concat(stringHelpers.toUpperCaseFirst(BasePlugin.PLUGIN_KEY), \"Plugin\")] = BasePlugin;\nHandsontable.plugins.registerPlugin = registerPlugin;\nHandsontable.plugins.getPlugin = getPlugin;\nexport default Handsontable;", "import { Controller } from \"@hotwired/stimulus\";\nimport Handsontable from \"handsontable\";\nwindow.Handsontable = Handsontable; // TODO: window\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306B\u30BB\u30C3\u30C8\u306F\u3084\u3081\u308B\n\nexport default class extends Controller {\n  static values = {\n    hotData: Array,\n    currentWeek: String,\n  };\n\n  connect() {\n    this._buildDataTable();\n  }\n\n  _buildDataTable() {\n    const hot_container = document.getElementById(\"handsone-table-product-shippables\");\n    if (hot_container) {\n      hot_container.innerHTML = \"\";\n\n      window.hot = new Handsontable(hot_container, hotSettings());\n\n      window.hot.addHook(\"afterChange\", (change, source) => {\n        let is_edit = false;\n        if(change != null) {\n          change.forEach(function([row, prop, oldValue, newValue]) {\n            if((!!oldValue || !!newValue) && oldValue != newValue) {\n              is_edit = true;\n            }\n          })\n        }\n        if(!is_edit) return;\n\n        let updateParams = [];\n        change.forEach(function (data) {\n          const productId = window.hot.getCellMeta(data[0], 0).product_id;\n          updateParams.push({\n            column: data[1],\n            value: data[3],\n            product_id: productId,\n          });\n        });\n\n        this.updateShippable(updateParams);\n      });\n\n      $.each(this.hotDataValue, function (k, v) {\n        window.hot.setCellMeta(k, 0, \"product_id\", v.product_id);\n      });\n    }\n  }\n\n  updateShippable(params) {\n    $.ajax({\n      method: \"POST\",\n      url: `/bulk_product_shippables`,\n      data: {\n        data: params,\n      },\n      dataType: \"json\",\n      beforeSend: function (xhr) {\n        xhr.setRequestHeader(\n          \"X-CSRF-Token\",\n          $('meta[name=\"csrf-token\"]').attr(\"content\")\n        );\n      },\n      success: function (_) {\n        $(\".js-update-msg\").text(\"\u5909\u66F4\u3092\u4FDD\u5B58\u3057\u307E\u3057\u305F\u3002\");\n        setTimeout( function() {$(\".js-update-msg\").text(\"\u3000\") }, 3000);\n        $(\".js-time-span\").text(\"\u6700\u7D42\u66F4\u65B0\uFF1A1\u5206\u4EE5\u5185\");\n      },\n      error: function (response) {\n        showAlert(`${response.responseJSON.error}`);\n      },\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  static values = {\n    productId: Number,\n  };\n\n  connect() {\n    $('input[name=\"product_shippable[quantity_type]\"]').on(\n      \"change\",\n      function () {\n        if ($(this).val() === \"weekly\") {\n          $(\".js-delivery-day\").addClass(\"d-none\");\n          $(\".js-delivery-week\").removeClass(\"d-none\");\n        } else {\n          $(\".js-delivery-week\").addClass(\"d-none\");\n          $(\".js-delivery-day\").removeClass(\"d-none\");\n        }\n      }\n    );\n  }\n\n  increaseValue(e) {\n    const value = Number($(e.currentTarget.previousElementSibling).val());\n\n    let nextValue = value + $(e.currentTarget).data(\"value\");\n    if (nextValue > 9999) { // ProductShippable::SHIPPABLE_QUANTITY_MAX\n      nextValue = 9999;\n    }\n    $(e.currentTarget.previousElementSibling).val(nextValue);\n  }\n\n  decreaseValue(e) {\n    const value = Number($(e.currentTarget.nextElementSibling).val());\n    let nextValue = value - $(e.currentTarget).data(\"value\");\n    if (nextValue < 0) { // ProductShippable::SHIPPABLE_QUANTITY_MIN\n      nextValue = 0;\n    }\n    $(e.currentTarget.nextElementSibling).val(nextValue);\n  }\n\n  copyAboveValue(e) {\n    const previousValue = Number(\n      $(e.currentTarget.closest(\".js-parent\").previousElementSibling).find(\"input.js-input-value\").val()\n    );\n    $(e.currentTarget.closest(\".js-parent\")).find(\"input.js-input-value\").val(previousValue);\n  }\n\n  copyFromPrevWeek(e) {\n    e.preventDefault();\n    $.ajax({\n      method: \"GET\",\n      url: `/product_shippables/${this.productIdValue}/copy_shippable?week=${$(\n        e.currentTarget\n      ).data(\"week\")}`,\n      dataType: \"script\",\n      beforeSend: function (xhr) {\n        xhr.setRequestHeader(\n          \"X-CSRF-Token\",\n          $('meta[name=\"csrf-token\"]').attr(\"content\")\n        );\n      },\n    });\n  }\n}\n", "export function isNullOrEmpty(str) {\n  return str === null || str === undefined || str === ''\n}\n\nexport function isChanged(before, after) {\n  if (isNullOrEmpty(before)) before = ''\n  if (isNullOrEmpty(after)) after = ''\n  return before !== after\n}\n\n/**\n * hotColumns\u3092\u5F15\u6570\u306B\u3001{ id: 0, name: 1, ... }\u306E\u3088\u3046\u306A\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u8FD4\u3059\u3002\n */\nexport function createIndexMap(hotColumns) {\n  return hotColumns.reduce((acc, cur, idx) => {\n    acc[cur.data] = idx;\n    return acc;\n  }, {})\n}\n\n/**\n * '2023-12-08'\u306E\u6587\u5B57\u5217\u306B\u5BFE\u3057\u3066\u3001'12/8'\u306E\u6587\u5B57\u5217\u3092\u8FD4\u3059\u3002\n * @param {string} dateString\n * @return {string}\n */\nexport function monthDay(dateString) {\n  const regex = /^\\d{4}-\\d{2}-\\d{2}$/\n  if (!regex.test(dateString)) { return null }\n\n  const splitedDateString = dateString.split(\"-\")\n  const year = splitedDateString[0]\n  const month = parseInt(splitedDateString[1])\n  const day = parseInt(splitedDateString[2])\n  return `${month}/${day}`\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nimport Handsontable from \"handsontable\";\nimport { isNullOrEmpty, isChanged, createIndexMap, monthDay } from \"../front/handson_table_helper\";\n\nexport default class extends Controller {\n  static values = {\n    plantingPeriod: String,\n    weeks: Array,\n    currentWeek: String,\n    hotDatas: Array,\n    hasConsultingAgreements: Boolean,\n  };\n  static targets = [\"updateMessage\", \"consultingCount\", \"approveButton\"];\n\n  hot = null; // Handsontable\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\n  hotDatas = this.hotDatasValue; // Handsontable\u306E\u30C7\u30FC\u30BF\n\n  connect() {\n    this.initializeHot();\n  }\n\n  initializeHot() {\n    const hotElement = document.querySelector(\"#handsone-table\");\n    const hotSettings = this.hotSettings();\n    this.hot = new Handsontable(hotElement, hotSettings);\n    this.loadHotData();\n  }\n\n  // Handsontable\u306E\u30C7\u30FC\u30BF\u3092\u8AAD\u307F\u8FBC\u3080\n  loadHotData() {\n    // \u30C7\u30FC\u30BF\u5909\u66F4\u6642\u306B\u30C6\u30FC\u30D6\u30EB\u69CB\u9020\u3082\u66F4\u65B0\n    this.updateApprovalUI();\n    this.updateTableStructure();\n    this.hot.loadData(this.hotDatas);\n  }\n\n  // \u30C6\u30FC\u30D6\u30EB\u69CB\u9020\u3092\u66F4\u65B0\uFF08\u4F5C\u4ED8\u3051\u671F\u9593\u5207\u308A\u66FF\u3048\u6642\u306A\u3069\uFF09\n  updateTableStructure() {\n    const newColumns = this.hotColumns();\n    const newSettings = this.hotSettings();\n\n    // \u5217\u69CB\u6210\u3068fixedColumnsLeft\u3092\u66F4\u65B0\n    this.hot.updateSettings({\n      columns: newColumns,\n      fixedColumnsLeft: newSettings.fixedColumnsLeft\n    });\n  }\n\n  // Handsontable\u63CF\u753B\u5F8C\u306E\u51E6\u7406\n  hotAfterRender() {\n    // \u53E4\u3044\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u8981\u7D20\u3092\u30AF\u30EA\u30FC\u30F3\u30A2\u30C3\u30D7\n    this.cleanupOldCheckboxes();\n  }\n\n  // \u53E4\u3044\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u8981\u7D20\u3092\u524A\u9664\n  cleanupOldCheckboxes() {\n    const allCheckboxes = document.querySelectorAll('#handsone-table .product-approval-checkbox');\n    const checkboxesByProductCode = new Map();\n\n    // \u5546\u54C1\u30B3\u30FC\u30C9\u3054\u3068\u306B\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u3092\u30B0\u30EB\u30FC\u30D7\u5316\n    allCheckboxes.forEach(checkbox => {\n      const productCode = checkbox.getAttribute('data-product-code');\n      if (!checkboxesByProductCode.has(productCode)) {\n        checkboxesByProductCode.set(productCode, []);\n      }\n      checkboxesByProductCode.get(productCode).push(checkbox);\n    });\n\n    // \u5404\u5546\u54C1\u30B3\u30FC\u30C9\u3067\u91CD\u8907\u304C\u3042\u308B\u5834\u5408\u3001\u53E4\u3044\u8981\u7D20\uFF08style\u306A\u3057\uFF09\u3092\u524A\u9664\n    checkboxesByProductCode.forEach((checkboxes, productCode) => {\n      if (checkboxes.length > 1) {\n        // style\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u306A\u3044\u8981\u7D20\u3092\u53E4\u3044\u8981\u7D20\u3068\u3057\u3066\u524A\u9664\n        checkboxes.forEach(checkbox => {\n          const parentTd = checkbox.closest('td');\n          if (parentTd && !parentTd.style.height) {\n            checkbox.remove();\n          }\n        });\n      }\n    });\n  }\n\n  handleAllCheckboxButton(e) {\n    if (e.target.classList.contains('active')) {\n      this.deselectAll();\n      e.target.classList.remove('active');\n    } else {\n      this.selectAll();\n      e.target.classList.add('active');\n    }\n    this.updateApprovalUI();\n  }\n\n  // \u5168\u9078\u629E\n  selectAll() {\n    const checkboxes = document.querySelectorAll('#handsone-table .product-approval-checkbox');\n    checkboxes.forEach(checkbox => {\n      checkbox.checked = true;\n    });\n    this.updateApproveButtonState();\n  }\n\n  // \u5168\u89E3\u9664\n  deselectAll() {\n    const checkboxes = document.querySelectorAll('#handsone-table .product-approval-checkbox');\n    checkboxes.forEach(checkbox => {\n      checkbox.checked = false;\n    });\n    this.updateApproveButtonState();\n  }\n\n  // \u8868\u793A\u5207\u308A\u66FF\u3048\u51E6\u7406\n  toggleDisplay(event) {\n    const checkbox = event.target;\n    const isChecked = checkbox.checked;\n\n    if (checkbox.id === 'toggle-agreement-quantity') {\n      // \u8868\u5185\u306E\u51FA\u8377\u7D04\u675F\u6570\u306E\u307F\u3092\u5BFE\u8C61\uFF08\u30E9\u30D9\u30EB\u306F\u9664\u5916\uFF09\n      const agreementElements = document.querySelectorAll('.handsontable .agreement-quantity');\n      agreementElements.forEach(element => {\n        element.style.display = isChecked ? 'inline' : 'none';\n      });\n    } else if (checkbox.id === 'toggle-previous-quantity') {\n      // \u8868\u5185\u306E\u524D\u5E74\u5B9F\u7E3E\u306E\u307F\u3092\u5BFE\u8C61\uFF08\u30E9\u30D9\u30EB\u306F\u9664\u5916\uFF09\n      const previousElements = document.querySelectorAll('.handsontable .previous-shippable-quantity');\n      previousElements.forEach(element => {\n        element.style.display = isChecked ? 'inline' : 'none';\n      });\n    }\n  }\n\n\n  // \u51FA\u8377\u7D04\u675F\u6570\u627F\u8A8D\u51E6\u7406\n  approveAll() {\n    // \u9078\u629E\u3055\u308C\u305F\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u3092\u53D6\u5F97\uFF08Handsontable\u306E\u30B3\u30F3\u30C6\u30CA\u5185\u306E\u307F\uFF09\n    const selectedCheckboxes = document.querySelectorAll('#handsone-table .product-approval-checkbox:checked');\n\n    if (selectedCheckboxes.length === 0) {\n      showAlert(\"\u627F\u8A8D\u3059\u308B\u5546\u54C1\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002\");\n      return;\n    }\n\n    // \u9078\u629E\u3055\u308C\u305F\u5546\u54C1\u30B3\u30FC\u30C9\u3092\u53D6\u5F97\u3057\u3001consulting\u30B9\u30C6\u30FC\u30BF\u30B9\u304B\u30C1\u30A7\u30C3\u30AF\n    const targetProductCodes = [];\n    const selectedProducts = [];\n\n    selectedCheckboxes.forEach(checkbox => {\n      const productCode = checkbox.getAttribute('data-product-code');\n      const product = this.hotDatas.find(p => p.product_code === productCode);\n\n      if (product && product.display_agreement_status === \"consulting\" && !product.is_manual_regist) {\n        targetProductCodes.push(productCode);\n        selectedProducts.push(product.display_product_name);\n      }\n    });\n\n    if (targetProductCodes.length === 0) {\n      showAlert(\"\u627F\u8A8D\u53EF\u80FD\u306A\u5546\u54C1\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\");\n      return;\n    }\n\n    const confirmMessage = `\u4EE5\u4E0B\u306E\u5546\u54C1\u306E\u51FA\u8377\u7D04\u675F\u6570\u3092\u627F\u8A8D\u3057\u307E\u3059\u304B\uFF1F\\n\\n${selectedProducts.join(\", \")}`;\n\n    if (!confirm(confirmMessage)) {\n      return;\n    }\n\n    fetch(\"/ship_schedule_snapshots/bulk_update\", {\n      method: \"PATCH\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"X-CSRF-Token\": document.querySelector('meta[name=\"csrf-token\"]').getAttribute(\"content\"),\n      },\n      body: JSON.stringify({\n        planting_period: this.plantingPeriodValue,\n        product_codes: targetProductCodes,\n      }),\n    })\n      .then((response) => {\n        if (!response.ok) {\n          throw new Error(\"response was not ok\");\n        }\n        return response.json();\n      })\n      .then((json) => {\n        if (json.status === \"success\") {\n          // \u627F\u8A8D\u5B8C\u4E86\u30E2\u30FC\u30C0\u30EB\u3092\u8868\u793A\n          const modal = new bootstrap.Modal(document.getElementById('approvalCompleteModal'));\n          modal.show();\n\n          // \u30E2\u30FC\u30C0\u30EB\u304C\u9589\u3058\u3089\u308C\u305F\u6642\u306B\u30DA\u30FC\u30B8\u3092\u518D\u8AAD\u307F\u8FBC\u307F\n          document.getElementById('approvalCompleteModal').addEventListener('hidden.bs.modal', function () {\n            location.reload();\n          }, { once: true });\n        } else {\n          showAlert(\"\u627F\u8A8D\u51E6\u7406\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\");\n        }\n      })\n      .catch((error) => {\n        showAlert(\"\u627F\u8A8D\u51E6\u7406\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\");\n      });\n  }\n\n  // \u300C\u65B0\u54C1\u76EE\u306E\u8FFD\u52A0\u300D\u51E6\u7406\n  addRow() {\n    fetch(\"/bulk_ship_schedules/add\", {\n      // add_bulk_ship_schedules_path\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"X-CSRF-Token\": document.querySelector('meta[name=\"csrf-token\"]').getAttribute(\"content\"),\n      },\n      body: JSON.stringify({\n        planting_period: this.plantingPeriodValue,\n      }),\n    })\n      .then((response) => {\n        if (!response.ok) {\n          throw new Error(\"response was not ok\");\n        }\n        return response.json();\n      })\n      .then((json) => {\n        const id = json.data.created_id;\n        this.hotDatas.push({ id: id, display_product_name: \"\", ship_schedule_quantities: {}, is_manual_regist: true });\n        this.loadHotData();\n        this.hot.selectCell(this.hotDatas.length - 1, 0);\n      })\n      .catch((error) => {\n        console.error(error);\n        showAlert(\"\u65B0\u54C1\u76EE\u306E\u8FFD\u52A0\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\");\n      });\n  }\n\n  // \u300C\u524A\u9664\u300D\u51E6\u7406\n  deleteRow(event) {\n    if (!confirm(\"\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F\")) return;\n    const row = parseInt(event.currentTarget.dataset.row);\n    const id = this.hotDatas[row].id;\n    fetch(`/bulk_ship_schedules/${id}`, {\n      // bulk_ship_schedule_path\n      method: \"DELETE\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"X-CSRF-Token\": document.querySelector('meta[name=\"csrf-token\"]').getAttribute(\"content\"),\n      },\n    })\n      .then((response) => {\n        if (!response.ok) {\n          throw new Error(\"response was not ok\");\n        }\n        this.hotDatas.splice(row, 1);\n        this.loadHotData();\n      })\n      .catch((error) => {\n        console.error(error);\n        showAlert(\"\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\");\n      });\n  }\n\n  // \u300C\u524D\u5E74\u5206\u3092\u53CD\u6620\u300D\u51E6\u7406\n  refrectPreviousShippableQuantity(event) {\n    if (!confirm(\"\u524D\u5E74\u5206\u306E\u51FA\u8377\u53EF\u80FD\u306E\u5B9F\u7E3E\u3092\u53CD\u6620\u3055\u305B\u307E\u3059\u304B\uFF1F\")) return;\n    const row = parseInt(event.currentTarget.dataset.row);\n    let dataArray = this._refrectPreviousShippableQuantityData(row);\n    this.hot.setDataAtCell(dataArray);\n  }\n  _refrectPreviousShippableQuantityData(row) {\n    let indexMap = createIndexMap(this.hotColumns());\n\n    let result = Object.entries(this.hotDatas[row].previous_shippable_quantities) // [[\"2021-01-01\", 10], [\"2021-01-02\", 20]]\n      .filter(([dateString, _]) => isNullOrEmpty(this.hotDatas[row].ship_schedule_quantities[dateString]))\n      .map(([dateString, quantity]) => {\n        let col = indexMap[`ship_schedule_quantities.${dateString}`];\n        if (col === undefined) return null;\n        return [row, col, quantity];\n      })\n      .filter((item) => item !== null);\n\n    return result;\n  }\n\n  // \u300C\u66F4\u65B0\u300D\u51E6\u7406\n  updateDatas(params) {\n    if (Object.keys(params).length === 0) return;\n    fetch(\"/bulk_ship_schedules\", {\n      // bulk_ship_schedules_path\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"X-CSRF-Token\": document.querySelector('meta[name=\"csrf-token\"]').getAttribute(\"content\"),\n      },\n      body: JSON.stringify({\n        data: params,\n      }),\n    })\n      .then((response) => {\n        if (!response.ok) {\n          throw new Error(\"response was not ok\");\n        }\n        return response.json();\n      })\n      .then((json) => {\n        if (json.status !== \"success\") {\n          throw new Error(\"response status was not success\");\n        }\n        this.updateMessageTarget.textContent = \"\u5909\u66F4\u3092\u4FDD\u5B58\u3057\u307E\u3057\u305F\u3002\";\n        setTimeout(() => (this.updateMessageTarget.textContent = \"\u3000\"), 3000);\n      })\n      .catch((error) => {\n        console.error(error);\n        showAlert(\"\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\");\n      });\n  }\n  _updateParams(changes) {\n    if (changes === null) return;\n    let params = {};\n    changes.forEach((change) => {\n      if (!isChanged(change[2], change[3])) return; // \u5909\u66F4\u304C\u306A\u3044\u5834\u5408\u306F\u30B9\u30AD\u30C3\u30D7\n      const row = this.hot.toPhysicalRow(change[0]);\n      const hotData = this.hotDatas[row];\n      params[hotData.id] = {\n        ...params[hotData.id],\n        [change[1]]: change[3],\n      };\n    });\n    return params;\n  }\n\n  hotSettings() {\n    // \u672A\u627F\u8A8D\u5546\u54C1\u304C\u3042\u308B\u304B\u30C1\u30A7\u30C3\u30AF\uFF08\u8868\u793A\u4E2D\u306E\u4F5C\u4ED8\u3051\u671F\u9593\u306B\u304A\u3051\u308B\u6700\u65B0\u30B9\u30CA\u30C3\u30D7\u30B7\u30E7\u30C3\u30C8\u57FA\u6E96\uFF09\n    const hasConsultingProducts = this.hotDatas.some(product =>\n      product.display_agreement_status === \"consulting\" && !product.is_manual_regist\n    );\n\n    return {\n      columns: this.hotColumns(),\n      data: [],\n      columnSorting: true,\n      height: \"calc(100vh - 276px)\", // \u30D6\u30E9\u30A6\u30B6\u306E\u8868\u793A\u5E45 - \u30D8\u30C3\u30C0\u30FC\u90E8\u5206\u306E\u5408\u8A08\n      fixedColumnsLeft: hasConsultingProducts ? 3 : 2,  // \u672A\u627F\u8A8D\u5546\u54C1\u304C\u306A\u3044\u5834\u5408\u306F2\u5217\u56FA\u5B9A\uFF08\u5546\u54C1\u5217\u3001\u6A5F\u80FD\u5217\u306E\u307F\uFF09\n      viewportColumnRenderingOffset: 60,\n      renderAllRows: true,\n      currentRowClassName: \"currentRow\",\n      currentColClassName: \"currentCol\",\n      afterChange: this.hotAfterChange.bind(this),\n      afterRender: this.hotAfterRender.bind(this),\n      licenseKey: \"non-commercial-and-evaluation\",\n    };\n  }\n\n  hotColumns() {\n    // \u30B3\u30F3\u30C8\u30ED\u30FC\u30E9\u30FC\u3067\u8A2D\u5B9A\u3055\u308C\u305F\u5024\u3092\u4F7F\u7528\uFF08\u73FE\u5728\u306E\u4F5C\u4ED8\u3051\u671F\u9593\u4EE5\u5916\u3067\u306F\u5F37\u5236\u7684\u306Bfalse\uFF09\n    const hasConsultingProducts = this.hasConsultingAgreementsValue;\n\n    const hotDisplayProductName = {\n      title: \"\u5546\u54C1\",\n      data: \"display_product_name\",\n      className: \"bold text-left display-product-name\",\n      width: 280,\n      readOnly: true,\n      renderer: this.displayProductNameRender.bind(this),\n    };\n\n    const functionBtn = {\n      title: \"\u6A5F\u80FD\",\n      data: \"\",\n      className: \"text-center function-btn\",\n      width: 90,\n      readOnly: true,\n      renderer: this.functionBtnRender.bind(this),\n    };\n\n    const shipScheduleQuantityColumns = this.weeksValue.map((dateString) => {\n      return this._shipScheduleQuantityColumn(dateString);\n    });\n\n    // \u672A\u627F\u8A8D\u5546\u54C1\u304C\u3042\u308B\u5834\u5408\u306E\u307F\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u5217\u3092\u542B\u3081\u308B\n    if (hasConsultingProducts) {\n      const checkboxColumn = {\n        title: \"\",\n        data: \"\",\n        className: \"text-center checkbox-column\",\n        width: 40,\n        readOnly: true,\n        renderer: this.checkboxRender.bind(this),\n      };\n      return [checkboxColumn, hotDisplayProductName, functionBtn, shipScheduleQuantityColumns].flat();\n    } else {\n      // \u672A\u627F\u8A8D\u5546\u54C1\u304C\u306A\u3044\u5834\u5408\u306F\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u5217\u3092\u9664\u5916\n      return [hotDisplayProductName, functionBtn, shipScheduleQuantityColumns].flat();\n    }\n  }\n\n  _shipScheduleQuantityColumn(dateString) {\n    let headerLabel = \"\";\n    let className = \"editable text-center\";\n\n    if (dateString == this.currentWeekValue) {\n      headerLabel = `<span class=\"header-label current-week\">\u4ECA\u9031</span>`;\n      className += \" current-week-column\";\n    }\n\n    return {\n      title: `${headerLabel}<br>${monthDay(dateString)}`,\n      data: `ship_schedule_quantities.${dateString}`,\n      className: className,\n      type: \"numeric\",\n      width: 46,\n      renderer: this.shipScheduleQuantityRender.bind(this),\n      validator: this.shipScheduleQuantityValidator.bind(this),\n    };\n  }\n\n  // ----- Handsontable\u306E\u30AB\u30B9\u30BF\u30E0Renderers -----\n  // \u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u5217\u306E\u30EC\u30F3\u30C0\u30E9\u30FC\n  checkboxRender(instance, td, row, col, prop, value, cellProperties) {\n    Handsontable.renderers.TextRenderer.apply(this, arguments);\n\n    const rowData = this.hotDatas[cellProperties.row];\n    const isConsulting = rowData.display_agreement_status === \"consulting\";\n\n    let innerHtmlText = \"\";\n    if (isConsulting && !rowData.is_manual_regist) {\n      innerHtmlText = `<p><i class=\"icon-exclamation-circle\"></i><br><input type=\"checkbox\" class=\"product-approval-checkbox\" data-product-code=\"${rowData.product_code}\" data-row=\"${row}\"></p>`;\n    } else if (!rowData.is_manual_regist) {\n      innerHtmlText = `<p><i class=\"icon-check-circle\"></i></p>`;\n    }\n\n    td.innerHTML = innerHtmlText;\n    return td;\n  }\n\n  displayProductNameRender(instance, td, row, col, prop, value, cellProperties) {\n    Handsontable.renderers.TextRenderer.apply(this, arguments);\n\n    let innerHtmlText = value;\n    if (innerHtmlText === null) {\n      innerHtmlText = \"\";\n    }\n\n    // placeholder\n    if (this.hotDatas[cellProperties.row].is_manual_regist && isNullOrEmpty(value)) {\n      innerHtmlText = `<p class=\"product-placeholder\"><span class=\"instruction\">\u5546\u54C1\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044</span><br><span class=\"example\">\uFF08\u4F8B\uFF09\u30DF\u30BA\u30CA 150g [\u888B]</span></p>`;\n    } else {\n      innerHtmlText = `<p>${innerHtmlText}</p>`;\n    }\n\n    // \u7DE8\u96C6\u53EF\u30FB\u4E0D\u53EF\n    if (this.hotDatas[cellProperties.row].is_manual_regist) {\n      td.className += \" editable\";\n      cellProperties.readOnly = false;\n    }\n\n    // \u5E02\u6CC1\u30DC\u30BF\u30F3\n    if (!this.hotDatas[cellProperties.row].is_manual_regist) {\n      const params = {\n        item: this.hotDatas[cellProperties.row].item_name,\n      };\n      const url = `/supply_dashboard?${$.param(params)}`; // supply_dashboard_path\n      innerHtmlText += `<a href=\"${url}\" target=\"_blank\" class=\"btn btn-supply-dashboard\"><i class=\"icon-supply-dashboard-small\"></i><span>\u5E02\u6CC1</span></a>`;\n    }\n\n    td.innerHTML = innerHtmlText;\n  }\n\n  functionBtnRender(instance, td, row, col, prop, value, cellProperties) {\n    Handsontable.renderers.TextRenderer.apply(this, arguments);\n\n    let innerHtmlText = value;\n\n    // \u524D\u5E74\u5206\u3092\u53CD\u6620\u30DC\u30BF\u30F3\n    if (!this.hotDatas[cellProperties.row].is_manual_regist) {\n      innerHtmlText = `<button class=\"btn btn-copy-previous-year\" data-action=\"click->bulk-ship-schedule#refrectPreviousShippableQuantity\" data-row=\"${cellProperties.row}\"><i class=\"icon-copy-small\"></i><span>\u524D\u5E74\u5206<br>\u3092\u53CD\u6620</span></button>`;\n    }\n\n    // \u524A\u9664\u30DC\u30BF\u30F3\n    if (this.hotDatas[cellProperties.row].is_manual_regist) {\n      innerHtmlText = `<button class=\"btn btn-delete-row\" data-action=\"click->bulk-ship-schedule#deleteRow\" data-row=\"${cellProperties.row}\"><i class=\"icon-trash-small\"></i><span>\u524A\u9664</span></button>`;\n    }\n\n    td.innerHTML = innerHtmlText;\n  }\n\n  shipScheduleQuantityRender(instance, td, row, col, prop, value, cellProperties) {\n    Handsontable.renderers.NumericRenderer.apply(this, arguments);\n\n    let innerHtmlText = value;\n    if (innerHtmlText === null) {\n      innerHtmlText = \"\";\n    }\n\n    const date_str = prop.slice(-10);\n    const agreement_quantity = this.hotDatas[cellProperties.row].agreement_quantities?.[date_str];\n    // \u627F\u8A8D\u6E08\u307Fsnapshot\u3092\u53D6\u5F97\n    const latest_snapshot_quantity = this.hotDatas[cellProperties.row].latest_snapshot_quantities?.[date_str];\n    const previous_shippable_quantity = this.hotDatas[cellProperties.row].previous_shippable_quantities?.[date_str];\n    const display_agreement_status = this.hotDatas[cellProperties.row].display_agreement_status;\n\n    // \u627F\u8A8D\u6E08\u307F\u30B9\u30CA\u30C3\u30D7\u30B7\u30E7\u30C3\u30C8\u3068\u73FE\u5728\u306E\u7D04\u675F\u6570\u306E\u5909\u66F4\u72B6\u6CC1\u3092\u5224\u5B9A\n    // consulting \u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u5834\u5408\u306E\u307F\u30CF\u30A4\u30E9\u30A4\u30C8\u5BFE\u8C61\n    const isNewAgreement = !latest_snapshot_quantity && !!agreement_quantity && display_agreement_status === \"consulting\";\n    const isUpdatedAgreement = latest_snapshot_quantity &&\n                              latest_snapshot_quantity !== agreement_quantity &&\n                              display_agreement_status === \"consulting\";\n    const hasSnapshotDiff = isNewAgreement || isUpdatedAgreement;\n\n    // \u7D04\u675F\u6570\u3068\u524D\u5E74\u51FA\u8377\u53EF\u80FD\u6570\u306E\u8868\u793A\n    if (!!agreement_quantity) {\n      let displayText = agreement_quantity;\n\n      innerHtmlText += `<p class=\"placeholder-quantity\"><span class=\"agreement-quantity agreed\">${displayText}</span></p>`;\n    }\n    if (!!previous_shippable_quantity) {\n      innerHtmlText += `<p class=\"placeholder-quantity\"><span class=\"previous-shippable-quantity\">(${previous_shippable_quantity})</span></p>`;\n    }\n\n    // \u80CC\u666F\u8272\u306E\u8A2D\u5B9A\n    if (display_agreement_status === \"consulting\" && hasSnapshotDiff) {\n      td.className += \" consulting-row\";\n    }\n\n    td.innerHTML = innerHtmlText;\n  }\n\n  // ----- Handsontable\u306E\u30AB\u30B9\u30BF\u30E0Validators -----\n  shipScheduleQuantityValidator(value, callback) {\n    if (Number(value) >= 0 && Number(value) <= 99999) {\n      // ShipSchedule::SHIP_SCHEDULE_QUANTITY_MAX\n      callback(true);\n    } else {\n      callback(false);\n    }\n  }\n\n  // ----- Handsontable \u30A4\u30D9\u30F3\u30C8\u30CF\u30F3\u30C9\u30E9 -----\n  hotAfterChange(changes) {\n    if (changes === null) return;\n    this.updateDatas(this._updateParams(changes));\n  }\n\n  // \u627F\u8A8DUI\u306E\u72B6\u614B\u3092\u66F4\u65B0\n  updateApprovalUI() {\n    // \u672A\u627F\u8A8D\u5546\u54C1\u6570\u3092\u53D6\u5F97\u30FB\u8868\u793A\n    const consultingCount = this.getConsultingProductsCount();\n    if (this.hasConsultingCountTarget) {\n      this.consultingCountTarget.textContent = consultingCount;\n    }\n\n    // \u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u306E\u9078\u629E\u72B6\u614B\u3092\u76E3\u8996\n    this.setupCheckboxListeners();\n\n    // \u627F\u8A8D\u30DC\u30BF\u30F3\u306E\u72B6\u614B\u3092\u66F4\u65B0\n    this.updateApproveButtonState();\n  }\n\n  // \u672A\u627F\u8A8D\u5546\u54C1\u6570\u3092\u53D6\u5F97\n  getConsultingProductsCount() {\n    return this.hotDatas.filter(data => data.display_agreement_status === 'consulting').length;\n  }\n\n  // \u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u306E\u30A4\u30D9\u30F3\u30C8\u30EA\u30B9\u30CA\u30FC\u3092\u8A2D\u5B9A\n  setupCheckboxListeners() {\n    // \u65E2\u5B58\u306E\u30EA\u30B9\u30CA\u30FC\u3092\u524A\u9664\u3057\u3066\u91CD\u8907\u3092\u9632\u3050\n    document.removeEventListener('change', this.checkboxChangeHandler);\n\n    // \u65B0\u3057\u3044\u30EA\u30B9\u30CA\u30FC\u3092\u8FFD\u52A0\n    this.checkboxChangeHandler = (e) => {\n      if (e.target.classList.contains('product-approval-checkbox')) {\n        this.updateApproveButtonState();\n      }\n    };\n    document.addEventListener('change', this.checkboxChangeHandler);\n  }\n\n  // \u627F\u8A8D\u30DC\u30BF\u30F3\u306E\u6709\u52B9/\u7121\u52B9\u72B6\u614B\u3092\u66F4\u65B0\n  updateApproveButtonState() {\n    if (!this.hasApproveButtonTarget) return;\n\n    const selectedCheckboxes = document.querySelectorAll('#handsone-table .product-approval-checkbox:checked');\n    const hasSelection = selectedCheckboxes.length > 0;\n\n    this.approveButtonTarget.disabled = !hasSelection;\n\n    if (hasSelection) {\n      this.approveButtonTarget.classList.remove('btn-outline-danger');\n      this.approveButtonTarget.classList.add('btn-danger');\n    } else {\n      this.approveButtonTarget.classList.remove('btn-danger');\n      this.approveButtonTarget.classList.add('btn-outline-danger');\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  static values = {\n    url: String,\n  }\n\n  editProductShippable() {\n    window.location.href = this.urlValue\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  static values = {\n    url: String,\n  }\n\n  editOrder() {\n    window.location.href = this.urlValue\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  connect() {\n    $(document).on('keyup', function (e) {\n      if (e.key === \"Escape\") {\n        $(\".js-notification-modal\").addClass(\"d-none\");\n      }\n    });\n  }\n\n  showNotification(e) {\n    const id = $(e.currentTarget).data(\"id\");\n    $.ajax({\n      method: \"GET\",\n      url: `/notifications/${id}`, // notification_path\n      dataType: \"script\",\n    });\n  }\n\n  closeModal(_e) {\n    $(\".js-notification-modal\").addClass(\"d-none\");\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  static targets = [\n    \"broadCategoryText\", \"broadCategoryBadge\", \"broadCategoryList\",\n    \"middleCategoryText\", \"middleCategoryBadge\", \"middleCategoryList\",\n    \"smallCategoryText\", \"smallCategoryBadge\", \"smallCategoryList\",\n    \"productItemText\", \"productItemBadge\", \"productItemList\",\n    \"productItemSearchForm\", \"productItemSearchBox\",\n  ];\n  static values = {\n    broadCategory: String,\n    middleCategory: String,\n    smallCategory: String,\n    item: String,\n    productItemSearchText: String,\n    categoryMapping: Array,\n  };\n\n  connect() {\n  }\n\n  // call backs\n  broadCategoryValueChanged() {\n    if (this.broadCategoryValue) {\n      // badge\u306E\u8868\u793A\n      this.broadCategoryBadgeTarget.style.display = \"inline-block\";\n      this.broadCategoryTextTarget.textContent = this.broadCategoryValue;\n      // li\u306Bselected\u30AF\u30E9\u30B9\u3092add\n      this.broadCategoryListTargets.forEach((element) => { element.classList.remove(\"selected\"); });\n      let selectedElement = this.broadCategoryListTargets.find(element => element.dataset.broadCategory === this.broadCategoryValue);\n      if (selectedElement) { selectedElement.classList.add(\"selected\"); }\n    } else {\n      // badge\u306E\u975E\u8868\u793A\n      this.broadCategoryBadgeTarget.style.display = \"none\";\n      this.broadCategoryTextTarget.textContent = null;\n      // li\u306Eselected\u30AF\u30E9\u30B9\u3092remove\n      this.broadCategoryListTargets.forEach((element) => { element.classList.remove(\"selected\"); });\n    }\n    // list\u306E\u691C\u7D22\n    this._searchList();\n  }\n\n  middleCategoryValueChanged() {\n    if (this.middleCategoryValue) {\n      // badge\u306E\u8868\u793A\n      this.middleCategoryBadgeTarget.style.display = \"inline-block\";\n      this.middleCategoryTextTarget.textContent = this.middleCategoryValue;\n      // li\u306Bselected\u30AF\u30E9\u30B9\u3092add\n      this.middleCategoryListTargets.forEach((element) => { element.classList.remove(\"selected\"); });\n      let selectedElement = this.middleCategoryListTargets.find(element => element.dataset.middleCategory === this.middleCategoryValue);\n      if (selectedElement) { selectedElement.classList.add(\"selected\"); }\n    } else {\n      // badge\u306E\u975E\u8868\u793A\n      this.middleCategoryBadgeTarget.style.display = \"none\";\n      this.middleCategoryTextTarget.textContent = null;\n      // li\u306Eselected\u30AF\u30E9\u30B9\u3092remove\n      this.middleCategoryListTargets.forEach((element) => { element.classList.remove(\"selected\"); });\n    }\n    // list\u306E\u691C\u7D22\n    this._searchList();\n  }\n\n  smallCategoryValueChanged() {\n    if (this.smallCategoryValue) {\n      // badge\u306E\u8868\u793A\n      this.smallCategoryBadgeTarget.style.display = \"inline-block\";\n      this.smallCategoryTextTarget.textContent = this.smallCategoryValue;\n      // li\u306Bselected\u30AF\u30E9\u30B9\u3092add\n      this.smallCategoryListTargets.forEach((element) => { element.classList.remove(\"selected\"); });\n      let selectedElement = this.smallCategoryListTargets.find(element => element.dataset.smallCategory === this.smallCategoryValue);\n      if (selectedElement) { selectedElement.classList.add(\"selected\"); }\n    } else {\n      // badge\u306E\u975E\u8868\u793A\n      this.smallCategoryBadgeTarget.style.display = \"none\";\n      this.smallCategoryTextTarget.textContent = null;\n      // li\u306Eselected\u30AF\u30E9\u30B9\u3092remove\n      this.smallCategoryListTargets.forEach((element) => { element.classList.remove(\"selected\"); });\n    }\n    // list\u306E\u691C\u7D22\n    this._searchList();\n  }\n\n  itemValueChanged() {\n    if (this.itemValue) {\n      // badge\u306E\u8868\u793A\n      this.productItemBadgeTarget.style.display = \"inline-block\";\n      this.productItemTextTarget.textContent = this.itemValue;\n      // li\u306Bselected\u30AF\u30E9\u30B9\u3092add\n      this.productItemListTargets.forEach((element) => { element.classList.remove(\"selected\"); });\n      let selectedElement = this.productItemListTargets.find(element => element.dataset.productItem === this.itemValue);\n      if (selectedElement) { selectedElement.classList.add(\"selected\"); }\n      // product-item-search-box\u306E\u975E\u8868\u793A\n      this.productItemSearchBoxTarget.style.display = \"none\";\n    } else {\n      // badge\u306E\u975E\u8868\u793A\n      this.productItemBadgeTarget.style.display = \"none\";\n      this.productItemTextTarget.textContent = null;\n      // li\u306Eselected\u30AF\u30E9\u30B9\u3092remove\n      this.productItemListTargets.forEach((element) => { element.classList.remove(\"selected\"); });\n      // product-item-search-box\u306E\u8868\u793A\n      this.productItemSearchBoxTarget.style.display = \"block\";\n    }\n    // list\u306E\u691C\u7D22\n    this._searchList();\n  }\n\n  productItemSearchTextValueChanged() {\n    if (this.productItemSearchTextValue) {\n    } else {\n      this.productItemSearchFormTarget.value = null;\n    }\n    // list\u306E\u691C\u7D22\n    this._searchProductItemList();\n  }\n\n  // \u691C\u7D22\u30EA\u30B9\u30C8\u306E\u8868\u793A\u30FB\u975E\u8868\u793A\n  _searchList() {\n    this._searchMiddleCategoryList();\n    this._searchSmallCategoryList();\n    this._searchProductItemList();\n  }\n\n  _searchMiddleCategoryList() {\n    // \u5168\u8868\u793A\n    this.middleCategoryListTargets.forEach((element) => { element.style.display = 'list-item'; });\n    // \u691C\u7D22\n    this.middleCategoryListTargets.forEach((element) => {\n      if (!!this.broadCategoryValue && element.dataset.broadCategory !== this.broadCategoryValue) {\n        element.style.display = 'none';\n      }\n    });\n  }\n\n  _searchSmallCategoryList() {\n    // \u5168\u8868\u793A\n    this.smallCategoryListTargets.forEach((element) => { element.style.display = 'list-item'; });\n    // \u691C\u7D22\n    this.smallCategoryListTargets.forEach((element) => {\n      if (!!this.middleCategoryValue && element.dataset.middleCategory !== this.middleCategoryValue ||\n          !!this.broadCategoryValue && element.dataset.broadCategory !== this.broadCategoryValue) {\n        element.style.display = 'none';\n      }\n    });\n  }\n\n  _searchProductItemList() {\n    // \u5168\u8868\u793A\n    this.productItemListTargets.forEach((element) => { element.style.display = 'list-item'; });\n    // \u691C\u7D22\n    this.productItemListTargets.forEach((element) => {\n      if (!!this.smallCategoryValue && element.dataset.smallCategory !== this.smallCategoryValue ||\n          !!this.middleCategoryValue && element.dataset.middleCategory !== this.middleCategoryValue ||\n          !!this.broadCategoryValue && element.dataset.broadCategory !== this.broadCategoryValue ||\n          !!this.productItemSearchTextValue && !element.dataset.productItem.includes(this.productItemSearchTextValue)) {\n        element.style.display = 'none';\n      }\n    });\n  }\n\n  // \u30AB\u30C6\u30B4\u30EA\u30AF\u30EA\u30C3\u30AF\n  clickBroadCategory(event) {\n    this.selectBroadCategory(event.target.dataset.broadCategory)\n  }\n  clickMiddleCategory(event) {\n    this.selectMiddleCategory(event.target.dataset.middleCategory)\n  }\n  clickSmallCategory(event) {\n    this.selectSmallCategory(event.target.dataset.smallCategory)\n  }\n  clickProductItem(event) {\n    this.selectProductItem(event.target.dataset.productItem)\n  }\n\n  // \u54C1\u76EE\u691C\u7D22\n  searchProductItem(event) {\n    this.productItemSearchTextValue = event.target.value;\n  }\n\n  // select\n  async selectBroadCategory(broadCategory) {\n    this.broadCategoryValue = broadCategory;\n    this.middleCategoryValue = \"\";\n    this.smallCategoryValue = \"\";\n    this.itemValue = \"\";\n    this.productItemSearchTextValue = \"\";\n    await this.updateIframe();\n  }\n\n  async selectMiddleCategory(middleCategory) {\n    this.broadCategoryValue = this.searchMappingMiddleCategory(middleCategory).broad_category;\n    this.middleCategoryValue = middleCategory;\n    this.smallCategoryValue = \"\";\n    this.itemValue = \"\";\n    this.productItemSearchTextValue = \"\";\n    await this.updateIframe();\n  }\n\n  async selectSmallCategory(smallCategory) {\n    this.broadCategoryValue = this.searchMappingSmallCategory(smallCategory).broad_category;\n    this.middleCategoryValue = this.searchMappingSmallCategory(smallCategory).middle_category;\n    this.smallCategoryValue = smallCategory;\n    this.itemValue = \"\";\n    this.productItemSearchTextValue = \"\";\n    await this.updateIframe();\n  }\n\n  async selectProductItem(productItem) {\n    this.broadCategoryValue = this.searchMappingProductItem(productItem).broad_category;\n    this.middleCategoryValue = this.searchMappingProductItem(productItem).middle_category;\n    this.smallCategoryValue = this.searchMappingProductItem(productItem).small_category;\n    this.itemValue = productItem;\n    this.productItemSearchTextValue = \"\";\n    await this.updateIframe();\n  }\n\n  // clear\n  async clearBroadCategory() {\n    this.broadCategoryValue = \"\";\n    this.middleCategoryValue = \"\";\n    this.smallCategoryValue = \"\";\n    this.itemValue = \"\";\n    this.productItemSearchTextValue = \"\";\n    await this.updateIframe();\n  }\n\n  async clearMiddleCategory() {\n    this.middleCategoryValue = \"\";\n    this.smallCategoryValue = \"\";\n    this.itemValue = \"\";\n    this.productItemSearchTextValue = \"\";\n    await this.updateIframe();\n  }\n\n  async clearSmallCategory() {\n    this.smallCategoryValue = \"\";\n    this.itemValue = \"\";\n    this.productItemSearchTextValue = \"\";\n    await this.updateIframe();\n  }\n\n  async clearProductItem() {\n    this.itemValue = \"\";\n    this.productItemSearchTextValue = \"\";\n    await this.updateIframe();\n  }\n\n  // search mapping\n  searchMappingMiddleCategory(MiddleCategory) {\n    return this.categoryMappingValue.find(obj => obj.middle_category === MiddleCategory)\n  }\n  searchMappingSmallCategory(SmallCategory) {\n    return this.categoryMappingValue.find(obj => obj.small_category === SmallCategory)\n  }\n  searchMappingProductItem(ProductItem) {\n    return this.categoryMappingValue.find(obj => obj.item === ProductItem)\n  }\n\n  // iframe\n  async updateIframe() {\n    const url = this._iframeURL();\n    this._replaceStateHistory(url);\n    const turboFrameId = 'iframe';\n    await this._turboFrame(url, turboFrameId);\n  }\n  _iframeURL() {\n    const url = new URL('/supply_dashboard', window.location.origin);\n    url.searchParams.append('broad_category', this.broadCategoryValue);\n    url.searchParams.append('middle_category', this.middleCategoryValue);\n    url.searchParams.append('small_category', this.smallCategoryValue);\n    url.searchParams.append('item', this.itemValue);\n    return url;\n  }\n  _replaceStateHistory(url) {\n    history.replaceState('permit', null, url.pathname + url.search);\n  }\n  async _turboFrame(url, id) {\n    const response = await fetch(url, {\n      headers: { 'Turbo-Frame': id },\n    });\n    if (!response.ok) {\n      showAlert('\u691C\u7D22\u6642\u306B\u30A8\u30E9\u30FC\u304C\u8D77\u304D\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002');\n    }\n\n    const responseText = await response.text();\n    const domParser = new DOMParser();\n    const htmlDocument = domParser.parseFromString(responseText, \"text/html\");\n    const newFrame = htmlDocument.getElementById(id);\n  \n    const frame = document.getElementById(id);\n    frame.innerHTML = newFrame.innerHTML;\n  }\n\n  // collapse toggle\n  toggleIcon(event) {\n    const showIcon = event.currentTarget.querySelector('.js-show-icon');\n    const hideIcon = event.currentTarget.querySelector('.js-hide-icon');\n\n    showIcon.style.display = showIcon.style.display === 'none' ? 'inline' : 'none';\n    hideIcon.style.display = hideIcon.style.display === 'none' ? 'inline' : 'none';\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n\n  static targets = [\"notice\", \"alert\"];\n  \n  connect() {\n    $(\".js-front-alert\").delay(5000).slideUp(200, function () {\n      $(this).css(\"display\", \"none\");\n    });\n  \n    $(\".js-close-alert\").on(\"click\", function () {\n      $(\".js-front-alert\").css(\"display\", \"none\");\n    });\n  \n    $(document).on('keyup', function (e) {\n      if (e.key === \"Escape\") {\n        $(\".js-front-alert\").css(\"display\", \"none\");\n      }\n    });\n  }\n}\n", "// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\";\n\n// common_controllers\nimport CommonController from \"../common_controllers/common_controller.js\";\napplication.register(\"common\", CommonController);\n\nimport DirectUploadController from \"../common_controllers/direct_upload_controller.js\";\napplication.register(\"direct-upload\", DirectUploadController);\n\n// front_controllers\nimport BulkProductShippableController from \"./bulk_product_shippable_controller.js\";\napplication.register(\"bulk-product-shippable\", BulkProductShippableController);\n\nimport ProductShippableController from \"./product_shippable_controller.js\";\napplication.register(\"product-shippable\", ProductShippableController);\n\nimport BulkShipScheduleController from \"./bulk_ship_schedule_controller.js\";\napplication.register(\"bulk-ship-schedule\", BulkShipScheduleController);\n\nimport ProductShippableCardContentController from \"./product_shippables/card_content_controller.js\";\napplication.register(\"product-shippable-card-content\", ProductShippableCardContentController);\n\nimport OrderController from \"./order_controller.js\";\napplication.register(\"order\", OrderController);\n\nimport OrderContentController from \"./orders/content_controller.js\";\napplication.register(\"order-content\", OrderContentController);\n\nimport NotificationController from \"./notification_controller.js\";\napplication.register(\"notification\", NotificationController);\n\nimport SupplyDashboardController from \"./supply_dashboard_controller.js\";\napplication.register(\"supply-dashboard\", SupplyDashboardController);\n\nimport FlashMessageController from \"./flash_message_controller.js\";\napplication.register(\"flash-message\", FlashMessageController);\n", "import jquery from \"jquery\";\nwindow.jQuery = jquery;\nwindow.$ = jquery;\n", "export * from \"./enums.js\";\nexport * from \"./modifiers/index.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { popperGenerator, detectOverflow, createPopper as createPopperBase } from \"./createPopper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper } from \"./popper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\";", "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "import { isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nexport default function getBoundingClientRect(element, includeScale) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  var rect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (isHTMLElement(element) && includeScale) {\n    var offsetHeight = element.offsetHeight;\n    var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n    // Fallback to 1 in case both values are `0`\n\n    if (offsetWidth > 0) {\n      scaleX = round(rect.width) / offsetWidth || 1;\n    }\n\n    if (offsetHeight > 0) {\n      scaleY = round(rect.height) / offsetHeight || 1;\n    }\n  }\n\n  return {\n    width: rect.width / scaleX,\n    height: rect.height / scaleY,\n    top: rect.top / scaleY,\n    right: rect.right / scaleX,\n    bottom: rect.bottom / scaleY,\n    left: rect.left / scaleX,\n    x: rect.left / scaleX,\n    y: rect.top / scaleY\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n  var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n  return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n\n  var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n      _ref3$x = _ref3.x,\n      x = _ref3$x === void 0 ? 0 : _ref3$x,\n      _ref3$y = _ref3.y,\n      y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref4) {\n  var state = _ref4.state,\n      options = _ref4.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};", "var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}", "var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n  // can be obscured underneath it.\n  // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n  // if it isn't open, so if this isn't available, the popper will be detected\n  // to overflow the bottom of the screen too early.\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n    // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n    // errors due to floating point numbers, so we need to check precision.\n    // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n    // Feature detection fails in mobile emulation mode in Chrome.\n    // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n    // 0.001\n    // Fallback here: \"Not Safari\" userAgent\n\n    if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n  var rect = getBoundingClientRect(element);\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body' && (canEscapeClipping ? getComputedStyle(clippingParent).position !== 'static' : true);\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent);\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  }, getClientRectFromMixedType(element, firstClippingParent));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases \u2013 research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};", "export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};", "export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\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}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}", "export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}", "export default function format(str) {\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  return [].concat(args).reduce(function (p, c) {\n    return p.replace(/%s/, c);\n  }, str);\n}", "import format from \"./format.js\";\nimport { modifierPhases } from \"../enums.js\";\nvar INVALID_MODIFIER_ERROR = 'Popper: modifier \"%s\" provided an invalid %s property, expected %s but got %s';\nvar MISSING_DEPENDENCY_ERROR = 'Popper: modifier \"%s\" requires \"%s\", but \"%s\" modifier is not available';\nvar VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options'];\nexport default function validateModifiers(modifiers) {\n  modifiers.forEach(function (modifier) {\n    [].concat(Object.keys(modifier), VALID_PROPERTIES) // IE11-compatible replacement for `new Set(iterable)`\n    .filter(function (value, index, self) {\n      return self.indexOf(value) === index;\n    }).forEach(function (key) {\n      switch (key) {\n        case 'name':\n          if (typeof modifier.name !== 'string') {\n            console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '\"name\"', '\"string\"', \"\\\"\" + String(modifier.name) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'enabled':\n          if (typeof modifier.enabled !== 'boolean') {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"enabled\"', '\"boolean\"', \"\\\"\" + String(modifier.enabled) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'phase':\n          if (modifierPhases.indexOf(modifier.phase) < 0) {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"phase\"', \"either \" + modifierPhases.join(', '), \"\\\"\" + String(modifier.phase) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'fn':\n          if (typeof modifier.fn !== 'function') {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"fn\"', '\"function\"', \"\\\"\" + String(modifier.fn) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'effect':\n          if (modifier.effect != null && typeof modifier.effect !== 'function') {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"effect\"', '\"function\"', \"\\\"\" + String(modifier.fn) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'requires':\n          if (modifier.requires != null && !Array.isArray(modifier.requires)) {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"requires\"', '\"array\"', \"\\\"\" + String(modifier.requires) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'requiresIfExists':\n          if (!Array.isArray(modifier.requiresIfExists)) {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"requiresIfExists\"', '\"array\"', \"\\\"\" + String(modifier.requiresIfExists) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'options':\n        case 'data':\n          break;\n\n        default:\n          console.error(\"PopperJS: an invalid property has been provided to the \\\"\" + modifier.name + \"\\\" modifier, valid properties are \" + VALID_PROPERTIES.map(function (s) {\n            return \"\\\"\" + s + \"\\\"\";\n          }).join(', ') + \"; but \\\"\" + key + \"\\\" was provided.\");\n      }\n\n      modifier.requires && modifier.requires.forEach(function (requirement) {\n        if (modifiers.find(function (mod) {\n          return mod.name === requirement;\n        }) == null) {\n          console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement));\n        }\n      });\n    });\n  });\n}", "export default function uniqueBy(arr, fn) {\n  var identifiers = new Set();\n  return arr.filter(function (item) {\n    var identifier = fn(item);\n\n    if (!identifiers.has(identifier)) {\n      identifiers.add(identifier);\n      return true;\n    }\n  });\n}", "export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update \u2013 it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update \u2013 it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID)\n  } while (document.getElementById(prefix))\n\n  return prefix\n}\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target')\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href')\n\n    // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n    if (!hrefAttr || (!hrefAttr.includes('#') && !hrefAttr.startsWith('.'))) {\n      return null\n    }\n\n    // Just in case some CMS puts out a full URL with the anchor appended\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null\n  }\n\n  return selector\n}\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element)\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null\n  }\n\n  return null\n}\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element)\n\n  return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0\n  }\n\n  // Get transition-duration of the element\n  let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n  const floatTransitionDuration = Number.parseFloat(transitionDuration)\n  const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0]\n  transitionDelay = transitionDelay.split(',')[0]\n\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0]\n  }\n\n  return typeof obj.nodeType !== 'undefined'\n}\n\nconst getElement = obj => {\n  if (isElement(obj)) { // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return document.querySelector(obj)\n  }\n\n  return null\n}\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property]\n    const value = config[property]\n    const valueType = value && isElement(value) ? 'element' : toType(value)\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(\n        `${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n      )\n    }\n  })\n}\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n}\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode()\n    return root instanceof ShadowRoot ? root : null\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null\n  }\n\n  return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n  // eslint-disable-next-line no-unused-expressions\n  element.offsetHeight\n}\n\nconst getjQuery = () => {\n  const { jQuery } = window\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery\n  }\n\n  return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback())\n      })\n    }\n\n    DOMContentLoadedCallbacks.push(callback)\n  } else {\n    callback()\n  }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery()\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME\n      const JQUERY_NO_CONFLICT = $.fn[name]\n      $.fn[name] = plugin.jQueryInterface\n      $.fn[name].Constructor = plugin\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT\n        return plugin.jQueryInterface\n      }\n    }\n  })\n}\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback()\n  }\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback)\n    return\n  }\n\n  const durationPadding = 5\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n  let called = false\n\n  const handler = ({ target }) => {\n    if (target !== transitionElement) {\n      return\n    }\n\n    called = true\n    transitionElement.removeEventListener(TRANSITION_END, handler)\n    execute(callback)\n  }\n\n  transitionElement.addEventListener(TRANSITION_END, handler)\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement)\n    }\n  }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement)\n\n  // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0]\n  }\n\n  const listLength = list.length\n\n  index += shouldGetNext ? 1 : -1\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n  getElement,\n  getUID,\n  getSelectorFromElement,\n  getElementFromSelector,\n  getTransitionDurationFromElement,\n  triggerTransitionEnd,\n  isElement,\n  typeCheckConfig,\n  isVisible,\n  isDisabled,\n  findShadowRoot,\n  noop,\n  getNextActiveElement,\n  reflow,\n  getjQuery,\n  onDOMContentLoaded,\n  isRTL,\n  defineJQueryPlugin,\n  execute,\n  executeAfterTransition\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n}\nconst customEventsRegex = /^(mouseenter|mouseleave)/i\nconst nativeEvents = new Set([\n  'click',\n  'dblclick',\n  'mouseup',\n  'mousedown',\n  'contextmenu',\n  'mousewheel',\n  'DOMMouseScroll',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n  'selectstart',\n  'selectend',\n  'keydown',\n  'keypress',\n  'keyup',\n  'orientationchange',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'touchcancel',\n  'pointerdown',\n  'pointermove',\n  'pointerup',\n  'pointerleave',\n  'pointercancel',\n  'gesturestart',\n  'gesturechange',\n  'gestureend',\n  'focus',\n  'blur',\n  'change',\n  'reset',\n  'select',\n  'submit',\n  'focusin',\n  'focusout',\n  'load',\n  'unload',\n  'beforeunload',\n  'resize',\n  'move',\n  'DOMContentLoaded',\n  'readystatechange',\n  'error',\n  'abort',\n  'scroll'\n])\n\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element)\n\n  element.uidEvent = uid\n  eventRegistry[uid] = eventRegistry[uid] || {}\n\n  return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn)\n    }\n\n    return fn.apply(element, [event])\n  }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector)\n\n    for (let { target } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target\n\n          if (handler.oneOff) {\n            EventHandler.off(element, event.type, selector, fn)\n          }\n\n          return fn.apply(target, [event])\n        }\n      }\n    }\n\n    // To please ESLint\n    return null\n  }\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events)\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]]\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event\n    }\n  }\n\n  return null\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string'\n  const originalHandler = delegation ? delegationFn : handler\n\n  let typeEvent = getTypeEvent(originalTypeEvent)\n  const isNative = nativeEvents.has(typeEvent)\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent\n  }\n\n  return [delegation, originalHandler, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return\n  }\n\n  if (!handler) {\n    handler = delegationFn\n    delegationFn = null\n  }\n\n  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n          return fn.call(this, event)\n        }\n      }\n    }\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn)\n    } else {\n      handler = wrapFn(handler)\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn)\n  const events = getEvent(element)\n  const handlers = events[typeEvent] || (events[typeEvent] = {})\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null)\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff\n\n    return\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''))\n  const fn = delegation ?\n    bootstrapDelegationHandler(element, handler, delegationFn) :\n    bootstrapHandler(element, handler)\n\n  fn.delegationSelector = delegation ? handler : null\n  fn.originalHandler = originalHandler\n  fn.oneOff = oneOff\n  fn.uidEvent = uid\n  handlers[uid] = fn\n\n  element.addEventListener(typeEvent, fn, delegation)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n  if (!fn) {\n    return\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n  delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {}\n\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey]\n\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)\n    }\n  })\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '')\n  return customEvents[event] || event\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false)\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true)\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn)\n    const inNamespace = typeEvent !== originalTypeEvent\n    const events = getEvent(element)\n    const isNamespace = originalTypeEvent.startsWith('.')\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null)\n      return\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n      })\n    }\n\n    const storeElementEvent = events[typeEvent] || {}\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers]\n\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)\n      }\n    })\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null\n    }\n\n    const $ = getjQuery()\n    const typeEvent = getTypeEvent(event)\n    const inNamespace = event !== typeEvent\n    const isNative = nativeEvents.has(typeEvent)\n\n    let jQueryEvent\n    let bubbles = true\n    let nativeDispatch = true\n    let defaultPrevented = false\n    let evt = null\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args)\n\n      $(element).trigger(jQueryEvent)\n      bubbles = !jQueryEvent.isPropagationStopped()\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n      defaultPrevented = jQueryEvent.isDefaultPrevented()\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents')\n      evt.initEvent(typeEvent, bubbles, true)\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      })\n    }\n\n    // merge custom information in our event\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key]\n          }\n        })\n      })\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault()\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt)\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault()\n    }\n\n    return evt\n  }\n}\n\nexport default EventHandler\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst elementMap = new Map()\n\nexport default {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map())\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n      return\n    }\n\n    instanceMap.set(key, instance)\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null\n    }\n\n    return null\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    instanceMap.delete(key)\n\n    // free up element references if there are no instances left for an element\n    if (instanceMap.size === 0) {\n      elementMap.delete(element)\n    }\n  }\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport {\n  executeAfterTransition,\n  getElement\n} from './util/index'\nimport EventHandler from './dom/event-handler'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.1.3'\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element)\n\n    if (!element) {\n      return\n    }\n\n    this._element = element\n    Data.set(this._element, this.constructor.DATA_KEY, this)\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY)\n    EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null\n    })\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated)\n  }\n\n  /** Static */\n\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY)\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n  }\n\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!')\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`\n  }\n}\n\nexport default BaseComponent\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { getElementFromSelector, isDisabled } from './index'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`\n  const name = component.NAME\n\n  EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault()\n    }\n\n    if (isDisabled(this)) {\n      return\n    }\n\n    const target = getElementFromSelector(this) || this.closest(`.${name}`)\n    const instance = component.getOrCreateInstance(target)\n\n    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n    instance[method]()\n  })\n}\n\nexport {\n  enableDismissTrigger\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n    if (closeEvent.defaultPrevented) {\n      return\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n  }\n\n  // Private\n  _destroyElement() {\n    this._element.remove()\n    EventHandler.trigger(this._element, EVENT_CLOSED)\n    this.dispose()\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this)\n\n      if (config === 'toggle') {\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n  event.preventDefault()\n\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n  const data = Button.getOrCreateInstance(button)\n\n  data.toggle()\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true\n  }\n\n  if (val === 'false') {\n    return false\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val)\n  }\n\n  if (val === '' || val === 'null') {\n    return null\n  }\n\n  return val\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {}\n    }\n\n    const attributes = {}\n\n    Object.keys(element.dataset)\n      .filter(key => key.startsWith('bs'))\n      .forEach(key => {\n        let pureKey = key.replace(/^bs/, '')\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n        attributes[pureKey] = normalizeData(element.dataset[key])\n      })\n\n    return attributes\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect()\n\n    return {\n      top: rect.top + window.pageYOffset,\n      left: rect.left + window.pageXOffset\n    }\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    }\n  }\n}\n\nexport default Manipulator\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible } from '../util/index'\n\nconst NODE_TEXT = 3\n\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector)\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children)\n      .filter(child => child.matches(selector))\n  },\n\n  parents(element, selector) {\n    const parents = []\n\n    let ancestor = element.parentNode\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor)\n      }\n\n      ancestor = ancestor.parentNode\n    }\n\n    return parents\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous]\n      }\n\n      previous = previous.previousElementSibling\n    }\n\n    return []\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next]\n      }\n\n      next = next.nextElementSibling\n    }\n\n    return []\n  },\n\n  focusableChildren(element) {\n    const focusables = [\n      'a',\n      'button',\n      'input',\n      'textarea',\n      'select',\n      'details',\n      '[tabindex]',\n      '[contenteditable=\"true\"]'\n    ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(', ')\n\n    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n  }\n}\n\nexport default SelectorEngine\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  getElementFromSelector,\n  isRTL,\n  isVisible,\n  getNextActiveElement,\n  reflow,\n  triggerTransitionEnd,\n  typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n}\n\nconst DefaultType = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n}\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_INDICATOR = '[data-bs-target]'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n\n    this._items = null\n    this._interval = null\n    this._activeElement = null\n    this._isPaused = false\n    this._isSliding = false\n    this.touchTimeout = null\n    this.touchStartX = 0\n    this.touchDeltaX = 0\n\n    this._config = this._getConfig(config)\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n    this._pointerEvent = Boolean(window.PointerEvent)\n\n    this._addEventListeners()\n  }\n\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  next() {\n    this._slide(ORDER_NEXT)\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next()\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV)\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element)\n      this.cycle(true)\n    }\n\n    clearInterval(this._interval)\n    this._interval = null\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval)\n      this._interval = null\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval()\n\n      this._interval = setInterval(\n        (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n        this._config.interval\n      )\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n    const activeIndex = this._getItemIndex(this._activeElement)\n\n    if (index > this._items.length - 1 || index < 0) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n      return\n    }\n\n    if (activeIndex === index) {\n      this.pause()\n      this.cycle()\n      return\n    }\n\n    const order = index > activeIndex ?\n      ORDER_NEXT :\n      ORDER_PREV\n\n    this._slide(order, this._items[index])\n  }\n\n  // Private\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    }\n    typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX)\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return\n    }\n\n    const direction = absDeltax / this.touchDeltaX\n\n    this.touchDeltaX = 0\n\n    if (!direction) {\n      return\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT)\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event))\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event))\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners()\n    }\n  }\n\n  _addTouchEventListeners() {\n    const hasPointerPenTouch = event => {\n      return this._pointerEvent &&\n        (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n    }\n\n    const start = event => {\n      if (hasPointerPenTouch(event)) {\n        this.touchStartX = event.clientX\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX\n      }\n    }\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ?\n        0 :\n        event.touches[0].clientX - this.touchStartX\n    }\n\n    const end = event => {\n      if (hasPointerPenTouch(event)) {\n        this.touchDeltaX = event.clientX - this.touchStartX\n      }\n\n      this._handleSwipe()\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n\n        this.pause()\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout)\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n      }\n    }\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault())\n    })\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event))\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event))\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event))\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event))\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event))\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key]\n    if (direction) {\n      event.preventDefault()\n      this._slide(direction)\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ?\n      SelectorEngine.find(SELECTOR_ITEM, element.parentNode) :\n      []\n\n    return this._items.indexOf(element)\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap)\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget)\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element))\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    })\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n      activeIndicator.removeAttribute('aria-current')\n\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement)\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE)\n          indicators[i].setAttribute('aria-current', 'true')\n          break\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n\n    if (!element) {\n      return\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n      this._config.interval = elementInterval\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder)\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n    const activeElementIndex = this._getItemIndex(activeElement)\n    const nextElement = element || this._getItemByOrder(order, activeElement)\n\n    const nextElementIndex = this._getItemIndex(nextElement)\n    const isCycling = Boolean(this._interval)\n\n    const isNext = order === ORDER_NEXT\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n    const eventDirectionName = this._orderToDirection(order)\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE)) {\n      this._isSliding = false\n      return\n    }\n\n    if (this._isSliding) {\n      return\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n    if (slideEvent.defaultPrevented) {\n      return\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return\n    }\n\n    this._isSliding = true\n\n    if (isCycling) {\n      this.pause()\n    }\n\n    this._setActiveIndicatorElement(nextElement)\n    this._activeElement = nextElement\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      })\n    }\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName)\n\n      reflow(nextElement)\n\n      activeElement.classList.add(directionalClassName)\n      nextElement.classList.add(directionalClassName)\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName)\n        nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n        activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n        this._isSliding = false\n\n        setTimeout(triggerSlidEvent, 0)\n      }\n\n      this._queueCallback(completeCallBack, activeElement, true)\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE)\n      nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n      this._isSliding = false\n      triggerSlidEvent()\n    }\n\n    if (isCycling) {\n      this.cycle()\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n  }\n\n  // Static\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config)\n\n    let { _config } = data\n    if (typeof config === 'object') {\n      _config = {\n        ..._config,\n        ...config\n      }\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide\n\n    if (typeof config === 'number') {\n      data.to(config)\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`)\n      }\n\n      data[action]()\n    } else if (_config.interval && _config.ride) {\n      data.pause()\n      data.cycle()\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config)\n    })\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this)\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return\n    }\n\n    const config = {\n      ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    }\n    const slideIndex = this.getAttribute('data-bs-slide-to')\n\n    if (slideIndex) {\n      config.interval = false\n    }\n\n    Carousel.carouselInterface(target, config)\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex)\n    }\n\n    event.preventDefault()\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler)\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]))\n  }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  getElement,\n  getSelectorFromElement,\n  getElementFromSelector,\n  reflow,\n  typeCheckConfig\n} from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n  toggle: true,\n  parent: null\n}\n\nconst DefaultType = {\n  toggle: 'boolean',\n  parent: '(null|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n\n    this._isTransitioning = false\n    this._config = this._getConfig(config)\n    this._triggerArray = []\n\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i]\n      const selector = getSelectorFromElement(elem)\n      const filterElement = SelectorEngine.find(selector)\n        .filter(foundElem => foundElem === this._element)\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector\n        this._triggerArray.push(elem)\n      }\n    }\n\n    this._initializeChildren()\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n    }\n\n    if (this._config.toggle) {\n      this.toggle()\n    }\n  }\n\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  toggle() {\n    if (this._isShown()) {\n      this.hide()\n    } else {\n      this.show()\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return\n    }\n\n    let actives = []\n    let activesData\n\n    if (this._config.parent) {\n      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)) // remove children if greater depth\n    }\n\n    const container = SelectorEngine.findOne(this._selector)\n    if (actives.length) {\n      const tempActiveData = actives.find(elem => container !== elem)\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null\n\n      if (activesData && activesData._isTransitioning) {\n        return\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    actives.forEach(elemActive => {\n      if (container !== elemActive) {\n        Collapse.getOrCreateInstance(elemActive, { toggle: false }).hide()\n      }\n\n      if (!activesData) {\n        Data.set(elemActive, DATA_KEY, null)\n      }\n    })\n\n    const dimension = this._getDimension()\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE)\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n    this._element.style[dimension] = 0\n\n    this._addAriaAndCollapsedClass(this._triggerArray, true)\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n      this._element.style[dimension] = ''\n\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n    }\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n    const scrollSize = `scroll${capitalizedDimension}`\n\n    this._queueCallback(complete, this._element, true)\n    this._element.style[dimension] = `${this._element[scrollSize]}px`\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n    const triggerArrayLength = this._triggerArray.length\n    for (let i = 0; i < triggerArrayLength; i++) {\n      const trigger = this._triggerArray[i]\n      const elem = getElementFromSelector(trigger)\n\n      if (elem && !this._isShown(elem)) {\n        this._addAriaAndCollapsedClass([trigger], false)\n      }\n    }\n\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.style[dimension] = ''\n\n    this._queueCallback(complete, this._element, true)\n  }\n\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  // Private\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    }\n    config.toggle = Boolean(config.toggle) // Coerce string values\n    config.parent = getElement(config.parent)\n    typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n  }\n\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return\n    }\n\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n    SelectorEngine.find(SELECTOR_DATA_TOGGLE, this._config.parent).filter(elem => !children.includes(elem))\n      .forEach(element => {\n        const selected = getElementFromSelector(element)\n\n        if (selected) {\n          this._addAriaAndCollapsedClass([element], this._isShown(selected))\n        }\n      })\n  }\n\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return\n    }\n\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED)\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED)\n      }\n\n      elem.setAttribute('aria-expanded', isOpen)\n    })\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const _config = {}\n      if (typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false\n      }\n\n      const data = Collapse.getOrCreateInstance(this, _config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n    event.preventDefault()\n  }\n\n  const selector = getSelectorFromElement(this)\n  const selectorElements = SelectorEngine.find(selector)\n\n  selectorElements.forEach(element => {\n    Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n  })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\n\nimport {\n  defineJQueryPlugin,\n  getElement,\n  getElementFromSelector,\n  getNextActiveElement,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n  typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst SPACE_KEY = 'Space'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_NAVBAR = 'navbar'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\n\nconst Default = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n}\n\nconst DefaultType = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n\n    this._popper = null\n    this._config = this._getConfig(config)\n    this._menu = this._getMenuElement()\n    this._inNavbar = this._detectNavbar()\n  }\n\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  toggle() {\n    return this._isShown() ? this.hide() : this.show()\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._isShown(this._menu)) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element)\n    // Totally disable Popper for Dropdowns in Navbar\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none')\n    } else {\n      this._createPopper(parent)\n    }\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement &&\n      !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children)\n        .forEach(elem => EventHandler.on(elem, 'mouseover', noop))\n    }\n\n    this._element.focus()\n    this._element.setAttribute('aria-expanded', true)\n\n    this._menu.classList.add(CLASS_NAME_SHOW)\n    this._element.classList.add(CLASS_NAME_SHOW)\n    EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._isShown(this._menu)) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    this._completeHide(relatedTarget)\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    super.dispose()\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar()\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Private\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children)\n        .forEach(elem => EventHandler.off(elem, 'mouseover', noop))\n    }\n\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW)\n    this._element.classList.remove(CLASS_NAME_SHOW)\n    this._element.setAttribute('aria-expanded', 'false')\n    Manipulator.removeDataAttribute(this._menu, 'popper')\n    EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n  }\n\n  _getConfig(config) {\n    config = {\n      ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    }\n\n    typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) &&\n      typeof config.reference.getBoundingClientRect !== 'function'\n    ) {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n    }\n\n    return config\n  }\n\n  _createPopper(parent) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n    }\n\n    let referenceElement = this._element\n\n    if (this._config.reference === 'parent') {\n      referenceElement = parent\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference)\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference\n    }\n\n    const popperConfig = this._getPopperConfig()\n    const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false)\n\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n\n    if (isDisplayStatic) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static')\n    }\n  }\n\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0]\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT\n    }\n\n    // We need to trim the value because custom properties can also include spaces\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      },\n      {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }\n\n    // Disable Popper if we have a static display\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    }\n  }\n\n  _selectMenuItem({ key, target }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible)\n\n    if (!items.length) {\n      return\n    }\n\n    // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY))) {\n      return\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i])\n      if (!context || context._config.autoClose === false) {\n        continue\n      }\n\n      if (!context._isShown()) {\n        continue\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      }\n\n      if (event) {\n        const composedPath = event.composedPath()\n        const isMenuTarget = composedPath.includes(context._menu)\n        if (\n          composedPath.includes(context._element) ||\n          (context._config.autoClose === 'inside' && !isMenuTarget) ||\n          (context._config.autoClose === 'outside' && isMenuTarget)\n        ) {\n          continue\n        }\n\n        // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n        if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event\n        }\n      }\n\n      context._completeHide(relatedTarget)\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ?\n      event.key === SPACE_KEY || (event.key !== ESCAPE_KEY &&\n      ((event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY) ||\n        event.target.closest(SELECTOR_MENU))) :\n      !REGEXP_KEYDOWN.test(event.key)) {\n      return\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW)\n\n    if (!isActive && event.key === ESCAPE_KEY) {\n      return\n    }\n\n    event.preventDefault()\n    event.stopPropagation()\n\n    if (isDisabled(this)) {\n      return\n    }\n\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0]\n    const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n    if (event.key === ESCAPE_KEY) {\n      instance.hide()\n      return\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        instance.show()\n      }\n\n      instance._selectMenuItem(event)\n      return\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus()\n    }\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  event.preventDefault()\n  Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine'\nimport Manipulator from '../dom/manipulator'\nimport { isElement } from './index'\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth\n    return Math.abs(window.innerWidth - documentWidth)\n  }\n\n  hide() {\n    const width = this.getWidth()\n    this._disableOverFlow()\n    // give padding to element to balance the hidden scrollbar width\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width)\n    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width)\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width)\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow')\n    this._element.style.overflow = 'hidden'\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth()\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return\n      }\n\n      this._saveInitialAttribute(element, styleProp)\n      const calculatedValue = window.getComputedStyle(element)[styleProp]\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow')\n    this._resetElementAttributes(this._element, 'paddingRight')\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight')\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight')\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp]\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue)\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp)\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp)\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp)\n        element.style[styleProp] = value\n      }\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector)\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack)\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0\n  }\n}\n\nexport default ScrollBarHelper\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { execute, executeAfterTransition, getElement, reflow, typeCheckConfig } from './index'\n\nconst Default = {\n  className: 'modal-backdrop',\n  isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body', // give the choice to place backdrop under different elements\n  clickCallback: null\n}\n\nconst DefaultType = {\n  className: 'string',\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n}\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config)\n    this._isAppended = false\n    this._element = null\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._append()\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement())\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      execute(callback)\n    })\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      this.dispose()\n      execute(callback)\n    })\n  }\n\n  // Private\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div')\n      backdrop.className = this._config.className\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE)\n      }\n\n      this._element = backdrop\n    }\n\n    return this._element\n  }\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...(typeof config === 'object' ? config : {})\n    }\n\n    // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n    config.rootElement = getElement(config.rootElement)\n    typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return\n    }\n\n    this._config.rootElement.append(this._getElement())\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback)\n    })\n\n    this._isAppended = true\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n    this._element.remove()\n    this._isAppended = false\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n  }\n}\n\nexport default Backdrop\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport SelectorEngine from '../dom/selector-engine'\nimport { typeCheckConfig } from './index'\n\nconst Default = {\n  trapElement: null, // The element to trap focus inside of\n  autofocus: true\n}\n\nconst DefaultType = {\n  trapElement: 'element',\n  autofocus: 'boolean'\n}\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nclass FocusTrap {\n  constructor(config) {\n    this._config = this._getConfig(config)\n    this._isActive = false\n    this._lastTabNavDirection = null\n  }\n\n  activate() {\n    const { trapElement, autofocus } = this._config\n\n    if (this._isActive) {\n      return\n    }\n\n    if (autofocus) {\n      trapElement.focus()\n    }\n\n    EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n    EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n    this._isActive = true\n  }\n\n  deactivate() {\n    if (!this._isActive) {\n      return\n    }\n\n    this._isActive = false\n    EventHandler.off(document, EVENT_KEY)\n  }\n\n  // Private\n\n  _handleFocusin(event) {\n    const { target } = event\n    const { trapElement } = this._config\n\n    if (target === document || target === trapElement || trapElement.contains(target)) {\n      return\n    }\n\n    const elements = SelectorEngine.focusableChildren(trapElement)\n\n    if (elements.length === 0) {\n      trapElement.focus()\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus()\n    } else {\n      elements[0].focus()\n    }\n  }\n\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return\n    }\n\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n  }\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...(typeof config === 'object' ? config : {})\n    }\n    typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n}\n\nexport default FocusTrap\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  getElementFromSelector,\n  isRTL,\n  isVisible,\n  reflow,\n  typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport ScrollBarHelper from './util/scrollbar'\nimport BaseComponent from './base-component'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n\n    this._config = this._getConfig(config)\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._isShown = false\n    this._ignoreBackdropClick = false\n    this._isTransitioning = false\n    this._scrollBar = new ScrollBarHelper()\n  }\n\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n      relatedTarget\n    })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true\n    }\n\n    this._scrollBar.hide()\n\n    document.body.classList.add(CLASS_NAME_OPEN)\n\n    this._adjustDialog()\n\n    this._setEscapeEvent()\n    this._setResizeEvent()\n\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true\n        }\n      })\n    })\n\n    this._showBackdrop(() => this._showElement(relatedTarget))\n  }\n\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = false\n    const isAnimated = this._isAnimated()\n\n    if (isAnimated) {\n      this._isTransitioning = true\n    }\n\n    this._setEscapeEvent()\n    this._setResizeEvent()\n\n    this._focustrap.deactivate()\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS)\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS)\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated)\n  }\n\n  dispose() {\n    [window, this._dialog]\n      .forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY))\n\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n    super.dispose()\n  }\n\n  handleUpdate() {\n    this._adjustDialog()\n  }\n\n  // Private\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    }\n    typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated()\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.append(this._element)\n    }\n\n    this._element.style.display = 'block'\n    this._element.removeAttribute('aria-hidden')\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.scrollTop = 0\n\n    if (modalBody) {\n      modalBody.scrollTop = 0\n    }\n\n    if (isAnimated) {\n      reflow(this._element)\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW)\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate()\n      }\n\n      this._isTransitioning = false\n      EventHandler.trigger(this._element, EVENT_SHOWN, {\n        relatedTarget\n      })\n    }\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated)\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          event.preventDefault()\n          this.hide()\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY) {\n          this._triggerBackdropTransition()\n        }\n      })\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS)\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog())\n    } else {\n      EventHandler.off(window, EVENT_RESIZE)\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none'\n    this._element.setAttribute('aria-hidden', true)\n    this._element.removeAttribute('aria-modal')\n    this._element.removeAttribute('role')\n    this._isTransitioning = false\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN)\n      this._resetAdjustments()\n      this._scrollBar.reset()\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    })\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false\n        return\n      }\n\n      if (event.target !== event.currentTarget) {\n        return\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide()\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition()\n      }\n    })\n\n    this._backdrop.show(callback)\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE)\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const { classList, scrollHeight, style } = this._element\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight\n\n    // return if the following background transition hasn't yet completed\n    if ((!isModalOverflowing && style.overflowY === 'hidden') || classList.contains(CLASS_NAME_STATIC)) {\n      return\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden'\n    }\n\n    classList.add(CLASS_NAME_STATIC)\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC)\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = ''\n        }, this._dialog)\n      }\n    }, this._dialog)\n\n    this._element.focus()\n  }\n\n  // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const scrollbarWidth = this._scrollBar.getWidth()\n    const isBodyOverflowing = scrollbarWidth > 0\n\n    if ((!isBodyOverflowing && isModalOverflowing && !isRTL()) || (isBodyOverflowing && !isModalOverflowing && isRTL())) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`\n    }\n\n    if ((isBodyOverflowing && !isModalOverflowing && !isRTL()) || (!isBodyOverflowing && isModalOverflowing && isRTL())) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = ''\n    this._element.style.paddingRight = ''\n  }\n\n  // Static\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](relatedTarget)\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  EventHandler.one(target, EVENT_SHOW, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN, () => {\n      if (isVisible(this)) {\n        this.focus()\n      }\n    })\n  })\n\n  // avoid conflict when clicking moddal toggler while another one is open\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (allReadyOpen) {\n    Modal.getInstance(allReadyOpen).hide()\n  }\n\n  const data = Modal.getOrCreateInstance(target)\n\n  data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  getElementFromSelector,\n  isDisabled,\n  isVisible,\n  typeCheckConfig\n} from './util/index'\nimport ScrollBarHelper from './util/scrollbar'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport SelectorEngine from './dom/selector-engine'\nimport Manipulator from './dom/manipulator'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n}\n\nconst DefaultType = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n}\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n\n    this._config = this._getConfig(config)\n    this._isShown = false\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._addEventListeners()\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  // Public\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._element.style.visibility = 'visible'\n\n    this._backdrop.show()\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide()\n    }\n\n    this._element.removeAttribute('aria-hidden')\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.classList.add(CLASS_NAME_SHOW)\n\n    const completeCallBack = () => {\n      if (!this._config.scroll) {\n        this._focustrap.activate()\n      }\n\n      EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n    }\n\n    this._queueCallback(completeCallBack, this._element, true)\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._focustrap.deactivate()\n    this._element.blur()\n    this._isShown = false\n    this._element.classList.remove(CLASS_NAME_SHOW)\n    this._backdrop.hide()\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true)\n      this._element.removeAttribute('aria-modal')\n      this._element.removeAttribute('role')\n      this._element.style.visibility = 'hidden'\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset()\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._queueCallback(completeCallback, this._element, true)\n  }\n\n  dispose() {\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n    super.dispose()\n  }\n\n  // Private\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    }\n    typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide()\n      }\n    })\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus()\n    }\n  })\n\n  // avoid conflict when clicking a toggler of an offcanvas, while another is open\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide()\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target)\n  data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () =>\n  SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show())\n)\n\nenableDismissTrigger(Offcanvas)\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase()\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n    }\n\n    return true\n  }\n\n  const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n\n  // Check if a regular expression validates the attribute.\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attributeName)) {\n      return true\n    }\n  }\n\n  return false\n}\n\nexport const DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml)\n  }\n\n  const domParser = new window.DOMParser()\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const element = elements[i]\n    const elementName = element.nodeName.toLowerCase()\n\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove()\n\n      continue\n    }\n\n    const attributeList = [].concat(...element.attributes)\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n    attributeList.forEach(attribute => {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName)\n      }\n    })\n  }\n\n  return createdDocument.body.innerHTML\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\n\nimport {\n  defineJQueryPlugin,\n  findShadowRoot,\n  getElement,\n  getUID,\n  isElement,\n  isRTL,\n  noop,\n  typeCheckConfig\n} from './util/index'\nimport { DefaultAllowlist, sanitizeHtml } from './util/sanitizer'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst CLASS_PREFIX = 'bs-tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst DefaultType = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n}\n\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' +\n              '<div class=\"tooltip-arrow\"></div>' +\n              '<div class=\"tooltip-inner\"></div>' +\n            '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n}\n\nconst Event = {\n  HIDE: `hide${EVENT_KEY}`,\n  HIDDEN: `hidden${EVENT_KEY}`,\n  SHOW: `show${EVENT_KEY}`,\n  SHOWN: `shown${EVENT_KEY}`,\n  INSERTED: `inserted${EVENT_KEY}`,\n  CLICK: `click${EVENT_KEY}`,\n  FOCUSIN: `focusin${EVENT_KEY}`,\n  FOCUSOUT: `focusout${EVENT_KEY}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n    }\n\n    super(element)\n\n    // private\n    this._isEnabled = true\n    this._timeout = 0\n    this._hoverState = ''\n    this._activeTrigger = {}\n    this._popper = null\n\n    // Protected\n    this._config = this._getConfig(config)\n    this.tip = null\n\n    this._setListeners()\n  }\n\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  static get Event() {\n    return Event\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  // Public\n\n  enable() {\n    this._isEnabled = true\n  }\n\n  disable() {\n    this._isEnabled = false\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event)\n\n      context._activeTrigger.click = !context._activeTrigger.click\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context)\n      } else {\n        context._leave(null, context)\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW)) {\n        this._leave(null, this)\n        return\n      }\n\n      this._enter(null, this)\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout)\n\n    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n    if (this.tip) {\n      this.tip.remove()\n    }\n\n    this._disposePopper()\n    super.dispose()\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements')\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW)\n    const shadowRoot = findShadowRoot(this._element)\n    const isInTheDom = shadowRoot === null ?\n      this._element.ownerDocument.documentElement.contains(this._element) :\n      shadowRoot.contains(this._element)\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return\n    }\n\n    // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title`\n    // This will be removed later in favor of a `setContent` method\n    if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) {\n      this._disposePopper()\n      this.tip.remove()\n      this.tip = null\n    }\n\n    const tip = this.getTipElement()\n    const tipId = getUID(this.constructor.NAME)\n\n    tip.setAttribute('id', tipId)\n    this._element.setAttribute('aria-describedby', tipId)\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE)\n    }\n\n    const placement = typeof this._config.placement === 'function' ?\n      this._config.placement.call(this, tip, this._element) :\n      this._config.placement\n\n    const attachment = this._getAttachment(placement)\n    this._addAttachmentClass(attachment)\n\n    const { container } = this._config\n    Data.set(tip, this.constructor.DATA_KEY, this)\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip)\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED)\n    }\n\n    if (this._popper) {\n      this._popper.update()\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW)\n\n    const customClass = this._resolvePossibleFunction(this._config.customClass)\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '))\n    }\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop)\n      })\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState\n\n      this._hoverState = null\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN)\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this)\n      }\n    }\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE)\n    this._queueCallback(complete, this.tip, isAnimated)\n  }\n\n  hide() {\n    if (!this._popper) {\n      return\n    }\n\n    const tip = this.getTipElement()\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove()\n      }\n\n      this._cleanTipClass()\n      this._element.removeAttribute('aria-describedby')\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN)\n\n      this._disposePopper()\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children)\n        .forEach(element => EventHandler.off(element, 'mouseover', noop))\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false\n    this._activeTrigger[TRIGGER_FOCUS] = false\n    this._activeTrigger[TRIGGER_HOVER] = false\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE)\n    this._queueCallback(complete, this.tip, isAnimated)\n    this._hoverState = ''\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update()\n    }\n  }\n\n  // Protected\n\n  isWithContent() {\n    return Boolean(this.getTitle())\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip\n    }\n\n    const element = document.createElement('div')\n    element.innerHTML = this._config.template\n\n    const tip = element.children[0]\n    this.setContent(tip)\n    tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n\n    this.tip = tip\n    return this.tip\n  }\n\n  setContent(tip) {\n    this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER)\n  }\n\n  _sanitizeAndSetContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template)\n\n    if (!content && templateElement) {\n      templateElement.remove()\n      return\n    }\n\n    // we use append for html objects to maintain js events\n    this.setElementContent(templateElement, content)\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return\n    }\n\n    if (isElement(content)) {\n      content = getElement(content)\n\n      // content is a DOM node or a jQuery\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = ''\n          element.append(content)\n        }\n      } else {\n        element.textContent = content.textContent\n      }\n\n      return\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn)\n      }\n\n      element.innerHTML = content\n    } else {\n      element.textContent = content\n    }\n  }\n\n  getTitle() {\n    const title = this._element.getAttribute('data-bs-original-title') || this._config.title\n\n    return this._resolvePossibleFunction(title)\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end'\n    }\n\n    if (attachment === 'left') {\n      return 'start'\n    }\n\n    return attachment\n  }\n\n  // Private\n\n  _initializeOnDelegatedTarget(event, context) {\n    return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _resolvePossibleFunction(content) {\n    return typeof content === 'function' ? content.call(this._element) : content\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [\n        {\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        },\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        },\n        {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        },\n        {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }\n      ],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data)\n        }\n      }\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    }\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`)\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()]\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ')\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event))\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ?\n          this.constructor.Event.MOUSEENTER :\n          this.constructor.Event.FOCUSIN\n        const eventOut = trigger === TRIGGER_HOVER ?\n          this.constructor.Event.MOUSELEAVE :\n          this.constructor.Event.FOCUSOUT\n\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event))\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event))\n      }\n    })\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide()\n      }\n    }\n\n    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n    if (this._config.selector) {\n      this._config = {\n        ...this._config,\n        trigger: 'manual',\n        selector: ''\n      }\n    } else {\n      this._fixTitle()\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title')\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title')\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '')\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title)\n      }\n\n      this._element.setAttribute('title', '')\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context)\n\n    if (event) {\n      context._activeTrigger[\n        event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n      ] = true\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW\n      return\n    }\n\n    clearTimeout(context._timeout)\n\n    context._hoverState = HOVER_STATE_SHOW\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show()\n      return\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show()\n      }\n    }, context._config.delay.show)\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context)\n\n    if (event) {\n      context._activeTrigger[\n        event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n      ] = context._element.contains(event.relatedTarget)\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return\n    }\n\n    clearTimeout(context._timeout)\n\n    context._hoverState = HOVER_STATE_OUT\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide()\n      return\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide()\n      }\n    }, context._config.delay.hide)\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr]\n      }\n    })\n\n    config = {\n      ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    }\n\n    config.container = config.container === false ? document.body : getElement(config.container)\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      }\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString()\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString()\n    }\n\n    typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn)\n    }\n\n    return config\n  }\n\n  _getDelegateConfig() {\n    const config = {}\n\n    for (const key in this._config) {\n      if (this.constructor.Default[key] !== this._config[key]) {\n        config[key] = this._config[key]\n      }\n    }\n\n    // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n    return config\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement()\n    const basicClassPrefixRegex = new RegExp(`(^|\\\\s)${this._getBasicClassPrefix()}\\\\S+`, 'g')\n    const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex)\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim())\n        .forEach(tClass => tip.classList.remove(tClass))\n    }\n  }\n\n  _getBasicClassPrefix() {\n    return CLASS_PREFIX\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const { state } = popperData\n\n    if (!state) {\n      return\n    }\n\n    this.tip = state.elements.popper\n    this._cleanTipClass()\n    this._addAttachmentClass(this._getAttachment(state.placement))\n  }\n\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy()\n      this._popper = null\n    }\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst CLASS_PREFIX = 'bs-popover'\n\nconst Default = {\n  ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' +\n              '<div class=\"popover-arrow\"></div>' +\n              '<h3 class=\"popover-header\"></h3>' +\n              '<div class=\"popover-body\"></div>' +\n            '</div>'\n}\n\nconst DefaultType = {\n  ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n}\n\nconst Event = {\n  HIDE: `hide${EVENT_KEY}`,\n  HIDDEN: `hidden${EVENT_KEY}`,\n  SHOW: `show${EVENT_KEY}`,\n  SHOWN: `shown${EVENT_KEY}`,\n  INSERTED: `inserted${EVENT_KEY}`,\n  CLICK: `click${EVENT_KEY}`,\n  FOCUSIN: `focusin${EVENT_KEY}`,\n  FOCUSOUT: `focusout${EVENT_KEY}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  static get Event() {\n    return Event\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  // Overrides\n\n  isWithContent() {\n    return this.getTitle() || this._getContent()\n  }\n\n  setContent(tip) {\n    this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE)\n    this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT)\n  }\n\n  // Private\n\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content)\n  }\n\n  _getBasicClassPrefix() {\n    return CLASS_PREFIX\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  getElement,\n  getSelectorFromElement,\n  typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n}\n\nconst DefaultType = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element\n    this._config = this._getConfig(config)\n    this._offsets = []\n    this._targets = []\n    this._activeTarget = null\n    this._scrollHeight = 0\n\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process())\n\n    this.refresh()\n    this._process()\n  }\n\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ?\n      METHOD_OFFSET :\n      METHOD_POSITION\n\n    const offsetMethod = this._config.method === 'auto' ?\n      autoMethod :\n      this._config.method\n\n    const offsetBase = offsetMethod === METHOD_POSITION ?\n      this._getScrollTop() :\n      0\n\n    this._offsets = []\n    this._targets = []\n    this._scrollHeight = this._getScrollHeight()\n\n    const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target)\n\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element)\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect()\n        if (targetBCR.width || targetBCR.height) {\n          return [\n            Manipulator[offsetMethod](target).top + offsetBase,\n            targetSelector\n          ]\n        }\n      }\n\n      return null\n    })\n      .filter(item => item)\n      .sort((a, b) => a[0] - b[0])\n      .forEach(item => {\n        this._offsets.push(item[0])\n        this._targets.push(item[1])\n      })\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY)\n    super.dispose()\n  }\n\n  // Private\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    }\n\n    config.target = getElement(config.target) || document.documentElement\n\n    typeCheckConfig(NAME, config, DefaultType)\n\n    return config\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ?\n      this._scrollElement.pageYOffset :\n      this._scrollElement.scrollTop\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(\n      document.body.scrollHeight,\n      document.documentElement.scrollHeight\n    )\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ?\n      window.innerHeight :\n      this._scrollElement.getBoundingClientRect().height\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset\n    const scrollHeight = this._getScrollHeight()\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1]\n\n      if (this._activeTarget !== target) {\n        this._activate(target)\n      }\n\n      return\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null\n      this._clear()\n      return\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] &&\n          scrollTop >= this._offsets[i] &&\n          (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1])\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i])\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target\n\n    this._clear()\n\n    const queries = SELECTOR_LINK_ITEMS.split(',')\n      .map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n    const link = SelectorEngine.findOne(queries.join(','), this._config.target)\n\n    link.classList.add(CLASS_NAME_ACTIVE)\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN))\n        .classList.add(CLASS_NAME_ACTIVE)\n    } else {\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP)\n        .forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n            .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))\n\n          // Handle special case when .nav-link is inside .nav-item\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS)\n            .forEach(navItem => {\n              SelectorEngine.children(navItem, SELECTOR_NAV_LINKS)\n                .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))\n            })\n        })\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    })\n  }\n\n  _clear() {\n    SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target)\n      .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n      .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY)\n    .forEach(spy => new ScrollSpy(spy))\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  getElementFromSelector,\n  isDisabled,\n  reflow\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  show() {\n    if ((this._element.parentNode &&\n      this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n      this._element.classList.contains(CLASS_NAME_ACTIVE))) {\n      return\n    }\n\n    let previous\n    const target = getElementFromSelector(this._element)\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP)\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n      previous = SelectorEngine.find(itemSelector, listElement)\n      previous = previous[previous.length - 1]\n    }\n\n    const hideEvent = previous ?\n      EventHandler.trigger(previous, EVENT_HIDE, {\n        relatedTarget: this._element\n      }) :\n      null\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n      relatedTarget: previous\n    })\n\n    if (showEvent.defaultPrevented || (hideEvent !== null && hideEvent.defaultPrevented)) {\n      return\n    }\n\n    this._activate(this._element, listElement)\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN, {\n        relatedTarget: this._element\n      })\n      EventHandler.trigger(this._element, EVENT_SHOWN, {\n        relatedTarget: previous\n      })\n    }\n\n    if (target) {\n      this._activate(target, target.parentNode, complete)\n    } else {\n      complete()\n    }\n  }\n\n  // Private\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n      SelectorEngine.find(SELECTOR_ACTIVE_UL, container) :\n      SelectorEngine.children(container, SELECTOR_ACTIVE)\n\n    const active = activeElements[0]\n    const isTransitioning = callback && (active && active.classList.contains(CLASS_NAME_FADE))\n\n    const complete = () => this._transitionComplete(element, active, callback)\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW)\n      this._queueCallback(complete, element, true)\n    } else {\n      complete()\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE)\n\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode)\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE)\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false)\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE)\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true)\n    }\n\n    reflow(element)\n\n    if (element.classList.contains(CLASS_NAME_FADE)) {\n      element.classList.add(CLASS_NAME_SHOW)\n    }\n\n    let parent = element.parentNode\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN)\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement)\n          .forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE))\n      }\n\n      element.setAttribute('aria-expanded', true)\n    }\n\n    if (callback) {\n      callback()\n    }\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  const data = Tab.getOrCreateInstance(this)\n  data.show()\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  reflow,\n  typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n}\n\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n\n    this._config = this._getConfig(config)\n    this._timeout = null\n    this._hasMouseInteraction = false\n    this._hasKeyboardInteraction = false\n    this._setListeners()\n  }\n\n  // Getters\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._clearTimeout()\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE)\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n\n      this._maybeScheduleHide()\n    }\n\n    this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n    reflow(this._element)\n    this._element.classList.add(CLASS_NAME_SHOW)\n    this._element.classList.add(CLASS_NAME_SHOWING)\n\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      this._element.classList.remove(CLASS_NAME_SHOW)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOWING)\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  dispose() {\n    this._clearTimeout()\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW)\n    }\n\n    super.dispose()\n  }\n\n  // Private\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    }\n\n    typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n    return config\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide()\n    }, this._config.delay)\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting\n        break\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting\n        break\n      default:\n        break\n    }\n\n    if (isInteracting) {\n      this._clearTimeout()\n      return\n    }\n\n    const nextElement = event.relatedTarget\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return\n    }\n\n    this._maybeScheduleHide()\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout)\n    this._timeout = null\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config](this)\n      }\n    })\n  }\n}\n\nenableDismissTrigger(Toast)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n", "import \"@hotwired/turbo-rails\";\nimport \"./front_controllers\";\n\nimport \"./common/jquery\";\nimport * as bootstrap from \"bootstrap\";\nwindow.bootstrap = bootstrap;\nimport BigNumber from \"bignumber.js\";\nwindow.BigNumber = BigNumber;\nimport \"./front/flash_message.js\"\n", "showNotice = message => {\n  $(\".front-alert.alert-success\").css(\"display\", \"block\");\n  $(\"#notice-message\").text(message);\n}\nhideNotice = () => {\n  $(\".front-alert.alert-success\").css(\"display\", \"none\");\n}\n\nshowAlert = (message) => {\n  $(\".front-alert.alert-danger\").css(\"display\", \"block\");\n  $(\"#alert-message\").text(message);\n}\nhideAlert = () => {\n  $(\".front-alert.alert-danger\").css(\"display\", \"none\");\n}\n"],
  "mappings": "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A,UACA,MACA,QACA,KACA,OACA,SACA,OACA,OACA,SACA,UACA,MACA,QACA,OACA,QACA,WACA,QACA,YACA,SACA,OACA,QACA,MACA,YACA,UACA,UACA,KACA,WACA,OACA,YACA,KACA,MACA,MACA,QACA,KACA,QACA,WACA,UACA,UACA,SACA,UACA,UACA,QACA,UACA,UACA,SACA,OACA,WACA,OACA,SACA,SACA,MACA,YACA,YACA,SACA,MACA,SACA,QACA,MACA,SACA,MACA,KACA,MACA,OACA,SACA;AAIK,YAAM,MAAM,QAAO,CACxB,OACA,KACA,YACA,eACA,gBACA,gBACA,iBACA,oBACA,UACA,YACA,QACA,QACA,WACA,UACA,QACA,KACA,SACA,YACA,SACA,SACA,QACA,kBACA,UACA,QACA,YACA,SACA,QACA,WACA,WACA,YACA,kBACA,QACA,QACA,SACA,UACA,UACA,QACA,YACA,SACA,QACA,SACA,QACA;AAGK,YAAM,aAAa,QAAO,CAC/B,WACA,iBACA,uBACA,eACA,oBACA,qBACA,qBACA,kBACA,WACA,WACA,WACA,WACA,WACA,kBACA,WACA,WACA,eACA,gBACA,YACA,gBACA,sBACA,eACA,UACA;AAOK,YAAM,gBAAgB,QAAO,CAClC,WACA,iBACA,UACA,WACA,gBACA,aACA,oBACA,kBACA,iBACA,iBACA,iBACA,SACA,aACA,QACA,gBACA,aACA,WACA,iBACA,UACA,OACA,cACA,WACA;AAGK,YAAM,SAAS,QAAO,CAC3B,QACA,YACA,UACA,WACA,SACA,UACA,MACA,cACA,iBACA,MACA,MACA,SACA,WACA,YACA,SACA,QACA,MACA,UACA,SACA,UACA,QACA,QACA,WACA,UACA,OACA,SACA,OACA,UACA;AAKK,YAAM,mBAAmB,QAAO,CACrC,WACA,eACA,cACA,YACA,aACA,WACA,WACA,UACA,UACA,SACA,aACA,cACA,kBACA,eACA;AAGK,YAAM,OAAO,QAAO,CAAC;ACpRrB,YAAM,SAAO,QAAO,CACzB,UACA,UACA,SACA,OACA,kBACA,gBACA,wBACA,YACA,cACA,WACA,UACA,WACA,eACA,eACA,WACA,QACA,SACA,SACA,SACA,QACA,WACA,YACA,gBACA,UACA,eACA,YACA,YACA,WACA,OACA,YACA,2BACA,yBACA,YACA,aACA,WACA,gBACA,QACA,OACA,WACA,UACA,UACA,QACA,QACA,YACA,MACA,aACA,aACA,SACA,QACA,SACA,QACA,QACA,WACA,QACA,OACA,OACA,aACA,SACA,UACA,OACA,aACA,YACA,SACA,QACA,SACA,WACA,cACA,UACA,QACA,WACA,WACA,eACA,eACA,UACA,WACA,WACA,cACA,YACA,OACA,YACA,OACA,YACA,QACA,QACA,WACA,cACA,SACA,YACA,SACA,QACA,SACA,QACA,WACA,SACA,OACA,UACA,QACA,SACA,WACA,YACA,SACA,aACA,QACA,UACA,UACA,SACA,SACA,SACA;AAGK,YAAM,QAAM,QAAO,CACxB,iBACA,cACA,YACA,sBACA,UACA,iBACA,iBACA,WACA,iBACA,kBACA,SACA,QACA,MACA,SACA,QACA,iBACA,aACA,aACA,SACA,uBACA,+BACA,iBACA,mBACA,MACA,MACA,KACA,MACA,MACA,mBACA,aACA,WACA,WACA,OACA,YACA,aACA,OACA,QACA,gBACA,aACA,UACA,eACA,eACA,iBACA,eACA,aACA,oBACA,gBACA,cACA,gBACA,eACA,MACA,MACA,MACA,MACA,cACA,YACA,iBACA,qBACA,UACA,QACA,MACA,mBACA,MACA,OACA,KACA,MACA,MACA,MACA,MACA,WACA,aACA,cACA,YACA,QACA,gBACA,kBACA,gBACA,oBACA,kBACA,SACA,cACA,cACA,gBACA,gBACA,eACA,eACA,oBACA,aACA,OACA,QACA,SACA,UACA,QACA,OACA,QACA,cACA,UACA,YACA,WACA,SACA,UACA,eACA,UACA,YACA,eACA,QACA,cACA,uBACA,oBACA,gBACA,UACA,iBACA,uBACA,kBACA,KACA,MACA,MACA,UACA,QACA,QACA,eACA,aACA,WACA,UACA,UACA,SACA,QACA,mBACA,oBACA,oBACA,gBACA,eACA,gBACA,eACA,cACA,gBACA,oBACA,qBACA,kBACA,mBACA,qBACA,kBACA,UACA,gBACA,SACA,gBACA,kBACA,YACA,WACA,WACA,aACA,oBACA,eACA,mBACA,kBACA,cACA,QACA,MACA,MACA,WACA,UACA,WACA,cACA,WACA,cACA,iBACA,iBACA,SACA,gBACA,QACA,gBACA,oBACA,oBACA,KACA,MACA,MACA,SACA,KACA,MACA,MACA,KACA;AAGK,YAAM,WAAS,QAAO,CAC3B,UACA,eACA,SACA,YACA,SACA,gBACA,eACA,cACA,cACA,SACA,OACA,WACA,gBACA,YACA,SACA,SACA,UACA,QACA,MACA,WACA,UACA,iBACA,UACA,UACA,kBACA,aACA,YACA,eACA,WACA,WACA,iBACA,YACA,YACA,QACA,YACA,YACA,cACA,WACA,UACA,UACA,eACA,iBACA,wBACA,aACA,aACA,cACA,YACA,kBACA,kBACA,aACA,WACA,SACA;AAGK,YAAM,MAAM,QAAO,CACxB,cACA,UACA,eACA,aACA;ACrWK,YAAM,gBAAgB,KAAK;AAC3B,YAAM,WAAW,KAAK;AACtB,YAAM,YAAY,KAAK;AACvB,YAAM,YAAY,KAAK;AACvB,YAAM,iBAAiB,KAC5B;AAEK,YAAM,oBAAoB,KAAK;AAC/B,YAAM,kBAAkB,KAC7B;AAEK,YAAM,eAAe,KAAK;;;;;;;;;;;;;;;;ACMjC,YAAM,YAAY,sBAAA;AAAA,iBAAO,OAAO,WAAW,cAAc,OAAO;;AAUhE,YAAM,4BAA4B,oCAAU,cAAc,WAAU;AAClE,cACE,QAAO,iBAAP,cAAA,cAAA,WAAO,mBAAiB,YACxB,OAAO,aAAa,iBAAiB,YACrC;AACA,mBAAO;;AAMT,cAAI,SAAS;AACb,cAAM,YAAY;AAClB,cACE,UAAS,iBACT,UAAS,cAAc,aAAa,YACpC;AACA,qBAAS,UAAS,cAAc,aAAa;;AAG/C,cAAM,aAAa,cAAe,UAAS,MAAM,SAAS;AAE1D,cAAI;AACF,mBAAO,aAAa,aAAa,YAAY;cAC3C,YAD2C,qBAChC,SAAM;AACf,uBAAO;;;mBAGJ,GAAP;AAIA,oBAAQ,KACN,yBAAyB,aAAa;AAExC,mBAAO;;;AAIX,mCAA+C;AAAA,cAAtB,UAAsB,UAAA,SAAA,KAAA,UAAA,OAAA,SAAA,UAAA,KAAb;AAChC,cAAM,aAAY,oBAAC,MAAD;AAAA,mBAAU,gBAAgB;;AAM5C,qBAAU,UAAU;AAMpB,qBAAU,UAAU;AAEpB,cAAI,CAAC,WAAU,CAAC,QAAO,YAAY,QAAO,SAAS,aAAa,GAAG;AAGjE,uBAAU,cAAc;AAExB,mBAAO;;AAGT,cAAM,mBAAmB,QAAO;AAvBa,cAyBvC,YAAa,QAAb;AAzBuC,cA2B3C,mBASE,QATF,kBACA,uBAQE,QARF,qBACA,QAOE,QAPF,MACA,WAME,QANF,SACA,aAKE,QALF,YA/B2C,uBAoCzC,QAJF,cAAA,eAhC2C,yBAAA,SAgC5B,QAAO,gBAAgB,QAAO,kBAhCF,sBAiC3C,mBAGE,QAHF,iBACA,aAEE,QAFF,WACA,eACE,QADF;AAGF,cAAM,mBAAmB,SAAQ;AAEjC,cAAM,YAAY,aAAa,kBAAkB;AACjD,cAAM,iBAAiB,aAAa,kBAAkB;AACtD,cAAM,gBAAgB,aAAa,kBAAkB;AACrD,cAAM,iBAAgB,aAAa,kBAAkB;AAQrD,cAAI,OAAO,yBAAwB,YAAY;AAC7C,gBAAM,WAAW,UAAS,cAAc;AACxC,gBAAI,SAAS,WAAW,SAAS,QAAQ,eAAe;AACtD,0BAAW,SAAS,QAAQ;;;AAIhC,cAAM,qBAAqB,0BACzB,cACA;AAEF,cAAM,YAAY,qBAAqB,mBAAmB,WAAW,MAAM;AA9D9B,cAAA,YAqEzC,WAJF,iBAjE2C,UAiE3C,gBACA,qBAlE2C,UAkE3C,oBACA,yBAnE2C,UAmE3C,wBACA,uBApE2C,UAoE3C;AApE2C,cAsErC,aAAe,iBAAf;AAER,cAAI,eAAe;AACnB,cAAI;AACF,2BAAe,OAAM,WAAU,eAAe,UAAS,eAAe;mBAC/D,GAAP;;AAEF,cAAI,QAAQ;AAKZ,qBAAU,cACR,OAAO,mBAAkB,cACzB,kBACA,OAAO,eAAe,uBAAuB,eAC7C,iBAAiB;AAtF0B,cAyF3C,mBAME,eALF,cAKE,UAJF,eAIE,WAHF,eAGE,WAFF,uBAEE,mBADF,qBACE;AA/FyC,cAiGvC,oBAAmB;AAQzB,cAAI,eAAe;AACnB,cAAM,uBAAuB,SAAS,IAAT,GAAA,OAAA,qBACxB,OADwB,qBAExB,MAFwB,qBAGxB,aAHwB,qBAIxB,SAJwB,qBAKxB;AAIL,cAAI,eAAe;AACnB,cAAM,uBAAuB,SAAS,IAAT,GAAA,OAAA,qBACxB,SADwB,qBAExB,QAFwB,qBAGxB,WAHwB,qBAIxB;AASL,cAAM,0BAA0B,OAAO,KACrC,OAAO,OAAO,MAAM;YAClB,cAAc;cACZ,UAAU;cACV,cAAc;cACd,YAAY;cACZ,OAAO;;YAET,oBAAoB;cAClB,UAAU;cACV,cAAc;cACd,YAAY;cACZ,OAAO;;YAET,gCAAgC;cAC9B,UAAU;cACV,cAAc;cACd,YAAY;cACZ,OAAO;;;AAMb,cAAI,cAAc;AAGlB,cAAI,cAAc;AAGlB,cAAI,kBAAkB;AAGtB,cAAI,kBAAkB;AAGtB,cAAI,0BAA0B;AAK9B,cAAI,qBAAqB;AAGzB,cAAI,iBAAiB;AAGrB,cAAI,aAAa;AAIjB,cAAI,aAAa;AAMjB,cAAI,aAAa;AAIjB,cAAI,sBAAsB;AAI1B,cAAI,sBAAsB;AAG1B,cAAI,eAAe;AAGnB,cAAI,eAAe;AAInB,cAAI,WAAW;AAGf,cAAI,eAAe;AAGnB,cAAI,kBAAkB;AACtB,cAAM,0BAA0B,SAAS,IAAI,CAC3C,kBACA,SACA,YACA,QACA,iBACA,QACA,UACA,QACA,MACA,MACA,MACA,MACA,SACA,WACA,YACA,YACA,aACA,UACA,SACA,OACA,YACA,SACA,SACA,SACA;AAIF,cAAI,gBAAgB;AACpB,cAAM,wBAAwB,SAAS,IAAI,CACzC,SACA,SACA,OACA,UACA,SACA;AAIF,cAAI,sBAAsB;AAC1B,cAAM,8BAA8B,SAAS,IAAI,CAC/C,OACA,SACA,OACA,MACA,SACA,QACA,WACA,eACA,QACA,WACA,SACA,SACA,SACA;AAGF,cAAM,mBAAmB;AACzB,cAAM,gBAAgB;AACtB,cAAM,iBAAiB;AAEvB,cAAI,YAAY;AAChB,cAAI,iBAAiB;AAGrB,cAAI,oBAAA;AACJ,cAAM,+BAA+B,CAAC,yBAAyB;AAC/D,cAAM,4BAA4B;AAClC,cAAI,oBAAA;AAGJ,cAAI,SAAS;AAKb,cAAM,cAAc,UAAS,cAAc;AAE3C,cAAM,oBAAoB,4BAAU,WAAW;AAC7C,mBAAO,qBAAqB,UAAU,qBAAqB;;AAS7D,cAAM,eAAe,uBAAU,KAAK;AAClC,gBAAI,UAAU,WAAW,KAAK;AAC5B;;AAIF,gBAAI,CAAC,OAAO,QAAO,QAAP,cAAA,cAAA,WAAO,UAAQ,UAAU;AACnC,oBAAM;;AAIR,kBAAM,OAAM;AAGZ,2BACE,kBAAkB,MACd,SAAS,IAAI,IAAI,gBACjB;AACN,2BACE,kBAAkB,MACd,SAAS,IAAI,IAAI,gBACjB;AACN,kCACE,uBAAuB,MACnB,SAAS,OAAM,8BAA8B,IAAI,qBACjD;AACN,4BACE,uBAAuB,MACnB,SAAS,OAAM,wBAAwB,IAAI,qBAC3C;AACN,8BACE,qBAAqB,MACjB,SAAS,IAAI,IAAI,mBACjB;AACN,0BAAc,iBAAiB,MAAM,SAAS,IAAI,IAAI,eAAe;AACrE,0BAAc,iBAAiB,MAAM,SAAS,IAAI,IAAI,eAAe;AACrE,2BAAe,kBAAkB,MAAM,IAAI,eAAe;AAC1D,8BAAkB,IAAI,oBAAoB;AAC1C,8BAAkB,IAAI,oBAAoB;AAC1C,sCAA0B,IAAI,2BAA2B;AACzD,iCAAqB,IAAI,sBAAsB;AAC/C,6BAAiB,IAAI,kBAAkB;AACvC,yBAAa,IAAI,cAAc;AAC/B,kCAAsB,IAAI,uBAAuB;AACjD,kCAAsB,IAAI,uBAAuB;AACjD,yBAAa,IAAI,cAAc;AAC/B,2BAAe,IAAI,iBAAiB;AACpC,2BAAe,IAAI,iBAAiB;AACpC,uBAAW,IAAI,YAAY;AAC3B,gCAAiB,IAAI,sBAAsB;AAC3C,wBAAY,IAAI,aAAa;AAC7B,gBACE,IAAI,2BACJ,kBAAkB,IAAI,wBAAwB,eAC9C;AACA,sCAAwB,eACtB,IAAI,wBAAwB;;AAGhC,gBACE,IAAI,2BACJ,kBAAkB,IAAI,wBAAwB,qBAC9C;AACA,sCAAwB,qBACtB,IAAI,wBAAwB;;AAGhC,gBACE,IAAI,2BACJ,OAAO,IAAI,wBAAwB,mCACjC,WACF;AACA,sCAAwB,iCACtB,IAAI,wBAAwB;;AAGhC,gCAEE,6BAA6B,QAAQ,IAAI,uBAAuB,KAC3D,oBAAoB,4BACpB,oBAAoB,IAAI;AAG/B,gCACE,sBAAsB,0BAClB,SAAC,GAAD;AAAA,qBAAO;gBACP;AAEN,gBAAI,oBAAoB;AACtB,gCAAkB;;AAGpB,gBAAI,qBAAqB;AACvB,2BAAa;;AAIf,gBAAI,cAAc;AAChB,6BAAe,SAAS,IAAT,GAAA,OAAA,qBAAiB;AAChC,6BAAe;AACf,kBAAI,aAAa,SAAS,MAAM;AAC9B,yBAAS,cAAc;AACvB,yBAAS,cAAc;;AAGzB,kBAAI,aAAa,QAAQ,MAAM;AAC7B,yBAAS,cAAc;AACvB,yBAAS,cAAc;AACvB,yBAAS,cAAc;;AAGzB,kBAAI,aAAa,eAAe,MAAM;AACpC,yBAAS,cAAc;AACvB,yBAAS,cAAc;AACvB,yBAAS,cAAc;;AAGzB,kBAAI,aAAa,WAAW,MAAM;AAChC,yBAAS,cAAc;AACvB,yBAAS,cAAc;AACvB,yBAAS,cAAc;;;AAK3B,gBAAI,IAAI,UAAU;AAChB,kBAAI,iBAAiB,sBAAsB;AACzC,+BAAe,OAAM;;AAGvB,uBAAS,cAAc,IAAI;;AAG7B,gBAAI,IAAI,UAAU;AAChB,kBAAI,iBAAiB,sBAAsB;AACzC,+BAAe,OAAM;;AAGvB,uBAAS,cAAc,IAAI;;AAG7B,gBAAI,IAAI,mBAAmB;AACzB,uBAAS,qBAAqB,IAAI;;AAGpC,gBAAI,IAAI,iBAAiB;AACvB,kBAAI,oBAAoB,yBAAyB;AAC/C,kCAAkB,OAAM;;AAG1B,uBAAS,iBAAiB,IAAI;;AAIhC,gBAAI,cAAc;AAChB,2BAAa,WAAW;;AAI1B,gBAAI,gBAAgB;AAClB,uBAAS,cAAc,CAAC,QAAQ,QAAQ;;AAI1C,gBAAI,aAAa,OAAO;AACtB,uBAAS,cAAc,CAAC;AACxB,qBAAO,YAAY;;AAKrB,gBAAI,SAAQ;AACV,sBAAO;;AAGT,qBAAS;;AAGX,cAAM,iCAAiC,SAAS,IAAI,CAClD,MACA,MACA,MACA,MACA;AAGF,cAAM,0BAA0B,SAAS,IAAI,CAC3C,iBACA,QACA,SACA;AAMF,cAAM,eAAe,SAAS,IAAI;AAClC,mBAAS,cAAc;AACvB,mBAAS,cAAc;AAEvB,cAAM,kBAAkB,SAAS,IAAI;AACrC,mBAAS,iBAAiB;AAU1B,cAAM,uBAAuB,+BAAU,SAAS;AAC9C,gBAAI,SAAS,eAAc;AAI3B,gBAAI,CAAC,UAAU,CAAC,OAAO,SAAS;AAC9B,uBAAS;gBACP,cAAc;gBACd,SAAS;;;AAIb,gBAAM,UAAU,kBAAkB,QAAQ;AAC1C,gBAAM,gBAAgB,kBAAkB,OAAO;AAE/C,gBAAI,QAAQ,iBAAiB,eAAe;AAI1C,kBAAI,OAAO,iBAAiB,gBAAgB;AAC1C,uBAAO,YAAY;;AAMrB,kBAAI,OAAO,iBAAiB,kBAAkB;AAC5C,uBACE,YAAY,SACX,mBAAkB,oBACjB,+BAA+B;;AAMrC,qBAAO,QAAQ,aAAa;;AAG9B,gBAAI,QAAQ,iBAAiB,kBAAkB;AAI7C,kBAAI,OAAO,iBAAiB,gBAAgB;AAC1C,uBAAO,YAAY;;AAKrB,kBAAI,OAAO,iBAAiB,eAAe;AACzC,uBAAO,YAAY,UAAU,wBAAwB;;AAKvD,qBAAO,QAAQ,gBAAgB;;AAGjC,gBAAI,QAAQ,iBAAiB,gBAAgB;AAI3C,kBACE,OAAO,iBAAiB,iBACxB,CAAC,wBAAwB,gBACzB;AACA,uBAAO;;AAGT,kBACE,OAAO,iBAAiB,oBACxB,CAAC,+BAA+B,gBAChC;AACA,uBAAO;;AAOT,kBAAM,2BAA2B,SAAS,IAAI,CAC5C,SACA,SACA,QACA,KACA;AAKF,qBACE,CAAC,gBAAgB,YAChB,0BAAyB,YAAY,CAAC,aAAa;;AAOxD,mBAAO;;AAQT,cAAM,eAAe,uBAAU,MAAM;AACnC,sBAAU,WAAU,SAAS,EAAE,SAAS;AACxC,gBAAI;AAEF,mBAAK,WAAW,YAAY;qBACrB,GAAP;AACA,kBAAI;AACF,qBAAK,YAAY;uBACV,IAAP;AACA,qBAAK;;;;AAWX,cAAM,mBAAmB,2BAAU,MAAM,MAAM;AAC7C,gBAAI;AACF,wBAAU,WAAU,SAAS;gBAC3B,WAAW,KAAK,iBAAiB;gBACjC,MAAM;;qBAED,GAAP;AACA,wBAAU,WAAU,SAAS;gBAC3B,WAAW;gBACX,MAAM;;;AAIV,iBAAK,gBAAgB;AAGrB,gBAAI,SAAS,QAAQ,CAAC,aAAa,OAAO;AACxC,kBAAI,cAAc,qBAAqB;AACrC,oBAAI;AACF,+BAAa;yBACN,GAAP;;qBACG;AACL,oBAAI;AACF,uBAAK,aAAa,MAAM;yBACjB,GAAP;;;;;AAWR,cAAM,gBAAgB,wBAAU,OAAO;AAErC,gBAAI,MAAA;AACJ,gBAAI,oBAAA;AAEJ,gBAAI,YAAY;AACd,sBAAQ,sBAAsB;mBACzB;AAEL,kBAAM,UAAU,YAAY,OAAO;AACnC,kCAAoB,WAAW,QAAQ;;AAGzC,gBAAI,sBAAsB,yBAAyB;AAEjD,sBACE,mEACA,QACA;;AAGJ,gBAAM,eAAe,qBACjB,mBAAmB,WAAW,SAC9B;AAKJ,gBAAI,cAAc,gBAAgB;AAChC,kBAAI;AACF,sBAAM,IAAI,aAAY,gBAAgB,cAAc;uBAC7C,GAAP;;;AAIJ,gBAAI,CAAC,OAAO,CAAC,IAAI,iBAAiB;AAChC,oBAAM,eAAe,eAAe,WAAW,YAAY;AAC3D,kBAAI;AACF,oBAAI,gBAAgB,YAAY,iBAAiB,KAAK;uBAC/C,GAAP;;;AAKJ,gBAAM,OAAO,IAAI,QAAQ,IAAI;AAE7B,gBAAI,SAAS,mBAAmB;AAC9B,mBAAK,aACH,UAAS,eAAe,oBACxB,KAAK,WAAW,MAAM;;AAK1B,gBAAI,cAAc,gBAAgB;AAChC,qBAAO,qBAAqB,KAC1B,KACA,iBAAiB,SAAS,QAC1B;;AAGJ,mBAAO,iBAAiB,IAAI,kBAAkB;;AAShD,cAAM,kBAAkB,0BAAU,MAAM;AACtC,mBAAO,mBAAmB,KACxB,KAAK,iBAAiB,MACtB,MAEA,WAAW,eAAe,WAAW,eAAe,WAAW,WAC/D,MACA;;AAUJ,cAAM,eAAe,uBAAU,KAAK;AAClC,mBACE,eAAe,oBACd,QAAO,IAAI,aAAa,YACvB,OAAO,IAAI,gBAAgB,YAC3B,OAAO,IAAI,gBAAgB,cAC3B,CAAE,KAAI,sBAAsB,iBAC5B,OAAO,IAAI,oBAAoB,cAC/B,OAAO,IAAI,iBAAiB,cAC5B,OAAO,IAAI,iBAAiB,YAC5B,OAAO,IAAI,iBAAiB;;AAUlC,cAAM,UAAU,kBAAU,QAAQ;AAChC,mBAAO,QAAO,UAAP,cAAA,cAAA,WAAO,YAAS,WACnB,kBAAkB,QAClB,UACE,QAAO,WAAP,cAAA,cAAA,WAAO,aAAW,YAClB,OAAO,OAAO,aAAa,YAC3B,OAAO,OAAO,aAAa;;AAWnC,cAAM,eAAe,uBAAU,YAAY,aAAa,MAAM;AAC5D,gBAAI,CAAC,MAAM,aAAa;AACtB;;AAGF,yBAAa,MAAM,aAAa,SAAC,OAAS;AACxC,oBAAK,KAAK,YAAW,aAAa,MAAM;;;AAc5C,cAAM,oBAAoB,4BAAU,aAAa;AAC/C,gBAAI,UAAA;AAGJ,yBAAa,0BAA0B,aAAa;AAGpD,gBAAI,aAAa,cAAc;AAC7B,2BAAa;AACb,qBAAO;;AAIT,gBAAI,YAAY,YAAY,UAAU,oBAAoB;AACxD,2BAAa;AACb,qBAAO;;AAIT,gBAAM,UAAU,kBAAkB,YAAY;AAG9C,yBAAa,uBAAuB,aAAa;cAC/C;cACA,aAAa;;AAIf,gBACE,CAAC,QAAQ,YAAY,sBACpB,EAAC,QAAQ,YAAY,YACpB,CAAC,QAAQ,YAAY,QAAQ,uBAC/B,WAAW,WAAW,YAAY,cAClC,WAAW,WAAW,YAAY,cAClC;AACA,2BAAa;AACb,qBAAO;;AAIT,gBACE,YAAY,YACZ,WAAW,cAAc,YAAY,YACrC;AACA,2BAAa;AACb,qBAAO;;AAIT,gBAAI,CAAC,aAAa,YAAY,YAAY,UAAU;AAElD,kBAAI,CAAC,YAAY,YAAY,wBAAwB,UAAU;AAC7D,oBACE,wBAAwB,wBAAwB,UAChD,WAAW,wBAAwB,cAAc;AAEjD,yBAAO;AACT,oBACE,wBAAwB,wBAAwB,YAChD,wBAAwB,aAAa;AAErC,yBAAO;;AAIX,kBAAI,gBAAgB,CAAC,gBAAgB,UAAU;AAC7C,oBAAM,aAAa,eAAc,gBAAgB,YAAY;AAC7D,oBAAM,aAAa,cAAc,gBAAgB,YAAY;AAE7D,oBAAI,cAAc,YAAY;AAC5B,sBAAM,aAAa,WAAW;AAE9B,2BAAS,IAAI,aAAa,GAAG,KAAK,GAAG,EAAE,GAAG;AACxC,+BAAW,aACT,UAAU,WAAW,IAAI,OACzB,eAAe;;;;AAMvB,2BAAa;AACb,qBAAO;;AAIT,gBAAI,uBAAuB,YAAW,CAAC,qBAAqB,cAAc;AACxE,2BAAa;AACb,qBAAO;;AAGT,gBACG,aAAY,cAAc,YAAY,cACvC,WAAW,wBAAwB,YAAY,YAC/C;AACA,2BAAa;AACb,qBAAO;;AAIT,gBAAI,sBAAsB,YAAY,aAAa,GAAG;AAEpD,wBAAU,YAAY;AACtB,wBAAU,cAAc,SAAS,kBAAe;AAChD,wBAAU,cAAc,SAAS,aAAU;AAC3C,kBAAI,YAAY,gBAAgB,SAAS;AACvC,0BAAU,WAAU,SAAS,EAAE,SAAS,YAAY;AACpD,4BAAY,cAAc;;;AAK9B,yBAAa,yBAAyB,aAAa;AAEnD,mBAAO;;AAYT,cAAM,oBAAoB,4BAAU,OAAO,QAAQ,OAAO;AAExD,gBACE,gBACC,YAAW,QAAQ,WAAW,WAC9B,UAAS,aAAY,SAAS,cAC/B;AACA,qBAAO;;AAOT,gBACE,mBACA,CAAC,YAAY,WACb,WAAW,cAAW;AACtB;qBAES,mBAAmB,WAAW,cAAW;AAAS;qBAGlD,CAAC,aAAa,WAAW,YAAY,SAAS;AACvD,kBAIG,wBAAwB,UACrB,yBAAwB,wBAAwB,UAChD,WAAW,wBAAwB,cAAc,UAChD,wBAAwB,wBAAwB,YAC/C,wBAAwB,aAAa,WACvC,yBAAwB,8BAA8B,UACtD,WAAW,wBAAwB,oBAAoB,WACtD,wBAAwB,8BAA8B,YACrD,wBAAwB,mBAAmB,YAGhD,WAAW,QACV,wBAAwB,kCACtB,yBAAwB,wBAAwB,UAChD,WAAW,wBAAwB,cAAc,UAChD,wBAAwB,wBAAwB,YAC/C,wBAAwB,aAAa;AAC3C;mBAGK;AACL,uBAAO;;uBAGA,oBAAoB;AAAS;qBAKtC,WAAW,mBAAgB,cAAc,OAAO,oBAAiB;AACjE;qBAKC,YAAW,SAAS,WAAW,gBAAgB,WAAW,WAC3D,UAAU,YACV,eAAc,OAAO,aAAa,KAClC,cAAc;AACd;qBAMA,2BACA,CAAC,WAAW,sBAAmB,cAAc,OAAO,oBAAiB;AACrE;qBAIS,CAAC;AAAO;iBAGZ;AACL,qBAAO;;AAGT,mBAAO;;AAST,cAAM,0BAA0B,kCAAU,SAAS;AACjD,mBAAO,QAAQ,QAAQ,OAAO;;AAahC,cAAM,sBAAsB,8BAAU,aAAa;AACjD,gBAAI,OAAA;AACJ,gBAAI,QAAA;AACJ,gBAAI,SAAA;AACJ,gBAAI,IAAA;AAEJ,yBAAa,4BAA4B,aAAa;AANL,gBAQzC,aAAe,YAAf;AAGR,gBAAI,CAAC,YAAY;AACf;;AAGF,gBAAM,YAAY;cAChB,UAAU;cACV,WAAW;cACX,UAAU;cACV,mBAAmB;;AAErB,gBAAI,WAAW;AAGf,mBAAO,KAAK;AACV,qBAAO,WAAW;AADR,kBAAA,QAEqB,MAAvB,OAFE,MAEF,MAAM,eAFJ,MAEI;AACd,sBAAQ,WAAW,KAAK;AACxB,uBAAS,kBAAkB;AAG3B,wBAAU,WAAW;AACrB,wBAAU,YAAY;AACtB,wBAAU,WAAW;AACrB,wBAAU,gBAAgB;AAC1B,2BAAa,yBAAyB,aAAa;AACnD,sBAAQ,UAAU;AAElB,kBAAI,UAAU,eAAe;AAC3B;;AAIF,+BAAiB,MAAM;AAGvB,kBAAI,CAAC,UAAU,UAAU;AACvB;;AAIF,kBAAI,WAAW,QAAQ,QAAQ;AAC7B,iCAAiB,MAAM;AACvB;;AAIF,kBAAI,oBAAoB;AACtB,wBAAQ,cAAc,OAAO,kBAAe;AAC5C,wBAAQ,cAAc,OAAO,aAAU;;AAIzC,kBAAM,QAAQ,kBAAkB,YAAY;AAC5C,kBAAI,CAAC,kBAAkB,OAAO,QAAQ,QAAQ;AAC5C;;AAIF,kBAAI;AACF,oBAAI,cAAc;AAChB,8BAAY,eAAe,cAAc,MAAM;uBAC1C;AAEL,8BAAY,aAAa,MAAM;;AAGjC,yBAAS,WAAU;uBACZ,GAAP;;;AAIJ,yBAAa,2BAA2B,aAAa;;AAQvD,cAAM,qBAAqB,6BAAU,UAAU;AAC7C,gBAAI,aAAA;AACJ,gBAAM,iBAAiB,gBAAgB;AAGvC,yBAAa,2BAA2B,UAAU;AAElD,mBAAQ,aAAa,eAAe,YAAa;AAE/C,2BAAa,0BAA0B,YAAY;AAGnD,kBAAI,kBAAkB,aAAa;AACjC;;AAIF,kBAAI,WAAW,mBAAmB,kBAAkB;AAClD,oCAAmB,WAAW;;AAIhC,kCAAoB;;AAItB,yBAAa,0BAA0B,UAAU;;AAWnD,qBAAU,WAAW,SAAU,OAAO,KAAK;AACzC,gBAAI,OAAA;AACJ,gBAAI,eAAA;AACJ,gBAAI,cAAA;AACJ,gBAAI,UAAA;AACJ,gBAAI,aAAA;AAIJ,6BAAiB,CAAC;AAClB,gBAAI,gBAAgB;AAClB,sBAAQ;;AAIV,gBAAI,OAAO,UAAU,YAAY,CAAC,QAAQ,QAAQ;AAEhD,kBAAI,OAAO,MAAM,aAAa,YAAY;AACxC,sBAAM,gBAAgB;qBACjB;AACL,wBAAQ,MAAM;AACd,oBAAI,OAAO,UAAU,UAAU;AAC7B,wBAAM,gBAAgB;;;;AAM5B,gBAAI,CAAC,WAAU,aAAa;AAC1B,kBACE,WAAO,QAAO,kBAAiB,YAC/B,OAAO,QAAO,iBAAiB,YAC/B;AACA,oBAAI,OAAO,UAAU,UAAU;AAC7B,yBAAO,QAAO,aAAa;;AAG7B,oBAAI,QAAQ,QAAQ;AAClB,yBAAO,QAAO,aAAa,MAAM;;;AAIrC,qBAAO;;AAIT,gBAAI,CAAC,YAAY;AACf,2BAAa;;AAIf,uBAAU,UAAU;AAGpB,gBAAI,OAAO,UAAU,UAAU;AAC7B,yBAAW;;AAGb,gBAAI,UAAU;AAEZ,kBAAI,MAAM,UAAU;AAClB,oBAAM,UAAU,kBAAkB,MAAM;AACxC,oBAAI,CAAC,aAAa,YAAY,YAAY,UAAU;AAClD,wBAAM,gBACJ;;;uBAIG,iBAAiB,OAAM;AAGhC,qBAAO,cAAc;AACrB,6BAAe,KAAK,cAAc,WAAW,OAAO;AACpD,kBAAI,aAAa,aAAa,KAAK,aAAa,aAAa,QAAQ;AAEnE,uBAAO;yBACE,aAAa,aAAa,QAAQ;AAC3C,uBAAO;qBACF;AAEL,qBAAK,YAAY;;mBAEd;AAEL,kBACE,CAAC,cACD,CAAC,sBACD,CAAC,kBAED,MAAM,QAAQ,SAAS,IACvB;AACA,uBAAO,sBAAsB,sBACzB,mBAAmB,WAAW,SAC9B;;AAIN,qBAAO,cAAc;AAGrB,kBAAI,CAAC,MAAM;AACT,uBAAO,aAAa,OAAO,sBAAsB,YAAY;;;AAKjE,gBAAI,QAAQ,YAAY;AACtB,2BAAa,KAAK;;AAIpB,gBAAM,eAAe,gBAAgB,WAAW,QAAQ;AAGxD,mBAAQ,cAAc,aAAa,YAAa;AAE9C,kBAAI,YAAY,aAAa,KAAK,gBAAgB,SAAS;AACzD;;AAIF,kBAAI,kBAAkB,cAAc;AAClC;;AAIF,kBAAI,YAAY,mBAAmB,kBAAkB;AACnD,mCAAmB,YAAY;;AAIjC,kCAAoB;AAEpB,wBAAU;;AAGZ,sBAAU;AAGV,gBAAI,UAAU;AACZ,qBAAO;;AAIT,gBAAI,YAAY;AACd,kBAAI,qBAAqB;AACvB,6BAAa,uBAAuB,KAAK,KAAK;AAE9C,uBAAO,KAAK,YAAY;AAEtB,6BAAW,YAAY,KAAK;;qBAEzB;AACL,6BAAa;;AAGf,kBAAI,aAAa,YAAY;AAQ3B,6BAAa,WAAW,KAAK,kBAAkB,YAAY;;AAG7D,qBAAO;;AAGT,gBAAI,iBAAiB,iBAAiB,KAAK,YAAY,KAAK;AAG5D,gBACE,kBACA,aAAa,eACb,KAAK,iBACL,KAAK,cAAc,WACnB,KAAK,cAAc,QAAQ,QAC3B,WAAW,cAA0B,KAAK,cAAc,QAAQ,OAChE;AACA,+BACE,eAAe,KAAK,cAAc,QAAQ,OAAO,QAAQ;;AAI7D,gBAAI,oBAAoB;AACtB,+BAAiB,cAAc,gBAAgB,kBAAe;AAC9D,+BAAiB,cAAc,gBAAgB,aAAU;;AAG3D,mBAAO,sBAAsB,sBACzB,mBAAmB,WAAW,kBAC9B;;AASN,qBAAU,YAAY,SAAU,KAAK;AACnC,yBAAa;AACb,yBAAa;;AAQf,qBAAU,cAAc,WAAY;AAClC,qBAAS;AACT,yBAAa;;AAaf,qBAAU,mBAAmB,SAAU,KAAK,MAAM,OAAO;AAEvD,gBAAI,CAAC,QAAQ;AACX,2BAAa;;AAGf,gBAAM,QAAQ,kBAAkB;AAChC,gBAAM,SAAS,kBAAkB;AACjC,mBAAO,kBAAkB,OAAO,QAAQ;;AAU1C,qBAAU,UAAU,SAAU,YAAY,cAAc;AACtD,gBAAI,OAAO,iBAAiB,YAAY;AACtC;;AAGF,kBAAM,cAAc,MAAM,eAAe;AACzC,sBAAU,MAAM,aAAa;;AAU/B,qBAAU,aAAa,SAAU,YAAY;AAC3C,gBAAI,MAAM,aAAa;AACrB,uBAAS,MAAM;;;AAUnB,qBAAU,cAAc,SAAU,YAAY;AAC5C,gBAAI,MAAM,aAAa;AACrB,oBAAM,cAAc;;;AASxB,qBAAU,iBAAiB,WAAY;AACrC,oBAAQ;;AAGV,iBAAO;;AAGT,YAAA,SAAe;;;;;;;ACngDf;AAAA;AAAA;AACA,UAAI,WAAS;AACb,UAAI,uBAAsB;AAC1B,UAAI,aAAW;AACf,UAAI,0BAAyB;AAE7B,UAAI,cAAa,SAAO;AAIxB,aAAO,UAAU,iBAAgB,OAAO;AACtC,YAAI,MAAM,WAAS,wBAAuB;AAC1C,YAAI,SAAS;AACb,YAAI,IAAI,qBAAoB;AAC5B,YAAI,IAAI,KAAK,KAAK;AAAU,gBAAM,YAAW;AAC7C,eAAM,IAAI,GAAI,QAAO,MAAO,QAAO;AAAM,cAAI,IAAI;AAAG,sBAAU;AAC9D,eAAO;AAAA;AAAA;AAAA;;;AChBT;AAAA;AACA,UAAI,gBAAc;AAClB,UAAI,YAAW;AACf,UAAI,aAAW;AACf,UAAI,WAAU;AACd,UAAI,0BAAyB;AAE7B,UAAI,UAAS,cAAY;AACzB,UAAI,eAAc,cAAY,GAAG;AACjC,UAAI,OAAO,KAAK;AAGhB,UAAI,eAAe,SAAU,QAAQ;AACnC,eAAO,SAAU,OAAO,WAAW,YAAY;AAC7C,cAAI,IAAI,WAAS,wBAAuB;AACxC,cAAI,eAAe,UAAS;AAC5B,cAAI,eAAe,EAAE;AACrB,cAAI,UAAU,eAAe,SAAY,MAAM,WAAS;AACxD,cAAI,SAAS;AACb,cAAI,gBAAgB,gBAAgB,WAAW;AAAI,mBAAO;AAC1D,oBAAU,eAAe;AACzB,yBAAe,QAAO,SAAS,KAAK,UAAU,QAAQ;AACtD,cAAI,aAAa,SAAS;AAAS,2BAAe,aAAY,cAAc,GAAG;AAC/E,iBAAO,SAAS,IAAI,eAAe,eAAe;AAAA;AAAA;AAItD,aAAO,UAAU;AAAA,QAGf,OAAO,aAAa;AAAA,QAGpB,KAAK,aAAa;AAAA;AAAA;AAAA;;;ACjCpB;AAAA;AACA,UAAI,aAAY;AAEhB,aAAO,UAAU,mEAAmE,KAAK;AAAA;AAAA;;;ACHzF;AAAA;AAEC,MAAC,UAAU,UAAQ,SAAS;AACzB,eAAO,YAAY,YAAY,OAAO,WAAW,cAAc,OAAO,UAAU,YAChF,OAAO,WAAW,cAAc,OAAO,MAAM,OAAO,WACpD,SAAO,SAAS;AAAA,SAClB,SAAO,WAAY;AAAE;AAEnB,YAAI;AAEJ,yBAAkB;AACd,iBAAO,aAAa,MAAM,MAAM;AAAA;AAKpC,iCAA0B,UAAU;AAChC,yBAAe;AAAA;AAGnB,0BAAiB,OAAO;AACpB,iBAAO,iBAAiB,SAAS,OAAO,UAAU,SAAS,KAAK,WAAW;AAAA;AAG/E,2BAAkB,OAAO;AAGrB,iBAAO,SAAS,QAAQ,OAAO,UAAU,SAAS,KAAK,WAAW;AAAA;AAGtE,+BAAuB,KAAK;AACxB,cAAI,OAAO,qBAAqB;AAC5B,mBAAQ,OAAO,oBAAoB,KAAK,WAAW;AAAA,iBAChD;AACH,gBAAI;AACJ,iBAAK,KAAK,KAAK;AACX,kBAAI,IAAI,eAAe,IAAI;AACvB,uBAAO;AAAA;AAAA;AAGf,mBAAO;AAAA;AAAA;AAIf,8BAAqB,OAAO;AACxB,iBAAO,UAAU;AAAA;AAGrB,0BAAkB,OAAO;AACrB,iBAAO,OAAO,UAAU,YAAY,OAAO,UAAU,SAAS,KAAK,WAAW;AAAA;AAGlF,wBAAgB,OAAO;AACnB,iBAAO,iBAAiB,QAAQ,OAAO,UAAU,SAAS,KAAK,WAAW;AAAA;AAG9E,sBAAa,KAAK,KAAI;AAClB,cAAI,MAAM,IAAI;AACd,eAAK,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AAC7B,gBAAI,KAAK,IAAG,IAAI,IAAI;AAAA;AAExB,iBAAO;AAAA;AAGX,4BAAoB,GAAG,GAAG;AACtB,iBAAO,OAAO,UAAU,eAAe,KAAK,GAAG;AAAA;AAGnD,yBAAgB,GAAG,GAAG;AAClB,mBAAS,KAAK,GAAG;AACb,gBAAI,WAAW,GAAG,IAAI;AAClB,gBAAE,KAAK,EAAE;AAAA;AAAA;AAIjB,cAAI,WAAW,GAAG,aAAa;AAC3B,cAAE,WAAW,EAAE;AAAA;AAGnB,cAAI,WAAW,GAAG,YAAY;AAC1B,cAAE,UAAU,EAAE;AAAA;AAGlB,iBAAO;AAAA;AAGX,2BAAoB,OAAO,SAAQ,SAAQ,QAAQ;AAC/C,iBAAO,iBAAiB,OAAO,SAAQ,SAAQ,QAAQ,MAAM;AAAA;AAGjE,uCAA+B;AAE3B,iBAAO;AAAA,YACH,OAAkB;AAAA,YAClB,cAAkB;AAAA,YAClB,aAAkB;AAAA,YAClB,UAAkB;AAAA,YAClB,eAAkB;AAAA,YAClB,WAAkB;AAAA,YAClB,cAAkB;AAAA,YAClB,eAAkB;AAAA,YAClB,iBAAkB;AAAA,YAClB,KAAkB;AAAA,YAClB,iBAAkB;AAAA,YAClB,UAAkB;AAAA,YAClB,SAAkB;AAAA,YAClB,iBAAkB;AAAA;AAAA;AAI1B,iCAAyB,GAAG;AACxB,cAAI,EAAE,OAAO,MAAM;AACf,cAAE,MAAM;AAAA;AAEZ,iBAAO,EAAE;AAAA;AAGb,YAAI;AACJ,YAAI,MAAM,UAAU,MAAM;AACtB,iBAAO,MAAM,UAAU;AAAA,eACpB;AACH,iBAAO,SAAU,KAAK;AAClB,gBAAI,IAAI,OAAO;AACf,gBAAI,MAAM,EAAE,WAAW;AAEvB,qBAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,kBAAI,KAAK,KAAK,IAAI,KAAK,MAAM,EAAE,IAAI,GAAG,IAAI;AACtC,uBAAO;AAAA;AAAA;AAIf,mBAAO;AAAA;AAAA;AAIf,yBAAiB,GAAG;AAChB,cAAI,EAAE,YAAY,MAAM;AACpB,gBAAI,QAAQ,gBAAgB;AAC5B,gBAAI,cAAc,KAAK,KAAK,MAAM,iBAAiB,SAAU,GAAG;AAC5D,qBAAO,KAAK;AAAA;AAEhB,gBAAI,aAAa,CAAC,MAAM,EAAE,GAAG,cACzB,MAAM,WAAW,KACjB,CAAC,MAAM,SACP,CAAC,MAAM,gBACP,CAAC,MAAM,kBACP,CAAC,MAAM,mBACP,CAAC,MAAM,aACP,CAAC,MAAM,iBACP,CAAC,MAAM,mBACN,EAAC,MAAM,YAAa,MAAM,YAAY;AAE3C,gBAAI,EAAE,SAAS;AACX,2BAAa,cACT,MAAM,kBAAkB,KACxB,MAAM,aAAa,WAAW,KAC9B,MAAM,YAAY;AAAA;AAG1B,gBAAI,OAAO,YAAY,QAAQ,CAAC,OAAO,SAAS,IAAI;AAChD,gBAAE,WAAW;AAAA,mBAEZ;AACD,qBAAO;AAAA;AAAA;AAGf,iBAAO,EAAE;AAAA;AAGb,+BAAwB,OAAO;AAC3B,cAAI,IAAI,UAAU;AAClB,cAAI,SAAS,MAAM;AACf,oBAAO,gBAAgB,IAAI;AAAA,iBAE1B;AACD,4BAAgB,GAAG,kBAAkB;AAAA;AAGzC,iBAAO;AAAA;AAKX,YAAI,mBAAmB,MAAM,mBAAmB;AAEhD,4BAAoB,KAAI,OAAM;AAC1B,cAAI,GAAG,MAAM;AAEb,cAAI,CAAC,aAAY,MAAK,mBAAmB;AACrC,gBAAG,mBAAmB,MAAK;AAAA;AAE/B,cAAI,CAAC,aAAY,MAAK,KAAK;AACvB,gBAAG,KAAK,MAAK;AAAA;AAEjB,cAAI,CAAC,aAAY,MAAK,KAAK;AACvB,gBAAG,KAAK,MAAK;AAAA;AAEjB,cAAI,CAAC,aAAY,MAAK,KAAK;AACvB,gBAAG,KAAK,MAAK;AAAA;AAEjB,cAAI,CAAC,aAAY,MAAK,UAAU;AAC5B,gBAAG,UAAU,MAAK;AAAA;AAEtB,cAAI,CAAC,aAAY,MAAK,OAAO;AACzB,gBAAG,OAAO,MAAK;AAAA;AAEnB,cAAI,CAAC,aAAY,MAAK,SAAS;AAC3B,gBAAG,SAAS,MAAK;AAAA;AAErB,cAAI,CAAC,aAAY,MAAK,UAAU;AAC5B,gBAAG,UAAU,MAAK;AAAA;AAEtB,cAAI,CAAC,aAAY,MAAK,MAAM;AACxB,gBAAG,MAAM,gBAAgB;AAAA;AAE7B,cAAI,CAAC,aAAY,MAAK,UAAU;AAC5B,gBAAG,UAAU,MAAK;AAAA;AAGtB,cAAI,iBAAiB,SAAS,GAAG;AAC7B,iBAAK,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAC1C,qBAAO,iBAAiB;AACxB,oBAAM,MAAK;AACX,kBAAI,CAAC,aAAY,MAAM;AACnB,oBAAG,QAAQ;AAAA;AAAA;AAAA;AAKvB,iBAAO;AAAA;AAGX,YAAI,mBAAmB;AAGvB,wBAAgB,QAAQ;AACpB,qBAAW,MAAM;AACjB,eAAK,KAAK,IAAI,KAAK,OAAO,MAAM,OAAO,OAAO,GAAG,YAAY;AAC7D,cAAI,CAAC,KAAK,WAAW;AACjB,iBAAK,KAAK,IAAI,KAAK;AAAA;AAIvB,cAAI,qBAAqB,OAAO;AAC5B,+BAAmB;AACnB,kBAAM,aAAa;AACnB,+BAAmB;AAAA;AAAA;AAI3B,0BAAmB,KAAK;AACpB,iBAAO,eAAe,UAAW,OAAO,QAAQ,IAAI,oBAAoB;AAAA;AAG5E,0BAAmB,QAAQ;AACvB,cAAI,SAAS,GAAG;AAEZ,mBAAO,KAAK,KAAK,WAAW;AAAA,iBACzB;AACH,mBAAO,KAAK,MAAM;AAAA;AAAA;AAI1B,uBAAe,qBAAqB;AAChC,cAAI,gBAAgB,CAAC,qBACjB,QAAQ;AAEZ,cAAI,kBAAkB,KAAK,SAAS,gBAAgB;AAChD,oBAAQ,SAAS;AAAA;AAGrB,iBAAO;AAAA;AAIX,+BAAuB,QAAQ,QAAQ,aAAa;AAChD,cAAI,MAAM,KAAK,IAAI,OAAO,QAAQ,OAAO,SACrC,aAAa,KAAK,IAAI,OAAO,SAAS,OAAO,SAC7C,QAAQ,GACR;AACJ,eAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACtB,gBAAK,eAAe,OAAO,OAAO,OAAO,MACpC,CAAC,eAAe,MAAM,OAAO,QAAQ,MAAM,OAAO,KAAM;AACzD;AAAA;AAAA;AAGR,iBAAO,QAAQ;AAAA;AAGnB,uBAAc,KAAK;AACf,cAAI,MAAM,gCAAgC,SACjC,OAAO,YAAa,eAAgB,QAAQ,MAAM;AACvD,oBAAQ,KAAK,0BAA0B;AAAA;AAAA;AAI/C,2BAAmB,KAAK,KAAI;AACxB,cAAI,YAAY;AAEhB,iBAAO,QAAO,WAAY;AACtB,gBAAI,MAAM,sBAAsB,MAAM;AAClC,oBAAM,mBAAmB,MAAM;AAAA;AAEnC,gBAAI,WAAW;AACX,kBAAI,OAAO;AACX,kBAAI;AACJ,uBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACvC,sBAAM;AACN,oBAAI,OAAO,UAAU,OAAO,UAAU;AAClC,yBAAO,QAAQ,IAAI;AACnB,2BAAS,OAAO,UAAU,IAAI;AAC1B,2BAAO,MAAM,OAAO,UAAU,GAAG,OAAO;AAAA;AAE5C,wBAAM,IAAI,MAAM,GAAG;AAAA,uBAChB;AACH,wBAAM,UAAU;AAAA;AAEpB,qBAAK,KAAK;AAAA;AAEd,oBAAK,MAAM,kBAAkB,MAAM,UAAU,MAAM,KAAK,MAAM,KAAK,MAAM,OAAQ,IAAI,QAAS;AAC9F,0BAAY;AAAA;AAEhB,mBAAO,IAAG,MAAM,MAAM;AAAA,aACvB;AAAA;AAGP,YAAI,eAAe;AAEnB,iCAAyB,MAAM,KAAK;AAChC,cAAI,MAAM,sBAAsB,MAAM;AAClC,kBAAM,mBAAmB,MAAM;AAAA;AAEnC,cAAI,CAAC,aAAa,OAAO;AACrB,kBAAK;AACL,yBAAa,QAAQ;AAAA;AAAA;AAI7B,cAAM,8BAA8B;AACpC,cAAM,qBAAqB;AAE3B,6BAAoB,OAAO;AACvB,iBAAO,iBAAiB,YAAY,OAAO,UAAU,SAAS,KAAK,WAAW;AAAA;AAGlF,qBAAc,QAAQ;AAClB,cAAI,MAAM;AACV,eAAK,KAAK,QAAQ;AACd,mBAAO,OAAO;AACd,gBAAI,YAAW,OAAO;AAClB,mBAAK,KAAK;AAAA,mBACP;AACH,mBAAK,MAAM,KAAK;AAAA;AAAA;AAGxB,eAAK,UAAU;AAIf,eAAK,iCAAiC,IAAI,OACrC,MAAK,wBAAwB,UAAU,KAAK,cAAc,UACvD,MAAO,UAAW;AAAA;AAG9B,8BAAsB,cAAc,aAAa;AAC7C,cAAI,MAAM,QAAO,IAAI,eAAe;AACpC,eAAK,QAAQ,aAAa;AACtB,gBAAI,WAAW,aAAa,OAAO;AAC/B,kBAAI,UAAS,aAAa,UAAU,UAAS,YAAY,QAAQ;AAC7D,oBAAI,QAAQ;AACZ,wBAAO,IAAI,OAAO,aAAa;AAC/B,wBAAO,IAAI,OAAO,YAAY;AAAA,yBACvB,YAAY,SAAS,MAAM;AAClC,oBAAI,QAAQ,YAAY;AAAA,qBACrB;AACH,uBAAO,IAAI;AAAA;AAAA;AAAA;AAIvB,eAAK,QAAQ,cAAc;AACvB,gBAAI,WAAW,cAAc,SACrB,CAAC,WAAW,aAAa,SACzB,UAAS,aAAa,QAAQ;AAElC,kBAAI,QAAQ,QAAO,IAAI,IAAI;AAAA;AAAA;AAGnC,iBAAO;AAAA;AAGX,wBAAgB,QAAQ;AACpB,cAAI,UAAU,MAAM;AAChB,iBAAK,IAAI;AAAA;AAAA;AAIjB,YAAI;AAEJ,YAAI,OAAO,MAAM;AACb,kBAAO,OAAO;AAAA,eACX;AACH,kBAAO,SAAU,KAAK;AAClB,gBAAI,GAAG,MAAM;AACb,iBAAK,KAAK,KAAK;AACX,kBAAI,WAAW,KAAK,IAAI;AACpB,oBAAI,KAAK;AAAA;AAAA;AAGjB,mBAAO;AAAA;AAAA;AAIf,YAAI,kBAAkB;AAAA,UAClB,SAAU;AAAA,UACV,SAAU;AAAA,UACV,UAAW;AAAA,UACX,SAAU;AAAA,UACV,UAAW;AAAA,UACX,UAAW;AAAA;AAGf,0BAAmB,KAAK,KAAK,MAAK;AAC9B,cAAI,SAAS,KAAK,UAAU,QAAQ,KAAK,UAAU;AACnD,iBAAO,YAAW,UAAU,OAAO,KAAK,KAAK,QAAO;AAAA;AAGxD,YAAI,wBAAwB;AAAA,UACxB,KAAO;AAAA,UACP,IAAO;AAAA,UACP,GAAO;AAAA,UACP,IAAO;AAAA,UACP,KAAO;AAAA,UACP,MAAO;AAAA;AAGX,gCAAyB,KAAK;AAC1B,cAAI,UAAS,KAAK,gBAAgB,MAC9B,cAAc,KAAK,gBAAgB,IAAI;AAE3C,cAAI,WAAU,CAAC,aAAa;AACxB,mBAAO;AAAA;AAGX,eAAK,gBAAgB,OAAO,YAAY,QAAQ,oBAAoB,SAAU,KAAK;AAC/E,mBAAO,IAAI,MAAM;AAAA;AAGrB,iBAAO,KAAK,gBAAgB;AAAA;AAGhC,YAAI,qBAAqB;AAEzB,+BAAwB;AACpB,iBAAO,KAAK;AAAA;AAGhB,YAAI,iBAAiB;AACrB,YAAI,gCAAgC;AAEpC,yBAAkB,QAAQ;AACtB,iBAAO,KAAK,SAAS,QAAQ,MAAM;AAAA;AAGvC,YAAI,sBAAsB;AAAA,UACtB,QAAS;AAAA,UACT,MAAS;AAAA,UACT,GAAK;AAAA,UACL,IAAK;AAAA,UACL,GAAK;AAAA,UACL,IAAK;AAAA,UACL,GAAK;AAAA,UACL,IAAK;AAAA,UACL,GAAK;AAAA,UACL,IAAK;AAAA,UACL,GAAK;AAAA,UACL,IAAK;AAAA,UACL,GAAK;AAAA,UACL,IAAK;AAAA;AAGT,8BAAuB,QAAQ,eAAe,QAAQ,UAAU;AAC5D,cAAI,SAAS,KAAK,cAAc;AAChC,iBAAQ,YAAW,UACf,OAAO,QAAQ,eAAe,QAAQ,YACtC,OAAO,QAAQ,OAAO;AAAA;AAG9B,4BAAqB,OAAM,QAAQ;AAC/B,cAAI,UAAS,KAAK,cAAc,QAAO,IAAI,WAAW;AACtD,iBAAO,YAAW,WAAU,QAAO,UAAU,QAAO,QAAQ,OAAO;AAAA;AAGvE,YAAI,UAAU;AAEd,8BAAuB,MAAM,WAAW;AACpC,cAAI,YAAY,KAAK;AACrB,kBAAQ,aAAa,QAAQ,YAAY,OAAO,QAAQ,aAAa;AAAA;AAGzE,gCAAwB,OAAO;AAC3B,iBAAO,OAAO,UAAU,WAAW,QAAQ,UAAU,QAAQ,MAAM,iBAAiB;AAAA;AAGxF,sCAA8B,aAAa;AACvC,cAAI,kBAAkB,IAClB,gBACA;AAEJ,eAAK,QAAQ,aAAa;AACtB,gBAAI,WAAW,aAAa,OAAO;AAC/B,+BAAiB,eAAe;AAChC,kBAAI,gBAAgB;AAChB,gCAAgB,kBAAkB,YAAY;AAAA;AAAA;AAAA;AAK1D,iBAAO;AAAA;AAGX,YAAI,aAAa;AAEjB,iCAAyB,MAAM,UAAU;AACrC,qBAAW,QAAQ;AAAA;AAGvB,qCAA6B,UAAU;AACnC,cAAI,QAAQ;AACZ,mBAAS,KAAK,UAAU;AACpB,kBAAM,KAAK,EAAC,MAAM,GAAG,UAAU,WAAW;AAAA;AAE9C,gBAAM,KAAK,SAAU,GAAG,GAAG;AACvB,mBAAO,EAAE,WAAW,EAAE;AAAA;AAE1B,iBAAO;AAAA;AAGX,0BAAkB,QAAQ,cAAc,WAAW;AAC/C,cAAI,YAAY,KAAK,KAAK,IAAI,SAC1B,cAAc,eAAe,UAAU,QACvC,QAAO,UAAU;AACrB,iBAAQ,SAAQ,YAAY,MAAM,KAAM,OACpC,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,cAAc,WAAW,OAAO,KAAK;AAAA;AAGtE,YAAI,mBAAmB;AAEvB,YAAI,wBAAwB;AAE5B,YAAI,kBAAkB;AAEtB,YAAI,uBAAuB;AAM3B,gCAAyB,QAAO,QAAQ,UAAS,UAAU;AACvD,cAAI,OAAO;AACX,cAAI,OAAO,aAAa,UAAU;AAC9B,mBAAO,WAAY;AACf,qBAAO,KAAK;AAAA;AAAA;AAGpB,cAAI,QAAO;AACP,iCAAqB,UAAS;AAAA;AAElC,cAAI,QAAQ;AACR,iCAAqB,OAAO,MAAM,WAAY;AAC1C,qBAAO,SAAS,KAAK,MAAM,MAAM,YAAY,OAAO,IAAI,OAAO;AAAA;AAAA;AAGvE,cAAI,UAAS;AACT,iCAAqB,YAAW,WAAY;AACxC,qBAAO,KAAK,aAAa,QAAQ,KAAK,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA;AAK1E,wCAAgC,OAAO;AACnC,cAAI,MAAM,MAAM,aAAa;AACzB,mBAAO,MAAM,QAAQ,YAAY;AAAA;AAErC,iBAAO,MAAM,QAAQ,OAAO;AAAA;AAGhC,oCAA4B,SAAQ;AAChC,cAAI,QAAQ,QAAO,MAAM,mBAAmB,GAAG;AAE/C,eAAK,IAAI,GAAG,SAAS,MAAM,QAAQ,IAAI,QAAQ,KAAK;AAChD,gBAAI,qBAAqB,MAAM,KAAK;AAChC,oBAAM,KAAK,qBAAqB,MAAM;AAAA,mBACnC;AACH,oBAAM,KAAK,uBAAuB,MAAM;AAAA;AAAA;AAIhD,iBAAO,SAAU,KAAK;AAClB,gBAAI,SAAS,IAAI;AACjB,iBAAK,KAAI,GAAG,KAAI,QAAQ,MAAK;AACzB,wBAAU,YAAW,MAAM,OAAM,MAAM,IAAG,KAAK,KAAK,WAAU,MAAM;AAAA;AAExE,mBAAO;AAAA;AAAA;AAKf,8BAAsB,GAAG,SAAQ;AAC7B,cAAI,CAAC,EAAE,WAAW;AACd,mBAAO,EAAE,aAAa;AAAA;AAG1B,oBAAS,aAAa,SAAQ,EAAE;AAChC,0BAAgB,WAAU,gBAAgB,YAAW,mBAAmB;AAExE,iBAAO,gBAAgB,SAAQ;AAAA;AAGnC,8BAAsB,SAAQ,SAAQ;AAClC,cAAI,IAAI;AAER,+CAAqC,OAAO;AACxC,mBAAO,QAAO,eAAe,UAAU;AAAA;AAG3C,gCAAsB,YAAY;AAClC,iBAAO,KAAK,KAAK,sBAAsB,KAAK,UAAS;AACjD,sBAAS,QAAO,QAAQ,uBAAuB;AAC/C,kCAAsB,YAAY;AAClC,iBAAK;AAAA;AAGT,iBAAO;AAAA;AAGX,YAAI,SAAiB;AACrB,YAAI,SAAiB;AACrB,YAAI,SAAiB;AACrB,YAAI,SAAiB;AACrB,YAAI,SAAiB;AACrB,YAAI,YAAiB;AACrB,YAAI,YAAiB;AACrB,YAAI,YAAiB;AACrB,YAAI,YAAiB;AACrB,YAAI,YAAiB;AACrB,YAAI,YAAiB;AAErB,YAAI,gBAAiB;AACrB,YAAI,cAAiB;AAErB,YAAI,cAAiB;AACrB,YAAI,mBAAmB;AAEvB,YAAI,iBAAiB;AAIrB,YAAI,YAAY;AAEhB,YAAI,UAAU;AAEd,+BAAwB,QAAO,OAAO,aAAa;AAC/C,kBAAQ,UAAS,YAAW,SAAS,QAAQ,SAAU,UAAU,aAAY;AACzE,mBAAQ,YAAY,cAAe,cAAc;AAAA;AAAA;AAIzD,uCAAgC,QAAO,QAAQ;AAC3C,cAAI,CAAC,WAAW,SAAS,SAAQ;AAC7B,mBAAO,IAAI,OAAO,eAAe;AAAA;AAGrC,iBAAO,QAAQ,QAAO,OAAO,SAAS,OAAO;AAAA;AAIjD,gCAAwB,GAAG;AACvB,iBAAO,YAAY,EAAE,QAAQ,MAAM,IAAI,QAAQ,uCAAuC,SAAU,SAAS,IAAI,IAAI,IAAI,IAAI;AACrH,mBAAO,MAAM,MAAM,MAAM;AAAA;AAAA;AAIjC,6BAAqB,GAAG;AACpB,iBAAO,EAAE,QAAQ,0BAA0B;AAAA;AAG/C,YAAI,SAAS;AAEb,+BAAwB,QAAO,UAAU;AACrC,cAAI,GAAG,OAAO;AACd,cAAI,OAAO,WAAU,UAAU;AAC3B,qBAAQ,CAAC;AAAA;AAEb,cAAI,SAAS,WAAW;AACpB,mBAAO,SAAU,OAAO,OAAO;AAC3B,oBAAM,YAAY,MAAM;AAAA;AAAA;AAGhC,eAAK,IAAI,GAAG,IAAI,OAAM,QAAQ,KAAK;AAC/B,mBAAO,OAAM,MAAM;AAAA;AAAA;AAI3B,mCAA4B,QAAO,UAAU;AACzC,wBAAc,QAAO,SAAU,OAAO,OAAO,QAAQ,QAAO;AACxD,mBAAO,KAAK,OAAO,MAAM;AACzB,qBAAS,OAAO,OAAO,IAAI,QAAQ;AAAA;AAAA;AAI3C,yCAAiC,QAAO,OAAO,QAAQ;AACnD,cAAI,SAAS,QAAQ,WAAW,QAAQ,SAAQ;AAC5C,mBAAO,QAAO,OAAO,OAAO,IAAI,QAAQ;AAAA;AAAA;AAIhD,YAAI,OAAO;AACX,YAAI,QAAQ;AACZ,YAAI,OAAO;AACX,YAAI,OAAO;AACX,YAAI,SAAS;AACb,YAAI,SAAS;AACb,YAAI,cAAc;AAClB,YAAI,OAAO;AACX,YAAI,UAAU;AAId,uBAAe,KAAK,GAAG,GAAG,WAAY;AAClC,cAAI,IAAI,KAAK;AACb,iBAAO,KAAK,OAAO,KAAK,IAAI,MAAM;AAAA;AAGtC,uBAAe,GAAG,CAAC,MAAM,IAAI,GAAG,WAAY;AACxC,iBAAO,KAAK,SAAS;AAAA;AAGzB,uBAAe,GAAG,CAAC,QAAU,IAAU,GAAG;AAC1C,uBAAe,GAAG,CAAC,SAAU,IAAU,GAAG;AAC1C,uBAAe,GAAG,CAAC,UAAU,GAAG,OAAO,GAAG;AAI1C,qBAAa,QAAQ;AAIrB,wBAAgB,QAAQ;AAIxB,sBAAc,KAAU;AACxB,sBAAc,MAAU,WAAW;AACnC,sBAAc,QAAU,WAAW;AACnC,sBAAc,SAAU,WAAW;AACnC,sBAAc,UAAU,WAAW;AAEnC,sBAAc,CAAC,SAAS,WAAW;AACnC,sBAAc,QAAQ,SAAU,OAAO,OAAO;AAC1C,gBAAM,QAAQ,MAAM,WAAW,IAAI,MAAM,kBAAkB,SAAS,MAAM;AAAA;AAE9E,sBAAc,MAAM,SAAU,OAAO,OAAO;AACxC,gBAAM,QAAQ,MAAM,kBAAkB;AAAA;AAE1C,sBAAc,KAAK,SAAU,OAAO,OAAO;AACvC,gBAAM,QAAQ,SAAS,OAAO;AAAA;AAKlC,4BAAoB,MAAM;AACtB,iBAAO,WAAW,QAAQ,MAAM;AAAA;AAGpC,4BAAoB,MAAM;AACtB,iBAAQ,OAAO,MAAM,KAAK,OAAO,QAAQ,KAAM,OAAO,QAAQ;AAAA;AAKlE,cAAM,oBAAoB,SAAU,OAAO;AACvC,iBAAO,MAAM,SAAU,OAAM,SAAS,KAAK,OAAO;AAAA;AAKtD,YAAI,aAAa,WAAW,YAAY;AAExC,iCAA0B;AACtB,iBAAO,WAAW,KAAK;AAAA;AAG3B,4BAAqB,MAAM,UAAU;AACjC,iBAAO,SAAU,OAAO;AACpB,gBAAI,SAAS,MAAM;AACf,oBAAM,MAAM,MAAM;AAClB,oBAAM,aAAa,MAAM;AACzB,qBAAO;AAAA,mBACJ;AACH,qBAAO,KAAI,MAAM;AAAA;AAAA;AAAA;AAK7B,sBAAc,KAAK,MAAM;AACrB,iBAAO,IAAI,YACP,IAAI,GAAG,QAAS,KAAI,SAAS,QAAQ,MAAM,UAAU;AAAA;AAG7D,uBAAgB,KAAK,MAAM,OAAO;AAC9B,cAAI,IAAI,aAAa,CAAC,MAAM,QAAQ;AAChC,gBAAI,SAAS,cAAc,WAAW,IAAI,WAAW,IAAI,YAAY,KAAK,IAAI,WAAW,IAAI;AACzF,kBAAI,GAAG,QAAS,KAAI,SAAS,QAAQ,MAAM,MAAM,OAAO,IAAI,SAAS,YAAY,OAAO,IAAI;AAAA,mBAE3F;AACD,kBAAI,GAAG,QAAS,KAAI,SAAS,QAAQ,MAAM,MAAM;AAAA;AAAA;AAAA;AAO7D,2BAAoB,OAAO;AACvB,kBAAQ,eAAe;AACvB,cAAI,YAAW,KAAK,SAAS;AACzB,mBAAO,KAAK;AAAA;AAEhB,iBAAO;AAAA;AAIX,2BAAoB,OAAO,OAAO;AAC9B,cAAI,OAAO,UAAU,UAAU;AAC3B,oBAAQ,qBAAqB;AAC7B,gBAAI,cAAc,oBAAoB;AACtC,qBAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AACzC,mBAAK,YAAY,GAAG,MAAM,MAAM,YAAY,GAAG;AAAA;AAAA,iBAEhD;AACH,oBAAQ,eAAe;AACvB,gBAAI,YAAW,KAAK,SAAS;AACzB,qBAAO,KAAK,OAAO;AAAA;AAAA;AAG3B,iBAAO;AAAA;AAGX,qBAAa,GAAG,GAAG;AACf,iBAAS,KAAI,IAAK,KAAK;AAAA;AAG3B,YAAI;AAEJ,YAAI,MAAM,UAAU,SAAS;AACzB,qBAAU,MAAM,UAAU;AAAA,eACvB;AACH,qBAAU,SAAU,GAAG;AAEnB,gBAAI;AACJ,iBAAK,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AAC9B,kBAAI,KAAK,OAAO,GAAG;AACf,uBAAO;AAAA;AAAA;AAGf,mBAAO;AAAA;AAAA;AAIf,6BAAqB,MAAM,OAAO;AAC9B,cAAI,MAAM,SAAS,MAAM,QAAQ;AAC7B,mBAAO;AAAA;AAEX,cAAI,WAAW,IAAI,OAAO;AAC1B,kBAAS,SAAQ,YAAY;AAC7B,iBAAO,aAAa,IAAK,WAAW,QAAQ,KAAK,KAAO,KAAK,WAAW,IAAI;AAAA;AAKhF,uBAAe,KAAK,CAAC,MAAM,IAAI,MAAM,WAAY;AAC7C,iBAAO,KAAK,UAAU;AAAA;AAG1B,uBAAe,OAAO,GAAG,GAAG,SAAU,SAAQ;AAC1C,iBAAO,KAAK,aAAa,YAAY,MAAM;AAAA;AAG/C,uBAAe,QAAQ,GAAG,GAAG,SAAU,SAAQ;AAC3C,iBAAO,KAAK,aAAa,OAAO,MAAM;AAAA;AAK1C,qBAAa,SAAS;AAItB,wBAAgB,SAAS;AAIzB,sBAAc,KAAQ;AACtB,sBAAc,MAAQ,WAAW;AACjC,sBAAc,OAAQ,SAAU,UAAU,SAAQ;AAC9C,iBAAO,QAAO,iBAAiB;AAAA;AAEnC,sBAAc,QAAQ,SAAU,UAAU,SAAQ;AAC9C,iBAAO,QAAO,YAAY;AAAA;AAG9B,sBAAc,CAAC,KAAK,OAAO,SAAU,OAAO,OAAO;AAC/C,gBAAM,SAAS,MAAM,SAAS;AAAA;AAGlC,sBAAc,CAAC,OAAO,SAAS,SAAU,OAAO,OAAO,QAAQ,QAAO;AAClE,cAAI,QAAQ,OAAO,QAAQ,YAAY,OAAO,QAAO,OAAO;AAE5D,cAAI,SAAS,MAAM;AACf,kBAAM,SAAS;AAAA,iBACZ;AACH,4BAAgB,QAAQ,eAAe;AAAA;AAAA;AAM/C,YAAI,mBAAmB;AACvB,YAAI,sBAAsB,wFAAwF,MAAM;AACxH,8BAAuB,GAAG,SAAQ;AAC9B,cAAI,CAAC,GAAG;AACJ,mBAAO,SAAQ,KAAK,WAAW,KAAK,UAChC,KAAK,QAAQ;AAAA;AAErB,iBAAO,SAAQ,KAAK,WAAW,KAAK,QAAQ,EAAE,WAC1C,KAAK,QAAS,MAAK,QAAQ,YAAY,kBAAkB,KAAK,WAAU,WAAW,cAAc,EAAE;AAAA;AAG3G,YAAI,2BAA2B,kDAAkD,MAAM;AACvF,mCAA4B,GAAG,SAAQ;AACnC,cAAI,CAAC,GAAG;AACJ,mBAAO,SAAQ,KAAK,gBAAgB,KAAK,eACrC,KAAK,aAAa;AAAA;AAE1B,iBAAO,SAAQ,KAAK,gBAAgB,KAAK,aAAa,EAAE,WACpD,KAAK,aAAa,iBAAiB,KAAK,WAAU,WAAW,cAAc,EAAE;AAAA;AAGrF,mCAA2B,WAAW,SAAQ,QAAQ;AAClD,cAAI,GAAG,IAAI,KAAK,MAAM,UAAU;AAChC,cAAI,CAAC,KAAK,cAAc;AAEpB,iBAAK,eAAe;AACpB,iBAAK,mBAAmB;AACxB,iBAAK,oBAAoB;AACzB,iBAAK,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AACrB,oBAAM,UAAU,CAAC,KAAM;AACvB,mBAAK,kBAAkB,KAAK,KAAK,YAAY,KAAK,IAAI;AACtD,mBAAK,iBAAiB,KAAK,KAAK,OAAO,KAAK,IAAI;AAAA;AAAA;AAIxD,cAAI,QAAQ;AACR,gBAAI,YAAW,OAAO;AAClB,mBAAK,SAAQ,KAAK,KAAK,mBAAmB;AAC1C,qBAAO,OAAO,KAAK,KAAK;AAAA,mBACrB;AACH,mBAAK,SAAQ,KAAK,KAAK,kBAAkB;AACzC,qBAAO,OAAO,KAAK,KAAK;AAAA;AAAA,iBAEzB;AACH,gBAAI,YAAW,OAAO;AAClB,mBAAK,SAAQ,KAAK,KAAK,mBAAmB;AAC1C,kBAAI,OAAO,IAAI;AACX,uBAAO;AAAA;AAEX,mBAAK,SAAQ,KAAK,KAAK,kBAAkB;AACzC,qBAAO,OAAO,KAAK,KAAK;AAAA,mBACrB;AACH,mBAAK,SAAQ,KAAK,KAAK,kBAAkB;AACzC,kBAAI,OAAO,IAAI;AACX,uBAAO;AAAA;AAEX,mBAAK,SAAQ,KAAK,KAAK,mBAAmB;AAC1C,qBAAO,OAAO,KAAK,KAAK;AAAA;AAAA;AAAA;AAKpC,mCAA4B,WAAW,SAAQ,QAAQ;AACnD,cAAI,GAAG,KAAK;AAEZ,cAAI,KAAK,mBAAmB;AACxB,mBAAO,kBAAkB,KAAK,MAAM,WAAW,SAAQ;AAAA;AAG3D,cAAI,CAAC,KAAK,cAAc;AACpB,iBAAK,eAAe;AACpB,iBAAK,mBAAmB;AACxB,iBAAK,oBAAoB;AAAA;AAM7B,eAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AAErB,kBAAM,UAAU,CAAC,KAAM;AACvB,gBAAI,UAAU,CAAC,KAAK,iBAAiB,IAAI;AACrC,mBAAK,iBAAiB,KAAK,IAAI,OAAO,MAAM,KAAK,OAAO,KAAK,IAAI,QAAQ,KAAK,MAAM,KAAK;AACzF,mBAAK,kBAAkB,KAAK,IAAI,OAAO,MAAM,KAAK,YAAY,KAAK,IAAI,QAAQ,KAAK,MAAM,KAAK;AAAA;AAEnG,gBAAI,CAAC,UAAU,CAAC,KAAK,aAAa,IAAI;AAClC,sBAAQ,MAAM,KAAK,OAAO,KAAK,MAAM,OAAO,KAAK,YAAY,KAAK;AAClE,mBAAK,aAAa,KAAK,IAAI,OAAO,MAAM,QAAQ,KAAK,KAAK;AAAA;AAG9D,gBAAI,UAAU,YAAW,UAAU,KAAK,iBAAiB,GAAG,KAAK,YAAY;AACzE,qBAAO;AAAA,uBACA,UAAU,YAAW,SAAS,KAAK,kBAAkB,GAAG,KAAK,YAAY;AAChF,qBAAO;AAAA,uBACA,CAAC,UAAU,KAAK,aAAa,GAAG,KAAK,YAAY;AACxD,qBAAO;AAAA;AAAA;AAAA;AAOnB,0BAAmB,KAAK,OAAO;AAC3B,cAAI;AAEJ,cAAI,CAAC,IAAI,WAAW;AAEhB,mBAAO;AAAA;AAGX,cAAI,OAAO,UAAU,UAAU;AAC3B,gBAAI,QAAQ,KAAK,QAAQ;AACrB,sBAAQ,MAAM;AAAA,mBACX;AACH,sBAAQ,IAAI,aAAa,YAAY;AAErC,kBAAI,CAAC,SAAS,QAAQ;AAClB,uBAAO;AAAA;AAAA;AAAA;AAKnB,uBAAa,KAAK,IAAI,IAAI,QAAQ,YAAY,IAAI,QAAQ;AAC1D,cAAI,GAAG,QAAS,KAAI,SAAS,QAAQ,MAAM,SAAS,OAAO;AAC3D,iBAAO;AAAA;AAGX,6BAAsB,OAAO;AACzB,cAAI,SAAS,MAAM;AACf,qBAAS,MAAM;AACf,kBAAM,aAAa,MAAM;AACzB,mBAAO;AAAA,iBACJ;AACH,mBAAO,KAAI,MAAM;AAAA;AAAA;AAIzB,kCAA2B;AACvB,iBAAO,YAAY,KAAK,QAAQ,KAAK;AAAA;AAGzC,YAAI,0BAA0B;AAC9B,kCAA2B,UAAU;AACjC,cAAI,KAAK,mBAAmB;AACxB,gBAAI,CAAC,WAAW,MAAM,iBAAiB;AACnC,iCAAmB,KAAK;AAAA;AAE5B,gBAAI,UAAU;AACV,qBAAO,KAAK;AAAA,mBACT;AACH,qBAAO,KAAK;AAAA;AAAA,iBAEb;AACH,gBAAI,CAAC,WAAW,MAAM,sBAAsB;AACxC,mBAAK,oBAAoB;AAAA;AAE7B,mBAAO,KAAK,2BAA2B,WACnC,KAAK,0BAA0B,KAAK;AAAA;AAAA;AAIhD,YAAI,qBAAqB;AACzB,6BAAsB,UAAU;AAC5B,cAAI,KAAK,mBAAmB;AACxB,gBAAI,CAAC,WAAW,MAAM,iBAAiB;AACnC,iCAAmB,KAAK;AAAA;AAE5B,gBAAI,UAAU;AACV,qBAAO,KAAK;AAAA,mBACT;AACH,qBAAO,KAAK;AAAA;AAAA,iBAEb;AACH,gBAAI,CAAC,WAAW,MAAM,iBAAiB;AACnC,mBAAK,eAAe;AAAA;AAExB,mBAAO,KAAK,sBAAsB,WAC9B,KAAK,qBAAqB,KAAK;AAAA;AAAA;AAI3C,sCAA+B;AAC3B,6BAAmB,GAAG,GAAG;AACrB,mBAAO,EAAE,SAAS,EAAE;AAAA;AAGxB,cAAI,cAAc,IAAI,aAAa,IAAI,cAAc,IACjD,GAAG;AACP,eAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AAErB,kBAAM,UAAU,CAAC,KAAM;AACvB,wBAAY,KAAK,KAAK,YAAY,KAAK;AACvC,uBAAW,KAAK,KAAK,OAAO,KAAK;AACjC,wBAAY,KAAK,KAAK,OAAO,KAAK;AAClC,wBAAY,KAAK,KAAK,YAAY,KAAK;AAAA;AAI3C,sBAAY,KAAK;AACjB,qBAAW,KAAK;AAChB,sBAAY,KAAK;AACjB,eAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACrB,wBAAY,KAAK,YAAY,YAAY;AACzC,uBAAW,KAAK,YAAY,WAAW;AAAA;AAE3C,eAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACrB,wBAAY,KAAK,YAAY,YAAY;AAAA;AAG7C,eAAK,eAAe,IAAI,OAAO,OAAO,YAAY,KAAK,OAAO,KAAK;AACnE,eAAK,oBAAoB,KAAK;AAC9B,eAAK,qBAAqB,IAAI,OAAO,OAAO,WAAW,KAAK,OAAO,KAAK;AACxE,eAAK,0BAA0B,IAAI,OAAO,OAAO,YAAY,KAAK,OAAO,KAAK;AAAA;AAGlF,4BAAqB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI;AAGvC,cAAI;AAEJ,cAAI,IAAI,OAAO,KAAK,GAAG;AAEnB,mBAAO,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG;AACxC,gBAAI,SAAS,KAAK,gBAAgB;AAC9B,mBAAK,YAAY;AAAA;AAAA,iBAElB;AACH,mBAAO,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA;AAGtC,iBAAO;AAAA;AAGX,+BAAwB,GAAG;AACvB,cAAI;AAEJ,cAAI,IAAI,OAAO,KAAK,GAAG;AACnB,gBAAI,OAAO,MAAM,UAAU,MAAM,KAAK;AAEtC,iBAAK,KAAK,IAAI;AACd,mBAAO,IAAI,KAAK,KAAK,IAAI,MAAM,MAAM;AACrC,gBAAI,SAAS,KAAK,mBAAmB;AACjC,mBAAK,eAAe;AAAA;AAAA,iBAErB;AACH,mBAAO,IAAI,KAAK,KAAK,IAAI,MAAM,MAAM;AAAA;AAGzC,iBAAO;AAAA;AAIX,iCAAyB,MAAM,KAAK,KAAK;AACrC,cACI,MAAM,IAAI,MAAM,KAEhB,QAAS,KAAI,cAAc,MAAM,GAAG,KAAK,cAAc,OAAO;AAElE,iBAAO,CAAC,QAAQ,MAAM;AAAA;AAI1B,oCAA4B,MAAM,MAAM,SAAS,KAAK,KAAK;AACvD,cAAI,eAAgB,KAAI,UAAU,OAAO,GACrC,aAAa,gBAAgB,MAAM,KAAK,MACxC,YAAY,IAAI,IAAK,QAAO,KAAK,eAAe,YAChD,SAAS;AAEb,cAAI,aAAa,GAAG;AAChB,sBAAU,OAAO;AACjB,2BAAe,WAAW,WAAW;AAAA,qBAC9B,YAAY,WAAW,OAAO;AACrC,sBAAU,OAAO;AACjB,2BAAe,YAAY,WAAW;AAAA,iBACnC;AACH,sBAAU;AACV,2BAAe;AAAA;AAGnB,iBAAO;AAAA,YACH,MAAM;AAAA,YACN,WAAW;AAAA;AAAA;AAInB,4BAAoB,KAAK,KAAK,KAAK;AAC/B,cAAI,aAAa,gBAAgB,IAAI,QAAQ,KAAK,MAC9C,OAAO,KAAK,MAAO,KAAI,cAAc,aAAa,KAAK,KAAK,GAC5D,SAAS;AAEb,cAAI,OAAO,GAAG;AACV,sBAAU,IAAI,SAAS;AACvB,sBAAU,OAAO,YAAY,SAAS,KAAK;AAAA,qBACpC,OAAO,YAAY,IAAI,QAAQ,KAAK,MAAM;AACjD,sBAAU,OAAO,YAAY,IAAI,QAAQ,KAAK;AAC9C,sBAAU,IAAI,SAAS;AAAA,iBACpB;AACH,sBAAU,IAAI;AACd,sBAAU;AAAA;AAGd,iBAAO;AAAA,YACH,MAAM;AAAA,YACN,MAAM;AAAA;AAAA;AAId,6BAAqB,MAAM,KAAK,KAAK;AACjC,cAAI,aAAa,gBAAgB,MAAM,KAAK,MACxC,iBAAiB,gBAAgB,OAAO,GAAG,KAAK;AACpD,iBAAQ,YAAW,QAAQ,aAAa,kBAAkB;AAAA;AAK9D,uBAAe,KAAK,CAAC,MAAM,IAAI,MAAM;AACrC,uBAAe,KAAK,CAAC,MAAM,IAAI,MAAM;AAIrC,qBAAa,QAAQ;AACrB,qBAAa,WAAW;AAIxB,wBAAgB,QAAQ;AACxB,wBAAgB,WAAW;AAI3B,sBAAc,KAAM;AACpB,sBAAc,MAAM,WAAW;AAC/B,sBAAc,KAAM;AACpB,sBAAc,MAAM,WAAW;AAE/B,0BAAkB,CAAC,KAAK,MAAM,KAAK,OAAO,SAAU,OAAO,MAAM,QAAQ,QAAO;AAC5E,eAAK,OAAM,OAAO,GAAG,MAAM,MAAM;AAAA;AAOrC,4BAAqB,KAAK;AACtB,iBAAO,WAAW,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK;AAAA;AAG3D,YAAI,oBAAoB;AAAA,UACpB,KAAM;AAAA,UACN,KAAM;AAAA;AAGV,wCAAiC;AAC7B,iBAAO,KAAK,MAAM;AAAA;AAGtB,wCAAiC;AAC7B,iBAAO,KAAK,MAAM;AAAA;AAKtB,4BAAqB,OAAO;AACxB,cAAI,OAAO,KAAK,aAAa,KAAK;AAClC,iBAAO,SAAS,OAAO,OAAO,KAAK,IAAK,SAAQ,QAAQ,GAAG;AAAA;AAG/D,+BAAwB,OAAO;AAC3B,cAAI,OAAO,WAAW,MAAM,GAAG,GAAG;AAClC,iBAAO,SAAS,OAAO,OAAO,KAAK,IAAK,SAAQ,QAAQ,GAAG;AAAA;AAK/D,uBAAe,KAAK,GAAG,MAAM;AAE7B,uBAAe,MAAM,GAAG,GAAG,SAAU,SAAQ;AACzC,iBAAO,KAAK,aAAa,YAAY,MAAM;AAAA;AAG/C,uBAAe,OAAO,GAAG,GAAG,SAAU,SAAQ;AAC1C,iBAAO,KAAK,aAAa,cAAc,MAAM;AAAA;AAGjD,uBAAe,QAAQ,GAAG,GAAG,SAAU,SAAQ;AAC3C,iBAAO,KAAK,aAAa,SAAS,MAAM;AAAA;AAG5C,uBAAe,KAAK,GAAG,GAAG;AAC1B,uBAAe,KAAK,GAAG,GAAG;AAI1B,qBAAa,OAAO;AACpB,qBAAa,WAAW;AACxB,qBAAa,cAAc;AAG3B,wBAAgB,OAAO;AACvB,wBAAgB,WAAW;AAC3B,wBAAgB,cAAc;AAI9B,sBAAc,KAAQ;AACtB,sBAAc,KAAQ;AACtB,sBAAc,KAAQ;AACtB,sBAAc,MAAQ,SAAU,UAAU,SAAQ;AAC9C,iBAAO,QAAO,iBAAiB;AAAA;AAEnC,sBAAc,OAAS,SAAU,UAAU,SAAQ;AAC/C,iBAAO,QAAO,mBAAmB;AAAA;AAErC,sBAAc,QAAU,SAAU,UAAU,SAAQ;AAChD,iBAAO,QAAO,cAAc;AAAA;AAGhC,0BAAkB,CAAC,MAAM,OAAO,SAAS,SAAU,OAAO,MAAM,QAAQ,QAAO;AAC3E,cAAI,UAAU,OAAO,QAAQ,cAAc,OAAO,QAAO,OAAO;AAEhE,cAAI,WAAW,MAAM;AACjB,iBAAK,IAAI;AAAA,iBACN;AACH,4BAAgB,QAAQ,iBAAiB;AAAA;AAAA;AAIjD,0BAAkB,CAAC,KAAK,KAAK,MAAM,SAAU,OAAO,MAAM,QAAQ,QAAO;AACrE,eAAK,UAAS,MAAM;AAAA;AAKxB,8BAAsB,OAAO,SAAQ;AACjC,cAAI,OAAO,UAAU,UAAU;AAC3B,mBAAO;AAAA;AAGX,cAAI,CAAC,MAAM,QAAQ;AACf,mBAAO,SAAS,OAAO;AAAA;AAG3B,kBAAQ,QAAO,cAAc;AAC7B,cAAI,OAAO,UAAU,UAAU;AAC3B,mBAAO;AAAA;AAGX,iBAAO;AAAA;AAGX,iCAAyB,OAAO,SAAQ;AACpC,cAAI,OAAO,UAAU,UAAU;AAC3B,mBAAO,QAAO,cAAc,SAAS,KAAK;AAAA;AAE9C,iBAAO,MAAM,SAAS,OAAO;AAAA;AAIjC,+BAAwB,IAAI,GAAG;AAC3B,iBAAO,GAAG,MAAM,GAAG,GAAG,OAAO,GAAG,MAAM,GAAG;AAAA;AAG7C,YAAI,wBAAwB,2DAA2D,MAAM;AAC7F,gCAAyB,GAAG,SAAQ;AAChC,cAAI,WAAW,SAAQ,KAAK,aAAa,KAAK,YAC1C,KAAK,UAAW,KAAK,MAAM,QAAQ,KAAK,UAAU,SAAS,KAAK,WAAW,WAAW;AAC1F,iBAAQ,MAAM,OAAQ,cAAc,UAAU,KAAK,MAAM,OAClD,IAAK,SAAS,EAAE,SAAS;AAAA;AAGpC,YAAI,6BAA6B,8BAA8B,MAAM;AACrE,qCAA8B,GAAG;AAC7B,iBAAQ,MAAM,OAAQ,cAAc,KAAK,gBAAgB,KAAK,MAAM,OAC7D,IAAK,KAAK,eAAe,EAAE,SAAS,KAAK;AAAA;AAGpD,YAAI,2BAA2B,uBAAuB,MAAM;AAC5D,mCAA4B,GAAG;AAC3B,iBAAQ,MAAM,OAAQ,cAAc,KAAK,cAAc,KAAK,MAAM,OAC3D,IAAK,KAAK,aAAa,EAAE,SAAS,KAAK;AAAA;AAGlD,qCAA6B,aAAa,SAAQ,QAAQ;AACtD,cAAI,GAAG,IAAI,KAAK,MAAM,YAAY;AAClC,cAAI,CAAC,KAAK,gBAAgB;AACtB,iBAAK,iBAAiB;AACtB,iBAAK,sBAAsB;AAC3B,iBAAK,oBAAoB;AAEzB,iBAAK,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACpB,oBAAM,UAAU,CAAC,KAAM,IAAI,IAAI;AAC/B,mBAAK,kBAAkB,KAAK,KAAK,YAAY,KAAK,IAAI;AACtD,mBAAK,oBAAoB,KAAK,KAAK,cAAc,KAAK,IAAI;AAC1D,mBAAK,eAAe,KAAK,KAAK,SAAS,KAAK,IAAI;AAAA;AAAA;AAIxD,cAAI,QAAQ;AACR,gBAAI,YAAW,QAAQ;AACnB,mBAAK,SAAQ,KAAK,KAAK,gBAAgB;AACvC,qBAAO,OAAO,KAAK,KAAK;AAAA,uBACjB,YAAW,OAAO;AACzB,mBAAK,SAAQ,KAAK,KAAK,qBAAqB;AAC5C,qBAAO,OAAO,KAAK,KAAK;AAAA,mBACrB;AACH,mBAAK,SAAQ,KAAK,KAAK,mBAAmB;AAC1C,qBAAO,OAAO,KAAK,KAAK;AAAA;AAAA,iBAEzB;AACH,gBAAI,YAAW,QAAQ;AACnB,mBAAK,SAAQ,KAAK,KAAK,gBAAgB;AACvC,kBAAI,OAAO,IAAI;AACX,uBAAO;AAAA;AAEX,mBAAK,SAAQ,KAAK,KAAK,qBAAqB;AAC5C,kBAAI,OAAO,IAAI;AACX,uBAAO;AAAA;AAEX,mBAAK,SAAQ,KAAK,KAAK,mBAAmB;AAC1C,qBAAO,OAAO,KAAK,KAAK;AAAA,uBACjB,YAAW,OAAO;AACzB,mBAAK,SAAQ,KAAK,KAAK,qBAAqB;AAC5C,kBAAI,OAAO,IAAI;AACX,uBAAO;AAAA;AAEX,mBAAK,SAAQ,KAAK,KAAK,gBAAgB;AACvC,kBAAI,OAAO,IAAI;AACX,uBAAO;AAAA;AAEX,mBAAK,SAAQ,KAAK,KAAK,mBAAmB;AAC1C,qBAAO,OAAO,KAAK,KAAK;AAAA,mBACrB;AACH,mBAAK,SAAQ,KAAK,KAAK,mBAAmB;AAC1C,kBAAI,OAAO,IAAI;AACX,uBAAO;AAAA;AAEX,mBAAK,SAAQ,KAAK,KAAK,gBAAgB;AACvC,kBAAI,OAAO,IAAI;AACX,uBAAO;AAAA;AAEX,mBAAK,SAAQ,KAAK,KAAK,qBAAqB;AAC5C,qBAAO,OAAO,KAAK,KAAK;AAAA;AAAA;AAAA;AAKpC,qCAA8B,aAAa,SAAQ,QAAQ;AACvD,cAAI,GAAG,KAAK;AAEZ,cAAI,KAAK,qBAAqB;AAC1B,mBAAO,oBAAoB,KAAK,MAAM,aAAa,SAAQ;AAAA;AAG/D,cAAI,CAAC,KAAK,gBAAgB;AACtB,iBAAK,iBAAiB;AACtB,iBAAK,oBAAoB;AACzB,iBAAK,sBAAsB;AAC3B,iBAAK,qBAAqB;AAAA;AAG9B,eAAK,IAAI,GAAG,IAAI,GAAG,KAAK;AAGpB,kBAAM,UAAU,CAAC,KAAM,IAAI,IAAI;AAC/B,gBAAI,UAAU,CAAC,KAAK,mBAAmB,IAAI;AACvC,mBAAK,mBAAmB,KAAK,IAAI,OAAO,MAAM,KAAK,SAAS,KAAK,IAAI,QAAQ,KAAK,UAAU,KAAK;AACjG,mBAAK,oBAAoB,KAAK,IAAI,OAAO,MAAM,KAAK,cAAc,KAAK,IAAI,QAAQ,KAAK,UAAU,KAAK;AACvG,mBAAK,kBAAkB,KAAK,IAAI,OAAO,MAAM,KAAK,YAAY,KAAK,IAAI,QAAQ,KAAK,UAAU,KAAK;AAAA;AAEvG,gBAAI,CAAC,KAAK,eAAe,IAAI;AACzB,sBAAQ,MAAM,KAAK,SAAS,KAAK,MAAM,OAAO,KAAK,cAAc,KAAK,MAAM,OAAO,KAAK,YAAY,KAAK;AACzG,mBAAK,eAAe,KAAK,IAAI,OAAO,MAAM,QAAQ,KAAK,KAAK;AAAA;AAGhE,gBAAI,UAAU,YAAW,UAAU,KAAK,mBAAmB,GAAG,KAAK,cAAc;AAC7E,qBAAO;AAAA,uBACA,UAAU,YAAW,SAAS,KAAK,oBAAoB,GAAG,KAAK,cAAc;AACpF,qBAAO;AAAA,uBACA,UAAU,YAAW,QAAQ,KAAK,kBAAkB,GAAG,KAAK,cAAc;AACjF,qBAAO;AAAA,uBACA,CAAC,UAAU,KAAK,eAAe,GAAG,KAAK,cAAc;AAC5D,qBAAO;AAAA;AAAA;AAAA;AAOnB,iCAA0B,OAAO;AAC7B,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO,SAAS,OAAO,OAAO;AAAA;AAElC,cAAI,MAAM,KAAK,SAAS,KAAK,GAAG,cAAc,KAAK,GAAG;AACtD,cAAI,SAAS,MAAM;AACf,oBAAQ,aAAa,OAAO,KAAK;AACjC,mBAAO,KAAK,IAAI,QAAQ,KAAK;AAAA,iBAC1B;AACH,mBAAO;AAAA;AAAA;AAIf,uCAAgC,OAAO;AACnC,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO,SAAS,OAAO,OAAO;AAAA;AAElC,cAAI,UAAW,MAAK,QAAQ,IAAI,KAAK,aAAa,MAAM,OAAO;AAC/D,iBAAO,SAAS,OAAO,UAAU,KAAK,IAAI,QAAQ,SAAS;AAAA;AAG/D,oCAA6B,OAAO;AAChC,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO,SAAS,OAAO,OAAO;AAAA;AAOlC,cAAI,SAAS,MAAM;AACf,gBAAI,UAAU,gBAAgB,OAAO,KAAK;AAC1C,mBAAO,KAAK,IAAI,KAAK,QAAQ,IAAI,UAAU,UAAU;AAAA,iBAClD;AACH,mBAAO,KAAK,SAAS;AAAA;AAAA;AAI7B,YAAI,uBAAuB;AAC3B,+BAAwB,UAAU;AAC9B,cAAI,KAAK,qBAAqB;AAC1B,gBAAI,CAAC,WAAW,MAAM,mBAAmB;AACrC,mCAAqB,KAAK;AAAA;AAE9B,gBAAI,UAAU;AACV,qBAAO,KAAK;AAAA,mBACT;AACH,qBAAO,KAAK;AAAA;AAAA,iBAEb;AACH,gBAAI,CAAC,WAAW,MAAM,mBAAmB;AACrC,mBAAK,iBAAiB;AAAA;AAE1B,mBAAO,KAAK,wBAAwB,WAChC,KAAK,uBAAuB,KAAK;AAAA;AAAA;AAI7C,YAAI,4BAA4B;AAChC,oCAA6B,UAAU;AACnC,cAAI,KAAK,qBAAqB;AAC1B,gBAAI,CAAC,WAAW,MAAM,mBAAmB;AACrC,mCAAqB,KAAK;AAAA;AAE9B,gBAAI,UAAU;AACV,qBAAO,KAAK;AAAA,mBACT;AACH,qBAAO,KAAK;AAAA;AAAA,iBAEb;AACH,gBAAI,CAAC,WAAW,MAAM,wBAAwB;AAC1C,mBAAK,sBAAsB;AAAA;AAE/B,mBAAO,KAAK,6BAA6B,WACrC,KAAK,4BAA4B,KAAK;AAAA;AAAA;AAIlD,YAAI,0BAA0B;AAC9B,kCAA2B,UAAU;AACjC,cAAI,KAAK,qBAAqB;AAC1B,gBAAI,CAAC,WAAW,MAAM,mBAAmB;AACrC,mCAAqB,KAAK;AAAA;AAE9B,gBAAI,UAAU;AACV,qBAAO,KAAK;AAAA,mBACT;AACH,qBAAO,KAAK;AAAA;AAAA,iBAEb;AACH,gBAAI,CAAC,WAAW,MAAM,sBAAsB;AACxC,mBAAK,oBAAoB;AAAA;AAE7B,mBAAO,KAAK,2BAA2B,WACnC,KAAK,0BAA0B,KAAK;AAAA;AAAA;AAKhD,wCAAiC;AAC7B,6BAAmB,GAAG,GAAG;AACrB,mBAAO,EAAE,SAAS,EAAE;AAAA;AAGxB,cAAI,YAAY,IAAI,cAAc,IAAI,aAAa,IAAI,cAAc,IACjE,GAAG,KAAK,MAAM,QAAQ;AAC1B,eAAK,IAAI,GAAG,IAAI,GAAG,KAAK;AAEpB,kBAAM,UAAU,CAAC,KAAM,IAAI,IAAI;AAC/B,mBAAO,KAAK,YAAY,KAAK;AAC7B,qBAAS,KAAK,cAAc,KAAK;AACjC,oBAAQ,KAAK,SAAS,KAAK;AAC3B,sBAAU,KAAK;AACf,wBAAY,KAAK;AACjB,uBAAW,KAAK;AAChB,wBAAY,KAAK;AACjB,wBAAY,KAAK;AACjB,wBAAY,KAAK;AAAA;AAIrB,oBAAU,KAAK;AACf,sBAAY,KAAK;AACjB,qBAAW,KAAK;AAChB,sBAAY,KAAK;AACjB,eAAK,IAAI,GAAG,IAAI,GAAG,KAAK;AACpB,wBAAY,KAAK,YAAY,YAAY;AACzC,uBAAW,KAAK,YAAY,WAAW;AACvC,wBAAY,KAAK,YAAY,YAAY;AAAA;AAG7C,eAAK,iBAAiB,IAAI,OAAO,OAAO,YAAY,KAAK,OAAO,KAAK;AACrE,eAAK,sBAAsB,KAAK;AAChC,eAAK,oBAAoB,KAAK;AAE9B,eAAK,uBAAuB,IAAI,OAAO,OAAO,WAAW,KAAK,OAAO,KAAK;AAC1E,eAAK,4BAA4B,IAAI,OAAO,OAAO,YAAY,KAAK,OAAO,KAAK;AAChF,eAAK,0BAA0B,IAAI,OAAO,OAAO,UAAU,KAAK,OAAO,KAAK;AAAA;AAKhF,2BAAmB;AACf,iBAAO,KAAK,UAAU,MAAM;AAAA;AAGhC,2BAAmB;AACf,iBAAO,KAAK,WAAW;AAAA;AAG3B,uBAAe,KAAK,CAAC,MAAM,IAAI,GAAG;AAClC,uBAAe,KAAK,CAAC,MAAM,IAAI,GAAG;AAClC,uBAAe,KAAK,CAAC,MAAM,IAAI,GAAG;AAElC,uBAAe,OAAO,GAAG,GAAG,WAAY;AACpC,iBAAO,KAAK,QAAQ,MAAM,QAAQ,SAAS,KAAK,WAAW;AAAA;AAG/D,uBAAe,SAAS,GAAG,GAAG,WAAY;AACtC,iBAAO,KAAK,QAAQ,MAAM,QAAQ,SAAS,KAAK,WAAW,KACvD,SAAS,KAAK,WAAW;AAAA;AAGjC,uBAAe,OAAO,GAAG,GAAG,WAAY;AACpC,iBAAO,KAAK,KAAK,UAAU,SAAS,KAAK,WAAW;AAAA;AAGxD,uBAAe,SAAS,GAAG,GAAG,WAAY;AACtC,iBAAO,KAAK,KAAK,UAAU,SAAS,KAAK,WAAW,KAChD,SAAS,KAAK,WAAW;AAAA;AAGjC,0BAAmB,QAAO,WAAW;AACjC,yBAAe,QAAO,GAAG,GAAG,WAAY;AACpC,mBAAO,KAAK,aAAa,SAAS,KAAK,SAAS,KAAK,WAAW;AAAA;AAAA;AAIxE,iBAAS,KAAK;AACd,iBAAS,KAAK;AAId,qBAAa,QAAQ;AAGrB,wBAAgB,QAAQ;AAIxB,+BAAwB,UAAU,SAAQ;AACtC,iBAAO,QAAO;AAAA;AAGlB,sBAAc,KAAM;AACpB,sBAAc,KAAM;AACpB,sBAAc,KAAM;AACpB,sBAAc,KAAM;AACpB,sBAAc,KAAM;AACpB,sBAAc,MAAM,WAAW;AAC/B,sBAAc,MAAM,WAAW;AAC/B,sBAAc,MAAM,WAAW;AAE/B,sBAAc,OAAO;AACrB,sBAAc,SAAS;AACvB,sBAAc,OAAO;AACrB,sBAAc,SAAS;AAEvB,sBAAc,CAAC,KAAK,OAAO;AAC3B,sBAAc,CAAC,KAAK,OAAO,SAAU,OAAO,OAAO,QAAQ;AACvD,cAAI,SAAS,MAAM;AACnB,gBAAM,QAAQ,WAAW,KAAK,IAAI;AAAA;AAEtC,sBAAc,CAAC,KAAK,MAAM,SAAU,OAAO,OAAO,QAAQ;AACtD,iBAAO,QAAQ,OAAO,QAAQ,KAAK;AACnC,iBAAO,YAAY;AAAA;AAEvB,sBAAc,CAAC,KAAK,OAAO,SAAU,OAAO,OAAO,QAAQ;AACvD,gBAAM,QAAQ,MAAM;AACpB,0BAAgB,QAAQ,UAAU;AAAA;AAEtC,sBAAc,OAAO,SAAU,OAAO,OAAO,QAAQ;AACjD,cAAI,MAAM,MAAM,SAAS;AACzB,gBAAM,QAAQ,MAAM,MAAM,OAAO,GAAG;AACpC,gBAAM,UAAU,MAAM,MAAM,OAAO;AACnC,0BAAgB,QAAQ,UAAU;AAAA;AAEtC,sBAAc,SAAS,SAAU,OAAO,OAAO,QAAQ;AACnD,cAAI,OAAO,MAAM,SAAS;AAC1B,cAAI,OAAO,MAAM,SAAS;AAC1B,gBAAM,QAAQ,MAAM,MAAM,OAAO,GAAG;AACpC,gBAAM,UAAU,MAAM,MAAM,OAAO,MAAM;AACzC,gBAAM,UAAU,MAAM,MAAM,OAAO;AACnC,0BAAgB,QAAQ,UAAU;AAAA;AAEtC,sBAAc,OAAO,SAAU,OAAO,OAAO,QAAQ;AACjD,cAAI,MAAM,MAAM,SAAS;AACzB,gBAAM,QAAQ,MAAM,MAAM,OAAO,GAAG;AACpC,gBAAM,UAAU,MAAM,MAAM,OAAO;AAAA;AAEvC,sBAAc,SAAS,SAAU,OAAO,OAAO,QAAQ;AACnD,cAAI,OAAO,MAAM,SAAS;AAC1B,cAAI,OAAO,MAAM,SAAS;AAC1B,gBAAM,QAAQ,MAAM,MAAM,OAAO,GAAG;AACpC,gBAAM,UAAU,MAAM,MAAM,OAAO,MAAM;AACzC,gBAAM,UAAU,MAAM,MAAM,OAAO;AAAA;AAKvC,4BAAqB,OAAO;AAGxB,iBAAS,SAAQ,IAAI,cAAc,OAAO,OAAO;AAAA;AAGrD,YAAI,6BAA6B;AACjC,gCAAyB,QAAO,UAAS,SAAS;AAC9C,cAAI,SAAQ,IAAI;AACZ,mBAAO,UAAU,OAAO;AAAA,iBACrB;AACH,mBAAO,UAAU,OAAO;AAAA;AAAA;AAWhC,YAAI,aAAa,WAAW,SAAS;AAErC,YAAI,aAAa;AAAA,UACb,UAAU;AAAA,UACV,gBAAgB;AAAA,UAChB,aAAa;AAAA,UACb,SAAS;AAAA,UACT,wBAAwB;AAAA,UACxB,cAAc;AAAA,UAEd,QAAQ;AAAA,UACR,aAAa;AAAA,UAEb,MAAM;AAAA,UAEN,UAAU;AAAA,UACV,aAAa;AAAA,UACb,eAAe;AAAA,UAEf,eAAe;AAAA;AAInB,YAAI,UAAU;AACd,YAAI,iBAAiB;AACrB,YAAI;AAEJ,iCAAyB,KAAK;AAC1B,iBAAO,MAAM,IAAI,cAAc,QAAQ,KAAK,OAAO;AAAA;AAMvD,8BAAsB,OAAO;AACzB,cAAI,IAAI,GAAG,GAAG,OAAM,SAAQ;AAE5B,iBAAO,IAAI,MAAM,QAAQ;AACrB,oBAAQ,gBAAgB,MAAM,IAAI,MAAM;AACxC,gBAAI,MAAM;AACV,oBAAO,gBAAgB,MAAM,IAAI;AACjC,oBAAO,QAAO,MAAK,MAAM,OAAO;AAChC,mBAAO,IAAI,GAAG;AACV,wBAAS,WAAW,MAAM,MAAM,GAAG,GAAG,KAAK;AAC3C,kBAAI,SAAQ;AACR,uBAAO;AAAA;AAEX,kBAAI,SAAQ,MAAK,UAAU,KAAK,cAAc,OAAO,OAAM,SAAS,IAAI,GAAG;AAEvE;AAAA;AAEJ;AAAA;AAEJ;AAAA;AAEJ,iBAAO;AAAA;AAGX,4BAAoB,MAAM;AACtB,cAAI,YAAY;AAEhB,cAAI,CAAC,QAAQ,SAAU,OAAO,WAAW,eACjC,UAAU,OAAO,SAAS;AAC9B,gBAAI;AACA,0BAAY,aAAa;AACzB,kBAAI,iBAAiB;AACrB,6BAAe,cAAc;AAC7B,iCAAmB;AAAA,qBACd,GAAP;AAAA;AAAA;AAEN,iBAAO,QAAQ;AAAA;AAMnB,oCAA6B,KAAK,SAAQ;AACtC,cAAI;AACJ,cAAI,KAAK;AACL,gBAAI,aAAY,UAAS;AACrB,qBAAO,UAAU;AAAA,mBAEhB;AACD,qBAAO,aAAa,KAAK;AAAA;AAG7B,gBAAI,MAAM;AAEN,6BAAe;AAAA,mBAEd;AACD,kBAAK,OAAO,YAAa,eAAgB,QAAQ,MAAM;AAEnD,wBAAQ,KAAK,YAAY,MAAO;AAAA;AAAA;AAAA;AAK5C,iBAAO,aAAa;AAAA;AAGxB,8BAAuB,MAAM,QAAQ;AACjC,cAAI,WAAW,MAAM;AACjB,gBAAI,SAAQ,eAAe;AAC3B,mBAAO,OAAO;AACd,gBAAI,QAAQ,SAAS,MAAM;AACvB,8BAAgB,wBACR;AAIR,6BAAe,QAAQ,MAAM;AAAA,uBACtB,OAAO,gBAAgB,MAAM;AACpC,kBAAI,QAAQ,OAAO,iBAAiB,MAAM;AACtC,+BAAe,QAAQ,OAAO,cAAc;AAAA,qBACzC;AACH,0BAAS,WAAW,OAAO;AAC3B,oBAAI,WAAU,MAAM;AAChB,iCAAe,QAAO;AAAA,uBACnB;AACH,sBAAI,CAAC,eAAe,OAAO,eAAe;AACtC,mCAAe,OAAO,gBAAgB;AAAA;AAE1C,iCAAe,OAAO,cAAc,KAAK;AAAA,oBACrC;AAAA,oBACA;AAAA;AAEJ,yBAAO;AAAA;AAAA;AAAA;AAInB,oBAAQ,QAAQ,IAAI,OAAO,aAAa,cAAc;AAEtD,gBAAI,eAAe,OAAO;AACtB,6BAAe,MAAM,QAAQ,SAAU,GAAG;AACtC,6BAAa,EAAE,MAAM,EAAE;AAAA;AAAA;AAO/B,+BAAmB;AAGnB,mBAAO,QAAQ;AAAA,iBACZ;AAEH,mBAAO,QAAQ;AACf,mBAAO;AAAA;AAAA;AAIf,8BAAsB,MAAM,QAAQ;AAChC,cAAI,UAAU,MAAM;AAChB,gBAAI,SAAQ,WAAW,eAAe;AAEtC,wBAAY,WAAW;AACvB,gBAAI,aAAa,MAAM;AACnB,6BAAe,UAAU;AAAA;AAE7B,qBAAS,aAAa,cAAc;AACpC,sBAAS,IAAI,OAAO;AACpB,oBAAO,eAAe,QAAQ;AAC9B,oBAAQ,QAAQ;AAGhB,+BAAmB;AAAA,iBAChB;AAEH,gBAAI,QAAQ,SAAS,MAAM;AACvB,kBAAI,QAAQ,MAAM,gBAAgB,MAAM;AACpC,wBAAQ,QAAQ,QAAQ,MAAM;AAAA,yBACvB,QAAQ,SAAS,MAAM;AAC9B,uBAAO,QAAQ;AAAA;AAAA;AAAA;AAI3B,iBAAO,QAAQ;AAAA;AAInB,2BAAoB,KAAK;AACrB,cAAI;AAEJ,cAAI,OAAO,IAAI,WAAW,IAAI,QAAQ,OAAO;AACzC,kBAAM,IAAI,QAAQ;AAAA;AAGtB,cAAI,CAAC,KAAK;AACN,mBAAO;AAAA;AAGX,cAAI,CAAC,SAAQ,MAAM;AAEf,sBAAS,WAAW;AACpB,gBAAI,SAAQ;AACR,qBAAO;AAAA;AAEX,kBAAM,CAAC;AAAA;AAGX,iBAAO,aAAa;AAAA;AAGxB,+BAAuB;AACnB,iBAAO,MAAK;AAAA;AAGhB,+BAAwB,GAAG;AACvB,cAAI;AACJ,cAAI,IAAI,EAAE;AAEV,cAAI,KAAK,gBAAgB,GAAG,aAAa,IAAI;AACzC,uBACI,EAAE,SAAe,KAAK,EAAE,SAAe,KAAM,QAC7C,EAAE,QAAe,KAAK,EAAE,QAAe,YAAY,EAAE,OAAO,EAAE,UAAU,OACxE,EAAE,QAAe,KAAK,EAAE,QAAe,MAAO,EAAE,UAAU,MAAO,GAAE,YAAY,KAAK,EAAE,YAAY,KAAK,EAAE,iBAAiB,KAAM,OAChI,EAAE,UAAe,KAAK,EAAE,UAAe,KAAM,SAC7C,EAAE,UAAe,KAAK,EAAE,UAAe,KAAM,SAC7C,EAAE,eAAe,KAAK,EAAE,eAAe,MAAM,cAC7C;AAEJ,gBAAI,gBAAgB,GAAG,sBAAuB,YAAW,QAAQ,WAAW,OAAO;AAC/E,yBAAW;AAAA;AAEf,gBAAI,gBAAgB,GAAG,kBAAkB,aAAa,IAAI;AACtD,yBAAW;AAAA;AAEf,gBAAI,gBAAgB,GAAG,oBAAoB,aAAa,IAAI;AACxD,yBAAW;AAAA;AAGf,4BAAgB,GAAG,WAAW;AAAA;AAGlC,iBAAO;AAAA;AAIX,0BAAkB,GAAG,GAAG,GAAG;AACvB,cAAI,KAAK,MAAM;AACX,mBAAO;AAAA;AAEX,cAAI,KAAK,MAAM;AACX,mBAAO;AAAA;AAEX,iBAAO;AAAA;AAGX,kCAA0B,QAAQ;AAE9B,cAAI,WAAW,IAAI,KAAK,MAAM;AAC9B,cAAI,OAAO,SAAS;AAChB,mBAAO,CAAC,SAAS,kBAAkB,SAAS,eAAe,SAAS;AAAA;AAExE,iBAAO,CAAC,SAAS,eAAe,SAAS,YAAY,SAAS;AAAA;AAOlE,iCAA0B,QAAQ;AAC9B,cAAI,GAAG,MAAM,QAAQ,IAAI,aAAa,iBAAiB;AAEvD,cAAI,OAAO,IAAI;AACX;AAAA;AAGJ,wBAAc,iBAAiB;AAG/B,cAAI,OAAO,MAAM,OAAO,GAAG,SAAS,QAAQ,OAAO,GAAG,UAAU,MAAM;AAClE,kCAAsB;AAAA;AAI1B,cAAI,OAAO,cAAc,MAAM;AAC3B,wBAAY,SAAS,OAAO,GAAG,OAAO,YAAY;AAElD,gBAAI,OAAO,aAAa,WAAW,cAAc,OAAO,eAAe,GAAG;AACtE,8BAAgB,QAAQ,qBAAqB;AAAA;AAGjD,mBAAO,cAAc,WAAW,GAAG,OAAO;AAC1C,mBAAO,GAAG,SAAS,KAAK;AACxB,mBAAO,GAAG,QAAQ,KAAK;AAAA;AAQ3B,eAAK,IAAI,GAAG,IAAI,KAAK,OAAO,GAAG,MAAM,MAAM,EAAE,GAAG;AAC5C,mBAAO,GAAG,KAAK,MAAM,KAAK,YAAY;AAAA;AAI1C,iBAAO,IAAI,GAAG,KAAK;AACf,mBAAO,GAAG,KAAK,MAAM,KAAM,OAAO,GAAG,MAAM,OAAS,MAAM,IAAI,IAAI,IAAK,OAAO,GAAG;AAAA;AAIrF,cAAI,OAAO,GAAG,UAAU,MAChB,OAAO,GAAG,YAAY,KACtB,OAAO,GAAG,YAAY,KACtB,OAAO,GAAG,iBAAiB,GAAG;AAClC,mBAAO,WAAW;AAClB,mBAAO,GAAG,QAAQ;AAAA;AAGtB,iBAAO,KAAM,QAAO,UAAU,gBAAgB,YAAY,MAAM,MAAM;AACtE,4BAAkB,OAAO,UAAU,OAAO,GAAG,cAAc,OAAO,GAAG;AAIrE,cAAI,OAAO,QAAQ,MAAM;AACrB,mBAAO,GAAG,cAAc,OAAO,GAAG,kBAAkB,OAAO;AAAA;AAG/D,cAAI,OAAO,UAAU;AACjB,mBAAO,GAAG,QAAQ;AAAA;AAItB,cAAI,OAAO,MAAM,OAAO,OAAO,GAAG,MAAM,eAAe,OAAO,GAAG,MAAM,iBAAiB;AACpF,4BAAgB,QAAQ,kBAAkB;AAAA;AAAA;AAIlD,uCAA+B,QAAQ;AACnC,cAAI,GAAG,UAAU,MAAM,SAAS,KAAK,KAAK,MAAM;AAEhD,cAAI,OAAO;AACX,cAAI,EAAE,MAAM,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM;AAC5C,kBAAM;AACN,kBAAM;AAMN,uBAAW,SAAS,EAAE,IAAI,OAAO,GAAG,OAAO,WAAW,eAAe,GAAG,GAAG;AAC3E,mBAAO,SAAS,EAAE,GAAG;AACrB,sBAAU,SAAS,EAAE,GAAG;AACxB,gBAAI,UAAU,KAAK,UAAU,GAAG;AAC5B,gCAAkB;AAAA;AAAA,iBAEnB;AACH,kBAAM,OAAO,QAAQ,MAAM;AAC3B,kBAAM,OAAO,QAAQ,MAAM;AAE3B,gBAAI,UAAU,WAAW,eAAe,KAAK;AAE7C,uBAAW,SAAS,EAAE,IAAI,OAAO,GAAG,OAAO,QAAQ;AAGnD,mBAAO,SAAS,EAAE,GAAG,QAAQ;AAE7B,gBAAI,EAAE,KAAK,MAAM;AAEb,wBAAU,EAAE;AACZ,kBAAI,UAAU,KAAK,UAAU,GAAG;AAC5B,kCAAkB;AAAA;AAAA,uBAEf,EAAE,KAAK,MAAM;AAEpB,wBAAU,EAAE,IAAI;AAChB,kBAAI,EAAE,IAAI,KAAK,EAAE,IAAI,GAAG;AACpB,kCAAkB;AAAA;AAAA,mBAEnB;AAEH,wBAAU;AAAA;AAAA;AAGlB,cAAI,OAAO,KAAK,OAAO,YAAY,UAAU,KAAK,MAAM;AACpD,4BAAgB,QAAQ,iBAAiB;AAAA,qBAClC,mBAAmB,MAAM;AAChC,4BAAgB,QAAQ,mBAAmB;AAAA,iBACxC;AACH,mBAAO,mBAAmB,UAAU,MAAM,SAAS,KAAK;AACxD,mBAAO,GAAG,QAAQ,KAAK;AACvB,mBAAO,aAAa,KAAK;AAAA;AAAA;AAMjC,YAAI,mBAAmB;AACvB,YAAI,gBAAgB;AAEpB,YAAI,UAAU;AAEd,YAAI,WAAW;AAAA,UACX,CAAC,gBAAgB;AAAA,UACjB,CAAC,cAAc;AAAA,UACf,CAAC,gBAAgB;AAAA,UACjB,CAAC,cAAc,eAAe;AAAA,UAC9B,CAAC,YAAY;AAAA,UACb,CAAC,WAAW,cAAc;AAAA,UAC1B,CAAC,cAAc;AAAA,UACf,CAAC,YAAY;AAAA,UAEb,CAAC,cAAc;AAAA,UACf,CAAC,aAAa,eAAe;AAAA,UAC7B,CAAC,WAAW;AAAA;AAIhB,YAAI,WAAW;AAAA,UACX,CAAC,iBAAiB;AAAA,UAClB,CAAC,iBAAiB;AAAA,UAClB,CAAC,YAAY;AAAA,UACb,CAAC,SAAS;AAAA,UACV,CAAC,eAAe;AAAA,UAChB,CAAC,eAAe;AAAA,UAChB,CAAC,UAAU;AAAA,UACX,CAAC,QAAQ;AAAA,UACT,CAAC,MAAM;AAAA;AAGX,YAAI,kBAAkB;AAGtB,+BAAuB,QAAQ;AAC3B,cAAI,GAAG,GACH,SAAS,OAAO,IAChB,QAAQ,iBAAiB,KAAK,WAAW,cAAc,KAAK,SAC5D,WAAW,YAAY,YAAY;AAEvC,cAAI,OAAO;AACP,4BAAgB,QAAQ,MAAM;AAE9B,iBAAK,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,KAAK;AACzC,kBAAI,SAAS,GAAG,GAAG,KAAK,MAAM,KAAK;AAC/B,6BAAa,SAAS,GAAG;AACzB,4BAAY,SAAS,GAAG,OAAO;AAC/B;AAAA;AAAA;AAGR,gBAAI,cAAc,MAAM;AACpB,qBAAO,WAAW;AAClB;AAAA;AAEJ,gBAAI,MAAM,IAAI;AACV,mBAAK,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,KAAK;AACzC,oBAAI,SAAS,GAAG,GAAG,KAAK,MAAM,KAAK;AAE/B,+BAAc,OAAM,MAAM,OAAO,SAAS,GAAG;AAC7C;AAAA;AAAA;AAGR,kBAAI,cAAc,MAAM;AACpB,uBAAO,WAAW;AAClB;AAAA;AAAA;AAGR,gBAAI,CAAC,aAAa,cAAc,MAAM;AAClC,qBAAO,WAAW;AAClB;AAAA;AAEJ,gBAAI,MAAM,IAAI;AACV,kBAAI,QAAQ,KAAK,MAAM,KAAK;AACxB,2BAAW;AAAA,qBACR;AACH,uBAAO,WAAW;AAClB;AAAA;AAAA;AAGR,mBAAO,KAAK,aAAc,eAAc,MAAO,aAAY;AAC3D,sCAA0B;AAAA,iBACvB;AACH,mBAAO,WAAW;AAAA;AAAA;AAK1B,YAAI,UAAU;AAEd,2CAAmC,SAAS,UAAU,QAAQ,SAAS,WAAW,WAAW;AACzF,cAAI,SAAS;AAAA,YACT,eAAe;AAAA,YACf,yBAAyB,QAAQ;AAAA,YACjC,SAAS,QAAQ;AAAA,YACjB,SAAS,SAAS;AAAA,YAClB,SAAS,WAAW;AAAA;AAGxB,cAAI,WAAW;AACX,mBAAO,KAAK,SAAS,WAAW;AAAA;AAGpC,iBAAO;AAAA;AAGX,gCAAwB,SAAS;AAC7B,cAAI,OAAO,SAAS,SAAS;AAC7B,cAAI,QAAQ,IAAI;AACZ,mBAAO,MAAO;AAAA,qBACP,QAAQ,KAAK;AACpB,mBAAO,OAAO;AAAA;AAElB,iBAAO;AAAA;AAGX,mCAA2B,GAAG;AAE1B,iBAAO,EAAE,QAAQ,qBAAqB,KAAK,QAAQ,YAAY,KAAK,QAAQ,UAAU,IAAI,QAAQ,UAAU;AAAA;AAGhH,8BAAsB,YAAY,aAAa,QAAQ;AACnD,cAAI,YAAY;AAEZ,gBAAI,kBAAkB,2BAA2B,QAAQ,aACrD,gBAAgB,IAAI,KAAK,YAAY,IAAI,YAAY,IAAI,YAAY,IAAI;AAC7E,gBAAI,oBAAoB,eAAe;AACnC,8BAAgB,QAAQ,kBAAkB;AAC1C,qBAAO,WAAW;AAClB,qBAAO;AAAA;AAAA;AAGf,iBAAO;AAAA;AAGX,YAAI,aAAa;AAAA,UACb,IAAI;AAAA,UACJ,KAAK;AAAA,UACL,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA;AAGd,iCAAyB,WAAW,gBAAgB,WAAW;AAC3D,cAAI,WAAW;AACX,mBAAO,WAAW;AAAA,qBACX,gBAAgB;AAEvB,mBAAO;AAAA,iBACJ;AACH,gBAAI,KAAK,SAAS,WAAW;AAC7B,gBAAI,IAAI,KAAK,KAAK,IAAK,MAAK,KAAK;AACjC,mBAAO,IAAI,KAAK;AAAA;AAAA;AAKxB,mCAA2B,QAAQ;AAC/B,cAAI,QAAQ,QAAQ,KAAK,kBAAkB,OAAO;AAClD,cAAI,OAAO;AACP,gBAAI,cAAc,0BAA0B,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM;AACpG,gBAAI,CAAC,aAAa,MAAM,IAAI,aAAa,SAAS;AAC9C;AAAA;AAGJ,mBAAO,KAAK;AACZ,mBAAO,OAAO,gBAAgB,MAAM,IAAI,MAAM,IAAI,MAAM;AAExD,mBAAO,KAAK,cAAc,MAAM,MAAM,OAAO;AAC7C,mBAAO,GAAG,cAAc,OAAO,GAAG,kBAAkB,OAAO;AAE3D,4BAAgB,QAAQ,UAAU;AAAA,iBAC/B;AACH,mBAAO,WAAW;AAAA;AAAA;AAK1B,kCAA0B,QAAQ;AAC9B,cAAI,UAAU,gBAAgB,KAAK,OAAO;AAE1C,cAAI,YAAY,MAAM;AAClB,mBAAO,KAAK,IAAI,KAAK,CAAC,QAAQ;AAC9B;AAAA;AAGJ,wBAAc;AACd,cAAI,OAAO,aAAa,OAAO;AAC3B,mBAAO,OAAO;AAAA,iBACX;AACH;AAAA;AAGJ,4BAAkB;AAClB,cAAI,OAAO,aAAa,OAAO;AAC3B,mBAAO,OAAO;AAAA,iBACX;AACH;AAAA;AAIJ,gBAAM,wBAAwB;AAAA;AAGlC,cAAM,0BAA0B,UAC5B,kVAIA,SAAU,QAAQ;AACd,iBAAO,KAAK,IAAI,KAAK,OAAO,KAAM,QAAO,UAAU,SAAS;AAAA;AAKpE,cAAM,WAAW,WAAY;AAAA;AAG7B,cAAM,WAAW,WAAY;AAAA;AAG7B,2CAAmC,QAAQ;AAEvC,cAAI,OAAO,OAAO,MAAM,UAAU;AAC9B,0BAAc;AACd;AAAA;AAEJ,cAAI,OAAO,OAAO,MAAM,UAAU;AAC9B,8BAAkB;AAClB;AAAA;AAEJ,iBAAO,KAAK;AACZ,0BAAgB,QAAQ,QAAQ;AAGhC,cAAI,SAAS,KAAK,OAAO,IACrB,GAAG,aAAa,SAAQ,QAAO,SAC/B,eAAe,OAAO,QACtB,yBAAyB;AAE7B,oBAAS,aAAa,OAAO,IAAI,OAAO,SAAS,MAAM,qBAAqB;AAE5E,eAAK,IAAI,GAAG,IAAI,QAAO,QAAQ,KAAK;AAChC,qBAAQ,QAAO;AACf,0BAAe,QAAO,MAAM,sBAAsB,QAAO,YAAY,IAAI;AAGzE,gBAAI,aAAa;AACb,wBAAU,OAAO,OAAO,GAAG,OAAO,QAAQ;AAC1C,kBAAI,QAAQ,SAAS,GAAG;AACpB,gCAAgB,QAAQ,YAAY,KAAK;AAAA;AAE7C,uBAAS,OAAO,MAAM,OAAO,QAAQ,eAAe,YAAY;AAChE,wCAA0B,YAAY;AAAA;AAG1C,gBAAI,qBAAqB,SAAQ;AAC7B,kBAAI,aAAa;AACb,gCAAgB,QAAQ,QAAQ;AAAA,qBAE/B;AACD,gCAAgB,QAAQ,aAAa,KAAK;AAAA;AAE9C,sCAAwB,QAAO,aAAa;AAAA,uBAEvC,OAAO,WAAW,CAAC,aAAa;AACrC,8BAAgB,QAAQ,aAAa,KAAK;AAAA;AAAA;AAKlD,0BAAgB,QAAQ,gBAAgB,eAAe;AACvD,cAAI,OAAO,SAAS,GAAG;AACnB,4BAAgB,QAAQ,YAAY,KAAK;AAAA;AAI7C,cAAI,OAAO,GAAG,SAAS,MACnB,gBAAgB,QAAQ,YAAY,QACpC,OAAO,GAAG,QAAQ,GAAG;AACrB,4BAAgB,QAAQ,UAAU;AAAA;AAGtC,0BAAgB,QAAQ,kBAAkB,OAAO,GAAG,MAAM;AAC1D,0BAAgB,QAAQ,WAAW,OAAO;AAE1C,iBAAO,GAAG,QAAQ,gBAAgB,OAAO,SAAS,OAAO,GAAG,OAAO,OAAO;AAE1E,0BAAgB;AAChB,wBAAc;AAAA;AAIlB,iCAA0B,SAAQ,MAAM,WAAU;AAC9C,cAAI;AAEJ,cAAI,aAAY,MAAM;AAElB,mBAAO;AAAA;AAEX,cAAI,QAAO,gBAAgB,MAAM;AAC7B,mBAAO,QAAO,aAAa,MAAM;AAAA,qBAC1B,QAAO,QAAQ,MAAM;AAE5B,mBAAO,QAAO,KAAK;AACnB,gBAAI,QAAQ,OAAO,IAAI;AACnB,sBAAQ;AAAA;AAEZ,gBAAI,CAAC,QAAQ,SAAS,IAAI;AACtB,qBAAO;AAAA;AAEX,mBAAO;AAAA,iBACJ;AAEH,mBAAO;AAAA;AAAA;AAKf,0CAAkC,QAAQ;AACtC,cAAI,YACA,YAEA,aACA,GACA;AAEJ,cAAI,OAAO,GAAG,WAAW,GAAG;AACxB,4BAAgB,QAAQ,gBAAgB;AACxC,mBAAO,KAAK,IAAI,KAAK;AACrB;AAAA;AAGJ,eAAK,IAAI,GAAG,IAAI,OAAO,GAAG,QAAQ,KAAK;AACnC,2BAAe;AACf,yBAAa,WAAW,IAAI;AAC5B,gBAAI,OAAO,WAAW,MAAM;AACxB,yBAAW,UAAU,OAAO;AAAA;AAEhC,uBAAW,KAAK,OAAO,GAAG;AAC1B,sCAA0B;AAE1B,gBAAI,CAAC,QAAQ,aAAa;AACtB;AAAA;AAIJ,4BAAgB,gBAAgB,YAAY;AAG5C,4BAAgB,gBAAgB,YAAY,aAAa,SAAS;AAElE,4BAAgB,YAAY,QAAQ;AAEpC,gBAAI,eAAe,QAAQ,eAAe,aAAa;AACnD,4BAAc;AACd,2BAAa;AAAA;AAAA;AAIrB,kBAAO,QAAQ,cAAc;AAAA;AAGjC,kCAA0B,QAAQ;AAC9B,cAAI,OAAO,IAAI;AACX;AAAA;AAGJ,cAAI,IAAI,qBAAqB,OAAO;AACpC,iBAAO,KAAK,KAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,SAAU,KAAK;AAC1G,mBAAO,OAAO,SAAS,KAAK;AAAA;AAGhC,0BAAgB;AAAA;AAGpB,kCAA2B,QAAQ;AAC/B,cAAI,MAAM,IAAI,OAAO,cAAc,cAAc;AACjD,cAAI,IAAI,UAAU;AAEd,gBAAI,IAAI,GAAG;AACX,gBAAI,WAAW;AAAA;AAGnB,iBAAO;AAAA;AAGX,+BAAwB,QAAQ;AAC5B,cAAI,QAAQ,OAAO,IACf,UAAS,OAAO;AAEpB,iBAAO,UAAU,OAAO,WAAW,UAAU,OAAO;AAEpD,cAAI,UAAU,QAAS,YAAW,UAAa,UAAU,IAAK;AAC1D,mBAAO,cAAc,EAAC,WAAW;AAAA;AAGrC,cAAI,OAAO,UAAU,UAAU;AAC3B,mBAAO,KAAK,QAAQ,OAAO,QAAQ,SAAS;AAAA;AAGhD,cAAI,SAAS,QAAQ;AACjB,mBAAO,IAAI,OAAO,cAAc;AAAA,qBACzB,OAAO,QAAQ;AACtB,mBAAO,KAAK;AAAA,qBACL,SAAQ,UAAS;AACxB,qCAAyB;AAAA,qBAClB,SAAQ;AACf,sCAA0B;AAAA,iBACtB;AACJ,4BAAgB;AAAA;AAGpB,cAAI,CAAC,QAAQ,SAAS;AAClB,mBAAO,KAAK;AAAA;AAGhB,iBAAO;AAAA;AAGX,iCAAyB,QAAQ;AAC7B,cAAI,QAAQ,OAAO;AACnB,cAAI,aAAY,QAAQ;AACpB,mBAAO,KAAK,IAAI,KAAK,MAAM;AAAA,qBACpB,OAAO,QAAQ;AACtB,mBAAO,KAAK,IAAI,KAAK,MAAM;AAAA,qBACpB,OAAO,UAAU,UAAU;AAClC,6BAAiB;AAAA,qBACV,SAAQ,QAAQ;AACvB,mBAAO,KAAK,KAAI,MAAM,MAAM,IAAI,SAAU,KAAK;AAC3C,qBAAO,SAAS,KAAK;AAAA;AAEzB,4BAAgB;AAAA,qBACT,UAAS,QAAQ;AACxB,6BAAiB;AAAA,qBACV,SAAS,QAAQ;AAExB,mBAAO,KAAK,IAAI,KAAK;AAAA,iBAClB;AACH,kBAAM,wBAAwB;AAAA;AAAA;AAItC,kCAA2B,OAAO,SAAQ,SAAQ,QAAQ,OAAO;AAC7D,cAAI,IAAI;AAER,cAAI,YAAW,QAAQ,YAAW,OAAO;AACrC,qBAAS;AACT,sBAAS;AAAA;AAGb,cAAK,UAAS,UAAU,cAAc,UAC7B,SAAQ,UAAU,MAAM,WAAW,GAAI;AAC5C,oBAAQ;AAAA;AAIZ,YAAE,mBAAmB;AACrB,YAAE,UAAU,EAAE,SAAS;AACvB,YAAE,KAAK;AACP,YAAE,KAAK;AACP,YAAE,KAAK;AACP,YAAE,UAAU;AAEZ,iBAAO,iBAAiB;AAAA;AAG5B,6BAAsB,OAAO,SAAQ,SAAQ,QAAQ;AACjD,iBAAO,iBAAiB,OAAO,SAAQ,SAAQ,QAAQ;AAAA;AAG3D,YAAI,eAAe,UACf,sGACA,WAAY;AACR,cAAI,QAAQ,YAAY,MAAM,MAAM;AACpC,cAAI,KAAK,aAAa,MAAM,WAAW;AACnC,mBAAO,QAAQ,OAAO,OAAO;AAAA,iBAC1B;AACH,mBAAO;AAAA;AAAA;AAKnB,YAAI,eAAe,UACf,sGACA,WAAY;AACR,cAAI,QAAQ,YAAY,MAAM,MAAM;AACpC,cAAI,KAAK,aAAa,MAAM,WAAW;AACnC,mBAAO,QAAQ,OAAO,OAAO;AAAA,iBAC1B;AACH,mBAAO;AAAA;AAAA;AAUnB,wBAAgB,KAAI,SAAS;AACzB,cAAI,KAAK;AACT,cAAI,QAAQ,WAAW,KAAK,SAAQ,QAAQ,KAAK;AAC7C,sBAAU,QAAQ;AAAA;AAEtB,cAAI,CAAC,QAAQ,QAAQ;AACjB,mBAAO;AAAA;AAEX,gBAAM,QAAQ;AACd,eAAK,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACjC,gBAAI,CAAC,QAAQ,GAAG,aAAa,QAAQ,GAAG,KAAI,MAAM;AAC9C,oBAAM,QAAQ;AAAA;AAAA;AAGtB,iBAAO;AAAA;AAIX,wBAAgB;AACZ,cAAI,OAAO,GAAG,MAAM,KAAK,WAAW;AAEpC,iBAAO,OAAO,YAAY;AAAA;AAG9B,wBAAgB;AACZ,cAAI,OAAO,GAAG,MAAM,KAAK,WAAW;AAEpC,iBAAO,OAAO,WAAW;AAAA;AAG7B,YAAI,OAAM,WAAY;AAClB,iBAAO,KAAK,MAAM,KAAK,QAAQ,CAAE,IAAI;AAAA;AAGzC,YAAI,WAAW,CAAC,QAAQ,WAAW,SAAS,QAAQ,OAAO,QAAQ,UAAU,UAAU;AAEvF,iCAAyB,GAAG;AACxB,mBAAS,OAAO,GAAG;AACf,gBAAI,CAAE,UAAQ,KAAK,UAAU,SAAS,MAAO,GAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,SAAS;AAC7E,qBAAO;AAAA;AAAA;AAIf,cAAI,iBAAiB;AACrB,mBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACtC,gBAAI,EAAE,SAAS,KAAK;AAChB,kBAAI,gBAAgB;AAChB,uBAAO;AAAA;AAEX,kBAAI,WAAW,EAAE,SAAS,SAAS,MAAM,EAAE,SAAS,MAAM;AACtD,iCAAiB;AAAA;AAAA;AAAA;AAK7B,iBAAO;AAAA;AAGX,6BAAqB;AACjB,iBAAO,KAAK;AAAA;AAGhB,mCAA2B;AACvB,iBAAO,eAAe;AAAA;AAG1B,0BAAmB,UAAU;AACzB,cAAI,kBAAkB,qBAAqB,WACvC,SAAQ,gBAAgB,QAAQ,GAChC,WAAW,gBAAgB,WAAW,GACtC,UAAS,gBAAgB,SAAS,GAClC,SAAQ,gBAAgB,QAAQ,gBAAgB,WAAW,GAC3D,QAAO,gBAAgB,OAAO,GAC9B,SAAQ,gBAAgB,QAAQ,GAChC,WAAU,gBAAgB,UAAU,GACpC,WAAU,gBAAgB,UAAU,GACpC,gBAAe,gBAAgB,eAAe;AAElD,eAAK,WAAW,gBAAgB;AAGhC,eAAK,gBAAgB,CAAC,gBAClB,WAAU,MACV,WAAU,MACV,SAAQ,MAAO,KAAK;AAGxB,eAAK,QAAQ,CAAC,QACV,SAAQ;AAIZ,eAAK,UAAU,CAAC,UACZ,WAAW,IACX,SAAQ;AAEZ,eAAK,QAAQ;AAEb,eAAK,UAAU;AAEf,eAAK;AAAA;AAGT,4BAAqB,KAAK;AACtB,iBAAO,eAAe;AAAA;AAG1B,0BAAmB,QAAQ;AACvB,cAAI,SAAS,GAAG;AACZ,mBAAO,KAAK,MAAM,KAAK,UAAU;AAAA,iBAC9B;AACH,mBAAO,KAAK,MAAM;AAAA;AAAA;AAM1B,yBAAiB,QAAO,WAAW;AAC/B,yBAAe,QAAO,GAAG,GAAG,WAAY;AACpC,gBAAI,UAAS,KAAK;AAClB,gBAAI,QAAO;AACX,gBAAI,UAAS,GAAG;AACZ,wBAAS,CAAC;AACV,sBAAO;AAAA;AAEX,mBAAO,QAAO,SAAS,CAAC,CAAE,WAAS,KAAK,KAAK,YAAY,SAAS,CAAC,CAAE,UAAU,IAAI;AAAA;AAAA;AAI3F,gBAAO,KAAK;AACZ,gBAAO,MAAM;AAIb,sBAAc,KAAM;AACpB,sBAAc,MAAM;AACpB,sBAAc,CAAC,KAAK,OAAO,SAAU,OAAO,OAAO,QAAQ;AACvD,iBAAO,UAAU;AACjB,iBAAO,OAAO,iBAAiB,kBAAkB;AAAA;AAQrD,YAAI,cAAc;AAElB,kCAA0B,SAAS,QAAQ;AACvC,cAAI,UAAW,WAAU,IAAI,MAAM;AAEnC,cAAI,YAAY,MAAM;AAClB,mBAAO;AAAA;AAGX,cAAI,QAAU,QAAQ,QAAQ,SAAS,MAAM;AAC7C,cAAI,QAAW,SAAQ,IAAI,MAAM,gBAAgB,CAAC,KAAK,GAAG;AAC1D,cAAI,WAAU,CAAE,OAAM,KAAK,MAAM,MAAM,MAAM;AAE7C,iBAAO,aAAY,IACjB,IACA,MAAM,OAAO,MAAM,WAAU,CAAC;AAAA;AAIpC,iCAAyB,OAAO,OAAO;AACnC,cAAI,KAAK;AACT,cAAI,MAAM,QAAQ;AACd,kBAAM,MAAM;AACZ,oBAAQ,UAAS,UAAU,OAAO,SAAS,MAAM,YAAY,YAAY,OAAO,aAAa,IAAI;AAEjG,gBAAI,GAAG,QAAQ,IAAI,GAAG,YAAY;AAClC,kBAAM,aAAa,KAAK;AACxB,mBAAO;AAAA,iBACJ;AACH,mBAAO,YAAY,OAAO;AAAA;AAAA;AAIlC,+BAAwB,GAAG;AAGvB,iBAAO,CAAC,KAAK,MAAM,EAAE,GAAG,sBAAsB,MAAM;AAAA;AAOxD,cAAM,eAAe,WAAY;AAAA;AAcjC,8BAAuB,OAAO,eAAe,aAAa;AACtD,cAAI,UAAS,KAAK,WAAW,GACzB;AACJ,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO,SAAS,OAAO,OAAO;AAAA;AAElC,cAAI,SAAS,MAAM;AACf,gBAAI,OAAO,UAAU,UAAU;AAC3B,sBAAQ,iBAAiB,kBAAkB;AAC3C,kBAAI,UAAU,MAAM;AAChB,uBAAO;AAAA;AAAA,uBAEJ,KAAK,IAAI,SAAS,MAAM,CAAC,aAAa;AAC7C,sBAAQ,QAAQ;AAAA;AAEpB,gBAAI,CAAC,KAAK,UAAU,eAAe;AAC/B,4BAAc,cAAc;AAAA;AAEhC,iBAAK,UAAU;AACf,iBAAK,SAAS;AACd,gBAAI,eAAe,MAAM;AACrB,mBAAK,IAAI,aAAa;AAAA;AAE1B,gBAAI,YAAW,OAAO;AAClB,kBAAI,CAAC,iBAAiB,KAAK,mBAAmB;AAC1C,4BAAY,MAAM,eAAe,QAAQ,SAAQ,MAAM,GAAG;AAAA,yBACnD,CAAC,KAAK,mBAAmB;AAChC,qBAAK,oBAAoB;AACzB,sBAAM,aAAa,MAAM;AACzB,qBAAK,oBAAoB;AAAA;AAAA;AAGjC,mBAAO;AAAA,iBACJ;AACH,mBAAO,KAAK,SAAS,UAAS,cAAc;AAAA;AAAA;AAIpD,4BAAqB,OAAO,eAAe;AACvC,cAAI,SAAS,MAAM;AACf,gBAAI,OAAO,UAAU,UAAU;AAC3B,sBAAQ,CAAC;AAAA;AAGb,iBAAK,UAAU,OAAO;AAEtB,mBAAO;AAAA,iBACJ;AACH,mBAAO,CAAC,KAAK;AAAA;AAAA;AAIrB,gCAAyB,eAAe;AACpC,iBAAO,KAAK,UAAU,GAAG;AAAA;AAG7B,kCAA2B,eAAe;AACtC,cAAI,KAAK,QAAQ;AACb,iBAAK,UAAU,GAAG;AAClB,iBAAK,SAAS;AAEd,gBAAI,eAAe;AACf,mBAAK,SAAS,cAAc,OAAO;AAAA;AAAA;AAG3C,iBAAO;AAAA;AAGX,2CAAoC;AAChC,cAAI,KAAK,QAAQ,MAAM;AACnB,iBAAK,UAAU,KAAK,MAAM,OAAO;AAAA,qBAC1B,OAAO,KAAK,OAAO,UAAU;AACpC,gBAAI,QAAQ,iBAAiB,aAAa,KAAK;AAC/C,gBAAI,SAAS,MAAM;AACf,mBAAK,UAAU;AAAA,mBAEd;AACD,mBAAK,UAAU,GAAG;AAAA;AAAA;AAG1B,iBAAO;AAAA;AAGX,sCAA+B,OAAO;AAClC,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO;AAAA;AAEX,kBAAQ,QAAQ,YAAY,OAAO,cAAc;AAEjD,iBAAQ,MAAK,cAAc,SAAS,OAAO;AAAA;AAG/C,wCAAiC;AAC7B,iBACI,KAAK,cAAc,KAAK,QAAQ,MAAM,GAAG,eACzC,KAAK,cAAc,KAAK,QAAQ,MAAM,GAAG;AAAA;AAIjD,+CAAwC;AACpC,cAAI,CAAC,aAAY,KAAK,gBAAgB;AAClC,mBAAO,KAAK;AAAA;AAGhB,cAAI,IAAI;AAER,qBAAW,GAAG;AACd,cAAI,cAAc;AAElB,cAAI,EAAE,IAAI;AACN,gBAAI,QAAQ,EAAE,SAAS,UAAU,EAAE,MAAM,YAAY,EAAE;AACvD,iBAAK,gBAAgB,KAAK,aACtB,cAAc,EAAE,IAAI,MAAM,aAAa;AAAA,iBACxC;AACH,iBAAK,gBAAgB;AAAA;AAGzB,iBAAO,KAAK;AAAA;AAGhB,2BAAoB;AAChB,iBAAO,KAAK,YAAY,CAAC,KAAK,SAAS;AAAA;AAG3C,+BAAwB;AACpB,iBAAO,KAAK,YAAY,KAAK,SAAS;AAAA;AAG1C,yBAAkB;AACd,iBAAO,KAAK,YAAY,KAAK,UAAU,KAAK,YAAY,IAAI;AAAA;AAIhE,YAAI,cAAc;AAKlB,YAAI,WAAW;AAEf,gCAAyB,OAAO,KAAK;AACjC,cAAI,WAAW,OAEX,QAAQ,MACR,OACA,KACA;AAEJ,cAAI,WAAW,QAAQ;AACnB,uBAAW;AAAA,cACP,IAAK,MAAM;AAAA,cACX,GAAK,MAAM;AAAA,cACX,GAAK,MAAM;AAAA;AAAA,qBAER,SAAS,QAAQ;AACxB,uBAAW;AACX,gBAAI,KAAK;AACL,uBAAS,OAAO;AAAA,mBACb;AACH,uBAAS,eAAe;AAAA;AAAA,qBAErB,CAAC,CAAE,SAAQ,YAAY,KAAK,SAAS;AAC5C,oBAAQ,MAAM,OAAO,MAAO,KAAK;AACjC,uBAAW;AAAA,cACP,GAAK;AAAA,cACL,GAAK,MAAM,MAAM,SAAiC;AAAA,cAClD,GAAK,MAAM,MAAM,SAAiC;AAAA,cAClD,GAAK,MAAM,MAAM,WAAiC;AAAA,cAClD,GAAK,MAAM,MAAM,WAAiC;AAAA,cAClD,IAAK,MAAM,SAAS,MAAM,eAAe,QAAS;AAAA;AAAA,qBAE/C,CAAC,CAAE,SAAQ,SAAS,KAAK,SAAS;AACzC,oBAAQ,MAAM,OAAO,MAAO,KAAK;AACjC,uBAAW;AAAA,cACP,GAAI,SAAS,MAAM,IAAI;AAAA,cACvB,GAAI,SAAS,MAAM,IAAI;AAAA,cACvB,GAAI,SAAS,MAAM,IAAI;AAAA,cACvB,GAAI,SAAS,MAAM,IAAI;AAAA,cACvB,GAAI,SAAS,MAAM,IAAI;AAAA,cACvB,GAAI,SAAS,MAAM,IAAI;AAAA,cACvB,GAAI,SAAS,MAAM,IAAI;AAAA;AAAA,qBAEpB,YAAY,MAAM;AACzB,uBAAW;AAAA,qBACJ,OAAO,aAAa,YAAa,WAAU,YAAY,QAAQ,WAAW;AACjF,sBAAU,kBAAkB,YAAY,SAAS,OAAO,YAAY,SAAS;AAE7E,uBAAW;AACX,qBAAS,KAAK,QAAQ;AACtB,qBAAS,IAAI,QAAQ;AAAA;AAGzB,gBAAM,IAAI,SAAS;AAEnB,cAAI,WAAW,UAAU,WAAW,OAAO,YAAY;AACnD,gBAAI,UAAU,MAAM;AAAA;AAGxB,iBAAO;AAAA;AAGX,uBAAe,KAAK,SAAS;AAC7B,uBAAe,UAAU;AAEzB,0BAAmB,KAAK,OAAM;AAI1B,cAAI,MAAM,OAAO,WAAW,IAAI,QAAQ,KAAK;AAE7C,iBAAQ,OAAM,OAAO,IAAI,OAAO;AAAA;AAGpC,2CAAmC,MAAM,OAAO;AAC5C,cAAI,MAAM;AAEV,cAAI,SAAS,MAAM,UAAU,KAAK,UAC7B,OAAM,SAAS,KAAK,UAAU;AACnC,cAAI,KAAK,QAAQ,IAAI,IAAI,QAAQ,KAAK,QAAQ,QAAQ;AAClD,cAAE,IAAI;AAAA;AAGV,cAAI,eAAe,CAAC,QAAQ,CAAE,KAAK,QAAQ,IAAI,IAAI,QAAQ;AAE3D,iBAAO;AAAA;AAGX,mCAA2B,MAAM,OAAO;AACpC,cAAI;AACJ,cAAI,CAAE,MAAK,aAAa,MAAM,YAAY;AACtC,mBAAO,EAAC,cAAc,GAAG,QAAQ;AAAA;AAGrC,kBAAQ,gBAAgB,OAAO;AAC/B,cAAI,KAAK,SAAS,QAAQ;AACtB,kBAAM,0BAA0B,MAAM;AAAA,iBACnC;AACH,kBAAM,0BAA0B,OAAO;AACvC,gBAAI,eAAe,CAAC,IAAI;AACxB,gBAAI,SAAS,CAAC,IAAI;AAAA;AAGtB,iBAAO;AAAA;AAIX,6BAAqB,WAAW,MAAM;AAClC,iBAAO,SAAU,KAAK,QAAQ;AAC1B,gBAAI,KAAK;AAET,gBAAI,WAAW,QAAQ,CAAC,MAAM,CAAC,SAAS;AACpC,8BAAgB,MAAM,cAAc,OAAQ,yDAAyD,OAAO;AAE5G,oBAAM;AAAK,oBAAM;AAAQ,uBAAS;AAAA;AAGtC,kBAAM,OAAO,QAAQ,WAAW,CAAC,MAAM;AACvC,kBAAM,eAAe,KAAK;AAC1B,wBAAY,MAAM,KAAK;AACvB,mBAAO;AAAA;AAAA;AAIf,6BAAsB,KAAK,UAAU,UAAU,cAAc;AACzD,cAAI,gBAAe,SAAS,eACxB,QAAO,SAAS,SAAS,QACzB,UAAS,SAAS,SAAS;AAE/B,cAAI,CAAC,IAAI,WAAW;AAEhB;AAAA;AAGJ,yBAAe,gBAAgB,OAAO,OAAO;AAE7C,cAAI,SAAQ;AACR,qBAAS,KAAK,KAAI,KAAK,WAAW,UAAS;AAAA;AAE/C,cAAI,OAAM;AACN,kBAAM,KAAK,QAAQ,KAAI,KAAK,UAAU,QAAO;AAAA;AAEjD,cAAI,eAAc;AACd,gBAAI,GAAG,QAAQ,IAAI,GAAG,YAAY,gBAAe;AAAA;AAErD,cAAI,cAAc;AACd,kBAAM,aAAa,KAAK,SAAQ;AAAA;AAAA;AAIxC,YAAI,OAAW,YAAY,GAAG;AAC9B,YAAI,WAAW,YAAY,IAAI;AAE/B,mCAA2B,UAAU,MAAK;AACtC,cAAI,QAAO,SAAS,KAAK,MAAK,QAAQ;AACtC,iBAAO,QAAO,KAAK,aACX,QAAO,KAAK,aACZ,QAAO,IAAI,YACX,QAAO,IAAI,YACX,QAAO,IAAI,YACX,QAAO,IAAI,aAAa;AAAA;AAGpC,4BAAqB,MAAM,SAAS;AAGhC,cAAI,OAAM,QAAQ,eACd,MAAM,gBAAgB,MAAK,MAAM,QAAQ,QACzC,UAAS,MAAM,eAAe,MAAM,QAAQ;AAEhD,cAAI,SAAS,WAAY,aAAW,QAAQ,YAAW,QAAQ,SAAQ,KAAK,MAAM,QAAO,QAAQ;AAEjG,iBAAO,KAAK,OAAO,UAAU,KAAK,aAAa,SAAS,SAAQ,MAAM,YAAY;AAAA;AAGtF,0BAAkB;AACd,iBAAO,IAAI,OAAO;AAAA;AAGtB,yBAAkB,OAAO,OAAO;AAC5B,cAAI,aAAa,SAAS,SAAS,QAAQ,YAAY;AACvD,cAAI,CAAE,MAAK,aAAa,WAAW,YAAY;AAC3C,mBAAO;AAAA;AAEX,kBAAQ,eAAe,UAAU;AACjC,cAAI,UAAU,eAAe;AACzB,mBAAO,KAAK,YAAY,WAAW;AAAA,iBAChC;AACH,mBAAO,WAAW,YAAY,KAAK,QAAQ,QAAQ,OAAO;AAAA;AAAA;AAIlE,0BAAmB,OAAO,OAAO;AAC7B,cAAI,aAAa,SAAS,SAAS,QAAQ,YAAY;AACvD,cAAI,CAAE,MAAK,aAAa,WAAW,YAAY;AAC3C,mBAAO;AAAA;AAEX,kBAAQ,eAAe,UAAU;AACjC,cAAI,UAAU,eAAe;AACzB,mBAAO,KAAK,YAAY,WAAW;AAAA,iBAChC;AACH,mBAAO,KAAK,QAAQ,MAAM,OAAO,YAAY,WAAW;AAAA;AAAA;AAIhE,2BAAoB,OAAM,KAAI,OAAO,aAAa;AAC9C,cAAI,YAAY,SAAS,SAAQ,QAAO,YAAY,QAChD,UAAU,SAAS,OAAM,MAAK,YAAY;AAC9C,cAAI,CAAE,MAAK,aAAa,UAAU,aAAa,QAAQ,YAAY;AAC/D,mBAAO;AAAA;AAEX,wBAAc,eAAe;AAC7B,iBAAQ,aAAY,OAAO,MAAM,KAAK,QAAQ,WAAW,SAAS,CAAC,KAAK,SAAS,WAAW,WACvF,aAAY,OAAO,MAAM,KAAK,SAAS,SAAS,SAAS,CAAC,KAAK,QAAQ,SAAS;AAAA;AAGzF,wBAAiB,OAAO,OAAO;AAC3B,cAAI,aAAa,SAAS,SAAS,QAAQ,YAAY,QACnD;AACJ,cAAI,CAAE,MAAK,aAAa,WAAW,YAAY;AAC3C,mBAAO;AAAA;AAEX,kBAAQ,eAAe,UAAU;AACjC,cAAI,UAAU,eAAe;AACzB,mBAAO,KAAK,cAAc,WAAW;AAAA,iBAClC;AACH,sBAAU,WAAW;AACrB,mBAAO,KAAK,QAAQ,QAAQ,OAAO,aAAa,WAAW,WAAW,KAAK,QAAQ,MAAM,OAAO;AAAA;AAAA;AAIxG,+BAAwB,OAAO,OAAO;AAClC,iBAAO,KAAK,OAAO,OAAO,UAAU,KAAK,QAAQ,OAAO;AAAA;AAG5D,gCAAyB,OAAO,OAAO;AACnC,iBAAO,KAAK,OAAO,OAAO,UAAU,KAAK,SAAS,OAAO;AAAA;AAG7D,sBAAe,OAAO,OAAO,SAAS;AAClC,cAAI,MACA,WACA;AAEJ,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO;AAAA;AAGX,iBAAO,gBAAgB,OAAO;AAE9B,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO;AAAA;AAGX,sBAAa,MAAK,cAAc,KAAK,eAAe;AAEpD,kBAAQ,eAAe;AAEvB,kBAAQ;AAAA,iBACC;AAAQ,uBAAS,UAAU,MAAM,QAAQ;AAAI;AAAA,iBAC7C;AAAS,uBAAS,UAAU,MAAM;AAAO;AAAA,iBACzC;AAAW,uBAAS,UAAU,MAAM,QAAQ;AAAG;AAAA,iBAC/C;AAAU,uBAAU,QAAO,QAAQ;AAAK;AAAA,iBACxC;AAAU,uBAAU,QAAO,QAAQ;AAAK;AAAA,iBACxC;AAAQ,uBAAU,QAAO,QAAQ;AAAM;AAAA,iBACvC;AAAO,uBAAU,QAAO,OAAO,aAAa;AAAO;AAAA,iBACnD;AAAQ,uBAAU,QAAO,OAAO,aAAa;AAAQ;AAAA;AACjD,uBAAS,OAAO;AAAA;AAG7B,iBAAO,UAAU,SAAS,SAAS;AAAA;AAGvC,2BAAoB,GAAG,GAAG;AAEtB,cAAI,iBAAmB,GAAE,SAAS,EAAE,UAAU,KAAO,GAAE,UAAU,EAAE,UAE/D,SAAS,EAAE,QAAQ,IAAI,gBAAgB,WACvC,SAAS;AAEb,cAAI,IAAI,SAAS,GAAG;AAChB,sBAAU,EAAE,QAAQ,IAAI,iBAAiB,GAAG;AAE5C,qBAAU,KAAI,UAAW,UAAS;AAAA,iBAC/B;AACH,sBAAU,EAAE,QAAQ,IAAI,iBAAiB,GAAG;AAE5C,qBAAU,KAAI,UAAW,WAAU;AAAA;AAIvC,iBAAO,CAAE,kBAAiB,WAAW;AAAA;AAGzC,cAAM,gBAAgB;AACtB,cAAM,mBAAmB;AAEzB,8BAAqB;AACjB,iBAAO,KAAK,QAAQ,OAAO,MAAM,OAAO;AAAA;AAG5C,6BAAqB,YAAY;AAC7B,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO;AAAA;AAEX,cAAI,MAAM,eAAe;AACzB,cAAI,IAAI,MAAM,KAAK,QAAQ,QAAQ;AACnC,cAAI,EAAE,SAAS,KAAK,EAAE,SAAS,MAAM;AACjC,mBAAO,aAAa,GAAG,MAAM,mCAAmC;AAAA;AAEpE,cAAI,YAAW,KAAK,UAAU,cAAc;AAExC,gBAAI,KAAK;AACL,qBAAO,KAAK,SAAS;AAAA,mBAClB;AACH,qBAAO,IAAI,KAAK,KAAK,YAAY,KAAK,cAAc,KAAK,KAAM,cAAc,QAAQ,KAAK,aAAa,GAAG;AAAA;AAAA;AAGlH,iBAAO,aAAa,GAAG,MAAM,iCAAiC;AAAA;AASlE,2BAAoB;AAChB,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO,uBAAuB,KAAK,KAAK;AAAA;AAE5C,cAAI,OAAO;AACX,cAAI,OAAO;AACX,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO,KAAK,gBAAgB,IAAI,eAAe;AAC/C,mBAAO;AAAA;AAEX,cAAI,SAAS,MAAM,OAAO;AAC1B,cAAI,OAAQ,KAAK,KAAK,UAAU,KAAK,UAAU,OAAQ,SAAS;AAChE,cAAI,WAAW;AACf,cAAI,SAAS,OAAO;AAEpB,iBAAO,KAAK,OAAO,SAAS,OAAO,WAAW;AAAA;AAGlD,yBAAiB,aAAa;AAC1B,cAAI,CAAC,aAAa;AACd,0BAAc,KAAK,UAAU,MAAM,mBAAmB,MAAM;AAAA;AAEhE,cAAI,SAAS,aAAa,MAAM;AAChC,iBAAO,KAAK,aAAa,WAAW;AAAA;AAGxC,uBAAe,MAAM,eAAe;AAChC,cAAI,KAAK,aACC,UAAS,SAAS,KAAK,aACxB,YAAY,MAAM,YAAY;AACnC,mBAAO,eAAe,EAAC,IAAI,MAAM,MAAM,QAAO,OAAO,KAAK,UAAU,SAAS,CAAC;AAAA,iBAC3E;AACH,mBAAO,KAAK,aAAa;AAAA;AAAA;AAIjC,yBAAkB,eAAe;AAC7B,iBAAO,KAAK,KAAK,eAAe;AAAA;AAGpC,oBAAa,MAAM,eAAe;AAC9B,cAAI,KAAK,aACC,UAAS,SAAS,KAAK,aACxB,YAAY,MAAM,YAAY;AACnC,mBAAO,eAAe,EAAC,MAAM,MAAM,IAAI,QAAO,OAAO,KAAK,UAAU,SAAS,CAAC;AAAA,iBAC3E;AACH,mBAAO,KAAK,aAAa;AAAA;AAAA;AAIjC,uBAAgB,eAAe;AAC3B,iBAAO,KAAK,GAAG,eAAe;AAAA;AAMlC,wBAAiB,KAAK;AAClB,cAAI;AAEJ,cAAI,QAAQ,QAAW;AACnB,mBAAO,KAAK,QAAQ;AAAA,iBACjB;AACH,4BAAgB,UAAU;AAC1B,gBAAI,iBAAiB,MAAM;AACvB,mBAAK,UAAU;AAAA;AAEnB,mBAAO;AAAA;AAAA;AAIf,YAAI,OAAO,UACP,mJACA,SAAU,KAAK;AACX,cAAI,QAAQ,QAAW;AACnB,mBAAO,KAAK;AAAA,iBACT;AACH,mBAAO,KAAK,OAAO;AAAA;AAAA;AAK/B,8BAAuB;AACnB,iBAAO,KAAK;AAAA;AAGhB,YAAI,gBAAgB;AACpB,YAAI,gBAAgB,KAAK;AACzB,YAAI,cAAc,KAAK;AACvB,YAAI,mBAAoB,OAAM,MAAM,MAAM,KAAK;AAG/C,uBAAe,UAAU,SAAS;AAC9B,iBAAQ,YAAW,UAAU,WAAW;AAAA;AAG5C,kCAA0B,GAAG,GAAG,GAAG;AAE/B,cAAI,IAAI,OAAO,KAAK,GAAG;AAEnB,mBAAO,IAAI,KAAK,IAAI,KAAK,GAAG,KAAK;AAAA,iBAC9B;AACH,mBAAO,IAAI,KAAK,GAAG,GAAG,GAAG;AAAA;AAAA;AAIjC,gCAAwB,GAAG,GAAG,GAAG;AAE7B,cAAI,IAAI,OAAO,KAAK,GAAG;AAEnB,mBAAO,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK;AAAA,iBAC9B;AACH,mBAAO,KAAK,IAAI,GAAG,GAAG;AAAA;AAAA;AAI9B,yBAAkB,OAAO;AACrB,cAAI;AACJ,kBAAQ,eAAe;AACvB,cAAI,UAAU,UAAa,UAAU,iBAAiB,CAAC,KAAK,WAAW;AACnE,mBAAO;AAAA;AAGX,cAAI,cAAc,KAAK,SAAS,iBAAiB;AAEjD,kBAAQ;AAAA,iBACC;AACD,qBAAO,YAAY,KAAK,QAAQ,GAAG;AACnC;AAAA,iBACC;AACD,qBAAO,YAAY,KAAK,QAAQ,KAAK,UAAU,KAAK,UAAU,GAAG;AACjE;AAAA,iBACC;AACD,qBAAO,YAAY,KAAK,QAAQ,KAAK,SAAS;AAC9C;AAAA,iBACC;AACD,qBAAO,YAAY,KAAK,QAAQ,KAAK,SAAS,KAAK,SAAS,KAAK;AACjE;AAAA,iBACC;AACD,qBAAO,YAAY,KAAK,QAAQ,KAAK,SAAS,KAAK,SAAU,MAAK,eAAe;AACjF;AAAA,iBACC;AAAA,iBACA;AACD,qBAAO,YAAY,KAAK,QAAQ,KAAK,SAAS,KAAK;AACnD;AAAA,iBACC;AACD,qBAAO,KAAK,GAAG;AACf,sBAAQ,MAAM,OAAQ,MAAK,SAAS,IAAI,KAAK,cAAc,gBAAgB;AAC3E;AAAA,iBACC;AACD,qBAAO,KAAK,GAAG;AACf,sBAAQ,MAAM,MAAM;AACpB;AAAA,iBACC;AACD,qBAAO,KAAK,GAAG;AACf,sBAAQ,MAAM,MAAM;AACpB;AAAA;AAGR,eAAK,GAAG,QAAQ;AAChB,gBAAM,aAAa,MAAM;AACzB,iBAAO;AAAA;AAGX,uBAAgB,OAAO;AACnB,cAAI;AACJ,kBAAQ,eAAe;AACvB,cAAI,UAAU,UAAa,UAAU,iBAAiB,CAAC,KAAK,WAAW;AACnE,mBAAO;AAAA;AAGX,cAAI,cAAc,KAAK,SAAS,iBAAiB;AAEjD,kBAAQ;AAAA,iBACC;AACD,qBAAO,YAAY,KAAK,SAAS,GAAG,GAAG,KAAK;AAC5C;AAAA,iBACC;AACD,qBAAO,YAAY,KAAK,QAAQ,KAAK,UAAU,KAAK,UAAU,IAAI,GAAG,KAAK;AAC1E;AAAA,iBACC;AACD,qBAAO,YAAY,KAAK,QAAQ,KAAK,UAAU,GAAG,KAAK;AACvD;AAAA,iBACC;AACD,qBAAO,YAAY,KAAK,QAAQ,KAAK,SAAS,KAAK,SAAS,KAAK,YAAY,KAAK;AAClF;AAAA,iBACC;AACD,qBAAO,YAAY,KAAK,QAAQ,KAAK,SAAS,KAAK,SAAU,MAAK,eAAe,KAAK,KAAK;AAC3F;AAAA,iBACC;AAAA,iBACA;AACD,qBAAO,YAAY,KAAK,QAAQ,KAAK,SAAS,KAAK,SAAS,KAAK;AACjE;AAAA,iBACC;AACD,qBAAO,KAAK,GAAG;AACf,sBAAQ,cAAc,MAAM,OAAQ,MAAK,SAAS,IAAI,KAAK,cAAc,gBAAgB,eAAe;AACxG;AAAA,iBACC;AACD,qBAAO,KAAK,GAAG;AACf,sBAAQ,gBAAgB,MAAM,MAAM,iBAAiB;AACrD;AAAA,iBACC;AACD,qBAAO,KAAK,GAAG;AACf,sBAAQ,gBAAgB,MAAM,MAAM,iBAAiB;AACrD;AAAA;AAGR,eAAK,GAAG,QAAQ;AAChB,gBAAM,aAAa,MAAM;AACzB,iBAAO;AAAA;AAGX,2BAAoB;AAChB,iBAAO,KAAK,GAAG,YAAc,MAAK,WAAW,KAAK;AAAA;AAGtD,wBAAiB;AACb,iBAAO,KAAK,MAAM,KAAK,YAAY;AAAA;AAGvC,0BAAmB;AACf,iBAAO,IAAI,KAAK,KAAK;AAAA;AAGzB,4BAAoB;AAChB,cAAI,IAAI;AACR,iBAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE;AAAA;AAG/E,6BAAqB;AACjB,cAAI,IAAI;AACR,iBAAO;AAAA,YACH,OAAO,EAAE;AAAA,YACT,QAAQ,EAAE;AAAA,YACV,MAAM,EAAE;AAAA,YACR,OAAO,EAAE;AAAA,YACT,SAAS,EAAE;AAAA,YACX,SAAS,EAAE;AAAA,YACX,cAAc,EAAE;AAAA;AAAA;AAIxB,0BAAmB;AAEf,iBAAO,KAAK,YAAY,KAAK,gBAAgB;AAAA;AAGjD,6BAAsB;AAClB,iBAAO,QAAQ;AAAA;AAGnB,gCAAyB;AACrB,iBAAO,QAAO,IAAI,gBAAgB;AAAA;AAGtC,6BAAsB;AAClB,iBAAO,gBAAgB,MAAM;AAAA;AAGjC,gCAAwB;AACpB,iBAAO;AAAA,YACH,OAAO,KAAK;AAAA,YACZ,QAAQ,KAAK;AAAA,YACb,QAAQ,KAAK;AAAA,YACb,OAAO,KAAK;AAAA,YACZ,QAAQ,KAAK;AAAA;AAAA;AAMrB,uBAAe,GAAG,CAAC,MAAM,IAAI,GAAG,WAAY;AACxC,iBAAO,KAAK,aAAa;AAAA;AAG7B,uBAAe,GAAG,CAAC,MAAM,IAAI,GAAG,WAAY;AACxC,iBAAO,KAAK,gBAAgB;AAAA;AAGhC,wCAAiC,QAAO,QAAQ;AAC5C,yBAAe,GAAG,CAAC,QAAO,OAAM,SAAS,GAAG;AAAA;AAGhD,+BAAuB,QAAY;AACnC,+BAAuB,SAAY;AACnC,+BAAuB,QAAS;AAChC,+BAAuB,SAAS;AAIhC,qBAAa,YAAY;AACzB,qBAAa,eAAe;AAI5B,wBAAgB,YAAY;AAC5B,wBAAgB,eAAe;AAK/B,sBAAc,KAAU;AACxB,sBAAc,KAAU;AACxB,sBAAc,MAAU,WAAW;AACnC,sBAAc,MAAU,WAAW;AACnC,sBAAc,QAAU,WAAW;AACnC,sBAAc,QAAU,WAAW;AACnC,sBAAc,SAAU,WAAW;AACnC,sBAAc,SAAU,WAAW;AAEnC,0BAAkB,CAAC,QAAQ,SAAS,QAAQ,UAAU,SAAU,OAAO,MAAM,QAAQ,QAAO;AACxF,eAAK,OAAM,OAAO,GAAG,MAAM,MAAM;AAAA;AAGrC,0BAAkB,CAAC,MAAM,OAAO,SAAU,OAAO,MAAM,QAAQ,QAAO;AAClE,eAAK,UAAS,MAAM,kBAAkB;AAAA;AAK1C,gCAAyB,OAAO;AAC5B,iBAAO,qBAAqB,KAAK,MACzB,OACA,KAAK,QACL,KAAK,WACL,KAAK,aAAa,MAAM,KACxB,KAAK,aAAa,MAAM;AAAA;AAGpC,mCAA4B,OAAO;AAC/B,iBAAO,qBAAqB,KAAK,MACzB,OAAO,KAAK,WAAW,KAAK,cAAc,GAAG;AAAA;AAGzD,qCAA8B;AAC1B,iBAAO,YAAY,KAAK,QAAQ,GAAG;AAAA;AAGvC,kCAA2B;AACvB,cAAI,WAAW,KAAK,aAAa;AACjC,iBAAO,YAAY,KAAK,QAAQ,SAAS,KAAK,SAAS;AAAA;AAG3D,sCAA8B,OAAO,MAAM,SAAS,KAAK,KAAK;AAC1D,cAAI;AACJ,cAAI,SAAS,MAAM;AACf,mBAAO,WAAW,MAAM,KAAK,KAAK;AAAA,iBAC/B;AACH,0BAAc,YAAY,OAAO,KAAK;AACtC,gBAAI,OAAO,aAAa;AACpB,qBAAO;AAAA;AAEX,mBAAO,WAAW,KAAK,MAAM,OAAO,MAAM,SAAS,KAAK;AAAA;AAAA;AAIhE,4BAAoB,UAAU,MAAM,SAAS,KAAK,KAAK;AACnD,cAAI,gBAAgB,mBAAmB,UAAU,MAAM,SAAS,KAAK,MACjE,OAAO,cAAc,cAAc,MAAM,GAAG,cAAc;AAE9D,eAAK,KAAK,KAAK;AACf,eAAK,MAAM,KAAK;AAChB,eAAK,KAAK,KAAK;AACf,iBAAO;AAAA;AAKX,uBAAe,KAAK,GAAG,MAAM;AAI7B,qBAAa,WAAW;AAIxB,wBAAgB,WAAW;AAI3B,sBAAc,KAAK;AACnB,sBAAc,KAAK,SAAU,OAAO,OAAO;AACvC,gBAAM,SAAU,OAAM,SAAS,KAAK;AAAA;AAKxC,+BAAwB,OAAO;AAC3B,iBAAO,SAAS,OAAO,KAAK,KAAM,MAAK,UAAU,KAAK,KAAK,KAAK,MAAO,SAAQ,KAAK,IAAI,KAAK,UAAU;AAAA;AAK3G,uBAAe,KAAK,CAAC,MAAM,IAAI,MAAM;AAIrC,qBAAa,QAAQ;AAGrB,wBAAgB,QAAQ;AAIxB,sBAAc,KAAM;AACpB,sBAAc,MAAM,WAAW;AAC/B,sBAAc,MAAM,SAAU,UAAU,SAAQ;AAE5C,iBAAO,WACJ,QAAO,2BAA2B,QAAO,gBAC1C,QAAO;AAAA;AAGb,sBAAc,CAAC,KAAK,OAAO;AAC3B,sBAAc,MAAM,SAAU,OAAO,OAAO;AACxC,gBAAM,QAAQ,MAAM,MAAM,MAAM,WAAW;AAAA;AAK/C,YAAI,mBAAmB,WAAW,QAAQ;AAI1C,uBAAe,OAAO,CAAC,QAAQ,IAAI,QAAQ;AAI3C,qBAAa,aAAa;AAG1B,wBAAgB,aAAa;AAI7B,sBAAc,OAAQ;AACtB,sBAAc,QAAQ;AACtB,sBAAc,CAAC,OAAO,SAAS,SAAU,OAAO,OAAO,QAAQ;AAC3D,iBAAO,aAAa,MAAM;AAAA;AAO9B,iCAA0B,OAAO;AAC7B,cAAI,YAAY,KAAK,MAAO,MAAK,QAAQ,QAAQ,SAAS,KAAK,QAAQ,QAAQ,WAAW,SAAS;AACnG,iBAAO,SAAS,OAAO,YAAY,KAAK,IAAK,QAAQ,WAAY;AAAA;AAKrE,uBAAe,KAAK,CAAC,MAAM,IAAI,GAAG;AAIlC,qBAAa,UAAU;AAIvB,wBAAgB,UAAU;AAI1B,sBAAc,KAAM;AACpB,sBAAc,MAAM,WAAW;AAC/B,sBAAc,CAAC,KAAK,OAAO;AAI3B,YAAI,eAAe,WAAW,WAAW;AAIzC,uBAAe,KAAK,CAAC,MAAM,IAAI,GAAG;AAIlC,qBAAa,UAAU;AAIvB,wBAAgB,UAAU;AAI1B,sBAAc,KAAM;AACpB,sBAAc,MAAM,WAAW;AAC/B,sBAAc,CAAC,KAAK,OAAO;AAI3B,YAAI,eAAe,WAAW,WAAW;AAIzC,uBAAe,KAAK,GAAG,GAAG,WAAY;AAClC,iBAAO,CAAC,CAAE,MAAK,gBAAgB;AAAA;AAGnC,uBAAe,GAAG,CAAC,MAAM,IAAI,GAAG,WAAY;AACxC,iBAAO,CAAC,CAAE,MAAK,gBAAgB;AAAA;AAGnC,uBAAe,GAAG,CAAC,OAAO,IAAI,GAAG;AACjC,uBAAe,GAAG,CAAC,QAAQ,IAAI,GAAG,WAAY;AAC1C,iBAAO,KAAK,gBAAgB;AAAA;AAEhC,uBAAe,GAAG,CAAC,SAAS,IAAI,GAAG,WAAY;AAC3C,iBAAO,KAAK,gBAAgB;AAAA;AAEhC,uBAAe,GAAG,CAAC,UAAU,IAAI,GAAG,WAAY;AAC5C,iBAAO,KAAK,gBAAgB;AAAA;AAEhC,uBAAe,GAAG,CAAC,WAAW,IAAI,GAAG,WAAY;AAC7C,iBAAO,KAAK,gBAAgB;AAAA;AAEhC,uBAAe,GAAG,CAAC,YAAY,IAAI,GAAG,WAAY;AAC9C,iBAAO,KAAK,gBAAgB;AAAA;AAEhC,uBAAe,GAAG,CAAC,aAAa,IAAI,GAAG,WAAY;AAC/C,iBAAO,KAAK,gBAAgB;AAAA;AAMhC,qBAAa,eAAe;AAI5B,wBAAgB,eAAe;AAI/B,sBAAc,KAAQ,WAAW;AACjC,sBAAc,MAAQ,WAAW;AACjC,sBAAc,OAAQ,WAAW;AAEjC,YAAI;AACJ,aAAK,QAAQ,QAAQ,MAAM,UAAU,GAAG,SAAS,KAAK;AAClD,wBAAc,OAAO;AAAA;AAGzB,yBAAiB,OAAO,OAAO;AAC3B,gBAAM,eAAe,MAAO,QAAO,SAAS;AAAA;AAGhD,aAAK,QAAQ,KAAK,MAAM,UAAU,GAAG,SAAS,KAAK;AAC/C,wBAAc,OAAO;AAAA;AAIzB,YAAI,oBAAoB,WAAW,gBAAgB;AAInD,uBAAe,KAAM,GAAG,GAAG;AAC3B,uBAAe,MAAM,GAAG,GAAG;AAI3B,+BAAwB;AACpB,iBAAO,KAAK,SAAS,QAAQ;AAAA;AAGjC,+BAAwB;AACpB,iBAAO,KAAK,SAAS,+BAA+B;AAAA;AAGxD,YAAI,QAAQ,OAAO;AAEnB,cAAM,MAAoB;AAC1B,cAAM,WAAoB;AAC1B,cAAM,QAAoB;AAC1B,cAAM,OAAoB;AAC1B,cAAM,QAAoB;AAC1B,cAAM,SAAoB;AAC1B,cAAM,OAAoB;AAC1B,cAAM,UAAoB;AAC1B,cAAM,KAAoB;AAC1B,cAAM,QAAoB;AAC1B,cAAM,MAAoB;AAC1B,cAAM,YAAoB;AAC1B,cAAM,UAAoB;AAC1B,cAAM,WAAoB;AAC1B,cAAM,YAAoB;AAC1B,cAAM,SAAoB;AAC1B,cAAM,gBAAoB;AAC1B,cAAM,iBAAoB;AAC1B,cAAM,UAAoB;AAC1B,cAAM,OAAoB;AAC1B,cAAM,SAAoB;AAC1B,cAAM,aAAoB;AAC1B,cAAM,MAAoB;AAC1B,cAAM,MAAoB;AAC1B,cAAM,eAAoB;AAC1B,cAAM,MAAoB;AAC1B,cAAM,UAAoB;AAC1B,cAAM,WAAoB;AAC1B,cAAM,UAAoB;AAC1B,cAAM,WAAoB;AAC1B,cAAM,SAAoB;AAC1B,cAAM,cAAoB;AAC1B,cAAM,UAAoB;AAC1B,cAAM,SAAoB;AAC1B,cAAM,WAAoB;AAC1B,cAAM,OAAoB;AAC1B,cAAM,UAAoB;AAC1B,cAAM,eAAoB;AAC1B,cAAM,OAAa;AACnB,cAAM,aAAa;AACnB,cAAM,WAAc;AACpB,cAAM,cAAc;AACpB,cAAM,UAAU,MAAM,WAAW;AACjC,cAAM,QAAc;AACpB,cAAM,cAAc;AACpB,cAAM,OAAiB,MAAM,QAAe;AAC5C,cAAM,UAAiB,MAAM,WAAe;AAC5C,cAAM,cAAiB;AACvB,cAAM,iBAAiB;AACvB,cAAM,OAAa;AACnB,cAAM,MAAa,MAAM,OAAmB;AAC5C,cAAM,UAAa;AACnB,cAAM,aAAa;AACnB,cAAM,YAAa;AACnB,cAAM,OAAO,MAAM,QAAQ;AAC3B,cAAM,SAAS,MAAM,UAAU;AAC/B,cAAM,SAAS,MAAM,UAAU;AAC/B,cAAM,cAAc,MAAM,eAAe;AACzC,cAAM,YAAuB;AAC7B,cAAM,MAAuB;AAC7B,cAAM,QAAuB;AAC7B,cAAM,YAAuB;AAC7B,cAAM,uBAAuB;AAC7B,cAAM,QAAuB;AAC7B,cAAM,UAAuB;AAC7B,cAAM,cAAuB;AAC7B,cAAM,QAAuB;AAC7B,cAAM,QAAuB;AAC7B,cAAM,WAAW;AACjB,cAAM,WAAW;AACjB,cAAM,QAAS,UAAU,mDAAmD;AAC5E,cAAM,SAAS,UAAU,oDAAoD;AAC7E,cAAM,QAAS,UAAU,kDAAkD;AAC3E,cAAM,OAAS,UAAU,4GAA4G;AACrI,cAAM,eAAe,UAAU,2GAA2G;AAE1I,4BAAqB,OAAO;AACxB,iBAAO,YAAY,QAAQ;AAAA;AAG/B,gCAAyB;AACrB,iBAAO,YAAY,MAAM,MAAM,WAAW;AAAA;AAG9C,oCAA6B,QAAQ;AACjC,iBAAO;AAAA;AAGX,YAAI,UAAU,OAAO;AAErB,gBAAQ,WAAkB;AAC1B,gBAAQ,iBAAkB;AAC1B,gBAAQ,cAAkB;AAC1B,gBAAQ,UAAkB;AAC1B,gBAAQ,WAAkB;AAC1B,gBAAQ,aAAkB;AAC1B,gBAAQ,eAAkB;AAC1B,gBAAQ,aAAkB;AAC1B,gBAAQ,MAAkB;AAE1B,gBAAQ,SAA2B;AACnC,gBAAQ,cAA2B;AACnC,gBAAQ,cAA2B;AACnC,gBAAQ,cAAoB;AAC5B,gBAAQ,mBAAoB;AAC5B,gBAAQ,OAAO;AACf,gBAAQ,iBAAiB;AACzB,gBAAQ,iBAAiB;AAEzB,gBAAQ,WAAwB;AAChC,gBAAQ,cAAwB;AAChC,gBAAQ,gBAAwB;AAChC,gBAAQ,gBAAwB;AAEhC,gBAAQ,gBAA6B;AACrC,gBAAQ,qBAA6B;AACrC,gBAAQ,mBAA6B;AAErC,gBAAQ,OAAO;AACf,gBAAQ,WAAW;AAEnB,uBAAgB,SAAQ,QAAO,OAAO,QAAQ;AAC1C,cAAI,UAAS;AACb,cAAI,MAAM,YAAY,IAAI,QAAQ;AAClC,iBAAO,QAAO,OAAO,KAAK;AAAA;AAG9B,gCAAyB,SAAQ,QAAO,OAAO;AAC3C,cAAI,SAAS,UAAS;AAClB,qBAAQ;AACR,sBAAS;AAAA;AAGb,oBAAS,WAAU;AAEnB,cAAI,UAAS,MAAM;AACf,mBAAO,MAAM,SAAQ,QAAO,OAAO;AAAA;AAGvC,cAAI;AACJ,cAAI,MAAM;AACV,eAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACrB,gBAAI,KAAK,MAAM,SAAQ,GAAG,OAAO;AAAA;AAErC,iBAAO;AAAA;AAWX,kCAA2B,cAAc,SAAQ,QAAO,OAAO;AAC3D,cAAI,OAAO,iBAAiB,WAAW;AACnC,gBAAI,SAAS,UAAS;AAClB,uBAAQ;AACR,wBAAS;AAAA;AAGb,sBAAS,WAAU;AAAA,iBAChB;AACH,sBAAS;AACT,qBAAQ;AACR,2BAAe;AAEf,gBAAI,SAAS,UAAS;AAClB,uBAAQ;AACR,wBAAS;AAAA;AAGb,sBAAS,WAAU;AAAA;AAGvB,cAAI,UAAS,aACT,QAAQ,eAAe,QAAO,MAAM,MAAM;AAE9C,cAAI,UAAS,MAAM;AACf,mBAAO,MAAM,SAAS,UAAQ,SAAS,GAAG,OAAO;AAAA;AAGrD,cAAI;AACJ,cAAI,MAAM;AACV,eAAK,IAAI,GAAG,IAAI,GAAG,KAAK;AACpB,gBAAI,KAAK,MAAM,SAAS,KAAI,SAAS,GAAG,OAAO;AAAA;AAEnD,iBAAO;AAAA;AAGX,4BAAqB,SAAQ,QAAO;AAChC,iBAAO,eAAe,SAAQ,QAAO;AAAA;AAGzC,iCAA0B,SAAQ,QAAO;AACrC,iBAAO,eAAe,SAAQ,QAAO;AAAA;AAGzC,8BAAuB,cAAc,SAAQ,QAAO;AAChD,iBAAO,iBAAiB,cAAc,SAAQ,QAAO;AAAA;AAGzD,mCAA4B,cAAc,SAAQ,QAAO;AACrD,iBAAO,iBAAiB,cAAc,SAAQ,QAAO;AAAA;AAGzD,iCAA0B,cAAc,SAAQ,QAAO;AACnD,iBAAO,iBAAiB,cAAc,SAAQ,QAAO;AAAA;AAGzD,2BAAmB,MAAM;AAAA,UACrB,wBAAwB;AAAA,UACxB,SAAU,SAAU,QAAQ;AACxB,gBAAI,IAAI,SAAS,IACb,SAAU,MAAM,SAAS,MAAM,QAAQ,IAAK,OAC3C,MAAM,IAAK,OACX,MAAM,IAAK,OACX,MAAM,IAAK,OAAO;AACvB,mBAAO,SAAS;AAAA;AAAA;AAMxB,cAAM,OAAO,UAAU,yDAAyD;AAChF,cAAM,WAAW,UAAU,iEAAiE;AAE5F,YAAI,UAAU,KAAK;AAEnB,uBAAgB;AACZ,cAAI,OAAiB,KAAK;AAE1B,eAAK,gBAAgB,QAAQ,KAAK;AAClC,eAAK,QAAgB,QAAQ,KAAK;AAClC,eAAK,UAAgB,QAAQ,KAAK;AAElC,eAAK,eAAgB,QAAQ,KAAK;AAClC,eAAK,UAAgB,QAAQ,KAAK;AAClC,eAAK,UAAgB,QAAQ,KAAK;AAClC,eAAK,QAAgB,QAAQ,KAAK;AAClC,eAAK,SAAgB,QAAQ,KAAK;AAClC,eAAK,QAAgB,QAAQ,KAAK;AAElC,iBAAO;AAAA;AAGX,+BAAwB,UAAU,OAAO,OAAO,WAAW;AACvD,cAAI,QAAQ,eAAe,OAAO;AAElC,mBAAS,iBAAiB,YAAY,MAAM;AAC5C,mBAAS,SAAiB,YAAY,MAAM;AAC5C,mBAAS,WAAiB,YAAY,MAAM;AAE5C,iBAAO,SAAS;AAAA;AAIpB,uBAAgB,OAAO,OAAO;AAC1B,iBAAO,cAAc,MAAM,OAAO,OAAO;AAAA;AAI7C,4BAAqB,OAAO,OAAO;AAC/B,iBAAO,cAAc,MAAM,OAAO,OAAO;AAAA;AAG7C,yBAAkB,QAAQ;AACtB,cAAI,SAAS,GAAG;AACZ,mBAAO,KAAK,MAAM;AAAA,iBACf;AACH,mBAAO,KAAK,KAAK;AAAA;AAAA;AAIzB,0BAAmB;AACf,cAAI,gBAAe,KAAK;AACxB,cAAI,QAAe,KAAK;AACxB,cAAI,UAAe,KAAK;AACxB,cAAI,OAAe,KAAK;AACxB,cAAI,UAAS,UAAS,QAAO,QAAO;AAIpC,cAAI,CAAG,kBAAgB,KAAK,SAAQ,KAAK,WAAU,KAC1C,iBAAgB,KAAK,SAAQ,KAAK,WAAU,IAAK;AACtD,6BAAgB,QAAQ,aAAa,WAAU,SAAQ;AACvD,oBAAO;AACP,sBAAS;AAAA;AAKb,eAAK,eAAe,gBAAe;AAEnC,qBAAoB,SAAS,gBAAe;AAC5C,eAAK,UAAe,WAAU;AAE9B,qBAAoB,SAAS,WAAU;AACvC,eAAK,UAAe,WAAU;AAE9B,mBAAoB,SAAS,WAAU;AACvC,eAAK,QAAe,SAAQ;AAE5B,mBAAQ,SAAS,SAAQ;AAGzB,2BAAiB,SAAS,aAAa;AACvC,qBAAU;AACV,mBAAQ,QAAQ,aAAa;AAG7B,mBAAQ,SAAS,UAAS;AAC1B,qBAAU;AAEV,eAAK,OAAS;AACd,eAAK,SAAS;AACd,eAAK,QAAS;AAEd,iBAAO;AAAA;AAGX,8BAAuB,OAAM;AAGzB,iBAAO,QAAO,OAAO;AAAA;AAGzB,8BAAuB,SAAQ;AAE3B,iBAAO,UAAS,SAAS;AAAA;AAG7B,oBAAa,OAAO;AAChB,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO;AAAA;AAEX,cAAI;AACJ,cAAI;AACJ,cAAI,gBAAe,KAAK;AAExB,kBAAQ,eAAe;AAEvB,cAAI,UAAU,WAAW,UAAU,aAAa,UAAU,QAAQ;AAC9D,oBAAO,KAAK,QAAQ,gBAAe;AACnC,sBAAS,KAAK,UAAU,aAAa;AACrC,oBAAQ;AAAA,mBACC;AAAW,uBAAO;AAAA,mBAClB;AAAW,uBAAO,UAAS;AAAA,mBAC3B;AAAW,uBAAO,UAAS;AAAA;AAAA,iBAEjC;AAEH,oBAAO,KAAK,QAAQ,KAAK,MAAM,aAAa,KAAK;AACjD,oBAAQ;AAAA,mBACC;AAAW,uBAAO,QAAO,IAAQ,gBAAe;AAAA,mBAChD;AAAW,uBAAO,QAAe,gBAAe;AAAA,mBAChD;AAAW,uBAAO,QAAO,KAAQ,gBAAe;AAAA,mBAChD;AAAW,uBAAO,QAAO,OAAQ,gBAAe;AAAA,mBAChD;AAAW,uBAAO,QAAO,QAAQ,gBAAe;AAAA,mBAEhD;AAAe,uBAAO,KAAK,MAAM,QAAO,SAAS;AAAA;AAC7C,sBAAM,IAAI,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAMvD,6BAAsB;AAClB,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO;AAAA;AAEX,iBACI,KAAK,gBACL,KAAK,QAAQ,QACZ,KAAK,UAAU,KAAM,SACtB,MAAM,KAAK,UAAU,MAAM;AAAA;AAInC,wBAAiB,OAAO;AACpB,iBAAO,WAAY;AACf,mBAAO,KAAK,GAAG;AAAA;AAAA;AAIvB,YAAI,iBAAiB,OAAO;AAC5B,YAAI,YAAiB,OAAO;AAC5B,YAAI,YAAiB,OAAO;AAC5B,YAAI,UAAiB,OAAO;AAC5B,YAAI,SAAiB,OAAO;AAC5B,YAAI,UAAiB,OAAO;AAC5B,YAAI,WAAiB,OAAO;AAC5B,YAAI,aAAiB,OAAO;AAC5B,YAAI,UAAiB,OAAO;AAE5B,2BAAoB;AAChB,iBAAO,eAAe;AAAA;AAG1B,uBAAgB,OAAO;AACnB,kBAAQ,eAAe;AACvB,iBAAO,KAAK,YAAY,KAAK,QAAQ,SAAS;AAAA;AAGlD,4BAAoB,MAAM;AACtB,iBAAO,WAAY;AACf,mBAAO,KAAK,YAAY,KAAK,MAAM,QAAQ;AAAA;AAAA;AAInD,YAAI,eAAe,WAAW;AAC9B,YAAI,UAAe,WAAW;AAC9B,YAAI,UAAe,WAAW;AAC9B,YAAI,QAAe,WAAW;AAC9B,YAAI,OAAe,WAAW;AAC9B,YAAI,SAAe,WAAW;AAC9B,YAAI,QAAe,WAAW;AAE9B,yBAAkB;AACd,iBAAO,SAAS,KAAK,SAAS;AAAA;AAGlC,YAAI,SAAQ,KAAK;AACjB,YAAI,aAAa;AAAA,UACb,IAAI;AAAA,UACJ,GAAI;AAAA,UACJ,GAAI;AAAA,UACJ,GAAI;AAAA,UACJ,GAAI;AAAA,UACJ,GAAI;AAAA;AAIR,mCAA2B,QAAQ,QAAQ,eAAe,UAAU,SAAQ;AACxE,iBAAO,QAAO,aAAa,UAAU,GAAG,CAAC,CAAC,eAAe,QAAQ;AAAA;AAGrE,gCAAyB,gBAAgB,eAAe,SAAQ;AAC5D,cAAI,WAAW,eAAe,gBAAgB;AAC9C,cAAI,WAAW,OAAM,SAAS,GAAG;AACjC,cAAI,WAAW,OAAM,SAAS,GAAG;AACjC,cAAI,SAAW,OAAM,SAAS,GAAG;AACjC,cAAI,QAAW,OAAM,SAAS,GAAG;AACjC,cAAI,UAAW,OAAM,SAAS,GAAG;AACjC,cAAI,SAAW,OAAM,SAAS,GAAG;AAEjC,cAAI,IAAI,YAAW,WAAW,MAAM,CAAC,KAAK,aAClC,WAAU,WAAW,KAAO,CAAC,MAAM,aACnC,YAAW,KAAiB,CAAC,QAC7B,WAAU,WAAW,KAAO,CAAC,MAAM,aACnC,UAAW,KAAiB,CAAC,QAC7B,SAAU,WAAW,KAAO,CAAC,MAAM,WACnC,SAAW,KAAiB,CAAC,QAC7B,QAAU,WAAW,KAAO,CAAC,MAAM,UACnC,WAAW,KAAiB,CAAC,QAC7B,UAAU,WAAW,KAAO,CAAC,MAAM,YACnC,UAAW,KAAiB,CAAC,QAAkB,CAAC,MAAM;AAE9D,YAAE,KAAK;AACP,YAAE,KAAK,CAAC,iBAAiB;AACzB,YAAE,KAAK;AACP,iBAAO,kBAAkB,MAAM,MAAM;AAAA;AAIzC,4CAAqC,kBAAkB;AACnD,cAAI,qBAAqB,QAAW;AAChC,mBAAO;AAAA;AAEX,cAAI,OAAO,qBAAsB,YAAY;AACzC,qBAAQ;AACR,mBAAO;AAAA;AAEX,iBAAO;AAAA;AAIX,6CAAsC,WAAW,OAAO;AACpD,cAAI,WAAW,eAAe,QAAW;AACrC,mBAAO;AAAA;AAEX,cAAI,UAAU,QAAW;AACrB,mBAAO,WAAW;AAAA;AAEtB,qBAAW,aAAa;AACxB,cAAI,cAAc,KAAK;AACnB,uBAAW,KAAK,QAAQ;AAAA;AAE5B,iBAAO;AAAA;AAGX,0BAAmB,YAAY;AAC3B,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO,KAAK,aAAa;AAAA;AAG7B,cAAI,UAAS,KAAK;AAClB,cAAI,SAAS,eAAe,MAAM,CAAC,YAAY;AAE/C,cAAI,YAAY;AACZ,qBAAS,QAAO,WAAW,CAAC,MAAM;AAAA;AAGtC,iBAAO,QAAO,WAAW;AAAA;AAG7B,YAAI,QAAQ,KAAK;AAEjB,sBAAc,GAAG;AACb,iBAAS,KAAI,KAAM,KAAI,MAAO,CAAC;AAAA;AAGnC,iCAAyB;AAQrB,cAAI,CAAC,KAAK,WAAW;AACjB,mBAAO,KAAK,aAAa;AAAA;AAG7B,cAAI,WAAU,MAAM,KAAK,iBAAiB;AAC1C,cAAI,QAAe,MAAM,KAAK;AAC9B,cAAI,UAAe,MAAM,KAAK;AAC9B,cAAI,UAAS,QAAO;AAGpB,qBAAoB,SAAS,WAAU;AACvC,mBAAoB,SAAS,WAAU;AACvC,sBAAW;AACX,sBAAW;AAGX,mBAAS,SAAS,UAAS;AAC3B,qBAAU;AAIV,cAAI,IAAI;AACR,cAAI,IAAI;AACR,cAAI,IAAI;AACR,cAAI,IAAI;AACR,cAAI,IAAI;AACR,cAAI,IAAI,WAAU,SAAQ,QAAQ,GAAG,QAAQ,UAAU,MAAM;AAC7D,cAAI,QAAQ,KAAK;AAEjB,cAAI,CAAC,OAAO;AAGR,mBAAO;AAAA;AAGX,cAAI,YAAY,QAAQ,IAAI,MAAM;AAClC,cAAI,SAAS,KAAK,KAAK,aAAa,KAAK,SAAS,MAAM;AACxD,cAAI,WAAW,KAAK,KAAK,WAAW,KAAK,SAAS,MAAM;AACxD,cAAI,UAAU,KAAK,KAAK,mBAAmB,KAAK,SAAS,MAAM;AAE/D,iBAAO,YAAY,MACd,KAAI,SAAS,IAAI,MAAM,MACvB,KAAI,SAAS,IAAI,MAAM,MACvB,KAAI,WAAW,IAAI,MAAM,MACxB,MAAK,KAAK,IAAK,MAAM,MACtB,KAAI,UAAU,IAAI,MAAM,MACxB,KAAI,UAAU,IAAI,MAAM,MACxB,KAAI,UAAU,IAAI,MAAM;AAAA;AAGjC,YAAI,UAAU,SAAS;AAEvB,gBAAQ,UAAiB;AACzB,gBAAQ,MAAiB;AACzB,gBAAQ,MAAiB;AACzB,gBAAQ,WAAiB;AACzB,gBAAQ,KAAiB;AACzB,gBAAQ,iBAAiB;AACzB,gBAAQ,YAAiB;AACzB,gBAAQ,YAAiB;AACzB,gBAAQ,UAAiB;AACzB,gBAAQ,SAAiB;AACzB,gBAAQ,UAAiB;AACzB,gBAAQ,WAAiB;AACzB,gBAAQ,aAAiB;AACzB,gBAAQ,UAAiB;AACzB,gBAAQ,UAAiB;AACzB,gBAAQ,UAAiB;AACzB,gBAAQ,QAAiB;AACzB,gBAAQ,MAAiB;AACzB,gBAAQ,eAAiB;AACzB,gBAAQ,UAAiB;AACzB,gBAAQ,UAAiB;AACzB,gBAAQ,QAAiB;AACzB,gBAAQ,OAAiB;AACzB,gBAAQ,QAAiB;AACzB,gBAAQ,SAAiB;AACzB,gBAAQ,QAAiB;AACzB,gBAAQ,WAAiB;AACzB,gBAAQ,cAAiB;AACzB,gBAAQ,WAAiB;AACzB,gBAAQ,SAAiB;AACzB,gBAAQ,SAAiB;AACzB,gBAAQ,aAAiB;AAEzB,gBAAQ,cAAc,UAAU,uFAAuF;AACvH,gBAAQ,OAAO;AAMf,uBAAe,KAAK,GAAG,GAAG;AAC1B,uBAAe,KAAK,GAAG,GAAG;AAI1B,sBAAc,KAAK;AACnB,sBAAc,KAAK;AACnB,sBAAc,KAAK,SAAU,OAAO,OAAO,QAAQ;AAC/C,iBAAO,KAAK,IAAI,KAAK,WAAW,OAAO,MAAM;AAAA;AAEjD,sBAAc,KAAK,SAAU,OAAO,OAAO,QAAQ;AAC/C,iBAAO,KAAK,IAAI,KAAK,MAAM;AAAA;AAM/B,cAAM,UAAU;AAEhB,wBAAgB;AAEhB,cAAM,KAAwB;AAC9B,cAAM,MAAwB;AAC9B,cAAM,MAAwB;AAC9B,cAAM,MAAwB;AAC9B,cAAM,MAAwB;AAC9B,cAAM,OAAwB;AAC9B,cAAM,SAAwB;AAC9B,cAAM,SAAwB;AAC9B,cAAM,SAAwB;AAC9B,cAAM,UAAwB;AAC9B,cAAM,WAAwB;AAC9B,cAAM,WAAwB;AAC9B,cAAM,WAAwB;AAC9B,cAAM,YAAwB;AAC9B,cAAM,aAAwB;AAC9B,cAAM,aAAwB;AAC9B,cAAM,cAAwB;AAC9B,cAAM,cAAwB;AAC9B,cAAM,eAAwB;AAC9B,cAAM,eAAwB;AAC9B,cAAM,UAAwB;AAC9B,cAAM,gBAAwB;AAC9B,cAAM,iBAAwB;AAC9B,cAAM,uBAAwB;AAC9B,cAAM,wBAAwB;AAC9B,cAAM,iBAAwB;AAC9B,cAAM,YAAwB;AAG9B,cAAM,YAAY;AAAA,UACd,gBAAgB;AAAA,UAChB,wBAAwB;AAAA,UACxB,mBAAmB;AAAA,UACnB,MAAM;AAAA,UACN,MAAM;AAAA,UACN,cAAc;AAAA,UACd,SAAS;AAAA,UACT,MAAM;AAAA,UACN,OAAO;AAAA;AAGX,eAAO;AAAA;AAAA;AAAA;;;ACv/IX;AAAA;AAAA;AACA,UAAI,gBAAc;AAClB,UAAI,eAAc;AAClB,UAAI,cAAc,4BAA0C;AAC5D,UAAI,YAAW;AACf,UAAI,YAAW;AACf,UAAI,aAAa;AACjB,UAAI,UAAU;AACd,UAAI,uBAAuB;AAC3B,UAAI,UAAS;AACb,UAAI,uBAAsB;AAE1B,UAAI,oBAAmB,qBAAoB;AAC3C,UAAI,yBAAyB,qBAAoB;AACjD,UAAI,QAAO,qBAAqB;AAChC,UAAI,aAAY,qBAAqB;AACrC,UAAI,UAAS,cAAY,GAAG;AAC5B,UAAI,MAAK;AAGT,UAAI,sBAAsB,SAAU,OAAO;AACzC,eAAO,MAAM,UAAW,OAAM,SAAS,IAAI;AAAA;AAG7C,UAAI,sBAAsB,WAAY;AACpC,aAAK,UAAU;AAAA;AAGjB,UAAI,qBAAqB,SAAU,OAAO,KAAK;AAC7C,eAAO,MAAK,MAAM,SAAS,SAAU,IAAI;AACvC,iBAAO,GAAG,OAAO;AAAA;AAAA;AAIrB,0BAAoB,YAAY;AAAA,QAC9B,KAAK,SAAU,KAAK;AAClB,cAAI,QAAQ,mBAAmB,MAAM;AACrC,cAAI;AAAO,mBAAO,MAAM;AAAA;AAAA,QAE1B,KAAK,SAAU,KAAK;AAClB,iBAAO,CAAC,CAAC,mBAAmB,MAAM;AAAA;AAAA,QAEpC,KAAK,SAAU,KAAK,OAAO;AACzB,cAAI,QAAQ,mBAAmB,MAAM;AACrC,cAAI;AAAO,kBAAM,KAAK;AAAA;AACjB,iBAAK,QAAQ,KAAK,CAAC,KAAK;AAAA;AAAA,QAE/B,UAAU,SAAU,KAAK;AACvB,cAAI,SAAQ,WAAU,KAAK,SAAS,SAAU,IAAI;AAChD,mBAAO,GAAG,OAAO;AAAA;AAEnB,cAAI,CAAC;AAAO,oBAAO,KAAK,SAAS,QAAO;AACxC,iBAAO,CAAC,CAAC,CAAC;AAAA;AAAA;AAId,aAAO,UAAU;AAAA,QACf,gBAAgB,SAAU,UAAS,kBAAkB,QAAQ,OAAO;AAClE,cAAI,cAAc,SAAQ,SAAU,MAAM,UAAU;AAClD,uBAAW,MAAM;AACjB,8BAAiB,MAAM;AAAA,cACrB,MAAM;AAAA,cACN,IAAI;AAAA,cACJ,QAAQ;AAAA;AAEV,gBAAI,YAAY;AAAW,sBAAQ,UAAU,KAAK,QAAQ,EAAE,MAAY,YAAY;AAAA;AAGtF,cAAI,YAAY,YAAY;AAE5B,cAAI,oBAAmB,uBAAuB;AAE9C,cAAI,UAAS,SAAU,MAAM,KAAK,OAAO;AACvC,gBAAI,QAAQ,kBAAiB;AAC7B,gBAAI,OAAO,YAAY,UAAS,MAAM;AACtC,gBAAI,SAAS;AAAM,kCAAoB,OAAO,IAAI,KAAK;AAAA;AAClD,mBAAK,MAAM,MAAM;AACtB,mBAAO;AAAA;AAGT,uBAAY,WAAW;AAAA,YAIrB,UAAU,SAAU,KAAK;AACvB,kBAAI,QAAQ,kBAAiB;AAC7B,kBAAI,CAAC,UAAS;AAAM,uBAAO;AAC3B,kBAAI,OAAO,YAAY;AACvB,kBAAI,SAAS;AAAM,uBAAO,oBAAoB,OAAO,UAAU;AAC/D,qBAAO,QAAQ,QAAO,MAAM,MAAM,OAAO,OAAO,KAAK,MAAM;AAAA;AAAA,YAK7D,KAAK,aAAa,KAAK;AACrB,kBAAI,QAAQ,kBAAiB;AAC7B,kBAAI,CAAC,UAAS;AAAM,uBAAO;AAC3B,kBAAI,OAAO,YAAY;AACvB,kBAAI,SAAS;AAAM,uBAAO,oBAAoB,OAAO,IAAI;AACzD,qBAAO,QAAQ,QAAO,MAAM,MAAM;AAAA;AAAA;AAItC,uBAAY,WAAW,SAAS;AAAA,YAG9B,KAAK,cAAa,KAAK;AACrB,kBAAI,QAAQ,kBAAiB;AAC7B,kBAAI,UAAS,MAAM;AACjB,oBAAI,OAAO,YAAY;AACvB,oBAAI,SAAS;AAAM,yBAAO,oBAAoB,OAAO,IAAI;AACzD,uBAAO,OAAO,KAAK,MAAM,MAAM;AAAA;AAAA;AAAA,YAKnC,KAAK,aAAa,KAAK,OAAO;AAC5B,qBAAO,QAAO,MAAM,KAAK;AAAA;AAAA,cAEzB;AAAA,YAGF,KAAK,cAAa,OAAO;AACvB,qBAAO,QAAO,MAAM,OAAO;AAAA;AAAA;AAI/B,iBAAO;AAAA;AAAA;AAAA;AAAA;;;AC/HX;AAAA;AAAA;AACA,UAAI,WAAS;AACb,UAAI,gBAAc;AAClB,UAAI,aAAY;AAChB,UAAI,YAAW;AACf,UAAI,UAAS;AACb,UAAI,cAAa;AACjB,UAAI,cAAc;AAElB,UAAI,YAAW,SAAO;AACtB,UAAI,UAAS,cAAY,GAAG;AAC5B,UAAI,QAAO,cAAY,GAAG;AAC1B,UAAI,YAAY;AAEhB,UAAI,aAAY,SAAU,GAAG,YAAY,MAAM;AAC7C,YAAI,CAAC,QAAO,WAAW,aAAa;AAClC,mBAAS,OAAO,IAAI,IAAI,GAAG,IAAI,YAAY;AAAK,iBAAK,KAAK,OAAO,IAAI;AACrE,oBAAU,cAAc,UAAS,OAAO,kBAAkB,MAAK,MAAM,OAAO;AAAA;AAC5E,eAAO,UAAU,YAAY,GAAG;AAAA;AAKpC,aAAO,UAAU,cAAc,UAAS,OAAO,eAAc,MAAsB;AACjF,YAAI,IAAI,WAAU;AAClB,YAAI,YAAY,EAAE;AAClB,YAAI,WAAW,YAAW,WAAW;AACrC,YAAI,gBAAgB,iBAA8B;AAChD,cAAI,OAAO,QAAO,UAAU,YAAW;AACvC,iBAAO,gBAAgB,gBAAgB,WAAU,GAAG,KAAK,QAAQ,QAAQ,EAAE,MAAM,MAAM;AAAA;AAEzF,YAAI,UAAS;AAAY,wBAAc,YAAY;AACnD,eAAO;AAAA;AAAA;AAAA;;;AChCT;AAAA;AAAA,UAAI,eAAc;AAClB,UAAI,gBAAc;AAClB,UAAI,cAAa;AACjB,UAAI,mBAAkB;AACtB,UAAI,yBAAwB,wCAAsD;AAElF,UAAI,wBAAuB,cAAY;AACvC,UAAI,QAAO,cAAY,GAAG;AAG1B,UAAI,eAAe,SAAU,YAAY;AACvC,eAAO,SAAU,IAAI;AACnB,cAAI,IAAI,iBAAgB;AACxB,cAAI,QAAO,YAAW;AACtB,cAAI,SAAS,MAAK;AAClB,cAAI,IAAI;AACR,cAAI,SAAS;AACb,cAAI;AACJ,iBAAO,SAAS,GAAG;AACjB,kBAAM,MAAK;AACX,gBAAI,CAAC,gBAAe,sBAAqB,GAAG,MAAM;AAChD,oBAAK,QAAQ,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AAAA;AAAA;AAGhD,iBAAO;AAAA;AAAA;AAIX,aAAO,UAAU;AAAA,QAGf,SAAS,aAAa;AAAA,QAGtB,QAAQ,aAAa;AAAA;AAAA;AAAA;;;AClCvB;AAAA;AAAA;AAEA,UAAI,SAAQ;AACZ,UAAI,mBAAkB;AACtB,UAAI,uBAAsB;AAC1B,UAAI,qBAAoB;AACxB,UAAI,uBAAsB;AAE1B,UAAI,OAAM,KAAK;AACf,UAAI,eAAe,GAAG;AACtB,UAAI,iBAAgB,CAAC,CAAC,gBAAgB,IAAI,CAAC,GAAG,YAAY,GAAG,MAAM;AACnE,UAAI,iBAAgB,qBAAoB;AACxC,UAAI,UAAS,kBAAiB,CAAC;AAI/B,aAAO,UAAU,UAAS,sBAAqB,eAA0C;AAEvF,YAAI;AAAe,iBAAO,OAAM,cAAc,MAAM,cAAc;AAClE,YAAI,IAAI,iBAAgB;AACxB,YAAI,SAAS,mBAAkB;AAC/B,YAAI,SAAQ,SAAS;AACrB,YAAI,UAAU,SAAS;AAAG,mBAAQ,KAAI,QAAO,qBAAoB,UAAU;AAC3E,YAAI,SAAQ;AAAG,mBAAQ,SAAS;AAChC,eAAM,UAAS,GAAG;AAAS,cAAI,UAAS,KAAK,EAAE,YAAW;AAAe,mBAAO,UAAS;AACzF,eAAO;AAAA,UACL;AAAA;AAAA;;;AC1BJ;AAAA;AAAA,UAAI,WAAS;AACb,UAAI,aAAY;AAChB,UAAI,YAAW;AACf,UAAI,iBAAgB;AACpB,UAAI,qBAAoB;AAExB,UAAI,aAAY,SAAO;AAGvB,UAAI,eAAe,SAAU,UAAU;AACrC,eAAO,SAAU,MAAM,YAAY,iBAAiB,MAAM;AACxD,qBAAU;AACV,cAAI,IAAI,UAAS;AACjB,cAAI,QAAO,eAAc;AACzB,cAAI,SAAS,mBAAkB;AAC/B,cAAI,SAAQ,WAAW,SAAS,IAAI;AACpC,cAAI,IAAI,WAAW,KAAK;AACxB,cAAI,kBAAkB;AAAG,mBAAO,MAAM;AACpC,kBAAI,UAAS,OAAM;AACjB,uBAAO,MAAK;AACZ,0BAAS;AACT;AAAA;AAEF,wBAAS;AACT,kBAAI,WAAW,SAAQ,IAAI,UAAU,QAAO;AAC1C,sBAAM,WAAU;AAAA;AAAA;AAGpB,iBAAM,WAAW,UAAS,IAAI,SAAS,QAAO,UAAS;AAAG,gBAAI,UAAS,OAAM;AAC3E,qBAAO,WAAW,MAAM,MAAK,SAAQ,QAAO;AAAA;AAE9C,iBAAO;AAAA;AAAA;AAIX,aAAO,UAAU;AAAA,QAGf,MAAM,aAAa;AAAA,QAGnB,OAAO,aAAa;AAAA;AAAA;AAAA;;;ACzCtB;AAAA;AAAA,UAAI,UAAS;AAEb,aAAO,UAAU,SAAU,YAAY;AACrC,eAAO,eAAe,UAAc,SAAO,YAAY,YAAY,QAAO,YAAY;AAAA;AAAA;AAAA;;;ACHxF;AAAA;AAAA;AACA,UAAI,eAAc;AAClB,UAAI,gBAAc;AAClB,UAAI,QAAO;AACX,UAAI,UAAQ;AACZ,UAAI,cAAa;AACjB,UAAI,+BAA8B;AAClC,UAAI,8BAA6B;AACjC,UAAI,YAAW;AACf,UAAI,iBAAgB;AAGpB,UAAI,UAAU,OAAO;AAErB,UAAI,kBAAiB,OAAO;AAC5B,UAAI,UAAS,cAAY,GAAG;AAI5B,aAAO,UAAU,CAAC,WAAW,QAAM,WAAY;AAE7C,YAAI,gBAAe,QAAQ,EAAE,GAAG,KAAK,QAAQ,gBAAe,IAAI,KAAK;AAAA,UACnE,YAAY;AAAA,UACZ,KAAK,WAAY;AACf,4BAAe,MAAM,KAAK;AAAA,cACxB,OAAO;AAAA,cACP,YAAY;AAAA;AAAA;AAAA,YAGd,EAAE,GAAG,MAAM,MAAM;AAAG,iBAAO;AAE/B,YAAI,IAAI;AACR,YAAI,IAAI;AAER,YAAI,SAAS;AACb,YAAI,WAAW;AACf,UAAE,UAAU;AACZ,iBAAS,MAAM,IAAI,QAAQ,SAAU,KAAK;AAAE,YAAE,OAAO;AAAA;AACrD,eAAO,QAAQ,IAAI,GAAG,WAAW,KAAK,YAAW,QAAQ,IAAI,IAAI,KAAK,OAAO;AAAA,WAC1E,iBAAgB,QAAQ,QAAQ;AACnC,YAAI,IAAI,UAAS;AACjB,YAAI,kBAAkB,UAAU;AAChC,YAAI,SAAQ;AACZ,YAAI,yBAAwB,6BAA4B;AACxD,YAAI,wBAAuB,4BAA2B;AACtD,eAAO,kBAAkB,QAAO;AAC9B,cAAI,IAAI,eAAc,UAAU;AAChC,cAAI,QAAO,yBAAwB,QAAO,YAAW,IAAI,uBAAsB,MAAM,YAAW;AAChG,cAAI,SAAS,MAAK;AAClB,cAAI,IAAI;AACR,cAAI;AACJ,iBAAO,SAAS,GAAG;AACjB,kBAAM,MAAK;AACX,gBAAI,CAAC,gBAAe,MAAK,uBAAsB,GAAG;AAAM,gBAAE,OAAO,EAAE;AAAA;AAAA;AAErE,eAAO;AAAA,UACP;AAAA;AAAA;;;ACxDJ;AAAA;AAMA,MAAC,UAAU,MAAM,SACjB;AACI;AAEA,YAAI;AACJ,YAAI,OAAO,YAAY,UAAU;AAG7B,cAAI;AAAE,uBAAS;AAAA,mBAA4B,GAAP;AAAA;AACpC,iBAAO,UAAU,QAAQ;AAAA,mBAClB,OAAO,WAAW,cAAc,OAAO,KAAK;AAEnD,iBAAO,SAAU,KACjB;AAEI,gBAAI,MAAK;AACT,gBAAI;AAAE,yBAAS,IAAI;AAAA,qBAAc,GAAP;AAAA;AAC1B,mBAAO,QAAQ;AAAA;AAAA,eAEhB;AACH,eAAK,UAAU,QAAQ,KAAK;AAAA;AAAA,SAElC,SAAM,SAAU,UAClB;AACI;AAKA,YAAI,YAAY,OAAO,aAAW,YAElC,oBAAoB,CAAC,CAAC,OAAO,kBAE7B,YAAW,OAAO,UAElB,MAAM,OAAO,YAEb,YAAW,SAAS,IAAI,GAAG,UAAU,SACrC;AACI,cAAI,mBAAmB;AACnB,eAAG,iBAAiB,GAAG,UAAU,CAAC,CAAC;AAAA,iBAChC;AACH,eAAG,YAAY,OAAO,GAAG;AAAA;AAAA,WAIjC,eAAc,SAAS,IAAI,GAAG,UAAU,SACxC;AACI,cAAI,mBAAmB;AACnB,eAAG,oBAAoB,GAAG,UAAU,CAAC,CAAC;AAAA,iBACnC;AACH,eAAG,YAAY,OAAO,GAAG;AAAA;AAAA,WAIjC,QAAO,SAAS,KAChB;AACI,iBAAO,IAAI,OAAO,IAAI,SAAS,IAAI,QAAQ,cAAa;AAAA,WAG5D,YAAW,SAAS,IAAI,IACxB;AACI,iBAAQ,OAAM,GAAG,YAAY,KAAK,QAAQ,MAAM,KAAK,SAAS;AAAA,WAGlE,YAAW,SAAS,IAAI,IACxB;AACI,cAAI,CAAC,UAAS,IAAI,KAAK;AACnB,eAAG,YAAa,GAAG,cAAc,KAAM,KAAK,GAAG,YAAY,MAAM;AAAA;AAAA,WAIzE,eAAc,SAAS,IAAI,IAC3B;AACI,aAAG,YAAY,MAAM,OAAM,GAAG,YAAY,KAAK,QAAQ,MAAM,KAAK,KAAK;AAAA,WAG3E,WAAU,SAAS,KACnB;AACI,iBAAQ,QAAS,KAAK,OAAO,UAAU,SAAS,KAAK;AAAA,WAGzD,SAAS,SAAS,KAClB;AACI,iBAAQ,OAAQ,KAAK,OAAO,UAAU,SAAS,KAAK,SAAS,CAAC,MAAM,IAAI;AAAA,WAG5E,YAAY,SAAS,MACrB;AACI,cAAI,MAAM,KAAK;AACf,iBAAO,QAAQ,KAAK,QAAQ;AAAA,WAGhC,aAAa,SAAS,MACtB;AAEI,iBAAO,OAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,OAAO,QAAQ;AAAA,WAGhE,iBAAiB,SAAS,MAAM,OAChC;AACI,iBAAO,CAAC,IAAI,WAAW,QAAQ,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,WAGpF,kBAAkB,SAAS,MAC3B;AACI,cAAI,OAAO;AAAO,iBAAK,SAAS,GAAE,GAAE,GAAE;AAAA,WAG1C,eAAe,SAAS,GAAE,GAC1B;AAEI,iBAAO,EAAE,cAAc,EAAE;AAAA,WAG7B,UAAS,SAAS,IAAI,OAAM,WAC5B;AACI,cAAI,MAAM;AACV,eAAK,QAAQ,OAAM;AACf,sBAAU,GAAG,UAAU;AACvB,gBAAI,WAAW,OAAO,MAAK,UAAU,YAAY,MAAK,UAAU,QAAQ,MAAK,MAAM,aAAa,QAAW;AACvG,kBAAI,OAAO,MAAK,QAAQ;AACpB,oBAAI,WAAW;AACX,qBAAG,QAAQ,IAAI,KAAK,MAAK,MAAM;AAAA;AAAA,yBAG9B,SAAQ,MAAK,QAAQ;AAC1B,oBAAI,WAAW;AACX,qBAAG,QAAQ,MAAK,MAAM,MAAM;AAAA;AAAA,qBAE7B;AACH,mBAAG,QAAQ,QAAO,IAAI,MAAK,OAAO;AAAA;AAAA,uBAE/B,aAAa,CAAC,SAAS;AAC9B,iBAAG,QAAQ,MAAK;AAAA;AAAA;AAGxB,iBAAO;AAAA,WAGX,YAAY,SAAS,IAAI,WAAW,MACpC;AACI,cAAI;AAEJ,cAAI,UAAS,aAAa;AACtB,iBAAK,UAAS,YAAY;AAC1B,eAAG,UAAU,WAAW,MAAM;AAC9B,iBAAK,QAAO,IAAI;AAChB,eAAG,cAAc;AAAA,qBACV,UAAS,mBAAmB;AACnC,iBAAK,UAAS;AACd,iBAAK,QAAO,IAAI;AAChB,eAAG,UAAU,OAAO,WAAW;AAAA;AAAA,WAIvC,iBAAiB,SAAS,UAAU;AAChC,cAAI,SAAS,QAAQ,GAAG;AACpB,qBAAS,QAAQ,KAAK,KAAK,KAAK,IAAI,SAAS,SAAO;AACpD,qBAAS,SAAS;AAAA;AAEtB,cAAI,SAAS,QAAQ,IAAI;AACrB,qBAAS,QAAQ,KAAK,MAAM,KAAK,IAAI,SAAS,SAAO;AACrD,qBAAS,SAAS;AAAA;AAEtB,iBAAO;AAAA,WAMX,WAAW;AAAA,UAGP,OAAO;AAAA,UAGP,OAAO;AAAA,UAGP,WAAW;AAAA,UAIX,UAAU;AAAA,UAGV,YAAY;AAAA,UAGZ,QAAQ;AAAA,UAIR,UAAU;AAAA,UAGV,OAAO;AAAA,UAGP,aAAa;AAAA,UAGb,gBAAgB;AAAA,UAGhB,UAAU;AAAA,UAGV,cAAc;AAAA,UAGd,SAAS;AAAA,UAET,SAAS;AAAA,UAGT,WAAW;AAAA,UAGX,gBAAgB;AAAA,UAGhB,eAAe;AAAA,UAGf,SAAS;AAAA,UACT,SAAS;AAAA,UACT,UAAU;AAAA,UACV,UAAU;AAAA,UAEV,YAAY;AAAA,UACZ,UAAU;AAAA,UAEV,OAAO;AAAA,UAGP,YAAY;AAAA,UAGZ,oBAAoB;AAAA,UAGpB,iCAAiC;AAAA,UAGjC,4CAA4C;AAAA,UAG5C,gBAAgB;AAAA,UAIhB,cAAc;AAAA,UAGd,WAAW;AAAA,UAGX,mBAAoB;AAAA,UAGpB,MAAM;AAAA,YACF,eAAgB;AAAA,YAChB,WAAgB;AAAA,YAChB,QAAgB,CAAC,WAAU,YAAW,SAAQ,SAAQ,OAAM,QAAO,QAAO,UAAS,aAAY,WAAU,YAAW;AAAA,YACpH,UAAgB,CAAC,UAAS,UAAS,WAAU,aAAY,YAAW,UAAS;AAAA,YAC7E,eAAgB,CAAC,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM;AAAA;AAAA,UAIzD,OAAO;AAAA,UAGP,QAAQ;AAAA,UAGR,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,QAAQ;AAAA,UAGR,eAAe;AAAA,WAOnB,gBAAgB,SAAS,MAAM,KAAK,MACpC;AACI,iBAAO,KAAK;AACZ,iBAAO,OAAO,GAAG;AACb,mBAAO;AAAA;AAEX,iBAAO,OAAO,KAAK,KAAK,cAAc,OAAO,KAAK,KAAK,SAAS;AAAA,WAGpE,YAAY,SAAS,MACrB;AACI,cAAI,MAAM;AACV,cAAI,eAAe;AACnB,cAAI,KAAK,SAAS;AACd,gBAAI,KAAK,iCAAiC;AACtC,kBAAI,KAAK;AAET,kBAAG,CAAC,KAAK,4CAA4C;AACjD,oBAAI,KAAK;AAAA;AAAA,mBAGV;AACH,qBAAO;AAAA;AAAA;AAGf,cAAI,KAAK,YAAY;AACjB,gBAAI,KAAK;AAAA;AAEb,cAAI,KAAK,SAAS;AACd,gBAAI,KAAK;AAAA;AAEb,cAAI,KAAK,YAAY;AACjB,gBAAI,KAAK;AACT,2BAAe;AAAA;AAEnB,cAAI,KAAK,UAAU;AACf,gBAAI,KAAK;AAAA;AAEb,cAAI,KAAK,WAAW;AAChB,gBAAI,KAAK;AAAA;AAEb,cAAI,KAAK,cAAc;AACnB,gBAAI,KAAK;AAAA;AAEb,cAAI,KAAK,YAAY;AACjB,gBAAI,KAAK;AAAA;AAEb,iBAAO,mBAAmB,KAAK,MAAM,cAAc,IAAI,KAAK,OAAO,sBAAsB,eAAe,0EAEvE,KAAK,OAAO,wBAAwB,KAAK,QAAQ,sBAAsB,KAAK,MAAM,OACnG,KAAK,MACZ;AAAA,WAIb,aAAa,SAAU,GAAG,GAAG,GAAG;AAE5B,cAAI,SAAS,IAAI,KAAK,GAAG,GAAG,IACxB,UAAU,KAAK,KAAQ,MAAI,KAAK,GAAG,GAAG,KAAK,UAAU,QAAY,OAAO,WAAS,KAAG;AACxF,iBAAO,2BAA2B,UAAU;AAAA,WAGhD,YAAY,SAAS,MAAM,QAAO,eAAe,eACjD;AACI,iBAAO,wBAAyB,iBAAgB,qBAAqB,MAAO,iBAAgB,iBAAiB,MAAM,OAAQ,UAAQ,KAAK,YAAY,MAAM,KAAK,MAAM;AAAA,WAGzK,aAAa,SAAS,MACtB;AACI,iBAAO,YAAY,KAAK,KAAK,MAAM;AAAA,WAGvC,aAAa,SAAS,MACtB;AACI,cAAI,GAAG,MAAM;AACb,cAAI,KAAK,gBAAgB;AACrB,gBAAI,KAAK;AAAA;AAEb,eAAK,IAAI,GAAG,IAAI,GAAG,KAAK;AACpB,gBAAI,KAAK,kCAAkC,cAAc,MAAM,KAAK,OAAO,cAAc,MAAM,GAAG,QAAQ;AAAA;AAE9G,iBAAO,gBAAiB,MAAK,QAAQ,IAAI,YAAY,KAAK,KAAK,MAAM;AAAA,WAGzE,cAAc,SAAS,UAAU,GAAG,MAAM,OAAO,SAAS,QAC1D;AACI,cAAI,GAAG,GAAG,KACN,OAAO,SAAS,IAChB,YAAY,SAAS,KAAK,SAC1B,YAAY,SAAS,KAAK,SAC1B,OAAO,cAAc,SAAS,8DAC9B,WACA,UACA,OAAO,MACP,QAAO;AAEX,eAAK,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;AAC/B,gBAAI,KAAK,oBAAqB,UAAS,UAAU,IAAI,IAAI,KAAK,IAAI,KAAK,MAClE,OAAM,QAAQ,yBAAwB,MACrC,cAAa,IAAI,KAAK,YAAc,aAAa,IAAI,KAAK,WAAY,wBAAwB,MAAM,MACtG,KAAK,KAAK,OAAO,KAAK;AAAA;AAG9B,sBAAY,6BAA6B,KAAK,KAAK,OAAO,SAAS,iEAAiE,IAAI,KAAK,MAAM;AAEnJ,cAAI,SAAQ,KAAK,YAAY;AACzB,gBAAI,KAAK,UAAU;AACnB,gBAAI,KAAK,UAAU,KAAK;AAAA,iBACrB;AACH,gBAAI,OAAO,KAAK;AAChB,gBAAI,IAAI,OAAO,KAAK;AAAA;AAGxB,eAAK,MAAM,IAAI,IAAI,KAAK,KAAK,KAAK,SAAS,KAAK;AAC5C,gBAAI,KAAK,KAAK,SAAS;AACnB,kBAAI,KAAK,oBAAoB,IAAI,MAAO,OAAM,OAAO,yBAAwB,MAAM,MAAO,IAAK;AAAA;AAAA;AAGvG,qBAAW,6BAA6B,OAAO,KAAK,aAAa,gEAAgE,IAAI,KAAK,MAAM;AAEhJ,cAAI,KAAK,oBAAoB;AACzB,oBAAQ,WAAW;AAAA,iBAChB;AACH,oBAAQ,YAAY;AAAA;AAGxB,cAAI,aAAc,WAAU,KAAK,KAAK,YAAY,QAAQ;AACtD,mBAAO;AAAA;AAGX,cAAI,aAAc,WAAU,MAAM,KAAK,YAAY,QAAQ;AACvD,oBAAO;AAAA;AAGX,cAAI,MAAM,GAAG;AACT,oBAAQ,6BAA8B,QAAO,KAAK,kBAAkB,qBAAqB,KAAK,KAAK,gBAAgB;AAAA;AAEvH,cAAI,MAAO,SAAS,GAAG,iBAAiB,GAAK;AACzC,oBAAQ,6BAA8B,SAAO,KAAK,kBAAkB,qBAAqB,KAAK,KAAK,YAAY;AAAA;AAGnH,iBAAO,QAAQ;AAAA,WAGnB,cAAc,SAAS,MAAM,MAAM,QACnC;AACI,iBAAO,4FAA4F,SAAS,OAAO,WAAW,QAAQ,WAAW,QAAQ;AAAA,WAO7J,WAAU,SAAS,SACnB;AACI,cAAI,QAAO,MACP,OAAO,MAAK,OAAO;AAEvB,gBAAK,eAAe,SAAS,GAC7B;AACI,gBAAI,CAAC,MAAK,IAAI;AACV;AAAA;AAEJ,gBAAI,KAAK,OAAO;AAChB,gBAAI,SAAS,EAAE,UAAU,EAAE;AAC3B,gBAAI,CAAC,QAAQ;AACT;AAAA;AAGJ,gBAAI,CAAC,UAAS,QAAQ,gBAAgB;AAClC,kBAAI,UAAS,QAAQ,kBAAkB,CAAC,UAAS,QAAQ,eAAe,CAAC,UAAS,OAAO,YAAY,gBAAgB;AACjH,sBAAK,QAAQ,IAAI,KAAK,OAAO,aAAa,mBAAmB,OAAO,aAAa,oBAAoB,OAAO,aAAa;AACzH,oBAAI,KAAK,OAAO;AACZ,sBAAI,WAAW;AACX,0BAAK;AACL,wBAAI,KAAK,qBAAqB,KAAK,OAAO;AACtC,2BAAK,MAAM;AAAA;AAAA,qBAEhB;AAAA;AAAA,yBAGF,UAAS,QAAQ,cAAc;AACpC,sBAAK;AAAA,yBAEA,UAAS,QAAQ,cAAc;AACpC,sBAAK;AAAA;AAAA;AAGb,gBAAI,CAAC,UAAS,QAAQ,gBAAgB;AAElC,kBAAI,EAAE,gBAAgB;AAClB,kBAAE;AAAA,qBACC;AACH,kBAAE,cAAc;AAChB,uBAAO;AAAA;AAAA,mBAER;AACH,oBAAK,KAAK;AAAA;AAAA;AAIlB,gBAAK,YAAY,SAAS,GAC1B;AACI,gBAAI,KAAK,OAAO;AAChB,gBAAI,SAAS,EAAE,UAAU,EAAE;AAC3B,gBAAI,CAAC,QAAQ;AACT;AAAA;AAEJ,gBAAI,UAAS,QAAQ,sBAAsB;AACvC,oBAAK,UAAU,OAAO;AAAA,uBAEjB,UAAS,QAAQ,qBAAqB;AAC3C,oBAAK,SAAS,OAAO;AAAA;AAAA;AAI7B,gBAAK,eAAe,SAAS,GAC7B;AACI,gBAAI,KAAK,OAAO;AAEhB,gBAAI,MAAK,aAAa;AAElB,sBAAO,EAAE;AAAA,qBACA;AAAA,qBACA;AACD,sBAAI,KAAK,OAAO;AACZ,yBAAK,MAAM;AAAA;AAEf;AAAA,qBACC;AACD,oBAAE;AACF,wBAAK,WAAW,YAAY;AAC5B;AAAA,qBACC;AACD,wBAAK,WAAW,YAAY;AAC5B;AAAA,qBACC;AACD,wBAAK,WAAW,OAAO;AACvB;AAAA,qBACC;AACD,wBAAK,WAAW,OAAO;AACvB;AAAA;AAAA;AAAA;AAKhB,gBAAK,iBAAiB,SAAS,GAC/B;AACI,gBAAI;AAEJ,gBAAI,EAAE,YAAY,OAAM;AACpB;AAAA;AAEJ,gBAAI,KAAK,OAAO;AACZ,qBAAO,KAAK,MAAM,KAAK,MAAM,OAAO,KAAK;AAAA,uBAClC,WAAW;AAClB,qBAAO,SAAO,KAAK,MAAM,OAAO,KAAK,QAAQ,KAAK;AAClD,qBAAQ,QAAQ,KAAK,YAAa,KAAK,WAAW;AAAA,mBAEjD;AACD,qBAAO,IAAI,KAAK,KAAK,MAAM,KAAK,MAAM;AAAA;AAE1C,gBAAI,OAAO,OAAO;AAChB,oBAAK,QAAQ;AAAA;AAEf,gBAAI,CAAC,MAAK,IAAI;AACV,oBAAK;AAAA;AAAA;AAIb,gBAAK,gBAAgB,WACrB;AACI,kBAAK;AAAA;AAGT,gBAAK,gBAAgB,WACrB;AACI,kBAAK;AAAA;AAGT,gBAAK,eAAe,WACpB;AAEI,gBAAI,MAAM,UAAS;AACnB,eAAG;AACC,kBAAI,UAAS,KAAK,gBAAgB;AAC9B;AAAA;AAAA,qBAGA,MAAM,IAAI;AAElB,gBAAI,CAAC,MAAK,IAAI;AACV,oBAAK,KAAK,IAAI,WAAW;AACrB,sBAAK;AAAA,iBACN;AAAA;AAEP,kBAAK,KAAK;AAAA;AAGd,gBAAK,WAAW,SAAS,GACzB;AACI,gBAAI,KAAK,OAAO;AAChB,gBAAI,SAAS,EAAE,UAAU,EAAE,YACvB,MAAM;AACV,gBAAI,CAAC,QAAQ;AACT;AAAA;AAEJ,gBAAI,CAAC,qBAAqB,UAAS,QAAQ,gBAAgB;AACvD,kBAAI,CAAC,OAAO,UAAU;AAClB,uBAAO,aAAa,YAAY;AAChC,0BAAS,QAAQ,UAAU,MAAK;AAAA;AAAA;AAGxC,eAAG;AACC,kBAAI,UAAS,KAAK,kBAAkB,QAAQ,KAAK,SAAS;AACtD;AAAA;AAAA,qBAGA,MAAM,IAAI;AAClB,gBAAI,MAAK,MAAM,WAAW,KAAK,WAAW,QAAQ,KAAK,SAAS;AAC5D,oBAAK;AAAA;AAAA;AAIb,gBAAK,KAAK,UAAS,cAAc;AACjC,gBAAK,GAAG,YAAY,gBAAiB,MAAK,QAAQ,YAAY,MAAO,MAAK,QAAQ,MAAM,KAAK,QAAQ;AAErG,oBAAS,MAAK,IAAI,aAAa,MAAK,cAAc;AAClD,oBAAS,MAAK,IAAI,YAAY,MAAK,cAAc;AACjD,oBAAS,MAAK,IAAI,UAAU,MAAK;AAEjC,cAAI,KAAK,eAAe;AACpB,sBAAS,WAAU,WAAW,MAAK;AAAA;AAGvC,cAAI,KAAK,OAAO;AACZ,gBAAI,KAAK,WAAW;AAChB,mBAAK,UAAU,YAAY,MAAK;AAAA,uBACzB,KAAK,OAAO;AACnB,wBAAS,KAAK,YAAY,MAAK;AAAA,mBAC5B;AACH,mBAAK,MAAM,WAAW,aAAa,MAAK,IAAI,KAAK,MAAM;AAAA;AAE3D,sBAAS,KAAK,OAAO,UAAU,MAAK;AAEpC,gBAAI,CAAC,KAAK,aAAa;AACnB,kBAAI,aAAa,KAAK,MAAM,OAAO;AAC/B,qBAAK,cAAc,SAAO,KAAK,MAAM,OAAO,KAAK,QAAQ;AAAA,qBACtD;AACH,qBAAK,cAAc,IAAI,KAAK,KAAK,MAAM,KAAK,MAAM;AAAA;AAEtD,mBAAK,iBAAiB;AAAA;AAAA;AAI9B,cAAI,UAAU,KAAK;AAEnB,cAAI,OAAO,UAAU;AACjB,gBAAI,KAAK,gBAAgB;AACrB,oBAAK,QAAQ,SAAS;AAAA,mBACnB;AACH,oBAAK,SAAS;AAAA;AAAA,iBAEf;AACH,kBAAK,SAAS,IAAI;AAAA;AAGtB,cAAI,KAAK,OAAO;AACZ,iBAAK;AACL,kBAAK,GAAG,aAAa;AACrB,sBAAS,KAAK,SAAS,SAAS,MAAK;AACrC,sBAAS,KAAK,SAAS,SAAS,MAAK;AACrC,sBAAS,KAAK,SAAS,QAAQ,MAAK;AAAA,iBACjC;AACH,iBAAK;AAAA;AAAA;AAQb,iBAAQ,YAAY;AAAA,UAMhB,QAAQ,SAAS,SACjB;AACI,gBAAI,CAAC,KAAK,IAAI;AACV,mBAAK,KAAK,QAAO,IAAI,UAAU;AAAA;AAGnC,gBAAI,OAAO,QAAO,KAAK,IAAI,SAAS;AAEpC,iBAAK,QAAQ,CAAC,CAAC,KAAK;AAEpB,iBAAK,QAAS,KAAK,SAAS,KAAK,MAAM,WAAY,KAAK,QAAQ;AAEhE,iBAAK,QAAS,OAAO,KAAK,UAAW,YAAY,KAAK,QAAQ,KAAK,QAAQ;AAE3E,iBAAK,QAAQ,CAAC,CAAE,MAAK,UAAU,SAAY,KAAK,SAAS,KAAK,QAAQ,KAAK;AAE3E,iBAAK,UAAW,KAAK,WAAW,KAAK,QAAQ,WAAY,KAAK,UAAU,KAAK;AAE7E,iBAAK,kBAAkB,CAAC,CAAC,KAAK;AAE9B,iBAAK,eAAgB,OAAO,KAAK,iBAAkB,aAAa,KAAK,eAAe;AAEpF,gBAAI,MAAM,SAAS,KAAK,gBAAgB,OAAO;AAC/C,iBAAK,iBAAiB,MAAM,IAAI,IAAI;AAEpC,gBAAI,CAAC,OAAO,KAAK,UAAU;AACvB,mBAAK,UAAU;AAAA;AAEnB,gBAAI,CAAC,OAAO,KAAK,UAAU;AACvB,mBAAK,UAAU;AAAA;AAEnB,gBAAK,KAAK,WAAW,KAAK,WAAY,KAAK,UAAU,KAAK,SAAS;AAC/D,mBAAK,UAAU,KAAK,UAAU;AAAA;AAElC,gBAAI,KAAK,SAAS;AACd,mBAAK,WAAW,KAAK;AAAA;AAEzB,gBAAI,KAAK,SAAS;AACd,mBAAK,WAAW,KAAK;AAAA;AAGzB,gBAAI,SAAQ,KAAK,YAAY;AACzB,kBAAI,WAAW,IAAI,OAAO,gBAAgB;AAC1C,mBAAK,UAAU,KAAK,SAAS,KAAK,UAAU,IAAI,OAAO;AACvD,mBAAK,UAAU,KAAK,SAAS,KAAK,UAAU,IAAI,OAAO;AAAA,mBACpD;AACH,mBAAK,YAAY,KAAK,IAAI,SAAS,KAAK,WAAW,QAAQ,SAAS;AACpE,kBAAI,KAAK,YAAY,KAAK;AACtB,qBAAK,YAAY;AAAA;AAAA;AAIzB,mBAAO;AAAA;AAAA,UAMX,UAAU,SAAS,SACnB;AACI,sBAAS,WAAU,KAAK,GAAG;AAC3B,gBAAI,CAAC,OAAO,KAAK,KAAK;AAClB,qBAAO;AAAA;AAEX,gBAAI,KAAK,GAAG,UAAU;AACpB,qBAAO,KAAK,GAAG,SAAS,KAAK,IAAI;AAAA;AAEnC,gBAAI,WAAW;AACb,qBAAO,SAAO,KAAK,IAAI,OAAO;AAAA;AAEhC,mBAAO,KAAK,GAAG;AAAA;AAAA,UAMnB,WAAW,WACX;AACI,mBAAO,YAAY,SAAO,KAAK,MAAM;AAAA;AAAA,UAMzC,WAAW,SAAS,MAAM,iBAC1B;AACI,gBAAI,aAAa,SAAO,SAAS,OAAO;AACpC,mBAAK,QAAQ,KAAK,UAAU;AAAA;AAAA;AAAA,UAOpC,SAAS,WACT;AACI,mBAAO,OAAO,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,aAAa;AAAA;AAAA,UAM3D,SAAS,SAAS,MAAM,iBACxB;AACI,gBAAI,CAAC,MAAM;AACP,mBAAK,KAAK;AAEV,kBAAI,KAAK,GAAG,OAAO;AACf,qBAAK,GAAG,MAAM,QAAQ;AACtB,0BAAU,KAAK,GAAG,OAAO,UAAU,EAAE,SAAS;AAAA;AAGlD,qBAAO,KAAK;AAAA;AAEhB,gBAAI,OAAO,SAAS,UAAU;AAC1B,qBAAO,IAAI,KAAK,KAAK,MAAM;AAAA;AAE/B,gBAAI,CAAC,OAAO,OAAO;AACf;AAAA;AAGJ,gBAAI,OAAM,KAAK,GAAG,SACd,OAAM,KAAK,GAAG;AAElB,gBAAI,OAAO,SAAQ,OAAO,MAAK;AAC3B,qBAAO;AAAA,uBACA,OAAO,SAAQ,OAAO,MAAK;AAClC,qBAAO;AAAA;AAGX,iBAAK,KAAK,IAAI,KAAK,KAAK;AACxB,4BAAgB,KAAK;AACrB,iBAAK,SAAS,KAAK;AAEnB,gBAAI,KAAK,GAAG,OAAO;AACf,mBAAK,GAAG,MAAM,QAAQ,KAAK;AAC3B,wBAAU,KAAK,GAAG,OAAO,UAAU,EAAE,SAAS;AAAA;AAElD,gBAAI,CAAC,mBAAmB,OAAO,KAAK,GAAG,aAAa,YAAY;AAC5D,mBAAK,GAAG,SAAS,KAAK,MAAM,KAAK;AAAA;AAAA;AAAA,UAOzC,UAAU,SAAS,MACnB;AACI,gBAAI,cAAc;AAElB,gBAAI,CAAC,OAAO,OAAO;AACf;AAAA;AAGJ,gBAAI,KAAK,WAAW;AAChB,kBAAI,mBAAmB,IAAI,KAAK,KAAK,UAAU,GAAG,MAAM,KAAK,UAAU,GAAG,OAAO,IAC7E,kBAAkB,IAAI,KAAK,KAAK,UAAU,KAAK,UAAU,SAAO,GAAG,MAAM,KAAK,UAAU,KAAK,UAAU,SAAO,GAAG,OAAO,IACxH,cAAc,KAAK;AAEvB,8BAAgB,SAAS,gBAAgB,aAAW;AACpD,8BAAgB,QAAQ,gBAAgB,YAAU;AAClD,4BAAe,cAAc,iBAAiB,aAAa,gBAAgB,YAAY;AAAA;AAG3F,gBAAI,aAAa;AACb,mBAAK,YAAY,CAAC;AAAA,gBACd,OAAO,KAAK;AAAA,gBACZ,MAAM,KAAK;AAAA;AAEf,kBAAI,KAAK,GAAG,iBAAiB,SAAS;AAClC,qBAAK,UAAU,GAAG,SAAS,IAAI,KAAK,GAAG;AAAA;AAAA;AAI/C,iBAAK;AAAA;AAAA,UAGT,YAAY,SAAS,MAAM,MAAM;AAE7B,gBAAI,MAAM,KAAK,aAAa,IAAI;AAChC,gBAAI,aAAa,SAAS,QAAM,KAAG,KAAG,KAAG;AAEzC,gBAAI;AAEJ,gBAAI,SAAS,OAAO;AAChB,uBAAS,IAAI,KAAK,IAAI,YAAY;AAAA,uBAC3B,SAAS,YAAY;AAC5B,uBAAS,IAAI,KAAK,IAAI,YAAY;AAAA;AAGtC,iBAAK,QAAQ;AAAA;AAAA,UAGjB,iBAAiB,WAAW;AACxB,iBAAK,UAAU,KAAK,eAAe,KAAK,UAAU;AAClD,qBAAS,IAAI,GAAG,IAAI,KAAK,GAAG,gBAAgB,KAAK;AAC7C,mBAAK,UAAU,KAAK,eAAe;AAAA,gBAC/B,OAAO,KAAK,UAAU,GAAG,QAAQ;AAAA,gBACjC,MAAM,KAAK,UAAU,GAAG;AAAA;AAAA;AAGhC,iBAAK;AAAA;AAAA,UAGT,WAAW,WACX;AACI,iBAAK,SAAS,IAAI;AAAA;AAAA,UAMtB,WAAW,SAAS,OACpB;AACI,gBAAI,CAAC,MAAM,QAAQ;AACf,mBAAK,UAAU,GAAG,QAAQ,SAAS,OAAO;AAC1C,mBAAK;AAAA;AAAA;AAAA,UAIb,WAAW,WACX;AACI,iBAAK,UAAU,GAAG;AAClB,iBAAK;AAAA;AAAA,UAGT,WAAW,WACX;AACI,iBAAK,UAAU,GAAG;AAClB,iBAAK;AAAA;AAAA,UAMT,UAAU,SAAS,MACnB;AACI,gBAAI,CAAC,MAAM,OAAO;AACd,mBAAK,UAAU,GAAG,OAAO,SAAS,MAAM;AACxC,mBAAK;AAAA;AAAA;AAAA,UAOb,YAAY,SAAS,OACrB;AACI,gBAAG,iBAAiB,MAAM;AACtB,8BAAgB;AAChB,mBAAK,GAAG,UAAU;AAClB,mBAAK,GAAG,UAAW,MAAM;AACzB,mBAAK,GAAG,WAAW,MAAM;AAAA,mBACtB;AACH,mBAAK,GAAG,UAAU,SAAS;AAC3B,mBAAK,GAAG,UAAW,SAAS;AAC5B,mBAAK,GAAG,WAAW,SAAS;AAC5B,mBAAK,GAAG,aAAa,SAAS;AAAA;AAGlC,iBAAK;AAAA;AAAA,UAMT,YAAY,SAAS,OACrB;AACI,gBAAG,iBAAiB,MAAM;AACtB,8BAAgB;AAChB,mBAAK,GAAG,UAAU;AAClB,mBAAK,GAAG,UAAU,MAAM;AACxB,mBAAK,GAAG,WAAW,MAAM;AAAA,mBACtB;AACH,mBAAK,GAAG,UAAU,SAAS;AAC3B,mBAAK,GAAG,UAAU,SAAS;AAC3B,mBAAK,GAAG,WAAW,SAAS;AAC5B,mBAAK,GAAG,WAAW,SAAS;AAAA;AAGhC,iBAAK;AAAA;AAAA,UAGT,eAAe,SAAS,OACxB;AACI,iBAAK,GAAG,aAAa;AAAA;AAAA,UAGzB,aAAa,SAAS,OACtB;AACI,iBAAK,GAAG,WAAW;AAAA;AAAA,UAMvB,MAAM,SAAS,OACf;AACI,gBAAI,CAAC,KAAK,MAAM,CAAC,OAAO;AACpB;AAAA;AAEJ,gBAAI,OAAO,KAAK,IACZ,UAAU,KAAK,SACf,UAAU,KAAK,SACf,WAAW,KAAK,UAChB,WAAW,KAAK,UAChB,OAAO,IACP;AAEJ,gBAAI,KAAK,MAAM,SAAS;AACpB,mBAAK,KAAK;AACV,kBAAI,CAAC,MAAM,aAAa,KAAK,KAAK,UAAU;AACxC,qBAAK,KAAK;AAAA;AAAA;AAGlB,gBAAI,KAAK,MAAM,SAAS;AACpB,mBAAK,KAAK;AACV,kBAAI,CAAC,MAAM,aAAa,KAAK,KAAK,UAAU;AACxC,qBAAK,KAAK;AAAA;AAAA;AAIlB,qBAAS,gBAAgB,KAAK,SAAS,SAAS,IAAI,QAAQ,YAAY,IAAI,OAAO,GAAG;AAEtF,qBAAS,IAAI,GAAG,IAAI,KAAK,gBAAgB,KAAK;AAC1C,sBAAQ,8BAA8B,YAAY,MAAM,GAAG,KAAK,UAAU,GAAG,MAAM,KAAK,UAAU,GAAG,OAAO,KAAK,UAAU,GAAG,MAAM,UAAU,KAAK,OAAO,KAAK,UAAU,GAAG,MAAM,KAAK,UAAU,GAAG,OAAO,UAAU;AAAA;AAGzN,iBAAK,GAAG,YAAY;AAEpB,gBAAI,KAAK,OAAO;AACZ,kBAAG,KAAK,MAAM,SAAS,UAAU;AAC7B,oBAAI,WAAW;AACX,uBAAK,QAAQ;AAAA,mBACd;AAAA;AAAA;AAIX,gBAAI,OAAO,KAAK,GAAG,WAAW,YAAY;AACtC,mBAAK,GAAG,OAAO;AAAA;AAGnB,gBAAI,KAAK,OAAO;AAEZ,mBAAK,MAAM,aAAa,cAAc,KAAK;AAAA;AAAA;AAAA,UAInD,gBAAgB,WAChB;AACI,gBAAI,OAAO,KAAK,OAAO,QAAQ,eAAe,gBAAgB,WAAW,OAAM,MAAK,YAAY,aAAa;AAE7G,gBAAI,KAAK,GAAG;AAAW;AAEvB,iBAAK,GAAG,MAAM,WAAW;AAEzB,oBAAQ,KAAK,GAAG;AAChB,kBAAM;AACN,oBAAQ,KAAK,GAAG;AAChB,qBAAS,KAAK,GAAG;AACjB,4BAAgB,OAAO,cAAc,UAAS,gBAAgB;AAC9D,6BAAiB,OAAO,eAAe,UAAS,gBAAgB;AAChE,wBAAY,OAAO,eAAe,UAAS,KAAK,aAAa,UAAS,gBAAgB;AACtF,0BAAc;AACd,4BAAgB;AAEhB,gBAAI,OAAO,MAAM,0BAA0B,YAAY;AACnD,2BAAa,MAAM;AACnB,sBAAO,WAAW,OAAO,OAAO;AAChC,qBAAM,WAAW,SAAS,OAAO;AAAA,mBAC9B;AACH,sBAAO,IAAI;AACX,qBAAO,IAAI,YAAY,IAAI;AAC3B,qBAAO,MAAM,IAAI,cAAe;AAC5B,yBAAQ,IAAI;AACZ,wBAAQ,IAAI;AAAA;AAAA;AAKpB,gBAAK,KAAK,GAAG,cAAc,QAAO,QAAQ,iBAElC,KAAK,GAAG,SAAS,QAAQ,WAAW,MACpC,QAAO,QAAQ,MAAM,cAAc,GAEzC;AACE,sBAAO,QAAO,QAAQ,MAAM;AAC5B,4BAAc;AAAA;AAElB,gBAAK,KAAK,GAAG,cAAc,OAAM,SAAS,iBAAiB,aAEnD,KAAK,GAAG,SAAS,QAAQ,SAAS,MAClC,OAAM,SAAS,MAAM,eAAe,GAE1C;AACE,qBAAM,OAAM,SAAS,MAAM;AAC3B,8BAAgB;AAAA;AAGpB,iBAAK,GAAG,MAAM,OAAO,QAAO;AAC5B,iBAAK,GAAG,MAAM,MAAM,OAAM;AAE1B,sBAAS,KAAK,IAAI,cAAc,iBAAiB;AACjD,sBAAS,KAAK,IAAI,gBAAgB,mBAAmB;AACrD,yBAAY,KAAK,IAAI,CAAC,cAAc,iBAAiB;AACrD,yBAAY,KAAK,IAAI,CAAC,gBAAgB,mBAAmB;AAAA;AAAA,UAM7D,QAAQ,SAAS,MAAM,OAAO,QAC9B;AACI,gBAAI,OAAS,KAAK,IACd,OAAS,IAAI,QACb,OAAS,eAAe,MAAM,QAC9B,SAAS,IAAI,KAAK,MAAM,OAAO,GAAG,UAClC,OAAS,IACT,MAAS;AACb,4BAAgB;AAChB,gBAAI,KAAK,WAAW,GAAG;AACnB,wBAAU,KAAK;AACf,kBAAI,SAAS,GAAG;AACZ,0BAAU;AAAA;AAAA;AAGlB,gBAAI,gBAAgB,UAAU,IAAI,KAAK,QAAQ,GAC3C,YAAY,UAAU,KAAK,IAAI,QAAQ,GACvC,sBAAsB,UAAU,IAAI,OAAO,IAAI,MAC/C,kBAAkB,UAAU,KAAK,OAAO,IAAI,MAC5C,sBAAsB,eAAe,qBAAqB;AAC9D,gBAAI,QAAQ,OAAO,QACf,QAAQ;AACZ,mBAAM,QAAQ,GAAG;AACb,uBAAS;AAAA;AAEb,qBAAS,IAAI;AACb,gBAAI,iBAAiB;AACrB,qBAAS,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,KAClC;AACI,kBAAI,MAAM,IAAI,KAAK,MAAM,OAAO,IAAK,KAAI,UACrC,aAAa,OAAO,KAAK,MAAM,aAAa,KAAK,KAAK,MAAM,OAC5D,UAAU,aAAa,KAAK,OAC5B,WAAW,KAAK,OAAO,QAAQ,IAAI,oBAAoB,KAAK,OAAO,OACnE,WAAU,IAAI,UAAU,KAAM,OAAO,QACrC,YAAY,IAAK,KAAI,SACrB,cAAc,OACd,aAAa,MACb,eAAe,KAAK,cAAc,aAAa,KAAK,YAAY,MAChE,aAAa,KAAK,YAAY,aAAa,KAAK,UAAU,MAC1D,YAAY,KAAK,cAAc,KAAK,YAAY,KAAK,aAAa,OAAO,MAAM,KAAK,UACpF,cAAc,KAAK,WAAW,MAAM,KAAK,WAC3B,KAAK,WAAW,MAAM,KAAK,WAC3B,KAAK,mBAAmB,UAAU,QAClC,KAAK,gBAAgB,KAAK,aAAa;AAEzD,kBAAI,UAAS;AACT,oBAAI,IAAI,QAAQ;AACZ,8BAAY,sBAAsB;AAClC,gCAAc;AACd,+BAAa;AAAA,uBACV;AACH,8BAAY,YAAY;AACxB,gCAAc;AACd,+BAAa;AAAA;AAAA;AAIrB,kBAAI,YAAY;AAAA,gBACR,KAAK;AAAA,gBACL,OAAO;AAAA,gBACP,MAAM;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,YAAY;AAAA,gBACZ,SAAS;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,iCAAiC,KAAK;AAAA,gBACtC,4CAA4C,KAAK;AAAA;AAGzD,kBAAI,KAAK,iBAAiB,YAAY;AAClC,iCAAiB;AAAA;AAGrB,kBAAI,KAAK,UAAU;AAEnB,kBAAI,EAAE,MAAM,GAAG;AACX,oBAAI,KAAK,gBAAgB;AACrB,sBAAI,QAAQ,WAAW,IAAI,QAAQ,OAAO;AAAA;AAE9C,qBAAK,KAAK,UAAU,KAAK,KAAK,OAAO,KAAK,eAAe;AACzD,sBAAM;AACN,oBAAI;AACJ,iCAAiB;AAAA;AAAA;AAGzB,mBAAO,YAAY,MAAM,MAAM;AAAA;AAAA,UAGnC,WAAW,WACX;AACI,mBAAO,KAAK;AAAA;AAAA,UAGhB,MAAM,WACN;AACI,gBAAI,CAAC,KAAK,aAAa;AACnB,mBAAK,KAAK;AACV,mBAAK;AACL,2BAAY,KAAK,IAAI;AACrB,kBAAI,KAAK,GAAG,OAAO;AACf,0BAAS,WAAU,SAAS,KAAK;AACjC,qBAAK;AAAA;AAET,kBAAI,OAAO,KAAK,GAAG,WAAW,YAAY;AACtC,qBAAK,GAAG,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA,UAKhC,MAAM,WACN;AACI,gBAAI,IAAI,KAAK;AACb,gBAAI,MAAM,OAAO;AACb,kBAAI,KAAK,GAAG,OAAO;AACf,6BAAY,WAAU,SAAS,KAAK;AAAA;AAExC,mBAAK,GAAG,MAAM,WAAW;AACzB,mBAAK,GAAG,MAAM,OAAO;AACrB,mBAAK,GAAG,MAAM,MAAM;AACpB,wBAAS,KAAK,IAAI;AAClB,mBAAK,KAAK;AACV,kBAAI,MAAM,UAAa,OAAO,KAAK,GAAG,YAAY,YAAY;AAC1D,qBAAK,GAAG,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA,UAQjC,SAAS,WACT;AACI,gBAAI,OAAO,KAAK;AAEhB,iBAAK;AACL,yBAAY,KAAK,IAAI,aAAa,KAAK,cAAc;AACrD,yBAAY,KAAK,IAAI,YAAY,KAAK,cAAc;AACpD,yBAAY,KAAK,IAAI,UAAU,KAAK;AACpC,gBAAI,KAAK,eAAe;AACpB,2BAAY,WAAU,WAAW,KAAK;AAAA;AAE1C,gBAAI,KAAK,OAAO;AACZ,2BAAY,KAAK,OAAO,UAAU,KAAK;AACvC,kBAAI,KAAK,OAAO;AACZ,6BAAY,KAAK,SAAS,SAAS,KAAK;AACxC,6BAAY,KAAK,SAAS,SAAS,KAAK;AACxC,6BAAY,KAAK,SAAS,QAAQ,KAAK;AAAA;AAAA;AAG/C,gBAAI,KAAK,GAAG,YAAY;AACpB,mBAAK,GAAG,WAAW,YAAY,KAAK;AAAA;AAAA;AAAA;AAMhD,eAAO;AAAA;AAAA;AAAA;;;;;OCvuCX,SAAA,GAAA;AAAA,YAAA,AAAA,OAAA,WAAA,YAAA,AAAA,OAAA,UAAA;AAAA,iBAAA,UAAA;iBAAA,AAAA,OAAA,UAAA,cAAA,OAAA;AAAA,iBAAA,IAAA;aAAA;AAAA,UAAA,CAAA,OAAA,UAAA,cAAA,SAAA,AAAA,OAAA,UAAA,cAAA,SAAA,AAAA,OAAA,QAAA,cAAA,OAAA,MAAA,SAAA;;QAAA,WAAA;AAAA,eAAA,WAAA,GAAA,GAAA,GAAA;AAAA,qBAAA,GAAA,IAAA;AAAA,gBAAA,CAAA,EAAA,IAAA;AAAA,kBAAA,CAAA,EAAA,IAAA;AAAA,oBAAA,IAAA,AAAA,OAAA,aAAA,cAAA;AAAA,oBAAA,CAAA,MAAA;AAAA,yBAAA,EAAA,GAAA;AAAA,oBAAA;AAAA,yBAAA,EAAA,GAAA;AAAA,oBAAA,IAAA,IAAA,MAAA,yBAAA,IAAA;AAAA,sBAAA,EAAA,OAAA,oBAAA;;AAAA,kBAAA,IAAA,EAAA,KAAA,EAAA,SAAA;AAAA,gBAAA,GAAA,GAAA,KAAA,EAAA,SAAA,SAAA,IAAA;AAAA,uBAAA,EAAA,EAAA,GAAA,GAAA,OAAA;iBAAA,GAAA,EAAA,SAAA,GAAA,GAAA,GAAA;;AAAA,mBAAA,EAAA,GAAA;;AAAA,mBAAA,IAAA,AAAA,OAAA,aAAA,cAAA,WAAA,IAAA,GAAA,IAAA,EAAA,QAAA;AAAA,cAAA,EAAA;AAAA,iBAAA;UAAA,EAAA,GAAA,CAAA,SAAA,GAAA,GAAA,GAAA;AAAA,WCAA,SAAA,IAAA;AACA;AAkDA,gBAAA,IACA,IAAA,8CAEA,IAAA,KAAA,MACA,IAAA,KAAA,OAEA,IAAA,sBACA,IAAA,IAAA,0DAEA,IAAA,MACA,IAAA,IACA,IAAA,kBAEA,IAAA,CAAA,GAAA,IAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,MAAA,MAAA,MAAA,OACA,IAAA,KAKA,MAAA;AAslFA,uBAAA,IAAA;AACA,kBAAA,KAAA,IAAA;AACA,qBAAA,IAAA,MAAA,OAAA,KAAA,KAAA,KAAA;;AAKA,uBAAA,IAAA;AAMA,uBALA,IAAA,IACA,IAAA,GACA,IAAA,GAAA,QACA,IAAA,GAAA,KAAA,IAEA,IAAA,KAAA;AAGA,qBAFA,KAAA,GAAA,OAAA,IACA,KAAA,IAAA,GAAA,QACA,MAAA,KAAA,MAAA;AAAA;AACA,qBAAA;;AAIA,mBAAA,IAAA,EAAA,QAAA,AAAA,EAAA,WAAA,EAAA,OAAA;AAAA;AAEA,qBAAA,EAAA,MAAA,GAAA,IAAA,KAAA;;AAKA,uBAAA,IAAA,IAAA;AACA,kBAAA,IAAA,GACA,IAAA,GAAA,GACA,IAAA,GAAA,GACA,IAAA,GAAA,GACA,IAAA,GAAA,GACA,IAAA,GAAA,GACA,IAAA,GAAA;AAGA,kBAAA,CAAA,KAAA,CAAA;AAAA,uBAAA;AAMA,kBAJA,KAAA,KAAA,CAAA,EAAA,IACA,IAAA,KAAA,CAAA,EAAA,IAGA,MAAA;AAAA,uBAAA,KAAA,IAAA,IAAA,CAAA,IAAA;AAGA,kBAAA,KAAA;AAAA,uBAAA;AAMA,kBAJA,KAAA,IAAA,GACA,IAAA,KAAA,GAAA,CAGA,KAAA,CAAA;AAAA,uBAAA,IAAA,IAAA,CAAA,IAAA,KAAA,IAAA;AAGA,kBAAA,CAAA;AAAA,uBAAA,IAAA,IAAA,KAAA,IAAA;AAKA,mBAHA,IAAA,KAAA,EAAA,UAAA,KAAA,EAAA,UAAA,IAAA,GAGA,IAAA,GAAA,IAAA,GAAA;AAAA,oBAAA,EAAA,MAAA,EAAA;AAAA,yBAAA,EAAA,KAAA,EAAA,KAAA,KAAA,IAAA;AAGA,qBAAA,KAAA,IAAA,IAAA,IAAA,IAAA,KAAA,IAAA;;AAOA,uBAAA,IAAA,IAAA,IAAA,GAAA;AACA,kBAAA,KAAA,MAAA,KAAA,MAAA,OAAA,MAAA,IAAA,EAAA,MAAA,EAAA;AACA,sBAAA,MACA,IAAA,MAAA,cAAA,CAAA,OAAA,MAAA,WACA,KAAA,MAAA,KAAA,KAAA,oBAAA,sBACA,+BAAA,OAAA;;AAMA,uBAAA,IAAA;AACA,kBAAA,KAAA,GAAA,EAAA,SAAA;AACA,qBAAA,EAAA,GAAA,IAAA,MAAA,MAAA,GAAA,EAAA,MAAA,KAAA;;AAIA,uBAAA,IAAA,IAAA;AACA,qBAAA,KAAA,GAAA,SAAA,GAAA,OAAA,KAAA,MAAA,GAAA,MAAA,KAAA,MACA,MAAA,IAAA,MAAA,QAAA;;AAIA,uBAAA,IAAA,IAAA,IAAA;AACA,kBAAA,GAAA;AAGA,kBAAA,KAAA,GAAA;AAGA,qBAAA,IAAA,KAAA,KAAA,EAAA,IAAA,KAAA;AAAA;AACA,qBAAA,IAAA;yBAOA,EAAA,KAHA,KAAA,GAAA,SAGA;AACA,qBAAA,IAAA,IAAA,MAAA,GAAA,EAAA,IAAA,KAAA;AAAA;AACA,sBAAA;;AACA,qBAAA,KACA,MAAA,GAAA,MAAA,GAAA,MAAA,MAAA,GAAA,MAAA;AAIA,qBAAA;;AAAA,YAOA,MA5sFA,YAAA,IAAA;AACA,kBAAA,GAAA,GAAA,GA6hBA,IAMA,GAwqBA,GACA,GACA,GACA,GACA,GA9sCA,IAAA,EAAA,YAAA,EAAA,aAAA,GAAA,UAAA,MAAA,SAAA,QACA,IAAA,IAAA,EAAA,IAUA,IAAA,IAaA,IAAA,GAMA,IAAA,IAIA,IAAA,IAMA,IAAA,MAKA,IAAA,KAGA,IAAA,OAkBA,IAAA,GAIA,IAAA,GAGA,IAAA,EACA,QAAA,IACA,WAAA,GACA,oBAAA,GACA,gBAAA,KACA,kBAAA,KACA,mBAAA,GACA,wBAAA,QACA,QAAA,MAMA,IAAA;AAgBA,yBAAA,IAAA,IAAA;AACA,oBAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IACA,KAAA;AAGA,oBAAA,CAAA,eAAA;AAKA,yBAAA,IAAA,EAAA,IAAA;AAGA,oBAAA,AAAA,MAAA,MAAA;AAGA,sBAAA,cAAA;AAIA,2BAHA,GAAA,IAAA,GAAA,GACA,GAAA,IAAA,GAAA,GAAA,KACA,IAAA,IAAA,MAAA,GAAA,KAAA,GAAA,UAAA;AAMA,sBAFA,MAAA,AAAA,OAAA,MAAA,aAEA,IAAA,MAAA,GAAA;AAMA,wBAHA,GAAA,IAAA,IAAA,KAAA,IAAA,MAAA,CAAA,IAAA,MAAA,GAGA,OAAA,CAAA,CAAA,IAAA;AACA,2BAAA,KAAA,GAAA,KAAA,IAAA,MAAA,IAAA,MAAA,IAAA;AAAA;AAGA,6BAFA,GAAA,IAAA,IAAA,KACA,IAAA,IAAA,CAAA;;AAIA,yBAAA,OAAA;yBACA;AAEA,wBADA,KAAA,OAAA,KAAA,CACA,EAAA,KAAA;AAAA,6BAAA,EAAA,IAAA,IAAA;AACA,uBAAA,IAAA,AAAA,GAAA,WAAA,MAAA,KAAA,MAAA,GAAA,MAAA,IAAA,MAAA;;AAAA,uBAIA,MAAA,GAAA,QAAA,SAAA,MAAA,GAAA,QAAA,KAAA,MAGA,IAAA,MAAA,GAAA,OAAA,SAGA,MAAA,KAAA,MAAA,KACA,MAAA,CAAA,GAAA,MAAA,KAAA,IACA,KAAA,GAAA,UAAA,GAAA,OACA,KAAA,KAGA,MAAA,GAAA;uBAGA;AAQA,sBALA,EAAA,IAAA,GAAA,EAAA,QAAA,SACA,KAAA,OAAA,KAIA,AAAA,MAAA;AAEA,2BAAA,EADA,KAAA,IAAA,EAAA,cAAA,IAAA,KAAA,KACA,IAAA,GAAA,IAAA,GAAA;AAKA,sBAFA,KAAA,AAAA,OAAA,MAAA,UAEA;AAGA,wBAAA,IAAA,MAAA;AAAA,6BAAA,EAAA,IAAA,IAAA,IAAA;AAKA,wBAHA,GAAA,IAAA,IAAA,KAAA,IAAA,MAAA,GAAA,MAAA,IAAA,MAAA,GAGA,EAAA,SAAA,KAAA,GAAA,QAAA,aAAA,IAAA;AACA,4BAAA,MACA,IAAA;AAIA,yBAAA;;AAEA,uBAAA,IAAA,AAAA,GAAA,WAAA,OAAA,KAAA,MAAA,GAAA,MAAA,IAAA,MAAA;AAQA,uBALA,KAAA,EAAA,MAAA,GAAA,KACA,KAAA,KAAA,GAIA,KAAA,GAAA,QAAA,KAAA,IAAA;AACA,wBAAA,GAAA,QAAA,KAAA,GAAA,OAAA,OAAA,GAAA;AACA,0BAAA,AAAA,MAAA,KAAA;AAGA,4BAAA,KAAA,IAAA;AACA,+BAAA;AACA;;iCAEA,CAAA,MAGA,OAAA,GAAA,iBAAA,MAAA,GAAA,kBACA,MAAA,GAAA,iBAAA,MAAA,GAAA,iBAAA;AACA,6BAAA,MACA,KAAA,IACA,KAAA;AACA;;AAIA,6BAAA,EAAA,IAAA,OAAA,KAAA,IAAA;;AAAA,uBAOA,MAHA,MAAA,EAAA,IAAA,IAAA,IAAA,GAAA,IAGA,QAAA,QAAA,KAAA,GAAA,QAAA,KAAA,MACA,KAAA,GAAA;;AAIA,qBAAA,KAAA,GAAA,AAAA,GAAA,WAAA,QAAA,IAAA;AAAA;AAGA,qBAAA,KAAA,GAAA,QAAA,AAAA,GAAA,WAAA,EAAA,QAAA;AAAA;AAIA,oBAFA,KAAA,GAAA,MAAA,IAAA,EAAA,KAEA;AAIA,sBAHA,MAAA,IAGA,MAAA,EAAA,SACA,KAAA,MAAA,KAAA,MAAA,OAAA,EAAA;AACA,0BAAA,MACA,IAAA,GAAA,IAAA;AAMA,sBAAA,IAHA,MAAA,KAAA,KAAA;AAMA,uBAAA,IAAA,GAAA,IAAA;2BAGA,KAAA;AAGA,uBAAA,IAAA,CAAA,GAAA,IAAA;uBACA;AAWA,wBAVA,GAAA,IAAA,IACA,GAAA,IAAA,IAMA,KAAA,MAAA,KAAA,GACA,KAAA,KAAA,OAAA,IAEA,KAAA,IAAA;AAGA,2BAFA,MAAA,GAAA,EAAA,KAAA,CAAA,GAAA,MAAA,GAAA,MAEA,MAAA,GAAA,KAAA;AACA,2BAAA,EAAA,KAAA,CAAA,GAAA,MAAA,IAAA,MAAA;AAGA,2BAAA,GAAA,MAAA,KACA,KAAA,IAAA,GAAA;;AAEA,4BAAA;AAGA,2BAAA,MAAA,MAAA;AAAA;AACA,uBAAA,EAAA,KAAA,CAAA;;;AAKA,qBAAA,IAAA,CAAA,GAAA,IAAA;;AA8yBA,yBAAA,IAAA,IAAA,IAAA,IAAA;AACA,oBAAA,IAAA,IAAA,IAAA,IAAA;AAKA,oBAHA,AAAA,MAAA,OAAA,KAAA,IACA,EAAA,IAAA,GAAA,IAAA,CAEA,GAAA;AAAA,yBAAA,GAAA;AAKA,oBAHA,KAAA,GAAA,EAAA,IACA,KAAA,GAAA,GAEA,AAAA,MAAA;AACA,uBAAA,EAAA,GAAA,IACA,KAAA,AAAA,MAAA,KAAA,AAAA,MAAA,KAAA,OAAA,KAAA,KAAA,MACA,EAAA,IAAA,MACA,EAAA,IAAA,IAAA;yBAKA,KAHA,MAAA,EAAA,IAAA,EAAA,KAAA,IAAA,KAGA,GAGA,KADA,MAAA,EAAA,GAAA,IACA,QAOA,AAAA,MAAA,KAAA,AAAA,MAAA,KAAA,OAAA,MAAA,MAAA,IAAA;AAGA,yBAAA,KAAA,IAAA,MAAA,KAAA;AAAA;AACA,uBAAA,EAAA,IAAA;2BAIA,MAAA,IACA,KAAA,EAAA,IAAA,IAAA,MAGA,KAAA,KAAA,GAAA;AACA,sBAAA,IAAA,EAAA;AAAA,yBAAA,MAAA,KAAA,MAAA,MAAA;AAAA;2BAGA,IADA,OAAA,KAAA;AAGA,uBADA,KAAA,KAAA,MAAA,OAAA,MACA,MAAA,MAAA;AAAA;AAMA,uBAAA,GAAA,IAAA,KAAA,KAAA,MAAA,KAAA;;AAKA,yBAAA,IAAA,IAAA;AAKA,yBAJA,IACA,KAAA,GACA,KAAA,IAAA,EAAA,GAAA,KAEA,KAAA,GAAA,QAAA,MAAA;AAIA,sBAAA,CAHA,MAAA,IAAA,EAAA,GAAA,MAGA,GAAA;AACA,yBAAA;AACA;;AACA,qBAAA,KAAA,IAAA,OACA,MAAA;;AAIA,uBAAA;;AAQA,yBAAA,IAAA,IAAA,IAAA;AAKA,yBAJA,KAAA,GACA,KAAA,GAAA,QAAA,CAGA,GAAA,EAAA,KAAA,GAAA;AAAA;AAGA,qBAAA,KAAA,GAAA,IAAA,MAAA,IAAA,MAAA,IAAA;AAAA;AAkBA,uBAfA,MAAA,KAAA,KAAA,IAAA,KAAA,IAGA,GAAA,IAAA,GAAA,IAAA,OAMA,GAAA,IAHA,KAAA,IAGA,CAAA,GAAA,IAAA,KAEA,IAAA,IAAA,IACA,KAGA;;AAyDA,yBAAA,IAAA,IAAA,IAAA,IAAA;AACA,oBAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IACA,KAAA,GAAA,GACA,KAAA;AAGA,oBAAA,IAAA;AAQA,qBAAA;AAGA,yBAAA,KAAA,GAAA,KAAA,GAAA,IAAA,MAAA,IAAA,MAAA,IAAA;AAAA;AAIA,wBAHA,MAAA,KAAA,MAGA;AACA,4BAAA,GACA,KAAA,IAIA,KAHA,MAAA,GAAA,KAAA,MAGA,GAAA,KAAA,KAAA,KAAA,KAAA;6BAEA,MAAA,EAAA,MAAA,KAAA,OAEA,GAAA,QAAA;AAEA,0BAAA,CAAA;AASA;AANA,6BAAA,GAAA,UAAA,IAAA,GAAA,KAAA;AAAA;AACA,2BAAA,KAAA,GAGA,KADA,OAAA,KACA,IAFA,MAAA;2BAMA;AAIA,2BAHA,KAAA,KAAA,GAAA,KAGA,KAAA,GAAA,MAAA,IAAA,MAAA,IAAA;AAAA;AAUA,2BAHA,MAJA,OAAA,KAIA,IAAA,MAGA,IAAA,IAAA,KAAA,GAAA,KAAA,KAAA,KAAA,KAAA;;AAmBA,wBAfA,KAAA,MAAA,KAAA,KAKA,AAAA,GAAA,KAAA,MAAA,QAAA,MAAA,IAAA,KAAA,KAAA,GAAA,KAAA,KAAA,KAEA,KAAA,KAAA,IACA,OAAA,OAAA,CAAA,MAAA,KAAA,MAAA,IAAA,IAAA,IAAA,IAAA,MACA,IAAA,MAAA,AAAA,MAAA,KAAA,CAAA,MAAA,KAAA,MAAA,AAAA,MAAA,KAGA,KAAA,KAAA,IAAA,KAAA,KAAA,GAAA,KAAA,MAAA,IAAA,GAAA,KAAA,MAAA,KAAA,KACA,MAAA,IAAA,IAAA,IAAA,IAAA,KAEA,KAAA,KAAA,CAAA,GAAA;AAiBA,6BAhBA,GAAA,SAAA,GAEA,KAGA,OAAA,GAAA,IAAA,GAGA,GAAA,KAAA,GAAA,KAAA,KAAA,KAAA,IACA,GAAA,IAAA,CAAA,MAAA,KAIA,GAAA,KAAA,GAAA,IAAA,GAGA;AAkBA,wBAdA,AAAA,MAAA,IACA,IAAA,SAAA,IACA,KAAA,GACA,QAEA,IAAA,SAAA,KAAA,GACA,KAAA,GAAA,IAAA,KAIA,GAAA,MAAA,IAAA,KAAA,EAAA,KAAA,GAAA,KAAA,MAAA,GAAA,OAAA,KAAA,IAIA;AAEA,iCAAA;AAGA,4BAAA,AAAA,MAAA,GAAA;AAGA,+BAAA,KAAA,GAAA,KAAA,GAAA,IAAA,MAAA,IAAA,MAAA,IAAA;AAAA;AAEA,+BADA,KAAA,GAAA,MAAA,IACA,KAAA,GAAA,MAAA,IAAA,MAAA,IAAA;AAAA;AAGA,gCAAA,MACA,IAAA,KACA,GAAA,MAAA,KAAA,IAAA,KAAA;AAGA;;AAGA,4BADA,GAAA,OAAA,IACA,GAAA,OAAA;AAAA;AACA,2BAAA,QAAA,GACA,KAAA;;AAMA,yBAAA,KAAA,GAAA,QAAA,AAAA,GAAA,EAAA,QAAA,GAAA,GAAA;AAAA;;AAIA,qBAAA,IAAA,IACA,GAAA,IAAA,GAAA,IAAA,OAGA,GAAA,IAAA,KACA,IAAA,IAAA,CAAA,GAAA,IAAA;;AAIA,uBAAA;;AAIA,yBAAA,IAAA;AACA,oBAAA,IACA,KAAA,GAAA;AAEA,uBAAA,AAAA,OAAA,OAAA,GAAA,aAEA,MAAA,EAAA,GAAA,IAEA,KAAA,MAAA,KAAA,KAAA,KACA,EAAA,IAAA,MACA,EAAA,IAAA,IAAA,MAEA,GAAA,IAAA,IAAA,MAAA,KAAA;;AAgqCA,qBAvxEA,EAAA,QAAA,IAEA,EAAA,WAAA,GACA,EAAA,aAAA,GACA,EAAA,aAAA,GACA,EAAA,cAAA,GACA,EAAA,gBAAA,GACA,EAAA,kBAAA,GACA,EAAA,kBAAA,GACA,EAAA,kBAAA,GACA,EAAA,mBAAA,GACA,EAAA,SAAA,GAqCA,EAAA,SAAA,EAAA,MAAA,SAAA,IAAA;AACA,oBAAA,IAAA;AAEA,oBAAA,AAAA,MAAA,MAAA;AAEA,sBAAA,AAAA,OAAA,MAAA;AA2HA,0BAAA,MACA,IAAA,sBAAA;AAtFA,sBAlCA,GAAA,eAAA,KAAA,qBAEA,GADA,KAAA,GAAA,KACA,GAAA,KAAA,KACA,IAAA,KAKA,GAAA,eAAA,KAAA,oBAEA,GADA,KAAA,GAAA,KACA,GAAA,GAAA,KACA,IAAA,KAOA,GAAA,eAAA,KAAA,qBACA,OAAA,GAAA,QACA,GAAA,MACA,GAAA,GAAA,IAAA,CAAA,KAAA,GAAA,KACA,EAAA,GAAA,IAAA,GAAA,KAAA,KACA,IAAA,GAAA,IACA,IAAA,GAAA,MAEA,GAAA,IAAA,CAAA,KAAA,KAAA,KACA,IAAA,CAAA,KAAA,KAAA,IAAA,CAAA,KAAA,OAOA,GAAA,eAAA,KAAA;AAEA,wBADA,MAAA,GAAA,QACA,GAAA;AACA,wBAAA,GAAA,IAAA,CAAA,KAAA,IAAA,KACA,EAAA,GAAA,IAAA,GAAA,KAAA,KACA,IAAA,GAAA,IACA,IAAA,GAAA;yBACA;AAEA,0BADA,EAAA,IAAA,CAAA,KAAA,KAAA,KAAA,CACA;AAGA,8BAAA,MACA,IAAA,KAAA,sBAAA;AAHA,0BAAA,CAAA,KAAA,KAAA,IAAA,CAAA,KAAA;;AAWA,sBAAA,GAAA,eAAA,KAAA,WAAA;AAEA,wBADA,MAAA,GAAA,SAAA,CAAA,CACA;AAcA,4BAAA,MACA,IAAA,KAAA,yBAAA;AAdA,wBAAA,IAAA;AACA,0BAAA,AAAA,OAAA,UAAA,eAAA,CAAA,UAAA,CACA,OAAA,mBAAA,CAAA,OAAA;AAIA,8BADA,IAAA,CAAA,IACA,MACA,IAAA;AAJA,0BAAA;;AAOA,0BAAA;;AA0BA,sBAhBA,GAAA,eAAA,KAAA,kBAEA,GADA,KAAA,GAAA,KACA,GAAA,GAAA,KACA,IAAA,KAKA,GAAA,eAAA,KAAA,oBAEA,GADA,KAAA,GAAA,KACA,GAAA,KAAA,KACA,IAAA,KAKA,GAAA,eAAA,KAAA,WAAA;AAEA,wBAAA,AAAA,OADA,MAAA,GAAA,QACA;AACA,4BAAA,MACA,IAAA,KAAA,qBAAA;AAFA,wBAAA;;AAOA,sBAAA,GAAA,eAAA,KAAA,aAAA;AAKA,wBAAA,AAAA,OAJA,MAAA,GAAA,QAIA,YAAA,sBAAA,KAAA;AAGA,4BAAA,MACA,IAAA,KAAA,eAAA;AAHA,wBAAA;;;AAeA,uBAAA,EACA,gBAAA,GACA,eAAA,GACA,gBAAA,CAAA,GAAA,IACA,OAAA,CAAA,GAAA,IACA,QAAA,GACA,aAAA,GACA,eAAA,GACA,QAAA,GACA,UAAA;iBAUA,EAAA,cAAA,SAAA,IAAA;AACA,uBAAA,cAAA,KAAA,MAAA,AAAA,GAAA,iBAAA,QAAA;iBASA,EAAA,UAAA,EAAA,MAAA,WAAA;AACA,uBAAA,EAAA,WAAA,EAAA;iBASA,EAAA,UAAA,EAAA,MAAA,WAAA;AACA,uBAAA,EAAA,WAAA,EAAA;iBAcA,EAAA,SACA,MAAA,kBAMA,IAAA,KAAA,WAAA,KAAA,UACA,WAAA;AAAA,uBAAA,EAAA,KAAA,WAAA;kBACA,WAAA;AAAA,uBAAA,UAAA,cAAA,KAAA,WAAA,KACA,WAAA,KAAA,WAAA;iBAEA,SAAA,IAAA;AACA,oBAAA,IAAA,IAAA,IAAA,IAAA,IACA,KAAA,GACA,KAAA,IACA,KAAA,IAAA,EAAA;AAOA,oBALA,AAAA,MAAA,OAAA,KAAA,IACA,EAAA,IAAA,GAAA,MAEA,KAAA,EAAA,KAAA,IAEA;AAGA,sBAAA,OAAA,iBAAA;AAIA,yBAFA,KAAA,OAAA,gBAAA,IAAA,YAAA,MAAA,KAEA,KAAA;AAcA,8BANA,MAAA,SAAA,GAAA,MAAA,IAAA,KAAA,OAAA,OAOA,MAAA,OAAA,gBAAA,IAAA,YAAA,KACA,GAAA,MAAA,GAAA,IACA,GAAA,KAAA,KAAA,GAAA,MAKA,IAAA,KAAA,KAAA,OACA,MAAA;AAGA,yBAAA,KAAA;yBAGA;AAAA,wBAAA,CAAA,OAAA;AA2BA,4BADA,IAAA,OACA,MACA,IAAA;AAvBA,yBAFA,KAAA,OAAA,YAAA,MAAA,IAEA,KAAA;AAUA,8BAJA,MAAA,kBAAA,MAAA,GAAA,OAAA,gBAAA,GAAA,KAAA,KACA,aAAA,GAAA,KAAA,KAAA,WAAA,GAAA,KAAA,KACA,IAAA,KAAA,MAAA,MAAA,IAAA,KAAA,MAAA,KAAA,GAAA,KAAA,MAGA,OAAA,YAAA,GAAA,KAAA,IAAA,MAIA,IAAA,KAAA,KAAA,OACA,MAAA;AAGA,yBAAA,KAAA;;AASA,oBAAA,CAAA;AAEA,yBAAA,KAAA;AAAA,oBACA,MAAA,OACA,QAAA,IAAA,QAAA,KAAA;AAcA,qBAVA,KAAA,GAAA,EAAA,KACA,MAAA,GAGA,MAAA,MACA,MAAA,EAAA,IAAA,KACA,GAAA,MAAA,EAAA,KAAA,MAAA,KAIA,AAAA,GAAA,QAAA,GAAA,GAAA,OAAA;AAAA;AAGA,oBAAA,KAAA;AACA,uBAAA,CAAA,KAAA;qBACA;AAGA,uBAAA,KAAA,IAAA,AAAA,GAAA,OAAA,GAAA,GAAA,OAAA,GAAA,IAAA,MAAA;AAAA;AAGA,uBAAA,KAAA,GAAA,KAAA,GAAA,IAAA,MAAA,IAAA,MAAA,IAAA;AAAA;AAGA,uBAAA,KAAA,OAAA,IAAA;;AAKA,uBAFA,GAAA,IAAA,IACA,GAAA,IAAA,IACA;kBAUA,EAAA,MAAA,WAAA;AAIA,yBAHA,KAAA,GACA,KAAA,WACA,KAAA,IAAA,EAAA,GAAA,KACA,KAAA,GAAA;AAAA,uBAAA,GAAA,KAAA,GAAA;AACA,uBAAA;iBAQA,IAAA,WAAA;AACA,oBAAA,KAAA;AAOA,4BAAA,IAAA,IAAA,IAAA,IAAA;AAOA,2BANA,IAEA,IADA,KAAA,CAAA,IAEA,KAAA,GACA,KAAA,GAAA,QAEA,KAAA,MAAA;AACA,yBAAA,KAAA,GAAA,QAAA,MAAA,GAAA,OAAA;AAAA;AAIA,yBAFA,GAAA,MAAA,GAAA,QAAA,GAAA,OAAA,QAEA,KAAA,GAAA,KAAA,GAAA,QAAA;AAEA,yBAAA,MAAA,KAAA,KACA,CAAA,GAAA,KAAA,MAAA,QAAA,IAAA,KAAA,KAAA,IACA,GAAA,KAAA,MAAA,GAAA,MAAA,KAAA,GACA,GAAA,OAAA;;AAKA,yBAAA,GAAA;;AAMA,uBAAA,SAAA,IAAA,IAAA,IAAA,IAAA,IAAA;AACA,sBAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IACA,KAAA,GAAA,QAAA,MACA,KAAA,GACA,KAAA;AA+BA,uBA5BA,KAAA,MACA,MAAA,GAGA,IAAA,GACA,KAAA,GAAA,QAAA,KAAA,KAEA,KADA,MAAA,IAAA,EAAA,KACA,IAAA,GAAA,SAAA,KACA,IAAA,IAKA,GAAA,IAAA,GAAA,EAAA,EAAA,GAAA,IAAA,GAAA,GAAA,MACA,IAAA,IAAA,KACA,GAAA,IAAA,GAAA,EAAA,SAUA,KAAA,KALA,MAAA,GAAA,IAAA,IAAA,IAAA,KACA,MAAA,GAAA,MACA,MAAA,IAAA,KAGA,QAGA,AAAA,GAAA,EAAA,OAAA,GAAA,GAAA;AAAA;AAGA,sBAAA,CAAA,GAAA;AAAA,2BAAA,GAAA,OAAA;AAqCA,sBAlCA,KAAA,IAAA,EACA,KAEA,IAAA,IAAA,IACA,GAAA,IAAA,IAGA,GAAA,IAAA,IAEA,KADA,MAAA,EAAA,IAAA,IAAA,IAAA,IAAA,KACA,GACA,KAAA,GAAA,GACA,KAAA,GAAA,IASA,KAAA,GAHA,KAAA,KAAA,KAAA,IAOA,KAAA,KAAA,GACA,KAAA,MAAA,KAAA,KAAA,AAAA,GAAA,KAAA,MAAA,MAEA,KAAA,KAAA,IAAA,CAAA,MAAA,QAAA,OAAA,CAAA,MAAA,KAAA,MAAA,IAAA,IAAA,IAAA,IAAA,MACA,KAAA,MAAA,MAAA,MAAA,CAAA,MAAA,KAAA,MAAA,AAAA,MAAA,KAAA,IAAA,GAAA,KAAA,MACA,MAAA,IAAA,IAAA,IAAA,IAAA,KAKA,KAAA,KAAA,CAAA,GAAA;AAGA,yBAAA,KAAA,EAAA,GAAA,OAAA,IAAA,CAAA,IAAA,GAAA,OAAA,MAAA,GAAA,OAAA;uBACA;AAMA,wBAHA,GAAA,SAAA,IAGA;AAGA,2BAAA,EAAA,IAAA,EAAA,GAAA,EAAA,MAAA;AACA,2BAAA,MAAA,GAEA,MAAA,GACA,IACA,KAAA,CAAA,GAAA,OAAA;AAMA,yBAAA,KAAA,GAAA,QAAA,CAAA,GAAA,EAAA;AAAA;AAGA,yBAAA,KAAA,GAAA,KAAA,IAAA,MAAA,IAAA,MAAA,GAAA,OAAA,GAAA;AAAA;AAGA,yBAAA,EAAA,IAAA,IAAA,GAAA,OAAA;;AAIA,yBAAA;;mBAMA,IAAA,WAAA;AAGA,4BAAA,IAAA,IAAA,IAAA;AACA,sBAAA,IAAA,IAAA,IAAA,IACA,KAAA,GACA,KAAA,GAAA,QACA,KAAA,KAAA,GACA,KAAA,KAAA,IAAA;AAEA,uBAAA,KAAA,GAAA,SAAA;AAKA,yBADA,OAAA,KAHA,MAAA,GAAA,MAAA,KAEA,MAAA,KAAA,KADA,MAAA,GAAA,MAAA,IAAA,KACA,MACA,IAAA,IAAA,MACA,KAAA,KAAA,MAAA,IAAA,KAAA,KAAA,IACA,GAAA,MAAA,KAAA;AAKA,yBAFA,MAAA,MAAA,CAAA,IAAA,OAAA,MAEA;;AAGA,4BAAA,IAAA,IAAA,IAAA,IAAA;AACA,sBAAA,IAAA;AAEA,sBAAA,MAAA;AACA,yBAAA,KAAA,KAAA,IAAA;;AAGA,yBAAA,KAAA,KAAA,GAAA,KAAA,IAAA;AAEA,0BAAA,GAAA,OAAA,GAAA,KAAA;AACA,6BAAA,GAAA,MAAA,GAAA,MAAA,IAAA;AACA;;AAKA,yBAAA;;AAGA,4BAAA,IAAA,IAAA,IAAA,IAAA;AAIA,2BAHA,KAAA,GAGA;AACA,uBAAA,OAAA,IACA,KAAA,GAAA,MAAA,GAAA,MAAA,IAAA,GACA,GAAA,MAAA,KAAA,KAAA,GAAA,MAAA,GAAA;AAIA,yBAAA,CAAA,GAAA,MAAA,IAAA,GAAA,QAAA,GAAA,OAAA,GAAA;AAAA;;AAIA,uBAAA,SAAA,IAAA,IAAA,IAAA,IAAA,IAAA;AACA,sBAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IACA,IAAA,IACA,KAAA,GAAA,KAAA,GAAA,IAAA,IAAA,IACA,KAAA,GAAA,GACA,KAAA,GAAA;AAGA,sBAAA,CAAA,OAAA,GAAA,MAAA,MAAA,GAAA;AAEA,2BAAA,IAAA,EAGA,GAAA,KAAA,GAAA,KAAA,MAAA,CAAA,MAAA,GAAA,MAAA,GAAA,KAAA,MAGA,MAAA,AAAA,GAAA,MAAA,KAAA,CAAA,KAAA,IAAA,KAAA,KAAA,IAHA;AAoBA,uBAZA,KADA,MAAA,IAAA,EAAA,KACA,IAAA,IAEA,KAAA,KADA,MAAA,GAAA,IAAA,GAAA,KACA,GAEA,MACA,MAAA,GACA,KAAA,EAAA,GAAA,IAAA,KAAA,EAAA,GAAA,IAAA,IACA,KAAA,KAAA,IAAA,IAKA,KAAA,GAAA,GAAA,OAAA,IAAA,OAAA,IAAA;AAAA;AAIA,sBAFA,GAAA,MAAA,IAAA,OAAA,MAAA,MAEA,KAAA;AACA,uBAAA,KAAA,IACA,KAAA;uBACA;AAwBA,yBAvBA,KAAA,GAAA,QACA,KAAA,GAAA,QAEA,MAAA,GAQA,IAJA,MAAA,EAAA,KAAA,IALA,KAAA,KAKA,QAKA,MAAA,GAAA,IAAA,IAAA,KACA,KAAA,GAAA,IAAA,IAAA,KACA,KAAA,GAAA,QACA,KAAA,GAAA,SAGA,KAAA,IAEA,KADA,MAAA,GAAA,MAAA,GAAA,KACA,QAGA,KAAA,IAAA,GAAA,QAAA;AAAA;AACA,yBAAA,GAAA,SACA,KAAA,CAAA,GAAA,OAAA,KACA,KAAA,GAAA,IACA,GAAA,MAAA,KAAA,KAAA;AAIA,uBAAA;AAOA,0BANA,KAAA,GAGA,MAAA,GAAA,IAAA,IAAA,IAAA,OAGA,GAAA;AAqBA,4BAjBA,KAAA,GAAA,IACA,MAAA,MAAA,MAAA,KAAA,KAAA,IAAA,MAAA,KAgBA,IAbA,MAAA,EAAA,KAAA;AA2BA,+BAXA,MAAA,MAAA,MAAA,KAAA,IAIA,KADA,MAAA,GAAA,IAAA,IAAA,KACA,QACA,KAAA,GAAA,QAMA,AAAA,GAAA,IAAA,IAAA,IAAA,OAAA;AACA,kCAGA,GAAA,IAAA,KAAA,KAAA,KAAA,IAAA,IAAA,KACA,KAAA,GAAA,QACA,KAAA;;AAQA,0BAAA,MAAA,KAGA,MAAA,KAAA,IAKA,KADA,MAAA,GAAA,SACA;AAUA,4BAPA,KAAA,MAAA,MAAA,CAAA,GAAA,OAAA,MAGA,GAAA,IAAA,IAAA,IAAA,KACA,KAAA,GAAA,QAAA,AAGA,MAHA;AASA,iCAAA,GAAA,IAAA,IAAA,IAAA,MAAA;AACA,kCAGA,GAAA,IAAA,KAAA,KAAA,KAAA,IAAA,IAAA,KACA,KAAA,GAAA;;AAGA,wBAAA,OAAA,KACA,OACA,KAAA,CAAA;AAIA,yBAAA,QAAA,IAGA,GAAA,KACA,GAAA,QAAA,GAAA,OAAA,IAEA,MAAA,CAAA,GAAA,MACA,KAAA;6BAEA,QAAA,MAAA,AAAA,GAAA,MAAA,SAAA;AAEA,yBAAA,AAAA,GAAA,MAAA,MAGA,GAAA,MAAA,GAAA,OAAA,GAAA;;AAGA,sBAAA,MAAA,GAAA;AAGA,yBAAA,KAAA,GAAA,KAAA,GAAA,IAAA,MAAA,IAAA,MAAA,IAAA;AAAA;AAEA,sBAAA,IAAA,KAAA,IAAA,IAAA,KAAA,KAAA,IAAA,KAAA,GAAA,IAAA;;AAIA,uBAAA,IAAA,IACA,GAAA,IAAA,CAAA;AAGA,yBAAA;;mBAkIA,IAAA,+BACA,IAAA,eACA,IAAA,eACA,IAAA,sBACA,IAAA,8BALA,IAOA,SAAA,IAAA,IAAA,IAAA,IAAA;AACA,oBAAA,IACA,KAAA,KAAA,KAAA,GAAA,QAAA,GAAA;AAGA,oBAAA,EAAA,KAAA;AACA,qBAAA,IAAA,MAAA,MAAA,OAAA,KAAA,IAAA,KAAA,GACA,GAAA,IAAA,GAAA,IAAA;qBACA;AACA,sBAAA,CAAA,MAGA,MAAA,GAAA,QAAA,GAAA,SAAA,IAAA,IAAA,IAAA;AAEA,2BADA,KAAA,AAAA,MAAA,GAAA,kBAAA,MAAA,KAAA,AAAA,MAAA,MAAA,IAAA,GACA,MAAA,MAAA,KAAA,KAAA;sBAGA,MACA,MAAA,IAGA,KAAA,GAAA,QAAA,GAAA,MAAA,QAAA,GAAA,UAGA,MAAA;AAAA,2BAAA,IAAA,EAAA,IAAA;AAKA,sBAAA,EAAA;AACA,0BAAA,MACA,IAAA,UAAA,MAAA,WAAA,KAAA,MAAA,cAAA;AAIA,qBAAA,IAAA,GAAA,IAAA,GAAA,IAAA;;iBA8LA,EAAA,gBAAA,EAAA,MAAA,WAAA;AACA,oBAAA,KAAA,IAAA,EAAA;AAEA,uBADA,GAAA,IAAA,KAAA,IAAA,IAAA,IACA;iBAWA,EAAA,aAAA,SAAA,IAAA,IAAA;AACA,uBAAA,EAAA,MAAA,IAAA,EAAA,IAAA;iBAiBA,EAAA,gBAAA,EAAA,KAAA,SAAA,IAAA,IAAA;AACA,oBAAA,IAAA,IAAA;AAGA,oBAAA,AAAA,MAAA;AAKA,yBAJA,EAAA,IAAA,GAAA,MACA,AAAA,MAAA,OAAA,KAAA,IACA,EAAA,IAAA,GAAA,IAEA,EAAA,IAAA,EAPA,OAOA,KAPA,KAOA,IAAA,GAAA;AAGA,oBAAA,CAAA,MAVA,KAUA;AAAA,yBAAA;AAIA,oBAHA,KAAA,OAAA,GAAA,SAAA,KAAA,EAAA,KAAA,IAAA,MAAA,GAGA,KAAA,GAAA;AAAA,yBAAA,KAAA,MAAA,GAAA,MAAA,IAAA;AAAA;AAGA,uBAFA,KAAA,KAAA,MAAA,IAEA;iBAwBA,EAAA,YAAA,EAAA,MAAA,SAAA,IAAA,IAAA;AACA,uBAAA,EAAA,MAAA,IAAA,EAAA,IAAA,KAAA,GAAA;iBAQA,EAAA,qBAAA,EAAA,OAAA,SAAA,IAAA,IAAA;AACA,uBAAA,EAAA,MAAA,IAAA,EAAA,IAAA,KAAA,GAAA;iBAmBA,EAAA,kBAAA,EAAA,MAAA,SAAA,IAAA,IAAA;AACA,oBAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IACA,KAAA;AAKA,oBAHA,MAAA,IAAA,EAAA,KAGA,KAAA,CAAA,GAAA;AACA,wBAAA,MACA,IAAA,8BAAA,EAAA;AASA,oBANA,AAAA,MAAA,QAAA,MAAA,IAAA,EAAA,MAGA,KAAA,KAAA,GAAA,GAAA,CAGA,GAAA,KAAA,CAAA,GAAA,EAAA,MAAA,AAAA,GAAA,EAAA,MAAA,KAAA,CAAA,GAAA,KAAA,AAAA,GAAA,EAAA,UAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA;AAKA,yBADA,KAAA,IAAA,EAAA,KAAA,IAAA,CAAA,EAAA,KAAA,KAAA,IAAA,EAAA,MAAA,CAAA,EAAA,OACA,KAAA,GAAA,IAAA,MAAA;AAKA,oBAFA,KAAA,GAAA,IAAA,GAEA,IAAA;AAGA,sBAAA,GAAA,IAAA,CAAA,GAAA,EAAA,KAAA,CAAA,GAAA;AAAA,2BAAA,IAAA,EAAA;AAAA,kBAEA,MAAA,CAAA,MAAA,GAAA,eAAA,GAAA,gBAEA,MAAA,GAAA,IAAA;uBAIA;AAAA,sBAAA,IAAA,GAAA,KAAA,KAAA,GAAA,KAAA,GAAA,IAAA,MAAA,CAAA,GAAA,KAAA,IAEA,IAAA,GAAA,EAAA,MAAA,MAAA,QAAA,GAAA,EAAA,KAEA,GAAA,EAAA,KAAA,QAAA,MAAA,GAAA,EAAA,MAAA;AASA,2BANA,KAAA,GAAA,IAAA,KAAA,EAAA,MAAA,KAAA,GAAA,KAGA,GAAA,KAAA,MAAA,IAAA,KAGA,IAAA,EAAA,KAAA,IAAA,KAAA;AAEA,uBAKA,MAAA,EAAA,IAAA,IAAA;;AAeA,qBATA,KAHA,KACA,MAAA,IAAA,EAAA,MACA,MAAA,IAAA,IAAA,IACA,EAAA,OAEA,MAAA,KAAA,IAAA,CAAA,EAAA,QACA,GAGA,KAAA,IAAA,EAAA,QAGA;AAEA,sBAAA,IAAA;AAEA,wBAAA,CADA,MAAA,GAAA,MAAA,KACA;AAAA;AAEA,yBACA,GAAA,EAAA,SAAA,MAAA,IAAA,EAAA,SAAA,MACA,MACA,MAAA,GAAA,IAAA;;AAIA,sBAAA,IAAA;AAEA,wBAAA,AADA,MAAA,EAAA,KAAA,QACA;AAAA;AACA,yBAAA,KAAA;6BAGA,EADA,KAAA,GAAA,MAAA,KACA,GAAA,IAAA,GAAA,IAEA,KAAA,GAAA;AACA,yBAAA,EAAA;uBACA;AAEA,wBAAA,AADA,MAAA,CAAA,EAAA,QACA;AAAA;AACA,yBAAA,KAAA;;AAIA,uBAAA,GAAA,MAAA,KAEA,KACA,GAAA,KAAA,GAAA,EAAA,SAAA,MAAA,IAAA,EAAA,SAAA,MACA,MACA,MAAA,GAAA,IAAA;;AAIA,uBAAA,KAAA,KACA,OAAA,MAAA,EAAA,IAAA,MAEA,KAAA,GAAA,IAAA,MAAA,KAAA,EAAA,IAAA,GAAA,GAAA,UAAA;iBAYA,EAAA,eAAA,SAAA,IAAA;AACA,oBAAA,KAAA,IAAA,EAAA;AAGA,uBAFA,AAAA,MAAA,OAAA,KAAA,IACA,EAAA,IAAA,GAAA,IACA,EAAA,IAAA,GAAA,IAAA,GAAA;iBAQA,EAAA,YAAA,EAAA,KAAA,SAAA,IAAA,IAAA;AACA,uBAAA,AAAA,EAAA,MAAA,IAAA,EAAA,IAAA,SAAA;iBAOA,EAAA,WAAA,WAAA;AACA,uBAAA,CAAA,CAAA,KAAA;iBAQA,EAAA,gBAAA,EAAA,KAAA,SAAA,IAAA,IAAA;AACA,uBAAA,IAAA,EAAA,MAAA,IAAA,EAAA,IAAA;iBAQA,EAAA,yBAAA,EAAA,MAAA,SAAA,IAAA,IAAA;AACA,uBAAA,AAAA,MAAA,EAAA,MAAA,IAAA,EAAA,IAAA,UAAA,KAAA,AAAA,OAAA;iBAQA,EAAA,YAAA,WAAA;AACA,uBAAA,CAAA,CAAA,KAAA,KAAA,EAAA,KAAA,IAAA,KAAA,KAAA,EAAA,SAAA;iBAQA,EAAA,aAAA,EAAA,KAAA,SAAA,IAAA,IAAA;AACA,uBAAA,EAAA,MAAA,IAAA,EAAA,IAAA,OAAA;iBAQA,EAAA,sBAAA,EAAA,MAAA,SAAA,IAAA,IAAA;AACA,uBAAA,AAAA,MAAA,EAAA,MAAA,IAAA,EAAA,IAAA,UAAA,MAAA,AAAA,OAAA;iBAOA,EAAA,QAAA,WAAA;AACA,uBAAA,CAAA,KAAA;iBAOA,EAAA,aAAA,WAAA;AACA,uBAAA,KAAA,IAAA;iBAOA,EAAA,aAAA,WAAA;AACA,uBAAA,IAAA,KAAA;iBAOA,EAAA,SAAA,WAAA;AACA,uBAAA,CAAA,CAAA,KAAA,KAAA,AAAA,KAAA,EAAA,MAAA;iBAwBA,EAAA,QAAA,SAAA,IAAA,IAAA;AACA,oBAAA,IAAA,IAAA,IAAA,IACA,KAAA,MACA,KAAA,GAAA;AAMA,oBAHA,KADA,MAAA,IAAA,EAAA,IAAA,KACA,GAAA,CAGA,MAAA,CAAA;AAAA,yBAAA,IAAA,EAAA;AAGA,oBAAA,MAAA;AAEA,yBADA,GAAA,IAAA,CAAA,IACA,GAAA,KAAA;AAGA,oBAAA,KAAA,GAAA,IAAA,GACA,KAAA,GAAA,IAAA,GACA,KAAA,GAAA,GACA,KAAA,GAAA;AAEA,oBAAA,CAAA,MAAA,CAAA,IAAA;AAGA,sBAAA,CAAA,MAAA,CAAA;AAAA,2BAAA,KAAA,IAAA,IAAA,CAAA,IAAA,MAAA,IAAA,EAAA,KAAA,KAAA;AAGA,sBAAA,CAAA,GAAA,MAAA,CAAA,GAAA;AAGA,2BAAA,GAAA,KAAA,IAAA,IAAA,CAAA,IAAA,MAAA,IAAA,EAAA,GAAA,KAAA,KAGA,AAAA,KAAA,IAAA,KAAA;;AASA,oBALA,KAAA,EAAA,KACA,KAAA,EAAA,KACA,KAAA,GAAA,SAGA,KAAA,KAAA,IAAA;AAaA,uBATA,MAFA,MAAA,KAAA,KACA,MAAA,CAAA,IACA,MAEA,MAAA,IACA,KAGA,WAGA,KAAA,IAAA,MAAA,GAAA,KAAA;AAAA;AACA,qBAAA;;AAMA,uBAFA,KAAA,MAAA,MAAA,GAAA,UAAA,MAAA,GAAA,WAAA,KAAA,IAEA,KAAA,KAAA,GAAA,KAAA,IAAA;AAEA,wBAAA,GAAA,OAAA,GAAA,KAAA;AACA,2BAAA,GAAA,MAAA,GAAA;AACA;;AAYA,oBANA,MAAA,MAAA,IAAA,KAAA,IAAA,KAAA,IAAA,GAAA,IAAA,CAAA,GAAA,IAMA,IAJA,MAAA,MAAA,GAAA,UAAA,MAAA,GAAA;AAIA,yBAAA,MAAA,GAAA,QAAA;AAAA;AAIA,qBAHA,KAAA,IAAA,GAGA,KAAA,MAAA;AAEA,sBAAA,GAAA,EAAA,MAAA,GAAA,KAAA;AACA,yBAAA,KAAA,IAAA,MAAA,CAAA,GAAA,EAAA,KAAA,GAAA,MAAA;AAAA;AAAA,sBACA,GAAA,KACA,GAAA,OAAA;;AAGA,qBAAA,OAAA,GAAA;;AAIA,uBAAA,AAAA,GAAA,MAAA,GAAA,GAAA,OAAA,GAAA,IAAA,EAAA;AAAA;AAGA,uBAAA,GAAA,KAWA,EAAA,IAAA,IAAA,MAPA,IAAA,IAAA,AAAA,KAAA,IAAA,KAAA,GACA,GAAA,IAAA,CAAA,GAAA,IAAA,IACA;iBA8BA,EAAA,SAAA,EAAA,MAAA,SAAA,IAAA,IAAA;AACA,oBAAA,IAAA,IACA,KAAA;AAKA,uBAHA,KAAA,IAAA,EAAA,IAAA,KAAA,CAGA,GAAA,KAAA,CAAA,GAAA,KAAA,GAAA,KAAA,CAAA,GAAA,EAAA,KACA,IAAA,EAAA,OAAA,CAGA,GAAA,KAAA,GAAA,KAAA,CAAA,GAAA,EAAA,KACA,IAAA,EAAA,MAGA,CAAA,KAAA,IAIA,MAAA,GAAA,GACA,GAAA,IAAA,GACA,KAAA,EAAA,IAAA,IAAA,GAAA,IACA,GAAA,IAAA,IACA,GAAA,KAAA,MAEA,KAAA,EAAA,IAAA,IAAA,GAAA,IAGA,MAAA,GAAA,MAAA,GAAA,MAAA,MAGA,EAAA,MAAA,AAAA,KAAA,KAAA,IAAA,IAAA,GAAA,IAEA;iBAwBA,EAAA,eAAA,EAAA,QAAA,SAAA,IAAA,IAAA;AACA,oBAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IACA,IAAA,IACA,KAAA,MACA,KAAA,GAAA,GACA,KAAA,MAAA,IAAA,EAAA,IAAA,KAAA;AAGA,oBAAA,CAAA,OAAA,MAAA,GAAA,MAAA,GAAA;AAmBA,yBAAA,CAhBA,GAAA,KAAA,CAAA,GAAA,KAAA,MAAA,CAAA,GAAA,MAAA,CAAA,MAAA,MAAA,CAAA,GAAA,MAAA,CAAA,KACA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,OAEA,IAAA,KAAA,GAAA,GAGA,MAAA,KAKA,IAAA,IAAA,CAAA,IACA,GAAA,IAAA,KALA,GAAA,IAAA,GAAA,IAAA,OASA;AAYA,qBATA,KAAA,EAAA,GAAA,IAAA,KAAA,EAAA,GAAA,IAAA,IACA,GAAA,KAAA,GAAA,GACA,MAAA,GAAA,UACA,MAAA,GAAA,WAGA,MAAA,IAAA,KAAA,IAAA,KAAA,IAAA,KAAA,IAAA,KAAA,IAAA,KAAA,KAGA,KAAA,KAAA,IAAA,KAAA,IAAA,MAAA,GAAA,KAAA;AAAA;AAKA,qBAHA,KAAA,GACA,KAAA,GAEA,KAAA,IAAA,KAAA,EAAA,MAAA;AAKA,uBAJA,KAAA,GACA,KAAA,GAAA,MAAA,IACA,KAAA,GAAA,MAAA,KAAA,GAEA,KAAA,KAAA,MAAA,KAAA,KAAA;AAKA,yBADA,OAAA,KAHA,MAAA,GAAA,EAAA,MAAA,MAEA,MAAA,KAAA,KADA,MAAA,GAAA,MAAA,KAAA,KACA,MACA,KAAA,KAAA,GAAA,MAAA,MACA,KAAA,KAAA,MAAA,KAAA,KAAA,KAAA,IACA,GAAA,QAAA,KAAA;AAGA,qBAAA,MAAA;;AASA,uBANA,KAAA,EACA,KAEA,GAAA,OAAA,GAAA,IAGA,EAAA,IAAA,IAAA;iBAQA,EAAA,UAAA,WAAA;AACA,oBAAA,KAAA,IAAA,EAAA;AAEA,uBADA,GAAA,IAAA,CAAA,GAAA,KAAA,MACA;iBAwBA,EAAA,OAAA,SAAA,IAAA,IAAA;AACA,oBAAA,IACA,KAAA,MACA,KAAA,GAAA;AAMA,oBAHA,KADA,MAAA,IAAA,EAAA,IAAA,KACA,GAAA,CAGA,MAAA,CAAA;AAAA,yBAAA,IAAA,EAAA;AAGA,oBAAA,MAAA;AAEA,yBADA,GAAA,IAAA,CAAA,IACA,GAAA,MAAA;AAGA,oBAAA,KAAA,GAAA,IAAA,GACA,KAAA,GAAA,IAAA,GACA,KAAA,GAAA,GACA,KAAA,GAAA;AAEA,oBAAA,CAAA,MAAA,CAAA,IAAA;AAGA,sBAAA,CAAA,MAAA,CAAA;AAAA,2BAAA,IAAA,EAAA,KAAA;AAIA,sBAAA,CAAA,GAAA,MAAA,CAAA,GAAA;AAAA,2BAAA,GAAA,KAAA,KAAA,IAAA,EAAA,GAAA,KAAA,KAAA,IAAA;;AAQA,oBALA,KAAA,EAAA,KACA,KAAA,EAAA,KACA,KAAA,GAAA,SAGA,KAAA,KAAA,IAAA;AAUA,uBAPA,MAFA,IAAA,KACA,MAAA,IACA,MAEA,MAAA,CAAA,IACA,KAGA,WACA,MAAA,GAAA,KAAA;AAAA;AACA,qBAAA;;AAUA,qBAPA,MAAA,GAAA,UACA,MAAA,GAAA,UAGA,KAAA,MAAA,IAAA,KAAA,IAAA,KAAA,IAAA,KAAA,KAGA,KAAA,GAAA;AACA,uBAAA,IAAA,EAAA,MAAA,GAAA,MAAA,GAAA,MAAA,MAAA,IAAA,GACA,GAAA,MAAA,MAAA,GAAA,MAAA,IAAA,GAAA,MAAA;AAUA,uBAPA,MACA,MAAA,CAAA,IAAA,OAAA,KAAA,EACA,KAKA,EAAA,IAAA,IAAA;iBAmBA,EAAA,YAAA,EAAA,KAAA,SAAA,IAAA,IAAA;AACA,oBAAA,IAAA,IAAA;AAGA,oBAAA,AAAA,MAAA,QAAA,OAAA,CAAA,CAAA;AAKA,yBAJA,EAAA,IAAA,GAAA,MACA,AAAA,MAAA,OAAA,KAAA,IACA,EAAA,IAAA,GAAA,IAEA,EAAA,IAAA,EAPA,OAOA,IAAA;AAGA,oBAAA,CAAA,MAVA,KAUA;AAAA,yBAAA;AAIA,oBAFA,KADA,MAAA,GAAA,SAAA,KACA,IAAA,GAEA,KAAA,GAAA,KAAA;AAGA,yBAAA,KAAA,MAAA,GAAA,MAAA,IAAA;AAAA;AAGA,uBAAA,KAAA,GAAA,IAAA,MAAA,IAAA,MAAA,IAAA;AAAA;;AAKA,uBAFA,MAvBA,KAuBA,IAAA,IAAA,MAAA,MAvBA,KAuBA,IAAA,IAEA;iBAYA,EAAA,YAAA,SAAA,IAAA;AAEA,uBADA,EAAA,IAAA,CAAA,GAAA,IACA,KAAA,MAAA,OAAA;iBAeA,EAAA,aAAA,EAAA,OAAA,WAAA;AACA,oBAAA,IAAA,IAAA,IAAA,IAAA,IACA,KAAA,MACA,KAAA,GAAA,GACA,KAAA,GAAA,GACA,KAAA,GAAA,GACA,KAAA,IAAA,GACA,KAAA,IAAA,EAAA;AAGA,oBAAA,AAAA,OAAA,KAAA,CAAA,MAAA,CAAA,GAAA;AACA,yBAAA,IAAA,EAAA,CAAA,MAAA,KAAA,KAAA,EAAA,MAAA,GAAA,MAAA,MAAA,KAAA,KAAA,IAAA;AA8BA,oBATA,MAbA,AAJA,MAAA,KAAA,KAAA,CAAA,EAAA,SAIA,KAAA,MAAA,IAAA,IACA,QAAA,EAAA,KACA,SAAA,MAAA,KAAA,KAAA,OAAA,MACA,KAAA,KAAA,KAAA,CAAA,KACA,KAAA,EAAA,MAAA,KAAA,KAAA,MAAA,KAAA,KAAA,IASA,IAAA,EANA,KADA,MAAA,IAAA,IACA,OAAA,KAEA,MAAA,GAAA,iBACA,MAAA,GAAA,GAAA,QAAA,OAAA,KAAA,OAKA,IAAA,EAAA,KAAA,KAOA,EAAA;AAMA,uBAJA,MADA,MAAA,GAAA,KACA,MACA,KAAA,MAAA;AAOA,wBAHA,KAAA,IACA,KAAA,GAAA,MAAA,GAAA,KAAA,EAAA,IAAA,IAAA,IAAA,MAEA,EAAA,GAAA,GAAA,MAAA,GAAA,QAAA,MAAA,EAAA,GAAA,IAAA,MAAA,GAAA,KAAA;AAWA,0BANA,GAAA,IAAA,MAAA,EAAA,IAMA,AALA,MAAA,GAAA,MAAA,KAAA,GAAA,KAAA,OAKA,UAAA,OAAA,AAAA,MAAA,SAgBA;AAAA,yBAIA,MAAA,EAAA,GAAA,MAAA,MAAA,AAAA,GAAA,OAAA,MAAA,QAGA,GAAA,IAAA,GAAA,IAAA,IAAA,GAAA,IACA,KAAA,CAAA,GAAA,MAAA,IAAA,GAAA;AAGA;;AAvBA,0BAAA,CAAA,MACA,GAAA,IAAA,GAAA,IAAA,IAAA,GAAA,IAEA,GAAA,MAAA,IAAA,GAAA,MAAA;AACA,6BAAA;AACA;;AAIA,4BAAA,GACA,MAAA,GACA,KAAA;;;AAkBA,uBAAA,EAAA,IAAA,GAAA,IAAA,IAAA,GAAA,GAAA;iBAaA,EAAA,gBAAA,SAAA,IAAA,IAAA;AAKA,uBAJA,AAAA,MAAA,QACA,GAAA,IAAA,GAAA,MACA,OAEA,EAAA,MAAA,IAAA,IAAA;iBAgBA,EAAA,UAAA,SAAA,IAAA,IAAA;AAKA,uBAJA,AAAA,MAAA,QACA,GAAA,IAAA,GAAA,MACA,KAAA,KAAA,KAAA,IAAA,IAEA,EAAA,MAAA,IAAA;iBA6BA,EAAA,WAAA,SAAA,IAAA,IAAA,IAAA;AACA,oBAAA;AAGA,oBAAA,AAAA,MAAA;AACA,kBAAA,MAAA,QAAA,MAAA,AAAA,OAAA,MAAA,WACA,MAAA,IACA,KAAA,QACA,MAAA,AAAA,OAAA,MAAA,WACA,MAAA,IACA,KAAA,KAAA,QAEA,KAAA;yBAEA,AAAA,OAAA,MAAA;AACA,wBAAA,MACA,IAAA,6BAAA;AAKA,oBAFA,KAjBA,KAiBA,QAAA,IAAA,KAjBA,KAmBA,GAAA;AACA,sBAAA,IACA,KAAA,GAAA,MAAA,MACA,KAAA,CAAA,GAAA,WACA,KAAA,CAAA,GAAA,oBACA,KAAA,GAAA,kBAAA,IACA,KAAA,GAAA,IACA,KAAA,GAAA,IACA,KA3BA,KA2BA,IAAA,GACA,KAAA,KAAA,GAAA,MAAA,KAAA,IACA,KAAA,GAAA;AAIA,sBAFA,MAAA,MAAA,IAAA,KAAA,IAAA,MAAA,KAAA,KAEA,IAAA,MAAA,IAAA,IAAA;AAGA,yBAFA,KAAA,KAAA,MAAA,IACA,KAAA,GAAA,OAAA,GAAA,KACA,KAAA,IAAA,MAAA;AAAA,4BAAA,KAAA,GAAA,OAAA,IAAA;AACA,wBAAA,MAAA,OAAA,KAAA,GAAA,MAAA,MACA,MAAA,MAAA,MAAA;;AAGA,uBAAA,KACA,KAAA,IAAA,oBAAA,MAAA,OAAA,CAAA,GAAA,qBACA,GAAA,QAAA,IAAA,OAAA,SAAA,KAAA,QAAA,MACA,OAAA,IAAA,0BAAA,OACA,MACA;;AAGA,uBAAA,IAAA,UAAA,MAAA,KAAA,IAAA,UAAA;iBAeA,EAAA,aAAA,SAAA,IAAA;AACA,oBAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IACA,KAAA,MACA,KAAA,GAAA;AAEA,oBAAA,AAAA,MAAA,QAAA,EACA,MAAA,IAAA,EAAA,KAGA,eAAA,IAAA,KAAA,AAAA,GAAA,MAAA,MAAA,GAAA,GAAA;AACA,wBAAA,MACA,IAAA,cACA,IAAA,cAAA,mBAAA,sBAAA,EAAA;AAIA,oBAAA,CAAA;AAAA,yBAAA,IAAA,EAAA;AAoBA,qBAlBA,KAAA,IAAA,EAAA,IACA,KAAA,KAAA,IAAA,EAAA,IACA,KAAA,KAAA,IAAA,EAAA,IACA,KAAA,EAAA,KAIA,KAAA,GAAA,IAAA,GAAA,SAAA,GAAA,IAAA,GACA,GAAA,EAAA,KAAA,EAAA,MAAA,KAAA,KAAA,IAAA,IAAA,KAAA,KACA,KAAA,CAAA,MAAA,IAAA,GAAA,WAAA,MAAA,IAAA,KAAA,KAAA,KAAA,IAEA,KAAA,GACA,IAAA,IAAA,GACA,KAAA,IAAA,EAAA,KAGA,GAAA,EAAA,KAAA,GAGA,KAAA,EAAA,IAAA,IAAA,GAAA,IAEA,AADA,MAAA,GAAA,KAAA,GAAA,MAAA,MACA,WAAA,OAAA;AACA,uBAAA,IACA,KAAA,IACA,KAAA,GAAA,KAAA,GAAA,MAAA,KAAA,MACA,KAAA,IACA,KAAA,GAAA,MAAA,GAAA,MAAA,KAAA,MACA,KAAA;AAeA,uBAZA,KAAA,EAAA,GAAA,MAAA,KAAA,IAAA,GAAA,IACA,KAAA,GAAA,KAAA,GAAA,MAAA,MACA,KAAA,GAAA,KAAA,GAAA,MAAA,MACA,GAAA,IAAA,GAAA,IAAA,GAAA,GAIA,KAAA,EAAA,IAAA,IAHA,MAAA,GAGA,GAAA,MAAA,IAAA,MAAA,WACA,EAAA,IAAA,IAAA,IAAA,GAAA,MAAA,IAAA,SAAA,IAAA,CAAA,IAAA,MAAA,CAAA,IAAA,KAEA,IAAA,IAEA;iBAOA,EAAA,WAAA,WAAA;AACA,uBAAA,CAAA,EAAA;iBAeA,EAAA,cAAA,SAAA,IAAA,IAAA;AAEA,uBADA,AAAA,MAAA,QAAA,EAAA,IAAA,GAAA,MACA,EAAA,MAAA,IAAA,IAAA;iBAeA,EAAA,WAAA,SAAA,IAAA;AACA,oBAAA,IACA,KAAA,MACA,KAAA,GAAA,GACA,KAAA,GAAA;AA0BA,uBAvBA,AAAA,OAAA,OACA,KACA,MAAA,YACA,KAAA,KAAA,MAAA,MAAA,OAEA,KAAA,QAIA,MADA,AAAA,MAAA,OACA,MAAA,KAAA,KAAA,KACA,EAAA,EAAA,GAAA,IAAA,MACA,EAAA,EAAA,GAAA,IAAA,IAAA,OACA,AAAA,OAAA,KAEA,EAAA,EADA,MAAA,EAAA,IAAA,EAAA,KAAA,IAAA,KAAA,GAAA,IACA,IAAA,GAAA,GAAA,OAEA,GAAA,IAAA,GAAA,EAAA,QAAA,SACA,EAAA,EAAA,EAAA,GAAA,IAAA,IAAA,MAAA,IAAA,IAAA,IAAA,QAGA,KAAA,KAAA,GAAA,EAAA,MAAA,MAAA,MAAA,MAGA;iBAQA,EAAA,UAAA,EAAA,SAAA,WAAA;AACA,uBAAA,EAAA;iBAIA,EAAA,eAAA,MAEA,AAAA,OAAA,UAAA,cAAA,AAAA,OAAA,OAAA,YAAA,YACA,GAAA,OAAA,eAAA,aAEA,EAAA,OAAA,IAAA,iCAAA,EAAA,UAGA,AAAA,MAAA,QAAA,EAAA,IAAA,KAEA;iBAoIA,UAAA,GAAA,YAAA,IAAA,AAOA,MAPA,UAOA,EAAA,UACA,EAAA,UAAA,KAIA,OACA,MAAA,AAAA,OAAA,QAAA,eAAA,OAAA,OAAA,SAGA,GAAA,YAAA;YAEA;WAAA,KAAA,GAAA,CAAA,SAAA,GAAA,GAAA,GAAA;AAAA;ACrxFA,YAAO,UAAU,EACb,aAAa,SACb,YAAY,EACR,WAAW,KACX,SAAS,OAEb,eAAe,EACX,UAAU,KACV,SAAS,KACT,SAAS,KACT,UAAU,OAEd,gBAAA,OACA,SAAS,SAAS,IAAA;AACd,gBAAI,KAAI,KAAS;AACjB,mBAAkC,AAAA,CAAA,CAAvB,MAAS,MAAM,OAAQ,IAAK,OAAc,AAAN,OAAM,IAAK,OAAc,AAAN,OAAM,IAAK,OAAc,AAAN,OAAM,IAAK,OAAO;aAE3G,UAAU,EACN,QAAQ,KACR,UAAU,UACV,MAAM,SAEV,gBAAgB,EACZ,mBAAA,MACA,aAAa,GACb,gBAAA,QAEJ,SAAS,EACL,YAAY,EACR,aAAa,GACb,gBAAA,QAEJ,qBAAqB,EACjB,QAAQ,YACR,mBAAA,MACA,UAAU,KAEd,+BAA+B,EAC3B,mBAAA,MACA,UAAU,KAEd,oBAAoB,EAChB,QAAQ,YACR,mBAAA,MACA,UAAU;WAAA,KAAA,GAAA,CAAA,SAAA,GAAA,GAAA,GAAA;AAAA;AAAA,qBAAA,IAAA,IAAA;AAAA,mBAAA,SAAA,IAAA;AAAA,kBAAA,MAAA,QAAA;AAAA,uBAAA;cAAA,OAAA,SAAA,IAAA,IAAA;AAAA,kBAAA,KAAA,IAAA,KAAA,MAAA,KAAA,OAAA,IAAA;AAAA,kBAAA;AAAA,yBAAA,IAAA,KAAA,GAAA,OAAA,aAAA,CAAA,MAAA,MAAA,GAAA,QAAA,SAAA,IAAA,KAAA,GAAA,QAAA,CAAA,MAAA,GAAA,WAAA,KAAA,KAAA;AAAA;uBAAA,IAAA;AAAA,qBAAA,MAAA,IAAA;wBAAA;AAAA,oBAAA;AAAA,wBAAA,AAAA,GAAA,UAAA,QAAA,GAAA;0BAAA;AAAA,sBAAA;AAAA,0BAAA;;;AAAA,qBAAA;cAAA,IAAA,OAAA,WAAA;AAAA,oBAAA,IAAA,UAAA;;;AC5CtB,cAAM,IAAc,EAAQ,kBACtB,IAAa,EAAQ,iBACrB,IAAU,EAAQ,cAGlB,IAAkB,CAAC,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAClE,IAAQ,EACV,SAAS,EAAC,OAAO,MAAM,UAAU,GAAiB,QAAQ,QAC1D,QAAQ,EAAC,OAAO,MAAM,UAJH,CAAC,KAAK,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,QAI1B,QAAQ,OACxD,SAAS,EAAC,OAAO,KAAM,UAAU,GAAiB,QAAQ,SAGxD,IAAiB,EACnB,aAAa,GACb,gBAAgB,GAChB,cAAA,OACA,SAAA,OACA,UAAA,IACA,kBAAA,MACA,mBAAA,OACA,gBAAA,OACA,UAAU,QACV,WAAA;AAYJ,qBAAgB,IAAA;AAAuC,gBAA7B,KAA6B,IAAA,UAAA,UAAA,AAAA,UAAA,OAAA,SAAA,UAAA,KAAZ,IAAI,KAAQ,IAAA,UAAA,SAAA,UAAA,KAAA;AAOnD,gBAN8B,AAAA,OAAnB,MAAmB,YAC1B,MAAiB,EAAQ,YAAY,MAAA,CAG7B,EAAW,eAAe;AAGlC,qBAAO;AAGX,gBAAI,KAAS,GAAe,UAAU,IAClC,KAAU,GAAe,WAAW,IAEpC,IAcR,SAAsB,IAAU,IAAgB,IAAA;AAC5C,sBAAQ,GAAe;qBACd;AAED,yBADA,KAAiB,EAAgB,IAAgB,EAAY,iCAiMzE,SAAwB,IAAU,IAAgB,IAAA;AAC9C,wBAAM,KAAkB,GAAM,mBAC1B,KAAU,OAAO,OAAO,IAAI,GAAgB,KAC5C,KAAA,QACA,KAAQ,IACR,KAAA,CAAA,CAAY,GAAQ,eAAA,CAAA,CAAiB,GAAQ,gBAAgB,GAAQ,SACrE,KAAW,GAAe,oBAAoB,GAAgB,UAC9D,KAAS,GAAe,kBAAkB,GAAgB;AAE1D,uBAAQ,kBACR,MAAQ;AAGK,oBAAb,OAAa,WACb,MAAmB,KAAQ,KAAS;AAGxC,wBAAI,KAAS,EAAa,EACtB,UAAA,IACA,gBAAA,IACA,OAAA,IACA,kBAAA;AAGa,oBAAb,OAAa,YAET,MADA,GAAS,SAAS,KAA0B,AAArB,GAAQ,aAAa,SACtC,IAAA,OAAO,IAAP,OAAe,IAAf,OAAwB,GAAO,MAAM,MAElC,KAAS,KAAQ;AAI7B,0BAAyB,AAAb,OAAa,aAE1B,MAAS,KADT,MAAQ,KAAU,KAAK,MACG;AAG9B,2BAAO;oBArOuB,IAAU,IAAgB;qBAE/C;AAED,yBADA,KAAiB,EAAgB,IAAgB,EAAY,mCAmKzE,SAA0B,IAAU,IAAgB,IAAO,IAAA;AACvD,wBAAI,KAAe,GAAe,cAE9B,KAAS,EAAa,EACtB,UAAU,GAAyB,MAAlB,GAAS,SAC1B,gBAAA,IACA,OAAA,OAEA,KAAU,OAAO,OAAO,IAAI,GAAgB;AAEhD,wBAAI;AACA,6BAAA,IAAA,OAAW,GAAQ,iBAAiB,MAAM,IAA1C,OAA+C;AAGnD,2BAAA,GAAA,OAAU,IAAV,OAAmB,GAAQ,iBAAiB,MAAM,IAAlD;oBAhLgC,IAAU,IAAgB,GAAa;qBAE9D;AAED,yBADA,KAAiB,EAAgB,IAAgB,EAAY,6BAkGrD,IAjGU,IAiGgB,IAjGU,GAiGH,IAjGgB,IAkG7D,IADsB,KAjGU,IAkGV,QAAQ,UAC9B,IAAW,EAAM,IAFoC,IAInC,EAAmB,EAAS,QAAQ,EAAS,UAAU,EAAS,QAAjF,IAJoD,EAIpD,OAAO,IAJ6C,EAI7C,QACR,IAAS,EAAa,EACtB,UAAU,EAAO,IACjB,gBAAA,GACA,OAAA,GACA,UAAU,EAAM,+BAEhB,IAAgB,EAAM,wBAC1B,GAAA,OAAU,GAAV,OAAmB,EAAc,SAAS,MAAM,IAAhD,OAAqD;qBA5G5C;AAED,yBADA,KAAiB,EAAgB,IAAgB,EAAY,6BA2IrD,IA1IU,IA2ItB,IAAQ,KAAK,MAAM,EAAS,SAAS,KAAK,KAC1C,KAAU,KAAK,MAAO,GAAS,SAAkB,KAAR,IAAa,MAAO,KAC7D,IAAU,KAAK,MAAM,EAAS,SAAkB,KAAR,IAAa,KAAiB,KAAV,KAChE,GAAA,OAAU,GAAV,KAAA,OAAoB,KAAU,KAAM,MAAM,IAA1C,OAA+C,IAA/C,KAAA,OAA2D,IAAU,KAAM,MAAM,IAAjF,OAAsF;qBA7I7E;AAED,yBADA,KAAiB,EAAgB,IAAgB,EAAY,gCAoHlD,KAnHU,IAmHA,KAnHU,IAoHnC,KADyC,MAnHU,GAoHjC,kBAClB,KAAU,OAAO,OAAO,IAAI,GAAgB,KAE5C,IAAS,EAAa,EACtB,UAAA,IACA,gBAAA,IACA,OAAA,OAEA,IAAU,GAAU,GAAS,SAEjC,GAAA,OAAU,GAAV,OAAmB,GAAQ,iBAAiB,MAAM,IAAlD,OAAuD;qBA7H9C;;AAED,yBAAO,EAAa,EAChB,UAAA,IACA,gBAAA,IACA,QAAA;;AA6GhB,kBAAuB,IAAU,IAAgB,IACzC,IACA,IAEA,GAKA;AAWR,kBAAoB,GACZ,GACA,IACA;AA/CR,kBAAoB,GAAU,GAAgB,GAAO,GAC7C,GACA,GAFqD,GAIpD,GAAO,GACR,GAMA;cAtIsB,IAAU,IAAgB;AAGpD,mBADA,IADA,KAA8B,KAAR,KACS;;AAsFnC,qBAA4B,IAAO,IAAU,IAAA;AACzC,gBAAI,KAAS,GAAS,IAClB,KAAM,KAAK,IAAI;AAEnB,gBAAW,MAAP,IAAc;AACd,uBAAS,IAAQ,GAAG,IAAQ,GAAS,QAAA,EAAU,GAAO;AAClD,oBAAI,KAAM,KAAK,IAAI,IAAO,IACtB,KAAM,KAAK,IAAI,IAAO,IAAQ;AAElC,oBAAW,MAAP,MAAc,KAAM,IAAK;AACzB,uBAAS,GAAS,IAClB,MAAgB;AAChB;;;AAKJ,qBAAW,GAAS,MACpB,OAAgB,KAAK,IAAI,IAAO,GAAS,SAAS,IAClD,KAAS,GAAS,GAAS,SAAS;;AAI5C,mBAAO,EAAC,OAAA,IAAO,QAAA;;AAiOnB,qBAAgB,IAAA;AAEZ,qBADI,KAAS,IACJ,KAAI,GAAG,KAAI,IAAQ;AACxB,oBAAU;AAGd,mBAAO;;AAkDX,uBAAiB,IAAO,IAAA;AACpB,mBAAA,AAAI,GAAM,WAAW,QAAQ,SAA7B,KAxCJ,SAAsB,IAAO,IAAA;AACzB,kBAAI,KAAS,GAAM,YADiB,KAAA,EAGlB,GAAO,MAAM,MAHK,IAG/B,KAH+B,GAAA,IAGzB,IAHyB,GAAA,IAAA,KAAA,EAKE,GAAK,MAAM,MALb,IAK/B,KAL+B,GAAA,IAAA,IAAA,GAAA,IAKf,IAAA,AALe,MAKf,SAAW,KALI;AAOpC,kBAAW,IAAA,CAAN;AACD,qBAAS,KAAiB,IAAW,EAAO,IAAM,EAAS;mBACxD;AACH,oBAAI,IAAS;AAGT,oBAAA,CADC,KAAiB,IACZ,KAAA,OAAQ,KAER,IAAA,OAAO;AAGjB,oBAAI,IAAU,GAAA,CAAQ,IAAM,KAAK,KAAK,IAAI,MAAkB,GAAU,OAAO,GAAG;AAC5E,kBAAO,SAAS,MAChB,MAAU,EAAO,KAAY,EAAO,UAExC,KAAS,IAAS;;AAOtB,qBAJW,IAAA,CAAN,KAAuB,IAAZ,MACZ,OAAM,IAAA,OAAQ,EAAO,OAGlB;cAYiB,IAAO,MAGvB,MAAK,MAAA,CAAM,GAAA,OAAI,IAAJ,MAAA,OAAc,OAAgB,KAAK,IAAI,IAAI,KAAa,QAAQ;;AA+MvF,qBAAA,IAAA;AAA6H,gBAAtG,KAAsG,GAAtG,UAAU,KAA4F,GAA5F,gBAA4F,KAAA,GAA5E,OAAA,KAAA,AAA4E,OAA5E,SAAQ,IAAoE,IAAvD,IAAuD,GAAvD,kBAAuD,KAAA,GAArC,UAAA,KAAA,AAAqC,OAArC,SAAW,GAAM,oBAAoB,IACrH,IAAQ,GAAS;AAErB,gBAAc,AAAV,MAAU,KAAK,GAAM;AACrB,qBAAO,GAAM;AAGjB,gBAAA,CAAK,SAAS;AACV,qBAAO,EAAM;AAGjB,gBAtTJ,GAA6B,GAAqC,GAA9B,IAA8B,GACzD,GAAc,GACf,GAoTA,IAAU,OAAO,OAAO,IAAI,GAAgB,IAAU,KAEtD,IAAc,EAAQ,aACtB,IAA0B,IAAc,IAAI,EAAQ,gBACpD,IAAyB,EAAQ,wBACjC,IAAe,EAAQ,cACvB,IAAA,CAAA,CAAY,KAAA,CAAA,CAAiB,KAAgB,EAAQ,SAGrD,IAAoB,IAAA,KAAoB,KAAA,AAAW,GAAe,aAA1B,SAAmD,IAAI,EAAQ,UACvG,IAAA,CAAmB,KAAA,CAAuB,GAAe,qBAAtC,SAAsC,AAAiC,MAAjC,KAA4D,EAAQ,mBAC7H,KAAe,EAAQ,cACvB,KAAoB,EAAQ,mBAC5B,KAAiB,EAAQ,gBACzB,KAAW,EAAQ,UACnB,IAAY,EAAQ,WACpB,IAAc,EAAQ,aAEtB,IAAe;AAEnB,gBAAI,GAAS;AACT,kBAAI,IAvXZ,SAAA,IAAA;AAAuG,oBAA9E,KAA8E,GAA9E,OAAO,KAAuE,GAAvE,cAAc,KAAyD,GAAzD,eAAyD,KAAA,GAA1C,gBAAA,KAAA,AAA0C,OAA1C,UAA0C,IAAA,KAAA,GAAlB,aAAA,KAAA,AAAkB,OAAlB,SAAc,IAAI,IAC/F,KAAe,IACf,KAAM,KAAK,IAAI,KACf,KAAA;AA0BJ,oBAxBK,MAAO,KAAK,IAAI,IAAI,OAAA,CAAQ,MAAmC,AAAjB,OAAiB,aAEhE,MAAe,GAAc,UAC7B,MAAgB,KAAK,IAAI,IAAI,OACrB,KAAM,KAAK,IAAI,IAAI,OAAO,MAAO,KAAK,IAAI,IAAI,MAAA,CAAO,MAAmC,AAAjB,OAAiB,YAEhG,MAAe,GAAc,SAC7B,MAAgB,KAAK,IAAI,IAAI,MACrB,KAAM,KAAK,IAAI,IAAI,MAAM,MAAO,KAAK,IAAI,IAAI,MAAA,CAAO,MAAmC,AAAjB,OAAiB,YAE/F,MAAe,GAAc,SAC7B,MAAgB,KAAK,IAAI,IAAI,MACrB,MAAM,KAAK,IAAI,IAAI,MAAM,MAAO,KAAK,IAAI,IAAI,MAAA,CAAO,MAAmC,AAAjB,OAAiB,eAE/F,MAAe,GAAc,UAC7B,MAAgB,KAAK,IAAI,IAAI,KAK7B,MACA,MAHgB,MAAiB,MAAM,MAGR,KAG/B,IAAa;AACb,sBAAI,KAAiB,GAAM,WAAW,MAAM,KAAK;AACjD,uBAAoB,KAAK,IAAI,KAAc,GAAe,QAAQ;;AAGtE,uBAAO,EAAC,OAAA,IAAO,cAAA,IAAc,mBAAA;gBAqVC,EACtB,OAAA,GACA,cAAA,GACA,eAAe,GAAM,wBACrB,gBAAgB,IAChB,aAAA;AAGJ,kBAAQ,EAAK,OACb,KAAgB,EAAK,cAEjB,KACA,KAAoB,EAAK;;AAIjC,gBAAI,GAAa;AACb,kBAAI,IA5ViB,KAA7B,KA4VsC,EAC1B,OAAA,GACA,yBAAA,KA9ViB,OAAqC,IAAA,EAA9B,yBAAA,KAAA,AAA8B,MAA9B,SAA0B,IAAI,GAAA,IAAA,EAC5B,EAAM,gBAAgB,MAAM,MADA,IACzD,IADyD,EAAA,IAC3C,IAD2C,EAAA,IAE1D,IAAA,CAAU,GAET,MAOsB,IAEA,MACvB,MAAkB,KAAK,IAAI,IAAI,KAHR,IAKvB,IAA6B,KAD7B,KAAA,CAAe,IAAe,MAJP,MAKT,IAAA,OAAuB,KAAgB,IAGlD,EACH,OAAO,GACP,cAAY,IAAA,OAAM;AA4UlB,kBAAQ,EAAK,OACb,IAAe,EAAK,eAAe;;AAGvC,gBAhHgB,GAAQ,GAAO,GAgH3B,IA5PR,SAA8B,IAAQ,IAAO,IAAkB,IAAW,IAAA;AACtE,kBAAA,AAAI,OAAJ;AACI,uBAAO;AAGX,kBAAI,KAAS,IAAQ,IAAO,KALgD,KAAA,EAMxB,GAAO,WAAW,MAAM,MANA,IAMvE,KANuE,GAAA,IAAA,KAAA,GAAA,IAMhD,KAAA,AANgD,OAMhD,SAAkB,KAN8B;AAQ5E,kBAAI,GAAgB,MAAM,WAAY,OAAoB;AACtD,uBAAO;AAGX,kBAAI,KAAoB,GAAgB,MAAM;AAC9C,qBAAI,MAAQ,KACR,GAAA,OAAU,IAAV,KAAA,OAAmC,GAAgB,WAAW,MAAM,GAAG,GAAkB,UAGtF,GAAO;cA2OoB,EAAM,YAAY,GAAO,GAAkB,GAAmB;AAYhG,mBAVA,IAzKJ,SAA2B,IAAQ,IAAO,IAAmB,IAAO,IAAA;AAChE,kBAAI,KAAa,GAAM,qBACnB,KAAoB,GAAW;AACnC,mBAAmB,MAAoB,GAAW;AAClD,kBAAI,KAAgB,GAAW,iBAAiB,GAE5C,KAAS,GAAO,YAChB,KAAiB,GAAO,MAAM,KAAK,IACnC,KAAW,GAAO,MAAM,KAAK;AAwBjC,qBAtBI,MACI,MAAQ,KAER,MAAiB,GAAe,MAAM,KAtClD,SAA8B,IAAa,IAAA;AAGvC,yBAFI,KAAS,IACT,KAAU,GACL,KAAI,IAAiB,IAAJ,IAAO;AACzB,yBAAY,MACZ,IAAO,QAAQ,KACf,KAAU,IAEd;AAGJ,uBAAO;gBA8B0D,GAAe,QAAQ,IAClD,QAAQ,SAAC,IAAU,IAAA;AACjD,qBAAiB,GAAe,MAAM,GAAG,KAAW,MAAS,KAAoB,GAAe,MAAM,KAAW;kBAGjH,KAAQ,KAER,MAAc,IAAA,OAAO,OAOzB,KAHC,KAGQ,KAAiB,KAAmB,KAFpC;cA4Ib,IAhOJ,SAAoC,IAAQ,IAAO,IAAwB,IAAA;AACvE,kBAAI,KAAS,IADqE,KAAA,EAEnC,GAAO,WAAW,MAAM,MAFW,IAE7E,KAF6E,GAAA,IAEtD,KAFsD,GAAA;AAIlF,kBAAI,GAAsB,MAAM,YAAY;AACxC,uBAAK,KAIL,GAAA,OAAU,GAAsB,QAAQ,KAAK,KAA7C,KAAA,OAAoD,MAHzC,GAAsB,QAAQ,KAAK;AAMlD,kBAAI,GAAsB,SAAS;AAE/B,yBADI,KAAe,KAAY,GAAsB,QAC5C,KAAI,GAAG,KAAI,IAAc;AAC9B,uBAAM,IAAA,OAAO;AAIrB,qBAAO,GAAO;cA6MsB,GAAQ,GAAO,GAAwB,IACxC,GAAO,IAAmB,IAAO,IAEhE,MAAW,MACX,KAA4B,IAAQ,IAGpC,MAAa,IAAQ,MAxHT,KAyHQ,GAzHO,IAyHQ,IAAnC,IAxHU,AADU,KAyHQ,OAxHlB,IACH,IAGK,AAAA,CAAX,KAAW,IACL,EAAO,QAAQ,KAAK,MAGnB,IAAR,IACA,IAAA,OAAW,KAGE,AAAb,MAAa,SACN,IAGX,IAAA,OAAW,EAAO,QAAQ,KAAK,KAA/B,OA2GO;;AAUX,qBAAyB,IAAgB,IAAA;AACrC,gBAAA,CAAK;AACD,qBAAO;AAGX,gBAAI,KAAO,OAAO,KAAK;AACvB,mBAAoB,AAAhB,GAAK,WAAW,KAAiB,AAAZ,GAAK,OAAO,WAC1B,KAGJ;;AAGX,YAAO,UAAU,SAAC,IAAA;AAAD,mBAAa,EAC1B,QAAQ,WAAA;AAAA,uBAAA,KAAA,UAAA,QAAI,KAAJ,IAAA,MAAA,KAAA,KAAA,GAAA,KAAA,IAAA;AAAI,mBAAJ,MAAA,UAAA;AAAA,qBAAa,EAAM,MAAA,QAAI,GAAV,OAAA,CAAgB;eACrC,aAAa,WAAA;AAAA,uBAAA,KAAA,UAAA,QAAI,KAAJ,IAAA,MAAA,KAAA,KAAA,GAAA,KAAA,IAAA;AAAI,mBAAJ,MAAA,UAAA;AAAA,qBAjnBjB,SAAqB,IAAA;AACjB,oBAAI,KAAO,EAAM;AACjB,uBAAO,EAAmB,GAAS,QAAQ,GAAK,UAAU,GAAK,OAAO;gBA+mBjC,MAAA,QAAI,GAAf,OAAA,CAAqB;eAC/C,mBAAmB,WAAA;AAAA,uBAAA,KAAA,UAAA,QAAI,KAAJ,IAAA,MAAA,KAAA,KAAA,GAAA,KAAA,IAAA;AAAI,mBAAJ,MAAA,UAAA;AAAA,qBA9nBvB,SAA2B,IAAA;AACvB,oBAAI,KAAO,EAAM;AACjB,uBAAO,EAAmB,GAAS,QAAQ,GAAK,UAAU,GAAK,OAAO;gBA4nBrB,MAAA,QAAI,GAArB,OAAA,CAA2B;eAC3D,oBAAoB,WAAA;AAAA,uBAAA,KAAA,UAAA,QAAI,KAAJ,IAAA,MAAA,KAAA,KAAA,GAAA,KAAA,IAAA;AAAI,mBAAJ,MAAA,UAAA;AAAA,qBA3oBxB,SAA4B,IAAA;AACxB,oBAAI,KAAO,EAAM;AACjB,uBAAO,EAAmB,GAAS,QAAQ,GAAK,UAAU,GAAK,OAAO;gBAyoBnB,MAAA,QAAI,GAAtB,OAAA,CAA4B;eAC7D,iBAAA;;WAAA,EAAA,iBAAA,GAAA,aAAA,GAAA,gBAAA,OAAA,GAAA,CAAA,SAAA,GAAA,GAAA,GAAA;AAAA;AC9uBJ,cAAM,IAAO,EAAQ,YACf,IAAa,EAAQ,iBACrB,IAAU,EAAQ,cAEpB,IAAQ,IAER,IAAA,QACA,IAAY,IAEZ,IAAa,MAEb,IAAiB;AAErB,qBAAwB,IAAA;AAAO,gBAAqB;;AAEpD,uBAAS;AAAwB,mBAAO,EAAU;;AAOlD,YAAM,YAAY,WAAA;AAAA,mBAAM,OAAO,OAAO,IAAI;aAW1C,EAAM,kBAAkB,WAAA;AAAA,mBAAM;aAO9B,EAAM,kBAAkB,WAAA;AAAA,mBAAM,IAAsB;aAOpD,EAAM,uBAAuB,WAAA;AAAA,mBAAM,IAAsB;aAOzD,EAAM,oBAAoB,WAAA;AAAA,mBAAM,IAAsB;aAOtD,EAAM,iBAAiB,WAAA;AAAA,mBAAM,IAAsB;aAYnD,EAAM,kBAAkB,WAAA;AAAA,mBAAM,OAAO,OAAO,IAAI,IAAsB,UAAU;aAQhF,EAAM,8BAA8B,WAAA;AAAA,mBAAM,OAAO,OAAO,IAAI,EAAM,mBAAmB,IAAsB;aAQ3G,EAAM,2BAA2B,WAAA;AAAA,mBAAM,OAAO,OAAO,IAAI,EAAM,mBAAmB,IAAsB;aAQxG,EAAM,iCAAiC,WAAA;AAAA,mBAAM,OAAO,OAAO,IAAI,EAAM,mBAAmB,IAAsB;aAQ9G,EAAM,+BAA+B,WAAA;AAAA,mBAAM,OAAO,OAAO,IAAI,EAAM,mBAAmB,IAAsB;aAQ5G,EAAM,2BAA2B,WAAA;AAAA,mBAAM,OAAO,OAAO,IAAI,EAAM,mBAAmB,IAAsB;aAOxG,EAAM,cAAc,SAAC,IAAA;AACjB,iBAAS,EAAQ,YAAY,KACzB,EAAW,eAAe,OAC1B,KAAiB;aAazB,EAAM,gBAAgB,WAAA;AAAA,mBAAM;aAO5B,EAAM,gBAAgB,SAAC,IAAA;AAAD,mBAAY,IAAgC,AAAA,OAAZ,MAAY,WAAW,KAAS;aAOtF,EAAM,gBAAgB,WAAA;AAAA,mBAAqB,AAAf,MAAe;aAe3C,EAAM,eAAe,SAAC,IAAA;AAClB,gBAAI,IAAK;AACL,kBAAI,EAAU;AACV,uBAAO,EAAU;AAErB,oBAAM,IAAI,MAAJ,gBAAA,OAA0B,IAA1B;;AAGV,mBAAO;aAYX,EAAM,mBAAmB,SAAC,IAAA;AAA8B,gBAAxB,KAAwB,IAAA,UAAA,UAAA,AAAA,UAAA,OAAA,UAAA,UAAA;AACpD,gBAAA,CAAK,EAAW,iBAAiB;AAC7B,oBAAM,IAAI,MAAM;AAGpB,cAAU,GAAK,eAAe,IAE1B,MACA,EAAe,GAAK;aAc5B,EAAM,cAAc,SAAC,IAAA;AAAwC,gBAAnC,KAAmC,IAAA,UAAA,UAAA,AAAA,UAAA,OAAA,SAAA,UAAA,KAArB,EAAK;AACzC,gBAAA,CAAK,EAAU,KAAM;AACjB,kBAAI,KAAS,GAAI,MAAM,KAAK,IAExB,KAAsB,OAAO,KAAK,GAAW,KAAK,SAAA,IAAA;AAClD,uBAAO,GAAK,MAAM,KAAK,OAAO;;AAGlC,qBAAK,EAAU,MAAA,KAKf,EAAe,MAAA,KAJX,EAAe;;AAQvB,cAAe;aAGnB,EAAM,iBAAiB,IACvB,IAAqB,EAAK,aAE1B,EAAO,UAAU;WAAA,EAAA,WAAA,GAAA,aAAA,GAAA,gBAAA,OAAA,GAAA,CAAA,SAAA,GAAA,GAAA,GAAA;AAAA;AChNjB,YAAO,UAAU,SAAC,IAAA;AAAD,mBAAa,EAC1B,qBAAqB,SAAC,IAAA;AAAD,qBAhBU,IAgB0B,IAAA,KAAN,GAf9C,QAAQ,SAAC,IAAA;AACV,oBAAI,KAAA;AACJ,oBAAA;AACI,uBAAO,EAAO,gBAAA,OAAiB;yBAC1B,IAAP;AACE,0BAAQ,MAAR,mBAAA,OAAiC,IAAjC;;AAGA,sBACA,EAAO,iBAAiB;;AAVpC,kBAAmC;;;WAAA,KAAA,GAAA,CAAA,SAAA,GAAA,GAAA,GAAA;AAAA;ACPnC,cAAM,IAAY,EAAQ;AAgC1B,qBAAkB,IAAG,IAAO,IAAA;AACxB,gBAAI,IAAQ,IAAI,EAAU,GAAE,SACxB,IAAa;AASjB,mBAPI,GAAO,SAAS,OAChB,KAAa,GAAM,SAGvB,IAAa,IAAI,EAAU,IAE3B,GAAE,SAAS,EAAM,MAAM,GAAY,YAC5B;;AAiFX,YAAO,UAAU,SAAA,GAAA;AAAM,mBAAK,EACxB,KAAK,SAAC,IAAG,IAAA;AAAJ,qBAnHO,IAmHc,IAnHP,IAmHc,GAlH7B,KAAQ,IAAI,EADP,MAmHc,IAlHK,SACxB,IAAa,GAEb,EAAO,SAAS,MAChB,KAAa,EAAM,SAGvB,IAAa,IAAI,EAAU,IAE3B,GAAE,SAAS,GAAM,KAAK,GAAY,YAC3B;AAXX,kBAAa,IAAG,GAAO,GACf,IACA;eAkHJ,UAAU,SAAC,IAAG,IAAA;AAAJ,qBAAc,EAAS,IAAG,IAAO;eAC3C,UAAU,SAAC,IAAG,IAAA;AAAJ,qBAzEO,IAyEmB,IAzEZ,IAyEmB,GAxEvC,KAAQ,IAAI,EADF,MAyEmB,IAxEL,SACxB,IAAa,GAEb,EAAO,SAAS,MAChB,KAAa,EAAM,SAGvB,IAAa,IAAI,EAAU,IAE3B,GAAE,SAAS,GAAM,MAAM,GAAY,YAC5B;AAXX,kBAAkB,IAAG,GAAO,GACpB,IACA;eAwEJ,QAAQ,SAAC,IAAG,IAAA;AAAJ,qBApDO,IAoDiB,IApDV,IAoDiB,GAnDnC,KAAQ,IAAI,EADJ,MAoDiB,IAnDD,SACxB,IAAa,GAEb,EAAO,SAAS,MAChB,KAAa,EAAM,SAGvB,IAAa,IAAI,EAAU,IAE3B,GAAE,SAAS,GAAM,UAAU,GAAY,YAChC;AAXX,kBAAgB,IAAG,GAAO,GAClB,IACA;eAmDJ,KAAK,SAAC,IAAG,IAAA;AAAJ,qBA/BK,KA+Ba,IA9BnB,IADS,IA+Ba,IAAO,EA5BtB,SAAS,MAChB,KAAQ,EAAM,SAGlB,GAAE,SAAS,GACJ;AARX,kBAAc,IAAG,GACT;eA+BJ,YAAY,SAAC,IAAG,IAAA;AAAJ,qBAbO,KAaqB,IAXxC,EADI,IADsB,KAaqB,GAAV,GAZhB,SACL,IAAO,IAEhB,KAAK,IAAI,EAAM;AAJ1B,kBAAuB,IAAO,GACtB;;;WAAA,EAAA,gBAAA,MAAA,GAAA,CAAA,SAAA,GAAA,GAAA,GAAA;AAAA;AAAA,qBAAA,IAAA,IAAA;AAAA,qBAAA,KAAA,GAAA,KAAA,GAAA,QAAA,MAAA;AAAA,kBAAA,KAAA,GAAA;AAAA,iBAAA,aAAA,GAAA,cAAA,OAAA,GAAA,eAAA,MAAA,WAAA,MAAA,IAAA,WAAA,OAAA,OAAA,eAAA,IAAA,GAAA,KAAA;;;ACtHR,cAEM,IAAc,EAAQ,kBACtB,IAAY,EAAQ,iBACpB,IAAS,EAAQ,aAAa,IAC9B,IAAc,EAAQ,mBACxB,IAAY,EAAQ,gBAAgB,IACpC,IAAa,EAAQ,kBAAkB,IACrC,IAAU,EAAQ,cAElB,IAAA,WAAA;AACF,wBAAY,IAAA;AAAA,eAAA,SAAA,IAAA,IAAA;AAAA,oBAAA,CAAA,eAAA;AAAA,wBAAA,IAAA,UAAA;gBAAQ,MAAA,KAChB,KAAK,SAAS;;AAAA,gBAAA,IAAA,IAAA;AAAA,mBAAA,KAAA,IAAA,MAAA,CAAA,EAAA,KAAA,SAAA,OAAA,WAAA;AAGR,qBAAO,EAAO,KAAK;iBAAA,EAAA,KAAA,UAAA,OAAA,WAAA;AAET,kBAAb,KAAa,IAAA,UAAA,UAAA,AAAA,UAAA,OAAA,SAAA,UAAA,KAAJ;AAAM,qBAAO,EAAU,OAAO,MAAM;iBAAA,EAAA,KAAA,kBAAA,OAAA,SAErC,IAAA;AAMX,qBALsB,AAAA,OAAX,MAAW,YAClB,MAAS,EAAQ,YAAY,MAEjC,MAAS,EAAU,gBAAgB,IAAQ,EAAY,iCAChD,SAAS,YACT,EAAU,OAAO,MAAM;iBAAA,EAAA,KAAA,cAAA,OAAA,WAAA;AAGV,kBAAb,KAAa,IAAA,UAAA,UAAA,AAAA,UAAA,OAAA,SAAA,UAAA,KAAJ;AAEhB,qBADA,GAAO,SAAS,QACT,EAAU,OAAO,MAAM;iBAAA,EAAA,KAAA,mBAAA,OAAA,WAAA;AAGd,qBAAO,EAAU,kBAAkB;iBAAA,EAAA,KAAA,oBAAA,OAAA,WAAA;AAElC,qBAAO,EAAU,mBAAmB;iBAAA,EAAA,KAAA,aAAA,OAAA,WAAA;AAE3C,qBAAO,EAAU,YAAY;iBAAA,EAAA,KAAA,cAAA,OAAA,SAEhC,IAAA;AAAS,qBAAO,EAAW,WAAW,MAAM;iBAAA,EAAA,KAAA,OAAA,OAAA,SAEnD,IAAA;AAAS,qBAAO,EAAW,IAAI,MAAM;iBAAA,EAAA,KAAA,YAAA,OAAA,SAEhC,IAAA;AAAS,qBAAO,EAAW,SAAS,MAAM;iBAAA,EAAA,KAAA,YAAA,OAAA,SAE1C,IAAA;AAAS,qBAAO,EAAW,SAAS,MAAM;iBAAA,EAAA,KAAA,UAAA,OAAA,SAE5C,IAAA;AAAS,qBAAO,EAAW,OAAO,MAAM;iBAAA,EAAA,KAAA,OAAA,OAAA,SAE3C,IAAA;AAAS,qBAAO,EAAW,IAAI,MAAM,EAAe;iBAAA,EAAA,KAAA,SAAA,OAAA,WAAA;AAE9C,qBAAO,KAAK;iBAAA,EAAA,KAAA,WAAA,OAAA,WAAA;AAEV,qBAAO,KAAK;qBAAA,EAAA,GAAA,WAAA,KAAA,MAAA,EAAA,IAAA,KAAA;;AAS5B,qBAAwB,IAAA;AACpB,gBAAI,KAAS;AASb,mBARI,EAAO,SAAS,MAChB,KAAS,GAAM,SACS,AAAA,OAAV,MAAU,WACxB,KAAS,EAAO,SAAS,MAClB,MAAM,OACb,MAAS,MAGN;;AAGX,qBAAgB,IAAA;AACZ,mBAAO,IAAI,EAAO,EAAe;;AAGrC,YAAO,UA/ES,SAiFhB,EAAO,WAAW,SAAS,IAAA;AACvB,mBAAO,cAAkB;aAO7B,EAAO,WAAW,EAAY,iBAC9B,EAAO,mBAAmB,EAAY,kBACtC,EAAO,cAAc,EAAY,aACjC,EAAO,YAAY,EAAY,WAC/B,EAAO,eAAe,EAAY,cAClC,EAAO,aAAa,EAAY,eAChC,EAAO,gBAAgB,EAAY,iBACnC,EAAO,cAAc,EAAY,aACjC,EAAO,wBAAwB,EAAY,8BAC3C,EAAO,WAAW,EAAU,UAC5B,EAAO,sBAAsB,EAAO,qBACpC,EAAO,WAAW,EAAY,UAE9B,EAAO,UAAU;WAAA,EAAA,gBAAA,GAAA,iBAAA,GAAA,aAAA,GAAA,kBAAA,GAAA,aAAA,GAAA,kBAAA,GAAA,gBAAA,OAAA,GAAA,CAAA,SAAA,GAAA,GAAA,GAAA;AAAA;AC4KjB,YAAO,UAAU,EACb,aAxBJ,SAAqB,IAAA;AAAqB,gBApPrB,IAAQ,IACrB,GAgBc,GAAQ,GACtB,GA0F0B,GAC1B,GAc6B,GAE7B,GA8BsB,GAaH,GAAQ,GAmBJ,GAAQ,GAzGC,GAaH,GAyHd,GAAQ,GAeC,GAaH,IAAa,IAAA,UAAA,UAAA,AAAA,UAAA,OAAA,SAAA,UAAA,KAAJ;AAClC,mBAAsB,AAAA,OAAX,MAAW,WACX,KAtPc,MAyPI,GAA7B,KAxPI,KADa,MAyPI,IAxPF,MAAM,iBAErB,IAAO,SAAS,EAAM,IACf,GAAO,MAAM,EAAM,GAAG,WAG1B,IAUmB,IAyOI,GAxNlC,SAAqB,IAAQ,IAAA;AACzB,kBAAA,AAAI,GAAO,QAAQ,SAAnB,IAAA;AAKA,oBAAA,AAAI,GAAO,QAAQ,SAAnB;AAKA,yBAAA,AAAI,GAAO,QAAQ,UAAnB,KACI,IAAO,SAAS,QAChB,GAAO,OAAO,aAAA,AAId,GAAO,QAAQ,SAJD,KAKd,IAAO,SAAS,QAChB,GAAO,OAAO,YAAA,AAKd,GAAO,QAAQ,SALD,KAMd,IAAO,SAAS,QAChB,GAAO,OAAO,aAAA,AAKd,GAAO,QAAQ,SALD,KAKC,AAKf,GAAO,QAAQ,SALA,MAMf,IAAO,SAAS,aALhB,GAAO,SAAS;AAzBhB,mBAAO,SAAS;;AALhB,mBAAO,SAAS;cAsNpB,KAxOI,KADc,KAyOI,IAxOH,MAAM,iBAErB,GAAO,UAAU,EAAM,IAEhB,EAAO,MAAM,GAAA,CAAI,EAAM,GAAG,WAG9B,GAkOa,IA/IU,IAgJL,GA/IrB,KA+Ia,GA/IE,MAAM,oBAGrB,GAAO,cAAA,CAAe,EAAM,KAWC,IAkIL,GAhIxB,KAgIgB,GAjIQ,MAAM,KAAK,GACZ,MAAM,UAE7B,GAAO,iBAAiB,EAAM,GAAG,SA2EzC,SAAqC,IAAQ,IAAA;AACzC,kBAAA,AAAI,GAAO,QAAQ,SAAnB,IAAgC;AAC5B,oBAAI,KAAiB,GAAO,MAAM,KAAK;AACvC,mBAAO,yBAAA,AAAyB,GAAe,QAAQ,SAAhD;;cAiDiB,IAAQ,IAnGV,IAoGL,GAAA,AAAR,GAnGF,QAAQ,SAmGE,MAlGjB,GAAO,UAAA,OAWoB,IAwFL,GAAA,AAxFH,KAwFL,IAvFP,QAAQ,SAuFO,KAtFtB,EAAO,eAAe,aAAA,AACf,EAAO,QAAQ,SADA,KAEtB,EAAO,eAAe,YAAA,AACf,EAAO,QAAQ,SADA,KAEtB,EAAO,eAAe,YAAA,AACf,EAAO,QAAQ,SADA,MAEtB,GAAO,eAAe,aAtC9B,SAAuB,IAAQ,IAAA;AAC3B,kBAAI,KAAW,GAAO,MAAM,KAAK;AACjC,kBAAI,IAAU;AACV,oBAAI,KAAQ,GAAS,MAAM;AACvB,sBACA,IAAO,WAAW,GAAM,GAAG;;cAkHrB,IAAQ,IAtEa,IAuEL,GAvEH,KAuEL,IAtEX,MAAM,WACb,EAAO,mBAAA,OACA,EAAO,MAAM,SACpB,GAAO,mBAAA,QA7GyB,IAiLL,GAAA,AAAR,GAhLZ,QAAQ,SAgLY,MA/K3B,GAAO,oBAAA,OAWsB,IAqKL,GAAA,AAAR,GApKT,QAAQ,SAoKS,MAnKxB,GAAO,iBAAA,OAuHgB,IA6CL,GA7CH,KA6CL,IA5CH,MAAM,qBACb,GAAO,WAAW,gBAElB,EAAO,MAAM,YACb,GAAO,WAAW,SAUM,IA+BL,GAAR,GA9BJ,MAAM,UACb,GAAO,YAAA,OA+BJ;;WAAA,KAAA,GAAA,CAAA,SAAA,GAAA,GAAA,GAAA;AAAA;AC/QX,cAAM,IAAc,CAChB,EAAC,KAAK,OAAO,QAAQ,KAAK,IAAI,MAAM,MACpC,EAAC,KAAK,MAAM,QAAQ,KAAK,IAAI,KAAM,MACnC,EAAC,KAAK,OAAO,QAAQ,KAAK,IAAI,MAAM,MACpC,EAAC,KAAK,MAAM,QAAQ,KAAK,IAAI,KAAM,MACnC,EAAC,KAAK,OAAO,QAAQ,KAAK,IAAI,MAAM,MACpC,EAAC,KAAK,MAAM,QAAQ,KAAK,IAAI,KAAM,MACnC,EAAC,KAAK,OAAO,QAAQ,KAAK,IAAI,MAAM,MACpC,EAAC,KAAK,MAAM,QAAQ,KAAK,IAAI,KAAM,MACnC,EAAC,KAAK,OAAO,QAAQ,KAAK,IAAI,MAAM,MACpC,EAAC,KAAK,MAAM,QAAQ,KAAK,IAAI,KAAM,MACnC,EAAC,KAAK,OAAO,QAAQ,KAAK,IAAI,MAAM,MACpC,EAAC,KAAK,MAAM,QAAQ,KAAK,IAAI,KAAM,MACnC,EAAC,KAAK,OAAO,QAAQ,KAAK,IAAI,MAAM,MACpC,EAAC,KAAK,MAAM,QAAQ,KAAK,IAAI,KAAM,MACnC,EAAC,KAAK,OAAO,QAAQ,KAAK,IAAI,MAAM,MACpC,EAAC,KAAK,MAAM,QAAQ,KAAK,IAAI,KAAM,MACnC,EAAC,KAAK,KAAK,QAAQ;AASvB,qBAAsB,IAAA;AAClB,mBAAO,GAAE,QAAQ,yBAAyB;;AA2I9C,qBAAuB,IAAa,IAAA;AAA6E,gBAAjE,IAAiE,IAAA,UAAA,UAAA,AAAA,UAAA,OAAA,SAAA,UAAA,KAAhD,IAAI,IAA4C,IAAA,UAAA,SAAA,UAAA,KAAA,QAAnC,IAAmC,IAAA,UAAA,SAAA,UAAA,KAAA,QAAvB,IAAuB,IAAA,UAAA,SAAA,UAAA,KAAA,QAAR,IAAQ,IAAA,UAAA,SAAA,UAAA,KAAA;AAC7G,gBAAoB,AAAhB,OAAgB;AAMpB,qBAAI,OAAgB,IACT,IApIf,YAAiC,IAAa,IAAA;AAA6E,oBAAjE,KAAiE,IAAA,UAAA,UAAA,AAAA,UAAA,OAAA,SAAA,UAAA,KAAhD,IAAI,KAA4C,IAAA,UAAA,SAAA,UAAA,KAAA,QAAnC,KAAmC,IAAA,UAAA,SAAA,UAAA,KAAA,QAAvB,KAAuB,IAAA,UAAA,SAAA,UAAA,KAAA,QAAR,IAAQ,IAAA,UAAA,SAAA,UAAA,KAAA;AACvH,oBAAA,CAAK,MAAA,CAAO;AACR,yBAAA,CAAQ;AAGZ,oBAAI,IAAW,IAGX,IAAW,GAAY,QAAQ,4BAA4B;AAE/D,oBAAI,MAAa;AACb,yBAAA,KAAY,GAAwB,GAAU,IAAY,IAAgB,IAAS,IAAY,IAAe;AAKlH,yBAAS,IAAI,GAAG,IAAI,EAAY,QAAQ,KAAK;AACzC,sBAAI,IAAS,EAAY;AAGzB,sBAFA,KAAW,GAAY,QAAQ,EAAO,KAAK,SAE1B;AACb,2BAAO,GAAwB,GAAU,IAAY,IAAgB,IAAS,IAAY,IAAe,KAAU,EAAO;;AAQlI,oBAFA,KAAW,GAAY,QAAQ,KAAK,SAEnB;AACb,yBAAO,GAAwB,GAAU,IAAY,IAAgB,IAAS,IAAY,IAAe,KAAU;AAKvH,oBAAI,KAAuB,WAAW;AAEtC,oBAAA,CAAI,MAAM,KAAV;AAIA,sBAAI,KAAgB,GAAQ;AAC5B,sBAAI,MAAmC,AAAlB,OAAkB,OACnC,KAAW,GAAY,QAAQ,IAAI,OAAJ,GAAA,OAAc,EAAa,KAA3B,OAA+C,SAE7D;AACb,2BAAO,GAAwB,GAAU,IAAY,IAAgB,IAAS,IAAY,IAAe;AAMjH,sBAAI,IAAwB;AAC5B,yBAAO,KAAK,IAAe,QAAQ,SAAC,IAAA;AAChC,sBAAsB,GAAc,OAAQ;;AAMhD,2BAHI,IAAqB,OAAO,KAAK,GAAuB,OAAO,WAC/D,IAAwB,EAAmB,QAEtC,IAAI,GAAG,IAAI,GAAuB,KAAK;AAC5C,wBAAI,IAAQ,EAAmB,IAC3B,IAAM,EAAsB;AAGhC,wBADA,KAAW,GAAY,QAAQ,GAAO,SACrB,IAAa;AAC1B,0BAAI,IAAA;AACJ,8BAAQ;6BACC;AACD,8BAAS,KAAK,IAAI,IAAI;AACtB;6BACC;AACD,8BAAS,KAAK,IAAI,IAAI;AACtB;6BACC;AACD,8BAAS,KAAK,IAAI,IAAI;AACtB;6BACC;AACD,8BAAS,KAAK,IAAI,IAAI;;AAG9B,6BAAO,GAAwB,GAAU,IAAY,IAAgB,IAAS,IAAY,IAAe,KAAU;;;;gBAe/H,SAAiC,IAAa,IAAA;AAAiC,oBAArB,KAAqB,IAAA,UAAA,UAAA,AAAA,UAAA,OAAA,SAAA,UAAA,KAAJ,IAGnE,KAAW,GAAY,QAAQ,IAAgB;AAUnD,uBAFA,KAJA,MAAW,GAAS,QAAQ,IAAI,OAAJ,UAAA,OAAqB,EAAa,GAAW,YAA7C,YAAkE,MAAM,SAIhF,QAAQ,GAAW,SAAS;gBA4BZ,IAAa,IAAY,IACvB,IAAY,GAAgB,GAAS,GAAY,GAAe;;AAmF1G,YAAO,UAAU,EACb,UAhCJ,SAAkB,IAAa,IAAA;AAE3B,gBAlBI,GAEA,GACA,GAeE,IAAc,EAAQ,kBAExB,IAAa,EAAY,qBACzB,IAAiB,EAAY,kBAAkB,QAC/C,IAAU,EAAY,kBACtB,IAAa,EAAY,iBACzB,IAAgB,EAAY,wBAE5B,IAAA;AAEJ,gBAA2B,AAAA,OAAhB,MAAgB;AAInB,kBA1DZ,SAAqB,IAAa,IAAA;AAG9B,oBAAA,CAFiB,GAAY,QAAQ,QAAiC,AAAzB,GAAW,cAAc;AAGlE,yBAAA;AAGJ,oBAAI,KAAW,GAAY,MAAM;AACjC,oBAAwB,AAApB,GAAS,WAAW;AACpB,yBAAA;AAGJ,oBAAI,KAAA,CAAS,GAAS,IAClB,KAAA,CAAW,GAAS,IACpB,KAAA,CAAW,GAAS;AAExB,uBAAA,CAAQ,MAAM,OAAA,CAAW,MAAM,OAAA,CAAa,MAAM;gBAuC9B,IAAa,KA7B7B,KA8ByB,GA9BF,MAAM,MAE7B,IAAA,CAAS,EAAS,IAClB,IAAA,CAAW,EAAS,IAAA,CACT,EAAS,KAEP,KAAK,IAAU,OAAO,KA0BvB,EAAc,IAAa,GAAY,GAAgB,GAAS,GAAY,GAAe;iBAEpG;AAAA,kBAA2B,AAAA,OAAhB,MAAgB;AAG9B;AAFA,kBAAQ;;AAKZ,gBAAA,AAAI,MAAJ;AAIA,qBAAO;;WAAA,EAAA,iBAAA,MAAA,IAAA,CAAA,SAAA,GAAA,GAAA,GAAA;AAAA;AAAA,qBAAA,IAAA;AAAA,mBAAA,SAAA,IAAA;AAAA,kBAAA,MAAA,QAAA,KAAA;AAAA,yBAAA,KAAA,GAAA,KAAA,IAAA,MAAA,GAAA,SAAA,KAAA,GAAA,QAAA;AAAA,qBAAA,MAAA,GAAA;AAAA,uBAAA;;cAAA,OAAA,SAAA,IAAA;AAAA,kBAAA,OAAA,YAAA,OAAA,OAAA,AAAA,OAAA,UAAA,SAAA,KAAA,QAAA;AAAA,uBAAA,MAAA,KAAA;cAAA,OAAA,WAAA;AAAA,oBAAA,IAAA,UAAA;;;AAAA,qBAAA,IAAA;AAAA,mBAAA,KAAA,AAAA,OAAA,UAAA,cAAA,AAAA,OAAA,OAAA,YAAA,WAAA,SAAA,IAAA;AAAA,qBAAA,OAAA;gBAAA,SAAA,IAAA;AAAA,qBAAA,MAAA,AAAA,OAAA,UAAA,cAAA,GAAA,gBAAA,UAAA,OAAA,OAAA,YAAA,WAAA,OAAA;eAAA;;AClQX,cAAI,IAAc,EAAQ,mBAGpB,IAAc,sDAoEd,IAAc,EAChB,QAAQ,EACJ,MAAM,UACN,aArEkB,CACtB,YACA,WACA,QACA,QACA,WACA,aAiEA,MAAM,EACF,MAAM,UACN,aAbgB,CACpB,WACA,UACA,YAWI,aAAa,SAAC,IAAQ,IAAA;AAAT,mBAAsC,AAAlB,GAAO,WAAW;aACnD,SAAS,0DACT,WAAW,SAAC,IAAA;AAAD,mBAA8B,AAAlB,GAAO,WAAW;eAE7C,gBAAgB,EACZ,MAAM,UACN,aAAa,SAAC,IAAA;AAAD,mBAAsB,KAAV;aACzB,SAAS,4BAEb,QAAQ,UACR,SAAS,UACT,cAAc,EACV,MAAM,UACN,aA9EwB,CAC5B,YACA,WACA,WACA,eA4EA,SAAS,WACT,kBAAkB,EACd,MAAM,UACN,aA5EsB,CAC1B,UACA,SACA,cA2EA,gBAAgB,UAChB,aAAa,EACT,MAAM,UACN,cAAc,CACV,EACI,aAAa,SAAC,IAAA;AAAD,mBAAsB,KAAV;aACzB,SAAS,4BAEb,EACI,aAAa,SAAC,IAAQ,IAAA;AAAT,mBAAA,CAAqB,GAAO;aACzC,SAAS,yDAIrB,UAAU,EACN,MAAM,UACN,aAAa,SAAC,IAAA;AAAD,mBAAsB,KAAV;aACzB,SAAS,4BAEb,kBAAkB,WAClB,cAAc,WACd,wBAAwB,WACxB,mBAAmB,WACnB,gBAAgB,WAChB,eApEuB,EACvB,MAAM,UACN,UAAU,EACN,UAAU,UACV,SAAS,UACT,SAAS,UACT,UAAU,cA+Dd,UAAU,EACN,MAAM,UACN,aAnGoB,CACxB,QACA,kBAmGA,WAAW,WACX,aAAa,EACT,MAAM,aAEV,cAAc,EACV,MAAM,WACN,aAAa,SAAC,IAAQ,IAAA;AAAT,mBAAsC,AAAlB,GAAO,WAAW;aACnD,SAAS,wEAIX,IAAgB,EAClB,aAAa,EACT,MAAM,UACN,WAAA,MACA,aAAa,SAAC,IAAA;AACV,mBAAO,GAAI,MAAM;aAErB,SAAS,mGAEb,YAAY,EACR,MAAM,UACN,UAAU,EACN,WAAW,UACX,SAAS,UACT,eAAe,YAEnB,WAAA,QAEJ,eA7HgC,EAChC,MAAM,UACN,UAAU,EACN,UAAU,EACN,MAAM,UACN,WAAA,QAEJ,SAAS,EACL,MAAM,UACN,WAAA,QAEJ,SAAS,EACL,MAAM,UACN,WAAA,QAEJ,UAAU,EACN,MAAM,UACN,WAAA,UAGR,WAAA,QA0GA,gBAAgB,WAChB,SAAS,EACL,MAAM,YACN,WAAA,QAEJ,UAAU,EACN,MAAM,UACN,UAAU,EACN,QAAQ,UACR,UAAU,UACV,MAAM,YAEV,WAAA,QAEJ,UAAU,UACV,eAAe,UACf,YAAY,UACZ,kBAAkB,UAClB,gBAAgB,UAChB,cAAc,UACd,SAAS,EACL,MAAM,UACN,UAAU,EACN,YAAY,EACR,MAAM,UACN,WAAA,QAEJ,qBAAqB,EACjB,MAAM,UACN,WAAA,QAEJ,+BAA+B,EAC3B,MAAM,UACN,WAAA,QAEJ,oBAAoB,EAChB,MAAM,UACN,WAAA;AA2BhB,qBAAuB,IAAA;AAGnB,mBAAA,CAAA,CAFY,EAAY,SAAS;;AAcrC,qBAAsB,IAAY,GAAM,GAAA;AAAoC,gBAA5B,KAA4B,IAAA,UAAA,UAAA,AAAA,UAAA,OAAA,UAAA,UAAA,IACpE,KAAU,OAAO,KAAK,IAAY,IAAI,SAAC,IAAA;AACvC,kBAAA,CAAK,EAAK;AAEN,uBADA,QAAQ,MAAR,GAAA,OAAiB,GAAjB,kBAAA,OAAwC,MAAA;AAI5C,kBAAI,KAAQ,GAAW,KACnB,KAAO,EAAK;AAMhB,kBAJoB,AAAA,OAAT,MAAS,YAChB,MAAO,EAAC,MAAM,OAGA,AAAd,GAAK,SAAS,UAAT;AAGL,oBAAA,CAFY,EAAa,IAAO,GAAR,aAAA,OAAkC,IAAlC,MAAA;AAGpB,yBAAA;yBAEG,EAAO,QAAU,GAAK;AAE7B,uBADA,QAAQ,MAAR,GAAA,OAAiB,GAAjB,KAAA,OAA2B,IAA3B,uBAAA,OAAoD,GAAK,MAAzD,iBAAA,OAAA,EAAoF,KAApF,gBAAA;AAIJ,kBAAI,GAAK,gBAAgB,GAAK,aAAa;AAEvC,yBADI,KAAS,GAAK,aAAa,QACtB,KAAI,GAAG,KAAI,IAAQ,MAAK;AAAA,sBAAA,KACA,GAAK,aAAa,KAA1C,KADwB,GACxB,aAAa,KADW,GACX;AAClB,sBAAA,CAAK,GAAY,IAAO;AAEpB,2BADA,QAAQ,MAAR,GAAA,OAAiB,GAAjB,KAAA,OAA2B,IAA3B,oBAAA,OAAiD,MAAA;;AAM7D,kBAAI,GAAK,eAAA,CAAgB,GAAK,YAAY,IAAO;AAE7C,uBADA,QAAQ,MAAR,GAAA,OAAiB,GAAjB,KAAA,OAA2B,IAA3B,oBAAA,OAAiD,GAAK,WAAA;AAI1D,kBAAI,GAAK,eAAA,AAAe,GAAK,YAAY,QAAQ,QAAxC;AAEL,uBADA,QAAQ,MAAR,GAAA,OAAiB,GAAjB,KAAA,OAA2B,IAA3B,kCAAA,OAA+D,KAAK,UAAU,GAAK,cAAnF,OAAA,OAAqG,IAArG,gBAAA;AAIJ,kBAAI,GAAK,YAAA,CACO,EAAa,IAAO,GAAK,UAAb,aAAA,OAAoC,IAApC;AAGpB,uBAAA;AAIR,qBAAA;;AA0BJ,mBAvBK,MACD,GAAQ,KAAR,MAAA,IAAO,EAAS,OAAO,KAAK,GAAM,IAAI,SAAC,IAAA;AACnC,kBAAI,KAAO,EAAK;AAKhB,kBAJoB,AAAA,OAAT,MAAS,YAChB,MAAO,EAAC,MAAM,OAGd,GAAK,WAAW;AAChB,oBAAI,KAAY,GAAK;AAKrB,oBAJyB,AAAA,OAAd,MAAc,cACrB,MAAY,GAAU,MAGtB,MAAA,AAAa,GAAW,QAAxB;AAEA,yBADA,QAAQ,MAAR,GAAA,OAAiB,GAAjB,4BAAA,OAAkD,IAAlD,OAAA;;AAKR,qBAAA;kBAID,GAAQ,OAAO,SAAC,IAAK,IAAA;AACxB,qBAAO,MAAO;eAAA;;AAUtB,qBAAwB,IAAA;AACpB,mBAAO,EAAa,IAAQ,GAAa;;AAa7C,YAAO,UAAU,EACb,UAtIJ,SAAkB,IAAO,IAAA;AACrB,gBAAI,KAAa,EAAc,KAC3B,KAAgB,EAAe;AAEnC,mBAAO,MAAc;aAmIrB,gBAAA,GACA,eAAA,GACA,kBARJ,SAA0B,IAAA;AACtB,mBAAO,EAAa,IAAU,GAAe;;WAAA,EAAA,kBAAA,QAAA,IAAA,CAAA,IVzWjD;;;;;;AWAA;AAAA;AAGA,aAAO,UAAU,OAAO,MAAM,YAAY,GAAG,GAAG;AAE9C,eAAO,MAAM,IAAI,MAAM,KAAK,IAAI,MAAM,IAAI,IAAI,KAAK,KAAK,KAAK;AAAA;AAAA;AAAA;;;ACL/D;AAAA;AAAA,UAAI,gBAAc;AAClB,UAAI,0BAAyB;AAC7B,UAAI,aAAW;AAEf,UAAI,OAAO;AACX,UAAI,WAAU,cAAY,GAAG;AAI7B,aAAO,UAAU,SAAU,QAAQ,KAAK,WAAW,OAAO;AACxD,YAAI,IAAI,WAAS,wBAAuB;AACxC,YAAI,KAAK,MAAM;AACf,YAAI,cAAc;AAAI,gBAAM,MAAM,YAAY,OAAO,SAAQ,WAAS,QAAQ,MAAM,YAAY;AAChG,eAAO,KAAK,MAAM,IAAI,OAAO,MAAM;AAAA;AAAA;AAAA;;;ACbrC;AAAA;AAAA,UAAI,UAAQ;AAIZ,aAAO,UAAU,SAAU,aAAa;AACtC,eAAO,QAAM,WAAY;AACvB,cAAI,QAAO,GAAG,aAAa;AAC3B,iBAAO,UAAS,MAAK,iBAAiB,MAAK,MAAM,KAAK,SAAS;AAAA;AAAA;AAAA;AAAA;;;ACPnE;AAAA;AAaA,MAAE,UAAU,UAAQ,SAAU;AAE7B;AAEA,YAAK,OAAO,WAAW,YAAY,OAAO,OAAO,YAAY,UAAW;AASvE,iBAAO,UAAU,SAAO,WACvB,QAAS,UAAQ,QACjB,SAAU,GAAI;AACb,gBAAK,CAAC,EAAE,UAAW;AAClB,oBAAM,IAAI,MAAO;AAAA;AAElB,mBAAO,QAAS;AAAA;AAAA,eAEZ;AACN,kBAAS;AAAA;AAAA,SAIN,OAAO,WAAW,cAAc,SAAS,SAAM,SAAU,SAAQ,UAAW;AAMjF;AAEA,YAAI,MAAM;AAEV,YAAI,WAAW,OAAO;AAEtB,YAAI,SAAQ,IAAI;AAEhB,YAAI,OAAO,IAAI,OAAO,SAAU,OAAQ;AACvC,iBAAO,IAAI,KAAK,KAAM;AAAA,YACnB,SAAU,OAAQ;AACrB,iBAAO,IAAI,OAAO,MAAO,IAAI;AAAA;AAI9B,YAAI,QAAO,IAAI;AAEf,YAAI,WAAU,IAAI;AAElB,YAAI,aAAa;AAEjB,YAAI,aAAW,WAAW;AAE1B,YAAI,UAAS,WAAW;AAExB,YAAI,aAAa,QAAO;AAExB,YAAI,uBAAuB,WAAW,KAAM;AAE5C,YAAI,UAAU;AAEd,YAAI,cAAa,qBAAqB,KAAM;AAS1C,iBAAO,OAAO,QAAQ,cAAc,OAAO,IAAI,aAAa,YAC3D,OAAO,IAAI,SAAS;AAAA;AAIvB,YAAI,WAAW,mBAAmB,KAAM;AACtC,iBAAO,OAAO,QAAQ,QAAQ,IAAI;AAAA;AAIpC,YAAI,YAAW,QAAO;AAIrB,YAAI,4BAA4B;AAAA,UAC/B,MAAM;AAAA,UACN,KAAK;AAAA,UACL,OAAO;AAAA,UACP,UAAU;AAAA;AAGX,yBAAkB,MAAM,MAAM,KAAM;AACnC,gBAAM,OAAO;AAEb,cAAI,GAAG,KACN,SAAS,IAAI,cAAe;AAE7B,iBAAO,OAAO;AACd,cAAK,MAAO;AACX,iBAAM,KAAK,2BAA4B;AAYtC,oBAAM,KAAM,MAAO,KAAK,gBAAgB,KAAK,aAAc;AAC3D,kBAAK,KAAM;AACV,uBAAO,aAAc,GAAG;AAAA;AAAA;AAAA;AAI3B,cAAI,KAAK,YAAa,QAAS,WAAW,YAAa;AAAA;AAIzD,yBAAiB,KAAM;AACtB,cAAK,OAAO,MAAO;AAClB,mBAAO,MAAM;AAAA;AAId,iBAAO,OAAO,QAAQ,YAAY,OAAO,QAAQ,aAChD,WAAY,WAAS,KAAM,SAAW,WACtC,OAAO;AAAA;AAQT,YACC,UAAU,SAGV,SAAS,SAAU,UAAU,SAAU;AAItC,iBAAO,IAAI,OAAO,GAAG,KAAM,UAAU;AAAA;AAGvC,eAAO,KAAK,OAAO,YAAY;AAAA,UAG9B,QAAQ;AAAA,UAER,aAAa;AAAA,UAGb,QAAQ;AAAA,UAER,SAAS,WAAW;AACnB,mBAAO,OAAM,KAAM;AAAA;AAAA,UAKpB,KAAK,SAAU,KAAM;AAGpB,gBAAK,OAAO,MAAO;AAClB,qBAAO,OAAM,KAAM;AAAA;AAIpB,mBAAO,MAAM,IAAI,KAAM,MAAM,KAAK,UAAW,KAAM;AAAA;AAAA,UAKpD,WAAW,SAAU,OAAQ;AAG5B,gBAAI,MAAM,OAAO,MAAO,KAAK,eAAe;AAG5C,gBAAI,aAAa;AAGjB,mBAAO;AAAA;AAAA,UAIR,MAAM,SAAU,UAAW;AAC1B,mBAAO,OAAO,KAAM,MAAM;AAAA;AAAA,UAG3B,KAAK,SAAU,UAAW;AACzB,mBAAO,KAAK,UAAW,OAAO,IAAK,MAAM,SAAU,MAAM,GAAI;AAC5D,qBAAO,SAAS,KAAM,MAAM,GAAG;AAAA;AAAA;AAAA,UAIjC,OAAO,WAAW;AACjB,mBAAO,KAAK,UAAW,OAAM,MAAO,MAAM;AAAA;AAAA,UAG3C,OAAO,WAAW;AACjB,mBAAO,KAAK,GAAI;AAAA;AAAA,UAGjB,MAAM,WAAW;AAChB,mBAAO,KAAK,GAAI;AAAA;AAAA,UAGjB,MAAM,WAAW;AAChB,mBAAO,KAAK,UAAW,OAAO,KAAM,MAAM,SAAU,OAAO,GAAI;AAC9D,qBAAS,KAAI,KAAM;AAAA;AAAA;AAAA,UAIrB,KAAK,WAAW;AACf,mBAAO,KAAK,UAAW,OAAO,KAAM,MAAM,SAAU,OAAO,GAAI;AAC9D,qBAAO,IAAI;AAAA;AAAA;AAAA,UAIb,IAAI,SAAU,GAAI;AACjB,gBAAI,MAAM,KAAK,QACd,IAAI,CAAC,IAAM,KAAI,IAAI,MAAM;AAC1B,mBAAO,KAAK,UAAW,KAAK,KAAK,IAAI,MAAM,CAAE,KAAM,MAAQ;AAAA;AAAA,UAG5D,KAAK,WAAW;AACf,mBAAO,KAAK,cAAc,KAAK;AAAA;AAAA,UAKhC,MAAM;AAAA,UACN,MAAM,IAAI;AAAA,UACV,QAAQ,IAAI;AAAA;AAGb,eAAO,SAAS,OAAO,GAAG,SAAS,WAAW;AAC7C,cAAI,SAAS,MAAM,KAAK,MAAM,aAAa,QAC1C,SAAS,UAAW,MAAO,IAC3B,IAAI,GACJ,SAAS,UAAU,QACnB,OAAO;AAGR,cAAK,OAAO,WAAW,WAAY;AAClC,mBAAO;AAGP,qBAAS,UAAW,MAAO;AAC3B;AAAA;AAID,cAAK,OAAO,WAAW,YAAY,CAAC,YAAY,SAAW;AAC1D,qBAAS;AAAA;AAIV,cAAK,MAAM,QAAS;AACnB,qBAAS;AACT;AAAA;AAGD,iBAAQ,IAAI,QAAQ,KAAM;AAGzB,gBAAO,WAAU,UAAW,OAAS,MAAO;AAG3C,mBAAM,QAAQ,SAAU;AACvB,uBAAO,QAAS;AAIhB,oBAAK,SAAS,eAAe,WAAW,MAAO;AAC9C;AAAA;AAID,oBAAK,QAAQ,QAAU,QAAO,cAAe,SAC1C,eAAc,MAAM,QAAS,SAAa;AAC5C,wBAAM,OAAQ;AAGd,sBAAK,eAAe,CAAC,MAAM,QAAS,MAAQ;AAC3C,6BAAQ;AAAA,6BACG,CAAC,eAAe,CAAC,OAAO,cAAe,MAAQ;AAC1D,6BAAQ;AAAA,yBACF;AACN,6BAAQ;AAAA;AAET,gCAAc;AAGd,yBAAQ,QAAS,OAAO,OAAQ,MAAM,QAAO;AAAA,2BAGlC,SAAS,QAAY;AAChC,yBAAQ,QAAS;AAAA;AAAA;AAAA;AAAA;AAOrB,iBAAO;AAAA;AAGR,eAAO,OAAQ;AAAA,UAGd,SAAS,WAAa,WAAU,KAAK,UAAW,QAAS,OAAO;AAAA,UAGhE,SAAS;AAAA,UAET,OAAO,SAAU,KAAM;AACtB,kBAAM,IAAI,MAAO;AAAA;AAAA,UAGlB,MAAM,WAAW;AAAA;AAAA,UAEjB,eAAe,SAAU,KAAM;AAC9B,gBAAI,OAAO;AAIX,gBAAK,CAAC,OAAO,WAAS,KAAM,SAAU,mBAAoB;AACzD,qBAAO;AAAA;AAGR,oBAAQ,SAAU;AAGlB,gBAAK,CAAC,OAAQ;AACb,qBAAO;AAAA;AAIR,mBAAO,QAAO,KAAM,OAAO,kBAAmB,MAAM;AACpD,mBAAO,OAAO,SAAS,cAAc,WAAW,KAAM,UAAW;AAAA;AAAA,UAGlE,eAAe,SAAU,KAAM;AAC9B,gBAAI;AAEJ,iBAAM,QAAQ,KAAM;AACnB,qBAAO;AAAA;AAER,mBAAO;AAAA;AAAA,UAKR,YAAY,SAAU,MAAM,SAAS,KAAM;AAC1C,oBAAS,MAAM,EAAE,OAAO,WAAW,QAAQ,SAAS;AAAA;AAAA,UAGrD,MAAM,SAAU,KAAK,UAAW;AAC/B,gBAAI,QAAQ,IAAI;AAEhB,gBAAK,YAAa,MAAQ;AACzB,uBAAS,IAAI;AACb,qBAAQ,IAAI,QAAQ,KAAM;AACzB,oBAAK,SAAS,KAAM,IAAK,IAAK,GAAG,IAAK,QAAU,OAAQ;AACvD;AAAA;AAAA;AAAA,mBAGI;AACN,mBAAM,KAAK,KAAM;AAChB,oBAAK,SAAS,KAAM,IAAK,IAAK,GAAG,IAAK,QAAU,OAAQ;AACvD;AAAA;AAAA;AAAA;AAKH,mBAAO;AAAA;AAAA,UAIR,WAAW,SAAU,MAAK,SAAU;AACnC,gBAAI,MAAM,WAAW;AAErB,gBAAK,QAAO,MAAO;AAClB,kBAAK,YAAa,OAAQ,QAAU;AACnC,uBAAO,MAAO,KACb,OAAO,SAAQ,WACd,CAAE,QAAQ;AAAA,qBAEN;AACN,sBAAK,KAAM,KAAK;AAAA;AAAA;AAIlB,mBAAO;AAAA;AAAA,UAGR,SAAS,SAAU,MAAM,MAAK,GAAI;AACjC,mBAAO,QAAO,OAAO,KAAK,SAAQ,KAAM,MAAK,MAAM;AAAA;AAAA,UAKpD,OAAO,SAAU,OAAO,QAAS;AAChC,gBAAI,MAAM,CAAC,OAAO,QACjB,IAAI,GACJ,IAAI,MAAM;AAEX,mBAAQ,IAAI,KAAK,KAAM;AACtB,oBAAO,OAAQ,OAAQ;AAAA;AAGxB,kBAAM,SAAS;AAEf,mBAAO;AAAA;AAAA,UAGR,MAAM,SAAU,OAAO,UAAU,QAAS;AACzC,gBAAI,iBACH,UAAU,IACV,IAAI,GACJ,SAAS,MAAM,QACf,iBAAiB,CAAC;AAInB,mBAAQ,IAAI,QAAQ,KAAM;AACzB,gCAAkB,CAAC,SAAU,MAAO,IAAK;AACzC,kBAAK,oBAAoB,gBAAiB;AACzC,wBAAQ,KAAM,MAAO;AAAA;AAAA;AAIvB,mBAAO;AAAA;AAAA,UAIR,KAAK,SAAU,OAAO,UAAU,KAAM;AACrC,gBAAI,QAAQ,OACX,IAAI,GACJ,MAAM;AAGP,gBAAK,YAAa,QAAU;AAC3B,uBAAS,MAAM;AACf,qBAAQ,IAAI,QAAQ,KAAM;AACzB,wBAAQ,SAAU,MAAO,IAAK,GAAG;AAEjC,oBAAK,SAAS,MAAO;AACpB,sBAAI,KAAM;AAAA;AAAA;AAAA,mBAKN;AACN,mBAAM,KAAK,OAAQ;AAClB,wBAAQ,SAAU,MAAO,IAAK,GAAG;AAEjC,oBAAK,SAAS,MAAO;AACpB,sBAAI,KAAM;AAAA;AAAA;AAAA;AAMb,mBAAO,KAAM;AAAA;AAAA,UAId,MAAM;AAAA,UAIN;AAAA;AAGD,YAAK,OAAO,WAAW,YAAa;AACnC,iBAAO,GAAI,OAAO,YAAa,IAAK,OAAO;AAAA;AAI5C,eAAO,KAAM,uEAAuE,MAAO,MAC1F,SAAU,IAAI,MAAO;AACpB,qBAAY,aAAa,OAAO,OAAQ,KAAK;AAAA;AAG/C,6BAAsB,KAAM;AAM3B,cAAI,SAAS,CAAC,CAAC,OAAO,YAAY,OAAO,IAAI,QAC5C,OAAO,QAAQ;AAEhB,cAAK,YAAY,QAAS,SAAU,MAAQ;AAC3C,mBAAO;AAAA;AAGR,iBAAO,SAAS,WAAW,WAAW,KACrC,OAAO,WAAW,YAAY,SAAS,KAAO,SAAS,KAAO;AAAA;AAEhE,YAAI,SAWF,SAAU,SAAS;AACrB,cAAI,GACH,UACA,MACA,SACA,OACA,WACA,SACA,QACA,kBACA,WACA,cAGA,aACA,WACA,SACA,gBACA,WACA,eACA,SACA,WAGA,UAAU,WAAW,IAAI,IAAI,QAC7B,eAAe,QAAO,UACtB,UAAU,GACV,OAAO,GACP,aAAa,eACb,aAAa,eACb,gBAAgB,eAChB,yBAAyB,eACzB,YAAY,SAAU,GAAG,GAAI;AAC5B,gBAAK,MAAM,GAAI;AACd,6BAAe;AAAA;AAEhB,mBAAO;AAAA,aAIR,UAAW,GAAK,gBAChB,OAAM,IACN,MAAM,KAAI,KACV,aAAa,KAAI,MACjB,QAAO,KAAI,MACX,SAAQ,KAAI,OAIZ,WAAU,SAAU,MAAM,MAAO;AAChC,gBAAI,KAAI,GACP,MAAM,KAAK;AACZ,mBAAQ,KAAI,KAAK,MAAM;AACtB,kBAAK,KAAM,QAAQ,MAAO;AACzB,uBAAO;AAAA;AAAA;AAGT,mBAAO;AAAA,aAGR,WAAW,8HAMX,aAAa,uBAGb,aAAa,4BAA4B,aACxC,2CAGD,aAAa,QAAQ,aAAa,OAAO,aAAa,SAAS,aAG9D,kBAAkB,aAIlB,0DAA6D,aAAa,SAC1E,aAAa,QAEd,UAAU,OAAO,aAAa,uFAOA,aAAa,gBAO3C,cAAc,IAAI,OAAQ,aAAa,KAAK,MAC5C,SAAQ,IAAI,OAAQ,MAAM,aAAa,gCACtC,aAAa,MAAM,MAEpB,SAAS,IAAI,OAAQ,MAAM,aAAa,OAAO,aAAa,MAC5D,eAAe,IAAI,OAAQ,MAAM,aAAa,aAAa,aAAa,MAAM,aAC7E,MACD,WAAW,IAAI,OAAQ,aAAa,OAEpC,UAAU,IAAI,OAAQ,UACtB,cAAc,IAAI,OAAQ,MAAM,aAAa,MAE7C,YAAY;AAAA,YACX,MAAM,IAAI,OAAQ,QAAQ,aAAa;AAAA,YACvC,SAAS,IAAI,OAAQ,UAAU,aAAa;AAAA,YAC5C,OAAO,IAAI,OAAQ,OAAO,aAAa;AAAA,YACvC,QAAQ,IAAI,OAAQ,MAAM;AAAA,YAC1B,UAAU,IAAI,OAAQ,MAAM;AAAA,YAC5B,SAAS,IAAI,OAAQ,2DACpB,aAAa,iCAAiC,aAAa,gBAC3D,aAAa,eAAe,aAAa,UAAU;AAAA,YACpD,QAAQ,IAAI,OAAQ,SAAS,WAAW,MAAM;AAAA,YAI9C,gBAAgB,IAAI,OAAQ,MAAM,aACjC,qDAAqD,aACrD,qBAAqB,aAAa,oBAAoB;AAAA,aAGxD,SAAQ,UACR,UAAU,uCACV,UAAU,UAEV,UAAU,0BAGV,cAAa,oCAEb,WAAW,QAIX,YAAY,IAAI,OAAQ,yBAAyB,aAAa,wBAAwB,MACtF,YAAY,SAAU,QAAQ,QAAS;AACtC,gBAAI,OAAO,OAAO,OAAO,MAAO,KAAM;AAEtC,mBAAO,SAGN,SAMA,OAAO,IACN,OAAO,aAAc,OAAO,SAC5B,OAAO,aAAc,QAAQ,KAAK,OAAQ,OAAO,OAAQ;AAAA,aAK5D,aAAa,uDACb,aAAa,SAAU,IAAI,aAAc;AACxC,gBAAK,aAAc;AAGlB,kBAAK,OAAO,MAAO;AAClB,uBAAO;AAAA;AAIR,qBAAO,GAAG,MAAO,GAAG,MAAO,OAC1B,GAAG,WAAY,GAAG,SAAS,GAAI,SAAU,MAAO;AAAA;AAIlD,mBAAO,OAAO;AAAA,aAOf,gBAAgB,WAAW;AAC1B;AAAA,aAGD,qBAAqB,cACpB,SAAU,MAAO;AAChB,mBAAO,KAAK,aAAa,QAAQ,KAAK,SAAS,kBAAkB;AAAA,aAElE,EAAE,KAAK,cAAc,MAAM;AAI7B,cAAI;AACH,kBAAK,MACF,OAAM,OAAM,KAAM,aAAa,aACjC,aAAa;AAMd,iBAAK,aAAa,WAAW,QAAS;AAAA,mBAC7B,GAAR;AACD,oBAAO;AAAA,cAAE,OAAO,KAAI,SAGnB,SAAU,QAAQ,KAAM;AACvB,2BAAW,MAAO,QAAQ,OAAM,KAAM;AAAA,kBAKvC,SAAU,QAAQ,KAAM;AACvB,oBAAI,IAAI,OAAO,QACd,KAAI;AAGL,uBAAU,OAAQ,OAAQ,IAAK,OAAU;AAAA;AACzC,uBAAO,SAAS,IAAI;AAAA;AAAA;AAAA;AAKvB,2BAAiB,UAAU,SAAS,SAAS,MAAO;AACnD,gBAAI,GAAG,IAAG,MAAM,KAAK,OAAO,QAAQ,aACnC,aAAa,WAAW,QAAQ,eAGhC,WAAW,UAAU,QAAQ,WAAW;AAEzC,sBAAU,WAAW;AAGrB,gBAAK,OAAO,aAAa,YAAY,CAAC,YACrC,aAAa,KAAK,aAAa,KAAK,aAAa,IAAK;AAEtD,qBAAO;AAAA;AAIR,gBAAK,CAAC,MAAO;AACZ,0BAAa;AACb,wBAAU,WAAW;AAErB,kBAAK,gBAAiB;AAIrB,oBAAK,aAAa,MAAQ,SAAQ,YAAW,KAAM,YAAe;AAGjE,sBAAO,IAAI,MAAO,IAAQ;AAGzB,wBAAK,aAAa,GAAI;AACrB,0BAAO,OAAO,QAAQ,eAAgB,IAAQ;AAK7C,4BAAK,KAAK,OAAO,GAAI;AACpB,kCAAQ,KAAM;AACd,iCAAO;AAAA;AAAA,6BAEF;AACN,+BAAO;AAAA;AAAA,2BAIF;AAKN,0BAAK,cAAgB,QAAO,WAAW,eAAgB,OACtD,UAAU,SAAS,SACnB,KAAK,OAAO,GAAI;AAEhB,gCAAQ,KAAM;AACd,+BAAO;AAAA;AAAA;AAAA,6BAKE,MAAO,IAAM;AACxB,0BAAK,MAAO,SAAS,QAAQ,qBAAsB;AACnD,2BAAO;AAAA,6BAGM,KAAI,MAAO,OAAS,SAAQ,0BACzC,QAAQ,wBAAyB;AAEjC,0BAAK,MAAO,SAAS,QAAQ,uBAAwB;AACrD,2BAAO;AAAA;AAAA;AAKT,oBAAK,SAAQ,OACZ,CAAC,uBAAwB,WAAW,QAClC,EAAC,aAAa,CAAC,UAAU,KAAM,cAI/B,cAAa,KAAK,QAAQ,SAAS,kBAAkB,WAAa;AAEpE,gCAAc;AACd,+BAAa;AASb,sBAAK,aAAa,KACf,UAAS,KAAM,aAAc,aAAa,KAAM,YAAe;AAGjE,iCAAa,SAAS,KAAM,aAAc,YAAa,QAAQ,eAC9D;AAID,wBAAK,eAAe,WAAW,CAAC,SAAQ,OAAQ;AAG/C,0BAAO,MAAM,QAAQ,aAAc,OAAW;AAC7C,8BAAM,IAAI,QAAS,YAAY;AAAA,6BACzB;AACN,gCAAQ,aAAc,MAAQ,MAAM;AAAA;AAAA;AAKtC,6BAAS,UAAU;AACnB,yBAAI,OAAO;AACX,2BAAQ,MAAM;AACb,6BAAQ,MAAQ,OAAM,MAAM,MAAM,YAAa,MAC9C,WAAY,OAAQ;AAAA;AAEtB,kCAAc,OAAO,KAAM;AAAA;AAG5B,sBAAI;AACH,0BAAK,MAAO,SACX,WAAW,iBAAkB;AAE9B,2BAAO;AAAA,2BACE,UAAR;AACD,2CAAwB,UAAU;AAAA,4BACjC;AACD,wBAAK,QAAQ,SAAU;AACtB,8BAAQ,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ9B,mBAAO,OAAQ,SAAS,QAAS,QAAO,OAAQ,SAAS,SAAS;AAAA;AASnE,iCAAuB;AACtB,gBAAI,QAAO;AAEX,2BAAgB,KAAK,OAAQ;AAG5B,kBAAK,MAAK,KAAM,MAAM,OAAQ,KAAK,aAAc;AAGhD,uBAAO,MAAO,MAAK;AAAA;AAEpB,qBAAS,MAAO,MAAM,OAAQ;AAAA;AAE/B,mBAAO;AAAA;AAOR,gCAAuB,KAAK;AAC3B,gBAAI,WAAY;AAChB,mBAAO;AAAA;AAOR,2BAAiB,KAAK;AACrB,gBAAI,KAAK,UAAS,cAAe;AAEjC,gBAAI;AACH,qBAAO,CAAC,CAAC,IAAI;AAAA,qBACJ,GAAR;AACD,qBAAO;AAAA,sBACN;AAGD,kBAAK,GAAG,YAAa;AACpB,mBAAG,WAAW,YAAa;AAAA;AAI5B,mBAAK;AAAA;AAAA;AASP,6BAAoB,OAAO,SAAU;AACpC,gBAAI,OAAM,MAAM,MAAO,MACtB,KAAI,KAAI;AAET,mBAAQ,MAAM;AACb,mBAAK,WAAY,KAAK,OAAQ;AAAA;AAAA;AAUhC,gCAAuB,GAAG,GAAI;AAC7B,gBAAI,MAAM,KAAK,GACd,OAAO,OAAO,EAAE,aAAa,KAAK,EAAE,aAAa,KAChD,EAAE,cAAc,EAAE;AAGpB,gBAAK,MAAO;AACX,qBAAO;AAAA;AAIR,gBAAK,KAAM;AACV,qBAAU,MAAM,IAAI,aAAgB;AACnC,oBAAK,QAAQ,GAAI;AAChB,yBAAO;AAAA;AAAA;AAAA;AAKV,mBAAO,IAAI,IAAI;AAAA;AAOhB,qCAA4B,MAAO;AAClC,mBAAO,SAAU,MAAO;AACvB,kBAAI,OAAO,KAAK,SAAS;AACzB,qBAAO,SAAS,WAAW,KAAK,SAAS;AAAA;AAAA;AAQ3C,sCAA6B,MAAO;AACnC,mBAAO,SAAU,MAAO;AACvB,kBAAI,OAAO,KAAK,SAAS;AACzB,qBAAS,UAAS,WAAW,SAAS,aAAc,KAAK,SAAS;AAAA;AAAA;AAQpE,wCAA+B,UAAW;AAGzC,mBAAO,SAAU,MAAO;AAKvB,kBAAK,UAAU,MAAO;AASrB,oBAAK,KAAK,cAAc,KAAK,aAAa,OAAQ;AAGjD,sBAAK,WAAW,MAAO;AACtB,wBAAK,WAAW,KAAK,YAAa;AACjC,6BAAO,KAAK,WAAW,aAAa;AAAA,2BAC9B;AACN,6BAAO,KAAK,aAAa;AAAA;AAAA;AAM3B,yBAAO,KAAK,eAAe,YAI1B,KAAK,eAAe,CAAC,YACrB,mBAAoB,UAAW;AAAA;AAGjC,uBAAO,KAAK,aAAa;AAAA,yBAKd,WAAW,MAAO;AAC7B,uBAAO,KAAK,aAAa;AAAA;AAI1B,qBAAO;AAAA;AAAA;AAQT,0CAAiC,KAAK;AACrC,mBAAO,aAAc,SAAU,UAAW;AACzC,yBAAW,CAAC;AACZ,qBAAO,aAAc,SAAU,MAAM,UAAU;AAC9C,oBAAI,GACH,eAAe,IAAI,IAAI,KAAK,QAAQ,WACpC,KAAI,aAAa;AAGlB,uBAAQ,MAAM;AACb,sBAAK,KAAQ,IAAI,aAAc,MAAU;AACxC,yBAAM,KAAM,CAAG,UAAS,KAAM,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAYzC,+BAAsB,SAAU;AAC/B,mBAAO,WAAW,OAAO,QAAQ,yBAAyB,eAAe;AAAA;AAI1E,qBAAU,QAAO,UAAU;AAO3B,kBAAQ,QAAO,QAAQ,SAAU,MAAO;AACvC,gBAAI,YAAY,QAAQ,KAAK,cAC5B,WAAU,QAAU,MAAK,iBAAiB,MAAO;AAKlD,mBAAO,CAAC,OAAM,KAAM,aAAa,YAAW,SAAQ,YAAY;AAAA;AAQjE,wBAAc,QAAO,cAAc,SAAU,MAAO;AACnD,gBAAI,YAAY,WACf,MAAM,OAAO,KAAK,iBAAiB,OAAO;AAO3C,gBAAK,OAAO,aAAY,IAAI,aAAa,KAAK,CAAC,IAAI,iBAAkB;AACpE,qBAAO;AAAA;AAIR,wBAAW;AACX,sBAAU,UAAS;AACnB,6BAAiB,CAAC,MAAO;AAQzB,gBAAK,gBAAgB,aAClB,aAAY,UAAS,gBAAiB,UAAU,QAAQ,WAAY;AAGtE,kBAAK,UAAU,kBAAmB;AACjC,0BAAU,iBAAkB,UAAU,eAAe;AAAA,yBAG1C,UAAU,aAAc;AACnC,0BAAU,YAAa,YAAY;AAAA;AAAA;AASrC,qBAAQ,QAAQ,QAAQ,SAAU,IAAK;AACtC,sBAAQ,YAAa,IAAK,YAAa,UAAS,cAAe;AAC/D,qBAAO,OAAO,GAAG,qBAAqB,eACrC,CAAC,GAAG,iBAAkB,uBAAwB;AAAA;AAShD,qBAAQ,aAAa,QAAQ,SAAU,IAAK;AAC3C,iBAAG,YAAY;AACf,qBAAO,CAAC,GAAG,aAAc;AAAA;AAO1B,qBAAQ,uBAAuB,QAAQ,SAAU,IAAK;AACrD,iBAAG,YAAa,UAAS,cAAe;AACxC,qBAAO,CAAC,GAAG,qBAAsB,KAAM;AAAA;AAIxC,qBAAQ,yBAAyB,QAAQ,KAAM,UAAS;AAMxD,qBAAQ,UAAU,QAAQ,SAAU,IAAK;AACxC,sBAAQ,YAAa,IAAK,KAAK;AAC/B,qBAAO,CAAC,UAAS,qBAAqB,CAAC,UAAS,kBAAmB,SAAU;AAAA;AAI9E,gBAAK,SAAQ,SAAU;AACtB,mBAAK,OAAQ,QAAS,SAAU,KAAK;AACpC,oBAAI,SAAS,IAAG,QAAS,WAAW;AACpC,uBAAO,SAAU,MAAO;AACvB,yBAAO,KAAK,aAAc,UAAW;AAAA;AAAA;AAGvC,mBAAK,KAAM,QAAS,SAAU,KAAI,SAAU;AAC3C,oBAAK,OAAO,QAAQ,mBAAmB,eAAe,gBAAiB;AACtE,sBAAI,OAAO,QAAQ,eAAgB;AACnC,yBAAO,OAAO,CAAE,QAAS;AAAA;AAAA;AAAA,mBAGrB;AACN,mBAAK,OAAQ,QAAU,SAAU,KAAK;AACrC,oBAAI,SAAS,IAAG,QAAS,WAAW;AACpC,uBAAO,SAAU,MAAO;AACvB,sBAAI,QAAO,OAAO,KAAK,qBAAqB,eAC3C,KAAK,iBAAkB;AACxB,yBAAO,SAAQ,MAAK,UAAU;AAAA;AAAA;AAMhC,mBAAK,KAAM,QAAS,SAAU,KAAI,SAAU;AAC3C,oBAAK,OAAO,QAAQ,mBAAmB,eAAe,gBAAiB;AACtE,sBAAI,OAAM,IAAG,OACZ,OAAO,QAAQ,eAAgB;AAEhC,sBAAK,MAAO;AAGX,4BAAO,KAAK,iBAAkB;AAC9B,wBAAK,SAAQ,MAAK,UAAU,KAAK;AAChC,6BAAO,CAAE;AAAA;AAIV,4BAAQ,QAAQ,kBAAmB;AACnC,yBAAI;AACJ,2BAAU,OAAO,MAAO,OAAU;AACjC,8BAAO,KAAK,iBAAkB;AAC9B,0BAAK,SAAQ,MAAK,UAAU,KAAK;AAChC,+BAAO,CAAE;AAAA;AAAA;AAAA;AAKZ,yBAAO;AAAA;AAAA;AAAA;AAMV,iBAAK,KAAM,SAAU,SAAQ,uBAC5B,SAAU,KAAK,SAAU;AACxB,kBAAK,OAAO,QAAQ,yBAAyB,aAAc;AAC1D,uBAAO,QAAQ,qBAAsB;AAAA,yBAG1B,SAAQ,KAAM;AACzB,uBAAO,QAAQ,iBAAkB;AAAA;AAAA,gBAInC,SAAU,KAAK,SAAU;AACxB,kBAAI,MACH,MAAM,IACN,KAAI,GAGJ,UAAU,QAAQ,qBAAsB;AAGzC,kBAAK,QAAQ,KAAM;AAClB,uBAAU,OAAO,QAAS,OAAU;AACnC,sBAAK,KAAK,aAAa,GAAI;AAC1B,wBAAI,KAAM;AAAA;AAAA;AAIZ,uBAAO;AAAA;AAER,qBAAO;AAAA;AAIT,iBAAK,KAAM,WAAY,SAAQ,0BAA0B,SAAU,WAAW,SAAU;AACvF,kBAAK,OAAO,QAAQ,2BAA2B,eAAe,gBAAiB;AAC9E,uBAAO,QAAQ,uBAAwB;AAAA;AAAA;AAUzC,4BAAgB;AAOhB,wBAAY;AAEZ,gBAAO,SAAQ,MAAM,QAAQ,KAAM,UAAS,mBAAuB;AAIlE,sBAAQ,SAAU,IAAK;AAEtB,oBAAI;AAOJ,wBAAQ,YAAa,IAAK,YAAY,YAAY,UAAU,uBAC1C,UAAU;AAO5B,oBAAK,GAAG,iBAAkB,wBAAyB,QAAS;AAC3D,4BAAU,KAAM,WAAW,aAAa;AAAA;AAKzC,oBAAK,CAAC,GAAG,iBAAkB,cAAe,QAAS;AAClD,4BAAU,KAAM,QAAQ,aAAa,eAAe,WAAW;AAAA;AAIhE,oBAAK,CAAC,GAAG,iBAAkB,UAAU,UAAU,MAAO,QAAS;AAC9D,4BAAU,KAAM;AAAA;AAQjB,wBAAQ,UAAS,cAAe;AAChC,sBAAM,aAAc,QAAQ;AAC5B,mBAAG,YAAa;AAChB,oBAAK,CAAC,GAAG,iBAAkB,aAAc,QAAS;AACjD,4BAAU,KAAM,QAAQ,aAAa,UAAU,aAAa,OAC3D,aAAa;AAAA;AAMf,oBAAK,CAAC,GAAG,iBAAkB,YAAa,QAAS;AAChD,4BAAU,KAAM;AAAA;AAMjB,oBAAK,CAAC,GAAG,iBAAkB,OAAO,UAAU,MAAO,QAAS;AAC3D,4BAAU,KAAM;AAAA;AAKjB,mBAAG,iBAAkB;AACrB,0BAAU,KAAM;AAAA;AAGjB,sBAAQ,SAAU,IAAK;AACtB,mBAAG,YAAY;AAKf,oBAAI,QAAQ,UAAS,cAAe;AACpC,sBAAM,aAAc,QAAQ;AAC5B,mBAAG,YAAa,OAAQ,aAAc,QAAQ;AAI9C,oBAAK,GAAG,iBAAkB,YAAa,QAAS;AAC/C,4BAAU,KAAM,SAAS,aAAa;AAAA;AAKvC,oBAAK,GAAG,iBAAkB,YAAa,WAAW,GAAI;AACrD,4BAAU,KAAM,YAAY;AAAA;AAK7B,wBAAQ,YAAa,IAAK,WAAW;AACrC,oBAAK,GAAG,iBAAkB,aAAc,WAAW,GAAI;AACtD,4BAAU,KAAM,YAAY;AAAA;AAK7B,mBAAG,iBAAkB;AACrB,0BAAU,KAAM;AAAA;AAAA;AAIlB,gBAAO,SAAQ,kBAAkB,QAAQ,KAAQ,UAAU,QAAQ,WAClE,QAAQ,yBACR,QAAQ,sBACR,QAAQ,oBACR,QAAQ,oBAA0B;AAElC,sBAAQ,SAAU,IAAK;AAItB,yBAAQ,oBAAoB,QAAQ,KAAM,IAAI;AAI9C,wBAAQ,KAAM,IAAI;AAClB,8BAAc,KAAM,MAAM;AAAA;AAAA;AAI5B,wBAAY,UAAU,UAAU,IAAI,OAAQ,UAAU,KAAM;AAC5D,4BAAgB,cAAc,UAAU,IAAI,OAAQ,cAAc,KAAM;AAIxE,yBAAa,QAAQ,KAAM,QAAQ;AAKnC,wBAAW,cAAc,QAAQ,KAAM,QAAQ,YAC9C,SAAU,GAAG,GAAI;AAChB,kBAAI,QAAQ,EAAE,aAAa,IAAI,EAAE,kBAAkB,GAClD,MAAM,KAAK,EAAE;AACd,qBAAO,MAAM,OAAO,CAAC,CAAG,QAAO,IAAI,aAAa,KAC/C,OAAM,WACL,MAAM,SAAU,OAChB,EAAE,2BAA2B,EAAE,wBAAyB,OAAQ;AAAA,gBAGnE,SAAU,GAAG,GAAI;AAChB,kBAAK,GAAI;AACR,uBAAU,IAAI,EAAE,YAAe;AAC9B,sBAAK,MAAM,GAAI;AACd,2BAAO;AAAA;AAAA;AAAA;AAIV,qBAAO;AAAA;AAOT,wBAAY,aACZ,SAAU,GAAG,GAAI;AAGhB,kBAAK,MAAM,GAAI;AACd,+BAAe;AACf,uBAAO;AAAA;AAIR,kBAAI,UAAU,CAAC,EAAE,0BAA0B,CAAC,EAAE;AAC9C,kBAAK,SAAU;AACd,uBAAO;AAAA;AAQR,wBAAY,GAAE,iBAAiB,MAAS,GAAE,iBAAiB,KAC1D,EAAE,wBAAyB,KAG3B;AAGD,kBAAK,UAAU,KACZ,CAAC,SAAQ,gBAAgB,EAAE,wBAAyB,OAAQ,SAAY;AAO1E,oBAAK,KAAK,aAAY,EAAE,iBAAiB,gBACxC,UAAU,cAAc,IAAM;AAC9B,yBAAO;AAAA;AAOR,oBAAK,KAAK,aAAY,EAAE,iBAAiB,gBACxC,UAAU,cAAc,IAAM;AAC9B,yBAAO;AAAA;AAIR,uBAAO,YACJ,SAAS,WAAW,KAAM,SAAS,WAAW,KAChD;AAAA;AAGF,qBAAO,UAAU,IAAI,KAAK;AAAA,gBAE3B,SAAU,GAAG,GAAI;AAGhB,kBAAK,MAAM,GAAI;AACd,+BAAe;AACf,uBAAO;AAAA;AAGR,kBAAI,KACH,KAAI,GACJ,MAAM,EAAE,YACR,MAAM,EAAE,YACR,KAAK,CAAE,IACP,KAAK,CAAE;AAGR,kBAAK,CAAC,OAAO,CAAC,KAAM;AAMnB,uBAAO,KAAK,YAAW,KACtB,KAAK,YAAW,IAEhB,MAAM,KACN,MAAM,IACN,YACE,SAAS,WAAW,KAAM,SAAS,WAAW,KAChD;AAAA,yBAGU,QAAQ,KAAM;AACzB,uBAAO,aAAc,GAAG;AAAA;AAIzB,oBAAM;AACN,qBAAU,MAAM,IAAI,YAAe;AAClC,mBAAG,QAAS;AAAA;AAEb,oBAAM;AACN,qBAAU,MAAM,IAAI,YAAe;AAClC,mBAAG,QAAS;AAAA;AAIb,qBAAQ,GAAI,QAAQ,GAAI,KAAM;AAC7B;AAAA;AAGD,qBAAO,KAGN,aAAc,GAAI,KAAK,GAAI,OAO3B,GAAI,OAAO,eAAe,KAC1B,GAAI,OAAO,eAAe,IAE1B;AAAA;AAGF,mBAAO;AAAA;AAGR,kBAAO,UAAU,SAAU,MAAM,UAAW;AAC3C,mBAAO,QAAQ,MAAM,MAAM,MAAM;AAAA;AAGlC,kBAAO,kBAAkB,SAAU,MAAM,MAAO;AAC/C,wBAAa;AAEb,gBAAK,SAAQ,mBAAmB,kBAC/B,CAAC,uBAAwB,OAAO,QAC9B,EAAC,iBAAiB,CAAC,cAAc,KAAM,UACvC,EAAC,aAAiB,CAAC,UAAU,KAAM,QAAW;AAEhD,kBAAI;AACH,oBAAI,MAAM,QAAQ,KAAM,MAAM;AAG9B,oBAAK,OAAO,SAAQ,qBAInB,KAAK,YAAY,KAAK,SAAS,aAAa,IAAK;AACjD,yBAAO;AAAA;AAAA,uBAEC,GAAR;AACD,uCAAwB,MAAM;AAAA;AAAA;AAIhC,mBAAO,QAAQ,MAAM,WAAU,MAAM,CAAE,OAAS,SAAS;AAAA;AAG1D,kBAAO,WAAW,SAAU,SAAS,MAAO;AAO3C,gBAAO,SAAQ,iBAAiB,YAAa,WAAW;AACvD,0BAAa;AAAA;AAEd,mBAAO,UAAU,SAAS;AAAA;AAG3B,kBAAO,OAAO,SAAU,MAAM,MAAO;AAOpC,gBAAO,MAAK,iBAAiB,SAAU,WAAW;AACjD,0BAAa;AAAA;AAGd,gBAAI,MAAK,KAAK,WAAY,KAAK,gBAG9B,MAAM,OAAM,QAAO,KAAM,KAAK,YAAY,KAAK,iBAC9C,IAAI,MAAM,MAAM,CAAC,kBACjB;AAEF,mBAAO,QAAQ,SACd,MACA,SAAQ,cAAc,CAAC,iBACtB,KAAK,aAAc,QACjB,OAAM,KAAK,iBAAkB,UAAY,IAAI,YAC9C,IAAI,QACJ;AAAA;AAGJ,kBAAO,SAAS,SAAU,KAAM;AAC/B,mBAAS,OAAM,IAAK,QAAS,YAAY;AAAA;AAG1C,kBAAO,QAAQ,SAAU,KAAM;AAC9B,kBAAM,IAAI,MAAO,4CAA4C;AAAA;AAO9D,kBAAO,aAAa,SAAU,SAAU;AACvC,gBAAI,MACH,aAAa,IACb,IAAI,GACJ,KAAI;AAGL,2BAAe,CAAC,SAAQ;AACxB,wBAAY,CAAC,SAAQ,cAAc,QAAQ,MAAO;AAClD,oBAAQ,KAAM;AAEd,gBAAK,cAAe;AACnB,qBAAU,OAAO,QAAS,OAAU;AACnC,oBAAK,SAAS,QAAS,KAAM;AAC5B,sBAAI,WAAW,KAAM;AAAA;AAAA;AAGvB,qBAAQ,KAAM;AACb,wBAAQ,OAAQ,WAAY,IAAK;AAAA;AAAA;AAMnC,wBAAY;AAEZ,mBAAO;AAAA;AAOR,oBAAU,QAAO,UAAU,SAAU,MAAO;AAC3C,gBAAI,MACH,MAAM,IACN,KAAI,GACJ,WAAW,KAAK;AAEjB,gBAAK,CAAC,UAAW;AAGhB,qBAAU,OAAO,KAAM,OAAU;AAGhC,uBAAO,QAAS;AAAA;AAAA,uBAEN,aAAa,KAAK,aAAa,KAAK,aAAa,IAAK;AAIjE,kBAAK,OAAO,KAAK,gBAAgB,UAAW;AAC3C,uBAAO,KAAK;AAAA,qBACN;AAGN,qBAAM,OAAO,KAAK,YAAY,MAAM,OAAO,KAAK,aAAc;AAC7D,yBAAO,QAAS;AAAA;AAAA;AAAA,uBAGP,aAAa,KAAK,aAAa,GAAI;AAC9C,qBAAO,KAAK;AAAA;AAKb,mBAAO;AAAA;AAGR,iBAAO,QAAO,YAAY;AAAA,YAGzB,aAAa;AAAA,YAEb,cAAc;AAAA,YAEd,OAAO;AAAA,YAEP,YAAY;AAAA,YAEZ,MAAM;AAAA,YAEN,UAAU;AAAA,cACT,KAAK,EAAE,KAAK,cAAc,OAAO;AAAA,cACjC,KAAK,EAAE,KAAK;AAAA,cACZ,KAAK,EAAE,KAAK,mBAAmB,OAAO;AAAA,cACtC,KAAK,EAAE,KAAK;AAAA;AAAA,YAGb,WAAW;AAAA,cACV,QAAQ,SAAU,OAAQ;AACzB,sBAAO,KAAM,MAAO,GAAI,QAAS,WAAW;AAG5C,sBAAO,KAAQ,OAAO,MAAO,MAAO,MACnC,MAAO,MAAO,IAAK,QAAS,WAAW;AAExC,oBAAK,MAAO,OAAQ,MAAO;AAC1B,wBAAO,KAAM,MAAM,MAAO,KAAM;AAAA;AAGjC,uBAAO,MAAM,MAAO,GAAG;AAAA;AAAA,cAGxB,SAAS,SAAU,OAAQ;AAY1B,sBAAO,KAAM,MAAO,GAAI;AAExB,oBAAK,MAAO,GAAI,MAAO,GAAG,OAAQ,OAAQ;AAGzC,sBAAK,CAAC,MAAO,IAAM;AAClB,4BAAO,MAAO,MAAO;AAAA;AAKtB,wBAAO,KAAM,CAAG,OAAO,KACtB,MAAO,KAAQ,OAAO,MAAO,KAC7B,IAAM,OAAO,OAAQ,UAAU,MAAO,OAAQ;AAC/C,wBAAO,KAAM,CAAK,OAAO,KAAM,MAAO,MAAS,MAAO,OAAQ;AAAA,2BAGnD,MAAO,IAAM;AACxB,0BAAO,MAAO,MAAO;AAAA;AAGtB,uBAAO;AAAA;AAAA,cAGR,UAAU,SAAU,OAAQ;AAC3B,oBAAI,QACH,WAAW,CAAC,MAAO,MAAO,MAAO;AAElC,oBAAK,UAAW,SAAU,KAAM,MAAO,KAAQ;AAC9C,yBAAO;AAAA;AAIR,oBAAK,MAAO,IAAM;AACjB,wBAAO,KAAM,MAAO,MAAO,MAAO,MAAO;AAAA,2BAG9B,YAAY,QAAQ,KAAM,aAGnC,UAAS,UAAU,UAAU,UAG7B,UAAS,SAAS,QAAS,KAAK,SAAS,SAAS,UAAW,SAAS,SAAW;AAGnF,wBAAO,KAAM,MAAO,GAAI,MAAO,GAAG;AAClC,wBAAO,KAAM,SAAS,MAAO,GAAG;AAAA;AAIjC,uBAAO,MAAM,MAAO,GAAG;AAAA;AAAA;AAAA,YAIzB,QAAQ;AAAA,cAEP,OAAO,SAAU,kBAAmB;AACnC,oBAAI,YAAW,iBAAiB,QAAS,WAAW,WAAY;AAChE,uBAAO,qBAAqB,MAC3B,WAAW;AACV,yBAAO;AAAA,oBAER,SAAU,MAAO;AAChB,yBAAO,KAAK,YAAY,KAAK,SAAS,kBAAkB;AAAA;AAAA;AAAA,cAI3D,SAAS,SAAU,WAAY;AAC9B,oBAAI,UAAU,WAAY,YAAY;AAEtC,uBAAO,WACJ,WAAU,IAAI,OAAQ,QAAQ,aAC/B,MAAM,YAAY,MAAM,aAAa,WAAa,WACjD,WAAW,SAAU,MAAO;AAC3B,yBAAO,QAAQ,KACd,OAAO,KAAK,cAAc,YAAY,KAAK,aAC3C,OAAO,KAAK,iBAAiB,eAC5B,KAAK,aAAc,YACpB;AAAA;AAAA;AAAA,cAKN,QAAQ,SAAU,MAAM,UAAU,OAAQ;AACzC,uBAAO,SAAU,MAAO;AACvB,sBAAI,SAAS,QAAO,KAAM,MAAM;AAEhC,sBAAK,UAAU,MAAO;AACrB,2BAAO,aAAa;AAAA;AAErB,sBAAK,CAAC,UAAW;AAChB,2BAAO;AAAA;AAGR,4BAAU;AAIV,yBAAO,aAAa,MAAM,WAAW,QACpC,aAAa,OAAO,WAAW,QAC/B,aAAa,OAAO,SAAS,OAAO,QAAS,WAAY,IACzD,aAAa,OAAO,SAAS,OAAO,QAAS,SAAU,KACvD,aAAa,OAAO,SAAS,OAAO,MAAO,CAAC,MAAM,YAAa,QAC/D,aAAa,OAAS,OAAM,OAAO,QAAS,aAAa,OAAQ,KAAM,QAAS,SAAU,KAC1F,aAAa,OAAO,WAAW,SAAS,OAAO,MAAO,GAAG,MAAM,SAAS,OAAQ,QAAQ,MACxF;AAAA;AAAA;AAAA,cAMH,SAAS,SAAU,MAAM,MAAM,WAAW,OAAO,MAAO;AACvD,oBAAI,SAAS,KAAK,MAAO,GAAG,OAAQ,OACnC,UAAU,KAAK,MAAO,QAAS,QAC/B,SAAS,SAAS;AAEnB,uBAAO,UAAU,KAAK,SAAS,IAG9B,SAAU,MAAO;AAChB,yBAAO,CAAC,CAAC,KAAK;AAAA,oBAGf,SAAU,MAAM,UAAU,KAAM;AAC/B,sBAAI,OAAO,aAAa,YAAY,MAAM,WAAW,QACpD,OAAM,WAAW,UAAU,gBAAgB,mBAC3C,SAAS,KAAK,YACd,OAAO,UAAU,KAAK,SAAS,eAC/B,WAAW,CAAC,OAAO,CAAC,QACpB,OAAO;AAER,sBAAK,QAAS;AAGb,wBAAK,QAAS;AACb,6BAAQ,MAAM;AACb,+BAAO;AACP,+BAAU,OAAO,KAAM,OAAU;AAChC,8BAAK,SACJ,KAAK,SAAS,kBAAkB,OAChC,KAAK,aAAa,GAAI;AAEtB,mCAAO;AAAA;AAAA;AAKT,iCAAQ,OAAM,SAAS,UAAU,CAAC,UAAS;AAAA;AAE5C,6BAAO;AAAA;AAGR,6BAAQ,CAAE,UAAU,OAAO,aAAa,OAAO;AAG/C,wBAAK,WAAW,UAAW;AAK1B,6BAAO;AACP,mCAAa,KAAM,YAAe,MAAM,WAAY;AAIpD,oCAAc,WAAY,KAAK,aAC5B,YAAY,KAAK,YAAa;AAEjC,8BAAQ,YAAa,SAAU;AAC/B,kCAAY,MAAO,OAAQ,WAAW,MAAO;AAC7C,6BAAO,aAAa,MAAO;AAC3B,6BAAO,aAAa,OAAO,WAAY;AAEvC,6BAAU,OAAO,EAAE,aAAa,QAAQ,KAAM,SAG3C,QAAO,YAAY,MAAO,OAAM,OAAU;AAG5C,4BAAK,KAAK,aAAa,KAAK,EAAE,QAAQ,SAAS,MAAO;AACrD,sCAAa,QAAS,CAAE,SAAS,WAAW;AAC5C;AAAA;AAAA;AAAA,2BAII;AAGN,0BAAK,UAAW;AAGf,+BAAO;AACP,qCAAa,KAAM,YAAe,MAAM,WAAY;AAIpD,sCAAc,WAAY,KAAK,aAC5B,YAAY,KAAK,YAAa;AAEjC,gCAAQ,YAAa,SAAU;AAC/B,oCAAY,MAAO,OAAQ,WAAW,MAAO;AAC7C,+BAAO;AAAA;AAKR,0BAAK,SAAS,OAAQ;AAGrB,+BAAU,OAAO,EAAE,aAAa,QAAQ,KAAM,SAC3C,QAAO,YAAY,MAAO,OAAM,OAAU;AAE5C,8BAAO,UACN,KAAK,SAAS,kBAAkB,OAChC,KAAK,aAAa,MAClB,EAAE,MAAO;AAGT,gCAAK,UAAW;AACf,2CAAa,KAAM,YAChB,MAAM,WAAY;AAIrB,4CAAc,WAAY,KAAK,aAC5B,YAAY,KAAK,YAAa;AAEjC,0CAAa,QAAS,CAAE,SAAS;AAAA;AAGlC,gCAAK,SAAS,MAAO;AACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAQL,4BAAQ;AACR,2BAAO,SAAS,SAAW,OAAO,UAAU,KAAK,OAAO,SAAS;AAAA;AAAA;AAAA;AAAA,cAKrE,UAAU,SAAU,QAAQ,UAAW;AAMtC,oBAAI,MACH,MAAK,KAAK,QAAS,WAAY,KAAK,WAAY,OAAO,kBACtD,QAAO,MAAO,yBAAyB;AAKzC,oBAAK,IAAI,UAAY;AACpB,yBAAO,IAAI;AAAA;AAIZ,oBAAK,IAAG,SAAS,GAAI;AACpB,yBAAO,CAAE,QAAQ,QAAQ,IAAI;AAC7B,yBAAO,KAAK,WAAW,eAAgB,OAAO,iBAC7C,aAAc,SAAU,MAAM,UAAU;AACvC,wBAAI,KACH,UAAU,IAAI,MAAM,WACpB,KAAI,QAAQ;AACb,2BAAQ,MAAM;AACb,4BAAM,SAAS,MAAM,QAAS;AAC9B,2BAAM,OAAQ,CAAG,UAAS,OAAQ,QAAS;AAAA;AAAA,uBAG7C,SAAU,MAAO;AAChB,2BAAO,IAAI,MAAM,GAAG;AAAA;AAAA;AAIvB,uBAAO;AAAA;AAAA;AAAA,YAIT,SAAS;AAAA,cAGR,OAAO,aAAc,SAAU,UAAW;AAKzC,oBAAI,QAAQ,IACX,UAAU,IACV,UAAU,QAAS,SAAS,QAAS,QAAO;AAE7C,uBAAO,QAAS,WACf,aAAc,SAAU,MAAM,UAAS,UAAU,KAAM;AACtD,sBAAI,MACH,YAAY,QAAS,MAAM,MAAM,KAAK,KACtC,KAAI,KAAK;AAGV,yBAAQ,MAAM;AACb,wBAAO,OAAO,UAAW,KAAQ;AAChC,2BAAM,MAAM,CAAG,UAAS,MAAM;AAAA;AAAA;AAAA,qBAIjC,SAAU,MAAM,UAAU,KAAM;AAC/B,wBAAO,KAAM;AACb,0BAAS,OAAO,MAAM,KAAK;AAG3B,wBAAO,KAAM;AACb,yBAAO,CAAC,QAAQ;AAAA;AAAA;AAAA,cAInB,OAAO,aAAc,SAAU,UAAW;AACzC,uBAAO,SAAU,MAAO;AACvB,yBAAO,QAAQ,UAAU,MAAO,SAAS;AAAA;AAAA;AAAA,cAI3C,YAAY,aAAc,SAAU,MAAO;AAC1C,uBAAO,KAAK,QAAS,WAAW;AAChC,uBAAO,SAAU,MAAO;AACvB,yBAAS,MAAK,eAAe,QAAS,OAAS,QAAS,QAAS;AAAA;AAAA;AAAA,cAWnE,QAAQ,aAAc,SAAU,MAAO;AAGtC,oBAAK,CAAC,YAAY,KAAM,QAAQ,KAAO;AACtC,0BAAO,MAAO,uBAAuB;AAAA;AAEtC,uBAAO,KAAK,QAAS,WAAW,WAAY;AAC5C,uBAAO,SAAU,MAAO;AACvB,sBAAI;AACJ,qBAAG;AACF,wBAAO,WAAW,iBACjB,KAAK,OACL,KAAK,aAAc,eAAgB,KAAK,aAAc,SAAa;AAEnE,iCAAW,SAAS;AACpB,6BAAO,aAAa,QAAQ,SAAS,QAAS,OAAO,SAAU;AAAA;AAAA,2BAErD,QAAO,KAAK,eAAgB,KAAK,aAAa;AAC1D,yBAAO;AAAA;AAAA;AAAA,cAKT,UAAU,SAAU,MAAO;AAC1B,oBAAI,QAAO,QAAO,YAAY,QAAO,SAAS;AAC9C,uBAAO,SAAQ,MAAK,MAAO,OAAQ,KAAK;AAAA;AAAA,cAGzC,QAAQ,SAAU,MAAO;AACxB,uBAAO,SAAS;AAAA;AAAA,cAGjB,SAAS,SAAU,MAAO;AACzB,uBAAO,SAAS,UAAS,iBACtB,EAAC,UAAS,YAAY,UAAS,eACjC,CAAC,CAAG,MAAK,QAAQ,KAAK,QAAQ,CAAC,KAAK;AAAA;AAAA,cAItC,WAAW,qBAAsB;AAAA,cACjC,YAAY,qBAAsB;AAAA,cAElC,WAAW,SAAU,MAAO;AAI3B,oBAAI,YAAW,KAAK,SAAS;AAC7B,uBAAS,cAAa,WAAW,CAAC,CAAC,KAAK,WACrC,cAAa,YAAY,CAAC,CAAC,KAAK;AAAA;AAAA,cAGpC,YAAY,SAAU,MAAO;AAI5B,oBAAK,KAAK,YAAa;AAEtB,uBAAK,WAAW;AAAA;AAGjB,uBAAO,KAAK,aAAa;AAAA;AAAA,cAI1B,SAAS,SAAU,MAAO;AAMzB,qBAAM,OAAO,KAAK,YAAY,MAAM,OAAO,KAAK,aAAc;AAC7D,sBAAK,KAAK,WAAW,GAAI;AACxB,2BAAO;AAAA;AAAA;AAGT,uBAAO;AAAA;AAAA,cAGR,UAAU,SAAU,MAAO;AAC1B,uBAAO,CAAC,KAAK,QAAS,SAAW;AAAA;AAAA,cAIlC,UAAU,SAAU,MAAO;AAC1B,uBAAO,QAAQ,KAAM,KAAK;AAAA;AAAA,cAG3B,SAAS,SAAU,MAAO;AACzB,uBAAO,QAAQ,KAAM,KAAK;AAAA;AAAA,cAG3B,UAAU,SAAU,MAAO;AAC1B,oBAAI,OAAO,KAAK,SAAS;AACzB,uBAAO,SAAS,WAAW,KAAK,SAAS,YAAY,SAAS;AAAA;AAAA,cAG/D,QAAQ,SAAU,MAAO;AACxB,oBAAI;AACJ,uBAAO,KAAK,SAAS,kBAAkB,WACtC,KAAK,SAAS,UAIV,SAAO,KAAK,aAAc,YAAc,QAC3C,KAAK,kBAAkB;AAAA;AAAA,cAI1B,SAAS,uBAAwB,WAAW;AAC3C,uBAAO,CAAE;AAAA;AAAA,cAGV,QAAQ,uBAAwB,SAAU,eAAe,QAAS;AACjE,uBAAO,CAAE,SAAS;AAAA;AAAA,cAGnB,MAAM,uBAAwB,SAAU,eAAe,QAAQ,UAAW;AACzE,uBAAO,CAAE,WAAW,IAAI,WAAW,SAAS;AAAA;AAAA,cAG7C,QAAQ,uBAAwB,SAAU,cAAc,QAAS;AAChE,oBAAI,KAAI;AACR,uBAAQ,KAAI,QAAQ,MAAK,GAAI;AAC5B,+BAAa,KAAM;AAAA;AAEpB,uBAAO;AAAA;AAAA,cAGR,OAAO,uBAAwB,SAAU,cAAc,QAAS;AAC/D,oBAAI,KAAI;AACR,uBAAQ,KAAI,QAAQ,MAAK,GAAI;AAC5B,+BAAa,KAAM;AAAA;AAEpB,uBAAO;AAAA;AAAA,cAGR,MAAM,uBAAwB,SAAU,cAAc,QAAQ,UAAW;AACxE,oBAAI,KAAI,WAAW,IAClB,WAAW,SACX,WAAW,SACV,SACA;AACF,uBAAQ,EAAE,MAAK,KAAK;AACnB,+BAAa,KAAM;AAAA;AAEpB,uBAAO;AAAA;AAAA,cAGR,MAAM,uBAAwB,SAAU,cAAc,QAAQ,UAAW;AACxE,oBAAI,KAAI,WAAW,IAAI,WAAW,SAAS;AAC3C,uBAAQ,EAAE,KAAI,UAAU;AACvB,+BAAa,KAAM;AAAA;AAEpB,uBAAO;AAAA;AAAA;AAAA;AAKV,eAAK,QAAS,SAAU,KAAK,QAAS;AAGtC,eAAM,KAAK,EAAE,OAAO,MAAM,UAAU,MAAM,MAAM,MAAM,UAAU,MAAM,OAAO,QAAS;AACrF,iBAAK,QAAS,KAAM,kBAAmB;AAAA;AAExC,eAAM,KAAK,EAAE,QAAQ,MAAM,OAAO,QAAS;AAC1C,iBAAK,QAAS,KAAM,mBAAoB;AAAA;AAIzC,gCAAsB;AAAA;AACtB,qBAAW,YAAY,KAAK,UAAU,KAAK;AAC3C,eAAK,aAAa,IAAI;AAEtB,sBAAW,QAAO,WAAW,SAAU,UAAU,WAAY;AAC5D,gBAAI,SAAS,OAAO,QAAQ,MAC3B,OAAO,QAAQ,YACf,SAAS,WAAY,WAAW;AAEjC,gBAAK,QAAS;AACb,qBAAO,YAAY,IAAI,OAAO,MAAO;AAAA;AAGtC,oBAAQ;AACR,qBAAS;AACT,yBAAa,KAAK;AAElB,mBAAQ,OAAQ;AAGf,kBAAK,CAAC,WAAa,SAAQ,OAAO,KAAM,SAAY;AACnD,oBAAK,OAAQ;AAGZ,0BAAQ,MAAM,MAAO,MAAO,GAAI,WAAY;AAAA;AAE7C,uBAAO,KAAQ,SAAS;AAAA;AAGzB,wBAAU;AAGV,kBAAO,QAAQ,aAAa,KAAM,QAAY;AAC7C,0BAAU,MAAM;AAChB,uBAAO,KAAM;AAAA,kBACZ,OAAO;AAAA,kBAGP,MAAM,MAAO,GAAI,QAAS,QAAO;AAAA;AAElC,wBAAQ,MAAM,MAAO,QAAQ;AAAA;AAI9B,mBAAM,QAAQ,KAAK,QAAS;AAC3B,oBAAO,SAAQ,UAAW,MAAO,KAAM,WAAe,EAAC,WAAY,SAChE,SAAQ,WAAY,MAAQ,UAAc;AAC5C,4BAAU,MAAM;AAChB,yBAAO,KAAM;AAAA,oBACZ,OAAO;AAAA,oBACP;AAAA,oBACA,SAAS;AAAA;AAEV,0BAAQ,MAAM,MAAO,QAAQ;AAAA;AAAA;AAI/B,kBAAK,CAAC,SAAU;AACf;AAAA;AAAA;AAOF,mBAAO,YACN,MAAM,SACN,QACC,QAAO,MAAO,YAGd,WAAY,UAAU,QAAS,MAAO;AAAA;AAGzC,8BAAqB,QAAS;AAC7B,gBAAI,KAAI,GACP,MAAM,OAAO,QACb,WAAW;AACZ,mBAAQ,KAAI,KAAK,MAAM;AACtB,0BAAY,OAAQ,IAAI;AAAA;AAEzB,mBAAO;AAAA;AAGR,iCAAwB,SAAS,YAAY,MAAO;AACnD,gBAAI,OAAM,WAAW,KACpB,OAAO,WAAW,MAClB,MAAM,QAAQ,MACd,mBAAmB,QAAQ,QAAQ,cACnC,WAAW;AAEZ,mBAAO,WAAW,QAGjB,SAAU,MAAM,SAAS,KAAM;AAC9B,qBAAU,OAAO,KAAM,OAAU;AAChC,oBAAK,KAAK,aAAa,KAAK,kBAAmB;AAC9C,yBAAO,QAAS,MAAM,SAAS;AAAA;AAAA;AAGjC,qBAAO;AAAA,gBAIR,SAAU,MAAM,SAAS,KAAM;AAC9B,kBAAI,UAAU,aAAa,YAC1B,WAAW,CAAE,SAAS;AAGvB,kBAAK,KAAM;AACV,uBAAU,OAAO,KAAM,OAAU;AAChC,sBAAK,KAAK,aAAa,KAAK,kBAAmB;AAC9C,wBAAK,QAAS,MAAM,SAAS,MAAQ;AACpC,6BAAO;AAAA;AAAA;AAAA;AAAA,qBAIJ;AACN,uBAAU,OAAO,KAAM,OAAU;AAChC,sBAAK,KAAK,aAAa,KAAK,kBAAmB;AAC9C,iCAAa,KAAM,YAAe,MAAM,WAAY;AAIpD,kCAAc,WAAY,KAAK,aAC5B,YAAY,KAAK,YAAa;AAEjC,wBAAK,QAAQ,SAAS,KAAK,SAAS,eAAgB;AACnD,6BAAO,KAAM,SAAS;AAAA,+BACT,YAAW,YAAa,SACrC,SAAU,OAAQ,WAAW,SAAU,OAAQ,UAAW;AAG1D,6BAAS,SAAU,KAAM,SAAU;AAAA,2BAC7B;AAGN,kCAAa,OAAQ;AAGrB,0BAAO,SAAU,KAAM,QAAS,MAAM,SAAS,MAAU;AACxD,+BAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAMZ,qBAAO;AAAA;AAAA;AAIV,kCAAyB,UAAW;AACnC,mBAAO,SAAS,SAAS,IACxB,SAAU,MAAM,SAAS,KAAM;AAC9B,kBAAI,KAAI,SAAS;AACjB,qBAAQ,MAAM;AACb,oBAAK,CAAC,SAAU,IAAK,MAAM,SAAS,MAAQ;AAC3C,yBAAO;AAAA;AAAA;AAGT,qBAAO;AAAA,gBAER,SAAU;AAAA;AAGZ,oCAA2B,UAAU,UAAU,SAAU;AACxD,gBAAI,KAAI,GACP,MAAM,SAAS;AAChB,mBAAQ,KAAI,KAAK,MAAM;AACtB,sBAAQ,UAAU,SAAU,KAAK;AAAA;AAElC,mBAAO;AAAA;AAGR,4BAAmB,WAAW,MAAK,SAAQ,SAAS,KAAM;AACzD,gBAAI,MACH,eAAe,IACf,KAAI,GACJ,MAAM,UAAU,QAChB,SAAS,QAAO;AAEjB,mBAAQ,KAAI,KAAK,MAAM;AACtB,kBAAO,OAAO,UAAW,KAAQ;AAChC,oBAAK,CAAC,WAAU,QAAQ,MAAM,SAAS,MAAQ;AAC9C,+BAAa,KAAM;AACnB,sBAAK,QAAS;AACb,yBAAI,KAAM;AAAA;AAAA;AAAA;AAAA;AAMd,mBAAO;AAAA;AAGR,8BAAqB,WAAW,UAAU,SAAS,YAAY,YAAY,cAAe;AACzF,gBAAK,cAAc,CAAC,WAAY,UAAY;AAC3C,2BAAa,WAAY;AAAA;AAE1B,gBAAK,cAAc,CAAC,WAAY,UAAY;AAC3C,2BAAa,WAAY,YAAY;AAAA;AAEtC,mBAAO,aAAc,SAAU,MAAM,SAAS,SAAS,KAAM;AAC5D,kBAAI,MAAM,IAAG,MACZ,SAAS,IACT,UAAU,IACV,cAAc,QAAQ,QAGtB,QAAQ,QAAQ,iBACf,YAAY,KACZ,QAAQ,WAAW,CAAE,WAAY,SACjC,KAID,YAAY,aAAe,SAAQ,CAAC,YACnC,SAAU,OAAO,QAAQ,WAAW,SAAS,OAC7C,OAED,aAAa,UAGZ,cAAgB,QAAO,YAAY,eAAe,cAGjD,KAGA,UACD;AAGF,kBAAK,SAAU;AACd,wBAAS,WAAW,YAAY,SAAS;AAAA;AAI1C,kBAAK,YAAa;AACjB,uBAAO,SAAU,YAAY;AAC7B,2BAAY,MAAM,IAAI,SAAS;AAG/B,qBAAI,KAAK;AACT,uBAAQ,MAAM;AACb,sBAAO,OAAO,KAAM,KAAQ;AAC3B,+BAAY,QAAS,OAAQ,CAAG,WAAW,QAAS,OAAQ;AAAA;AAAA;AAAA;AAK/D,kBAAK,MAAO;AACX,oBAAK,cAAc,WAAY;AAC9B,sBAAK,YAAa;AAGjB,2BAAO;AACP,yBAAI,WAAW;AACf,2BAAQ,MAAM;AACb,0BAAO,OAAO,WAAY,KAAQ;AAGjC,6BAAK,KAAQ,UAAW,MAAM;AAAA;AAAA;AAGhC,+BAAY,MAAQ,aAAa,IAAM,MAAM;AAAA;AAI9C,uBAAI,WAAW;AACf,yBAAQ,MAAM;AACb,wBAAO,QAAO,WAAY,QACvB,QAAO,aAAa,SAAS,MAAM,QAAS,OAAQ,OAAQ,IAAK;AAEnE,2BAAM,QAAS,CAAG,SAAS,QAAS;AAAA;AAAA;AAAA;AAAA,qBAMjC;AACN,6BAAa,SACZ,eAAe,UACd,WAAW,OAAQ,aAAa,WAAW,UAC3C;AAEF,oBAAK,YAAa;AACjB,6BAAY,MAAM,SAAS,YAAY;AAAA,uBACjC;AACN,wBAAK,MAAO,SAAS;AAAA;AAAA;AAAA;AAAA;AAMzB,qCAA4B,QAAS;AACpC,gBAAI,cAAc,SAAS,GAC1B,MAAM,OAAO,QACb,kBAAkB,KAAK,SAAU,OAAQ,GAAI,OAC7C,mBAAmB,mBAAmB,KAAK,SAAU,MACrD,KAAI,kBAAkB,IAAI,GAG1B,eAAe,cAAe,SAAU,MAAO;AAC9C,qBAAO,SAAS;AAAA,eACd,kBAAkB,OACrB,kBAAkB,cAAe,SAAU,MAAO;AACjD,qBAAO,SAAS,cAAc,QAAS;AAAA,eACrC,kBAAkB,OACrB,WAAW,CAAE,SAAU,MAAM,SAAS,KAAM;AAC3C,kBAAI,MAAQ,CAAC,mBAAqB,QAAO,YAAY,qBAClD,iBAAe,SAAU,WAC1B,aAAc,MAAM,SAAS,OAC7B,gBAAiB,MAAM,SAAS;AAGlC,6BAAe;AACf,qBAAO;AAAA;AAGT,mBAAQ,KAAI,KAAK,MAAM;AACtB,kBAAO,UAAU,KAAK,SAAU,OAAQ,IAAI,OAAW;AACtD,2BAAW,CAAE,cAAe,eAAgB,WAAY;AAAA,qBAClD;AACN,0BAAU,KAAK,OAAQ,OAAQ,IAAI,MAAO,MAAO,MAAM,OAAQ,IAAI;AAGnE,oBAAK,QAAS,UAAY;AAGzB,sBAAI,EAAE;AACN,yBAAQ,IAAI,KAAK,KAAM;AACtB,wBAAK,KAAK,SAAU,OAAQ,GAAI,OAAS;AACxC;AAAA;AAAA;AAGF,yBAAO,WACN,KAAI,KAAK,eAAgB,WACzB,KAAI,KAAK,WAGT,OACE,MAAO,GAAG,KAAI,GACd,OAAQ,EAAE,OAAO,OAAQ,KAAI,GAAI,SAAS,MAAM,MAAM,OACtD,QAAS,QAAO,OAClB,SACA,KAAI,KAAK,kBAAmB,OAAO,MAAO,IAAG,KAC7C,IAAI,OAAO,kBAAqB,SAAS,OAAO,MAAO,KACvD,IAAI,OAAO,WAAY;AAAA;AAGzB,yBAAS,KAAM;AAAA;AAAA;AAIjB,mBAAO,eAAgB;AAAA;AAGxB,4CAAmC,iBAAiB,aAAc;AACjE,gBAAI,QAAQ,YAAY,SAAS,GAChC,YAAY,gBAAgB,SAAS,GACrC,eAAe,SAAU,MAAM,SAAS,KAAK,SAAS,WAAY;AACjE,kBAAI,MAAM,GAAG,SACZ,eAAe,GACf,KAAI,KACJ,YAAY,QAAQ,IACpB,aAAa,IACb,gBAAgB,kBAGhB,QAAQ,QAAQ,aAAa,KAAK,KAAM,OAAS,KAAK,YAGtD,gBAAkB,WAAW,iBAAiB,OAAO,IAAI,KAAK,YAAY,KAC1E,MAAM,MAAM;AAEb,kBAAK,WAAY;AAMhB,mCAAmB,WAAW,aAAY,WAAW;AAAA;AAMtD,qBAAQ,OAAM,OAAS,QAAO,MAAO,QAAS,MAAM,MAAM;AACzD,oBAAK,aAAa,MAAO;AACxB,sBAAI;AAMJ,sBAAK,CAAC,WAAW,KAAK,iBAAiB,WAAW;AACjD,gCAAa;AACb,0BAAM,CAAC;AAAA;AAER,yBAAU,UAAU,gBAAiB,MAAU;AAC9C,wBAAK,QAAS,MAAM,WAAW,WAAU,MAAQ;AAChD,8BAAQ,KAAM;AACd;AAAA;AAAA;AAGF,sBAAK,WAAY;AAChB,8BAAU;AAAA;AAAA;AAKZ,oBAAK,OAAQ;AAGZ,sBAAO,OAAO,CAAC,WAAW,MAAS;AAClC;AAAA;AAID,sBAAK,MAAO;AACX,8BAAU,KAAM;AAAA;AAAA;AAAA;AAOnB,8BAAgB;AAShB,kBAAK,SAAS,OAAM,cAAe;AAClC,oBAAI;AACJ,uBAAU,UAAU,YAAa,MAAU;AAC1C,0BAAS,WAAW,YAAY,SAAS;AAAA;AAG1C,oBAAK,MAAO;AAGX,sBAAK,eAAe,GAAI;AACvB,2BAAQ,MAAM;AACb,0BAAK,CAAG,WAAW,OAAO,WAAY,MAAQ;AAC7C,mCAAY,MAAM,IAAI,KAAM;AAAA;AAAA;AAAA;AAM/B,+BAAa,SAAU;AAAA;AAIxB,sBAAK,MAAO,SAAS;AAGrB,oBAAK,aAAa,CAAC,QAAQ,WAAW,SAAS,KAC5C,eAAe,YAAY,SAAW,GAAI;AAE5C,0BAAO,WAAY;AAAA;AAAA;AAKrB,kBAAK,WAAY;AAChB,0BAAU;AACV,mCAAmB;AAAA;AAGpB,qBAAO;AAAA;AAGT,mBAAO,QACN,aAAc,gBACd;AAAA;AAGF,oBAAU,QAAO,UAAU,SAAU,UAAU,OAAgC;AAC9E,gBAAI,IACH,cAAc,IACd,kBAAkB,IAClB,SAAS,cAAe,WAAW;AAEpC,gBAAK,CAAC,QAAS;AAGd,kBAAK,CAAC,OAAQ;AACb,wBAAQ,UAAU;AAAA;AAEnB,mBAAI,MAAM;AACV,qBAAQ,MAAM;AACb,yBAAS,kBAAmB,MAAO;AACnC,oBAAK,OAAQ,UAAY;AACxB,8BAAY,KAAM;AAAA,uBACZ;AACN,kCAAgB,KAAM;AAAA;AAAA;AAKxB,uBAAS,cACR,UACA,yBAA0B,iBAAiB;AAI5C,qBAAO,WAAW;AAAA;AAEnB,mBAAO;AAAA;AAYR,mBAAS,QAAO,SAAS,SAAU,UAAU,SAAS,SAAS,MAAO;AACrE,gBAAI,IAAG,QAAQ,OAAO,MAAM,OAC3B,WAAW,OAAO,aAAa,cAAc,UAC7C,QAAQ,CAAC,QAAQ,UAAY,WAAW,SAAS,YAAY;AAE9D,sBAAU,WAAW;AAIrB,gBAAK,MAAM,WAAW,GAAI;AAGzB,uBAAS,MAAO,KAAM,MAAO,GAAI,MAAO;AACxC,kBAAK,OAAO,SAAS,KAAO,SAAQ,OAAQ,IAAM,SAAS,QAC1D,QAAQ,aAAa,KAAK,kBAAkB,KAAK,SAAU,OAAQ,GAAI,OAAS;AAEhF,0BAAY,MAAK,KAAM,MAAQ,MAAM,QAAS,GAC5C,QAAS,WAAW,YAAa,YAAa,IAAM;AACtD,oBAAK,CAAC,SAAU;AACf,yBAAO;AAAA,2BAGI,UAAW;AACtB,4BAAU,QAAQ;AAAA;AAGnB,2BAAW,SAAS,MAAO,OAAO,QAAQ,MAAM;AAAA;AAIjD,mBAAI,UAAW,gBAAiB,KAAM,YAAa,IAAI,OAAO;AAC9D,qBAAQ,MAAM;AACb,wBAAQ,OAAQ;AAGhB,oBAAK,KAAK,SAAY,OAAO,MAAM,OAAW;AAC7C;AAAA;AAED,oBAAO,QAAO,KAAK,KAAM,OAAW;AAGnC,sBAAO,OAAO,MACb,MAAM,QAAS,GAAI,QAAS,WAAW,YACvC,SAAS,KAAM,OAAQ,GAAI,SAAU,YAAa,QAAQ,eACzD,UACI;AAGL,2BAAO,OAAQ,IAAG;AAClB,+BAAW,KAAK,UAAU,WAAY;AACtC,wBAAK,CAAC,UAAW;AAChB,4BAAK,MAAO,SAAS;AACrB,6BAAO;AAAA;AAGR;AAAA;AAAA;AAAA;AAAA;AAQJ,YAAE,aAAY,QAAS,UAAU,QAChC,MACA,SACA,CAAC,gBACD,SACA,CAAC,WAAW,SAAS,KAAM,aAAc,YAAa,QAAQ,eAAgB;AAE/E,mBAAO;AAAA;AAMR,mBAAQ,aAAa,QAAQ,MAAO,IAAK,KAAM,WAAY,KAAM,QAAS;AAI1E,mBAAQ,mBAAmB,CAAC,CAAC;AAG7B;AAIA,mBAAQ,eAAe,QAAQ,SAAU,IAAK;AAG7C,mBAAO,GAAG,wBAAyB,UAAS,cAAe,eAAiB;AAAA;AAM7E,cAAK,CAAC,QAAQ,SAAU,IAAK;AAC5B,eAAG,YAAY;AACf,mBAAO,GAAG,WAAW,aAAc,YAAa;AAAA,cAC3C;AACL,sBAAW,0BAA0B,SAAU,MAAM,MAAM,QAAQ;AAClE,kBAAK,CAAC,QAAQ;AACb,uBAAO,KAAK,aAAc,MAAM,KAAK,kBAAkB,SAAS,IAAI;AAAA;AAAA;AAAA;AAOvE,cAAK,CAAC,SAAQ,cAAc,CAAC,QAAQ,SAAU,IAAK;AACnD,eAAG,YAAY;AACf,eAAG,WAAW,aAAc,SAAS;AACrC,mBAAO,GAAG,WAAW,aAAc,aAAc;AAAA,cAC5C;AACL,sBAAW,SAAS,SAAU,MAAM,OAAO,QAAQ;AAClD,kBAAK,CAAC,UAAS,KAAK,SAAS,kBAAkB,SAAU;AACxD,uBAAO,KAAK;AAAA;AAAA;AAAA;AAOf,cAAK,CAAC,QAAQ,SAAU,IAAK;AAC5B,mBAAO,GAAG,aAAc,eAAgB;AAAA,cACnC;AACL,sBAAW,UAAU,SAAU,MAAM,MAAM,QAAQ;AAClD,kBAAI;AACJ,kBAAK,CAAC,QAAQ;AACb,uBAAO,KAAM,UAAW,OAAO,KAAK,gBACjC,OAAM,KAAK,iBAAkB,UAAY,IAAI,YAC9C,IAAI,QACJ;AAAA;AAAA;AAAA;AAKL,iBAAO;AAAA,UAEF;AAIL,eAAO,OAAO;AACd,eAAO,OAAO,OAAO;AAGrB,eAAO,KAAM,OAAQ,OAAO,KAAK;AACjC,eAAO,aAAa,OAAO,SAAS,OAAO;AAC3C,eAAO,OAAO,OAAO;AACrB,eAAO,WAAW,OAAO;AACzB,eAAO,WAAW,OAAO;AACzB,eAAO,iBAAiB,OAAO;AAK/B,YAAI,MAAM,SAAU,MAAM,MAAK,OAAQ;AACtC,cAAI,UAAU,IACb,WAAW,UAAU;AAEtB,iBAAU,QAAO,KAAM,UAAW,KAAK,aAAa,GAAI;AACvD,gBAAK,KAAK,aAAa,GAAI;AAC1B,kBAAK,YAAY,OAAQ,MAAO,GAAI,QAAU;AAC7C;AAAA;AAED,sBAAQ,KAAM;AAAA;AAAA;AAGhB,iBAAO;AAAA;AAIR,YAAI,WAAW,SAAU,GAAG,MAAO;AAClC,cAAI,UAAU;AAEd,iBAAQ,GAAG,IAAI,EAAE,aAAc;AAC9B,gBAAK,EAAE,aAAa,KAAK,MAAM,MAAO;AACrC,sBAAQ,KAAM;AAAA;AAAA;AAIhB,iBAAO;AAAA;AAIR,YAAI,gBAAgB,OAAO,KAAK,MAAM;AAItC,0BAAmB,MAAM,MAAO;AAE/B,iBAAO,KAAK,YAAY,KAAK,SAAS,kBAAkB,KAAK;AAAA;AAG9D,YAAI,aAAe;AAKnB,wBAAiB,UAAU,WAAW,KAAM;AAC3C,cAAK,YAAY,YAAc;AAC9B,mBAAO,OAAO,KAAM,UAAU,SAAU,MAAM,GAAI;AACjD,qBAAO,CAAC,CAAC,UAAU,KAAM,MAAM,GAAG,UAAW;AAAA;AAAA;AAK/C,cAAK,UAAU,UAAW;AACzB,mBAAO,OAAO,KAAM,UAAU,SAAU,MAAO;AAC9C,qBAAS,SAAS,cAAgB;AAAA;AAAA;AAKpC,cAAK,OAAO,cAAc,UAAW;AACpC,mBAAO,OAAO,KAAM,UAAU,SAAU,MAAO;AAC9C,qBAAS,SAAQ,KAAM,WAAW,QAAS,OAAS;AAAA;AAAA;AAKtD,iBAAO,OAAO,OAAQ,WAAW,UAAU;AAAA;AAG5C,eAAO,SAAS,SAAU,MAAM,OAAO,KAAM;AAC5C,cAAI,OAAO,MAAO;AAElB,cAAK,KAAM;AACV,mBAAO,UAAU,OAAO;AAAA;AAGzB,cAAK,MAAM,WAAW,KAAK,KAAK,aAAa,GAAI;AAChD,mBAAO,OAAO,KAAK,gBAAiB,MAAM,QAAS,CAAE,QAAS;AAAA;AAG/D,iBAAO,OAAO,KAAK,QAAS,MAAM,OAAO,KAAM,OAAO,SAAU,OAAO;AACtE,mBAAO,MAAK,aAAa;AAAA;AAAA;AAI3B,eAAO,GAAG,OAAQ;AAAA,UACjB,MAAM,SAAU,UAAW;AAC1B,gBAAI,GAAG,KACN,MAAM,KAAK,QACX,QAAO;AAER,gBAAK,OAAO,aAAa,UAAW;AACnC,qBAAO,KAAK,UAAW,OAAQ,UAAW,OAAQ,WAAW;AAC5D,qBAAM,IAAI,GAAG,IAAI,KAAK,KAAM;AAC3B,sBAAK,OAAO,SAAU,MAAM,IAAK,OAAS;AACzC,2BAAO;AAAA;AAAA;AAAA;AAAA;AAMX,kBAAM,KAAK,UAAW;AAEtB,iBAAM,IAAI,GAAG,IAAI,KAAK,KAAM;AAC3B,qBAAO,KAAM,UAAU,MAAM,IAAK;AAAA;AAGnC,mBAAO,MAAM,IAAI,OAAO,WAAY,OAAQ;AAAA;AAAA,UAE7C,QAAQ,SAAU,UAAW;AAC5B,mBAAO,KAAK,UAAW,OAAQ,MAAM,YAAY,IAAI;AAAA;AAAA,UAEtD,KAAK,SAAU,UAAW;AACzB,mBAAO,KAAK,UAAW,OAAQ,MAAM,YAAY,IAAI;AAAA;AAAA,UAEtD,IAAI,SAAU,UAAW;AACxB,mBAAO,CAAC,CAAC,OACR,MAIA,OAAO,aAAa,YAAY,cAAc,KAAM,YACnD,OAAQ,YACR,YAAY,IACb,OACC;AAAA;AAAA;AASJ,YAAI,YAMH,aAAa,uCAEb,OAAO,OAAO,GAAG,OAAO,SAAU,UAAU,SAAS,MAAO;AAC3D,cAAI,OAAO;AAGX,cAAK,CAAC,UAAW;AAChB,mBAAO;AAAA;AAKR,iBAAO,QAAQ;AAGf,cAAK,OAAO,aAAa,UAAW;AACnC,gBAAK,SAAU,OAAQ,OACtB,SAAU,SAAS,SAAS,OAAQ,OACpC,SAAS,UAAU,GAAI;AAGvB,sBAAQ,CAAE,MAAM,UAAU;AAAA,mBAEpB;AACN,sBAAQ,WAAW,KAAM;AAAA;AAI1B,gBAAK,SAAW,OAAO,MAAO,CAAC,UAAY;AAG1C,kBAAK,MAAO,IAAM;AACjB,0BAAU,mBAAmB,SAAS,QAAS,KAAM;AAIrD,uBAAO,MAAO,MAAM,OAAO,UAC1B,MAAO,IACP,WAAW,QAAQ,WAAW,QAAQ,iBAAiB,UAAU,WACjE;AAID,oBAAK,WAAW,KAAM,MAAO,OAAS,OAAO,cAAe,UAAY;AACvE,uBAAM,SAAS,SAAU;AAGxB,wBAAK,YAAY,KAAM,SAAY;AAClC,2BAAM,OAAS,QAAS;AAAA,2BAGlB;AACN,2BAAK,KAAM,OAAO,QAAS;AAAA;AAAA;AAAA;AAK9B,uBAAO;AAAA,qBAGD;AACN,uBAAO,UAAS,eAAgB,MAAO;AAEvC,oBAAK,MAAO;AAGX,uBAAM,KAAM;AACZ,uBAAK,SAAS;AAAA;AAEf,uBAAO;AAAA;AAAA,uBAIG,CAAC,WAAW,QAAQ,QAAS;AACxC,qBAAS,YAAW,MAAO,KAAM;AAAA,mBAI3B;AACN,qBAAO,KAAK,YAAa,SAAU,KAAM;AAAA;AAAA,qBAI/B,SAAS,UAAW;AAC/B,iBAAM,KAAM;AACZ,iBAAK,SAAS;AACd,mBAAO;AAAA,qBAII,YAAY,WAAa;AACpC,mBAAO,KAAK,UAAU,SACrB,KAAK,MAAO,YAGZ,SAAU;AAAA;AAGZ,iBAAO,OAAO,UAAW,UAAU;AAAA;AAIrC,aAAK,YAAY,OAAO;AAGxB,qBAAa,OAAQ;AAGrB,YAAI,eAAe,kCAGlB,mBAAmB;AAAA,UAClB,UAAU;AAAA,UACV,UAAU;AAAA,UACV,MAAM;AAAA,UACN,MAAM;AAAA;AAGR,eAAO,GAAG,OAAQ;AAAA,UACjB,KAAK,SAAU,QAAS;AACvB,gBAAI,UAAU,OAAQ,QAAQ,OAC7B,IAAI,QAAQ;AAEb,mBAAO,KAAK,OAAQ,WAAW;AAC9B,kBAAI,IAAI;AACR,qBAAQ,IAAI,GAAG,KAAM;AACpB,oBAAK,OAAO,SAAU,MAAM,QAAS,KAAQ;AAC5C,yBAAO;AAAA;AAAA;AAAA;AAAA;AAAA,UAMX,SAAS,SAAU,WAAW,SAAU;AACvC,gBAAI,KACH,IAAI,GACJ,IAAI,KAAK,QACT,UAAU,IACV,UAAU,OAAO,cAAc,YAAY,OAAQ;AAGpD,gBAAK,CAAC,cAAc,KAAM,YAAc;AACvC,qBAAQ,IAAI,GAAG,KAAM;AACpB,qBAAM,MAAM,KAAM,IAAK,OAAO,QAAQ,SAAS,MAAM,IAAI,YAAa;AAGrE,sBAAK,IAAI,WAAW,MAAQ,WAC3B,QAAQ,MAAO,OAAQ,KAGvB,IAAI,aAAa,KAChB,OAAO,KAAK,gBAAiB,KAAK,aAAgB;AAEnD,4BAAQ,KAAM;AACd;AAAA;AAAA;AAAA;AAAA;AAMJ,mBAAO,KAAK,UAAW,QAAQ,SAAS,IAAI,OAAO,WAAY,WAAY;AAAA;AAAA,UAI5E,OAAO,SAAU,MAAO;AAGvB,gBAAK,CAAC,MAAO;AACZ,qBAAS,KAAM,MAAO,KAAM,GAAI,aAAe,KAAK,QAAQ,UAAU,SAAS;AAAA;AAIhF,gBAAK,OAAO,SAAS,UAAW;AAC/B,qBAAO,SAAQ,KAAM,OAAQ,OAAQ,KAAM;AAAA;AAI5C,mBAAO,SAAQ,KAAM,MAGpB,KAAK,SAAS,KAAM,KAAM;AAAA;AAAA,UAI5B,KAAK,SAAU,UAAU,SAAU;AAClC,mBAAO,KAAK,UACX,OAAO,WACN,OAAO,MAAO,KAAK,OAAO,OAAQ,UAAU;AAAA;AAAA,UAK/C,SAAS,SAAU,UAAW;AAC7B,mBAAO,KAAK,IAAK,YAAY,OAC5B,KAAK,aAAa,KAAK,WAAW,OAAQ;AAAA;AAAA;AAK7C,yBAAkB,KAAK,MAAM;AAC5B,iBAAU,OAAM,IAAK,UAAW,IAAI,aAAa,GAAI;AAAA;AACrD,iBAAO;AAAA;AAGR,eAAO,KAAM;AAAA,UACZ,QAAQ,SAAU,MAAO;AACxB,gBAAI,SAAS,KAAK;AAClB,mBAAO,UAAU,OAAO,aAAa,KAAK,SAAS;AAAA;AAAA,UAEpD,SAAS,SAAU,MAAO;AACzB,mBAAO,IAAK,MAAM;AAAA;AAAA,UAEnB,cAAc,SAAU,MAAM,IAAI,OAAQ;AACzC,mBAAO,IAAK,MAAM,cAAc;AAAA;AAAA,UAEjC,MAAM,SAAU,MAAO;AACtB,mBAAO,QAAS,MAAM;AAAA;AAAA,UAEvB,MAAM,SAAU,MAAO;AACtB,mBAAO,QAAS,MAAM;AAAA;AAAA,UAEvB,SAAS,SAAU,MAAO;AACzB,mBAAO,IAAK,MAAM;AAAA;AAAA,UAEnB,SAAS,SAAU,MAAO;AACzB,mBAAO,IAAK,MAAM;AAAA;AAAA,UAEnB,WAAW,SAAU,MAAM,IAAI,OAAQ;AACtC,mBAAO,IAAK,MAAM,eAAe;AAAA;AAAA,UAElC,WAAW,SAAU,MAAM,IAAI,OAAQ;AACtC,mBAAO,IAAK,MAAM,mBAAmB;AAAA;AAAA,UAEtC,UAAU,SAAU,MAAO;AAC1B,mBAAO,SAAY,MAAK,cAAc,IAAK,YAAY;AAAA;AAAA,UAExD,UAAU,SAAU,MAAO;AAC1B,mBAAO,SAAU,KAAK;AAAA;AAAA,UAEvB,UAAU,SAAU,MAAO;AAC1B,gBAAK,KAAK,mBAAmB,QAK5B,SAAU,KAAK,kBAAoB;AAEnC,qBAAO,KAAK;AAAA;AAMb,gBAAK,SAAU,MAAM,aAAe;AACnC,qBAAO,KAAK,WAAW;AAAA;AAGxB,mBAAO,OAAO,MAAO,IAAI,KAAK;AAAA;AAAA,WAE7B,SAAU,MAAM,KAAK;AACvB,iBAAO,GAAI,QAAS,SAAU,OAAO,UAAW;AAC/C,gBAAI,UAAU,OAAO,IAAK,MAAM,KAAI;AAEpC,gBAAK,KAAK,MAAO,QAAS,SAAU;AACnC,yBAAW;AAAA;AAGZ,gBAAK,YAAY,OAAO,aAAa,UAAW;AAC/C,wBAAU,OAAO,OAAQ,UAAU;AAAA;AAGpC,gBAAK,KAAK,SAAS,GAAI;AAGtB,kBAAK,CAAC,iBAAkB,OAAS;AAChC,uBAAO,WAAY;AAAA;AAIpB,kBAAK,aAAa,KAAM,OAAS;AAChC,wBAAQ;AAAA;AAAA;AAIV,mBAAO,KAAK,UAAW;AAAA;AAAA;AAGzB,YAAI,gBAAkB;AAKtB,+BAAwB,SAAU;AACjC,cAAI,SAAS;AACb,iBAAO,KAAM,QAAQ,MAAO,kBAAmB,IAAI,SAAU,GAAG,MAAO;AACtE,mBAAQ,QAAS;AAAA;AAElB,iBAAO;AAAA;AAyBR,eAAO,YAAY,SAAU,SAAU;AAItC,oBAAU,OAAO,YAAY,WAC5B,cAAe,WACf,OAAO,OAAQ,IAAI;AAEpB,cACC,QAGA,QAGA,OAGA,QAGA,OAAO,IAGP,QAAQ,IAGR,cAAc,IAGd,OAAO,WAAW;AAGjB,qBAAS,UAAU,QAAQ;AAI3B,oBAAQ,SAAS;AACjB,mBAAQ,MAAM,QAAQ,cAAc,IAAK;AACxC,uBAAS,MAAM;AACf,qBAAQ,EAAE,cAAc,KAAK,QAAS;AAGrC,oBAAK,KAAM,aAAc,MAAO,OAAQ,IAAK,OAAQ,QAAU,SAC9D,QAAQ,aAAc;AAGtB,gCAAc,KAAK;AACnB,2BAAS;AAAA;AAAA;AAAA;AAMZ,gBAAK,CAAC,QAAQ,QAAS;AACtB,uBAAS;AAAA;AAGV,qBAAS;AAGT,gBAAK,QAAS;AAGb,kBAAK,QAAS;AACb,uBAAO;AAAA,qBAGD;AACN,uBAAO;AAAA;AAAA;AAAA,aAMV,QAAO;AAAA,YAGN,KAAK,WAAW;AACf,kBAAK,MAAO;AAGX,oBAAK,UAAU,CAAC,QAAS;AACxB,gCAAc,KAAK,SAAS;AAC5B,wBAAM,KAAM;AAAA;AAGb,gBAAE,eAAc,MAAO;AACtB,yBAAO,KAAM,MAAM,SAAU,GAAG,KAAM;AACrC,wBAAK,YAAY,MAAQ;AACxB,0BAAK,CAAC,QAAQ,UAAU,CAAC,MAAK,IAAK,MAAQ;AAC1C,6BAAK,KAAM;AAAA;AAAA,+BAED,OAAO,IAAI,UAAU,QAAQ,SAAU,UAAW;AAG7D,2BAAK;AAAA;AAAA;AAAA,mBAGH;AAEL,oBAAK,UAAU,CAAC,QAAS;AACxB;AAAA;AAAA;AAGF,qBAAO;AAAA;AAAA,YAIR,QAAQ,WAAW;AAClB,qBAAO,KAAM,WAAW,SAAU,GAAG,KAAM;AAC1C,oBAAI;AACJ,uBAAU,UAAQ,OAAO,QAAS,KAAK,MAAM,WAAY,IAAK;AAC7D,uBAAK,OAAQ,QAAO;AAGpB,sBAAK,UAAS,aAAc;AAC3B;AAAA;AAAA;AAAA;AAIH,qBAAO;AAAA;AAAA,YAKR,KAAK,SAAU,KAAK;AACnB,qBAAO,MACN,OAAO,QAAS,KAAI,QAAS,KAC7B,KAAK,SAAS;AAAA;AAAA,YAIhB,OAAO,WAAW;AACjB,kBAAK,MAAO;AACX,uBAAO;AAAA;AAER,qBAAO;AAAA;AAAA,YAMR,SAAS,WAAW;AACnB,uBAAS,QAAQ;AACjB,qBAAO,SAAS;AAChB,qBAAO;AAAA;AAAA,YAER,UAAU,WAAW;AACpB,qBAAO,CAAC;AAAA;AAAA,YAMT,MAAM,WAAW;AAChB,uBAAS,QAAQ;AACjB,kBAAK,CAAC,UAAU,CAAC,QAAS;AACzB,uBAAO,SAAS;AAAA;AAEjB,qBAAO;AAAA;AAAA,YAER,QAAQ,WAAW;AAClB,qBAAO,CAAC,CAAC;AAAA;AAAA,YAIV,UAAU,SAAU,SAAS,MAAO;AACnC,kBAAK,CAAC,QAAS;AACd,uBAAO,QAAQ;AACf,uBAAO,CAAE,SAAS,KAAK,QAAQ,KAAK,UAAU;AAC9C,sBAAM,KAAM;AACZ,oBAAK,CAAC,QAAS;AACd;AAAA;AAAA;AAGF,qBAAO;AAAA;AAAA,YAIR,MAAM,WAAW;AAChB,oBAAK,SAAU,MAAM;AACrB,qBAAO;AAAA;AAAA,YAIR,OAAO,WAAW;AACjB,qBAAO,CAAC,CAAC;AAAA;AAAA;AAIZ,iBAAO;AAAA;AAIR,0BAAmB,GAAI;AACtB,iBAAO;AAAA;AAER,yBAAkB,IAAK;AACtB,gBAAM;AAAA;AAGP,4BAAqB,OAAO,SAAS,QAAQ,SAAU;AACtD,cAAI;AAEJ,cAAI;AAGH,gBAAK,SAAS,YAAc,SAAS,MAAM,UAAc;AACxD,qBAAO,KAAM,OAAQ,KAAM,SAAU,KAAM;AAAA,uBAGhC,SAAS,YAAc,SAAS,MAAM,OAAW;AAC5D,qBAAO,KAAM,OAAO,SAAS;AAAA,mBAGvB;AAKN,sBAAQ,MAAO,QAAW,CAAE,OAAQ,MAAO;AAAA;AAAA,mBAMnC,QAAR;AAID,mBAAO,MAAO,QAAW,CAAE;AAAA;AAAA;AAI7B,eAAO,OAAQ;AAAA,UAEd,UAAU,SAAU,MAAO;AAC1B,gBAAI,SAAS;AAAA,cAIX;AAAA,gBAAE;AAAA,gBAAU;AAAA,gBAAY,OAAO,UAAW;AAAA,gBACzC,OAAO,UAAW;AAAA,gBAAY;AAAA;AAAA,cAC/B;AAAA,gBAAE;AAAA,gBAAW;AAAA,gBAAQ,OAAO,UAAW;AAAA,gBACtC,OAAO,UAAW;AAAA,gBAAiB;AAAA,gBAAG;AAAA;AAAA,cACvC;AAAA,gBAAE;AAAA,gBAAU;AAAA,gBAAQ,OAAO,UAAW;AAAA,gBACrC,OAAO,UAAW;AAAA,gBAAiB;AAAA,gBAAG;AAAA;AAAA,eAExC,QAAQ,WACR,UAAU;AAAA,cACT,OAAO,WAAW;AACjB,uBAAO;AAAA;AAAA,cAER,QAAQ,WAAW;AAClB,yBAAS,KAAM,WAAY,KAAM;AACjC,uBAAO;AAAA;AAAA,cAER,SAAS,SAAU,KAAK;AACvB,uBAAO,QAAQ,KAAM,MAAM;AAAA;AAAA,cAI5B,MAAM,WAA6C;AAClD,oBAAI,MAAM;AAEV,uBAAO,OAAO,SAAU,SAAU,UAAW;AAC5C,yBAAO,KAAM,QAAQ,SAAU,IAAI,OAAQ;AAG1C,wBAAI,MAAK,YAAY,IAAK,MAAO,QAAW,IAAK,MAAO;AAKxD,6BAAU,MAAO,IAAO,WAAW;AAClC,0BAAI,WAAW,OAAM,IAAG,MAAO,MAAM;AACrC,0BAAK,YAAY,YAAY,SAAS,UAAY;AACjD,iCAAS,UACP,SAAU,SAAS,QACnB,KAAM,SAAS,SACf,KAAM,SAAS;AAAA,6BACX;AACN,iCAAU,MAAO,KAAM,QACtB,MACA,MAAK,CAAE,YAAa;AAAA;AAAA;AAAA;AAKxB,wBAAM;AAAA,mBACH;AAAA;AAAA,cAEL,MAAM,SAAU,aAAa,YAAY,YAAa;AACrD,oBAAI,WAAW;AACf,iCAAkB,OAAO,WAAU,SAAS,SAAU;AACrD,yBAAO,WAAW;AACjB,wBAAI,OAAO,MACV,OAAO,WACP,aAAa,WAAW;AACvB,0BAAI,UAAU;AAKd,0BAAK,QAAQ,UAAW;AACvB;AAAA;AAGD,iCAAW,QAAQ,MAAO,MAAM;AAIhC,0BAAK,aAAa,UAAS,WAAY;AACtC,8BAAM,IAAI,UAAW;AAAA;AAOtB,6BAAO,YAKJ,QAAO,aAAa,YACrB,OAAO,aAAa,eACrB,SAAS;AAGV,0BAAK,YAAY,OAAS;AAGzB,4BAAK,SAAU;AACd,+BAAK,KACJ,UACA,QAAS,UAAU,WAAU,UAAU,UACvC,QAAS,UAAU,WAAU,SAAS;AAAA,+BAIjC;AAGN;AAEA,+BAAK,KACJ,UACA,QAAS,UAAU,WAAU,UAAU,UACvC,QAAS,UAAU,WAAU,SAAS,UACtC,QAAS,UAAU,WAAU,UAC5B,UAAS;AAAA;AAAA,6BAKN;AAIN,4BAAK,YAAY,UAAW;AAC3B,iCAAO;AACP,iCAAO,CAAE;AAAA;AAKV,wBAAE,YAAW,UAAS,aAAe,MAAM;AAAA;AAAA,uBAK7C,WAAU,UACT,aACA,WAAW;AACV,0BAAI;AACH;AAAA,+BACS,GAAR;AAED,4BAAK,OAAO,SAAS,eAAgB;AACpC,iCAAO,SAAS,cAAe,GAC9B,SAAQ;AAAA;AAMV,4BAAK,QAAQ,KAAK,UAAW;AAI5B,8BAAK,YAAY,SAAU;AAC1B,mCAAO;AACP,mCAAO,CAAE;AAAA;AAGV,oCAAS,WAAY,MAAM;AAAA;AAAA;AAAA;AAShC,wBAAK,OAAQ;AACZ;AAAA,2BACM;AAIN,0BAAK,OAAO,SAAS,cAAe;AACnC,iCAAQ,aAAa,OAAO,SAAS;AAAA;AAEtC,8BAAO,WAAY;AAAA;AAAA;AAAA;AAKtB,uBAAO,OAAO,SAAU,SAAU,UAAW;AAG5C,yBAAQ,GAAK,GAAI,IAChB,QACC,GACA,UACA,YAAY,cACX,aACA,UACD,SAAS;AAKX,yBAAQ,GAAK,GAAI,IAChB,QACC,GACA,UACA,YAAY,eACX,cACA;AAKH,yBAAQ,GAAK,GAAI,IAChB,QACC,GACA,UACA,YAAY,cACX,aACA;AAAA,mBAGA;AAAA;AAAA,cAKL,SAAS,SAAU,KAAM;AACxB,uBAAO,OAAO,OAAO,OAAO,OAAQ,KAAK,WAAY;AAAA;AAAA,eAGvD,WAAW;AAGZ,mBAAO,KAAM,QAAQ,SAAU,GAAG,OAAQ;AACzC,kBAAI,OAAO,MAAO,IACjB,cAAc,MAAO;AAKtB,sBAAS,MAAO,MAAQ,KAAK;AAG7B,kBAAK,aAAc;AAClB,qBAAK,IACJ,WAAW;AAIV,0BAAQ;AAAA,mBAKT,OAAQ,IAAI,GAAK,GAAI,SAIrB,OAAQ,IAAI,GAAK,GAAI,SAGrB,OAAQ,GAAK,GAAI,MAGjB,OAAQ,GAAK,GAAI;AAAA;AAOnB,mBAAK,IAAK,MAAO,GAAI;AAKrB,uBAAU,MAAO,MAAQ,WAAW;AACnC,yBAAU,MAAO,KAAM,QAAU,SAAS,WAAW,SAAY,MAAM;AACvE,uBAAO;AAAA;AAMR,uBAAU,MAAO,KAAM,UAAW,KAAK;AAAA;AAIxC,oBAAQ,QAAS;AAGjB,gBAAK,MAAO;AACX,mBAAK,KAAM,UAAU;AAAA;AAItB,mBAAO;AAAA;AAAA,UAIR,MAAM,SAAU,aAAc;AAC7B,gBAGC,YAAY,UAAU,QAGtB,IAAI,WAGJ,kBAAkB,MAAO,IACzB,gBAAgB,OAAM,KAAM,YAG5B,UAAU,OAAO,YAGjB,aAAa,SAAU,IAAI;AAC1B,qBAAO,SAAU,OAAQ;AACxB,gCAAiB,MAAM;AACvB,8BAAe,MAAM,UAAU,SAAS,IAAI,OAAM,KAAM,aAAc;AACtE,oBAAK,CAAG,EAAE,WAAc;AACvB,0BAAQ,YAAa,iBAAiB;AAAA;AAAA;AAAA;AAM1C,gBAAK,aAAa,GAAI;AACrB,yBAAY,aAAa,QAAQ,KAAM,WAAY,IAAM,SAAS,QAAQ,QACzE,CAAC;AAGF,kBAAK,QAAQ,YAAY,aACxB,YAAY,cAAe,MAAO,cAAe,GAAI,OAAS;AAE9D,uBAAO,QAAQ;AAAA;AAAA;AAKjB,mBAAQ,KAAM;AACb,yBAAY,cAAe,IAAK,WAAY,IAAK,QAAQ;AAAA;AAG1D,mBAAO,QAAQ;AAAA;AAAA;AAOjB,YAAI,cAAc;AAElB,eAAO,SAAS,gBAAgB,SAAU,QAAO,OAAQ;AAIxD,cAAK,QAAO,WAAW,QAAO,QAAQ,QAAQ,UAAS,YAAY,KAAM,OAAM,OAAS;AACvF,oBAAO,QAAQ,KAAM,gCAAgC,OAAM,SAAS,OAAM,OAAO;AAAA;AAAA;AAOnF,eAAO,iBAAiB,SAAU,QAAQ;AACzC,kBAAO,WAAY,WAAW;AAC7B,kBAAM;AAAA;AAAA;AAQR,YAAI,YAAY,OAAO;AAEvB,eAAO,GAAG,QAAQ,SAAU,KAAK;AAEhC,oBACE,KAAM,KAKN,MAAO,SAAU,QAAQ;AACzB,mBAAO,eAAgB;AAAA;AAGzB,iBAAO;AAAA;AAGR,eAAO,OAAQ;AAAA,UAGd,SAAS;AAAA,UAIT,WAAW;AAAA,UAGX,OAAO,SAAU,MAAO;AAGvB,gBAAK,SAAS,OAAO,EAAE,OAAO,YAAY,OAAO,SAAU;AAC1D;AAAA;AAID,mBAAO,UAAU;AAGjB,gBAAK,SAAS,QAAQ,EAAE,OAAO,YAAY,GAAI;AAC9C;AAAA;AAID,sBAAU,YAAa,WAAU,CAAE;AAAA;AAAA;AAIrC,eAAO,MAAM,OAAO,UAAU;AAG9B,6BAAqB;AACpB,oBAAS,oBAAqB,oBAAoB;AAClD,kBAAO,oBAAqB,QAAQ;AACpC,iBAAO;AAAA;AAOR,YAAK,UAAS,eAAe,cAC1B,UAAS,eAAe,aAAa,CAAC,UAAS,gBAAgB,UAAa;AAG9E,kBAAO,WAAY,OAAO;AAAA,eAEpB;AAGN,oBAAS,iBAAkB,oBAAoB;AAG/C,kBAAO,iBAAkB,QAAQ;AAAA;AAQlC,YAAI,SAAS,SAAU,OAAO,KAAI,KAAK,OAAO,WAAW,UAAU,KAAM;AACxE,cAAI,IAAI,GACP,MAAM,MAAM,QACZ,OAAO,OAAO;AAGf,cAAK,QAAQ,SAAU,UAAW;AACjC,wBAAY;AACZ,iBAAM,KAAK,KAAM;AAChB,qBAAQ,OAAO,KAAI,GAAG,IAAK,IAAK,MAAM,UAAU;AAAA;AAAA,qBAItC,UAAU,QAAY;AACjC,wBAAY;AAEZ,gBAAK,CAAC,YAAY,QAAU;AAC3B,oBAAM;AAAA;AAGP,gBAAK,MAAO;AAGX,kBAAK,KAAM;AACV,oBAAG,KAAM,OAAO;AAChB,sBAAK;AAAA,qBAGC;AACN,uBAAO;AACP,sBAAK,SAAU,MAAM,MAAM,QAAQ;AAClC,yBAAO,KAAK,KAAM,OAAQ,OAAQ;AAAA;AAAA;AAAA;AAKrC,gBAAK,KAAK;AACT,qBAAQ,IAAI,KAAK,KAAM;AACtB,oBACC,MAAO,IAAK,KAAK,MAChB,QACA,MAAM,KAAM,MAAO,IAAK,GAAG,IAAI,MAAO,IAAK;AAAA;AAAA;AAAA;AAMhD,cAAK,WAAY;AAChB,mBAAO;AAAA;AAIR,cAAK,MAAO;AACX,mBAAO,IAAG,KAAM;AAAA;AAGjB,iBAAO,MAAM,IAAI,MAAO,IAAK,OAAQ;AAAA;AAKtC,YAAI,YAAY,SACf,aAAa;AAGd,4BAAqB,MAAM,QAAS;AACnC,iBAAO,OAAO;AAAA;AAMf,2BAAoB,QAAS;AAC5B,iBAAO,OAAO,QAAS,WAAW,OAAQ,QAAS,YAAY;AAAA;AAEhE,YAAI,aAAa,SAAU,OAAQ;AAQlC,iBAAO,MAAM,aAAa,KAAK,MAAM,aAAa,KAAK,CAAG,CAAC,MAAM;AAAA;AAMlE,yBAAgB;AACf,eAAK,UAAU,OAAO,UAAU,MAAK;AAAA;AAGtC,cAAK,MAAM;AAEX,cAAK,YAAY;AAAA,UAEhB,OAAO,SAAU,OAAQ;AAGxB,gBAAI,QAAQ,MAAO,KAAK;AAGxB,gBAAK,CAAC,OAAQ;AACb,sBAAQ;AAKR,kBAAK,WAAY,QAAU;AAI1B,oBAAK,MAAM,UAAW;AACrB,wBAAO,KAAK,WAAY;AAAA,uBAKlB;AACN,yBAAO,eAAgB,OAAO,KAAK,SAAS;AAAA,oBAC3C;AAAA,oBACA,cAAc;AAAA;AAAA;AAAA;AAAA;AAMlB,mBAAO;AAAA;AAAA,UAER,KAAK,SAAU,OAAO,MAAM,OAAQ;AACnC,gBAAI,MACH,QAAQ,KAAK,MAAO;AAIrB,gBAAK,OAAO,SAAS,UAAW;AAC/B,oBAAO,UAAW,SAAW;AAAA,mBAGvB;AAGN,mBAAM,QAAQ,MAAO;AACpB,sBAAO,UAAW,SAAW,KAAM;AAAA;AAAA;AAGrC,mBAAO;AAAA;AAAA,UAER,KAAK,SAAU,OAAO,KAAM;AAC3B,mBAAO,QAAQ,SACd,KAAK,MAAO,SAGZ,MAAO,KAAK,YAAa,MAAO,KAAK,SAAW,UAAW;AAAA;AAAA,UAE7D,QAAQ,SAAU,OAAO,KAAK,OAAQ;AAarC,gBAAK,QAAQ,UACP,OAAO,OAAO,QAAQ,YAAc,UAAU,QAAc;AAEjE,qBAAO,KAAK,IAAK,OAAO;AAAA;AASzB,iBAAK,IAAK,OAAO,KAAK;AAItB,mBAAO,UAAU,SAAY,QAAQ;AAAA;AAAA,UAEtC,QAAQ,SAAU,OAAO,KAAM;AAC9B,gBAAI,GACH,QAAQ,MAAO,KAAK;AAErB,gBAAK,UAAU,QAAY;AAC1B;AAAA;AAGD,gBAAK,QAAQ,QAAY;AAGxB,kBAAK,MAAM,QAAS,MAAQ;AAI3B,sBAAM,IAAI,IAAK;AAAA,qBACT;AACN,sBAAM,UAAW;AAIjB,sBAAM,OAAO,QACZ,CAAE,OACA,IAAI,MAAO,kBAAmB;AAAA;AAGlC,kBAAI,IAAI;AAER,qBAAQ,KAAM;AACb,uBAAO,MAAO,IAAK;AAAA;AAAA;AAKrB,gBAAK,QAAQ,UAAa,OAAO,cAAe,QAAU;AAMzD,kBAAK,MAAM,UAAW;AACrB,sBAAO,KAAK,WAAY;AAAA,qBAClB;AACN,uBAAO,MAAO,KAAK;AAAA;AAAA;AAAA;AAAA,UAItB,SAAS,SAAU,OAAQ;AAC1B,gBAAI,QAAQ,MAAO,KAAK;AACxB,mBAAO,UAAU,UAAa,CAAC,OAAO,cAAe;AAAA;AAAA;AAGvD,YAAI,WAAW,IAAI;AAEnB,YAAI,WAAW,IAAI;AAcnB,YAAI,SAAS,iCACZ,aAAa;AAEd,yBAAkB,MAAO;AACxB,cAAK,SAAS,QAAS;AACtB,mBAAO;AAAA;AAGR,cAAK,SAAS,SAAU;AACvB,mBAAO;AAAA;AAGR,cAAK,SAAS,QAAS;AACtB,mBAAO;AAAA;AAIR,cAAK,SAAS,CAAC,OAAO,IAAK;AAC1B,mBAAO,CAAC;AAAA;AAGT,cAAK,OAAO,KAAM,OAAS;AAC1B,mBAAO,KAAK,MAAO;AAAA;AAGpB,iBAAO;AAAA;AAGR,0BAAmB,MAAM,KAAK,MAAO;AACpC,cAAI;AAIJ,cAAK,SAAS,UAAa,KAAK,aAAa,GAAI;AAChD,mBAAO,UAAU,IAAI,QAAS,YAAY,OAAQ;AAClD,mBAAO,KAAK,aAAc;AAE1B,gBAAK,OAAO,SAAS,UAAW;AAC/B,kBAAI;AACH,uBAAO,QAAS;AAAA,uBACP,GAAR;AAAA;AAGF,uBAAS,IAAK,MAAM,KAAK;AAAA,mBACnB;AACN,qBAAO;AAAA;AAAA;AAGT,iBAAO;AAAA;AAGR,eAAO,OAAQ;AAAA,UACd,SAAS,SAAU,MAAO;AACzB,mBAAO,SAAS,QAAS,SAAU,SAAS,QAAS;AAAA;AAAA,UAGtD,MAAM,SAAU,MAAM,MAAM,MAAO;AAClC,mBAAO,SAAS,OAAQ,MAAM,MAAM;AAAA;AAAA,UAGrC,YAAY,SAAU,MAAM,MAAO;AAClC,qBAAS,OAAQ,MAAM;AAAA;AAAA,UAKxB,OAAO,SAAU,MAAM,MAAM,MAAO;AACnC,mBAAO,SAAS,OAAQ,MAAM,MAAM;AAAA;AAAA,UAGrC,aAAa,SAAU,MAAM,MAAO;AACnC,qBAAS,OAAQ,MAAM;AAAA;AAAA;AAIzB,eAAO,GAAG,OAAQ;AAAA,UACjB,MAAM,SAAU,KAAK,OAAQ;AAC5B,gBAAI,GAAG,MAAM,MACZ,OAAO,KAAM,IACb,QAAQ,QAAQ,KAAK;AAGtB,gBAAK,QAAQ,QAAY;AACxB,kBAAK,KAAK,QAAS;AAClB,uBAAO,SAAS,IAAK;AAErB,oBAAK,KAAK,aAAa,KAAK,CAAC,SAAS,IAAK,MAAM,iBAAmB;AACnE,sBAAI,MAAM;AACV,yBAAQ,KAAM;AAIb,wBAAK,MAAO,IAAM;AACjB,6BAAO,MAAO,GAAI;AAClB,0BAAK,KAAK,QAAS,aAAc,GAAI;AACpC,+BAAO,UAAW,KAAK,MAAO;AAC9B,iCAAU,MAAM,MAAM,KAAM;AAAA;AAAA;AAAA;AAI/B,2BAAS,IAAK,MAAM,gBAAgB;AAAA;AAAA;AAItC,qBAAO;AAAA;AAIR,gBAAK,OAAO,QAAQ,UAAW;AAC9B,qBAAO,KAAK,KAAM,WAAW;AAC5B,yBAAS,IAAK,MAAM;AAAA;AAAA;AAItB,mBAAO,OAAQ,MAAM,SAAU,QAAQ;AACtC,kBAAI;AAOJ,kBAAK,QAAQ,WAAU,QAAY;AAIlC,wBAAO,SAAS,IAAK,MAAM;AAC3B,oBAAK,UAAS,QAAY;AACzB,yBAAO;AAAA;AAKR,wBAAO,SAAU,MAAM;AACvB,oBAAK,UAAS,QAAY;AACzB,yBAAO;AAAA;AAIR;AAAA;AAID,mBAAK,KAAM,WAAW;AAGrB,yBAAS,IAAK,MAAM,KAAK;AAAA;AAAA,eAExB,MAAM,OAAO,UAAU,SAAS,GAAG,MAAM;AAAA;AAAA,UAG7C,YAAY,SAAU,KAAM;AAC3B,mBAAO,KAAK,KAAM,WAAW;AAC5B,uBAAS,OAAQ,MAAM;AAAA;AAAA;AAAA;AAM1B,eAAO,OAAQ;AAAA,UACd,OAAO,SAAU,MAAM,MAAM,MAAO;AACnC,gBAAI;AAEJ,gBAAK,MAAO;AACX,qBAAS,SAAQ,QAAS;AAC1B,sBAAQ,SAAS,IAAK,MAAM;AAG5B,kBAAK,MAAO;AACX,oBAAK,CAAC,SAAS,MAAM,QAAS,OAAS;AACtC,0BAAQ,SAAS,OAAQ,MAAM,MAAM,OAAO,UAAW;AAAA,uBACjD;AACN,wBAAM,KAAM;AAAA;AAAA;AAGd,qBAAO,SAAS;AAAA;AAAA;AAAA,UAIlB,SAAS,SAAU,MAAM,MAAO;AAC/B,mBAAO,QAAQ;AAEf,gBAAI,QAAQ,OAAO,MAAO,MAAM,OAC/B,cAAc,MAAM,QACpB,MAAK,MAAM,SACX,QAAQ,OAAO,YAAa,MAAM,OAClC,QAAO,WAAW;AACjB,qBAAO,QAAS,MAAM;AAAA;AAIxB,gBAAK,QAAO,cAAe;AAC1B,oBAAK,MAAM;AACX;AAAA;AAGD,gBAAK,KAAK;AAIT,kBAAK,SAAS,MAAO;AACpB,sBAAM,QAAS;AAAA;AAIhB,qBAAO,MAAM;AACb,kBAAG,KAAM,MAAM,OAAM;AAAA;AAGtB,gBAAK,CAAC,eAAe,OAAQ;AAC5B,oBAAM,MAAM;AAAA;AAAA;AAAA,UAKd,aAAa,SAAU,MAAM,MAAO;AACnC,gBAAI,MAAM,OAAO;AACjB,mBAAO,SAAS,IAAK,MAAM,QAAS,SAAS,OAAQ,MAAM,KAAK;AAAA,cAC/D,OAAO,OAAO,UAAW,eAAgB,IAAK,WAAW;AACxD,yBAAS,OAAQ,MAAM,CAAE,OAAO,SAAS;AAAA;AAAA;AAAA;AAAA;AAM7C,eAAO,GAAG,OAAQ;AAAA,UACjB,OAAO,SAAU,MAAM,MAAO;AAC7B,gBAAI,SAAS;AAEb,gBAAK,OAAO,SAAS,UAAW;AAC/B,qBAAO;AACP,qBAAO;AACP;AAAA;AAGD,gBAAK,UAAU,SAAS,QAAS;AAChC,qBAAO,OAAO,MAAO,KAAM,IAAK;AAAA;AAGjC,mBAAO,SAAS,SACf,OACA,KAAK,KAAM,WAAW;AACrB,kBAAI,QAAQ,OAAO,MAAO,MAAM,MAAM;AAGtC,qBAAO,YAAa,MAAM;AAE1B,kBAAK,SAAS,QAAQ,MAAO,OAAQ,cAAe;AACnD,uBAAO,QAAS,MAAM;AAAA;AAAA;AAAA;AAAA,UAI1B,SAAS,SAAU,MAAO;AACzB,mBAAO,KAAK,KAAM,WAAW;AAC5B,qBAAO,QAAS,MAAM;AAAA;AAAA;AAAA,UAGxB,YAAY,SAAU,MAAO;AAC5B,mBAAO,KAAK,MAAO,QAAQ,MAAM;AAAA;AAAA,UAKlC,SAAS,SAAU,MAAM,KAAM;AAC9B,gBAAI,KACH,QAAQ,GACR,QAAQ,OAAO,YACf,WAAW,MACX,IAAI,KAAK,QACT,UAAU,WAAW;AACpB,kBAAK,CAAG,EAAE,OAAU;AACnB,sBAAM,YAAa,UAAU,CAAE;AAAA;AAAA;AAIlC,gBAAK,OAAO,SAAS,UAAW;AAC/B,oBAAM;AACN,qBAAO;AAAA;AAER,mBAAO,QAAQ;AAEf,mBAAQ,KAAM;AACb,oBAAM,SAAS,IAAK,SAAU,IAAK,OAAO;AAC1C,kBAAK,OAAO,IAAI,OAAQ;AACvB;AACA,oBAAI,MAAM,IAAK;AAAA;AAAA;AAGjB;AACA,mBAAO,MAAM,QAAS;AAAA;AAAA;AAGxB,YAAI,OAAS,sCAAwC;AAErD,YAAI,UAAU,IAAI,OAAQ,mBAAmB,OAAO,eAAe;AAGnE,YAAI,YAAY,CAAE,OAAO,SAAS,UAAU;AAE5C,YAAI,kBAAkB,UAAS;AAI9B,YAAI,aAAa,SAAU,MAAO;AAChC,iBAAO,OAAO,SAAU,KAAK,eAAe;AAAA,WAE7C,WAAW,EAAE,UAAU;AAOxB,YAAK,gBAAgB,aAAc;AAClC,uBAAa,SAAU,MAAO;AAC7B,mBAAO,OAAO,SAAU,KAAK,eAAe,SAC3C,KAAK,YAAa,cAAe,KAAK;AAAA;AAAA;AAG1C,YAAI,qBAAqB,SAAU,MAAM,IAAK;AAI5C,iBAAO,MAAM;AAGb,iBAAO,KAAK,MAAM,YAAY,UAC7B,KAAK,MAAM,YAAY,MAMvB,WAAY,SAEZ,OAAO,IAAK,MAAM,eAAgB;AAAA;AAKrC,2BAAoB,MAAM,MAAM,YAAY,OAAQ;AACnD,cAAI,UAAU,OACb,gBAAgB,IAChB,eAAe,QACd,WAAW;AACV,mBAAO,MAAM;AAAA,cAEd,WAAW;AACV,mBAAO,OAAO,IAAK,MAAM,MAAM;AAAA,aAEjC,UAAU,gBACV,OAAO,cAAc,WAAY,MAAS,QAAO,UAAW,QAAS,KAAK,OAG1E,gBAAgB,KAAK,YAClB,QAAO,UAAW,SAAU,SAAS,QAAQ,CAAC,YAChD,QAAQ,KAAM,OAAO,IAAK,MAAM;AAElC,cAAK,iBAAiB,cAAe,OAAQ,MAAO;AAInD,sBAAU,UAAU;AAGpB,mBAAO,QAAQ,cAAe;AAG9B,4BAAgB,CAAC,WAAW;AAE5B,mBAAQ,iBAAkB;AAIzB,qBAAO,MAAO,MAAM,MAAM,gBAAgB;AAC1C,kBAAO,KAAI,SAAY,KAAM,SAAQ,iBAAiB,WAAW,SAAW,GAAI;AAC/E,gCAAgB;AAAA;AAEjB,8BAAgB,gBAAgB;AAAA;AAIjC,4BAAgB,gBAAgB;AAChC,mBAAO,MAAO,MAAM,MAAM,gBAAgB;AAG1C,yBAAa,cAAc;AAAA;AAG5B,cAAK,YAAa;AACjB,4BAAgB,CAAC,iBAAiB,CAAC,WAAW;AAG9C,uBAAW,WAAY,KACtB,gBAAkB,YAAY,KAAM,KAAM,WAAY,KACtD,CAAC,WAAY;AACd,gBAAK,OAAQ;AACZ,oBAAM,OAAO;AACb,oBAAM,QAAQ;AACd,oBAAM,MAAM;AAAA;AAAA;AAGd,iBAAO;AAAA;AAIR,YAAI,oBAAoB;AAExB,mCAA4B,MAAO;AAClC,cAAI,MACH,MAAM,KAAK,eACX,YAAW,KAAK,UAChB,UAAU,kBAAmB;AAE9B,cAAK,SAAU;AACd,mBAAO;AAAA;AAGR,iBAAO,IAAI,KAAK,YAAa,IAAI,cAAe;AAChD,oBAAU,OAAO,IAAK,MAAM;AAE5B,eAAK,WAAW,YAAa;AAE7B,cAAK,YAAY,QAAS;AACzB,sBAAU;AAAA;AAEX,4BAAmB,aAAa;AAEhC,iBAAO;AAAA;AAGR,0BAAmB,UAAU,MAAO;AACnC,cAAI,SAAS,MACZ,UAAS,IACT,SAAQ,GACR,SAAS,SAAS;AAGnB,iBAAQ,SAAQ,QAAQ,UAAU;AACjC,mBAAO,SAAU;AACjB,gBAAK,CAAC,KAAK,OAAQ;AAClB;AAAA;AAGD,sBAAU,KAAK,MAAM;AACrB,gBAAK,MAAO;AAKX,kBAAK,YAAY,QAAS;AACzB,wBAAQ,UAAU,SAAS,IAAK,MAAM,cAAe;AACrD,oBAAK,CAAC,QAAQ,SAAU;AACvB,uBAAK,MAAM,UAAU;AAAA;AAAA;AAGvB,kBAAK,KAAK,MAAM,YAAY,MAAM,mBAAoB,OAAS;AAC9D,wBAAQ,UAAU,kBAAmB;AAAA;AAAA,mBAEhC;AACN,kBAAK,YAAY,QAAS;AACzB,wBAAQ,UAAU;AAGlB,yBAAS,IAAK,MAAM,WAAW;AAAA;AAAA;AAAA;AAMlC,eAAM,SAAQ,GAAG,SAAQ,QAAQ,UAAU;AAC1C,gBAAK,QAAQ,WAAW,MAAO;AAC9B,uBAAU,QAAQ,MAAM,UAAU,QAAQ;AAAA;AAAA;AAI5C,iBAAO;AAAA;AAGR,eAAO,GAAG,OAAQ;AAAA,UACjB,MAAM,WAAW;AAChB,mBAAO,SAAU,MAAM;AAAA;AAAA,UAExB,MAAM,WAAW;AAChB,mBAAO,SAAU;AAAA;AAAA,UAElB,QAAQ,SAAU,OAAQ;AACzB,gBAAK,OAAO,UAAU,WAAY;AACjC,qBAAO,QAAQ,KAAK,SAAS,KAAK;AAAA;AAGnC,mBAAO,KAAK,KAAM,WAAW;AAC5B,kBAAK,mBAAoB,OAAS;AACjC,uBAAQ,MAAO;AAAA,qBACT;AACN,uBAAQ,MAAO;AAAA;AAAA;AAAA;AAAA;AAKnB,YAAI,iBAAmB;AAEvB,YAAI,WAAa;AAEjB,YAAI,cAAgB;AAIpB,QAAE,YAAW;AACZ,cAAI,WAAW,UAAS,0BACvB,MAAM,SAAS,YAAa,UAAS,cAAe,SACpD,QAAQ,UAAS,cAAe;AAMjC,gBAAM,aAAc,QAAQ;AAC5B,gBAAM,aAAc,WAAW;AAC/B,gBAAM,aAAc,QAAQ;AAE5B,cAAI,YAAa;AAIjB,kBAAQ,aAAa,IAAI,UAAW,MAAO,UAAW,MAAO,UAAU;AAIvE,cAAI,YAAY;AAChB,kBAAQ,iBAAiB,CAAC,CAAC,IAAI,UAAW,MAAO,UAAU;AAK3D,cAAI,YAAY;AAChB,kBAAQ,SAAS,CAAC,CAAC,IAAI;AAAA;AAKxB,YAAI,UAAU;AAAA,UAKb,OAAO,CAAE,GAAG,WAAW;AAAA,UACvB,KAAK,CAAE,GAAG,qBAAqB;AAAA,UAC/B,IAAI,CAAE,GAAG,kBAAkB;AAAA,UAC3B,IAAI,CAAE,GAAG,sBAAsB;AAAA,UAE/B,UAAU,CAAE,GAAG,IAAI;AAAA;AAGpB,gBAAQ,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,QAAQ,UAAU,QAAQ;AAC7E,gBAAQ,KAAK,QAAQ;AAGrB,YAAK,CAAC,QAAQ,QAAS;AACtB,kBAAQ,WAAW,QAAQ,SAAS,CAAE,GAAG,gCAAgC;AAAA;AAI1E,yBAAiB,SAAS,KAAM;AAI/B,cAAI;AAEJ,cAAK,OAAO,QAAQ,yBAAyB,aAAc;AAC1D,kBAAM,QAAQ,qBAAsB,OAAO;AAAA,qBAEhC,OAAO,QAAQ,qBAAqB,aAAc;AAC7D,kBAAM,QAAQ,iBAAkB,OAAO;AAAA,iBAEjC;AACN,kBAAM;AAAA;AAGP,cAAK,QAAQ,UAAa,OAAO,SAAU,SAAS,MAAQ;AAC3D,mBAAO,OAAO,MAAO,CAAE,UAAW;AAAA;AAGnC,iBAAO;AAAA;AAKR,+BAAwB,OAAO,aAAc;AAC5C,cAAI,IAAI,GACP,IAAI,MAAM;AAEX,iBAAQ,IAAI,GAAG,KAAM;AACpB,qBAAS,IACR,MAAO,IACP,cACA,CAAC,eAAe,SAAS,IAAK,YAAa,IAAK;AAAA;AAAA;AAMnD,YAAI,QAAQ;AAEZ,+BAAwB,OAAO,SAAS,SAAS,WAAW,SAAU;AACrE,cAAI,MAAM,KAAK,KAAK,OAAM,UAAU,GACnC,WAAW,QAAQ,0BACnB,QAAQ,IACR,IAAI,GACJ,IAAI,MAAM;AAEX,iBAAQ,IAAI,GAAG,KAAM;AACpB,mBAAO,MAAO;AAEd,gBAAK,QAAQ,SAAS,GAAI;AAGzB,kBAAK,QAAQ,UAAW,UAAW;AAIlC,uBAAO,MAAO,OAAO,KAAK,WAAW,CAAE,QAAS;AAAA,yBAGrC,CAAC,MAAM,KAAM,OAAS;AACjC,sBAAM,KAAM,QAAQ,eAAgB;AAAA,qBAG9B;AACN,sBAAM,OAAO,SAAS,YAAa,QAAQ,cAAe;AAG1D,sBAAQ,UAAS,KAAM,SAAU,CAAE,IAAI,KAAQ,GAAI;AACnD,wBAAO,QAAS,QAAS,QAAQ;AACjC,oBAAI,YAAY,MAAM,KAAM,OAAO,cAAe,QAAS,MAAM;AAGjE,oBAAI,MAAM;AACV,uBAAQ,KAAM;AACb,wBAAM,IAAI;AAAA;AAKX,uBAAO,MAAO,OAAO,IAAI;AAGzB,sBAAM,SAAS;AAGf,oBAAI,cAAc;AAAA;AAAA;AAAA;AAMrB,mBAAS,cAAc;AAEvB,cAAI;AACJ,iBAAU,OAAO,MAAO,MAAU;AAGjC,gBAAK,aAAa,OAAO,QAAS,MAAM,aAAc,IAAK;AAC1D,kBAAK,SAAU;AACd,wBAAQ,KAAM;AAAA;AAEf;AAAA;AAGD,uBAAW,WAAY;AAGvB,kBAAM,QAAQ,SAAS,YAAa,OAAQ;AAG5C,gBAAK,UAAW;AACf,4BAAe;AAAA;AAIhB,gBAAK,SAAU;AACd,kBAAI;AACJ,qBAAU,OAAO,IAAK,MAAU;AAC/B,oBAAK,YAAY,KAAM,KAAK,QAAQ,KAAO;AAC1C,0BAAQ,KAAM;AAAA;AAAA;AAAA;AAAA;AAMlB,iBAAO;AAAA;AAIR,YAAI,iBAAiB;AAErB,8BAAsB;AACrB,iBAAO;AAAA;AAGR,+BAAuB;AACtB,iBAAO;AAAA;AASR,4BAAqB,MAAM,MAAO;AACjC,iBAAS,SAAS,wBAA4B,UAAS;AAAA;AAMxD,qCAA6B;AAC5B,cAAI;AACH,mBAAO,UAAS;AAAA,mBACP,KAAR;AAAA;AAAA;AAGH,oBAAa,MAAM,OAAO,UAAU,MAAM,KAAI,KAAM;AACnD,cAAI,QAAQ;AAGZ,cAAK,OAAO,UAAU,UAAW;AAGhC,gBAAK,OAAO,aAAa,UAAW;AAGnC,qBAAO,QAAQ;AACf,yBAAW;AAAA;AAEZ,iBAAM,QAAQ,OAAQ;AACrB,iBAAI,MAAM,MAAM,UAAU,MAAM,MAAO,OAAQ;AAAA;AAEhD,mBAAO;AAAA;AAGR,cAAK,QAAQ,QAAQ,OAAM,MAAO;AAGjC,kBAAK;AACL,mBAAO,WAAW;AAAA,qBACP,OAAM,MAAO;AACxB,gBAAK,OAAO,aAAa,UAAW;AAGnC,oBAAK;AACL,qBAAO;AAAA,mBACD;AAGN,oBAAK;AACL,qBAAO;AACP,yBAAW;AAAA;AAAA;AAGb,cAAK,QAAO,OAAQ;AACnB,kBAAK;AAAA,qBACM,CAAC,KAAK;AACjB,mBAAO;AAAA;AAGR,cAAK,QAAQ,GAAI;AAChB,qBAAS;AACT,kBAAK,SAAU,QAAQ;AAGtB,uBAAS,IAAK;AACd,qBAAO,OAAO,MAAO,MAAM;AAAA;AAI5B,gBAAG,OAAO,OAAO,QAAU,QAAO,OAAO,OAAO;AAAA;AAEjD,iBAAO,KAAK,KAAM,WAAW;AAC5B,mBAAO,MAAM,IAAK,MAAM,OAAO,KAAI,MAAM;AAAA;AAAA;AAQ3C,eAAO,QAAQ;AAAA,UAEd,QAAQ;AAAA,UAER,KAAK,SAAU,MAAM,OAAO,SAAS,MAAM,UAAW;AAErD,gBAAI,aAAa,aAAa,KAC7B,QAAQ,GAAG,WACX,SAAS,WAAU,MAAM,YAAY,UACrC,WAAW,SAAS,IAAK;AAG1B,gBAAK,CAAC,WAAY,OAAS;AAC1B;AAAA;AAID,gBAAK,QAAQ,SAAU;AACtB,4BAAc;AACd,wBAAU,YAAY;AACtB,yBAAW,YAAY;AAAA;AAKxB,gBAAK,UAAW;AACf,qBAAO,KAAK,gBAAiB,iBAAiB;AAAA;AAI/C,gBAAK,CAAC,QAAQ,MAAO;AACpB,sBAAQ,OAAO,OAAO;AAAA;AAIvB,gBAAK,CAAG,UAAS,SAAS,SAAW;AACpC,uBAAS,SAAS,SAAS,uBAAO,OAAQ;AAAA;AAE3C,gBAAK,CAAG,eAAc,SAAS,SAAW;AACzC,4BAAc,SAAS,SAAS,SAAU,GAAI;AAI7C,uBAAO,OAAO,WAAW,eAAe,OAAO,MAAM,cAAc,EAAE,OACpE,OAAO,MAAM,SAAS,MAAO,MAAM,aAAc;AAAA;AAAA;AAKpD,oBAAU,UAAS,IAAK,MAAO,kBAAmB,CAAE;AACpD,gBAAI,MAAM;AACV,mBAAQ,KAAM;AACb,oBAAM,eAAe,KAAM,MAAO,OAAS;AAC3C,qBAAO,WAAW,IAAK;AACvB,2BAAe,KAAK,MAAO,IAAK,MAAO,KAAM;AAG7C,kBAAK,CAAC,MAAO;AACZ;AAAA;AAID,wBAAU,OAAO,MAAM,QAAS,SAAU;AAG1C,qBAAS,YAAW,QAAQ,eAAe,QAAQ,aAAc;AAGjE,wBAAU,OAAO,MAAM,QAAS,SAAU;AAG1C,0BAAY,OAAO,OAAQ;AAAA,gBAC1B;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,MAAM,QAAQ;AAAA,gBACd;AAAA,gBACA,cAAc,YAAY,OAAO,KAAK,MAAM,aAAa,KAAM;AAAA,gBAC/D,WAAW,WAAW,KAAM;AAAA,iBAC1B;AAGH,kBAAK,CAAG,aAAW,OAAQ,QAAW;AACrC,4BAAW,OAAQ,QAAS;AAC5B,0BAAS,gBAAgB;AAGzB,oBAAK,CAAC,QAAQ,SACb,QAAQ,MAAM,KAAM,MAAM,MAAM,YAAY,iBAAkB,OAAQ;AAEtE,sBAAK,KAAK,kBAAmB;AAC5B,yBAAK,iBAAkB,MAAM;AAAA;AAAA;AAAA;AAKhC,kBAAK,QAAQ,KAAM;AAClB,wBAAQ,IAAI,KAAM,MAAM;AAExB,oBAAK,CAAC,UAAU,QAAQ,MAAO;AAC9B,4BAAU,QAAQ,OAAO,QAAQ;AAAA;AAAA;AAKnC,kBAAK,UAAW;AACf,0BAAS,OAAQ,UAAS,iBAAiB,GAAG;AAAA,qBACxC;AACN,0BAAS,KAAM;AAAA;AAIhB,qBAAO,MAAM,OAAQ,QAAS;AAAA;AAAA;AAAA,UAMhC,QAAQ,SAAU,MAAM,OAAO,SAAS,UAAU,aAAc;AAE/D,gBAAI,GAAG,WAAW,KACjB,QAAQ,GAAG,WACX,SAAS,WAAU,MAAM,YAAY,UACrC,WAAW,SAAS,QAAS,SAAU,SAAS,IAAK;AAEtD,gBAAK,CAAC,YAAY,CAAG,UAAS,SAAS,SAAW;AACjD;AAAA;AAID,oBAAU,UAAS,IAAK,MAAO,kBAAmB,CAAE;AACpD,gBAAI,MAAM;AACV,mBAAQ,KAAM;AACb,oBAAM,eAAe,KAAM,MAAO,OAAS;AAC3C,qBAAO,WAAW,IAAK;AACvB,2BAAe,KAAK,MAAO,IAAK,MAAO,KAAM;AAG7C,kBAAK,CAAC,MAAO;AACZ,qBAAM,QAAQ,QAAS;AACtB,yBAAO,MAAM,OAAQ,MAAM,OAAO,MAAO,IAAK,SAAS,UAAU;AAAA;AAElE;AAAA;AAGD,wBAAU,OAAO,MAAM,QAAS,SAAU;AAC1C,qBAAS,YAAW,QAAQ,eAAe,QAAQ,aAAc;AACjE,0BAAW,OAAQ,SAAU;AAC7B,oBAAM,IAAK,MACV,IAAI,OAAQ,YAAY,WAAW,KAAM,mBAAoB;AAG9D,0BAAY,IAAI,UAAS;AACzB,qBAAQ,KAAM;AACb,4BAAY,UAAU;AAEtB,oBAAO,gBAAe,aAAa,UAAU,aAC1C,EAAC,WAAW,QAAQ,SAAS,UAAU,SACvC,EAAC,OAAO,IAAI,KAAM,UAAU,eAC5B,EAAC,YAAY,aAAa,UAAU,YACrC,aAAa,QAAQ,UAAU,WAAa;AAC7C,4BAAS,OAAQ,GAAG;AAEpB,sBAAK,UAAU,UAAW;AACzB,8BAAS;AAAA;AAEV,sBAAK,QAAQ,QAAS;AACrB,4BAAQ,OAAO,KAAM,MAAM;AAAA;AAAA;AAAA;AAO9B,kBAAK,aAAa,CAAC,UAAS,QAAS;AACpC,oBAAK,CAAC,QAAQ,YACb,QAAQ,SAAS,KAAM,MAAM,YAAY,SAAS,YAAa,OAAQ;AAEvE,yBAAO,YAAa,MAAM,MAAM,SAAS;AAAA;AAG1C,uBAAO,OAAQ;AAAA;AAAA;AAKjB,gBAAK,OAAO,cAAe,SAAW;AACrC,uBAAS,OAAQ,MAAM;AAAA;AAAA;AAAA,UAIzB,UAAU,SAAU,aAAc;AAEjC,gBAAI,GAAG,GAAG,KAAK,SAAS,WAAW,cAClC,OAAO,IAAI,MAAO,UAAU,SAG5B,SAAQ,OAAO,MAAM,IAAK,cAE1B,YACC,UAAS,IAAK,MAAM,aAAc,uBAAO,OAAQ,OAC/C,OAAM,SAAU,IACnB,UAAU,OAAO,MAAM,QAAS,OAAM,SAAU;AAGjD,iBAAM,KAAM;AAEZ,iBAAM,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAM;AACxC,mBAAM,KAAM,UAAW;AAAA;AAGxB,mBAAM,iBAAiB;AAGvB,gBAAK,QAAQ,eAAe,QAAQ,YAAY,KAAM,MAAM,YAAY,OAAQ;AAC/E;AAAA;AAID,2BAAe,OAAO,MAAM,SAAS,KAAM,MAAM,QAAO;AAGxD,gBAAI;AACJ,mBAAU,WAAU,aAAc,SAAW,CAAC,OAAM,wBAAyB;AAC5E,qBAAM,gBAAgB,QAAQ;AAE9B,kBAAI;AACJ,qBAAU,aAAY,QAAQ,SAAU,SACvC,CAAC,OAAM,iCAAkC;AAIzC,oBAAK,CAAC,OAAM,cAAc,UAAU,cAAc,SACjD,OAAM,WAAW,KAAM,UAAU,YAAc;AAE/C,yBAAM,YAAY;AAClB,yBAAM,OAAO,UAAU;AAEvB,wBAAU,SAAO,MAAM,QAAS,UAAU,aAAc,IAAK,UAC5D,UAAU,SAAU,MAAO,QAAQ,MAAM;AAE1C,sBAAK,QAAQ,QAAY;AACxB,wBAAO,QAAM,SAAS,SAAU,OAAQ;AACvC,6BAAM;AACN,6BAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAQX,gBAAK,QAAQ,cAAe;AAC3B,sBAAQ,aAAa,KAAM,MAAM;AAAA;AAGlC,mBAAO,OAAM;AAAA;AAAA,UAGd,UAAU,SAAU,QAAO,WAAW;AACrC,gBAAI,GAAG,WAAW,KAAK,iBAAiB,kBACvC,eAAe,IACf,gBAAgB,UAAS,eACzB,MAAM,OAAM;AAGb,gBAAK,iBAIJ,IAAI,YAOJ,CAAG,QAAM,SAAS,WAAW,OAAM,UAAU,IAAM;AAEnD,qBAAQ,QAAQ,MAAM,MAAM,IAAI,cAAc,MAAO;AAIpD,oBAAK,IAAI,aAAa,KAAK,CAAG,QAAM,SAAS,WAAW,IAAI,aAAa,OAAS;AACjF,oCAAkB;AAClB,qCAAmB;AACnB,uBAAM,IAAI,GAAG,IAAI,eAAe,KAAM;AACrC,gCAAY,UAAU;AAGtB,0BAAM,UAAU,WAAW;AAE3B,wBAAK,iBAAkB,SAAU,QAAY;AAC5C,uCAAkB,OAAQ,UAAU,eACnC,OAAQ,KAAK,MAAO,MAAO,OAAQ,KACnC,OAAO,KAAM,KAAK,MAAM,MAAM,CAAE,MAAQ;AAAA;AAE1C,wBAAK,iBAAkB,MAAQ;AAC9B,sCAAgB,KAAM;AAAA;AAAA;AAGxB,sBAAK,gBAAgB,QAAS;AAC7B,iCAAa,KAAM,EAAE,MAAM,KAAK,UAAU;AAAA;AAAA;AAAA;AAAA;AAO9C,kBAAM;AACN,gBAAK,gBAAgB,UAAS,QAAS;AACtC,2BAAa,KAAM,EAAE,MAAM,KAAK,UAAU,UAAS,MAAO;AAAA;AAG3D,mBAAO;AAAA;AAAA,UAGR,SAAS,SAAU,MAAM,OAAO;AAC/B,mBAAO,eAAgB,OAAO,MAAM,WAAW,MAAM;AAAA,cACpD,YAAY;AAAA,cACZ,cAAc;AAAA,cAEd,KAAK,YAAY,SAChB,WAAW;AACV,oBAAK,KAAK,eAAgB;AACzB,yBAAO,MAAM,KAAK;AAAA;AAAA,kBAGpB,WAAW;AACV,oBAAK,KAAK,eAAgB;AACzB,yBAAO,KAAK,cAAe;AAAA;AAAA;AAAA,cAI9B,KAAK,SAAU,OAAQ;AACtB,uBAAO,eAAgB,MAAM,MAAM;AAAA,kBAClC,YAAY;AAAA,kBACZ,cAAc;AAAA,kBACd,UAAU;AAAA,kBACV;AAAA;AAAA;AAAA;AAAA;AAAA,UAMJ,KAAK,SAAU,eAAgB;AAC9B,mBAAO,cAAe,OAAO,WAC5B,gBACA,IAAI,OAAO,MAAO;AAAA;AAAA,UAGpB,SAAS;AAAA,YACR,MAAM;AAAA,cAGL,UAAU;AAAA;AAAA,YAEX,OAAO;AAAA,cAGN,OAAO,SAAU,MAAO;AAIvB,oBAAI,KAAK,QAAQ;AAGjB,oBAAK,eAAe,KAAM,GAAG,SAC5B,GAAG,SAAS,SAAU,IAAI,UAAY;AAGtC,iCAAgB,IAAI,SAAS;AAAA;AAI9B,uBAAO;AAAA;AAAA,cAER,SAAS,SAAU,MAAO;AAIzB,oBAAI,KAAK,QAAQ;AAGjB,oBAAK,eAAe,KAAM,GAAG,SAC5B,GAAG,SAAS,SAAU,IAAI,UAAY;AAEtC,iCAAgB,IAAI;AAAA;AAIrB,uBAAO;AAAA;AAAA,cAKR,UAAU,SAAU,QAAQ;AAC3B,oBAAI,SAAS,OAAM;AACnB,uBAAO,eAAe,KAAM,OAAO,SAClC,OAAO,SAAS,SAAU,QAAQ,YAClC,SAAS,IAAK,QAAQ,YACtB,SAAU,QAAQ;AAAA;AAAA;AAAA,YAIrB,cAAc;AAAA,cACb,cAAc,SAAU,QAAQ;AAI/B,oBAAK,OAAM,WAAW,UAAa,OAAM,eAAgB;AACxD,yBAAM,cAAc,cAAc,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAW7C,gCAAyB,IAAI,MAAM,aAAa;AAG/C,cAAK,CAAC,aAAa;AAClB,gBAAK,SAAS,IAAK,IAAI,UAAW,QAAY;AAC7C,qBAAO,MAAM,IAAK,IAAI,MAAM;AAAA;AAE7B;AAAA;AAID,mBAAS,IAAK,IAAI,MAAM;AACxB,iBAAO,MAAM,IAAK,IAAI,MAAM;AAAA,YAC3B,WAAW;AAAA,YACX,SAAS,SAAU,QAAQ;AAC1B,kBAAI,UAAU,QACb,QAAQ,SAAS,IAAK,MAAM;AAE7B,kBAAO,OAAM,YAAY,KAAO,KAAM,OAAS;AAK9C,oBAAK,CAAC,MAAM,QAAS;AAKpB,0BAAQ,OAAM,KAAM;AACpB,2BAAS,IAAK,MAAM,MAAM;AAK1B,6BAAW,YAAY,MAAM;AAC7B,uBAAM;AACN,2BAAS,SAAS,IAAK,MAAM;AAC7B,sBAAK,UAAU,UAAU,UAAW;AACnC,6BAAS,IAAK,MAAM,MAAM;AAAA,yBACpB;AACN,6BAAS;AAAA;AAEV,sBAAK,UAAU,QAAS;AAGvB,2BAAM;AACN,2BAAM;AAON,2BAAO,UAAU,OAAO;AAAA;AAAA,2BASZ,QAAO,MAAM,QAAS,SAAU,IAAK,cAAe;AACjE,yBAAM;AAAA;AAAA,yBAKI,MAAM,QAAS;AAG1B,yBAAS,IAAK,MAAM,MAAM;AAAA,kBACzB,OAAO,OAAO,MAAM,QAInB,OAAO,OAAQ,MAAO,IAAK,OAAO,MAAM,YACxC,MAAM,MAAO,IACb;AAAA;AAKF,uBAAM;AAAA;AAAA;AAAA;AAAA;AAMV,eAAO,cAAc,SAAU,MAAM,MAAM,QAAS;AAGnD,cAAK,KAAK,qBAAsB;AAC/B,iBAAK,oBAAqB,MAAM;AAAA;AAAA;AAIlC,eAAO,QAAQ,SAAU,KAAK,OAAQ;AAGrC,cAAK,CAAG,iBAAgB,OAAO,QAAU;AACxC,mBAAO,IAAI,OAAO,MAAO,KAAK;AAAA;AAI/B,cAAK,OAAO,IAAI,MAAO;AACtB,iBAAK,gBAAgB;AACrB,iBAAK,OAAO,IAAI;AAIhB,iBAAK,qBAAqB,IAAI,oBAC5B,IAAI,qBAAqB,UAGzB,IAAI,gBAAgB,QACrB,aACA;AAKD,iBAAK,SAAW,IAAI,UAAU,IAAI,OAAO,aAAa,IACrD,IAAI,OAAO,aACX,IAAI;AAEL,iBAAK,gBAAgB,IAAI;AACzB,iBAAK,gBAAgB,IAAI;AAAA,iBAGnB;AACN,iBAAK,OAAO;AAAA;AAIb,cAAK,OAAQ;AACZ,mBAAO,OAAQ,MAAM;AAAA;AAItB,eAAK,YAAY,OAAO,IAAI,aAAa,KAAK;AAG9C,eAAM,OAAO,WAAY;AAAA;AAK1B,eAAO,MAAM,YAAY;AAAA,UACxB,aAAa,OAAO;AAAA,UACpB,oBAAoB;AAAA,UACpB,sBAAsB;AAAA,UACtB,+BAA+B;AAAA,UAC/B,aAAa;AAAA,UAEb,gBAAgB,WAAW;AAC1B,gBAAI,IAAI,KAAK;AAEb,iBAAK,qBAAqB;AAE1B,gBAAK,KAAK,CAAC,KAAK,aAAc;AAC7B,gBAAE;AAAA;AAAA;AAAA,UAGJ,iBAAiB,WAAW;AAC3B,gBAAI,IAAI,KAAK;AAEb,iBAAK,uBAAuB;AAE5B,gBAAK,KAAK,CAAC,KAAK,aAAc;AAC7B,gBAAE;AAAA;AAAA;AAAA,UAGJ,0BAA0B,WAAW;AACpC,gBAAI,IAAI,KAAK;AAEb,iBAAK,gCAAgC;AAErC,gBAAK,KAAK,CAAC,KAAK,aAAc;AAC7B,gBAAE;AAAA;AAGH,iBAAK;AAAA;AAAA;AAKP,eAAO,KAAM;AAAA,UACZ,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,OAAO;AAAA,UACP,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,UAAU;AAAA,UACV,KAAK;AAAA,UACL,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,UACT,WAAW;AAAA,UACX,aAAa;AAAA,UACb,SAAS;AAAA,UACT,SAAS;AAAA,UACT,eAAe;AAAA,UACf,WAAW;AAAA,UACX,SAAS;AAAA,UACT,OAAO;AAAA,WACL,OAAO,MAAM;AAEhB,eAAO,KAAM,EAAE,OAAO,WAAW,MAAM,cAAc,SAAU,MAAM,cAAe;AACnF,iBAAO,MAAM,QAAS,QAAS;AAAA,YAG9B,OAAO,WAAW;AAKjB,6BAAgB,MAAM,MAAM;AAG5B,qBAAO;AAAA;AAAA,YAER,SAAS,WAAW;AAGnB,6BAAgB,MAAM;AAGtB,qBAAO;AAAA;AAAA,YAKR,UAAU,WAAW;AACpB,qBAAO;AAAA;AAAA,YAGR;AAAA;AAAA;AAYF,eAAO,KAAM;AAAA,UACZ,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,cAAc;AAAA,WACZ,SAAU,MAAM,KAAM;AACxB,iBAAO,MAAM,QAAS,QAAS;AAAA,YAC9B,cAAc;AAAA,YACd,UAAU;AAAA,YAEV,QAAQ,SAAU,QAAQ;AACzB,kBAAI,KACH,SAAS,MACT,UAAU,OAAM,eAChB,YAAY,OAAM;AAInB,kBAAK,CAAC,WAAa,YAAY,UAAU,CAAC,OAAO,SAAU,QAAQ,UAAc;AAChF,uBAAM,OAAO,UAAU;AACvB,sBAAM,UAAU,QAAQ,MAAO,MAAM;AACrC,uBAAM,OAAO;AAAA;AAEd,qBAAO;AAAA;AAAA;AAAA;AAKV,eAAO,GAAG,OAAQ;AAAA,UAEjB,IAAI,SAAU,OAAO,UAAU,MAAM,KAAK;AACzC,mBAAO,GAAI,MAAM,OAAO,UAAU,MAAM;AAAA;AAAA,UAEzC,KAAK,SAAU,OAAO,UAAU,MAAM,KAAK;AAC1C,mBAAO,GAAI,MAAM,OAAO,UAAU,MAAM,KAAI;AAAA;AAAA,UAE7C,KAAK,SAAU,OAAO,UAAU,KAAK;AACpC,gBAAI,WAAW;AACf,gBAAK,SAAS,MAAM,kBAAkB,MAAM,WAAY;AAGvD,0BAAY,MAAM;AAClB,qBAAQ,MAAM,gBAAiB,IAC9B,UAAU,YACT,UAAU,WAAW,MAAM,UAAU,YACrC,UAAU,UACX,UAAU,UACV,UAAU;AAEX,qBAAO;AAAA;AAER,gBAAK,OAAO,UAAU,UAAW;AAGhC,mBAAM,QAAQ,OAAQ;AACrB,qBAAK,IAAK,MAAM,UAAU,MAAO;AAAA;AAElC,qBAAO;AAAA;AAER,gBAAK,aAAa,SAAS,OAAO,aAAa,YAAa;AAG3D,oBAAK;AACL,yBAAW;AAAA;AAEZ,gBAAK,QAAO,OAAQ;AACnB,oBAAK;AAAA;AAEN,mBAAO,KAAK,KAAM,WAAW;AAC5B,qBAAO,MAAM,OAAQ,MAAM,OAAO,KAAI;AAAA;AAAA;AAAA;AAMzC,YAKC,eAAe,yBAGf,WAAW,qCACX,eAAe;AAGhB,oCAA6B,MAAM,SAAU;AAC5C,cAAK,SAAU,MAAM,YACpB,SAAU,QAAQ,aAAa,KAAK,UAAU,QAAQ,YAAY,OAAS;AAE3E,mBAAO,OAAQ,MAAO,SAAU,SAAW,MAAO;AAAA;AAGnD,iBAAO;AAAA;AAIR,+BAAwB,MAAO;AAC9B,eAAK,OAAS,MAAK,aAAc,YAAa,QAAS,MAAM,KAAK;AAClE,iBAAO;AAAA;AAER,+BAAwB,MAAO;AAC9B,cAAO,MAAK,QAAQ,IAAK,MAAO,GAAG,OAAQ,SAAU;AACpD,iBAAK,OAAO,KAAK,KAAK,MAAO;AAAA,iBACvB;AACN,iBAAK,gBAAiB;AAAA;AAGvB,iBAAO;AAAA;AAGR,gCAAyB,KAAK,MAAO;AACpC,cAAI,GAAG,GAAG,MAAM,UAAU,UAAU,UAAU;AAE9C,cAAK,KAAK,aAAa,GAAI;AAC1B;AAAA;AAID,cAAK,SAAS,QAAS,MAAQ;AAC9B,uBAAW,SAAS,IAAK;AACzB,qBAAS,SAAS;AAElB,gBAAK,QAAS;AACb,uBAAS,OAAQ,MAAM;AAEvB,mBAAM,QAAQ,QAAS;AACtB,qBAAM,IAAI,GAAG,IAAI,OAAQ,MAAO,QAAQ,IAAI,GAAG,KAAM;AACpD,yBAAO,MAAM,IAAK,MAAM,MAAM,OAAQ,MAAQ;AAAA;AAAA;AAAA;AAAA;AAOlD,cAAK,SAAS,QAAS,MAAQ;AAC9B,uBAAW,SAAS,OAAQ;AAC5B,uBAAW,OAAO,OAAQ,IAAI;AAE9B,qBAAS,IAAK,MAAM;AAAA;AAAA;AAKtB,0BAAmB,KAAK,MAAO;AAC9B,cAAI,YAAW,KAAK,SAAS;AAG7B,cAAK,cAAa,WAAW,eAAe,KAAM,IAAI,OAAS;AAC9D,iBAAK,UAAU,IAAI;AAAA,qBAGR,cAAa,WAAW,cAAa,YAAa;AAC7D,iBAAK,eAAe,IAAI;AAAA;AAAA;AAI1B,0BAAmB,aAAY,MAAM,UAAU,SAAU;AAGxD,iBAAO,KAAM;AAEb,cAAI,UAAU,OAAO,SAAS,YAAY,MAAM,KAC/C,IAAI,GACJ,IAAI,YAAW,QACf,WAAW,IAAI,GACf,QAAQ,KAAM,IACd,kBAAkB,YAAY;AAG/B,cAAK,mBACD,IAAI,KAAK,OAAO,UAAU,YAC3B,CAAC,QAAQ,cAAc,SAAS,KAAM,QAAY;AACpD,mBAAO,YAAW,KAAM,SAAU,QAAQ;AACzC,kBAAI,QAAO,YAAW,GAAI;AAC1B,kBAAK,iBAAkB;AACtB,qBAAM,KAAM,MAAM,KAAM,MAAM,QAAO,MAAK;AAAA;AAE3C,uBAAU,OAAM,MAAM,UAAU;AAAA;AAAA;AAIlC,cAAK,GAAI;AACR,uBAAW,cAAe,MAAM,YAAY,GAAI,eAAe,OAAO,aAAY;AAClF,oBAAQ,SAAS;AAEjB,gBAAK,SAAS,WAAW,WAAW,GAAI;AACvC,yBAAW;AAAA;AAIZ,gBAAK,SAAS,SAAU;AACvB,wBAAU,OAAO,IAAK,QAAQ,UAAU,WAAY;AACpD,2BAAa,QAAQ;AAKrB,qBAAQ,IAAI,GAAG,KAAM;AACpB,uBAAO;AAEP,oBAAK,MAAM,UAAW;AACrB,yBAAO,OAAO,MAAO,MAAM,MAAM;AAGjC,sBAAK,YAAa;AAIjB,2BAAO,MAAO,SAAS,QAAQ,MAAM;AAAA;AAAA;AAIvC,yBAAS,KAAM,YAAY,IAAK,MAAM;AAAA;AAGvC,kBAAK,YAAa;AACjB,sBAAM,QAAS,QAAQ,SAAS,GAAI;AAGpC,uBAAO,IAAK,SAAS;AAGrB,qBAAM,IAAI,GAAG,IAAI,YAAY,KAAM;AAClC,yBAAO,QAAS;AAChB,sBAAK,YAAY,KAAM,KAAK,QAAQ,OACnC,CAAC,SAAS,OAAQ,MAAM,iBACxB,OAAO,SAAU,KAAK,OAAS;AAE/B,wBAAK,KAAK,OAAS,MAAK,QAAQ,IAAK,kBAAmB,UAAW;AAGlE,0BAAK,OAAO,YAAY,CAAC,KAAK,UAAW;AACxC,+BAAO,SAAU,KAAK,KAAK;AAAA,0BAC1B,OAAO,KAAK,SAAS,KAAK,aAAc;AAAA,2BACtC;AAAA;AAAA,2BAEE;AACN,8BAAS,KAAK,YAAY,QAAS,cAAc,KAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQnE,iBAAO;AAAA;AAGR,wBAAiB,MAAM,UAAU,UAAW;AAC3C,cAAI,MACH,QAAQ,WAAW,OAAO,OAAQ,UAAU,QAAS,MACrD,IAAI;AAEL,iBAAU,QAAO,MAAO,OAAS,MAAM,KAAM;AAC5C,gBAAK,CAAC,YAAY,KAAK,aAAa,GAAI;AACvC,qBAAO,UAAW,QAAQ;AAAA;AAG3B,gBAAK,KAAK,YAAa;AACtB,kBAAK,YAAY,WAAY,OAAS;AACrC,8BAAe,QAAQ,MAAM;AAAA;AAE9B,mBAAK,WAAW,YAAa;AAAA;AAAA;AAI/B,iBAAO;AAAA;AAGR,eAAO,OAAQ;AAAA,UACd,eAAe,SAAU,MAAO;AAC/B,mBAAO;AAAA;AAAA,UAGR,OAAO,SAAU,MAAM,eAAe,mBAAoB;AACzD,gBAAI,GAAG,GAAG,aAAa,cACtB,SAAQ,KAAK,UAAW,OACxB,SAAS,WAAY;AAGtB,gBAAK,CAAC,QAAQ,kBAAoB,MAAK,aAAa,KAAK,KAAK,aAAa,OACzE,CAAC,OAAO,SAAU,OAAS;AAG5B,6BAAe,QAAQ;AACvB,4BAAc,QAAQ;AAEtB,mBAAM,IAAI,GAAG,IAAI,YAAY,QAAQ,IAAI,GAAG,KAAM;AACjD,yBAAU,YAAa,IAAK,aAAc;AAAA;AAAA;AAK5C,gBAAK,eAAgB;AACpB,kBAAK,mBAAoB;AACxB,8BAAc,eAAe,QAAQ;AACrC,+BAAe,gBAAgB,QAAQ;AAEvC,qBAAM,IAAI,GAAG,IAAI,YAAY,QAAQ,IAAI,GAAG,KAAM;AACjD,iCAAgB,YAAa,IAAK,aAAc;AAAA;AAAA,qBAE3C;AACN,+BAAgB,MAAM;AAAA;AAAA;AAKxB,2BAAe,QAAQ,QAAO;AAC9B,gBAAK,aAAa,SAAS,GAAI;AAC9B,4BAAe,cAAc,CAAC,UAAU,QAAQ,MAAM;AAAA;AAIvD,mBAAO;AAAA;AAAA,UAGR,WAAW,SAAU,OAAQ;AAC5B,gBAAI,MAAM,MAAM,MACf,UAAU,OAAO,MAAM,SACvB,IAAI;AAEL,mBAAU,QAAO,MAAO,QAAU,QAAW,KAAM;AAClD,kBAAK,WAAY,OAAS;AACzB,oBAAO,OAAO,KAAM,SAAS,UAAc;AAC1C,sBAAK,KAAK,QAAS;AAClB,yBAAM,QAAQ,KAAK,QAAS;AAC3B,0BAAK,QAAS,OAAS;AACtB,+BAAO,MAAM,OAAQ,MAAM;AAAA,6BAGrB;AACN,+BAAO,YAAa,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA;AAOxC,uBAAM,SAAS,WAAY;AAAA;AAE5B,oBAAK,KAAM,SAAS,UAAY;AAI/B,uBAAM,SAAS,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAOhC,eAAO,GAAG,OAAQ;AAAA,UACjB,QAAQ,SAAU,UAAW;AAC5B,mBAAO,OAAQ,MAAM,UAAU;AAAA;AAAA,UAGhC,QAAQ,SAAU,UAAW;AAC5B,mBAAO,OAAQ,MAAM;AAAA;AAAA,UAGtB,MAAM,SAAU,OAAQ;AACvB,mBAAO,OAAQ,MAAM,SAAU,QAAQ;AACtC,qBAAO,WAAU,SAChB,OAAO,KAAM,QACb,KAAK,QAAQ,KAAM,WAAW;AAC7B,oBAAK,KAAK,aAAa,KAAK,KAAK,aAAa,MAAM,KAAK,aAAa,GAAI;AACzE,uBAAK,cAAc;AAAA;AAAA;AAAA,eAGpB,MAAM,OAAO,UAAU;AAAA;AAAA,UAG3B,QAAQ,WAAW;AAClB,mBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,kBAAK,KAAK,aAAa,KAAK,KAAK,aAAa,MAAM,KAAK,aAAa,GAAI;AACzE,oBAAI,SAAS,mBAAoB,MAAM;AACvC,uBAAO,YAAa;AAAA;AAAA;AAAA;AAAA,UAKvB,SAAS,WAAW;AACnB,mBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,kBAAK,KAAK,aAAa,KAAK,KAAK,aAAa,MAAM,KAAK,aAAa,GAAI;AACzE,oBAAI,SAAS,mBAAoB,MAAM;AACvC,uBAAO,aAAc,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA,UAKrC,QAAQ,WAAW;AAClB,mBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,kBAAK,KAAK,YAAa;AACtB,qBAAK,WAAW,aAAc,MAAM;AAAA;AAAA;AAAA;AAAA,UAKvC,OAAO,WAAW;AACjB,mBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,kBAAK,KAAK,YAAa;AACtB,qBAAK,WAAW,aAAc,MAAM,KAAK;AAAA;AAAA;AAAA;AAAA,UAK5C,OAAO,WAAW;AACjB,gBAAI,MACH,IAAI;AAEL,mBAAU,QAAO,KAAM,OAAS,MAAM,KAAM;AAC3C,kBAAK,KAAK,aAAa,GAAI;AAG1B,uBAAO,UAAW,QAAQ,MAAM;AAGhC,qBAAK,cAAc;AAAA;AAAA;AAIrB,mBAAO;AAAA;AAAA,UAGR,OAAO,SAAU,eAAe,mBAAoB;AACnD,4BAAgB,iBAAiB,OAAO,QAAQ;AAChD,gCAAoB,qBAAqB,OAAO,gBAAgB;AAEhE,mBAAO,KAAK,IAAK,WAAW;AAC3B,qBAAO,OAAO,MAAO,MAAM,eAAe;AAAA;AAAA;AAAA,UAI5C,MAAM,SAAU,OAAQ;AACvB,mBAAO,OAAQ,MAAM,SAAU,QAAQ;AACtC,kBAAI,OAAO,KAAM,MAAO,IACvB,IAAI,GACJ,IAAI,KAAK;AAEV,kBAAK,WAAU,UAAa,KAAK,aAAa,GAAI;AACjD,uBAAO,KAAK;AAAA;AAIb,kBAAK,OAAO,WAAU,YAAY,CAAC,aAAa,KAAM,WACrD,CAAC,QAAW,UAAS,KAAM,WAAW,CAAE,IAAI,KAAQ,GAAI,gBAAkB;AAE1E,yBAAQ,OAAO,cAAe;AAE9B,oBAAI;AACH,yBAAQ,IAAI,GAAG,KAAM;AACpB,2BAAO,KAAM,MAAO;AAGpB,wBAAK,KAAK,aAAa,GAAI;AAC1B,6BAAO,UAAW,QAAQ,MAAM;AAChC,2BAAK,YAAY;AAAA;AAAA;AAInB,yBAAO;AAAA,yBAGE,GAAR;AAAA;AAAA;AAGH,kBAAK,MAAO;AACX,qBAAK,QAAQ,OAAQ;AAAA;AAAA,eAEpB,MAAM,OAAO,UAAU;AAAA;AAAA,UAG3B,aAAa,WAAW;AACvB,gBAAI,UAAU;AAGd,mBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,kBAAI,SAAS,KAAK;AAElB,kBAAK,OAAO,QAAS,MAAM,WAAY,GAAI;AAC1C,uBAAO,UAAW,QAAQ;AAC1B,oBAAK,QAAS;AACb,yBAAO,aAAc,MAAM;AAAA;AAAA;AAAA,eAK3B;AAAA;AAAA;AAIL,eAAO,KAAM;AAAA,UACZ,UAAU;AAAA,UACV,WAAW;AAAA,UACX,cAAc;AAAA,UACd,aAAa;AAAA,UACb,YAAY;AAAA,WACV,SAAU,MAAM,UAAW;AAC7B,iBAAO,GAAI,QAAS,SAAU,UAAW;AACxC,gBAAI,OACH,MAAM,IACN,SAAS,OAAQ,WACjB,OAAO,OAAO,SAAS,GACvB,IAAI;AAEL,mBAAQ,KAAK,MAAM,KAAM;AACxB,sBAAQ,MAAM,OAAO,OAAO,KAAK,MAAO;AACxC,qBAAQ,OAAQ,IAAO,UAAY;AAInC,oBAAK,MAAO,KAAK,MAAM;AAAA;AAGxB,mBAAO,KAAK,UAAW;AAAA;AAAA;AAGzB,YAAI,YAAY,IAAI,OAAQ,OAAO,OAAO,mBAAmB;AAE7D,YAAI,YAAY,SAAU,MAAO;AAK/B,cAAI,OAAO,KAAK,cAAc;AAE9B,cAAK,CAAC,QAAQ,CAAC,KAAK,QAAS;AAC5B,mBAAO;AAAA;AAGR,iBAAO,KAAK,iBAAkB;AAAA;AAGhC,YAAI,OAAO,SAAU,MAAM,SAAS,UAAW;AAC9C,cAAI,KAAK,MACR,MAAM;AAGP,eAAM,QAAQ,SAAU;AACvB,gBAAK,QAAS,KAAK,MAAO;AAC1B,iBAAK,MAAO,QAAS,QAAS;AAAA;AAG/B,gBAAM,SAAS,KAAM;AAGrB,eAAM,QAAQ,SAAU;AACvB,iBAAK,MAAO,QAAS,IAAK;AAAA;AAG3B,iBAAO;AAAA;AAIR,YAAI,YAAY,IAAI,OAAQ,UAAU,KAAM,MAAO;AAInD,QAAE,YAAW;AAIZ,uCAA6B;AAG5B,gBAAK,CAAC,KAAM;AACX;AAAA;AAGD,sBAAU,MAAM,UAAU;AAE1B,gBAAI,MAAM,UACT;AAGD,4BAAgB,YAAa,WAAY,YAAa;AAEtD,gBAAI,WAAW,QAAO,iBAAkB;AACxC,+BAAmB,SAAS,QAAQ;AAGpC,oCAAwB,mBAAoB,SAAS,gBAAiB;AAItE,gBAAI,MAAM,QAAQ;AAClB,gCAAoB,mBAAoB,SAAS,WAAY;AAI7D,mCAAuB,mBAAoB,SAAS,WAAY;AAMhE,gBAAI,MAAM,WAAW;AACrB,+BAAmB,mBAAoB,IAAI,cAAc,OAAQ;AAEjE,4BAAgB,YAAa;AAI7B,kBAAM;AAAA;AAGP,sCAA6B,SAAU;AACtC,mBAAO,KAAK,MAAO,WAAY;AAAA;AAGhC,cAAI,kBAAkB,sBAAsB,kBAAkB,mBAC7D,yBAAyB,uBACzB,YAAY,UAAS,cAAe,QACpC,MAAM,UAAS,cAAe;AAG/B,cAAK,CAAC,IAAI,OAAQ;AACjB;AAAA;AAKD,cAAI,MAAM,iBAAiB;AAC3B,cAAI,UAAW,MAAO,MAAM,iBAAiB;AAC7C,kBAAQ,kBAAkB,IAAI,MAAM,mBAAmB;AAEvD,iBAAO,OAAQ,SAAS;AAAA,YACvB,mBAAmB,WAAW;AAC7B;AACA,qBAAO;AAAA;AAAA,YAER,gBAAgB,WAAW;AAC1B;AACA,qBAAO;AAAA;AAAA,YAER,eAAe,WAAW;AACzB;AACA,qBAAO;AAAA;AAAA,YAER,oBAAoB,WAAW;AAC9B;AACA,qBAAO;AAAA;AAAA,YAER,eAAe,WAAW;AACzB;AACA,qBAAO;AAAA;AAAA,YAYR,sBAAsB,WAAW;AAChC,kBAAI,OAAO,IAAI,SAAS;AACxB,kBAAK,2BAA2B,MAAO;AACtC,wBAAQ,UAAS,cAAe;AAChC,qBAAK,UAAS,cAAe;AAC7B,0BAAU,UAAS,cAAe;AAElC,sBAAM,MAAM,UAAU;AACtB,mBAAG,MAAM,UAAU;AAKnB,mBAAG,MAAM,SAAS;AAClB,wBAAQ,MAAM,SAAS;AAQvB,wBAAQ,MAAM,UAAU;AAExB,gCACE,YAAa,OACb,YAAa,IACb,YAAa;AAEf,0BAAU,QAAO,iBAAkB;AACnC,0CAA4B,SAAU,QAAQ,QAAQ,MACrD,SAAU,QAAQ,gBAAgB,MAClC,SAAU,QAAQ,mBAAmB,QAAW,GAAG;AAEpD,gCAAgB,YAAa;AAAA;AAE9B,qBAAO;AAAA;AAAA;AAAA;AAMV,wBAAiB,MAAM,MAAM,UAAW;AACvC,cAAI,OAAO,UAAU,UAAU,KAM9B,QAAQ,KAAK;AAEd,qBAAW,YAAY,UAAW;AAKlC,cAAK,UAAW;AACf,kBAAM,SAAS,iBAAkB,SAAU,SAAU;AAErD,gBAAK,QAAQ,MAAM,CAAC,WAAY,OAAS;AACxC,oBAAM,OAAO,MAAO,MAAM;AAAA;AAQ3B,gBAAK,CAAC,QAAQ,oBAAoB,UAAU,KAAM,QAAS,UAAU,KAAM,OAAS;AAGnF,sBAAQ,MAAM;AACd,yBAAW,MAAM;AACjB,yBAAW,MAAM;AAGjB,oBAAM,WAAW,MAAM,WAAW,MAAM,QAAQ;AAChD,oBAAM,SAAS;AAGf,oBAAM,QAAQ;AACd,oBAAM,WAAW;AACjB,oBAAM,WAAW;AAAA;AAAA;AAInB,iBAAO,QAAQ,SAId,MAAM,KACN;AAAA;AAIF,8BAAuB,aAAa,QAAS;AAG5C,iBAAO;AAAA,YACN,KAAK,WAAW;AACf,kBAAK,eAAgB;AAIpB,uBAAO,KAAK;AACZ;AAAA;AAID,qBAAS,MAAK,MAAM,QAAS,MAAO,MAAM;AAAA;AAAA;AAAA;AAM7C,YAAI,cAAc,CAAE,UAAU,OAAO,OACpC,aAAa,UAAS,cAAe,OAAQ,OAC7C,cAAc;AAGf,gCAAyB,MAAO;AAG/B,cAAI,UAAU,KAAM,GAAI,gBAAgB,KAAK,MAAO,IACnD,IAAI,YAAY;AAEjB,iBAAQ,KAAM;AACb,mBAAO,YAAa,KAAM;AAC1B,gBAAK,QAAQ,YAAa;AACzB,qBAAO;AAAA;AAAA;AAAA;AAMV,+BAAwB,MAAO;AAC9B,cAAI,QAAQ,OAAO,SAAU,SAAU,YAAa;AAEpD,cAAK,OAAQ;AACZ,mBAAO;AAAA;AAER,cAAK,QAAQ,YAAa;AACzB,mBAAO;AAAA;AAER,iBAAO,YAAa,QAAS,eAAgB,SAAU;AAAA;AAIxD,YAKC,eAAe,6BACf,cAAc,OACd,UAAU,EAAE,UAAU,YAAY,YAAY,UAAU,SAAS,WACjE,qBAAqB;AAAA,UACpB,eAAe;AAAA,UACf,YAAY;AAAA;AAGd,mCAA4B,OAAO,OAAO,UAAW;AAIpD,cAAI,UAAU,QAAQ,KAAM;AAC5B,iBAAO,UAGN,KAAK,IAAK,GAAG,QAAS,KAAQ,aAAY,MAAU,SAAS,MAAO,QACpE;AAAA;AAGF,oCAA6B,MAAM,WAAW,KAAK,aAAa,QAAQ,aAAc;AACrF,cAAI,IAAI,cAAc,UAAU,IAAI,GACnC,QAAQ,GACR,QAAQ;AAGT,cAAK,QAAU,eAAc,WAAW,YAAc;AACrD,mBAAO;AAAA;AAGR,iBAAQ,IAAI,GAAG,KAAK,GAAI;AAGvB,gBAAK,QAAQ,UAAW;AACvB,uBAAS,OAAO,IAAK,MAAM,MAAM,UAAW,IAAK,MAAM;AAAA;AAIxD,gBAAK,CAAC,aAAc;AAGnB,uBAAS,OAAO,IAAK,MAAM,YAAY,UAAW,IAAK,MAAM;AAG7D,kBAAK,QAAQ,WAAY;AACxB,yBAAS,OAAO,IAAK,MAAM,WAAW,UAAW,KAAM,SAAS,MAAM;AAAA,qBAGhE;AACN,yBAAS,OAAO,IAAK,MAAM,WAAW,UAAW,KAAM,SAAS,MAAM;AAAA;AAAA,mBAKjE;AAGN,kBAAK,QAAQ,WAAY;AACxB,yBAAS,OAAO,IAAK,MAAM,YAAY,UAAW,IAAK,MAAM;AAAA;AAI9D,kBAAK,QAAQ,UAAW;AACvB,yBAAS,OAAO,IAAK,MAAM,WAAW,UAAW,KAAM,SAAS,MAAM;AAAA;AAAA;AAAA;AAMzE,cAAK,CAAC,eAAe,eAAe,GAAI;AAIvC,qBAAS,KAAK,IAAK,GAAG,KAAK,KAC1B,KAAM,WAAW,UAAW,GAAI,gBAAgB,UAAU,MAAO,MACjE,cACA,QACA,QACA,SAIM;AAAA;AAGR,iBAAO;AAAA;AAGR,kCAA2B,MAAM,WAAW,OAAQ;AAGnD,cAAI,SAAS,UAAW,OAIvB,kBAAkB,CAAC,QAAQ,uBAAuB,OAClD,cAAc,mBACb,OAAO,IAAK,MAAM,aAAa,OAAO,YAAa,cACpD,mBAAmB,aAEnB,MAAM,OAAQ,MAAM,WAAW,SAC/B,aAAa,WAAW,UAAW,GAAI,gBAAgB,UAAU,MAAO;AAIzE,cAAK,UAAU,KAAM,MAAQ;AAC5B,gBAAK,CAAC,OAAQ;AACb,qBAAO;AAAA;AAER,kBAAM;AAAA;AAOP,cAAO,EAAC,QAAQ,uBAAuB,eAMtC,CAAC,QAAQ,0BAA0B,SAAU,MAAM,SAInD,QAAQ,UAIR,CAAC,WAAY,QAAS,OAAO,IAAK,MAAM,WAAW,OAAO,YAAa,aAGvE,KAAK,iBAAiB,QAAS;AAE/B,0BAAc,OAAO,IAAK,MAAM,aAAa,OAAO,YAAa;AAKjE,+BAAmB,cAAc;AACjC,gBAAK,kBAAmB;AACvB,oBAAM,KAAM;AAAA;AAAA;AAKd,gBAAM,WAAY,QAAS;AAG3B,iBAAS,MACR,mBACC,MACA,WACA,SAAW,eAAc,WAAW,YACpC,kBACA,QAGA,OAEE;AAAA;AAGL,eAAO,OAAQ;AAAA,UAId,UAAU;AAAA,YACT,SAAS;AAAA,cACR,KAAK,SAAU,MAAM,UAAW;AAC/B,oBAAK,UAAW;AAGf,sBAAI,MAAM,OAAQ,MAAM;AACxB,yBAAO,QAAQ,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,UAO9B,WAAW;AAAA,YACV,2BAA2B;AAAA,YAC3B,eAAe;AAAA,YACf,eAAe;AAAA,YACf,YAAY;AAAA,YACZ,cAAc;AAAA,YACd,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,cAAc;AAAA,YACd,iBAAiB;AAAA,YACjB,mBAAmB;AAAA,YACnB,WAAW;AAAA,YACX,cAAc;AAAA,YACd,gBAAgB;AAAA,YAChB,cAAc;AAAA,YACd,WAAW;AAAA,YACX,SAAS;AAAA,YACT,WAAW;AAAA,YACX,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAQ;AAAA;AAAA,UAKT,UAAU;AAAA,UAGV,OAAO,SAAU,MAAM,MAAM,OAAO,OAAQ;AAG3C,gBAAK,CAAC,QAAQ,KAAK,aAAa,KAAK,KAAK,aAAa,KAAK,CAAC,KAAK,OAAQ;AACzE;AAAA;AAID,gBAAI,KAAK,MAAM,OACd,WAAW,UAAW,OACtB,eAAe,YAAY,KAAM,OACjC,QAAQ,KAAK;AAKd,gBAAK,CAAC,cAAe;AACpB,qBAAO,cAAe;AAAA;AAIvB,oBAAQ,OAAO,SAAU,SAAU,OAAO,SAAU;AAGpD,gBAAK,UAAU,QAAY;AAC1B,qBAAO,OAAO;AAGd,kBAAK,SAAS,YAAc,OAAM,QAAQ,KAAM,WAAa,IAAK,IAAM;AACvE,wBAAQ,UAAW,MAAM,MAAM;AAG/B,uBAAO;AAAA;AAIR,kBAAK,SAAS,QAAQ,UAAU,OAAQ;AACvC;AAAA;AAMD,kBAAK,SAAS,YAAY,CAAC,cAAe;AACzC,yBAAS,OAAO,IAAK,MAAS,QAAO,UAAW,YAAa,KAAK;AAAA;AAInE,kBAAK,CAAC,QAAQ,mBAAmB,UAAU,MAAM,KAAK,QAAS,kBAAmB,GAAI;AACrF,sBAAO,QAAS;AAAA;AAIjB,kBAAK,CAAC,SAAS,CAAG,UAAS,UACxB,SAAQ,MAAM,IAAK,MAAM,OAAO,YAAc,QAAY;AAE5D,oBAAK,cAAe;AACnB,wBAAM,YAAa,MAAM;AAAA,uBACnB;AACN,wBAAO,QAAS;AAAA;AAAA;AAAA,mBAIZ;AAGN,kBAAK,SAAS,SAAS,SACpB,OAAM,MAAM,IAAK,MAAM,OAAO,YAAc,QAAY;AAE1D,uBAAO;AAAA;AAIR,qBAAO,MAAO;AAAA;AAAA;AAAA,UAIhB,KAAK,SAAU,MAAM,MAAM,OAAO,QAAS;AAC1C,gBAAI,KAAK,KAAK,OACb,WAAW,UAAW,OACtB,eAAe,YAAY,KAAM;AAKlC,gBAAK,CAAC,cAAe;AACpB,qBAAO,cAAe;AAAA;AAIvB,oBAAQ,OAAO,SAAU,SAAU,OAAO,SAAU;AAGpD,gBAAK,SAAS,SAAS,OAAQ;AAC9B,oBAAM,MAAM,IAAK,MAAM,MAAM;AAAA;AAI9B,gBAAK,QAAQ,QAAY;AACxB,oBAAM,OAAQ,MAAM,MAAM;AAAA;AAI3B,gBAAK,QAAQ,YAAY,QAAQ,oBAAqB;AACrD,oBAAM,mBAAoB;AAAA;AAI3B,gBAAK,UAAU,MAAM,OAAQ;AAC5B,oBAAM,WAAY;AAClB,qBAAO,UAAU,QAAQ,SAAU,OAAQ,OAAO,IAAI;AAAA;AAGvD,mBAAO;AAAA;AAAA;AAIT,eAAO,KAAM,CAAE,UAAU,UAAW,SAAU,IAAI,WAAY;AAC7D,iBAAO,SAAU,aAAc;AAAA,YAC9B,KAAK,SAAU,MAAM,UAAU,OAAQ;AACtC,kBAAK,UAAW;AAIf,uBAAO,aAAa,KAAM,OAAO,IAAK,MAAM,eAQzC,EAAC,KAAK,iBAAiB,UAAU,CAAC,KAAK,wBAAwB,SACjE,KAAM,MAAM,SAAS,WAAW;AAC/B,yBAAO,iBAAkB,MAAM,WAAW;AAAA,qBAE3C,iBAAkB,MAAM,WAAW;AAAA;AAAA;AAAA,YAItC,KAAK,SAAU,MAAM,OAAO,OAAQ;AACnC,kBAAI,SACH,SAAS,UAAW,OAIpB,qBAAqB,CAAC,QAAQ,mBAC7B,OAAO,aAAa,YAGrB,kBAAkB,sBAAsB,OACxC,cAAc,mBACb,OAAO,IAAK,MAAM,aAAa,OAAO,YAAa,cACpD,WAAW,QACV,mBACC,MACA,WACA,OACA,aACA,UAED;AAIF,kBAAK,eAAe,oBAAqB;AACxC,4BAAY,KAAK,KAChB,KAAM,WAAW,UAAW,GAAI,gBAAgB,UAAU,MAAO,MACjE,WAAY,OAAQ,cACpB,mBAAoB,MAAM,WAAW,UAAU,OAAO,UACtD;AAAA;AAKF,kBAAK,YAAc,WAAU,QAAQ,KAAM,WACxC,SAAS,MAAO,UAAW,MAAO;AAEpC,qBAAK,MAAO,aAAc;AAC1B,wBAAQ,OAAO,IAAK,MAAM;AAAA;AAG3B,qBAAO,kBAAmB,MAAM,OAAO;AAAA;AAAA;AAAA;AAK1C,eAAO,SAAS,aAAa,aAAc,QAAQ,oBAClD,SAAU,MAAM,UAAW;AAC1B,cAAK,UAAW;AACf,mBAAS,YAAY,OAAQ,MAAM,kBAClC,KAAK,wBAAwB,OAC5B,KAAM,MAAM,EAAE,YAAY,KAAK,WAAW;AACzC,qBAAO,KAAK,wBAAwB;AAAA,kBAEnC;AAAA;AAAA;AAMP,eAAO,KAAM;AAAA,UACZ,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,QAAQ;AAAA,WACN,SAAU,QAAQ,QAAS;AAC7B,iBAAO,SAAU,SAAS,UAAW;AAAA,YACpC,QAAQ,SAAU,OAAQ;AACzB,kBAAI,IAAI,GACP,WAAW,IAGX,QAAQ,OAAO,UAAU,WAAW,MAAM,MAAO,OAAQ,CAAE;AAE5D,qBAAQ,IAAI,GAAG,KAAM;AACpB,yBAAU,SAAS,UAAW,KAAM,UACnC,MAAO,MAAO,MAAO,IAAI,MAAO,MAAO;AAAA;AAGzC,qBAAO;AAAA;AAAA;AAIT,cAAK,WAAW,UAAW;AAC1B,mBAAO,SAAU,SAAS,QAAS,MAAM;AAAA;AAAA;AAI3C,eAAO,GAAG,OAAQ;AAAA,UACjB,KAAK,SAAU,MAAM,OAAQ;AAC5B,mBAAO,OAAQ,MAAM,SAAU,MAAM,OAAM,QAAQ;AAClD,kBAAI,QAAQ,KACX,OAAM,IACN,IAAI;AAEL,kBAAK,MAAM,QAAS,QAAS;AAC5B,yBAAS,UAAW;AACpB,sBAAM,MAAK;AAEX,uBAAQ,IAAI,KAAK,KAAM;AACtB,uBAAK,MAAM,MAAQ,OAAO,IAAK,MAAM,MAAM,IAAK,OAAO;AAAA;AAGxD,uBAAO;AAAA;AAGR,qBAAO,WAAU,SAChB,OAAO,MAAO,MAAM,OAAM,UAC1B,OAAO,IAAK,MAAM;AAAA,eACjB,MAAM,OAAO,UAAU,SAAS;AAAA;AAAA;AAKrC,uBAAgB,MAAM,SAAS,MAAM,MAAK,QAAS;AAClD,iBAAO,IAAI,MAAM,UAAU,KAAM,MAAM,SAAS,MAAM,MAAK;AAAA;AAE5D,eAAO,QAAQ;AAEf,cAAM,YAAY;AAAA,UACjB,aAAa;AAAA,UACb,MAAM,SAAU,MAAM,SAAS,MAAM,MAAK,QAAQ,MAAO;AACxD,iBAAK,OAAO;AACZ,iBAAK,OAAO;AACZ,iBAAK,SAAS,UAAU,OAAO,OAAO;AACtC,iBAAK,UAAU;AACf,iBAAK,QAAQ,KAAK,MAAM,KAAK;AAC7B,iBAAK,MAAM;AACX,iBAAK,OAAO,QAAU,QAAO,UAAW,QAAS,KAAK;AAAA;AAAA,UAEvD,KAAK,WAAW;AACf,gBAAI,QAAQ,MAAM,UAAW,KAAK;AAElC,mBAAO,SAAS,MAAM,MACrB,MAAM,IAAK,QACX,MAAM,UAAU,SAAS,IAAK;AAAA;AAAA,UAEhC,KAAK,SAAU,SAAU;AACxB,gBAAI,OACH,QAAQ,MAAM,UAAW,KAAK;AAE/B,gBAAK,KAAK,QAAQ,UAAW;AAC5B,mBAAK,MAAM,QAAQ,OAAO,OAAQ,KAAK,QACtC,SAAS,KAAK,QAAQ,WAAW,SAAS,GAAG,GAAG,KAAK,QAAQ;AAAA,mBAExD;AACN,mBAAK,MAAM,QAAQ;AAAA;AAEpB,iBAAK,MAAQ,MAAK,MAAM,KAAK,SAAU,QAAQ,KAAK;AAEpD,gBAAK,KAAK,QAAQ,MAAO;AACxB,mBAAK,QAAQ,KAAK,KAAM,KAAK,MAAM,KAAK,KAAK;AAAA;AAG9C,gBAAK,SAAS,MAAM,KAAM;AACzB,oBAAM,IAAK;AAAA,mBACL;AACN,oBAAM,UAAU,SAAS,IAAK;AAAA;AAE/B,mBAAO;AAAA;AAAA;AAIT,cAAM,UAAU,KAAK,YAAY,MAAM;AAEvC,cAAM,YAAY;AAAA,UACjB,UAAU;AAAA,YACT,KAAK,SAAU,OAAQ;AACtB,kBAAI;AAIJ,kBAAK,MAAM,KAAK,aAAa,KAC5B,MAAM,KAAM,MAAM,SAAU,QAAQ,MAAM,KAAK,MAAO,MAAM,SAAU,MAAO;AAC7E,uBAAO,MAAM,KAAM,MAAM;AAAA;AAO1B,uBAAS,OAAO,IAAK,MAAM,MAAM,MAAM,MAAM;AAG7C,qBAAO,CAAC,UAAU,WAAW,SAAS,IAAI;AAAA;AAAA,YAE3C,KAAK,SAAU,OAAQ;AAKtB,kBAAK,OAAO,GAAG,KAAM,MAAM,OAAS;AACnC,uBAAO,GAAG,KAAM,MAAM,MAAQ;AAAA,yBACnB,MAAM,KAAK,aAAa,KACnC,QAAO,SAAU,MAAM,SACtB,MAAM,KAAK,MAAO,cAAe,MAAM,UAAY,OAAS;AAC7D,uBAAO,MAAO,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;AAAA,qBAClD;AACN,sBAAM,KAAM,MAAM,QAAS,MAAM;AAAA;AAAA;AAAA;AAAA;AAQrC,cAAM,UAAU,YAAY,MAAM,UAAU,aAAa;AAAA,UACxD,KAAK,SAAU,OAAQ;AACtB,gBAAK,MAAM,KAAK,YAAY,MAAM,KAAK,YAAa;AACnD,oBAAM,KAAM,MAAM,QAAS,MAAM;AAAA;AAAA;AAAA;AAKpC,eAAO,SAAS;AAAA,UACf,QAAQ,SAAU,GAAI;AACrB,mBAAO;AAAA;AAAA,UAER,OAAO,SAAU,GAAI;AACpB,mBAAO,MAAM,KAAK,IAAK,IAAI,KAAK,MAAO;AAAA;AAAA,UAExC,UAAU;AAAA;AAGX,eAAO,KAAK,MAAM,UAAU;AAG5B,eAAO,GAAG,OAAO;AAKjB,YACC,OAAO,YACP,WAAW,0BACX,OAAO;AAER,4BAAoB;AACnB,cAAK,YAAa;AACjB,gBAAK,UAAS,WAAW,SAAS,QAAO,uBAAwB;AAChE,sBAAO,sBAAuB;AAAA,mBACxB;AACN,sBAAO,WAAY,UAAU,OAAO,GAAG;AAAA;AAGxC,mBAAO,GAAG;AAAA;AAAA;AAKZ,+BAAuB;AACtB,kBAAO,WAAY,WAAW;AAC7B,oBAAQ;AAAA;AAET,iBAAS,QAAQ,KAAK;AAAA;AAIvB,uBAAgB,MAAM,cAAe;AACpC,cAAI,OACH,IAAI,GACJ,QAAQ,EAAE,QAAQ;AAInB,yBAAe,eAAe,IAAI;AAClC,iBAAQ,IAAI,GAAG,KAAK,IAAI,cAAe;AACtC,oBAAQ,UAAW;AACnB,kBAAO,WAAW,SAAU,MAAO,YAAY,SAAU;AAAA;AAG1D,cAAK,cAAe;AACnB,kBAAM,UAAU,MAAM,QAAQ;AAAA;AAG/B,iBAAO;AAAA;AAGR,6BAAsB,OAAO,MAAM,WAAY;AAC9C,cAAI,OACH,cAAe,WAAU,SAAU,SAAU,IAAK,OAAQ,UAAU,SAAU,OAC9E,SAAQ,GACR,SAAS,YAAW;AACrB,iBAAQ,SAAQ,QAAQ,UAAU;AACjC,gBAAO,QAAQ,YAAY,QAAQ,KAAM,WAAW,MAAM,QAAY;AAGrE,qBAAO;AAAA;AAAA;AAAA;AAKV,kCAA2B,MAAM,OAAO,MAAO;AAC9C,cAAI,MAAM,OAAO,QAAQ,OAAO,SAAS,WAAW,gBAAgB,SACnE,QAAQ,WAAW,SAAS,YAAY,OACxC,OAAO,MACP,OAAO,IACP,QAAQ,KAAK,OACb,SAAS,KAAK,YAAY,mBAAoB,OAC9C,WAAW,SAAS,IAAK,MAAM;AAGhC,cAAK,CAAC,KAAK,OAAQ;AAClB,oBAAQ,OAAO,YAAa,MAAM;AAClC,gBAAK,MAAM,YAAY,MAAO;AAC7B,oBAAM,WAAW;AACjB,wBAAU,MAAM,MAAM;AACtB,oBAAM,MAAM,OAAO,WAAW;AAC7B,oBAAK,CAAC,MAAM,UAAW;AACtB;AAAA;AAAA;AAAA;AAIH,kBAAM;AAEN,iBAAK,OAAQ,WAAW;AAGvB,mBAAK,OAAQ,WAAW;AACvB,sBAAM;AACN,oBAAK,CAAC,OAAO,MAAO,MAAM,MAAO,QAAS;AACzC,wBAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAOhB,eAAM,QAAQ,OAAQ;AACrB,oBAAQ,MAAO;AACf,gBAAK,SAAS,KAAM,QAAU;AAC7B,qBAAO,MAAO;AACd,uBAAS,UAAU,UAAU;AAC7B,kBAAK,UAAY,UAAS,SAAS,SAAW;AAI7C,oBAAK,UAAU,UAAU,YAAY,SAAU,UAAW,QAAY;AACrE,2BAAS;AAAA,uBAGH;AACN;AAAA;AAAA;AAGF,mBAAM,QAAS,YAAY,SAAU,SAAU,OAAO,MAAO,MAAM;AAAA;AAAA;AAKrE,sBAAY,CAAC,OAAO,cAAe;AACnC,cAAK,CAAC,aAAa,OAAO,cAAe,OAAS;AACjD;AAAA;AAID,cAAK,SAAS,KAAK,aAAa,GAAI;AAMnC,iBAAK,WAAW,CAAE,MAAM,UAAU,MAAM,WAAW,MAAM;AAGzD,6BAAiB,YAAY,SAAS;AACtC,gBAAK,kBAAkB,MAAO;AAC7B,+BAAiB,SAAS,IAAK,MAAM;AAAA;AAEtC,sBAAU,OAAO,IAAK,MAAM;AAC5B,gBAAK,YAAY,QAAS;AACzB,kBAAK,gBAAiB;AACrB,0BAAU;AAAA,qBACJ;AAGN,yBAAU,CAAE,OAAQ;AACpB,iCAAiB,KAAK,MAAM,WAAW;AACvC,0BAAU,OAAO,IAAK,MAAM;AAC5B,yBAAU,CAAE;AAAA;AAAA;AAKd,gBAAK,YAAY,YAAY,YAAY,kBAAkB,kBAAkB,MAAO;AACnF,kBAAK,OAAO,IAAK,MAAM,aAAc,QAAS;AAG7C,oBAAK,CAAC,WAAY;AACjB,uBAAK,KAAM,WAAW;AACrB,0BAAM,UAAU;AAAA;AAEjB,sBAAK,kBAAkB,MAAO;AAC7B,8BAAU,MAAM;AAChB,qCAAiB,YAAY,SAAS,KAAK;AAAA;AAAA;AAG7C,sBAAM,UAAU;AAAA;AAAA;AAAA;AAKnB,cAAK,KAAK,UAAW;AACpB,kBAAM,WAAW;AACjB,iBAAK,OAAQ,WAAW;AACvB,oBAAM,WAAW,KAAK,SAAU;AAChC,oBAAM,YAAY,KAAK,SAAU;AACjC,oBAAM,YAAY,KAAK,SAAU;AAAA;AAAA;AAKnC,sBAAY;AACZ,eAAM,QAAQ,MAAO;AAGpB,gBAAK,CAAC,WAAY;AACjB,kBAAK,UAAW;AACf,oBAAK,YAAY,UAAW;AAC3B,2BAAS,SAAS;AAAA;AAAA,qBAEb;AACN,2BAAW,SAAS,OAAQ,MAAM,UAAU,EAAE,SAAS;AAAA;AAIxD,kBAAK,QAAS;AACb,yBAAS,SAAS,CAAC;AAAA;AAIpB,kBAAK,QAAS;AACb,yBAAU,CAAE,OAAQ;AAAA;AAKrB,mBAAK,KAAM,WAAW;AAKrB,oBAAK,CAAC,QAAS;AACd,2BAAU,CAAE;AAAA;AAEb,yBAAS,OAAQ,MAAM;AACvB,qBAAM,QAAQ,MAAO;AACpB,yBAAO,MAAO,MAAM,MAAM,KAAM;AAAA;AAAA;AAAA;AAMnC,wBAAY,YAAa,SAAS,SAAU,QAAS,GAAG,MAAM;AAC9D,gBAAK,CAAG,SAAQ,WAAa;AAC5B,uBAAU,QAAS,UAAU;AAC7B,kBAAK,QAAS;AACb,0BAAU,MAAM,UAAU;AAC1B,0BAAU,QAAQ;AAAA;AAAA;AAAA;AAAA;AAMtB,4BAAqB,OAAO,eAAgB;AAC3C,cAAI,QAAO,MAAM,QAAQ,OAAO;AAGhC,eAAM,UAAS,OAAQ;AACtB,mBAAO,UAAW;AAClB,qBAAS,cAAe;AACxB,oBAAQ,MAAO;AACf,gBAAK,MAAM,QAAS,QAAU;AAC7B,uBAAS,MAAO;AAChB,sBAAQ,MAAO,UAAU,MAAO;AAAA;AAGjC,gBAAK,WAAU,MAAO;AACrB,oBAAO,QAAS;AAChB,qBAAO,MAAO;AAAA;AAGf,oBAAQ,OAAO,SAAU;AACzB,gBAAK,SAAS,YAAY,OAAQ;AACjC,sBAAQ,MAAM,OAAQ;AACtB,qBAAO,MAAO;AAId,mBAAM,UAAS,OAAQ;AACtB,oBAAK,CAAG,WAAS,QAAU;AAC1B,wBAAO,UAAU,MAAO;AACxB,gCAAe,UAAU;AAAA;AAAA;AAAA,mBAGrB;AACN,4BAAe,QAAS;AAAA;AAAA;AAAA;AAK3B,2BAAoB,MAAM,YAAY,SAAU;AAC/C,cAAI,QACH,SACA,SAAQ,GACR,SAAS,UAAU,WAAW,QAC9B,WAAW,OAAO,WAAW,OAAQ,WAAW;AAG/C,mBAAO,KAAK;AAAA,cAEb,OAAO,WAAW;AACjB,gBAAK,SAAU;AACd,qBAAO;AAAA;AAER,gBAAI,cAAc,SAAS,eAC1B,YAAY,KAAK,IAAK,GAAG,UAAU,YAAY,UAAU,WAAW,cAIpE,OAAO,YAAY,UAAU,YAAY,GACzC,UAAU,IAAI,MACd,SAAQ,GACR,UAAS,UAAU,OAAO;AAE3B,mBAAQ,SAAQ,SAAQ,UAAU;AACjC,wBAAU,OAAQ,QAAQ,IAAK;AAAA;AAGhC,qBAAS,WAAY,MAAM,CAAE,WAAW,SAAS;AAGjD,gBAAK,UAAU,KAAK,SAAS;AAC5B,qBAAO;AAAA;AAIR,gBAAK,CAAC,SAAS;AACd,uBAAS,WAAY,MAAM,CAAE,WAAW,GAAG;AAAA;AAI5C,qBAAS,YAAa,MAAM,CAAE;AAC9B,mBAAO;AAAA,aAER,YAAY,SAAS,QAAS;AAAA,YAC7B;AAAA,YACA,OAAO,OAAO,OAAQ,IAAI;AAAA,YAC1B,MAAM,OAAO,OAAQ,MAAM;AAAA,cAC1B,eAAe;AAAA,cACf,QAAQ,OAAO,OAAO;AAAA,eACpB;AAAA,YACH,oBAAoB;AAAA,YACpB,iBAAiB;AAAA,YACjB,WAAW,SAAS;AAAA,YACpB,UAAU,QAAQ;AAAA,YAClB,QAAQ;AAAA,YACR,aAAa,SAAU,MAAM,MAAM;AAClC,kBAAI,QAAQ,OAAO,MAAO,MAAM,UAAU,MAAM,MAAM,MACrD,UAAU,KAAK,cAAe,SAAU,UAAU,KAAK;AACxD,wBAAU,OAAO,KAAM;AACvB,qBAAO;AAAA;AAAA,YAER,MAAM,SAAU,SAAU;AACzB,kBAAI,SAAQ,GAIX,UAAS,UAAU,UAAU,OAAO,SAAS;AAC9C,kBAAK,SAAU;AACd,uBAAO;AAAA;AAER,wBAAU;AACV,qBAAQ,SAAQ,SAAQ,UAAU;AACjC,0BAAU,OAAQ,QAAQ,IAAK;AAAA;AAIhC,kBAAK,SAAU;AACd,yBAAS,WAAY,MAAM,CAAE,WAAW,GAAG;AAC3C,yBAAS,YAAa,MAAM,CAAE,WAAW;AAAA,qBACnC;AACN,yBAAS,WAAY,MAAM,CAAE,WAAW;AAAA;AAEzC,qBAAO;AAAA;AAAA,cAGT,QAAQ,UAAU;AAEnB,qBAAY,OAAO,UAAU,KAAK;AAElC,iBAAQ,SAAQ,QAAQ,UAAU;AACjC,qBAAS,UAAU,WAAY,QAAQ,KAAM,WAAW,MAAM,OAAO,UAAU;AAC/E,gBAAK,QAAS;AACb,kBAAK,YAAY,OAAO,OAAS;AAChC,uBAAO,YAAa,UAAU,MAAM,UAAU,KAAK,OAAQ,OAC1D,OAAO,KAAK,KAAM;AAAA;AAEpB,qBAAO;AAAA;AAAA;AAIT,iBAAO,IAAK,OAAO,aAAa;AAEhC,cAAK,YAAY,UAAU,KAAK,QAAU;AACzC,sBAAU,KAAK,MAAM,KAAM,MAAM;AAAA;AAIlC,oBACE,SAAU,UAAU,KAAK,UACzB,KAAM,UAAU,KAAK,MAAM,UAAU,KAAK,UAC1C,KAAM,UAAU,KAAK,MACrB,OAAQ,UAAU,KAAK;AAEzB,iBAAO,GAAG,MACT,OAAO,OAAQ,MAAM;AAAA,YACpB;AAAA,YACA,MAAM;AAAA,YACN,OAAO,UAAU,KAAK;AAAA;AAIxB,iBAAO;AAAA;AAGR,eAAO,YAAY,OAAO,OAAQ,WAAW;AAAA,UAE5C,UAAU;AAAA,YACT,KAAK,CAAE,SAAU,MAAM,OAAQ;AAC9B,kBAAI,QAAQ,KAAK,YAAa,MAAM;AACpC,wBAAW,MAAM,MAAM,MAAM,QAAQ,KAAM,QAAS;AACpD,qBAAO;AAAA;AAAA;AAAA,UAIT,SAAS,SAAU,OAAO,UAAW;AACpC,gBAAK,YAAY,QAAU;AAC1B,yBAAW;AACX,sBAAQ,CAAE;AAAA,mBACJ;AACN,sBAAQ,MAAM,MAAO;AAAA;AAGtB,gBAAI,MACH,SAAQ,GACR,SAAS,MAAM;AAEhB,mBAAQ,SAAQ,QAAQ,UAAU;AACjC,qBAAO,MAAO;AACd,wBAAU,SAAU,QAAS,UAAU,SAAU,SAAU;AAC3D,wBAAU,SAAU,MAAO,QAAS;AAAA;AAAA;AAAA,UAItC,YAAY,CAAE;AAAA,UAEd,WAAW,SAAU,UAAU,SAAU;AACxC,gBAAK,SAAU;AACd,wBAAU,WAAW,QAAS;AAAA,mBACxB;AACN,wBAAU,WAAW,KAAM;AAAA;AAAA;AAAA;AAK9B,eAAO,QAAQ,SAAU,OAAO,QAAQ,KAAK;AAC5C,cAAI,MAAM,SAAS,OAAO,UAAU,WAAW,OAAO,OAAQ,IAAI,SAAU;AAAA,YAC3E,UAAU,OAAM,CAAC,OAAM,UACtB,YAAY,UAAW;AAAA,YACxB,UAAU;AAAA,YACV,QAAQ,OAAM,UAAU,UAAU,CAAC,YAAY,WAAY;AAAA;AAI5D,cAAK,OAAO,GAAG,KAAM;AACpB,gBAAI,WAAW;AAAA,iBAET;AACN,gBAAK,OAAO,IAAI,aAAa,UAAW;AACvC,kBAAK,IAAI,YAAY,OAAO,GAAG,QAAS;AACvC,oBAAI,WAAW,OAAO,GAAG,OAAQ,IAAI;AAAA,qBAE/B;AACN,oBAAI,WAAW,OAAO,GAAG,OAAO;AAAA;AAAA;AAAA;AAMnC,cAAK,IAAI,SAAS,QAAQ,IAAI,UAAU,MAAO;AAC9C,gBAAI,QAAQ;AAAA;AAIb,cAAI,MAAM,IAAI;AAEd,cAAI,WAAW,WAAW;AACzB,gBAAK,YAAY,IAAI,MAAQ;AAC5B,kBAAI,IAAI,KAAM;AAAA;AAGf,gBAAK,IAAI,OAAQ;AAChB,qBAAO,QAAS,MAAM,IAAI;AAAA;AAAA;AAI5B,iBAAO;AAAA;AAGR,eAAO,GAAG,OAAQ;AAAA,UACjB,QAAQ,SAAU,OAAO,IAAI,QAAQ,UAAW;AAG/C,mBAAO,KAAK,OAAQ,oBAAqB,IAAK,WAAW,GAAI,OAG3D,MAAM,QAAS,EAAE,SAAS,MAAM,OAAO,QAAQ;AAAA;AAAA,UAElD,SAAS,SAAU,MAAM,OAAO,QAAQ,UAAW;AAClD,gBAAI,SAAQ,OAAO,cAAe,OACjC,SAAS,OAAO,MAAO,OAAO,QAAQ,WACtC,cAAc,WAAW;AAGxB,kBAAI,OAAO,UAAW,MAAM,OAAO,OAAQ,IAAI,OAAQ;AAGvD,kBAAK,UAAS,SAAS,IAAK,MAAM,WAAa;AAC9C,qBAAK,KAAM;AAAA;AAAA;AAId,wBAAY,SAAS;AAErB,mBAAO,UAAS,OAAO,UAAU,QAChC,KAAK,KAAM,eACX,KAAK,MAAO,OAAO,OAAO;AAAA;AAAA,UAE5B,MAAM,SAAU,MAAM,YAAY,SAAU;AAC3C,gBAAI,YAAY,SAAU,OAAQ;AACjC,kBAAI,OAAO,MAAM;AACjB,qBAAO,MAAM;AACb,mBAAM;AAAA;AAGP,gBAAK,OAAO,SAAS,UAAW;AAC/B,wBAAU;AACV,2BAAa;AACb,qBAAO;AAAA;AAER,gBAAK,YAAa;AACjB,mBAAK,MAAO,QAAQ,MAAM;AAAA;AAG3B,mBAAO,KAAK,KAAM,WAAW;AAC5B,kBAAI,UAAU,MACb,SAAQ,QAAQ,QAAQ,OAAO,cAC/B,SAAS,OAAO,QAChB,OAAO,SAAS,IAAK;AAEtB,kBAAK,QAAQ;AACZ,oBAAK,KAAM,WAAW,KAAM,QAAQ,MAAO;AAC1C,4BAAW,KAAM;AAAA;AAAA,qBAEZ;AACN,qBAAM,UAAS,MAAO;AACrB,sBAAK,KAAM,WAAW,KAAM,QAAQ,QAAQ,KAAK,KAAM,SAAU;AAChE,8BAAW,KAAM;AAAA;AAAA;AAAA;AAKpB,mBAAM,SAAQ,OAAO,QAAQ,YAAW;AACvC,oBAAK,OAAQ,QAAQ,SAAS,QAC3B,SAAQ,QAAQ,OAAQ,QAAQ,UAAU,OAAS;AAErD,yBAAQ,QAAQ,KAAK,KAAM;AAC3B,4BAAU;AACV,yBAAO,OAAQ,QAAO;AAAA;AAAA;AAOxB,kBAAK,WAAW,CAAC,SAAU;AAC1B,uBAAO,QAAS,MAAM;AAAA;AAAA;AAAA;AAAA,UAIzB,QAAQ,SAAU,MAAO;AACxB,gBAAK,SAAS,OAAQ;AACrB,qBAAO,QAAQ;AAAA;AAEhB,mBAAO,KAAK,KAAM,WAAW;AAC5B,kBAAI,QACH,OAAO,SAAS,IAAK,OACrB,QAAQ,KAAM,OAAO,UACrB,QAAQ,KAAM,OAAO,eACrB,SAAS,OAAO,QAChB,SAAS,QAAQ,MAAM,SAAS;AAGjC,mBAAK,SAAS;AAGd,qBAAO,MAAO,MAAM,MAAM;AAE1B,kBAAK,SAAS,MAAM,MAAO;AAC1B,sBAAM,KAAK,KAAM,MAAM;AAAA;AAIxB,mBAAM,SAAQ,OAAO,QAAQ,YAAW;AACvC,oBAAK,OAAQ,QAAQ,SAAS,QAAQ,OAAQ,QAAQ,UAAU,MAAO;AACtE,yBAAQ,QAAQ,KAAK,KAAM;AAC3B,yBAAO,OAAQ,QAAO;AAAA;AAAA;AAKxB,mBAAM,SAAQ,GAAG,SAAQ,QAAQ,UAAU;AAC1C,oBAAK,MAAO,WAAW,MAAO,QAAQ,QAAS;AAC9C,wBAAO,QAAQ,OAAO,KAAM;AAAA;AAAA;AAK9B,qBAAO,KAAK;AAAA;AAAA;AAAA;AAKf,eAAO,KAAM,CAAE,UAAU,QAAQ,SAAU,SAAU,IAAI,MAAO;AAC/D,cAAI,QAAQ,OAAO,GAAI;AACvB,iBAAO,GAAI,QAAS,SAAU,OAAO,QAAQ,UAAW;AACvD,mBAAO,SAAS,QAAQ,OAAO,UAAU,YACxC,MAAM,MAAO,MAAM,aACnB,KAAK,QAAS,MAAO,MAAM,OAAQ,OAAO,QAAQ;AAAA;AAAA;AAKrD,eAAO,KAAM;AAAA,UACZ,WAAW,MAAO;AAAA,UAClB,SAAS,MAAO;AAAA,UAChB,aAAa,MAAO;AAAA,UACpB,QAAQ,EAAE,SAAS;AAAA,UACnB,SAAS,EAAE,SAAS;AAAA,UACpB,YAAY,EAAE,SAAS;AAAA,WACrB,SAAU,MAAM,OAAQ;AAC1B,iBAAO,GAAI,QAAS,SAAU,OAAO,QAAQ,UAAW;AACvD,mBAAO,KAAK,QAAS,OAAO,OAAO,QAAQ;AAAA;AAAA;AAI7C,eAAO,SAAS;AAChB,eAAO,GAAG,OAAO,WAAW;AAC3B,cAAI,OACH,IAAI,GACJ,SAAS,OAAO;AAEjB,kBAAQ,KAAK;AAEb,iBAAQ,IAAI,OAAO,QAAQ,KAAM;AAChC,oBAAQ,OAAQ;AAGhB,gBAAK,CAAC,WAAW,OAAQ,OAAQ,OAAQ;AACxC,qBAAO,OAAQ,KAAK;AAAA;AAAA;AAItB,cAAK,CAAC,OAAO,QAAS;AACrB,mBAAO,GAAG;AAAA;AAEX,kBAAQ;AAAA;AAGT,eAAO,GAAG,QAAQ,SAAU,OAAQ;AACnC,iBAAO,OAAO,KAAM;AACpB,iBAAO,GAAG;AAAA;AAGX,eAAO,GAAG,WAAW;AACrB,eAAO,GAAG,QAAQ,WAAW;AAC5B,cAAK,YAAa;AACjB;AAAA;AAGD,uBAAa;AACb;AAAA;AAGD,eAAO,GAAG,OAAO,WAAW;AAC3B,uBAAa;AAAA;AAGd,eAAO,GAAG,SAAS;AAAA,UAClB,MAAM;AAAA,UACN,MAAM;AAAA,UAGN,UAAU;AAAA;AAMX,eAAO,GAAG,QAAQ,SAAU,MAAM,MAAO;AACxC,iBAAO,OAAO,KAAK,OAAO,GAAG,OAAQ,SAAU,OAAO;AACtD,iBAAO,QAAQ;AAEf,iBAAO,KAAK,MAAO,MAAM,SAAU,OAAM,OAAQ;AAChD,gBAAI,UAAU,QAAO,WAAY,OAAM;AACvC,kBAAM,OAAO,WAAW;AACvB,sBAAO,aAAc;AAAA;AAAA;AAAA;AAMxB,QAAE,YAAW;AACZ,cAAI,QAAQ,UAAS,cAAe,UACnC,SAAS,UAAS,cAAe,WACjC,MAAM,OAAO,YAAa,UAAS,cAAe;AAEnD,gBAAM,OAAO;AAIb,kBAAQ,UAAU,MAAM,UAAU;AAIlC,kBAAQ,cAAc,IAAI;AAI1B,kBAAQ,UAAS,cAAe;AAChC,gBAAM,QAAQ;AACd,gBAAM,OAAO;AACb,kBAAQ,aAAa,MAAM,UAAU;AAAA;AAItC,YAAI,UACH,aAAa,OAAO,KAAK;AAE1B,eAAO,GAAG,OAAQ;AAAA,UACjB,MAAM,SAAU,MAAM,OAAQ;AAC7B,mBAAO,OAAQ,MAAM,OAAO,MAAM,MAAM,OAAO,UAAU,SAAS;AAAA;AAAA,UAGnE,YAAY,SAAU,MAAO;AAC5B,mBAAO,KAAK,KAAM,WAAW;AAC5B,qBAAO,WAAY,MAAM;AAAA;AAAA;AAAA;AAK5B,eAAO,OAAQ;AAAA,UACd,MAAM,SAAU,MAAM,MAAM,OAAQ;AACnC,gBAAI,KAAK,OACR,QAAQ,KAAK;AAGd,gBAAK,UAAU,KAAK,UAAU,KAAK,UAAU,GAAI;AAChD;AAAA;AAID,gBAAK,OAAO,KAAK,iBAAiB,aAAc;AAC/C,qBAAO,OAAO,KAAM,MAAM,MAAM;AAAA;AAKjC,gBAAK,UAAU,KAAK,CAAC,OAAO,SAAU,OAAS;AAC9C,sBAAQ,OAAO,UAAW,KAAK,kBAC5B,QAAO,KAAK,MAAM,KAAK,KAAM,QAAS,WAAW;AAAA;AAGrD,gBAAK,UAAU,QAAY;AAC1B,kBAAK,UAAU,MAAO;AACrB,uBAAO,WAAY,MAAM;AACzB;AAAA;AAGD,kBAAK,SAAS,SAAS,SACpB,OAAM,MAAM,IAAK,MAAM,OAAO,WAAa,QAAY;AACzD,uBAAO;AAAA;AAGR,mBAAK,aAAc,MAAM,QAAQ;AACjC,qBAAO;AAAA;AAGR,gBAAK,SAAS,SAAS,SAAW,OAAM,MAAM,IAAK,MAAM,WAAa,MAAO;AAC5E,qBAAO;AAAA;AAGR,kBAAM,OAAO,KAAK,KAAM,MAAM;AAG9B,mBAAO,OAAO,OAAO,SAAY;AAAA;AAAA,UAGlC,WAAW;AAAA,YACV,MAAM;AAAA,cACL,KAAK,SAAU,MAAM,OAAQ;AAC5B,oBAAK,CAAC,QAAQ,cAAc,UAAU,WACrC,SAAU,MAAM,UAAY;AAC5B,sBAAI,MAAM,KAAK;AACf,uBAAK,aAAc,QAAQ;AAC3B,sBAAK,KAAM;AACV,yBAAK,QAAQ;AAAA;AAEd,yBAAO;AAAA;AAAA;AAAA;AAAA;AAAA,UAMX,YAAY,SAAU,MAAM,OAAQ;AACnC,gBAAI,MACH,IAAI,GAIJ,YAAY,SAAS,MAAM,MAAO;AAEnC,gBAAK,aAAa,KAAK,aAAa,GAAI;AACvC,qBAAU,OAAO,UAAW,MAAU;AACrC,qBAAK,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAO1B,mBAAW;AAAA,UACV,KAAK,SAAU,MAAM,OAAO,MAAO;AAClC,gBAAK,UAAU,OAAQ;AAGtB,qBAAO,WAAY,MAAM;AAAA,mBACnB;AACN,mBAAK,aAAc,MAAM;AAAA;AAE1B,mBAAO;AAAA;AAAA;AAIT,eAAO,KAAM,OAAO,KAAK,MAAM,KAAK,OAAO,MAAO,SAAU,SAAU,IAAI,MAAO;AAChF,cAAI,SAAS,WAAY,SAAU,OAAO,KAAK;AAE/C,qBAAY,QAAS,SAAU,MAAM,OAAM,OAAQ;AAClD,gBAAI,KAAK,QACR,gBAAgB,MAAK;AAEtB,gBAAK,CAAC,OAAQ;AAGb,uBAAS,WAAY;AACrB,yBAAY,iBAAkB;AAC9B,oBAAM,OAAQ,MAAM,OAAM,UAAW,OACpC,gBACA;AACD,yBAAY,iBAAkB;AAAA;AAE/B,mBAAO;AAAA;AAAA;AAOT,YAAI,aAAa,uCAChB,aAAa;AAEd,eAAO,GAAG,OAAQ;AAAA,UACjB,MAAM,SAAU,MAAM,OAAQ;AAC7B,mBAAO,OAAQ,MAAM,OAAO,MAAM,MAAM,OAAO,UAAU,SAAS;AAAA;AAAA,UAGnE,YAAY,SAAU,MAAO;AAC5B,mBAAO,KAAK,KAAM,WAAW;AAC5B,qBAAO,KAAM,OAAO,QAAS,SAAU;AAAA;AAAA;AAAA;AAK1C,eAAO,OAAQ;AAAA,UACd,MAAM,SAAU,MAAM,MAAM,OAAQ;AACnC,gBAAI,KAAK,OACR,QAAQ,KAAK;AAGd,gBAAK,UAAU,KAAK,UAAU,KAAK,UAAU,GAAI;AAChD;AAAA;AAGD,gBAAK,UAAU,KAAK,CAAC,OAAO,SAAU,OAAS;AAG9C,qBAAO,OAAO,QAAS,SAAU;AACjC,sBAAQ,OAAO,UAAW;AAAA;AAG3B,gBAAK,UAAU,QAAY;AAC1B,kBAAK,SAAS,SAAS,SACpB,OAAM,MAAM,IAAK,MAAM,OAAO,WAAa,QAAY;AACzD,uBAAO;AAAA;AAGR,qBAAS,KAAM,QAAS;AAAA;AAGzB,gBAAK,SAAS,SAAS,SAAW,OAAM,MAAM,IAAK,MAAM,WAAa,MAAO;AAC5E,qBAAO;AAAA;AAGR,mBAAO,KAAM;AAAA;AAAA,UAGd,WAAW;AAAA,YACV,UAAU;AAAA,cACT,KAAK,SAAU,MAAO;AAOrB,oBAAI,WAAW,OAAO,KAAK,KAAM,MAAM;AAEvC,oBAAK,UAAW;AACf,yBAAO,SAAU,UAAU;AAAA;AAG5B,oBACC,WAAW,KAAM,KAAK,aACtB,WAAW,KAAM,KAAK,aACtB,KAAK,MACJ;AACD,yBAAO;AAAA;AAGR,uBAAO;AAAA;AAAA;AAAA;AAAA,UAKV,SAAS;AAAA,YACR,OAAO;AAAA,YACP,SAAS;AAAA;AAAA;AAYX,YAAK,CAAC,QAAQ,aAAc;AAC3B,iBAAO,UAAU,WAAW;AAAA,YAC3B,KAAK,SAAU,MAAO;AAIrB,kBAAI,SAAS,KAAK;AAClB,kBAAK,UAAU,OAAO,YAAa;AAClC,uBAAO,WAAW;AAAA;AAEnB,qBAAO;AAAA;AAAA,YAER,KAAK,SAAU,MAAO;AAIrB,kBAAI,SAAS,KAAK;AAClB,kBAAK,QAAS;AACb,uBAAO;AAEP,oBAAK,OAAO,YAAa;AACxB,yBAAO,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAOvB,eAAO,KAAM;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,WACE,WAAW;AACb,iBAAO,QAAS,KAAK,iBAAkB;AAAA;AAQvC,kCAA2B,OAAQ;AAClC,cAAI,SAAS,MAAM,MAAO,kBAAmB;AAC7C,iBAAO,OAAO,KAAM;AAAA;AAItB,0BAAmB,MAAO;AACzB,iBAAO,KAAK,gBAAgB,KAAK,aAAc,YAAa;AAAA;AAG7D,gCAAyB,OAAQ;AAChC,cAAK,MAAM,QAAS,QAAU;AAC7B,mBAAO;AAAA;AAER,cAAK,OAAO,UAAU,UAAW;AAChC,mBAAO,MAAM,MAAO,kBAAmB;AAAA;AAExC,iBAAO;AAAA;AAGR,eAAO,GAAG,OAAQ;AAAA,UACjB,UAAU,SAAU,OAAQ;AAC3B,gBAAI,SAAS,MAAM,KAAK,UAAU,OAAO,GAAG,YAC3C,IAAI;AAEL,gBAAK,YAAY,QAAU;AAC1B,qBAAO,KAAK,KAAM,SAAU,IAAI;AAC/B,uBAAQ,MAAO,SAAU,MAAM,KAAM,MAAM,IAAG,SAAU;AAAA;AAAA;AAI1D,sBAAU,eAAgB;AAE1B,gBAAK,QAAQ,QAAS;AACrB,qBAAU,OAAO,KAAM,MAAU;AAChC,2BAAW,SAAU;AACrB,sBAAM,KAAK,aAAa,KAAO,MAAM,iBAAkB,YAAa;AAEpE,oBAAK,KAAM;AACV,sBAAI;AACJ,yBAAU,QAAQ,QAAS,MAAU;AACpC,wBAAK,IAAI,QAAS,MAAM,QAAQ,OAAQ,GAAI;AAC3C,6BAAO,QAAQ;AAAA;AAAA;AAKjB,+BAAa,iBAAkB;AAC/B,sBAAK,aAAa,YAAa;AAC9B,yBAAK,aAAc,SAAS;AAAA;AAAA;AAAA;AAAA;AAMhC,mBAAO;AAAA;AAAA,UAGR,aAAa,SAAU,OAAQ;AAC9B,gBAAI,SAAS,MAAM,KAAK,UAAU,OAAO,GAAG,YAC3C,IAAI;AAEL,gBAAK,YAAY,QAAU;AAC1B,qBAAO,KAAK,KAAM,SAAU,IAAI;AAC/B,uBAAQ,MAAO,YAAa,MAAM,KAAM,MAAM,IAAG,SAAU;AAAA;AAAA;AAI7D,gBAAK,CAAC,UAAU,QAAS;AACxB,qBAAO,KAAK,KAAM,SAAS;AAAA;AAG5B,sBAAU,eAAgB;AAE1B,gBAAK,QAAQ,QAAS;AACrB,qBAAU,OAAO,KAAM,MAAU;AAChC,2BAAW,SAAU;AAGrB,sBAAM,KAAK,aAAa,KAAO,MAAM,iBAAkB,YAAa;AAEpE,oBAAK,KAAM;AACV,sBAAI;AACJ,yBAAU,QAAQ,QAAS,MAAU;AAGpC,2BAAQ,IAAI,QAAS,MAAM,QAAQ,OAAQ,IAAK;AAC/C,4BAAM,IAAI,QAAS,MAAM,QAAQ,KAAK;AAAA;AAAA;AAKxC,+BAAa,iBAAkB;AAC/B,sBAAK,aAAa,YAAa;AAC9B,yBAAK,aAAc,SAAS;AAAA;AAAA;AAAA;AAAA;AAMhC,mBAAO;AAAA;AAAA,UAGR,aAAa,SAAU,OAAO,UAAW;AACxC,gBAAI,OAAO,OAAO,OACjB,eAAe,SAAS,YAAY,MAAM,QAAS;AAEpD,gBAAK,OAAO,aAAa,aAAa,cAAe;AACpD,qBAAO,WAAW,KAAK,SAAU,SAAU,KAAK,YAAa;AAAA;AAG9D,gBAAK,YAAY,QAAU;AAC1B,qBAAO,KAAK,KAAM,SAAU,GAAI;AAC/B,uBAAQ,MAAO,YACd,MAAM,KAAM,MAAM,GAAG,SAAU,OAAQ,WACvC;AAAA;AAAA;AAKH,mBAAO,KAAK,KAAM,WAAW;AAC5B,kBAAI,WAAW,GAAG,OAAM;AAExB,kBAAK,cAAe;AAGnB,oBAAI;AACJ,wBAAO,OAAQ;AACf,6BAAa,eAAgB;AAE7B,uBAAU,YAAY,WAAY,MAAU;AAG3C,sBAAK,MAAK,SAAU,YAAc;AACjC,0BAAK,YAAa;AAAA,yBACZ;AACN,0BAAK,SAAU;AAAA;AAAA;AAAA,yBAKN,UAAU,UAAa,SAAS,WAAY;AACvD,4BAAY,SAAU;AACtB,oBAAK,WAAY;AAGhB,2BAAS,IAAK,MAAM,iBAAiB;AAAA;AAOtC,oBAAK,KAAK,cAAe;AACxB,uBAAK,aAAc,SAClB,aAAa,UAAU,QACtB,KACA,SAAS,IAAK,MAAM,oBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,UAO/C,UAAU,SAAU,UAAW;AAC9B,gBAAI,WAAW,MACd,IAAI;AAEL,wBAAY,MAAM,WAAW;AAC7B,mBAAU,OAAO,KAAM,MAAU;AAChC,kBAAK,KAAK,aAAa,KACpB,OAAM,iBAAkB,SAAU,SAAW,KAAM,QAAS,aAAc,IAAK;AACjF,uBAAO;AAAA;AAAA;AAIT,mBAAO;AAAA;AAAA;AAOT,YAAI,UAAU;AAEd,eAAO,GAAG,OAAQ;AAAA,UACjB,KAAK,SAAU,OAAQ;AACtB,gBAAI,OAAO,KAAK,iBACf,OAAO,KAAM;AAEd,gBAAK,CAAC,UAAU,QAAS;AACxB,kBAAK,MAAO;AACX,wBAAQ,OAAO,SAAU,KAAK,SAC7B,OAAO,SAAU,KAAK,SAAS;AAEhC,oBAAK,SACJ,SAAS,SACP,OAAM,MAAM,IAAK,MAAM,cAAgB,QACxC;AACD,yBAAO;AAAA;AAGR,sBAAM,KAAK;AAGX,oBAAK,OAAO,QAAQ,UAAW;AAC9B,yBAAO,IAAI,QAAS,SAAS;AAAA;AAI9B,uBAAO,OAAO,OAAO,KAAK;AAAA;AAG3B;AAAA;AAGD,8BAAkB,YAAY;AAE9B,mBAAO,KAAK,KAAM,SAAU,GAAI;AAC/B,kBAAI;AAEJ,kBAAK,KAAK,aAAa,GAAI;AAC1B;AAAA;AAGD,kBAAK,iBAAkB;AACtB,sBAAM,MAAM,KAAM,MAAM,GAAG,OAAQ,MAAO;AAAA,qBACpC;AACN,sBAAM;AAAA;AAIP,kBAAK,OAAO,MAAO;AAClB,sBAAM;AAAA,yBAEK,OAAO,QAAQ,UAAW;AACrC,uBAAO;AAAA,yBAEI,MAAM,QAAS,MAAQ;AAClC,sBAAM,OAAO,IAAK,KAAK,SAAU,QAAQ;AACxC,yBAAO,UAAS,OAAO,KAAK,SAAQ;AAAA;AAAA;AAItC,sBAAQ,OAAO,SAAU,KAAK,SAAU,OAAO,SAAU,KAAK,SAAS;AAGvE,kBAAK,CAAC,SAAS,CAAG,UAAS,UAAW,MAAM,IAAK,MAAM,KAAK,aAAc,QAAY;AACrF,qBAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAMjB,eAAO,OAAQ;AAAA,UACd,UAAU;AAAA,YACT,QAAQ;AAAA,cACP,KAAK,SAAU,MAAO;AAErB,oBAAI,MAAM,OAAO,KAAK,KAAM,MAAM;AAClC,uBAAO,OAAO,OACb,MAMA,iBAAkB,OAAO,KAAM;AAAA;AAAA;AAAA,YAGlC,QAAQ;AAAA,cACP,KAAK,SAAU,MAAO;AACrB,oBAAI,OAAO,QAAQ,GAClB,UAAU,KAAK,SACf,SAAQ,KAAK,eACb,MAAM,KAAK,SAAS,cACpB,UAAS,MAAM,OAAO,IACtB,OAAM,MAAM,SAAQ,IAAI,QAAQ;AAEjC,oBAAK,SAAQ,GAAI;AAChB,sBAAI;AAAA,uBAEE;AACN,sBAAI,MAAM,SAAQ;AAAA;AAInB,uBAAQ,IAAI,MAAK,KAAM;AACtB,2BAAS,QAAS;AAIlB,sBAAO,QAAO,YAAY,MAAM,WAG9B,CAAC,OAAO,YACN,EAAC,OAAO,WAAW,YACpB,CAAC,SAAU,OAAO,YAAY,cAAiB;AAGjD,4BAAQ,OAAQ,QAAS;AAGzB,wBAAK,KAAM;AACV,6BAAO;AAAA;AAIR,4BAAO,KAAM;AAAA;AAAA;AAIf,uBAAO;AAAA;AAAA,cAGR,KAAK,SAAU,MAAM,OAAQ;AAC5B,oBAAI,WAAW,QACd,UAAU,KAAK,SACf,UAAS,OAAO,UAAW,QAC3B,IAAI,QAAQ;AAEb,uBAAQ,KAAM;AACb,2BAAS,QAAS;AAIlB,sBAAK,OAAO,WACX,OAAO,QAAS,OAAO,SAAS,OAAO,IAAK,SAAU,WAAW,IAChE;AACD,gCAAY;AAAA;AAAA;AAOd,oBAAK,CAAC,WAAY;AACjB,uBAAK,gBAAgB;AAAA;AAEtB,uBAAO;AAAA;AAAA;AAAA;AAAA;AAOX,eAAO,KAAM,CAAE,SAAS,aAAc,WAAW;AAChD,iBAAO,SAAU,QAAS;AAAA,YACzB,KAAK,SAAU,MAAM,OAAQ;AAC5B,kBAAK,MAAM,QAAS,QAAU;AAC7B,uBAAS,KAAK,UAAU,OAAO,QAAS,OAAQ,MAAO,OAAO,SAAU;AAAA;AAAA;AAAA;AAI3E,cAAK,CAAC,QAAQ,SAAU;AACvB,mBAAO,SAAU,MAAO,MAAM,SAAU,MAAO;AAC9C,qBAAO,KAAK,aAAc,aAAc,OAAO,OAAO,KAAK;AAAA;AAAA;AAAA;AAW9D,gBAAQ,UAAU,eAAe;AAGjC,YAAI,cAAc,mCACjB,0BAA0B,SAAU,GAAI;AACvC,YAAE;AAAA;AAGJ,eAAO,OAAQ,OAAO,OAAO;AAAA,UAE5B,SAAS,SAAU,QAAO,MAAM,MAAM,cAAe;AAEpD,gBAAI,GAAG,KAAK,KAAK,YAAY,QAAQ,QAAQ,SAAS,aACrD,YAAY,CAAE,QAAQ,YACtB,OAAO,QAAO,KAAM,QAAO,UAAW,OAAM,OAAO,QACnD,aAAa,QAAO,KAAM,QAAO,eAAgB,OAAM,UAAU,MAAO,OAAQ;AAEjF,kBAAM,cAAc,MAAM,OAAO,QAAQ;AAGzC,gBAAK,KAAK,aAAa,KAAK,KAAK,aAAa,GAAI;AACjD;AAAA;AAID,gBAAK,YAAY,KAAM,OAAO,OAAO,MAAM,YAAc;AACxD;AAAA;AAGD,gBAAK,KAAK,QAAS,OAAQ,IAAK;AAG/B,2BAAa,KAAK,MAAO;AACzB,qBAAO,WAAW;AAClB,yBAAW;AAAA;AAEZ,qBAAS,KAAK,QAAS,OAAQ,KAAK,OAAO;AAG3C,qBAAQ,OAAO,OAAO,WACrB,SACA,IAAI,OAAO,MAAO,MAAM,OAAO,WAAU,YAAY;AAGtD,mBAAM,YAAY,eAAe,IAAI;AACrC,mBAAM,YAAY,WAAW,KAAM;AACnC,mBAAM,aAAa,OAAM,YACxB,IAAI,OAAQ,YAAY,WAAW,KAAM,mBAAoB,aAC7D;AAGD,mBAAM,SAAS;AACf,gBAAK,CAAC,OAAM,QAAS;AACpB,qBAAM,SAAS;AAAA;AAIhB,mBAAO,QAAQ,OACd,CAAE,UACF,OAAO,UAAW,MAAM,CAAE;AAG3B,sBAAU,OAAO,MAAM,QAAS,SAAU;AAC1C,gBAAK,CAAC,gBAAgB,QAAQ,WAAW,QAAQ,QAAQ,MAAO,MAAM,UAAW,OAAQ;AACxF;AAAA;AAKD,gBAAK,CAAC,gBAAgB,CAAC,QAAQ,YAAY,CAAC,SAAU,OAAS;AAE9D,2BAAa,QAAQ,gBAAgB;AACrC,kBAAK,CAAC,YAAY,KAAM,aAAa,OAAS;AAC7C,sBAAM,IAAI;AAAA;AAEX,qBAAQ,KAAK,MAAM,IAAI,YAAa;AACnC,0BAAU,KAAM;AAChB,sBAAM;AAAA;AAIP,kBAAK,QAAU,MAAK,iBAAiB,YAAa;AACjD,0BAAU,KAAM,IAAI,eAAe,IAAI,gBAAgB;AAAA;AAAA;AAKzD,gBAAI;AACJ,mBAAU,OAAM,UAAW,SAAW,CAAC,OAAM,wBAAyB;AACrE,4BAAc;AACd,qBAAM,OAAO,IAAI,IAChB,aACA,QAAQ,YAAY;AAGrB,uBAAW,UAAS,IAAK,KAAK,aAAc,uBAAO,OAAQ,OAAU,OAAM,SAC1E,SAAS,IAAK,KAAK;AACpB,kBAAK,QAAS;AACb,uBAAO,MAAO,KAAK;AAAA;AAIpB,uBAAS,UAAU,IAAK;AACxB,kBAAK,UAAU,OAAO,SAAS,WAAY,MAAQ;AAClD,uBAAM,SAAS,OAAO,MAAO,KAAK;AAClC,oBAAK,OAAM,WAAW,OAAQ;AAC7B,yBAAM;AAAA;AAAA;AAAA;AAIT,mBAAM,OAAO;AAGb,gBAAK,CAAC,gBAAgB,CAAC,OAAM,sBAAuB;AAEnD,kBAAO,EAAC,QAAQ,YACf,QAAQ,SAAS,MAAO,UAAU,OAAO,UAAW,UACpD,WAAY,OAAS;AAIrB,oBAAK,UAAU,YAAY,KAAM,UAAY,CAAC,SAAU,OAAS;AAGhE,wBAAM,KAAM;AAEZ,sBAAK,KAAM;AACV,yBAAM,UAAW;AAAA;AAIlB,yBAAO,MAAM,YAAY;AAEzB,sBAAK,OAAM,wBAAyB;AACnC,gCAAY,iBAAkB,MAAM;AAAA;AAGrC,uBAAM;AAEN,sBAAK,OAAM,wBAAyB;AACnC,gCAAY,oBAAqB,MAAM;AAAA;AAGxC,yBAAO,MAAM,YAAY;AAEzB,sBAAK,KAAM;AACV,yBAAM,UAAW;AAAA;AAAA;AAAA;AAAA;AAMrB,mBAAO,OAAM;AAAA;AAAA,UAKd,UAAU,SAAU,MAAM,MAAM,QAAQ;AACvC,gBAAI,IAAI,OAAO,OACd,IAAI,OAAO,SACX,QACA;AAAA,cACC;AAAA,cACA,aAAa;AAAA;AAIf,mBAAO,MAAM,QAAS,GAAG,MAAM;AAAA;AAAA;AAKjC,eAAO,GAAG,OAAQ;AAAA,UAEjB,SAAS,SAAU,MAAM,MAAO;AAC/B,mBAAO,KAAK,KAAM,WAAW;AAC5B,qBAAO,MAAM,QAAS,MAAM,MAAM;AAAA;AAAA;AAAA,UAGpC,gBAAgB,SAAU,MAAM,MAAO;AACtC,gBAAI,OAAO,KAAM;AACjB,gBAAK,MAAO;AACX,qBAAO,OAAO,MAAM,QAAS,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAclD,YAAK,CAAC,QAAQ,SAAU;AACvB,iBAAO,KAAM,EAAE,OAAO,WAAW,MAAM,cAAc,SAAU,MAAM,KAAM;AAG1E,gBAAI,UAAU,SAAU,QAAQ;AAC/B,qBAAO,MAAM,SAAU,KAAK,OAAM,QAAQ,OAAO,MAAM,IAAK;AAAA;AAG7D,mBAAO,MAAM,QAAS,OAAQ;AAAA,cAC7B,OAAO,WAAW;AAIjB,oBAAI,MAAM,KAAK,iBAAiB,KAAK,YAAY,MAChD,WAAW,SAAS,OAAQ,KAAK;AAElC,oBAAK,CAAC,UAAW;AAChB,sBAAI,iBAAkB,MAAM,SAAS;AAAA;AAEtC,yBAAS,OAAQ,KAAK,KAAO,aAAY,KAAM;AAAA;AAAA,cAEhD,UAAU,WAAW;AACpB,oBAAI,MAAM,KAAK,iBAAiB,KAAK,YAAY,MAChD,WAAW,SAAS,OAAQ,KAAK,OAAQ;AAE1C,oBAAK,CAAC,UAAW;AAChB,sBAAI,oBAAqB,MAAM,SAAS;AACxC,2BAAS,OAAQ,KAAK;AAAA,uBAEhB;AACN,2BAAS,OAAQ,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAMhC,YAAI,YAAW,QAAO;AAEtB,YAAI,QAAQ,EAAE,MAAM,KAAK;AAEzB,YAAI,SAAW;AAKf,eAAO,WAAW,SAAU,MAAO;AAClC,cAAI,KAAK;AACT,cAAK,CAAC,QAAQ,OAAO,SAAS,UAAW;AACxC,mBAAO;AAAA;AAKR,cAAI;AACH,kBAAQ,IAAI,QAAO,YAAc,gBAAiB,MAAM;AAAA,mBAC/C,GAAR;AAAA;AAEF,4BAAkB,OAAO,IAAI,qBAAsB,eAAiB;AACpE,cAAK,CAAC,OAAO,iBAAkB;AAC9B,mBAAO,MAAO,kBACb,mBACC,OAAO,IAAK,gBAAgB,YAAY,SAAU,IAAK;AACtD,qBAAO,GAAG;AAAA,eACP,KAAM,QACV;AAAA;AAGH,iBAAO;AAAA;AAIR,YACC,WAAW,SACX,QAAQ,UACR,kBAAkB,yCAClB,eAAe;AAEhB,6BAAsB,QAAQ,KAAK,aAAa,MAAM;AACrD,cAAI;AAEJ,cAAK,MAAM,QAAS,MAAQ;AAG3B,mBAAO,KAAM,KAAK,SAAU,GAAG,GAAI;AAClC,kBAAK,eAAe,SAAS,KAAM,SAAW;AAG7C,qBAAK,QAAQ;AAAA,qBAEP;AAGN,4BACC,SAAS,MAAQ,QAAO,MAAM,YAAY,KAAK,OAAO,IAAI,MAAO,KACjE,GACA,aACA;AAAA;AAAA;AAAA,qBAKQ,CAAC,eAAe,QAAQ,SAAU,UAAW;AAGxD,iBAAM,QAAQ,KAAM;AACnB,0BAAa,SAAS,MAAM,OAAO,KAAK,IAAK,OAAQ,aAAa;AAAA;AAAA,iBAG7D;AAGN,iBAAK,QAAQ;AAAA;AAAA;AAMf,eAAO,QAAQ,SAAU,GAAG,aAAc;AACzC,cAAI,QACH,IAAI,IACJ,OAAM,SAAU,KAAK,iBAAkB;AAGtC,gBAAI,QAAQ,YAAY,mBACvB,oBACA;AAED,cAAG,EAAE,UAAW,mBAAoB,OAAQ,MAC3C,mBAAoB,SAAS,OAAO,KAAK;AAAA;AAG5C,cAAK,KAAK,MAAO;AAChB,mBAAO;AAAA;AAIR,cAAK,MAAM,QAAS,MAAS,EAAE,UAAU,CAAC,OAAO,cAAe,IAAQ;AAGvE,mBAAO,KAAM,GAAG,WAAW;AAC1B,mBAAK,KAAK,MAAM,KAAK;AAAA;AAAA,iBAGhB;AAIN,iBAAM,UAAU,GAAI;AACnB,0BAAa,QAAQ,EAAG,SAAU,aAAa;AAAA;AAAA;AAKjD,iBAAO,EAAE,KAAM;AAAA;AAGhB,eAAO,GAAG,OAAQ;AAAA,UACjB,WAAW,WAAW;AACrB,mBAAO,OAAO,MAAO,KAAK;AAAA;AAAA,UAE3B,gBAAgB,WAAW;AAC1B,mBAAO,KAAK,IAAK,WAAW;AAG3B,kBAAI,WAAW,OAAO,KAAM,MAAM;AAClC,qBAAO,WAAW,OAAO,UAAW,YAAa;AAAA,eAC9C,OAAQ,WAAW;AACtB,kBAAI,OAAO,KAAK;AAGhB,qBAAO,KAAK,QAAQ,CAAC,OAAQ,MAAO,GAAI,gBACvC,aAAa,KAAM,KAAK,aAAc,CAAC,gBAAgB,KAAM,SAC3D,MAAK,WAAW,CAAC,eAAe,KAAM;AAAA,eACtC,IAAK,SAAU,IAAI,MAAO;AAC7B,kBAAI,MAAM,OAAQ,MAAO;AAEzB,kBAAK,OAAO,MAAO;AAClB,uBAAO;AAAA;AAGR,kBAAK,MAAM,QAAS,MAAQ;AAC3B,uBAAO,OAAO,IAAK,KAAK,SAAU,MAAM;AACvC,yBAAO,EAAE,MAAM,KAAK,MAAM,OAAO,KAAI,QAAS,OAAO;AAAA;AAAA;AAIvD,qBAAO,EAAE,MAAM,KAAK,MAAM,OAAO,IAAI,QAAS,OAAO;AAAA,eAClD;AAAA;AAAA;AAKN,YACC,MAAM,QACN,QAAQ,QACR,aAAa,iBACb,WAAW,8BAGX,iBAAiB,6DACjB,aAAa,kBACb,YAAY,SAWZ,aAAa,IAOb,aAAa,IAGb,WAAW,KAAK,OAAQ,MAGxB,eAAe,UAAS,cAAe;AAExC,qBAAa,OAAO,UAAS;AAG7B,6CAAsC,WAAY;AAGjD,iBAAO,SAAU,oBAAoB,MAAO;AAE3C,gBAAK,OAAO,uBAAuB,UAAW;AAC7C,qBAAO;AACP,mCAAqB;AAAA;AAGtB,gBAAI,UACH,IAAI,GACJ,YAAY,mBAAmB,cAAc,MAAO,kBAAmB;AAExE,gBAAK,YAAY,OAAS;AAGzB,qBAAU,WAAW,UAAW,MAAU;AAGzC,oBAAK,SAAU,OAAQ,KAAM;AAC5B,6BAAW,SAAS,MAAO,MAAO;AAClC,kBAAE,WAAW,YAAa,UAAW,aAAc,IAAK,QAAS;AAAA,uBAG3D;AACN,kBAAE,WAAW,YAAa,UAAW,aAAc,IAAK,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAQnE,+CAAwC,WAAW,SAAS,iBAAiB,OAAQ;AAEpF,cAAI,YAAY,IACf,mBAAqB,cAAc;AAEpC,2BAAkB,UAAW;AAC5B,gBAAI;AACJ,sBAAW,YAAa;AACxB,mBAAO,KAAM,UAAW,aAAc,IAAI,SAAU,GAAG,oBAAqB;AAC3E,kBAAI,sBAAsB,mBAAoB,SAAS,iBAAiB;AACxE,kBAAK,OAAO,wBAAwB,YACnC,CAAC,oBAAoB,CAAC,UAAW,sBAAwB;AAEzD,wBAAQ,UAAU,QAAS;AAC3B,wBAAS;AACT,uBAAO;AAAA,yBACI,kBAAmB;AAC9B,uBAAO,CAAG,YAAW;AAAA;AAAA;AAGvB,mBAAO;AAAA;AAGR,iBAAO,QAAS,QAAQ,UAAW,OAAS,CAAC,UAAW,QAAS,QAAS;AAAA;AAM3E,4BAAqB,QAAQ,KAAM;AAClC,cAAI,KAAK,MACR,cAAc,OAAO,aAAa,eAAe;AAElD,eAAM,OAAO,KAAM;AAClB,gBAAK,IAAK,SAAU,QAAY;AAC/B,cAAE,aAAa,OAAQ,SAAW,QAAU,QAAO,KAAU,OAAQ,IAAK;AAAA;AAAA;AAG5E,cAAK,MAAO;AACX,mBAAO,OAAQ,MAAM,QAAQ;AAAA;AAG9B,iBAAO;AAAA;AAOR,qCAA8B,GAAG,OAAO,WAAY;AAEnD,cAAI,IAAI,MAAM,eAAe,eAC5B,WAAW,EAAE,UACb,YAAY,EAAE;AAGf,iBAAQ,UAAW,OAAQ,KAAM;AAChC,sBAAU;AACV,gBAAK,OAAO,QAAY;AACvB,mBAAK,EAAE,YAAY,MAAM,kBAAmB;AAAA;AAAA;AAK9C,cAAK,IAAK;AACT,iBAAM,QAAQ,UAAW;AACxB,kBAAK,SAAU,SAAU,SAAU,MAAO,KAAM,KAAO;AACtD,0BAAU,QAAS;AACnB;AAAA;AAAA;AAAA;AAMH,cAAK,UAAW,MAAO,WAAY;AAClC,4BAAgB,UAAW;AAAA,iBACrB;AAGN,iBAAM,QAAQ,WAAY;AACzB,kBAAK,CAAC,UAAW,MAAO,EAAE,WAAY,OAAO,MAAM,UAAW,KAAQ;AACrE,gCAAgB;AAChB;AAAA;AAED,kBAAK,CAAC,eAAgB;AACrB,gCAAgB;AAAA;AAAA;AAKlB,4BAAgB,iBAAiB;AAAA;AAMlC,cAAK,eAAgB;AACpB,gBAAK,kBAAkB,UAAW,IAAM;AACvC,wBAAU,QAAS;AAAA;AAEpB,mBAAO,UAAW;AAAA;AAAA;AAOpB,6BAAsB,GAAG,UAAU,OAAO,WAAY;AACrD,cAAI,OAAO,SAAS,MAAM,KAAK,MAC9B,aAAa,IAGb,YAAY,EAAE,UAAU;AAGzB,cAAK,UAAW,IAAM;AACrB,iBAAM,QAAQ,EAAE,YAAa;AAC5B,yBAAY,KAAK,iBAAkB,EAAE,WAAY;AAAA;AAAA;AAInD,oBAAU,UAAU;AAGpB,iBAAQ,SAAU;AAEjB,gBAAK,EAAE,eAAgB,UAAY;AAClC,oBAAO,EAAE,eAAgB,YAAc;AAAA;AAIxC,gBAAK,CAAC,QAAQ,aAAa,EAAE,YAAa;AACzC,yBAAW,EAAE,WAAY,UAAU,EAAE;AAAA;AAGtC,mBAAO;AACP,sBAAU,UAAU;AAEpB,gBAAK,SAAU;AAGd,kBAAK,YAAY,KAAM;AAEtB,0BAAU;AAAA,yBAGC,SAAS,OAAO,SAAS,SAAU;AAG9C,uBAAO,WAAY,OAAO,MAAM,YAAa,WAAY,OAAO;AAGhE,oBAAK,CAAC,MAAO;AACZ,uBAAM,SAAS,YAAa;AAG3B,0BAAM,MAAM,MAAO;AACnB,wBAAK,IAAK,OAAQ,SAAU;AAG3B,6BAAO,WAAY,OAAO,MAAM,IAAK,OACpC,WAAY,OAAO,IAAK;AACzB,0BAAK,MAAO;AAGX,4BAAK,SAAS,MAAO;AACpB,iCAAO,WAAY;AAAA,mCAGR,WAAY,WAAY,MAAO;AAC1C,oCAAU,IAAK;AACf,oCAAU,QAAS,IAAK;AAAA;AAEzB;AAAA;AAAA;AAAA;AAAA;AAOJ,oBAAK,SAAS,MAAO;AAGpB,sBAAK,QAAQ,EAAE,QAAS;AACvB,+BAAW,KAAM;AAAA,yBACX;AACN,wBAAI;AACH,iCAAW,KAAM;AAAA,6BACR,GAAR;AACD,6BAAO;AAAA,wBACN,OAAO;AAAA,wBACP,OAAO,OAAO,IAAI,wBAAwB,OAAO,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASjE,iBAAO,EAAE,OAAO,WAAW,MAAM;AAAA;AAGlC,eAAO,OAAQ;AAAA,UAGd,QAAQ;AAAA,UAGR,cAAc;AAAA,UACd,MAAM;AAAA,UAEN,cAAc;AAAA,YACb,KAAK,UAAS;AAAA,YACd,MAAM;AAAA,YACN,SAAS,eAAe,KAAM,UAAS;AAAA,YACvC,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,OAAO;AAAA,YACP,aAAa;AAAA,YAcb,SAAS;AAAA,cACR,KAAK;AAAA,cACL,MAAM;AAAA,cACN,MAAM;AAAA,cACN,KAAK;AAAA,cACL,MAAM;AAAA;AAAA,YAGP,UAAU;AAAA,cACT,KAAK;AAAA,cACL,MAAM;AAAA,cACN,MAAM;AAAA;AAAA,YAGP,gBAAgB;AAAA,cACf,KAAK;AAAA,cACL,MAAM;AAAA,cACN,MAAM;AAAA;AAAA,YAKP,YAAY;AAAA,cAGX,UAAU;AAAA,cAGV,aAAa;AAAA,cAGb,aAAa,KAAK;AAAA,cAGlB,YAAY,OAAO;AAAA;AAAA,YAOpB,aAAa;AAAA,cACZ,KAAK;AAAA,cACL,SAAS;AAAA;AAAA;AAAA,UAOX,WAAW,SAAU,QAAQ,UAAW;AACvC,mBAAO,WAGN,WAAY,WAAY,QAAQ,OAAO,eAAgB,YAGvD,WAAY,OAAO,cAAc;AAAA;AAAA,UAGnC,eAAe,4BAA6B;AAAA,UAC5C,eAAe,4BAA6B;AAAA,UAG5C,MAAM,SAAU,KAAK,SAAU;AAG9B,gBAAK,OAAO,QAAQ,UAAW;AAC9B,wBAAU;AACV,oBAAM;AAAA;AAIP,sBAAU,WAAW;AAErB,gBAAI,WAGH,UAGA,uBACA,iBAGA,cAGA,WAGA,YAGA,aAGA,GAGA,UAGA,IAAI,OAAO,UAAW,IAAI,UAG1B,kBAAkB,EAAE,WAAW,GAG/B,qBAAqB,EAAE,WACpB,iBAAgB,YAAY,gBAAgB,UAC9C,OAAQ,mBACR,OAAO,OAGR,WAAW,OAAO,YAClB,mBAAmB,OAAO,UAAW,gBAGrC,aAAa,EAAE,cAAc,IAG7B,iBAAiB,IACjB,sBAAsB,IAGtB,WAAW,YAGX,QAAQ;AAAA,cACP,YAAY;AAAA,cAGZ,mBAAmB,SAAU,KAAM;AAClC,oBAAI;AACJ,oBAAK,YAAY;AAChB,sBAAK,CAAC,iBAAkB;AACvB,sCAAkB;AAClB,2BAAU,QAAQ,SAAS,KAAM,wBAA4B;AAC5D,sCAAiB,MAAO,GAAI,gBAAgB,OACzC,iBAAiB,MAAO,GAAI,gBAAgB,QAAS,IACrD,OAAQ,MAAO;AAAA;AAAA;AAGpB,0BAAQ,gBAAiB,IAAI,gBAAgB;AAAA;AAE9C,uBAAO,SAAS,OAAO,OAAO,MAAM,KAAM;AAAA;AAAA,cAI3C,uBAAuB,WAAW;AACjC,uBAAO,aAAY,wBAAwB;AAAA;AAAA,cAI5C,kBAAkB,SAAU,MAAM,OAAQ;AACzC,oBAAK,cAAa,MAAO;AACxB,yBAAO,oBAAqB,KAAK,iBAChC,oBAAqB,KAAK,kBAAmB;AAC9C,iCAAgB,QAAS;AAAA;AAE1B,uBAAO;AAAA;AAAA,cAIR,kBAAkB,SAAU,MAAO;AAClC,oBAAK,cAAa,MAAO;AACxB,oBAAE,WAAW;AAAA;AAEd,uBAAO;AAAA;AAAA,cAIR,YAAY,SAAU,MAAM;AAC3B,oBAAI;AACJ,oBAAK,MAAM;AACV,sBAAK,YAAY;AAGhB,0BAAM,OAAQ,KAAK,MAAM;AAAA,yBACnB;AAGN,yBAAM,QAAQ,MAAM;AACnB,iCAAY,QAAS,CAAE,WAAY,OAAQ,KAAK;AAAA;AAAA;AAAA;AAInD,uBAAO;AAAA;AAAA,cAIR,OAAO,SAAU,YAAa;AAC7B,oBAAI,YAAY,cAAc;AAC9B,oBAAK,WAAY;AAChB,4BAAU,MAAO;AAAA;AAElB,qBAAM,GAAG;AACT,uBAAO;AAAA;AAAA;AAKV,qBAAS,QAAS;AAKlB,cAAE,MAAU,SAAO,EAAE,OAAO,UAAS,QAAS,IAC5C,QAAS,WAAW,UAAS,WAAW;AAG1C,cAAE,OAAO,QAAQ,UAAU,QAAQ,QAAQ,EAAE,UAAU,EAAE;AAGzD,cAAE,YAAc,GAAE,YAAY,KAAM,cAAc,MAAO,kBAAmB,CAAE;AAG9E,gBAAK,EAAE,eAAe,MAAO;AAC5B,0BAAY,UAAS,cAAe;AAKpC,kBAAI;AACH,0BAAU,OAAO,EAAE;AAInB,0BAAU,OAAO,UAAU;AAC3B,kBAAE,cAAc,aAAa,WAAW,OAAO,aAAa,SAC3D,UAAU,WAAW,OAAO,UAAU;AAAA,uBAC9B,GAAR;AAID,kBAAE,cAAc;AAAA;AAAA;AAKlB,gBAAK,EAAE,QAAQ,EAAE,eAAe,OAAO,EAAE,SAAS,UAAW;AAC5D,gBAAE,OAAO,OAAO,MAAO,EAAE,MAAM,EAAE;AAAA;AAIlC,0CAA+B,YAAY,GAAG,SAAS;AAGvD,gBAAK,YAAY;AAChB,qBAAO;AAAA;AAKR,0BAAc,OAAO,SAAS,EAAE;AAGhC,gBAAK,eAAe,OAAO,aAAa,GAAI;AAC3C,qBAAO,MAAM,QAAS;AAAA;AAIvB,cAAE,OAAO,EAAE,KAAK;AAGhB,cAAE,aAAa,CAAC,WAAW,KAAM,EAAE;AAKnC,uBAAW,EAAE,IAAI,QAAS,OAAO;AAGjC,gBAAK,CAAC,EAAE,YAAa;AAGpB,yBAAW,EAAE,IAAI,MAAO,SAAS;AAGjC,kBAAK,EAAE,QAAU,GAAE,eAAe,OAAO,EAAE,SAAS,WAAa;AAChE,4BAAc,QAAO,KAAM,YAAa,MAAM,OAAQ,EAAE;AAGxD,uBAAO,EAAE;AAAA;AAIV,kBAAK,EAAE,UAAU,OAAQ;AACxB,2BAAW,SAAS,QAAS,YAAY;AACzC,2BAAa,QAAO,KAAM,YAAa,MAAM,OAAQ,OAAS,MAAM,SACnE;AAAA;AAIF,gBAAE,MAAM,WAAW;AAAA,uBAGR,EAAE,QAAQ,EAAE,eACrB,GAAE,eAAe,IAAK,QAAS,yCAA0C,GAAI;AAC/E,gBAAE,OAAO,EAAE,KAAK,QAAS,KAAK;AAAA;AAI/B,gBAAK,EAAE,YAAa;AACnB,kBAAK,OAAO,aAAc,WAAa;AACtC,sBAAM,iBAAkB,qBAAqB,OAAO,aAAc;AAAA;AAEnE,kBAAK,OAAO,KAAM,WAAa;AAC9B,sBAAM,iBAAkB,iBAAiB,OAAO,KAAM;AAAA;AAAA;AAKxD,gBAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,SAAS,QAAQ,aAAc;AAC/E,oBAAM,iBAAkB,gBAAgB,EAAE;AAAA;AAI3C,kBAAM,iBACL,UACA,EAAE,UAAW,MAAO,EAAE,QAAS,EAAE,UAAW,MAC3C,EAAE,QAAS,EAAE,UAAW,MACrB,GAAE,UAAW,OAAQ,MAAM,OAAO,WAAW,aAAa,MAC7D,EAAE,QAAS;AAIb,iBAAM,KAAK,EAAE,SAAU;AACtB,oBAAM,iBAAkB,GAAG,EAAE,QAAS;AAAA;AAIvC,gBAAK,EAAE,cACJ,GAAE,WAAW,KAAM,iBAAiB,OAAO,OAAQ,SAAS,aAAc;AAG5E,qBAAO,MAAM;AAAA;AAId,uBAAW;AAGX,6BAAiB,IAAK,EAAE;AACxB,kBAAM,KAAM,EAAE;AACd,kBAAM,KAAM,EAAE;AAGd,wBAAY,8BAA+B,YAAY,GAAG,SAAS;AAGnE,gBAAK,CAAC,WAAY;AACjB,mBAAM,IAAI;AAAA,mBACJ;AACN,oBAAM,aAAa;AAGnB,kBAAK,aAAc;AAClB,mCAAmB,QAAS,YAAY,CAAE,OAAO;AAAA;AAIlD,kBAAK,YAAY;AAChB,uBAAO;AAAA;AAIR,kBAAK,EAAE,SAAS,EAAE,UAAU,GAAI;AAC/B,+BAAe,QAAO,WAAY,WAAW;AAC5C,wBAAM,MAAO;AAAA,mBACX,EAAE;AAAA;AAGN,kBAAI;AACH,6BAAY;AACZ,0BAAU,KAAM,gBAAgB;AAAA,uBACvB,GAAR;AAGD,oBAAK,YAAY;AAChB,wBAAM;AAAA;AAIP,qBAAM,IAAI;AAAA;AAAA;AAKZ,0BAAe,QAAQ,kBAAkB,WAAW,SAAU;AAC7D,kBAAI,WAAW,SAAS,QAAO,UAAU,UACxC,aAAa;AAGd,kBAAK,YAAY;AAChB;AAAA;AAGD,2BAAY;AAGZ,kBAAK,cAAe;AACnB,wBAAO,aAAc;AAAA;AAKtB,0BAAY;AAGZ,sCAAwB,WAAW;AAGnC,oBAAM,aAAa,SAAS,IAAI,IAAI;AAGpC,0BAAY,UAAU,OAAO,SAAS,OAAO,WAAW;AAGxD,kBAAK,WAAY;AAChB,2BAAW,oBAAqB,GAAG,OAAO;AAAA;AAI3C,kBAAK,CAAC,aACL,OAAO,QAAS,UAAU,EAAE,aAAc,MAC1C,OAAO,QAAS,QAAQ,EAAE,aAAc,GAAI;AAC5C,kBAAE,WAAY,iBAAkB,WAAW;AAAA;AAAA;AAI5C,yBAAW,YAAa,GAAG,UAAU,OAAO;AAG5C,kBAAK,WAAY;AAGhB,oBAAK,EAAE,YAAa;AACnB,6BAAW,MAAM,kBAAmB;AACpC,sBAAK,UAAW;AACf,2BAAO,aAAc,YAAa;AAAA;AAEnC,6BAAW,MAAM,kBAAmB;AACpC,sBAAK,UAAW;AACf,2BAAO,KAAM,YAAa;AAAA;AAAA;AAK5B,oBAAK,WAAW,OAAO,EAAE,SAAS,QAAS;AAC1C,+BAAa;AAAA,2BAGF,WAAW,KAAM;AAC5B,+BAAa;AAAA,uBAGP;AACN,+BAAa,SAAS;AACtB,4BAAU,SAAS;AACnB,2BAAQ,SAAS;AACjB,8BAAY,CAAC;AAAA;AAAA,qBAER;AAGN,yBAAQ;AACR,oBAAK,UAAU,CAAC,YAAa;AAC5B,+BAAa;AACb,sBAAK,SAAS,GAAI;AACjB,6BAAS;AAAA;AAAA;AAAA;AAMZ,oBAAM,SAAS;AACf,oBAAM,aAAe,qBAAoB,cAAe;AAGxD,kBAAK,WAAY;AAChB,yBAAS,YAAa,iBAAiB,CAAE,SAAS,YAAY;AAAA,qBACxD;AACN,yBAAS,WAAY,iBAAiB,CAAE,OAAO,YAAY;AAAA;AAI5D,oBAAM,WAAY;AAClB,2BAAa;AAEb,kBAAK,aAAc;AAClB,mCAAmB,QAAS,YAAY,gBAAgB,aACvD,CAAE,OAAO,GAAG,YAAY,UAAU;AAAA;AAIpC,+BAAiB,SAAU,iBAAiB,CAAE,OAAO;AAErD,kBAAK,aAAc;AAClB,mCAAmB,QAAS,gBAAgB,CAAE,OAAO;AAGrD,oBAAK,CAAG,EAAE,OAAO,QAAW;AAC3B,yBAAO,MAAM,QAAS;AAAA;AAAA;AAAA;AAKzB,mBAAO;AAAA;AAAA,UAGR,SAAS,SAAU,KAAK,MAAM,UAAW;AACxC,mBAAO,OAAO,IAAK,KAAK,MAAM,UAAU;AAAA;AAAA,UAGzC,WAAW,SAAU,KAAK,UAAW;AACpC,mBAAO,OAAO,IAAK,KAAK,QAAW,UAAU;AAAA;AAAA;AAI/C,eAAO,KAAM,CAAE,OAAO,SAAU,SAAU,IAAI,QAAS;AACtD,iBAAQ,UAAW,SAAU,KAAK,MAAM,UAAU,MAAO;AAGxD,gBAAK,YAAY,OAAS;AACzB,qBAAO,QAAQ;AACf,yBAAW;AACX,qBAAO;AAAA;AAIR,mBAAO,OAAO,KAAM,OAAO,OAAQ;AAAA,cAClC;AAAA,cACA,MAAM;AAAA,cACN,UAAU;AAAA,cACV;AAAA,cACA,SAAS;AAAA,eACP,OAAO,cAAe,QAAS;AAAA;AAAA;AAIpC,eAAO,cAAe,SAAU,GAAI;AACnC,cAAI;AACJ,eAAM,KAAK,EAAE,SAAU;AACtB,gBAAK,EAAE,kBAAkB,gBAAiB;AACzC,gBAAE,cAAc,EAAE,QAAS,MAAO;AAAA;AAAA;AAAA;AAMrC,eAAO,WAAW,SAAU,KAAK,SAAS,KAAM;AAC/C,iBAAO,OAAO,KAAM;AAAA,YACnB;AAAA,YAGA,MAAM;AAAA,YACN,UAAU;AAAA,YACV,OAAO;AAAA,YACP,OAAO;AAAA,YACP,QAAQ;AAAA,YAKR,YAAY;AAAA,cACX,eAAe,WAAW;AAAA;AAAA;AAAA,YAE3B,YAAY,SAAU,UAAW;AAChC,qBAAO,WAAY,UAAU,SAAS;AAAA;AAAA;AAAA;AAMzC,eAAO,GAAG,OAAQ;AAAA,UACjB,SAAS,SAAU,MAAO;AACzB,gBAAI;AAEJ,gBAAK,KAAM,IAAM;AAChB,kBAAK,YAAY,OAAS;AACzB,uBAAO,KAAK,KAAM,KAAM;AAAA;AAIzB,sBAAO,OAAQ,MAAM,KAAM,GAAI,eAAgB,GAAI,GAAI,MAAO;AAE9D,kBAAK,KAAM,GAAI,YAAa;AAC3B,sBAAK,aAAc,KAAM;AAAA;AAG1B,oBAAK,IAAK,WAAW;AACpB,oBAAI,OAAO;AAEX,uBAAQ,KAAK,mBAAoB;AAChC,yBAAO,KAAK;AAAA;AAGb,uBAAO;AAAA,iBACJ,OAAQ;AAAA;AAGb,mBAAO;AAAA;AAAA,UAGR,WAAW,SAAU,MAAO;AAC3B,gBAAK,YAAY,OAAS;AACzB,qBAAO,KAAK,KAAM,SAAU,GAAI;AAC/B,uBAAQ,MAAO,UAAW,KAAK,KAAM,MAAM;AAAA;AAAA;AAI7C,mBAAO,KAAK,KAAM,WAAW;AAC5B,kBAAI,QAAO,OAAQ,OAClB,WAAW,MAAK;AAEjB,kBAAK,SAAS,QAAS;AACtB,yBAAS,QAAS;AAAA,qBAEZ;AACN,sBAAK,OAAQ;AAAA;AAAA;AAAA;AAAA,UAKhB,MAAM,SAAU,MAAO;AACtB,gBAAI,iBAAiB,YAAY;AAEjC,mBAAO,KAAK,KAAM,SAAU,GAAI;AAC/B,qBAAQ,MAAO,QAAS,iBAAiB,KAAK,KAAM,MAAM,KAAM;AAAA;AAAA;AAAA,UAIlE,QAAQ,SAAU,UAAW;AAC5B,iBAAK,OAAQ,UAAW,IAAK,QAAS,KAAM,WAAW;AACtD,qBAAQ,MAAO,YAAa,KAAK;AAAA;AAElC,mBAAO;AAAA;AAAA;AAKT,eAAO,KAAK,QAAQ,SAAS,SAAU,MAAO;AAC7C,iBAAO,CAAC,OAAO,KAAK,QAAQ,QAAS;AAAA;AAEtC,eAAO,KAAK,QAAQ,UAAU,SAAU,MAAO;AAC9C,iBAAO,CAAC,CAAG,MAAK,eAAe,KAAK,gBAAgB,KAAK,iBAAiB;AAAA;AAM3E,eAAO,aAAa,MAAM,WAAW;AACpC,cAAI;AACH,mBAAO,IAAI,QAAO;AAAA,mBACT,GAAR;AAAA;AAAA;AAGH,YAAI,mBAAmB;AAAA,UAGrB,GAAG;AAAA,UAIH,MAAM;AAAA,WAEP,eAAe,OAAO,aAAa;AAEpC,gBAAQ,OAAO,CAAC,CAAC,gBAAkB,qBAAqB;AACxD,gBAAQ,OAAO,eAAe,CAAC,CAAC;AAEhC,eAAO,cAAe,SAAU,SAAU;AACzC,cAAI,UAAU;AAGd,cAAK,QAAQ,QAAQ,gBAAgB,CAAC,QAAQ,aAAc;AAC3D,mBAAO;AAAA,cACN,MAAM,SAAU,SAAS,UAAW;AACnC,oBAAI,GACH,MAAM,QAAQ;AAEf,oBAAI,KACH,QAAQ,MACR,QAAQ,KACR,QAAQ,OACR,QAAQ,UACR,QAAQ;AAIT,oBAAK,QAAQ,WAAY;AACxB,uBAAM,KAAK,QAAQ,WAAY;AAC9B,wBAAK,KAAM,QAAQ,UAAW;AAAA;AAAA;AAKhC,oBAAK,QAAQ,YAAY,IAAI,kBAAmB;AAC/C,sBAAI,iBAAkB,QAAQ;AAAA;AAQ/B,oBAAK,CAAC,QAAQ,eAAe,CAAC,QAAS,qBAAuB;AAC7D,0BAAS,sBAAuB;AAAA;AAIjC,qBAAM,KAAK,SAAU;AACpB,sBAAI,iBAAkB,GAAG,QAAS;AAAA;AAInC,2BAAW,SAAU,MAAO;AAC3B,yBAAO,WAAW;AACjB,wBAAK,UAAW;AACf,iCAAW,gBAAgB,IAAI,SAC9B,IAAI,UAAU,IAAI,UAAU,IAAI,YAC/B,IAAI,qBAAqB;AAE3B,0BAAK,SAAS,SAAU;AACvB,4BAAI;AAAA,iCACO,SAAS,SAAU;AAK9B,4BAAK,OAAO,IAAI,WAAW,UAAW;AACrC,mCAAU,GAAG;AAAA,+BACP;AACN,mCAGC,IAAI,QACJ,IAAI;AAAA;AAAA,6BAGA;AACN,iCACC,iBAAkB,IAAI,WAAY,IAAI,QACtC,IAAI,YAKF,KAAI,gBAAgB,YAAa,UACnC,OAAO,IAAI,iBAAiB,WAC3B,EAAE,QAAQ,IAAI,aACd,EAAE,MAAM,IAAI,gBACb,IAAI;AAAA;AAAA;AAAA;AAAA;AAQT,oBAAI,SAAS;AACb,gCAAgB,IAAI,UAAU,IAAI,YAAY,SAAU;AAKxD,oBAAK,IAAI,YAAY,QAAY;AAChC,sBAAI,UAAU;AAAA,uBACR;AACN,sBAAI,qBAAqB,WAAW;AAGnC,wBAAK,IAAI,eAAe,GAAI;AAM3B,8BAAO,WAAY,WAAW;AAC7B,4BAAK,UAAW;AACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAQL,2BAAW,SAAU;AAErB,oBAAI;AAGH,sBAAI,KAAM,QAAQ,cAAc,QAAQ,QAAQ;AAAA,yBACvC,GAAR;AAGD,sBAAK,UAAW;AACf,0BAAM;AAAA;AAAA;AAAA;AAAA,cAKT,OAAO,WAAW;AACjB,oBAAK,UAAW;AACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAWL,eAAO,cAAe,SAAU,GAAI;AACnC,cAAK,EAAE,aAAc;AACpB,cAAE,SAAS,SAAS;AAAA;AAAA;AAKtB,eAAO,UAAW;AAAA,UACjB,SAAS;AAAA,YACR,QAAQ;AAAA;AAAA,UAGT,UAAU;AAAA,YACT,QAAQ;AAAA;AAAA,UAET,YAAY;AAAA,YACX,eAAe,SAAU,MAAO;AAC/B,qBAAO,WAAY;AACnB,qBAAO;AAAA;AAAA;AAAA;AAMV,eAAO,cAAe,UAAU,SAAU,GAAI;AAC7C,cAAK,EAAE,UAAU,QAAY;AAC5B,cAAE,QAAQ;AAAA;AAEX,cAAK,EAAE,aAAc;AACpB,cAAE,OAAO;AAAA;AAAA;AAKX,eAAO,cAAe,UAAU,SAAU,GAAI;AAG7C,cAAK,EAAE,eAAe,EAAE,aAAc;AACrC,gBAAI,QAAQ;AACZ,mBAAO;AAAA,cACN,MAAM,SAAU,GAAG,UAAW;AAC7B,yBAAS,OAAQ,YACf,KAAM,EAAE,eAAe,IACvB,KAAM,EAAE,SAAS,EAAE,eAAe,KAAK,EAAE,OACzC,GAAI,cAAc,WAAW,SAAU,KAAM;AAC7C,yBAAO;AACP,6BAAW;AACX,sBAAK,KAAM;AACV,6BAAU,IAAI,SAAS,UAAU,MAAM,KAAK,IAAI;AAAA;AAAA;AAKnD,0BAAS,KAAK,YAAa,OAAQ;AAAA;AAAA,cAEpC,OAAO,WAAW;AACjB,oBAAK,UAAW;AACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAUL,YAAI,eAAe,IAClB,SAAS;AAGV,eAAO,UAAW;AAAA,UACjB,OAAO;AAAA,UACP,eAAe,WAAW;AACzB,gBAAI,WAAW,aAAa,SAAW,OAAO,UAAU,MAAQ,MAAM;AACtE,iBAAM,YAAa;AACnB,mBAAO;AAAA;AAAA;AAKT,eAAO,cAAe,cAAc,SAAU,GAAG,kBAAkB,OAAQ;AAE1E,cAAI,cAAc,aAAa,mBAC9B,WAAW,EAAE,UAAU,SAAW,QAAO,KAAM,EAAE,OAChD,QACA,OAAO,EAAE,SAAS,YACf,GAAE,eAAe,IACjB,QAAS,yCAA0C,KACrD,OAAO,KAAM,EAAE,SAAU;AAI5B,cAAK,YAAY,EAAE,UAAW,OAAQ,SAAU;AAG/C,2BAAe,EAAE,gBAAgB,YAAY,EAAE,iBAC9C,EAAE,kBACF,EAAE;AAGH,gBAAK,UAAW;AACf,gBAAG,YAAa,EAAG,UAAW,QAAS,QAAQ,OAAO;AAAA,uBAC3C,EAAE,UAAU,OAAQ;AAC/B,gBAAE,OAAS,QAAO,KAAM,EAAE,OAAQ,MAAM,OAAQ,EAAE,QAAQ,MAAM;AAAA;AAIjE,cAAE,WAAY,iBAAkB,WAAW;AAC1C,kBAAK,CAAC,mBAAoB;AACzB,uBAAO,MAAO,eAAe;AAAA;AAE9B,qBAAO,kBAAmB;AAAA;AAI3B,cAAE,UAAW,KAAM;AAGnB,0BAAc,QAAQ;AACtB,oBAAQ,gBAAiB,WAAW;AACnC,kCAAoB;AAAA;AAIrB,kBAAM,OAAQ,WAAW;AAGxB,kBAAK,gBAAgB,QAAY;AAChC,uBAAQ,SAAS,WAAY;AAAA,qBAGvB;AACN,wBAAQ,gBAAiB;AAAA;AAI1B,kBAAK,EAAG,eAAiB;AAGxB,kBAAE,gBAAgB,iBAAiB;AAGnC,6BAAa,KAAM;AAAA;AAIpB,kBAAK,qBAAqB,YAAY,cAAgB;AACrD,4BAAa,kBAAmB;AAAA;AAGjC,kCAAoB,cAAc;AAAA;AAInC,mBAAO;AAAA;AAAA;AAYT,gBAAQ,qBAAuB,WAAW;AACzC,cAAI,OAAO,UAAS,eAAe,mBAAoB,IAAK;AAC5D,eAAK,YAAY;AACjB,iBAAO,KAAK,WAAW,WAAW;AAAA;AAQnC,eAAO,YAAY,SAAU,MAAM,SAAS,aAAc;AACzD,cAAK,OAAO,SAAS,UAAW;AAC/B,mBAAO;AAAA;AAER,cAAK,OAAO,YAAY,WAAY;AACnC,0BAAc;AACd,sBAAU;AAAA;AAGX,cAAI,MAAM,QAAQ;AAElB,cAAK,CAAC,SAAU;AAIf,gBAAK,QAAQ,oBAAqB;AACjC,wBAAU,UAAS,eAAe,mBAAoB;AAKtD,qBAAO,QAAQ,cAAe;AAC9B,mBAAK,OAAO,UAAS,SAAS;AAC9B,sBAAQ,KAAK,YAAa;AAAA,mBACpB;AACN,wBAAU;AAAA;AAAA;AAIZ,mBAAS,WAAW,KAAM;AAC1B,oBAAU,CAAC,eAAe;AAG1B,cAAK,QAAS;AACb,mBAAO,CAAE,QAAQ,cAAe,OAAQ;AAAA;AAGzC,mBAAS,cAAe,CAAE,OAAQ,SAAS;AAE3C,cAAK,WAAW,QAAQ,QAAS;AAChC,mBAAQ,SAAU;AAAA;AAGnB,iBAAO,OAAO,MAAO,IAAI,OAAO;AAAA;AAOjC,eAAO,GAAG,OAAO,SAAU,KAAK,QAAQ,UAAW;AAClD,cAAI,UAAU,MAAM,UACnB,QAAO,MACP,MAAM,IAAI,QAAS;AAEpB,cAAK,MAAM,IAAK;AACf,uBAAW,iBAAkB,IAAI,MAAO;AACxC,kBAAM,IAAI,MAAO,GAAG;AAAA;AAIrB,cAAK,YAAY,SAAW;AAG3B,uBAAW;AACX,qBAAS;AAAA,qBAGE,UAAU,OAAO,WAAW,UAAW;AAClD,mBAAO;AAAA;AAIR,cAAK,MAAK,SAAS,GAAI;AACtB,mBAAO,KAAM;AAAA,cACZ;AAAA,cAKA,MAAM,QAAQ;AAAA,cACd,UAAU;AAAA,cACV,MAAM;AAAA,eACH,KAAM,SAAU,cAAe;AAGlC,yBAAW;AAEX,oBAAK,KAAM,WAIV,OAAQ,SAAU,OAAQ,OAAO,UAAW,eAAiB,KAAM,YAGnE;AAAA,eAKE,OAAQ,YAAY,SAAU,OAAO,QAAS;AACjD,oBAAK,KAAM,WAAW;AACrB,yBAAS,MAAO,MAAM,YAAY,CAAE,MAAM,cAAc,QAAQ;AAAA;AAAA;AAAA;AAKnE,iBAAO;AAAA;AAMR,eAAO,KAAK,QAAQ,WAAW,SAAU,MAAO;AAC/C,iBAAO,OAAO,KAAM,OAAO,QAAQ,SAAU,KAAK;AACjD,mBAAO,SAAS,IAAG;AAAA,aAChB;AAAA;AAML,eAAO,SAAS;AAAA,UACf,WAAW,SAAU,MAAM,SAAS,GAAI;AACvC,gBAAI,aAAa,SAAS,WAAW,QAAQ,WAAW,YAAY,mBACnE,WAAW,OAAO,IAAK,MAAM,aAC7B,UAAU,OAAQ,OAClB,QAAQ;AAGT,gBAAK,aAAa,UAAW;AAC5B,mBAAK,MAAM,WAAW;AAAA;AAGvB,wBAAY,QAAQ;AACpB,wBAAY,OAAO,IAAK,MAAM;AAC9B,yBAAa,OAAO,IAAK,MAAM;AAC/B,gCAAsB,cAAa,cAAc,aAAa,YAC3D,aAAY,YAAa,QAAS,UAAW;AAIhD,gBAAK,mBAAoB;AACxB,4BAAc,QAAQ;AACtB,uBAAS,YAAY;AACrB,wBAAU,YAAY;AAAA,mBAEhB;AACN,uBAAS,WAAY,cAAe;AACpC,wBAAU,WAAY,eAAgB;AAAA;AAGvC,gBAAK,YAAY,UAAY;AAG5B,wBAAU,QAAQ,KAAM,MAAM,GAAG,OAAO,OAAQ,IAAI;AAAA;AAGrD,gBAAK,QAAQ,OAAO,MAAO;AAC1B,oBAAM,MAAQ,QAAQ,MAAM,UAAU,MAAQ;AAAA;AAE/C,gBAAK,QAAQ,QAAQ,MAAO;AAC3B,oBAAM,OAAS,QAAQ,OAAO,UAAU,OAAS;AAAA;AAGlD,gBAAK,WAAW,SAAU;AACzB,sBAAQ,MAAM,KAAM,MAAM;AAAA,mBAEpB;AACN,sBAAQ,IAAK;AAAA;AAAA;AAAA;AAKhB,eAAO,GAAG,OAAQ;AAAA,UAGjB,QAAQ,SAAU,SAAU;AAG3B,gBAAK,UAAU,QAAS;AACvB,qBAAO,YAAY,SAClB,OACA,KAAK,KAAM,SAAU,GAAI;AACxB,uBAAO,OAAO,UAAW,MAAM,SAAS;AAAA;AAAA;AAI3C,gBAAI,MAAM,KACT,OAAO,KAAM;AAEd,gBAAK,CAAC,MAAO;AACZ;AAAA;AAOD,gBAAK,CAAC,KAAK,iBAAiB,QAAS;AACpC,qBAAO,EAAE,KAAK,GAAG,MAAM;AAAA;AAIxB,mBAAO,KAAK;AACZ,kBAAM,KAAK,cAAc;AACzB,mBAAO;AAAA,cACN,KAAK,KAAK,MAAM,IAAI;AAAA,cACpB,MAAM,KAAK,OAAO,IAAI;AAAA;AAAA;AAAA,UAMxB,UAAU,WAAW;AACpB,gBAAK,CAAC,KAAM,IAAM;AACjB;AAAA;AAGD,gBAAI,cAAc,SAAQ,KACzB,OAAO,KAAM,IACb,eAAe,EAAE,KAAK,GAAG,MAAM;AAGhC,gBAAK,OAAO,IAAK,MAAM,gBAAiB,SAAU;AAGjD,wBAAS,KAAK;AAAA,mBAER;AACN,wBAAS,KAAK;AAId,oBAAM,KAAK;AACX,6BAAe,KAAK,gBAAgB,IAAI;AACxC,qBAAQ,gBACL,kBAAiB,IAAI,QAAQ,iBAAiB,IAAI,oBACpD,OAAO,IAAK,cAAc,gBAAiB,UAAW;AAEtD,+BAAe,aAAa;AAAA;AAE7B,kBAAK,gBAAgB,iBAAiB,QAAQ,aAAa,aAAa,GAAI;AAG3E,+BAAe,OAAQ,cAAe;AACtC,6BAAa,OAAO,OAAO,IAAK,cAAc,kBAAkB;AAChE,6BAAa,QAAQ,OAAO,IAAK,cAAc,mBAAmB;AAAA;AAAA;AAKpE,mBAAO;AAAA,cACN,KAAK,QAAO,MAAM,aAAa,MAAM,OAAO,IAAK,MAAM,aAAa;AAAA,cACpE,MAAM,QAAO,OAAO,aAAa,OAAO,OAAO,IAAK,MAAM,cAAc;AAAA;AAAA;AAAA,UAc1E,cAAc,WAAW;AACxB,mBAAO,KAAK,IAAK,WAAW;AAC3B,kBAAI,eAAe,KAAK;AAExB,qBAAQ,gBAAgB,OAAO,IAAK,cAAc,gBAAiB,UAAW;AAC7E,+BAAe,aAAa;AAAA;AAG7B,qBAAO,gBAAgB;AAAA;AAAA;AAAA;AAM1B,eAAO,KAAM,EAAE,YAAY,eAAe,WAAW,iBAAiB,SAAU,QAAQ,MAAO;AAC9F,cAAI,OAAM,AAAkB,SAAlB;AAEV,iBAAO,GAAI,UAAW,SAAU,KAAM;AACrC,mBAAO,OAAQ,MAAM,SAAU,MAAM,SAAQ,MAAM;AAGlD,kBAAI;AACJ,kBAAK,SAAU,OAAS;AACvB,sBAAM;AAAA,yBACK,KAAK,aAAa,GAAI;AACjC,sBAAM,KAAK;AAAA;AAGZ,kBAAK,SAAQ,QAAY;AACxB,uBAAO,MAAM,IAAK,QAAS,KAAM;AAAA;AAGlC,kBAAK,KAAM;AACV,oBAAI,SACH,CAAC,OAAM,OAAM,IAAI,aACjB,OAAM,OAAM,IAAI;AAAA,qBAGX;AACN,qBAAM,WAAW;AAAA;AAAA,eAEhB,QAAQ,KAAK,UAAU;AAAA;AAAA;AAU5B,eAAO,KAAM,CAAE,OAAO,SAAU,SAAU,IAAI,MAAO;AACpD,iBAAO,SAAU,QAAS,aAAc,QAAQ,eAC/C,SAAU,MAAM,UAAW;AAC1B,gBAAK,UAAW;AACf,yBAAW,OAAQ,MAAM;AAGzB,qBAAO,UAAU,KAAM,YACtB,OAAQ,MAAO,WAAY,QAAS,OACpC;AAAA;AAAA;AAAA;AAQL,eAAO,KAAM,EAAE,QAAQ,UAAU,OAAO,WAAW,SAAU,MAAM,MAAO;AACzE,iBAAO,KAAM;AAAA,YACZ,SAAS,UAAU;AAAA,YACnB,SAAS;AAAA,YACT,IAAI,UAAU;AAAA,aACZ,SAAU,cAAc,UAAW;AAGrC,mBAAO,GAAI,YAAa,SAAU,QAAQ,OAAQ;AACjD,kBAAI,YAAY,UAAU,UAAY,iBAAgB,OAAO,WAAW,YACvE,QAAQ,gBAAkB,YAAW,QAAQ,UAAU,OAAO,WAAW;AAE1E,qBAAO,OAAQ,MAAM,SAAU,MAAM,OAAM,QAAQ;AAClD,oBAAI;AAEJ,oBAAK,SAAU,OAAS;AAGvB,yBAAO,SAAS,QAAS,aAAc,IACtC,KAAM,UAAU,QAChB,KAAK,SAAS,gBAAiB,WAAW;AAAA;AAI5C,oBAAK,KAAK,aAAa,GAAI;AAC1B,wBAAM,KAAK;AAIX,yBAAO,KAAK,IACX,KAAK,KAAM,WAAW,OAAQ,IAAK,WAAW,OAC9C,KAAK,KAAM,WAAW,OAAQ,IAAK,WAAW,OAC9C,IAAK,WAAW;AAAA;AAIlB,uBAAO,WAAU,SAGhB,OAAO,IAAK,MAAM,OAAM,SAGxB,OAAO,MAAO,MAAM,OAAM,QAAO;AAAA,iBAChC,MAAM,YAAY,SAAS,QAAW;AAAA;AAAA;AAAA;AAM5C,eAAO,KAAM;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,WACE,SAAU,IAAI,MAAO;AACvB,iBAAO,GAAI,QAAS,SAAU,KAAK;AAClC,mBAAO,KAAK,GAAI,MAAM;AAAA;AAAA;AAOxB,eAAO,GAAG,OAAQ;AAAA,UAEjB,MAAM,SAAU,OAAO,MAAM,KAAK;AACjC,mBAAO,KAAK,GAAI,OAAO,MAAM,MAAM;AAAA;AAAA,UAEpC,QAAQ,SAAU,OAAO,KAAK;AAC7B,mBAAO,KAAK,IAAK,OAAO,MAAM;AAAA;AAAA,UAG/B,UAAU,SAAU,UAAU,OAAO,MAAM,KAAK;AAC/C,mBAAO,KAAK,GAAI,OAAO,UAAU,MAAM;AAAA;AAAA,UAExC,YAAY,SAAU,UAAU,OAAO,KAAK;AAG3C,mBAAO,UAAU,WAAW,IAC3B,KAAK,IAAK,UAAU,QACpB,KAAK,IAAK,OAAO,YAAY,MAAM;AAAA;AAAA,UAGrC,OAAO,SAAU,QAAQ,OAAQ;AAChC,mBAAO,KAAK,WAAY,QAAS,WAAY,SAAS;AAAA;AAAA;AAIxD,eAAO,KACJ,wLAE0D,MAAO,MACnE,SAAU,IAAI,MAAO;AAGpB,iBAAO,GAAI,QAAS,SAAU,MAAM,KAAK;AACxC,mBAAO,UAAU,SAAS,IACzB,KAAK,GAAI,MAAM,MAAM,MAAM,OAC3B,KAAK,QAAS;AAAA;AAAA;AAUlB,YAAI,QAAQ;AAMZ,eAAO,QAAQ,SAAU,KAAI,SAAU;AACtC,cAAI,KAAK,MAAM;AAEf,cAAK,OAAO,YAAY,UAAW;AAClC,kBAAM,IAAI;AACV,sBAAU;AACV,kBAAK;AAAA;AAKN,cAAK,CAAC,YAAY,MAAO;AACxB,mBAAO;AAAA;AAIR,iBAAO,OAAM,KAAM,WAAW;AAC9B,kBAAQ,WAAW;AAClB,mBAAO,IAAG,MAAO,WAAW,MAAM,KAAK,OAAQ,OAAM,KAAM;AAAA;AAI5D,gBAAM,OAAO,IAAG,OAAO,IAAG,QAAQ,OAAO;AAEzC,iBAAO;AAAA;AAGR,eAAO,YAAY,SAAU,MAAO;AACnC,cAAK,MAAO;AACX,mBAAO;AAAA,iBACD;AACN,mBAAO,MAAO;AAAA;AAAA;AAGhB,eAAO,UAAU,MAAM;AACvB,eAAO,YAAY,KAAK;AACxB,eAAO,WAAW;AAClB,eAAO,aAAa;AACpB,eAAO,WAAW;AAClB,eAAO,YAAY;AACnB,eAAO,OAAO;AAEd,eAAO,MAAM,KAAK;AAElB,eAAO,YAAY,SAAU,KAAM;AAKlC,cAAI,OAAO,OAAO,KAAM;AACxB,iBAAS,UAAS,YAAY,SAAS,aAKtC,CAAC,MAAO,MAAM,WAAY;AAAA;AAG5B,eAAO,OAAO,SAAU,MAAO;AAC9B,iBAAO,QAAQ,OACd,KACE,QAAO,IAAK,QAAS,OAAO;AAAA;AAkBhC,YAAK,OAAO,WAAW,cAAc,OAAO,KAAM;AACjD,iBAAQ,UAAU,IAAI,WAAW;AAChC,mBAAO;AAAA;AAAA;AAOT,YAGC,UAAU,QAAO,QAGjB,KAAK,QAAO;AAEb,eAAO,aAAa,SAAU,MAAO;AACpC,cAAK,QAAO,MAAM,QAAS;AAC1B,oBAAO,IAAI;AAAA;AAGZ,cAAK,QAAQ,QAAO,WAAW,QAAS;AACvC,oBAAO,SAAS;AAAA;AAGjB,iBAAO;AAAA;AAMR,YAAK,OAAO,aAAa,aAAc;AACtC,kBAAO,SAAS,QAAO,IAAI;AAAA;AAM5B,eAAO;AAAA;AAAA;AAAA;;;AC/nVP;AAAA;AAAC,MAAC,UAAU,cAAc;AACxB;AAkDA,YAAI,YACF,aAAY,8CACZ,WAAW,KAAK,MAChB,YAAY,KAAK,OAEjB,iBAAiB,sBACjB,gBAAgB,iBAAiB,0DAEjC,OAAO,MACP,WAAW,IACX,oBAAmB,kBAEnB,WAAW,CAAC,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,OAC7E,YAAY,KAKZ,MAAM;AAMR,wBAAe,cAAc;AAC3B,cAAI,KAAK,aAAa,cACpB,IAAI,WAAU,YAAY,EAAE,aAAa,YAAW,UAAU,MAAM,SAAS,QAC7E,MAAM,IAAI,WAAU,IAUpB,iBAAiB,IAajB,gBAAgB,GAMhB,aAAa,IAIb,aAAa,IAMb,UAAU,MAKV,UAAU,KAGV,SAAS,OAkBT,cAAc,GAId,gBAAgB,GAGhB,SAAS;AAAA,YACP,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,oBAAoB;AAAA,YACpB,gBAAgB;AAAA,YAChB,kBAAkB;AAAA,YAClB,mBAAmB;AAAA,YACnB,wBAAwB;AAAA,YACxB,QAAQ;AAAA,aAMV,WAAW,wCACX,iCAAiC;AAgBnC,8BAAmB,GAAG,GAAG;AACvB,gBAAI,UAAU,GAAG,aAAa,GAAG,GAAG,OAAO,KAAK,KAC9C,IAAI;AAGN,gBAAI,CAAE,cAAa;AAAY,qBAAO,IAAI,WAAU,GAAG;AAEvD,gBAAI,KAAK,MAAM;AAEb,kBAAI,KAAK,EAAE,iBAAiB,MAAM;AAChC,kBAAE,IAAI,EAAE;AAER,oBAAI,CAAC,EAAE,KAAK,EAAE,IAAI,SAAS;AACzB,oBAAE,IAAI,EAAE,IAAI;AAAA,2BACH,EAAE,IAAI,SAAS;AACxB,oBAAE,IAAI,CAAC,EAAE,IAAI;AAAA,uBACR;AACL,oBAAE,IAAI,EAAE;AACR,oBAAE,IAAI,EAAE,EAAE;AAAA;AAGZ;AAAA;AAGF,kBAAK,SAAQ,OAAO,KAAK,aAAa,IAAI,KAAK,GAAG;AAGhD,kBAAE,IAAI,IAAI,IAAI,IAAK,KAAI,CAAC,GAAG,MAAM;AAGjC,oBAAI,MAAM,CAAC,CAAC,GAAG;AACb,uBAAK,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI;AAAI;AAEzC,sBAAI,IAAI,SAAS;AACf,sBAAE,IAAI,EAAE,IAAI;AAAA,yBACP;AACL,sBAAE,IAAI;AACN,sBAAE,IAAI,CAAC;AAAA;AAGT;AAAA;AAGF,sBAAM,OAAO;AAAA,qBACR;AAEL,oBAAI,CAAC,WAAU,KAAK,MAAM,OAAO;AAAK,yBAAO,aAAa,GAAG,KAAK;AAElE,kBAAE,IAAI,IAAI,WAAW,MAAM,KAAM,OAAM,IAAI,MAAM,IAAI,MAAM;AAAA;AAI7D,kBAAK,KAAI,IAAI,QAAQ,QAAQ;AAAI,sBAAM,IAAI,QAAQ,KAAK;AAGxD,kBAAK,KAAI,IAAI,OAAO,SAAS,GAAG;AAG9B,oBAAI,IAAI;AAAG,sBAAI;AACf,qBAAK,CAAC,IAAI,MAAM,IAAI;AACpB,sBAAM,IAAI,UAAU,GAAG;AAAA,yBACd,IAAI,GAAG;AAGhB,oBAAI,IAAI;AAAA;AAAA,mBAGL;AAGL,uBAAS,GAAG,GAAG,SAAS,QAAQ;AAIhC,kBAAI,KAAK,MAAM,gCAAgC;AAC7C,oBAAI,IAAI,WAAU;AAClB,uBAAO,OAAM,GAAG,iBAAiB,EAAE,IAAI,GAAG;AAAA;AAG5C,oBAAM,OAAO;AAEb,kBAAI,QAAQ,OAAO,KAAK,UAAU;AAGhC,oBAAI,IAAI,KAAK;AAAG,yBAAO,aAAa,GAAG,KAAK,OAAO;AAEnD,kBAAE,IAAI,IAAI,IAAI,IAAK,OAAM,IAAI,MAAM,IAAI,MAAM;AAG7C,oBAAI,WAAU,SAAS,IAAI,QAAQ,aAAa,IAAI,SAAS,IAAI;AAC/D,wBAAM,MACJ,gBAAgB;AAAA;AAAA,qBAEf;AACL,kBAAE,IAAI,IAAI,WAAW,OAAO,KAAM,OAAM,IAAI,MAAM,IAAI,MAAM;AAAA;AAG9D,yBAAW,SAAS,MAAM,GAAG;AAC7B,kBAAI,IAAI;AAIR,mBAAK,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAK;AACnC,oBAAI,SAAS,QAAQ,IAAI,IAAI,OAAO,MAAM,GAAG;AAC3C,sBAAI,KAAK,KAAK;AAGZ,wBAAI,IAAI,GAAG;AACT,0BAAI;AACJ;AAAA;AAAA,6BAEO,CAAC,aAAa;AAGvB,wBAAI,OAAO,IAAI,iBAAkB,OAAM,IAAI,kBACvC,OAAO,IAAI,iBAAkB,OAAM,IAAI,gBAAgB;AACzD,oCAAc;AACd,0BAAI;AACJ,0BAAI;AACJ;AAAA;AAAA;AAIJ,yBAAO,aAAa,GAAG,OAAO,IAAI,OAAO;AAAA;AAAA;AAK7C,sBAAQ;AACR,oBAAM,YAAY,KAAK,GAAG,IAAI,EAAE;AAGhC,kBAAK,KAAI,IAAI,QAAQ,QAAQ;AAAI,sBAAM,IAAI,QAAQ,KAAK;AAAA;AACnD,oBAAI,IAAI;AAAA;AAIf,iBAAK,IAAI,GAAG,IAAI,WAAW,OAAO,IAAI;AAAI;AAG1C,iBAAK,MAAM,IAAI,QAAQ,IAAI,WAAW,EAAE,SAAS;AAAI;AAErD,gBAAI,MAAM,IAAI,MAAM,GAAG,EAAE,MAAM;AAC7B,qBAAO;AAGP,kBAAI,SAAS,WAAU,SACrB,MAAM,MAAO,KAAI,qBAAoB,MAAM,UAAU,KAAK;AACxD,sBAAM,MACJ,gBAAiB,EAAE,IAAI;AAAA;AAI7B,kBAAK,KAAI,IAAI,IAAI,KAAK,SAAS;AAG7B,kBAAE,IAAI,EAAE,IAAI;AAAA,yBAGH,IAAI,SAAS;AAGtB,kBAAE,IAAI,CAAC,EAAE,IAAI;AAAA,qBACR;AACL,kBAAE,IAAI;AACN,kBAAE,IAAI;AAMN,oBAAK,KAAI,KAAK;AACd,oBAAI,IAAI;AAAG,uBAAK;AAEhB,oBAAI,IAAI,KAAK;AACX,sBAAI;AAAG,sBAAE,EAAE,KAAK,CAAC,IAAI,MAAM,GAAG;AAE9B,uBAAK,OAAO,UAAU,IAAI,OAAM;AAC9B,sBAAE,EAAE,KAAK,CAAC,IAAI,MAAM,GAAG,KAAK;AAAA;AAG9B,sBAAI,WAAY,OAAM,IAAI,MAAM,IAAI;AAAA,uBAC/B;AACL,uBAAK;AAAA;AAGP,uBAAO,KAAK,OAAO;AAAI;AACvB,kBAAE,EAAE,KAAK,CAAC;AAAA;AAAA,mBAEP;AAGL,gBAAE,IAAI,CAAC,EAAE,IAAI;AAAA;AAAA;AAQjB,qBAAU,QAAQ;AAElB,qBAAU,WAAW;AACrB,qBAAU,aAAa;AACvB,qBAAU,aAAa;AACvB,qBAAU,cAAc;AACxB,qBAAU,gBAAgB;AAC1B,qBAAU,kBAAkB;AAC5B,qBAAU,kBAAkB;AAC5B,qBAAU,kBAAkB;AAC5B,qBAAU,mBAAmB;AAC7B,qBAAU,SAAS;AAqCnB,qBAAU,SAAS,WAAU,MAAM,SAAU,KAAK;AAChD,gBAAI,GAAG;AAEP,gBAAI,OAAO,MAAM;AAEf,kBAAI,OAAO,OAAO,UAAU;AAI1B,oBAAI,IAAI,eAAe,IAAI,mBAAmB;AAC5C,sBAAI,IAAI;AACR,2BAAS,GAAG,GAAG,KAAK;AACpB,mCAAiB;AAAA;AAKnB,oBAAI,IAAI,eAAe,IAAI,kBAAkB;AAC3C,sBAAI,IAAI;AACR,2BAAS,GAAG,GAAG,GAAG;AAClB,kCAAgB;AAAA;AAOlB,oBAAI,IAAI,eAAe,IAAI,mBAAmB;AAC5C,sBAAI,IAAI;AACR,sBAAI,KAAK,EAAE,KAAK;AACd,6BAAS,EAAE,IAAI,CAAC,KAAK,GAAG;AACxB,6BAAS,EAAE,IAAI,GAAG,KAAK;AACvB,iCAAa,EAAE;AACf,iCAAa,EAAE;AAAA,yBACV;AACL,6BAAS,GAAG,CAAC,KAAK,KAAK;AACvB,iCAAa,CAAE,cAAa,IAAI,IAAI,CAAC,IAAI;AAAA;AAAA;AAO7C,oBAAI,IAAI,eAAe,IAAI,UAAU;AACnC,sBAAI,IAAI;AACR,sBAAI,KAAK,EAAE,KAAK;AACd,6BAAS,EAAE,IAAI,CAAC,KAAK,IAAI;AACzB,6BAAS,EAAE,IAAI,GAAG,KAAK;AACvB,8BAAU,EAAE;AACZ,8BAAU,EAAE;AAAA,yBACP;AACL,6BAAS,GAAG,CAAC,KAAK,KAAK;AACvB,wBAAI,GAAG;AACL,gCAAU,CAAE,WAAU,IAAI,IAAI,CAAC,IAAI;AAAA,2BAC9B;AACL,4BAAM,MACJ,iBAAiB,IAAI,sBAAsB;AAAA;AAAA;AAAA;AAQnD,oBAAI,IAAI,eAAe,IAAI,WAAW;AACpC,sBAAI,IAAI;AACR,sBAAI,MAAM,CAAC,CAAC,GAAG;AACb,wBAAI,GAAG;AACL,0BAAI,OAAO,UAAU,eAAe,UAClC,QAAO,mBAAmB,OAAO,cAAc;AAC/C,iCAAS;AAAA,6BACJ;AACL,iCAAS,CAAC;AACV,8BAAM,MACJ,iBAAiB;AAAA;AAAA,2BAEhB;AACL,+BAAS;AAAA;AAAA,yBAEN;AACL,0BAAM,MACJ,iBAAiB,IAAI,yBAAyB;AAAA;AAAA;AAMpD,oBAAI,IAAI,eAAe,IAAI,gBAAgB;AACzC,sBAAI,IAAI;AACR,2BAAS,GAAG,GAAG,GAAG;AAClB,gCAAc;AAAA;AAKhB,oBAAI,IAAI,eAAe,IAAI,kBAAkB;AAC3C,sBAAI,IAAI;AACR,2BAAS,GAAG,GAAG,KAAK;AACpB,kCAAgB;AAAA;AAKlB,oBAAI,IAAI,eAAe,IAAI,WAAW;AACpC,sBAAI,IAAI;AACR,sBAAI,OAAO,KAAK;AAAU,6BAAS;AAAA;AAC9B,0BAAM,MACT,iBAAiB,IAAI,qBAAqB;AAAA;AAK9C,oBAAI,IAAI,eAAe,IAAI,aAAa;AACtC,sBAAI,IAAI;AAIR,sBAAI,OAAO,KAAK,YAAY,CAAC,wBAAwB,KAAK,IAAI;AAC5D,qDAAiC,EAAE,MAAM,GAAG,OAAO;AACnD,+BAAW;AAAA,yBACN;AACL,0BAAM,MACJ,iBAAiB,IAAI,eAAe;AAAA;AAAA;AAAA,qBAIrC;AAGL,sBAAM,MACJ,iBAAiB,sBAAsB;AAAA;AAAA;AAI7C,mBAAO;AAAA,cACL;AAAA,cACA;AAAA,cACA,gBAAgB,CAAC,YAAY;AAAA,cAC7B,OAAO,CAAC,SAAS;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA;AAAA;AAcJ,qBAAU,cAAc,SAAU,GAAG;AACnC,gBAAI,CAAC,KAAK,EAAE,iBAAiB;AAAM,qBAAO;AAC1C,gBAAI,CAAC,WAAU;AAAO,qBAAO;AAE7B,gBAAI,GAAG,GACL,IAAI,EAAE,GACN,IAAI,EAAE,GACN,IAAI,EAAE;AAER;AAAK,kBAAI,GAAG,SAAS,KAAK,MAAM,kBAAkB;AAEhD,oBAAK,OAAM,KAAK,MAAM,OAAO,KAAK,CAAC,OAAO,KAAK,OAAO,MAAM,UAAU,IAAI;AAGxE,sBAAI,EAAE,OAAO,GAAG;AACd,wBAAI,MAAM,KAAK,EAAE,WAAW;AAAG,6BAAO;AACtC;AAAA;AAIF,sBAAK,KAAI,KAAK;AACd,sBAAI,IAAI;AAAG,yBAAK;AAIhB,sBAAI,OAAO,EAAE,IAAI,UAAU,GAAG;AAE5B,yBAAK,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AAC7B,0BAAI,EAAE;AACN,0BAAI,IAAI,KAAK,KAAK,QAAQ,MAAM,UAAU;AAAI;AAAA;AAIhD,wBAAI,MAAM;AAAG,6BAAO;AAAA;AAAA;AAAA,yBAKf,MAAM,QAAQ,MAAM,QAAS,OAAM,QAAQ,MAAM,KAAK,MAAM,KAAK;AAC1E,uBAAO;AAAA;AAGT,kBAAM,MACH,iBAAiB,wBAAwB;AAAA;AAS9C,qBAAU,UAAU,WAAU,MAAM,WAAY;AAC9C,mBAAO,SAAS,WAAW,EAAE;AAAA;AAS/B,qBAAU,UAAU,WAAU,MAAM,WAAY;AAC9C,mBAAO,SAAS,WAAW,EAAE;AAAA;AAc/B,qBAAU,SAAU,WAAY;AAC9B,gBAAI,UAAU;AAMd,gBAAI,iBAAkB,KAAK,WAAW,UAAW,UAC9C,WAAY;AAAE,qBAAO,UAAU,KAAK,WAAW;AAAA,gBAC/C,WAAY;AAAE,qBAAS,MAAK,WAAW,aAAa,KAAK,UACxD,MAAK,WAAW,UAAW;AAAA;AAE/B,mBAAO,SAAU,IAAI;AACnB,kBAAI,GAAG,GAAG,GAAG,GAAG,GACd,IAAI,GACJ,IAAI,IACJ,OAAO,IAAI,WAAU;AAEvB,kBAAI,MAAM;AAAM,qBAAK;AAAA;AAChB,yBAAS,IAAI,GAAG;AAErB,kBAAI,SAAS,KAAK;AAElB,kBAAI,QAAQ;AAGV,oBAAI,OAAO,iBAAiB;AAE1B,sBAAI,OAAO,gBAAgB,IAAI,YAAY,KAAK;AAEhD,yBAAO,IAAI,KAAI;AAQb,wBAAI,EAAE,KAAK,SAAW,GAAE,IAAI,OAAO;AAMnC,wBAAI,KAAK,MAAM;AACb,0BAAI,OAAO,gBAAgB,IAAI,YAAY;AAC3C,wBAAE,KAAK,EAAE;AACT,wBAAE,IAAI,KAAK,EAAE;AAAA,2BACR;AAIL,wBAAE,KAAK,IAAI;AACX,2BAAK;AAAA;AAAA;AAGT,sBAAI,IAAI;AAAA,2BAGC,OAAO,aAAa;AAG7B,sBAAI,OAAO,YAAY,KAAK;AAE5B,yBAAO,IAAI,KAAI;AAMb,wBAAM,GAAE,KAAK,MAAM,kBAAoB,EAAE,IAAI,KAAK,gBAC9C,EAAE,IAAI,KAAK,aAAgB,EAAE,IAAI,KAAK,WACtC,GAAE,IAAI,MAAM,MAAO,GAAE,IAAI,MAAM,KAAK,EAAE,IAAI;AAE9C,wBAAI,KAAK,MAAM;AACb,6BAAO,YAAY,GAAG,KAAK,GAAG;AAAA,2BACzB;AAGL,wBAAE,KAAK,IAAI;AACX,2BAAK;AAAA;AAAA;AAGT,sBAAI,IAAI;AAAA,uBACH;AACL,2BAAS;AACT,wBAAM,MACJ,iBAAiB;AAAA;AAAA;AAKvB,kBAAI,CAAC,QAAQ;AAEX,uBAAO,IAAI,KAAI;AACb,sBAAI;AACJ,sBAAI,IAAI;AAAM,sBAAE,OAAO,IAAI;AAAA;AAAA;AAI/B,kBAAI,EAAE,EAAE;AACR,oBAAM;AAGN,kBAAI,KAAK,IAAI;AACX,oBAAI,SAAS,WAAW;AACxB,kBAAE,KAAK,UAAU,IAAI,KAAK;AAAA;AAI5B,qBAAO,EAAE,OAAO,GAAG,EAAE,OAAO;AAAI;AAGhC,kBAAI,IAAI,GAAG;AACT,oBAAI,CAAC,IAAI;AAAA,qBACJ;AAGL,qBAAK,IAAI,IAAK,EAAE,OAAO,GAAG,EAAE,OAAO,GAAG,IAAI,KAAK;AAAS;AAGxD,qBAAK,IAAI,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI;AAAI;AAG5C,oBAAI,IAAI;AAAU,uBAAK,WAAW;AAAA;AAGpC,mBAAK,IAAI;AACT,mBAAK,IAAI;AACT,qBAAO;AAAA;AAAA;AAUX,qBAAU,MAAM,WAAY;AAC1B,gBAAI,IAAI,GACN,OAAO,WACP,MAAM,IAAI,WAAU,KAAK;AAC3B,mBAAO,IAAI,KAAK;AAAS,oBAAM,IAAI,KAAK,KAAK;AAC7C,mBAAO;AAAA;AAQT,wBAAe,WAAY;AACzB,gBAAI,UAAU;AAOd,+BAAmB,KAAK,QAAQ,SAAS,UAAU;AACjD,kBAAI,GACF,MAAM,CAAC,IACP,MACA,IAAI,GACJ,MAAM,IAAI;AAEZ,qBAAO,IAAI,OAAM;AACf,qBAAK,OAAO,IAAI,QAAQ,QAAQ,IAAI,SAAS;AAAO;AAEpD,oBAAI,MAAM,SAAS,QAAQ,IAAI,OAAO;AAEtC,qBAAK,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AAE/B,sBAAI,IAAI,KAAK,UAAU,GAAG;AACxB,wBAAI,IAAI,IAAI,MAAM;AAAM,0BAAI,IAAI,KAAK;AACrC,wBAAI,IAAI,MAAM,IAAI,KAAK,UAAU;AACjC,wBAAI,MAAM;AAAA;AAAA;AAAA;AAKhB,qBAAO,IAAI;AAAA;AAMb,mBAAO,SAAU,KAAK,QAAQ,SAAS,MAAM,kBAAkB;AAC7D,kBAAI,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAC/B,IAAI,IAAI,QAAQ,MAChB,KAAK,gBACL,KAAK;AAGP,kBAAI,KAAK,GAAG;AACV,oBAAI;AAGJ,gCAAgB;AAChB,sBAAM,IAAI,QAAQ,KAAK;AACvB,oBAAI,IAAI,WAAU;AAClB,oBAAI,EAAE,IAAI,IAAI,SAAS;AACvB,gCAAgB;AAKhB,kBAAE,IAAI,UAAU,aAAa,cAAc,EAAE,IAAI,EAAE,GAAG,MACrD,IAAI,SAAS;AACd,kBAAE,IAAI,EAAE,EAAE;AAAA;AAKZ,mBAAK,UAAU,KAAK,QAAQ,SAAS,mBACjC,YAAW,UAAU,WACrB,YAAW,SAAS;AAGxB,kBAAI,IAAI,GAAG;AAGX,qBAAO,GAAG,EAAE,MAAM,GAAG,GAAG;AAAM;AAG9B,kBAAI,CAAC,GAAG;AAAI,uBAAO,SAAS,OAAO;AAGnC,kBAAI,IAAI,GAAG;AACT,kBAAE;AAAA,qBACG;AACL,kBAAE,IAAI;AACN,kBAAE,IAAI;AAGN,kBAAE,IAAI;AACN,oBAAI,IAAI,GAAG,GAAG,IAAI,IAAI;AACtB,qBAAK,EAAE;AACP,oBAAI,EAAE;AACN,oBAAI,EAAE;AAAA;AAMR,kBAAI,IAAI,KAAK;AAGb,kBAAI,GAAG;AAIP,kBAAI,UAAU;AACd,kBAAI,KAAK,IAAI,KAAK,GAAG,IAAI,MAAM;AAE/B,kBAAI,KAAK,IAAK,MAAK,QAAQ,MAAO,OAAM,KAAK,MAAO,GAAE,IAAI,IAAI,IAAI,MAC1D,IAAI,KAAK,KAAK,KAAK,OAAM,KAAK,KAAK,MAAM,KAAK,GAAG,IAAI,KAAK,KAC3D,MAAO,GAAE,IAAI,IAAI,IAAI;AAK5B,kBAAI,IAAI,KAAK,CAAC,GAAG,IAAI;AAGnB,sBAAM,IAAI,aAAa,SAAS,OAAO,IAAI,CAAC,IAAI,SAAS,OAAO,MAAM,SAAS,OAAO;AAAA,qBACjF;AAGL,mBAAG,SAAS;AAGZ,oBAAI,GAAG;AAGL,uBAAK,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,WAAU;AACpC,uBAAG,KAAK;AAER,wBAAI,CAAC,GAAG;AACN,wBAAE;AACF,2BAAK,CAAC,GAAG,OAAO;AAAA;AAAA;AAAA;AAMtB,qBAAK,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE;AAAI;AAG9B,qBAAK,IAAI,GAAG,MAAM,IAAI,KAAK,GAAG,OAAO,SAAS,OAAO,GAAG;AAAM;AAG9D,sBAAM,aAAa,KAAK,GAAG,SAAS,OAAO;AAAA;AAI7C,qBAAO;AAAA;AAAA;AAMX,gBAAO,WAAY;AAGjB,+BAAkB,GAAG,GAAG,MAAM;AAC5B,kBAAI,GAAG,MAAM,KAAK,KAChB,QAAQ,GACR,IAAI,EAAE,QACN,MAAM,IAAI,WACV,MAAM,IAAI,YAAY;AAExB,mBAAK,IAAI,EAAE,SAAS,OAAM;AACxB,sBAAM,EAAE,KAAK;AACb,sBAAM,EAAE,KAAK,YAAY;AACzB,oBAAI,MAAM,MAAM,MAAM;AACtB,uBAAO,MAAM,MAAQ,IAAI,YAAa,YAAa;AACnD,wBAAS,QAAO,OAAO,KAAM,KAAI,YAAY,KAAK,MAAM;AACxD,kBAAE,KAAK,OAAO;AAAA;AAGhB,kBAAI;AAAO,oBAAI,CAAC,OAAO,OAAO;AAE9B,qBAAO;AAAA;AAGT,8BAAiB,GAAG,GAAG,IAAI,IAAI;AAC7B,kBAAI,GAAG;AAEP,kBAAI,MAAM,IAAI;AACZ,sBAAM,KAAK,KAAK,IAAI;AAAA,qBACf;AAEL,qBAAK,IAAI,MAAM,GAAG,IAAI,IAAI,KAAK;AAE7B,sBAAI,EAAE,MAAM,EAAE,IAAI;AAChB,0BAAM,EAAE,KAAK,EAAE,KAAK,IAAI;AACxB;AAAA;AAAA;AAAA;AAKN,qBAAO;AAAA;AAGT,8BAAkB,GAAG,GAAG,IAAI,MAAM;AAChC,kBAAI,IAAI;AAGR,qBAAO,QAAO;AACZ,kBAAE,OAAO;AACT,oBAAI,EAAE,MAAM,EAAE,MAAM,IAAI;AACxB,kBAAE,MAAM,IAAI,OAAO,EAAE,MAAM,EAAE;AAAA;AAI/B,qBAAO,CAAC,EAAE,MAAM,EAAE,SAAS,GAAG,EAAE,OAAO,GAAG;AAAG;AAAA;AAI/C,mBAAO,SAAU,GAAG,GAAG,IAAI,IAAI,MAAM;AACnC,kBAAI,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,OAAO,GAAG,IAAI,KAAK,MAAM,MAAM,IAAI,IAAI,KACnE,IAAI,IACJ,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,IACrB,KAAK,EAAE,GACP,KAAK,EAAE;AAGT,kBAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;AAElC,uBAAO,IAAI,WAGV,CAAC,EAAE,KAAK,CAAC,EAAE,KAAM,MAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,MAGnD,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI;AAAA;AAI1C,kBAAI,IAAI,WAAU;AAClB,mBAAK,EAAE,IAAI;AACX,kBAAI,EAAE,IAAI,EAAE;AACZ,kBAAI,KAAK,IAAI;AAEb,kBAAI,CAAC,MAAM;AACT,uBAAO;AACP,oBAAI,SAAS,EAAE,IAAI,YAAY,SAAS,EAAE,IAAI;AAC9C,oBAAI,IAAI,WAAW;AAAA;AAKrB,mBAAK,IAAI,GAAG,GAAG,MAAO,IAAG,MAAM,IAAI;AAAI;AAEvC,kBAAI,GAAG,KAAM,IAAG,MAAM;AAAI;AAE1B,kBAAI,IAAI,GAAG;AACT,mBAAG,KAAK;AACR,uBAAO;AAAA,qBACF;AACL,qBAAK,GAAG;AACR,qBAAK,GAAG;AACR,oBAAI;AACJ,qBAAK;AAIL,oBAAI,UAAU,OAAQ,IAAG,KAAK;AAI9B,oBAAI,IAAI,GAAG;AACT,uBAAK,UAAS,IAAI,GAAG;AACrB,uBAAK,UAAS,IAAI,GAAG;AACrB,uBAAK,GAAG;AACR,uBAAK,GAAG;AAAA;AAGV,qBAAK;AACL,sBAAM,GAAG,MAAM,GAAG;AAClB,uBAAO,IAAI;AAGX,uBAAO,OAAO,IAAI,IAAI,UAAU;AAAE;AAClC,qBAAK,GAAG;AACR,qBAAK,CAAC,GAAG,OAAO;AAChB,sBAAM,GAAG;AACT,oBAAI,GAAG,MAAM,OAAO;AAAG;AAIvB,mBAAG;AACD,sBAAI;AAGJ,wBAAM,SAAQ,IAAI,KAAK,IAAI;AAG3B,sBAAI,MAAM,GAAG;AAIX,2BAAO,IAAI;AACX,wBAAI,MAAM;AAAM,6BAAO,OAAO,OAAQ,KAAI,MAAM;AAGhD,wBAAI,UAAU,OAAO;AAarB,wBAAI,IAAI,GAAG;AAGT,0BAAI,KAAK;AAAM,4BAAI,OAAO;AAG1B,6BAAO,UAAS,IAAI,GAAG;AACvB,8BAAQ,KAAK;AACb,6BAAO,IAAI;AAMX,6BAAO,SAAQ,MAAM,KAAK,OAAO,SAAS,GAAG;AAC3C;AAGA,iCAAS,MAAM,KAAK,QAAQ,KAAK,IAAI,OAAO;AAC5C,gCAAQ,KAAK;AACb,8BAAM;AAAA;AAAA,2BAEH;AAML,0BAAI,KAAK,GAAG;AAGV,8BAAM,IAAI;AAAA;AAIZ,6BAAO,GAAG;AACV,8BAAQ,KAAK;AAAA;AAGf,wBAAI,QAAQ;AAAM,6BAAO,CAAC,GAAG,OAAO;AAGpC,6BAAS,KAAK,MAAM,MAAM;AAC1B,2BAAO,IAAI;AAGX,wBAAI,OAAO,IAAI;AAMb,6BAAO,SAAQ,IAAI,KAAK,IAAI,QAAQ,GAAG;AACrC;AAGA,iCAAS,KAAK,KAAK,OAAO,KAAK,IAAI,MAAM;AACzC,+BAAO,IAAI;AAAA;AAAA;AAAA,6BAGN,QAAQ,GAAG;AACpB;AACA,0BAAM,CAAC;AAAA;AAIT,qBAAG,OAAO;AAGV,sBAAI,IAAI,IAAI;AACV,wBAAI,UAAU,GAAG,OAAO;AAAA,yBACnB;AACL,0BAAM,CAAC,GAAG;AACV,2BAAO;AAAA;AAAA,yBAED,QAAO,MAAM,IAAI,MAAM,SAAS;AAE1C,uBAAO,IAAI,MAAM;AAGjB,oBAAI,CAAC,GAAG;AAAI,qBAAG,OAAO,GAAG;AAAA;AAG3B,kBAAI,QAAQ,MAAM;AAGhB,qBAAK,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI;AAAI;AAE7C,uBAAM,GAAG,KAAM,GAAE,IAAI,IAAI,IAAI,WAAW,KAAK,GAAG,IAAI;AAAA,qBAG/C;AACL,kBAAE,IAAI;AACN,kBAAE,IAAI,CAAC;AAAA;AAGT,qBAAO;AAAA;AAAA;AAcX,2BAAgB,GAAG,GAAG,IAAI,KAAI;AAC5B,gBAAI,IAAI,GAAG,IAAI,KAAK;AAEpB,gBAAI,MAAM;AAAM,mBAAK;AAAA;AAChB,uBAAS,IAAI,GAAG;AAErB,gBAAI,CAAC,EAAE;AAAG,qBAAO,EAAE;AAEnB,iBAAK,EAAE,EAAE;AACT,iBAAK,EAAE;AAEP,gBAAI,KAAK,MAAM;AACb,oBAAM,cAAc,EAAE;AACtB,oBAAM,OAAM,KAAK,OAAM,KAAM,OAAM,cAAc,MAAM,cACpD,cAAc,KAAK,MACnB,aAAa,KAAK,IAAI;AAAA,mBACpB;AACL,kBAAI,OAAM,IAAI,WAAU,IAAI,GAAG;AAG/B,kBAAI,EAAE;AAEN,oBAAM,cAAc,EAAE;AACtB,oBAAM,IAAI;AAOV,kBAAI,OAAM,KAAK,OAAM,KAAM,MAAK,KAAK,KAAK,aAAa;AAGrD,uBAAO,MAAM,GAAG,OAAO,KAAK;AAAM;AAClC,sBAAM,cAAc,KAAK;AAAA,qBAGpB;AACL,qBAAK;AACL,sBAAM,aAAa,KAAK,GAAG;AAG3B,oBAAI,IAAI,IAAI,KAAK;AACf,sBAAI,EAAE,IAAI;AAAG,yBAAK,OAAO,KAAK,KAAK,OAAO;AAAI;AAAA,uBACzC;AACL,uBAAK,IAAI;AACT,sBAAI,IAAI,GAAG;AACT,wBAAI,IAAI,KAAK;AAAK,6BAAO;AACzB,2BAAO,KAAK,OAAO;AAAI;AAAA;AAAA;AAAA;AAAA;AAM/B,mBAAO,EAAE,IAAI,KAAK,KAAK,MAAM,MAAM;AAAA;AAKrC,4BAAkB,MAAM,QAAQ;AAC9B,gBAAI,GACF,IAAI,GACJ,IAAI,IAAI,WAAU,KAAK;AAEzB,mBAAO,IAAI,KAAK,QAAQ,KAAK;AAC3B,kBAAI,IAAI,WAAU,KAAK;AAGvB,kBAAI,CAAC,EAAE,GAAG;AACR,oBAAI;AACJ;AAAA,yBACS,OAAO,KAAK,GAAG,IAAI;AAC5B,oBAAI;AAAA;AAAA;AAIR,mBAAO;AAAA;AAQT,6BAAmB,GAAG,GAAG,GAAG;AAC1B,gBAAI,IAAI,GACN,IAAI,EAAE;AAGR,mBAAO,CAAC,EAAE,EAAE,IAAI,EAAE;AAAM;AAGxB,iBAAK,IAAI,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI;AAAI;AAGrC,gBAAK,KAAI,IAAI,IAAI,WAAW,KAAK,SAAS;AAGxC,gBAAE,IAAI,EAAE,IAAI;AAAA,uBAGH,IAAI,SAAS;AAGtB,gBAAE,IAAI,CAAC,EAAE,IAAI;AAAA,mBACR;AACL,gBAAE,IAAI;AACN,gBAAE,IAAI;AAAA;AAGR,mBAAO;AAAA;AAKT,yBAAgB,WAAY;AAC1B,gBAAI,aAAa,+BACf,WAAW,eACX,YAAY,eACZ,kBAAkB,sBAClB,mBAAmB;AAErB,mBAAO,SAAU,GAAG,KAAK,OAAO,GAAG;AACjC,kBAAI,MACF,IAAI,QAAQ,MAAM,IAAI,QAAQ,kBAAkB;AAGlD,kBAAI,gBAAgB,KAAK,IAAI;AAC3B,kBAAE,IAAI,MAAM,KAAK,OAAO,IAAI,IAAI,KAAK;AAAA,qBAChC;AACL,oBAAI,CAAC,OAAO;AAGV,sBAAI,EAAE,QAAQ,YAAY,SAAU,GAAG,IAAI,IAAI;AAC7C,2BAAQ,MAAK,GAAG,kBAAkB,MAAM,KAAK,MAAM,MAAM,IAAI;AAC7D,2BAAO,CAAC,KAAK,KAAK,OAAO,KAAK;AAAA;AAGhC,sBAAI,GAAG;AACL,2BAAO;AAGP,wBAAI,EAAE,QAAQ,UAAU,MAAM,QAAQ,WAAW;AAAA;AAGnD,sBAAI,OAAO;AAAG,2BAAO,IAAI,WAAU,GAAG;AAAA;AAKxC,oBAAI,WAAU,OAAO;AACnB,wBAAM,MACH,iBAAiB,UAAW,KAAI,WAAW,IAAI,MAAM,cAAc;AAAA;AAIxE,kBAAE,IAAI;AAAA;AAGR,gBAAE,IAAI,EAAE,IAAI;AAAA;AAAA;AAShB,0BAAe,GAAG,IAAI,IAAI,GAAG;AAC3B,gBAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IACrB,KAAK,EAAE,GACP,SAAS;AAGX,gBAAI,IAAI;AAQN,mBAAK;AAGH,qBAAK,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI;AAAI;AAC7C,oBAAI,KAAK;AAGT,oBAAI,IAAI,GAAG;AACT,uBAAK;AACL,sBAAI;AACJ,sBAAI,GAAG,KAAK;AAGZ,uBAAK,IAAI,OAAO,IAAI,IAAI,KAAK,KAAK;AAAA,uBAC7B;AACL,uBAAK,SAAU,KAAI,KAAK;AAExB,sBAAI,MAAM,GAAG,QAAQ;AAEnB,wBAAI,GAAG;AAGL,6BAAO,GAAG,UAAU,IAAI,GAAG,KAAK;AAAG;AACnC,0BAAI,KAAK;AACT,0BAAI;AACJ,2BAAK;AACL,0BAAI,IAAI,WAAW;AAAA,2BACd;AACL;AAAA;AAAA,yBAEG;AACL,wBAAI,IAAI,GAAG;AAGX,yBAAK,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI;AAAI;AAGlC,yBAAK;AAIL,wBAAI,IAAI,WAAW;AAGnB,yBAAK,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,KAAK,KAAK;AAAA;AAAA;AAIlD,oBAAI,KAAK,KAAK,KAKb,GAAG,KAAK,MAAM,QAAS,KAAI,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI;AAEvD,oBAAI,KAAK,IACL,OAAM,MAAO,OAAM,KAAK,MAAO,GAAE,IAAI,IAAI,IAAI,MAC9C,KAAK,KAAK,MAAM,KAAM,OAAM,KAAK,KAAK,MAAM,KAG3C,KAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAM,KAC7D,MAAO,GAAE,IAAI,IAAI,IAAI;AAExB,oBAAI,KAAK,KAAK,CAAC,GAAG,IAAI;AACpB,qBAAG,SAAS;AAEZ,sBAAI,GAAG;AAGL,0BAAM,EAAE,IAAI;AAGZ,uBAAG,KAAK,OAAQ,YAAW,KAAK,YAAY;AAC5C,sBAAE,IAAI,CAAC,MAAM;AAAA,yBACR;AAGL,uBAAG,KAAK,EAAE,IAAI;AAAA;AAGhB,yBAAO;AAAA;AAIT,oBAAI,KAAK,GAAG;AACV,qBAAG,SAAS;AACZ,sBAAI;AACJ;AAAA,uBACK;AACL,qBAAG,SAAS,KAAK;AACjB,sBAAI,OAAO,WAAW;AAItB,qBAAG,MAAM,IAAI,IAAI,UAAU,IAAI,OAAO,IAAI,KAAK,OAAO,MAAM,IAAI;AAAA;AAIlE,oBAAI,GAAG;AAEL,6BAAU;AAGR,wBAAI,MAAM,GAAG;AAGX,2BAAK,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI;AAAI;AAC7C,0BAAI,GAAG,MAAM;AACb,2BAAK,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI;AAAI;AAGlC,0BAAI,KAAK,GAAG;AACV,0BAAE;AACF,4BAAI,GAAG,MAAM;AAAM,6BAAG,KAAK;AAAA;AAG7B;AAAA,2BACK;AACL,yBAAG,OAAO;AACV,0BAAI,GAAG,OAAO;AAAM;AACpB,yBAAG,QAAQ;AACX,0BAAI;AAAA;AAAA;AAAA;AAMV,qBAAK,IAAI,GAAG,QAAQ,GAAG,EAAE,OAAO,GAAG,GAAG;AAAM;AAAA;AAI9C,kBAAI,EAAE,IAAI,SAAS;AACjB,kBAAE,IAAI,EAAE,IAAI;AAAA,yBAGH,EAAE,IAAI,SAAS;AACxB,kBAAE,IAAI,CAAC,EAAE,IAAI;AAAA;AAAA;AAIjB,mBAAO;AAAA;AAIT,2BAAiB,GAAG;AAClB,gBAAI,KACF,IAAI,EAAE;AAER,gBAAI,MAAM;AAAM,qBAAO,EAAE;AAEzB,kBAAM,cAAc,EAAE;AAEtB,kBAAM,KAAK,cAAc,KAAK,aAC1B,cAAc,KAAK,KACnB,aAAa,KAAK,GAAG;AAEzB,mBAAO,EAAE,IAAI,IAAI,MAAM,MAAM;AAAA;AAU/B,YAAE,gBAAgB,EAAE,MAAM,WAAY;AACpC,gBAAI,IAAI,IAAI,WAAU;AACtB,gBAAI,EAAE,IAAI;AAAG,gBAAE,IAAI;AACnB,mBAAO;AAAA;AAWT,YAAE,aAAa,SAAU,GAAG,GAAG;AAC7B,mBAAO,QAAQ,MAAM,IAAI,WAAU,GAAG;AAAA;AAiBxC,YAAE,gBAAgB,EAAE,KAAK,SAAU,IAAI,IAAI;AACzC,gBAAI,GAAG,GAAG,GACR,IAAI;AAEN,gBAAI,MAAM,MAAM;AACd,uBAAS,IAAI,GAAG;AAChB,kBAAI,MAAM;AAAM,qBAAK;AAAA;AAChB,yBAAS,IAAI,GAAG;AAErB,qBAAO,OAAM,IAAI,WAAU,IAAI,KAAK,EAAE,IAAI,GAAG;AAAA;AAG/C,gBAAI,CAAE,KAAI,EAAE;AAAI,qBAAO;AACvB,gBAAM,MAAI,EAAE,SAAS,KAAK,SAAS,KAAK,IAAI,aAAa;AAGzD,gBAAI,IAAI,EAAE;AAAI,qBAAO,IAAI,MAAM,GAAG,KAAK,IAAI;AAAI;AAC/C,gBAAI,IAAI;AAAG,kBAAI;AAEf,mBAAO;AAAA;AAwBT,YAAE,YAAY,EAAE,MAAM,SAAU,GAAG,GAAG;AACpC,mBAAO,IAAI,MAAM,IAAI,WAAU,GAAG,IAAI,gBAAgB;AAAA;AAQxD,YAAE,qBAAqB,EAAE,OAAO,SAAU,GAAG,GAAG;AAC9C,mBAAO,IAAI,MAAM,IAAI,WAAU,GAAG,IAAI,GAAG;AAAA;AAmB3C,YAAE,kBAAkB,EAAE,MAAM,SAAU,GAAG,GAAG;AAC1C,gBAAI,MAAM,UAAU,GAAG,GAAG,MAAM,QAAQ,QAAQ,QAAQ,GACtD,IAAI;AAEN,gBAAI,IAAI,WAAU;AAGlB,gBAAI,EAAE,KAAK,CAAC,EAAE,aAAa;AACzB,oBAAM,MACH,iBAAiB,8BAA8B,QAAQ;AAAA;AAG5D,gBAAI,KAAK;AAAM,kBAAI,IAAI,WAAU;AAGjC,qBAAS,EAAE,IAAI;AAGf,gBAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI;AAIhF,kBAAI,IAAI,WAAU,KAAK,IAAI,CAAC,QAAQ,IAAI,SAAS,IAAI,MAAM,KAAK,CAAC,QAAQ;AACzE,qBAAO,IAAI,EAAE,IAAI,KAAK;AAAA;AAGxB,qBAAS,EAAE,IAAI;AAEf,gBAAI,GAAG;AAGL,kBAAI,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE;AAAG,uBAAO,IAAI,WAAU;AAE/C,yBAAW,CAAC,UAAU,EAAE,eAAe,EAAE;AAEzC,kBAAI;AAAU,oBAAI,EAAE,IAAI;AAAA,uBAIf,EAAE,IAAI,KAAM,GAAE,IAAI,KAAK,EAAE,IAAI,MAAO,GAAE,KAAK,IAElD,EAAE,EAAE,KAAK,KAAK,UAAU,EAAE,EAAE,MAAM,OAElC,EAAE,EAAE,KAAK,QAAQ,UAAU,EAAE,EAAE,MAAM,aAAa;AAGpD,kBAAI,EAAE,IAAI,KAAK,MAAM,KAAK,KAAK;AAG/B,kBAAI,EAAE,IAAI;AAAI,oBAAI,IAAI;AAGtB,qBAAO,IAAI,WAAU,SAAS,IAAI,IAAI;AAAA,uBAE7B,eAAe;AAKxB,kBAAI,SAAS,gBAAgB,WAAW;AAAA;AAG1C,gBAAI,QAAQ;AACV,qBAAO,IAAI,WAAU;AACrB,kBAAI;AAAQ,kBAAE,IAAI;AAClB,uBAAS,MAAM;AAAA,mBACV;AACL,kBAAI,KAAK,IAAI,CAAC,QAAQ;AACtB,uBAAS,IAAI;AAAA;AAGf,gBAAI,IAAI,WAAU;AAGlB,uBAAU;AAER,kBAAI,QAAQ;AACV,oBAAI,EAAE,MAAM;AACZ,oBAAI,CAAC,EAAE;AAAG;AAEV,oBAAI,GAAG;AACL,sBAAI,EAAE,EAAE,SAAS;AAAG,sBAAE,EAAE,SAAS;AAAA,2BACxB,UAAU;AACnB,sBAAI,EAAE,IAAI;AAAA;AAAA;AAId,kBAAI,GAAG;AACL,oBAAI,UAAU,IAAI;AAClB,oBAAI,MAAM;AAAG;AACb,yBAAS,IAAI;AAAA,qBACR;AACL,oBAAI,EAAE,MAAM;AACZ,uBAAM,GAAG,EAAE,IAAI,GAAG;AAElB,oBAAI,EAAE,IAAI,IAAI;AACZ,2BAAS,MAAM;AAAA,uBACV;AACL,sBAAI,CAAC,QAAQ;AACb,sBAAI,MAAM;AAAG;AACb,2BAAS,IAAI;AAAA;AAAA;AAIjB,kBAAI,EAAE,MAAM;AAEZ,kBAAI,GAAG;AACL,oBAAI,EAAE,KAAK,EAAE,EAAE,SAAS;AAAG,oBAAE,EAAE,SAAS;AAAA,yBAC/B,UAAU;AACnB,oBAAI,EAAE,IAAI;AAAA;AAAA;AAId,gBAAI;AAAU,qBAAO;AACrB,gBAAI;AAAQ,kBAAI,IAAI,IAAI;AAExB,mBAAO,IAAI,EAAE,IAAI,KAAK,IAAI,OAAM,GAAG,eAAe,eAAe,QAAQ;AAAA;AAY3E,YAAE,eAAe,SAAU,IAAI;AAC7B,gBAAI,IAAI,IAAI,WAAU;AACtB,gBAAI,MAAM;AAAM,mBAAK;AAAA;AAChB,uBAAS,IAAI,GAAG;AACrB,mBAAO,OAAM,GAAG,EAAE,IAAI,GAAG;AAAA;AAQ3B,YAAE,YAAY,EAAE,KAAK,SAAU,GAAG,GAAG;AACnC,mBAAO,QAAQ,MAAM,IAAI,WAAU,GAAG,QAAQ;AAAA;AAOhD,YAAE,WAAW,WAAY;AACvB,mBAAO,CAAC,CAAC,KAAK;AAAA;AAQhB,YAAE,gBAAgB,EAAE,KAAK,SAAU,GAAG,GAAG;AACvC,mBAAO,QAAQ,MAAM,IAAI,WAAU,GAAG,MAAM;AAAA;AAQ9C,YAAE,yBAAyB,EAAE,MAAM,SAAU,GAAG,GAAG;AACjD,mBAAQ,KAAI,QAAQ,MAAM,IAAI,WAAU,GAAG,SAAS,KAAK,MAAM;AAAA;AAQjE,YAAE,YAAY,WAAY;AACxB,mBAAO,CAAC,CAAC,KAAK,KAAK,SAAS,KAAK,IAAI,YAAY,KAAK,EAAE,SAAS;AAAA;AAQnE,YAAE,aAAa,EAAE,KAAK,SAAU,GAAG,GAAG;AACpC,mBAAO,QAAQ,MAAM,IAAI,WAAU,GAAG,MAAM;AAAA;AAQ9C,YAAE,sBAAsB,EAAE,MAAM,SAAU,GAAG,GAAG;AAC9C,mBAAQ,KAAI,QAAQ,MAAM,IAAI,WAAU,GAAG,SAAS,MAAM,MAAM;AAAA;AAOlE,YAAE,QAAQ,WAAY;AACpB,mBAAO,CAAC,KAAK;AAAA;AAOf,YAAE,aAAa,WAAY;AACzB,mBAAO,KAAK,IAAI;AAAA;AAOlB,YAAE,aAAa,WAAY;AACzB,mBAAO,KAAK,IAAI;AAAA;AAOlB,YAAE,SAAS,WAAY;AACrB,mBAAO,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,MAAM;AAAA;AAwBlC,YAAE,QAAQ,SAAU,GAAG,GAAG;AACxB,gBAAI,GAAG,GAAG,GAAG,MACX,IAAI,MACJ,IAAI,EAAE;AAER,gBAAI,IAAI,WAAU,GAAG;AACrB,gBAAI,EAAE;AAGN,gBAAI,CAAC,KAAK,CAAC;AAAG,qBAAO,IAAI,WAAU;AAGnC,gBAAI,KAAK,GAAG;AACV,gBAAE,IAAI,CAAC;AACP,qBAAO,EAAE,KAAK;AAAA;AAGhB,gBAAI,KAAK,EAAE,IAAI,UACb,KAAK,EAAE,IAAI,UACX,KAAK,EAAE,GACP,KAAK,EAAE;AAET,gBAAI,CAAC,MAAM,CAAC,IAAI;AAGd,kBAAI,CAAC,MAAM,CAAC;AAAI,uBAAO,KAAM,GAAE,IAAI,CAAC,GAAG,KAAK,IAAI,WAAU,KAAK,IAAI;AAGnE,kBAAI,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI;AAGpB,uBAAO,GAAG,KAAM,GAAE,IAAI,CAAC,GAAG,KAAK,IAAI,WAAU,GAAG,KAAK,IAGpD,iBAAiB,IAAI,KAAK;AAAA;AAAA;AAI/B,iBAAK,SAAS;AACd,iBAAK,SAAS;AACd,iBAAK,GAAG;AAGR,gBAAI,IAAI,KAAK,IAAI;AAEf,kBAAI,OAAO,IAAI,GAAG;AAChB,oBAAI,CAAC;AACL,oBAAI;AAAA,qBACC;AACL,qBAAK;AACL,oBAAI;AAAA;AAGN,gBAAE;AAGF,mBAAK,IAAI,GAAG,KAAK,EAAE,KAAK;AAAG;AAC3B,gBAAE;AAAA,mBACG;AAGL,kBAAK,QAAQ,KAAI,GAAG,UAAW,KAAI,GAAG,WAAW,IAAI;AAErD,mBAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAE1B,oBAAI,GAAG,MAAM,GAAG,IAAI;AAClB,yBAAO,GAAG,KAAK,GAAG;AAClB;AAAA;AAAA;AAAA;AAMN,gBAAI;AAAM,kBAAI,IAAI,KAAK,IAAI,KAAK,GAAG,EAAE,IAAI,CAAC,EAAE;AAE5C,gBAAK,KAAI,GAAG,UAAW,KAAI,GAAG;AAI9B,gBAAI,IAAI;AAAG,qBAAO,KAAK,GAAG,OAAO;AAAE;AACnC,gBAAI,OAAO;AAGX,mBAAO,IAAI,KAAI;AAEb,kBAAI,GAAG,EAAE,KAAK,GAAG,IAAI;AACnB,qBAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,GAAG,KAAK;AAAE;AACrC,kBAAE,GAAG;AACL,mBAAG,MAAM;AAAA;AAGX,iBAAG,MAAM,GAAG;AAAA;AAId,mBAAO,GAAG,MAAM,GAAG,GAAG,OAAO,GAAG,IAAI,EAAE;AAAG;AAGzC,gBAAI,CAAC,GAAG,IAAI;AAIV,gBAAE,IAAI,iBAAiB,IAAI,KAAK;AAChC,gBAAE,IAAI,CAAC,EAAE,IAAI;AACb,qBAAO;AAAA;AAKT,mBAAO,UAAU,GAAG,IAAI;AAAA;AAyB1B,YAAE,SAAS,EAAE,MAAM,SAAU,GAAG,GAAG;AACjC,gBAAI,GAAG,GACL,IAAI;AAEN,gBAAI,IAAI,WAAU,GAAG;AAGrB,gBAAI,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI;AAClC,qBAAO,IAAI,WAAU;AAAA,uBAGZ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI;AACjC,qBAAO,IAAI,WAAU;AAAA;AAGvB,gBAAI,eAAe,GAAG;AAIpB,kBAAI,EAAE;AACN,gBAAE,IAAI;AACN,kBAAI,IAAI,GAAG,GAAG,GAAG;AACjB,gBAAE,IAAI;AACN,gBAAE,KAAK;AAAA,mBACF;AACL,kBAAI,IAAI,GAAG,GAAG,GAAG;AAAA;AAGnB,gBAAI,EAAE,MAAM,EAAE,MAAM;AAGpB,gBAAI,CAAC,EAAE,EAAE,MAAM,eAAe;AAAG,gBAAE,IAAI,EAAE;AAEzC,mBAAO;AAAA;AAwBT,YAAE,eAAe,EAAE,QAAQ,SAAU,GAAG,GAAG;AACzC,gBAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAClD,MAAM,UACN,IAAI,MACJ,KAAK,EAAE,GACP,KAAM,KAAI,IAAI,WAAU,GAAG,IAAI;AAGjC,gBAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI;AAGlC,kBAAI,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI;AAC9D,kBAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAAA,qBACb;AACL,kBAAE,KAAK,EAAE;AAGT,oBAAI,CAAC,MAAM,CAAC,IAAI;AACd,oBAAE,IAAI,EAAE,IAAI;AAAA,uBAGP;AACL,oBAAE,IAAI,CAAC;AACP,oBAAE,IAAI;AAAA;AAAA;AAIV,qBAAO;AAAA;AAGT,gBAAI,SAAS,EAAE,IAAI,YAAY,SAAS,EAAE,IAAI;AAC9C,cAAE,KAAK,EAAE;AACT,kBAAM,GAAG;AACT,kBAAM,GAAG;AAGT,gBAAI,MAAM;AAAK,mBAAK,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,MAAM,KAAK,MAAM;AAGpE,iBAAK,IAAI,MAAM,KAAK,KAAK,IAAI,KAAK,GAAG,KAAK;AAAG;AAE7C,mBAAO;AACP,uBAAW;AAEX,iBAAK,IAAI,KAAK,EAAE,KAAK,KAAI;AACvB,kBAAI;AACJ,oBAAM,GAAG,KAAK;AACd,oBAAM,GAAG,KAAK,WAAW;AAEzB,mBAAK,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,KAAI;AAC/B,sBAAM,GAAG,EAAE,KAAK;AAChB,sBAAM,GAAG,KAAK,WAAW;AACzB,oBAAI,MAAM,MAAM,MAAM;AACtB,sBAAM,MAAM,MAAQ,IAAI,WAAY,WAAY,GAAG,KAAK;AACxD,oBAAK,OAAM,OAAO,KAAM,KAAI,WAAW,KAAK,MAAM;AAClD,mBAAG,OAAO,MAAM;AAAA;AAGlB,iBAAG,KAAK;AAAA;AAGV,gBAAI,GAAG;AACL,gBAAE;AAAA,mBACG;AACL,iBAAG,OAAO,GAAG;AAAA;AAGf,mBAAO,UAAU,GAAG,IAAI;AAAA;AAQ1B,YAAE,UAAU,WAAY;AACtB,gBAAI,IAAI,IAAI,WAAU;AACtB,cAAE,IAAI,CAAC,EAAE,KAAK;AACd,mBAAO;AAAA;AAwBT,YAAE,OAAO,SAAU,GAAG,GAAG;AACvB,gBAAI,GACF,IAAI,MACJ,IAAI,EAAE;AAER,gBAAI,IAAI,WAAU,GAAG;AACrB,gBAAI,EAAE;AAGN,gBAAI,CAAC,KAAK,CAAC;AAAG,qBAAO,IAAI,WAAU;AAGlC,gBAAI,KAAK,GAAG;AACX,gBAAE,IAAI,CAAC;AACP,qBAAO,EAAE,MAAM;AAAA;AAGjB,gBAAI,KAAK,EAAE,IAAI,UACb,KAAK,EAAE,IAAI,UACX,KAAK,EAAE,GACP,KAAK,EAAE;AAET,gBAAI,CAAC,MAAM,CAAC,IAAI;AAGd,kBAAI,CAAC,MAAM,CAAC;AAAI,uBAAO,IAAI,WAAU,IAAI;AAIzC,kBAAI,CAAC,GAAG,MAAM,CAAC,GAAG;AAAI,uBAAO,GAAG,KAAK,IAAI,IAAI,WAAU,GAAG,KAAK,IAAI,IAAI;AAAA;AAGzE,iBAAK,SAAS;AACd,iBAAK,SAAS;AACd,iBAAK,GAAG;AAGR,gBAAI,IAAI,KAAK,IAAI;AACf,kBAAI,IAAI,GAAG;AACT,qBAAK;AACL,oBAAI;AAAA,qBACC;AACL,oBAAI,CAAC;AACL,oBAAI;AAAA;AAGN,gBAAE;AACF,qBAAO,KAAK,EAAE,KAAK;AAAG;AACtB,gBAAE;AAAA;AAGJ,gBAAI,GAAG;AACP,gBAAI,GAAG;AAGP,gBAAI,IAAI,IAAI;AAAG,kBAAI,IAAI,KAAK,IAAI,KAAK,GAAG,IAAI;AAG5C,iBAAK,IAAI,GAAG,KAAI;AACd,kBAAK,IAAG,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,KAAK,OAAO;AAC3C,iBAAG,KAAK,SAAS,GAAG,KAAK,IAAI,GAAG,KAAK;AAAA;AAGvC,gBAAI,GAAG;AACL,mBAAK,CAAC,GAAG,OAAO;AAChB,gBAAE;AAAA;AAKJ,mBAAO,UAAU,GAAG,IAAI;AAAA;AAmB1B,YAAE,YAAY,EAAE,KAAK,SAAU,IAAI,IAAI;AACrC,gBAAI,GAAG,GAAG,GACR,IAAI;AAEN,gBAAI,MAAM,QAAQ,OAAO,CAAC,CAAC,IAAI;AAC7B,uBAAS,IAAI,GAAG;AAChB,kBAAI,MAAM;AAAM,qBAAK;AAAA;AAChB,yBAAS,IAAI,GAAG;AAErB,qBAAO,OAAM,IAAI,WAAU,IAAI,IAAI;AAAA;AAGrC,gBAAI,CAAE,KAAI,EAAE;AAAI,qBAAO;AACvB,gBAAI,EAAE,SAAS;AACf,gBAAI,IAAI,WAAW;AAEnB,gBAAI,IAAI,EAAE,IAAI;AAGZ,qBAAO,IAAI,MAAM,GAAG,KAAK,IAAI;AAAI;AAGjC,mBAAK,IAAI,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI;AAAI;AAAA;AAGvC,gBAAI,MAAM,EAAE,IAAI,IAAI;AAAG,kBAAI,EAAE,IAAI;AAEjC,mBAAO;AAAA;AAYT,YAAE,YAAY,SAAU,GAAG;AACzB,qBAAS,GAAG,CAAC,mBAAkB;AAC/B,mBAAO,KAAK,MAAM,OAAO;AAAA;AAe3B,YAAE,aAAa,EAAE,OAAO,WAAY;AAClC,gBAAI,GAAG,GAAG,GAAG,KAAK,GAChB,IAAI,MACJ,IAAI,EAAE,GACN,IAAI,EAAE,GACN,IAAI,EAAE,GACN,KAAK,iBAAiB,GACtB,OAAO,IAAI,WAAU;AAGvB,gBAAI,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI;AAC1B,qBAAO,IAAI,WAAU,CAAC,KAAK,IAAI,KAAM,EAAC,KAAK,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI;AAAA;AAIvE,gBAAI,KAAK,KAAK,CAAC,QAAQ;AAIvB,gBAAI,KAAK,KAAK,KAAK,IAAI,GAAG;AACxB,kBAAI,cAAc;AAClB,kBAAK,GAAE,SAAS,KAAK,KAAK;AAAG,qBAAK;AAClC,kBAAI,KAAK,KAAK,CAAC;AACf,kBAAI,SAAU,KAAI,KAAK,KAAM,KAAI,KAAK,IAAI;AAE1C,kBAAI,KAAK,IAAI,GAAG;AACd,oBAAI,OAAO;AAAA,qBACN;AACL,oBAAI,EAAE;AACN,oBAAI,EAAE,MAAM,GAAG,EAAE,QAAQ,OAAO,KAAK;AAAA;AAGvC,kBAAI,IAAI,WAAU;AAAA,mBACb;AACL,kBAAI,IAAI,WAAU,IAAI;AAAA;AAOxB,gBAAI,EAAE,EAAE,IAAI;AACV,kBAAI,EAAE;AACN,kBAAI,IAAI;AACR,kBAAI,IAAI;AAAG,oBAAI;AAGf,yBAAU;AACR,oBAAI;AACJ,oBAAI,KAAK,MAAM,EAAE,KAAK,IAAI,GAAG,GAAG,IAAI;AAEpC,oBAAI,cAAc,EAAE,GAAG,MAAM,GAAG,OAAQ,KAAI,cAAc,EAAE,IAAI,MAAM,GAAG,IAAI;AAK3E,sBAAI,EAAE,IAAI;AAAG,sBAAE;AACf,sBAAI,EAAE,MAAM,IAAI,GAAG,IAAI;AAKvB,sBAAI,KAAK,UAAU,CAAC,OAAO,KAAK,QAAQ;AAItC,wBAAI,CAAC,KAAK;AACR,6BAAM,GAAG,EAAE,IAAI,iBAAiB,GAAG;AAEnC,0BAAI,EAAE,MAAM,GAAG,GAAG,IAAI;AACpB,4BAAI;AACJ;AAAA;AAAA;AAIJ,0BAAM;AACN,yBAAK;AACL,0BAAM;AAAA,yBACD;AAIL,wBAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,MAAM,EAAE,OAAO,MAAM,KAAK;AAG7C,6BAAM,GAAG,EAAE,IAAI,iBAAiB,GAAG;AACnC,0BAAI,CAAC,EAAE,MAAM,GAAG,GAAG;AAAA;AAGrB;AAAA;AAAA;AAAA;AAAA;AAMR,mBAAO,OAAM,GAAG,EAAE,IAAI,iBAAiB,GAAG,eAAe;AAAA;AAa3D,YAAE,gBAAgB,SAAU,IAAI,IAAI;AAClC,gBAAI,MAAM,MAAM;AACd,uBAAS,IAAI,GAAG;AAChB;AAAA;AAEF,mBAAO,QAAO,MAAM,IAAI,IAAI;AAAA;AAgB9B,YAAE,UAAU,SAAU,IAAI,IAAI;AAC5B,gBAAI,MAAM,MAAM;AACd,uBAAS,IAAI,GAAG;AAChB,mBAAK,KAAK,KAAK,IAAI;AAAA;AAErB,mBAAO,QAAO,MAAM,IAAI;AAAA;AA6B1B,YAAE,WAAW,SAAU,IAAI,IAAI,SAAQ;AACrC,gBAAI,KACF,IAAI;AAEN,gBAAI,WAAU,MAAM;AAClB,kBAAI,MAAM,QAAQ,MAAM,OAAO,MAAM,UAAU;AAC7C,0BAAS;AACT,qBAAK;AAAA,yBACI,MAAM,OAAO,MAAM,UAAU;AACtC,0BAAS;AACT,qBAAK,KAAK;AAAA,qBACL;AACL,0BAAS;AAAA;AAAA,uBAEF,OAAO,WAAU,UAAU;AACpC,oBAAM,MACH,iBAAiB,6BAA6B;AAAA;AAGnD,kBAAM,EAAE,QAAQ,IAAI;AAEpB,gBAAI,EAAE,GAAG;AACP,kBAAI,GACF,MAAM,IAAI,MAAM,MAChB,KAAK,CAAC,QAAO,WACb,KAAK,CAAC,QAAO,oBACb,iBAAiB,QAAO,kBAAkB,IAC1C,UAAU,IAAI,IACd,eAAe,IAAI,IACnB,QAAQ,EAAE,IAAI,GACd,YAAY,QAAQ,QAAQ,MAAM,KAAK,SACvC,MAAM,UAAU;AAElB,kBAAI;AAAI,oBAAI,IAAI,KAAK,IAAI,KAAK,GAAG,OAAO;AAExC,kBAAI,KAAK,KAAK,MAAM,GAAG;AACrB,oBAAI,MAAM,MAAM;AAChB,0BAAU,UAAU,OAAO,GAAG;AAC9B,uBAAO,IAAI,KAAK,KAAK;AAAI,6BAAW,iBAAiB,UAAU,OAAO,GAAG;AACzE,oBAAI,KAAK;AAAG,6BAAW,iBAAiB,UAAU,MAAM;AACxD,oBAAI;AAAO,4BAAU,MAAM;AAAA;AAG7B,oBAAM,eACH,UAAW,SAAO,oBAAoB,MAAQ,OAAK,CAAC,QAAO,qBAC1D,aAAa,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ,MACvD,OAAQ,SAAO,0BAA0B,OACxC,gBACD;AAAA;AAGL,mBAAQ,SAAO,UAAU,MAAM,MAAO,SAAO,UAAU;AAAA;AAezD,YAAE,aAAa,SAAU,IAAI;AAC3B,gBAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,GAAG,GAAG,GAC1C,IAAI,MACJ,KAAK,EAAE;AAET,gBAAI,MAAM,MAAM;AACd,kBAAI,IAAI,WAAU;AAGlB,kBAAI,CAAC,EAAE,eAAgB,GAAE,KAAK,EAAE,MAAM,MAAM,EAAE,GAAG,MAAM;AACrD,sBAAM,MACH,iBAAiB,cACf,GAAE,cAAc,mBAAmB,sBAAsB,QAAQ;AAAA;AAAA;AAI1E,gBAAI,CAAC;AAAI,qBAAO,IAAI,WAAU;AAE9B,gBAAI,IAAI,WAAU;AAClB,iBAAK,KAAK,IAAI,WAAU;AACxB,iBAAK,KAAK,IAAI,WAAU;AACxB,gBAAI,cAAc;AAIlB,gBAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI;AAC3B,cAAE,EAAE,KAAK,SAAU,OAAM,IAAI,YAAY,IAAI,WAAW,MAAM;AAC9D,iBAAK,CAAC,MAAM,EAAE,WAAW,KAAK,IAAK,IAAI,IAAI,IAAI,KAAM;AAErD,kBAAM;AACN,sBAAU,IAAI;AACd,gBAAI,IAAI,WAAU;AAGlB,eAAG,EAAE,KAAK;AAEV,uBAAW;AACT,kBAAI,IAAI,GAAG,GAAG,GAAG;AACjB,mBAAK,GAAG,KAAK,EAAE,MAAM;AACrB,kBAAI,GAAG,WAAW,OAAO;AAAG;AAC5B,mBAAK;AACL,mBAAK;AACL,mBAAK,GAAG,KAAK,EAAE,MAAM,KAAK;AAC1B,mBAAK;AACL,kBAAI,EAAE,MAAM,EAAE,MAAM,KAAK;AACzB,kBAAI;AAAA;AAGN,iBAAK,IAAI,GAAG,MAAM,KAAK,IAAI,GAAG;AAC9B,iBAAK,GAAG,KAAK,GAAG,MAAM;AACtB,iBAAK,GAAG,KAAK,GAAG,MAAM;AACtB,eAAG,IAAI,GAAG,IAAI,EAAE;AAChB,gBAAI,IAAI;AAGR,gBAAI,IAAI,IAAI,IAAI,GAAG,eAAe,MAAM,GAAG,MAAM,WAC7C,IAAI,IAAI,IAAI,GAAG,eAAe,MAAM,GAAG,SAAS,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI;AAExE,sBAAU;AAEV,mBAAO;AAAA;AAOT,YAAE,WAAW,WAAY;AACvB,mBAAO,CAAC,QAAQ;AAAA;AAelB,YAAE,cAAc,SAAU,IAAI,IAAI;AAChC,gBAAI,MAAM;AAAM,uBAAS,IAAI,GAAG;AAChC,mBAAO,QAAO,MAAM,IAAI,IAAI;AAAA;AAe9B,YAAE,WAAW,SAAU,GAAG;AACxB,gBAAI,KACF,IAAI,MACJ,IAAI,EAAE,GACN,IAAI,EAAE;AAGR,gBAAI,MAAM,MAAM;AACd,kBAAI,GAAG;AACL,sBAAM;AACN,oBAAI,IAAI;AAAG,wBAAM,MAAM;AAAA,qBAClB;AACL,sBAAM;AAAA;AAAA,mBAEH;AACL,kBAAI,KAAK,MAAM;AACb,sBAAM,KAAK,cAAc,KAAK,aAC3B,cAAc,cAAc,EAAE,IAAI,KAClC,aAAa,cAAc,EAAE,IAAI,GAAG;AAAA,yBAC9B,MAAM,MAAM,gCAAgC;AACrD,oBAAI,OAAM,IAAI,WAAU,IAAI,iBAAiB,IAAI,GAAG;AACpD,sBAAM,aAAa,cAAc,EAAE,IAAI,EAAE,GAAG;AAAA,qBACvC;AACL,yBAAS,GAAG,GAAG,SAAS,QAAQ;AAChC,sBAAM,YAAY,aAAa,cAAc,EAAE,IAAI,GAAG,MAAM,IAAI,GAAG,GAAG;AAAA;AAGxE,kBAAI,IAAI,KAAK,EAAE,EAAE;AAAI,sBAAM,MAAM;AAAA;AAGnC,mBAAO;AAAA;AAQT,YAAE,UAAU,EAAE,SAAS,WAAY;AACjC,mBAAO,QAAQ;AAAA;AAIjB,YAAE,eAAe;AAEjB,cAAI,gBAAgB;AAAM,uBAAU,IAAI;AAExC,iBAAO;AAAA;AAUT,0BAAkB,GAAG;AACnB,cAAI,IAAI,IAAI;AACZ,iBAAO,IAAI,KAAK,MAAM,IAAI,IAAI,IAAI;AAAA;AAKpC,+BAAuB,GAAG;AACxB,cAAI,GAAG,GACL,IAAI,GACJ,IAAI,EAAE,QACN,IAAI,EAAE,KAAK;AAEb,iBAAO,IAAI,KAAI;AACb,gBAAI,EAAE,OAAO;AACb,gBAAI,WAAW,EAAE;AACjB,mBAAO,KAAK,IAAI,MAAM;AAAE;AACxB,iBAAK;AAAA;AAIP,eAAK,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO;AAAI;AAE7C,iBAAO,EAAE,MAAM,GAAG,IAAI,KAAK;AAAA;AAK7B,yBAAiB,GAAG,GAAG;AACrB,cAAI,GAAG,GACL,KAAK,EAAE,GACP,KAAK,EAAE,GACP,IAAI,EAAE,GACN,IAAI,EAAE,GACN,IAAI,EAAE,GACN,IAAI,EAAE;AAGR,cAAI,CAAC,KAAK,CAAC;AAAG,mBAAO;AAErB,cAAI,MAAM,CAAC,GAAG;AACd,cAAI,MAAM,CAAC,GAAG;AAGd,cAAI,KAAK;AAAG,mBAAO,IAAI,IAAI,IAAI,CAAC,IAAI;AAGpC,cAAI,KAAK;AAAG,mBAAO;AAEnB,cAAI,IAAI;AACR,cAAI,KAAK;AAGT,cAAI,CAAC,MAAM,CAAC;AAAI,mBAAO,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;AAG7C,cAAI,CAAC;AAAG,mBAAO,IAAI,IAAI,IAAI,IAAI;AAE/B,cAAK,KAAI,GAAG,UAAW,KAAI,GAAG,UAAU,IAAI;AAG5C,eAAK,IAAI,GAAG,IAAI,GAAG;AAAK,gBAAI,GAAG,MAAM,GAAG;AAAI,qBAAO,GAAG,KAAK,GAAG,KAAK,IAAI,IAAI;AAG3E,iBAAO,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA;AAOtC,0BAAkB,GAAG,MAAK,MAAK,MAAM;AACnC,cAAI,IAAI,QAAO,IAAI,QAAO,MAAM,UAAU,IAAI;AAC5C,kBAAM,MACJ,iBAAkB,SAAQ,cAAe,QAAO,KAAK,WAClD,IAAI,QAAO,IAAI,OAAM,oBAAoB,sBACzC,+BAA+B,OAAO;AAAA;AAAA;AAM/C,uBAAe,GAAG;AAChB,cAAI,IAAI,EAAE,EAAE,SAAS;AACrB,iBAAO,SAAS,EAAE,IAAI,aAAa,KAAK,EAAE,EAAE,KAAK,KAAK;AAAA;AAIxD,+BAAuB,KAAK,GAAG;AAC7B,iBAAQ,KAAI,SAAS,IAAI,IAAI,OAAO,KAAK,MAAM,IAAI,MAAM,KAAK,OAC5D,KAAI,IAAI,MAAM,QAAQ;AAAA;AAI1B,8BAAsB,KAAK,GAAG,GAAG;AAC/B,cAAI,KAAK;AAGT,cAAI,IAAI,GAAG;AAGT,iBAAK,KAAK,IAAI,KAAK,EAAE,GAAG,MAAM;AAAE;AAChC,kBAAM,KAAK;AAAA,iBAGN;AACL,kBAAM,IAAI;AAGV,gBAAI,EAAE,IAAI,KAAK;AACb,mBAAK,KAAK,GAAG,KAAK,KAAK,EAAE,GAAG,MAAM;AAAE;AACpC,qBAAO;AAAA,uBACE,IAAI,KAAK;AAClB,oBAAM,IAAI,MAAM,GAAG,KAAK,MAAM,IAAI,MAAM;AAAA;AAAA;AAI5C,iBAAO;AAAA;AAOT,qBAAY;AACZ,mBAAU,aAAa,WAAU,YAAY;AAG7C,YAAI,OAAO,UAAU,cAAc,OAAO,KAAK;AAC7C,iBAAO,WAAY;AAAE,mBAAO;AAAA;AAAA,mBAGnB,OAAO,UAAU,eAAe,OAAO,SAAS;AACzD,iBAAO,UAAU;AAAA,eAGZ;AACL,cAAI,CAAC,cAAc;AACjB,2BAAe,OAAO,QAAQ,eAAe,OAAO,OAAO;AAAA;AAG7D,uBAAa,YAAY;AAAA;AAAA,SAE1B;AAAA;AAAA;;;ACn1FH,EAAC,YAAY;AACT,QAAI,OAAO,YAAY,UAAa,OAAO,mBAAmB,UAC1D,OAAO,eAAe,2BAA2B;AACjD;AAAA;AAEJ,UAAM,qBAAqB;AAC3B,UAAM,oBAAoB;AAAA,MACtB,eAAe,wBAAuB;AAClC,eAAO,QAAQ,UAAU,oBAAoB,IAAI,KAAK;AAAA;AAAA;AAG9D,WAAO,cACH,kBAAkB;AACtB,gBAAY,YAAY,mBAAmB;AAC3C,gBAAY,UAAU,cAAc;AACpC,WAAO,eAAe,aAAa;AAAA;AA2BvC,EAAC,UAAS,WAAW;AACnB,QAAI,OAAO,UAAU,iBAAiB;AAAY;AAElD,cAAU,gBAAgB,SAAS,WAAW;AAC5C,UAAI,WAAW;AACb,0BAAkB,WAAW;AAC7B,kBAAU;AAAA,aACL;AACL,oBAAY,SAAS,cAAc;AACnC,kBAAU,OAAO;AACjB,kBAAU,SAAS;AACnB,aAAK,YAAY;AACjB,kBAAU;AACV,aAAK,YAAY;AAAA;AAAA;AAIrB,+BAA2B,WAAW,MAAM;AAC1C,2BAAqB,eAAe,MAAM,WAAW;AACrD,gBAAU,QAAQ,YAAY,MAAM,WAAW;AAC/C,gBAAU,QAAQ,QAAQ,MAAM,cAAc,2DAA2D;AAAA;AAG3G,mBAAe,kBAAkB,SAAS,MAAM;AAC9C,YAAM,IAAI,iBAAiB,6DAA6D,UAAU,KAAK;AAAA;AAAA,KAExG,gBAAgB;AAEnB,MAAM,mBAAmB,oBAAI;AAC7B,wCAAsC,QAAQ;AAC1C,UAAM,UAAU,kBAAkB,UAAU,SAAS,kBAAkB,OAAO,OAAO,gBAAgB;AACrG,UAAM,YAAY,UAAU,QAAQ,QAAQ,mBAAmB;AAC/D,WAAQ,eAAc,QAAQ,cAAc,SAAS,SAAS,UAAU,SAAS,WAAW,YAAY;AAAA;AAE5G,yBAAuB,QAAO;AAC1B,UAAM,YAAY,6BAA6B,OAAM;AACrD,QAAI,aAAa,UAAU,MAAM;AAC7B,uBAAiB,IAAI,UAAU,MAAM;AAAA;AAAA;AAG7C,EAAC,YAAY;AACT,QAAI,eAAe,MAAM;AACrB;AACJ,QAAI;AACJ,QAAI,iBAAiB,UAAU,iBAAiB,KAAK,UAAU,SAAS;AACpE,kBAAY,OAAO,YAAY;AAAA,eAE1B,iBAAiB,QAAQ;AAC9B;AAAA,WAEC;AACD,kBAAY,OAAO,MAAM;AAAA;AAE7B,qBAAiB,SAAS,eAAe;AACzC,WAAO,eAAe,WAAW,aAAa;AAAA,MAC1C,MAAM;AACF,YAAI,KAAK,QAAQ,YAAY,KAAK,kBAAkB,iBAAiB;AACjE,iBAAO,iBAAiB,IAAI,KAAK;AAAA;AAAA;AAAA;AAAA;AAMjD,MAAI;AACJ,EAAC,UAAU,oBAAmB;AAC1B,uBAAkB,WAAW;AAC7B,uBAAkB,UAAU;AAAA,KAC7B,qBAAsB,qBAAoB;AAC7C,mCAA2B,YAAY;AAAA,IACnC,cAAc;AACV;AACA,WAAK,SAAS,QAAQ;AACtB,WAAK,WAAW,IAAI,aAAa,oBAAoB;AAAA;AAAA,eAE9C,qBAAqB;AAC5B,aAAO,CAAC,YAAY,WAAW;AAAA;AAAA,IAEnC,oBAAoB;AAChB,WAAK,SAAS;AAAA;AAAA,IAElB,uBAAuB;AACnB,WAAK,SAAS;AAAA;AAAA,IAElB,SAAS;AACL,YAAM,EAAE,QAAQ;AAChB,WAAK,MAAM;AACX,WAAK,MAAM;AAAA;AAAA,IAEf,yBAAyB,MAAM;AAC3B,UAAI,QAAQ,WAAW;AACnB,aAAK,SAAS;AAAA,iBAET,QAAQ,OAAO;AACpB,aAAK,SAAS;AAAA,aAEb;AACD,aAAK,SAAS;AAAA;AAAA;AAAA,QAGlB,MAAM;AACN,aAAO,KAAK,aAAa;AAAA;AAAA,QAEzB,IAAI,OAAO;AACX,UAAI,OAAO;AACP,aAAK,aAAa,OAAO;AAAA,aAExB;AACD,aAAK,gBAAgB;AAAA;AAAA;AAAA,QAGzB,UAAU;AACV,aAAO,4BAA4B,KAAK,aAAa,cAAc;AAAA;AAAA,QAEnE,QAAQ,OAAO;AACf,UAAI,OAAO;AACP,aAAK,aAAa,WAAW;AAAA,aAE5B;AACD,aAAK,gBAAgB;AAAA;AAAA;AAAA,QAGzB,WAAW;AACX,aAAO,KAAK,aAAa;AAAA;AAAA,QAEzB,SAAS,OAAO;AAChB,UAAI,OAAO;AACP,aAAK,aAAa,YAAY;AAAA,aAE7B;AACD,aAAK,gBAAgB;AAAA;AAAA;AAAA,QAGzB,aAAa;AACb,aAAO,KAAK,aAAa;AAAA;AAAA,QAEzB,WAAW,OAAO;AAClB,UAAI,OAAO;AACP,aAAK,aAAa,cAAc;AAAA,aAE/B;AACD,aAAK,gBAAgB;AAAA;AAAA;AAAA,QAGzB,WAAW;AACX,aAAO,CAAC,KAAK,SAAS;AAAA;AAAA,QAEtB,WAAW;AACX,aAAO,KAAK,kBAAkB,YAAY,CAAC,KAAK;AAAA;AAAA,QAEhD,YAAY;AACZ,UAAI,IAAI;AACR,aAAQ,MAAM,MAAK,KAAK,mBAAmB,QAAQ,OAAO,SAAS,SAAS,GAAG,qBAAqB,QAAQ,OAAO,SAAS,SAAS,GAAG,aAAa;AAAA;AAAA;AAG7J,uCAAqC,OAAO;AACxC,YAAQ,MAAM;AAAA,WACL;AAAQ,eAAO,kBAAkB;AAAA;AAC7B,eAAO,kBAAkB;AAAA;AAAA;AAI1C,qBAAmB,WAAW;AAC1B,WAAO,IAAI,IAAI,UAAU,YAAY,SAAS;AAAA;AAElD,qBAAmB,KAAK;AACpB,QAAI;AACJ,QAAI,IAAI,MAAM;AACV,aAAO,IAAI,KAAK,MAAM;AAAA,eAEjB,cAAc,IAAI,KAAK,MAAM,WAAW;AAC7C,aAAO,YAAY;AAAA;AAAA;AAG3B,qBAAmB,MAAM,WAAW;AAChC,UAAM,SAAU,eAAc,QAAQ,cAAc,SAAS,SAAS,UAAU,aAAa,kBAAkB,KAAK,aAAa,aAAa,KAAK;AACnJ,WAAO,UAAU;AAAA;AAErB,wBAAsB,KAAK;AACvB,WAAQ,sBAAqB,KAAK,MAAM,eAAe,IAAI,MAAM;AAAA;AAErE,kBAAgB,KAAK;AACjB,WAAO,CAAC,CAAC,aAAa,KAAK,MAAM;AAAA;AAErC,wBAAsB,SAAS,KAAK;AAChC,UAAM,SAAS,UAAU;AACzB,WAAO,QAAQ,SAAS,UAAU,QAAQ,QAAQ,QAAQ,KAAK,WAAW;AAAA;AAE9E,+BAA6B,WAAU,cAAc;AACjD,WAAO,aAAa,WAAU,iBAAiB,OAAO;AAAA;AAE1D,yBAAuB,KAAK;AACxB,UAAM,SAAS,UAAU;AACzB,WAAO,UAAU,OACX,IAAI,KAAK,MAAM,GAAG,CAAE,QAAO,SAAS,MACpC,IAAI;AAAA;AAEd,sBAAoB,KAAK;AACrB,WAAO,cAAc;AAAA;AAEzB,wBAAsB,OAAM,QAAO;AAC/B,WAAO,UAAU,OAAM,QAAQ,UAAU,QAAO;AAAA;AAEpD,6BAA2B,KAAK;AAC5B,WAAO,IAAI,SAAS,MAAM,KAAK,MAAM;AAAA;AAEzC,gCAA8B,KAAK;AAC/B,WAAO,kBAAkB,KAAK,MAAM,IAAI;AAAA;AAE5C,qBAAmB,KAAK;AACpB,WAAO,iBAAiB,IAAI,SAAS,IAAI;AAAA;AAE7C,4BAA0B,OAAO;AAC7B,WAAO,MAAM,SAAS,OAAO,QAAQ,QAAQ;AAAA;AAGjD,4BAAoB;AAAA,IAChB,YAAY,UAAU;AAClB,WAAK,WAAW;AAAA;AAAA,QAEhB,YAAY;AACZ,aAAO,KAAK,SAAS;AAAA;AAAA,QAErB,SAAS;AACT,aAAO,CAAC,KAAK;AAAA;AAAA,QAEb,cAAc;AACd,aAAO,KAAK,cAAc,OAAO,KAAK,cAAc;AAAA;AAAA,QAEpD,cAAc;AACd,aAAO,KAAK,cAAc,OAAO,KAAK,cAAc;AAAA;AAAA,QAEpD,aAAa;AACb,aAAO,KAAK,SAAS;AAAA;AAAA,QAErB,WAAW;AACX,aAAO,UAAU,KAAK,SAAS;AAAA;AAAA,QAE/B,SAAS;AACT,aAAO,KAAK,eAAe,KAAK,YAAY,MAAM;AAAA;AAAA,QAElD,aAAa;AACb,aAAO,KAAK,SAAS;AAAA;AAAA,QAErB,cAAc;AACd,aAAO,KAAK,OAAO;AAAA;AAAA,QAEnB,eAAe;AACf,aAAO,KAAK,SAAS,QAAQ;AAAA;AAAA,QAE7B,eAAe;AACf,UAAI,KAAK,QAAQ;AACb,eAAO,KAAK,SAAS,QAAQ;AAAA,aAE5B;AACD,eAAO,QAAQ,QAAQ;AAAA;AAAA;AAAA,IAG/B,OAAO,MAAM;AACT,aAAO,KAAK,SAAS,QAAQ,IAAI;AAAA;AAAA;AAIzC,oBAAkB,WAAW,EAAE,QAAQ,YAAY,WAAW,IAAI;AAC9D,UAAM,SAAQ,IAAI,YAAY,WAAW,EAAE,YAAY,SAAS,MAAM;AACtE,QAAI,UAAU,OAAO,aAAa;AAC9B,aAAO,cAAc;AAAA,WAEpB;AACD,eAAS,gBAAgB,cAAc;AAAA;AAE3C,WAAO;AAAA;AAEX,gCAA8B;AAC1B,WAAO,IAAI,QAAQ,aAAW,sBAAsB,MAAM;AAAA;AAE9D,+BAA6B;AACzB,WAAO,IAAI,QAAQ,aAAW,WAAW,MAAM,WAAW;AAAA;AAE9D,2BAAyB;AACrB,WAAO,QAAQ;AAAA;AAEnB,6BAA2B,OAAO,IAAI;AAClC,WAAO,IAAI,YAAY,gBAAgB,MAAM;AAAA;AAEjD,oBAAkB,YAAY,SAAQ;AAClC,UAAM,QAAQ,YAAY,SAAS,SAAQ,QAAQ,OAAO,IAAI,MAAM;AACpE,UAAM,QAAQ,MAAM,GAAG,MAAM;AAC7B,UAAM,SAAS,QAAQ,MAAM,GAAG,SAAS;AACzC,WAAO,MAAM,IAAI,UAAQ,KAAK,MAAM,SAAS,KAAK;AAAA;AAEtD,uBAAqB,SAAS,SAAQ;AAClC,WAAO,QAAQ,OAAO,CAAC,QAAQ,QAAQ,MAAM;AACzC,YAAM,QAAQ,QAAO,MAAM,SAAY,KAAK,QAAO;AACnD,aAAO,SAAS,SAAS;AAAA,OAC1B;AAAA;AAEP,kBAAgB;AACZ,WAAO,MAAM,MAAM,MAAM,EAAE,QAAQ,MAAM,IAAI,CAAC,GAAG,MAAM;AACnD,UAAI,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI;AACzC,eAAO;AAAA,iBAEF,KAAK,IAAI;AACd,eAAO;AAAA,iBAEF,KAAK,IAAI;AACd,eAAQ,MAAK,MAAM,KAAK,WAAW,KAAK,GAAG,SAAS;AAAA,aAEnD;AACD,eAAO,KAAK,MAAM,KAAK,WAAW,IAAI,SAAS;AAAA;AAAA,OAEpD,KAAK;AAAA;AAEZ,wBAAsB,kBAAkB,UAAU;AAC9C,eAAW,SAAS,SAAS,IAAI,aAAW,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,aAAa,iBAAiB;AAChI,UAAI,OAAO,SAAS;AAChB,eAAO;AAAA;AAEf,WAAO;AAAA;AAEX,yBAAuB,UAAU;AAC7B,eAAW,WAAW,UAAU;AAC5B,UAAI,QAAQ,aAAa,eAAe;AACpC,gBAAQ,aAAa,QAAQ;AAAA;AAEjC,cAAQ,aAAa,aAAa;AAAA;AAAA;AAG1C,6BAA2B,UAAU;AACjC,eAAW,WAAW,UAAU;AAC5B,UAAI,QAAQ,aAAa,eAAe;AACpC,gBAAQ,gBAAgB;AAAA;AAE5B,cAAQ,gBAAgB;AAAA;AAAA;AAIhC,MAAI;AACJ,EAAC,UAAU,cAAa;AACpB,iBAAY,aAAY,SAAS,KAAK;AACtC,iBAAY,aAAY,UAAU,KAAK;AACvC,iBAAY,aAAY,SAAS,KAAK;AACtC,iBAAY,aAAY,WAAW,KAAK;AACxC,iBAAY,aAAY,YAAY,KAAK;AAAA,KAC1C,eAAgB,eAAc;AACjC,iCAA+B,QAAQ;AACnC,YAAQ,OAAO;AAAA,WACN;AAAO,eAAO,YAAY;AAAA,WAC1B;AAAQ,eAAO,YAAY;AAAA,WAC3B;AAAO,eAAO,YAAY;AAAA,WAC1B;AAAS,eAAO,YAAY;AAAA,WAC5B;AAAU,eAAO,YAAY;AAAA;AAAA;AAG1C,2BAAmB;AAAA,IACf,YAAY,UAAU,QAAQ,WAAU,OAAO,IAAI,mBAAiB,SAAS,MAAM;AAC/E,WAAK,kBAAkB,IAAI;AAC3B,WAAK,wBAAwB,CAAC,UAAU;AAAA;AACxC,WAAK,WAAW;AAChB,WAAK,SAAS;AACd,WAAK,UAAU,KAAK;AACpB,WAAK,OAAO;AACZ,WAAK,MAAM;AACX,WAAK,SAAS;AAAA;AAAA,QAEd,WAAW;AACX,aAAO,KAAK;AAAA;AAAA,QAEZ,SAAS;AACT,aAAO,KAAK,IAAI;AAAA;AAAA,QAEhB,UAAU;AACV,aAAO,KAAK,OAAO,MAAM,KAAK,KAAK,KAAK,aAAa;AAAA;AAAA,IAEzD,SAAS;AACL,WAAK,gBAAgB;AAAA;AAAA,UAEnB,UAAU;AACZ,UAAI,IAAI;AACR,YAAM,EAAE,iBAAiB;AACzB,MAAC,MAAM,MAAK,KAAK,UAAU,8BAA8B,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,IAAI,KAAK,SAAS;AACpH,YAAM,KAAK,4BAA4B;AACvC,UAAI;AACA,aAAK,SAAS,eAAe;AAC7B,cAAM,WAAW,MAAM,MAAM,KAAK,IAAI,MAAM;AAC5C,eAAO,MAAM,KAAK,QAAQ;AAAA,eAEvB,QAAP;AACI,YAAI,OAAM,SAAS,cAAc;AAC7B,eAAK,SAAS,eAAe,MAAM;AACnC,gBAAM;AAAA;AAAA,gBAGd;AACI,aAAK,SAAS,gBAAgB;AAAA;AAAA;AAAA,UAGhC,QAAQ,UAAU;AACpB,YAAM,gBAAgB,IAAI,cAAc;AACxC,YAAM,SAAQ,SAAS,+BAA+B,EAAE,YAAY,MAAM,QAAQ,EAAE,iBAAiB,QAAQ,KAAK;AAClH,UAAI,OAAM,kBAAkB;AACxB,aAAK,SAAS,iCAAiC,MAAM;AAAA,iBAEhD,cAAc,WAAW;AAC9B,aAAK,SAAS,6BAA6B,MAAM;AAAA,aAEhD;AACD,aAAK,SAAS,0BAA0B,MAAM;AAAA;AAElD,aAAO;AAAA;AAAA,QAEP,eAAe;AACf,UAAI;AACJ,aAAO;AAAA,QACH,QAAQ,YAAY,KAAK,QAAQ;AAAA,QACjC,aAAa;AAAA,QACb,SAAS,KAAK;AAAA,QACd,UAAU;AAAA,QACV,MAAM,KAAK,eAAe,OAAO,KAAK;AAAA,QACtC,QAAQ,KAAK;AAAA,QACb,UAAW,MAAK,KAAK,SAAS,cAAc,QAAQ,OAAO,SAAS,SAAS,GAAG;AAAA;AAAA;AAAA,QAGpF,iBAAiB;AACjB,aAAO;AAAA,QACH,UAAU;AAAA;AAAA;AAAA,QAGd,eAAe;AACf,aAAO,KAAK,UAAU,YAAY;AAAA;AAAA,QAElC,cAAc;AACd,aAAO,KAAK,gBAAgB;AAAA;AAAA,UAE1B,4BAA4B,cAAc;AAC5C,YAAM,sBAAsB,IAAI,QAAQ,aAAW,KAAK,wBAAwB;AAChF,YAAM,SAAQ,SAAS,8BAA8B;AAAA,QACjD,YAAY;AAAA,QACZ,QAAQ;AAAA,UACJ;AAAA,UACA,KAAK,KAAK;AAAA,UACV,QAAQ,KAAK;AAAA;AAAA,QAEjB,QAAQ,KAAK;AAAA;AAEjB,UAAI,OAAM;AACN,cAAM;AAAA;AAAA;AAIlB,iCAAyB;AAAA,IACrB,YAAY,UAAU,SAAS;AAC3B,WAAK,UAAU;AACf,WAAK,YAAY,aAAW;AACxB,cAAM,YAAY,QAAQ,MAAM,IAAI;AACpC,YAAI,cAAc,QAAQ,cAAc,SAAS,SAAS,UAAU,gBAAgB;AAChF,eAAK,SAAS,0BAA0B,KAAK;AAAA;AAAA;AAGrD,WAAK,WAAW;AAChB,WAAK,UAAU;AACf,WAAK,uBAAuB,IAAI,qBAAqB,KAAK;AAAA;AAAA,IAE9D,QAAQ;AACJ,UAAI,CAAC,KAAK,SAAS;AACf,aAAK,UAAU;AACf,aAAK,qBAAqB,QAAQ,KAAK;AAAA;AAAA;AAAA,IAG/C,OAAO;AACH,UAAI,KAAK,SAAS;AACd,aAAK,UAAU;AACf,aAAK,qBAAqB,UAAU,KAAK;AAAA;AAAA;AAAA;AAKrD,4BAAoB;AAAA,IAChB,YAAY,MAAM;AACd,WAAK,kBAAkB,SAAS,cAAc;AAC9C,WAAK,gBAAgB,YAAY;AAAA;AAAA,WAE9B,KAAK,SAAS;AACjB,UAAI,OAAO,WAAW,UAAU;AAC5B,eAAO,IAAI,KAAK;AAAA,aAEf;AACD,eAAO;AAAA;AAAA;AAAA,QAGX,WAAW;AACX,YAAM,WAAW,SAAS;AAC1B,iBAAW,WAAW,KAAK,iBAAiB;AACxC,iBAAS,YAAY,SAAS,WAAW,SAAS;AAAA;AAEtD,aAAO;AAAA;AAAA,QAEP,kBAAkB;AAClB,aAAO,KAAK,iBAAiB,OAAO,CAAC,gBAAgB,UAAU;AAC3D,YAAI,MAAM,QAAQ,iBAAiB,gBAAgB;AAC/C,iBAAO,CAAC,GAAG,gBAAgB;AAAA,eAE1B;AACD,iBAAO;AAAA;AAAA,SAEZ;AAAA;AAAA,QAEH,mBAAmB;AACnB,aAAO,MAAM,KAAK,KAAK,gBAAgB,QAAQ;AAAA;AAAA;AAGvD,gBAAc,cAAc;AAE5B,MAAI;AACJ,EAAC,UAAU,sBAAqB;AAC5B,yBAAoB,qBAAoB,iBAAiB,KAAK;AAC9D,yBAAoB,qBAAoB,gBAAgB,KAAK;AAC7D,yBAAoB,qBAAoB,aAAa,KAAK;AAC1D,yBAAoB,qBAAoB,eAAe,KAAK;AAC5D,yBAAoB,qBAAoB,cAAc,KAAK;AAC3D,yBAAoB,qBAAoB,aAAa,KAAK;AAAA,KAC3D,uBAAwB,uBAAsB;AACjD,MAAI;AACJ,EAAC,UAAU,cAAa;AACpB,iBAAY,gBAAgB;AAC5B,iBAAY,eAAe;AAC3B,iBAAY,WAAW;AAAA,KACxB,eAAgB,eAAc;AACjC,iCAA+B,UAAU;AACrC,YAAQ,SAAS;AAAA,WACR,YAAY;AAAW,eAAO,YAAY;AAAA,WAC1C,YAAY;AAAO,eAAO,YAAY;AAAA;AAClC,eAAO,YAAY;AAAA;AAAA;AAGpC,6BAAqB;AAAA,IACjB,YAAY,UAAU,aAAa,WAAW,eAAe,OAAO;AAChE,WAAK,QAAQ,oBAAoB;AACjC,WAAK,WAAW;AAChB,WAAK,cAAc;AACnB,WAAK,YAAY;AACjB,WAAK,WAAW,cAAc,aAAa;AAC3C,WAAK,WAAW,UAAU,KAAK;AAC/B,UAAI,KAAK,UAAU,YAAY,KAAK;AAChC,6BAAqB,KAAK,UAAU,CAAC,GAAG,KAAK,KAAK;AAAA;AAEtD,WAAK,eAAe,IAAI,aAAa,MAAM,KAAK,QAAQ,KAAK,UAAU,KAAK,MAAM,KAAK;AACvF,WAAK,eAAe;AAAA;AAAA,WAEjB,cAAc,SAAS,SAAS;AACnC,aAAO,QAAQ;AAAA;AAAA,QAEf,SAAS;AACT,UAAI;AACJ,YAAM,SAAW,OAAK,KAAK,eAAe,QAAQ,OAAO,SAAS,SAAS,GAAG,aAAa,kBAAkB,KAAK,YAAY,aAAa,aAAa;AACxJ,aAAO,sBAAsB,OAAO,kBAAkB,YAAY;AAAA;AAAA,QAElE,SAAS;AACT,UAAI;AACJ,YAAM,oBAAoB,OAAO,KAAK,YAAY,WAAW,WAAW,KAAK,YAAY,SAAS;AAClG,aAAS,OAAK,KAAK,eAAe,QAAQ,OAAO,SAAS,SAAS,GAAG,aAAa,kBAAkB,KAAK,YAAY,aAAa,aAAa,qBAAqB;AAAA;AAAA,QAErK,OAAO;AACP,UAAI,KAAK,WAAW,YAAY,cAAc,KAAK,UAAU,YAAY,KAAK;AAC1E,eAAO,IAAI,gBAAgB,KAAK;AAAA,aAE/B;AACD,eAAO,KAAK;AAAA;AAAA;AAAA,QAGhB,UAAU;AACV,UAAI;AACJ,aAAO,sBAAwB,OAAK,KAAK,eAAe,QAAQ,OAAO,SAAS,SAAS,GAAG,aAAa,mBAAmB,KAAK,YAAY;AAAA;AAAA,QAE7I,eAAe;AACf,aAAO,KAAK,aAAa;AAAA;AAAA,QAEzB,iBAAiB;AACjB,aAAO,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,SAAS,CAAC,MAAM,WAAW;AACzD,eAAO,QAAQ,OAAO,OAAO,SAAS,WAAW,CAAC,CAAC,MAAM,UAAU;AAAA,SACpE;AAAA;AAAA,QAEH,sBAAsB;AACtB,aAAO,KAAK,YAAY,aAAa;AAAA;AAAA,QAErC,oBAAoB;AACpB,aAAO,KAAK,wBAAwB;AAAA;AAAA,UAElC,QAAQ;AACV,YAAM,EAAE,aAAa,eAAe;AACpC,UAAI,KAAK,mBAAmB;AACxB,cAAM,SAAS,eAAe,cAAc,KAAK,qBAAqB,KAAK;AAC3E,YAAI,CAAC,QAAQ;AACT;AAAA;AAAA;AAGR,UAAI,KAAK,SAAS,aAAa;AAC3B,aAAK,QAAQ;AACb,eAAO,KAAK,aAAa;AAAA;AAAA;AAAA,IAGjC,OAAO;AACH,YAAM,EAAE,UAAU,YAAY;AAC9B,UAAI,KAAK,SAAS,YAAY,KAAK,SAAS,SAAS;AACjD,aAAK,QAAQ;AACb,aAAK,aAAa;AAClB,eAAO;AAAA;AAAA;AAAA,IAGf,yBAAyB,SAAS,SAAS;AACvC,UAAI,CAAC,QAAQ,cAAc;AACvB,cAAM,QAAQ,eAAe,eAAe,kBAAkB,eAAe;AAC7E,YAAI,OAAO;AACP,kBAAQ,kBAAkB;AAAA;AAE9B,gBAAQ,YAAY,CAAC,cAAc,aAAa,QAAQ,WAAW,KAAK;AAAA;AAAA;AAAA,IAGhF,eAAe,SAAS;AACpB,UAAI;AACJ,WAAK,QAAQ,oBAAoB;AACjC,MAAC,MAAK,KAAK,eAAe,QAAQ,OAAO,SAAS,SAAS,GAAG,aAAa,YAAY;AACvF,eAAS,sBAAsB,EAAE,QAAQ,KAAK,aAAa,QAAQ,EAAE,gBAAgB;AACrF,WAAK,SAAS,sBAAsB;AAAA;AAAA,IAExC,iCAAiC,SAAS,UAAU;AAChD,WAAK,SAAS,EAAE,SAAS,SAAS,WAAW,eAAe;AAAA;AAAA,IAEhE,6BAA6B,SAAS,UAAU;AAC5C,UAAI,SAAS,eAAe,SAAS,aAAa;AAC9C,aAAK,SAAS,iCAAiC,MAAM;AAAA,iBAEhD,KAAK,oBAAoB,YAAY,iCAAiC,WAAW;AACtF,cAAM,SAAQ,IAAI,MAAM;AACxB,aAAK,SAAS,sBAAsB,MAAM;AAAA,aAEzC;AACD,aAAK,QAAQ,oBAAoB;AACjC,aAAK,SAAS,EAAE,SAAS,MAAM,eAAe;AAC9C,aAAK,SAAS,oCAAoC,MAAM;AAAA;AAAA;AAAA,IAGhE,0BAA0B,SAAS,UAAU;AACzC,WAAK,SAAS,EAAE,SAAS,OAAO,eAAe;AAC/C,WAAK,SAAS,iCAAiC,MAAM;AAAA;AAAA,IAEzD,eAAe,SAAS,QAAO;AAC3B,WAAK,SAAS,EAAE,SAAS,OAAO;AAChC,WAAK,SAAS,sBAAsB,MAAM;AAAA;AAAA,IAE9C,gBAAgB,SAAS;AACrB,UAAI;AACJ,WAAK,QAAQ,oBAAoB;AACjC,MAAC,MAAK,KAAK,eAAe,QAAQ,OAAO,SAAS,SAAS,GAAG,gBAAgB;AAC9E,eAAS,oBAAoB,EAAE,QAAQ,KAAK,aAAa,QAAQ,OAAO,OAAO,EAAE,gBAAgB,QAAQ,KAAK;AAC9G,WAAK,SAAS,uBAAuB;AAAA;AAAA,IAEzC,oBAAoB,SAAS;AACzB,aAAO,CAAC,QAAQ,gBAAgB,KAAK;AAAA;AAAA;AAG7C,yBAAuB,aAAa,WAAW;AAC3C,UAAM,WAAW,IAAI,SAAS;AAC9B,UAAM,OAAO,cAAc,QAAQ,cAAc,SAAS,SAAS,UAAU,aAAa;AAC1F,UAAM,QAAQ,cAAc,QAAQ,cAAc,SAAS,SAAS,UAAU,aAAa;AAC3F,QAAI,QAAQ,SAAS,QAAQ,SAAS,IAAI,SAAS,OAAO;AACtD,eAAS,OAAO,MAAM;AAAA;AAE1B,WAAO;AAAA;AAEX,0BAAwB,YAAY;AAChC,QAAI,cAAc,MAAM;AACpB,YAAM,UAAU,SAAS,SAAS,SAAS,OAAO,MAAM,QAAQ;AAChE,YAAM,SAAS,QAAQ,KAAK,CAAC,YAAW,QAAO,WAAW;AAC1D,UAAI,QAAQ;AACR,cAAM,QAAQ,OAAO,MAAM,KAAK,MAAM,GAAG,KAAK;AAC9C,eAAO,QAAQ,mBAAmB,SAAS;AAAA;AAAA;AAAA;AAIvD,0BAAwB,MAAM;AAC1B,UAAM,UAAU,SAAS,cAAc,cAAc;AACrD,WAAO,WAAW,QAAQ;AAAA;AAE9B,4CAA0C,UAAU;AAChD,WAAO,SAAS,cAAc,OAAO,CAAC,SAAS;AAAA;AAEnD,gCAA8B,KAAK,SAAS;AACxC,UAAM,eAAe,IAAI;AACzB,eAAW,CAAC,MAAM,UAAU,SAAS;AACjC,UAAI,iBAAiB;AACjB;AACJ,mBAAa,OAAO,MAAM;AAAA;AAE9B,QAAI,SAAS,aAAa;AAC1B,WAAO;AAAA;AAGX,uBAAe;AAAA,IACX,YAAY,SAAS;AACjB,WAAK,UAAU;AAAA;AAAA,QAEf,WAAW;AACX,aAAO,CAAC,GAAG,KAAK,QAAQ;AAAA;AAAA,IAE5B,UAAU,QAAQ;AACd,aAAO,KAAK,oBAAoB,WAAW;AAAA;AAAA,IAE/C,oBAAoB,QAAQ;AACxB,aAAO,SAAS,KAAK,QAAQ,cAAc,QAAQ,qBAAqB,cAAc;AAAA;AAAA,QAEtF,cAAc;AACd,aAAO,KAAK,QAAQ;AAAA;AAAA,QAEpB,4BAA4B;AAC5B,aAAO,KAAK,QAAQ,cAAc;AAAA;AAAA,QAElC,oBAAoB;AACpB,aAAO,CAAC,GAAG,KAAK,QAAQ,iBAAiB;AAAA;AAAA,IAE7C,wBAAwB,KAAI;AACxB,aAAO,KAAK,QAAQ,cAAc,IAAI;AAAA;AAAA,IAE1C,kCAAkC,UAAU;AACxC,YAAM,sBAAsB;AAC5B,iBAAW,2BAA2B,KAAK,mBAAmB;AAC1D,cAAM,EAAE,YAAO;AACf,cAAM,sBAAsB,SAAS,wBAAwB;AAC7D,YAAI,qBAAqB;AACrB,8BAAoB,OAAM,CAAC,yBAAyB;AAAA;AAAA;AAG5D,aAAO;AAAA;AAAA;AAIf,8BAAsB;AAAA,IAClB,YAAY,UAAU,SAAS;AAC3B,WAAK,gBAAiB,CAAC,WAAU;AAC7B,cAAM,OAAO,OAAM;AACnB,YAAI,CAAC,OAAM,oBAAoB,gBAAgB,mBAAmB,KAAK,QAAQ,wBAAwB,KAAK,SAAS;AACjH,gBAAM,YAAY,OAAM,aAAa;AACrC,gBAAM,SAAU,eAAc,QAAQ,cAAc,SAAS,SAAS,UAAU,aAAa,kBAAkB,KAAK;AACpH,cAAI,UAAU,YAAY,KAAK,SAAS,8BAA8B,MAAM,YAAY;AACpF,mBAAM;AACN,mBAAM;AACN,iBAAK,SAAS,0BAA0B,MAAM;AAAA;AAAA;AAAA;AAI1D,WAAK,WAAW;AAChB,WAAK,UAAU;AAAA;AAAA,IAEnB,QAAQ;AACJ,WAAK,QAAQ,iBAAiB,UAAU,KAAK;AAAA;AAAA,IAEjD,OAAO;AACH,WAAK,QAAQ,oBAAoB,UAAU,KAAK;AAAA;AAAA;AAIxD,mBAAW;AAAA,IACP,YAAY,UAAU,SAAS;AAC3B,WAAK,uBAAuB,CAAC,UAAU;AAAA;AACvC,WAAK,6BAA6B,CAAC,UAAU;AAAA;AAC7C,WAAK,WAAW;AAChB,WAAK,UAAU;AAAA;AAAA,IAEnB,eAAe,QAAQ;AACnB,YAAM,UAAU,KAAK,SAAS,oBAAoB;AAClD,UAAI,SAAS;AACT,aAAK,gBAAgB;AACrB,aAAK,aAAa;AAAA,aAEjB;AACD,aAAK,iBAAiB,EAAE,GAAG,GAAG,GAAG;AAAA;AAAA;AAAA,IAGzC,2BAA2B,WAAU;AACjC,WAAK,eAAe,UAAU;AAAA;AAAA,IAElC,gBAAgB,SAAS;AACrB,cAAQ;AAAA;AAAA,IAEZ,aAAa,SAAS;AAClB,UAAI,mBAAmB,aAAa;AAChC,YAAI,QAAQ,aAAa,aAAa;AAClC,kBAAQ;AAAA,eAEP;AACD,kBAAQ,aAAa,YAAY;AACjC,kBAAQ;AACR,kBAAQ,gBAAgB;AAAA;AAAA;AAAA;AAAA,IAIpC,iBAAiB,EAAE,GAAG,KAAK;AACvB,WAAK,WAAW,SAAS,GAAG;AAAA;AAAA,IAEhC,cAAc;AACV,WAAK,iBAAiB,EAAE,GAAG,GAAG,GAAG;AAAA;AAAA,QAEjC,aAAa;AACb,aAAO;AAAA;AAAA,UAEL,OAAO,UAAU;AACnB,YAAM,EAAE,WAAW,cAAc,aAAa,aAAa;AAC3D,UAAI,cAAc;AACd,YAAI;AACA,eAAK,gBAAgB,IAAI,QAAQ,aAAW,KAAK,uBAAuB;AACxE,eAAK,WAAW;AAChB,eAAK,wBAAwB;AAC7B,gBAAM,qBAAqB,IAAI,QAAQ,aAAW,KAAK,6BAA6B;AACpF,gBAAM,kBAAkB,KAAK,SAAS,sBAAsB,UAAU,KAAK;AAC3E,cAAI,CAAC;AACD,kBAAM;AACV,gBAAM,KAAK,eAAe;AAC1B,eAAK,SAAS,qBAAqB,UAAU;AAC7C,eAAK,wBAAwB;AAAA,kBAEjC;AACI,iBAAO,KAAK;AACZ,eAAK,qBAAqB;AAC1B,iBAAO,KAAK;AAAA;AAAA,aAGf;AACD,aAAK;AAAA;AAAA;AAAA,IAGb,aAAa;AACT,WAAK,SAAS;AAAA;AAAA,IAElB,wBAAwB,UAAU;AAC9B,WAAK,cAAc,SAAS;AAC5B,eAAS;AAAA;AAAA,IAEb,cAAc,WAAW;AACrB,UAAI,WAAW;AACX,aAAK,QAAQ,aAAa,sBAAsB;AAAA,aAE/C;AACD,aAAK,QAAQ,gBAAgB;AAAA;AAAA;AAAA,UAG/B,eAAe,UAAU;AAC3B,YAAM,SAAS;AAAA;AAAA,IAEnB,wBAAwB,UAAU;AAC9B,eAAS;AAAA;AAAA;AAIjB,gCAAwB,KAAK;AAAA,IACzB,aAAa;AACT,WAAK,QAAQ,YAAY;AAAA;AAAA,QAEzB,WAAW;AACX,aAAO,IAAI,SAAS,KAAK;AAAA;AAAA;AAIjC,8BAAsB;AAAA,IAClB,YAAY,UAAU,SAAS;AAC3B,WAAK,eAAe,CAAC,WAAU;AAC3B,YAAI,KAAK,sBAAsB,OAAM,SAAS;AAC1C,eAAK,aAAa;AAAA,eAEjB;AACD,iBAAO,KAAK;AAAA;AAAA;AAGpB,WAAK,cAAe,CAAC,WAAU;AAC3B,YAAI,KAAK,cAAc,KAAK,sBAAsB,OAAM,WAAW,OAAM,kBAAkB,SAAS;AAChG,cAAI,KAAK,SAAS,yBAAyB,OAAM,QAAQ,OAAM,OAAO,MAAM;AACxE,iBAAK,WAAW;AAChB,mBAAM;AACN,iBAAK,SAAS,qBAAqB,OAAM,QAAQ,OAAM,OAAO;AAAA;AAAA;AAGtE,eAAO,KAAK;AAAA;AAEhB,WAAK,YAAY,MAAM;AACnB,eAAO,KAAK;AAAA;AAEhB,WAAK,WAAW;AAChB,WAAK,UAAU;AAAA;AAAA,IAEnB,QAAQ;AACJ,WAAK,QAAQ,iBAAiB,SAAS,KAAK;AAC5C,eAAS,iBAAiB,eAAe,KAAK;AAC9C,eAAS,iBAAiB,sBAAsB,KAAK;AAAA;AAAA,IAEzD,OAAO;AACH,WAAK,QAAQ,oBAAoB,SAAS,KAAK;AAC/C,eAAS,oBAAoB,eAAe,KAAK;AACjD,eAAS,oBAAoB,sBAAsB,KAAK;AAAA;AAAA,IAE5D,sBAAsB,QAAQ;AAC1B,YAAM,UAAU,kBAAkB,UAC5B,SACA,kBAAkB,OACd,OAAO,gBACP;AACV,aAAO,WAAW,QAAQ,QAAQ,wBAAwB,KAAK;AAAA;AAAA;AAIvE,oBAAY;AAAA,IACR,YAAY,qBAAqB;AAC7B,WAAK,sBAAsB;AAAA;AAAA,WAExB,4BAA4B,qBAAqB,UAAU;AAC9D,YAAM,QAAQ,IAAI,KAAK;AACvB,YAAM;AACN;AACA,YAAM;AAAA;AAAA,IAEV,QAAQ;AACJ,iBAAW,OAAM,KAAK,qBAAqB;AACvC,cAAM,CAAC,EAAE,uBAAuB,KAAK,oBAAoB;AACzD,aAAK,0CAA0C;AAAA;AAAA;AAAA,IAGvD,QAAQ;AACJ,iBAAW,OAAM,KAAK,qBAAqB;AACvC,cAAM,CAAC,2BAA2B,KAAK,oBAAoB;AAC3D,aAAK,wCAAwC;AAC7C,aAAK,uCAAuC;AAAA;AAAA;AAAA,IAGpD,0CAA0C,kBAAkB;AACxD,YAAM,cAAc,qCAAqC;AACzD,uBAAiB,YAAY;AAAA;AAAA,IAEjC,wCAAwC,kBAAkB;AACtD,YAAM,SAAQ,iBAAiB,UAAU;AACzC,uBAAiB,YAAY;AAAA;AAAA,IAEjC,uCAAuC,kBAAkB;AACrD,YAAM,cAAc,KAAK,mBAAmB,iBAAiB;AAC7D,sBAAgB,QAAQ,gBAAgB,SAAS,SAAS,YAAY,YAAY;AAAA;AAAA,IAEtF,mBAAmB,KAAI;AACnB,aAAO,KAAK,aAAa,KAAK,aAAW,QAAQ,WAAW;AAAA;AAAA,QAE5D,eAAe;AACf,aAAO,CAAC,GAAG,SAAS,iBAAiB;AAAA;AAAA;AAG7C,gDAA8C,kBAAkB;AAC5D,UAAM,UAAU,SAAS,cAAc;AACvC,YAAQ,aAAa,QAAQ;AAC7B,YAAQ,aAAa,WAAW,iBAAiB;AACjD,WAAO;AAAA;AAGX,uBAAe;AAAA,IACX,YAAY,iBAAiB,aAAa,WAAW,aAAa,MAAM;AACpE,WAAK,kBAAkB;AACvB,WAAK,cAAc;AACnB,WAAK,YAAY;AACjB,WAAK,aAAa;AAClB,WAAK,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW,KAAK,qBAAqB,EAAE,SAAS;AAAA;AAAA,QAErF,eAAe;AACf,aAAO;AAAA;AAAA,IAEX,kBAAkB;AACd;AAAA;AAAA,IAEJ,kBAAkB;AACd,UAAI,KAAK,oBAAoB;AACzB,aAAK,mBAAmB;AACxB,eAAO,KAAK;AAAA;AAAA;AAAA,IAGpB,oBAAoB,SAAS;AACzB,UAAI,QAAQ,aAAa,sBAAsB,SAAS;AACpD,eAAO;AAAA,aAEN;AACD,cAAM,uBAAuB,SAAS,cAAc;AACpD,YAAI,KAAK,UAAU;AACf,+BAAqB,QAAQ,KAAK;AAAA;AAEtC,6BAAqB,cAAc,QAAQ;AAC3C,6BAAqB,QAAQ;AAC7B,8BAAsB,sBAAsB;AAC5C,eAAO;AAAA;AAAA;AAAA,IAGf,4BAA4B,UAAU;AAClC,YAAM,4BAA4B,KAAK,qBAAqB;AAAA;AAAA,IAEhE,iCAAiC;AAC7B,YAAM,UAAU,KAAK,kBAAkB;AACvC,UAAI,mBAAmB,UAAU;AAC7B,gBAAQ;AAAA;AAAA;AAAA,QAGZ,oBAAoB;AACpB,aAAO,KAAK,YAAY,cAAc,KAAK,cAAc,KAAK;AAAA;AAAA,QAE9D,iBAAiB;AACjB,aAAO,KAAK,gBAAgB;AAAA;AAAA,QAE5B,aAAa;AACb,aAAO,KAAK,YAAY;AAAA;AAAA,QAExB,sBAAsB;AACtB,aAAO,KAAK,gBAAgB,kCAAkC,KAAK;AAAA;AAAA,QAEnE,WAAW;AACX,UAAI;AACJ,aAAQ,MAAK,SAAS,KAAK,cAAc,+BAA+B,QAAQ,OAAO,SAAS,SAAS,GAAG,aAAa;AAAA;AAAA;AAGjI,iCAA+B,oBAAoB,eAAe;AAC9D,eAAW,EAAE,MAAM,WAAW,CAAC,GAAG,cAAc,aAAa;AACzD,yBAAmB,aAAa,MAAM;AAAA;AAAA;AAG9C,8BAA4B,SAAS;AACjC,WAAO,WAAW,OAAO,QAAQ,SAAS;AAAA;AAG9C,oCAA4B,SAAS;AAAA,QAC7B,eAAe;AACf,aAAO;AAAA;AAAA,UAEL,SAAS;AACX,YAAM;AACN,WAAK,4BAA4B,MAAM;AACnC,aAAK;AAAA;AAET,WAAK;AACL,YAAM;AACN,WAAK;AACL,YAAM;AACN,WAAK;AAAA;AAAA,IAET,mBAAmB;AACf,UAAI;AACJ,YAAM,mBAAmB,SAAS;AAClC,uBAAiB,mBAAmB,KAAK;AACzC,uBAAiB;AACjB,YAAM,eAAe,KAAK;AAC1B,YAAM,cAAe,MAAK,aAAa,mBAAmB,QAAQ,OAAO,SAAS,SAAS,GAAG;AAC9F,UAAI,aAAa;AACb,oBAAY,mBAAmB;AAC/B,aAAK,eAAe,YAAY,YAAY;AAAA;AAAA;AAAA,IAGpD,sBAAsB;AAClB,UAAI,KAAK,eAAe,cAAc,KAAK,WAAW,YAAY;AAC9D,cAAM,UAAU,KAAK,eAAe;AACpC,cAAM,QAAQ,0BAA0B,KAAK,eAAe,aAAa,0BAA0B;AACnG,YAAI,SAAS;AACT,kBAAQ,eAAe,EAAE;AACzB,iBAAO;AAAA;AAAA;AAGf,aAAO;AAAA;AAAA,IAEX,yBAAyB;AACrB,iBAAW,sBAAsB,KAAK,mBAAmB;AACrD,cAAM,yBAAyB,KAAK,oBAAoB;AACxD,2BAAmB,YAAY;AAAA;AAAA;AAAA,QAGnC,oBAAoB;AACpB,aAAO,KAAK,eAAe,iBAAiB;AAAA;AAAA;AAGpD,qCAAmC,OAAO,cAAc;AACpD,QAAI,SAAS,SAAS,SAAS,WAAW,SAAS,YAAY,SAAS,WAAW;AAC/E,aAAO;AAAA,WAEN;AACD,aAAO;AAAA;AAAA;AAIf,0BAAkB;AAAA,IACd,cAAc;AACV,WAAK,SAAS;AACd,WAAK,QAAQ;AACb,WAAK,UAAU;AACf,WAAK,UAAU,MAAM;AACjB,aAAK,SAAS,KAAK,QAAQ,KAAK,WAAW;AAAA;AAE/C,WAAK,oBAAoB,KAAK;AAC9B,WAAK,kBAAkB,KAAK;AAC5B,WAAK;AACL,WAAK,SAAS;AAAA;AAAA,eAEP,aAAa;AACpB,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAUG,YAAY;AAAA,oBACV,YAAY,oBAAoB,OAAO,YAAY,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKvF,OAAO;AACH,UAAI,CAAC,KAAK,SAAS;AACf,aAAK,UAAU;AACf,aAAK;AACL,aAAK;AAAA;AAAA;AAAA,IAGb,OAAO;AACH,UAAI,KAAK,WAAW,CAAC,KAAK,QAAQ;AAC9B,aAAK,SAAS;AACd,aAAK,oBAAoB,MAAM;AAC3B,eAAK;AACL,eAAK;AACL,eAAK,UAAU;AACf,eAAK,SAAS;AAAA;AAAA;AAAA;AAAA,IAI1B,SAAS,OAAO;AACZ,WAAK,QAAQ;AACb,WAAK;AAAA;AAAA,IAET,2BAA2B;AACvB,eAAS,KAAK,aAAa,KAAK,mBAAmB,SAAS,KAAK;AAAA;AAAA,IAErE,yBAAyB;AACrB,WAAK,gBAAgB,MAAM,QAAQ;AACnC,WAAK,gBAAgB,MAAM,UAAU;AACrC,eAAS,gBAAgB,aAAa,KAAK,iBAAiB,SAAS;AACrE,WAAK;AAAA;AAAA,IAET,oBAAoB,UAAU;AAC1B,WAAK,gBAAgB,MAAM,UAAU;AACrC,iBAAW,UAAU,YAAY,oBAAoB;AAAA;AAAA,IAEzD,2BAA2B;AACvB,UAAI,KAAK,gBAAgB,YAAY;AACjC,iBAAS,gBAAgB,YAAY,KAAK;AAAA;AAAA;AAAA,IAGlD,iBAAiB;AACb,UAAI,CAAC,KAAK,iBAAiB;AACvB,aAAK,kBAAkB,OAAO,YAAY,KAAK,SAAS,YAAY;AAAA;AAAA;AAAA,IAG5E,gBAAgB;AACZ,aAAO,cAAc,KAAK;AAC1B,aAAO,KAAK;AAAA;AAAA,IAEhB,UAAU;AACN,4BAAsB,MAAM;AACxB,aAAK,gBAAgB,MAAM,QAAQ,GAAG,KAAM,KAAK,QAAQ;AAAA;AAAA;AAAA,IAGjE,0BAA0B;AACtB,YAAM,UAAU,SAAS,cAAc;AACvC,cAAQ,OAAO;AACf,cAAQ,cAAc,YAAY;AAClC,aAAO;AAAA;AAAA,IAEX,wBAAwB;AACpB,YAAM,UAAU,SAAS,cAAc;AACvC,cAAQ,YAAY;AACpB,aAAO;AAAA;AAAA;AAGf,cAAY,oBAAoB;AAEhC,mCAA2B,SAAS;AAAA,IAChC,cAAc;AACV,YAAM,GAAG;AACT,WAAK,qBAAqB,KAAK,SAC1B,OAAO,CAAC,YAAY,CAAC,kBAAkB,UACvC,IAAI,CAAC,YAAY,oBAAoB,UACrC,OAAO,CAAC,QAAQ,YAAY;AAC7B,cAAM,EAAE,cAAc;AACtB,cAAM,UAAU,aAAa,SACvB,OAAO,aACP;AAAA,UACE,MAAM,YAAY;AAAA,UAClB,SAAS,iBAAiB;AAAA,UAC1B,UAAU;AAAA;AAElB,eAAO,OAAO,OAAO,OAAO,OAAO,IAAI,SAAS,GAAG,YAAY,OAAO,OAAO,OAAO,OAAO,IAAI,UAAU,EAAE,UAAU,CAAC,GAAG,QAAQ,UAAU;AAAA,SAC5I;AAAA;AAAA,QAEH,0BAA0B;AAC1B,aAAO,OAAO,KAAK,KAAK,oBACnB,OAAO,eAAa,KAAK,mBAAmB,WAAW,SACvD,KAAK;AAAA;AAAA,IAEd,+BAA+B,UAAU;AACrC,aAAO,KAAK,qCAAqC,UAAU;AAAA;AAAA,IAE/D,mCAAmC,UAAU;AACzC,aAAO,KAAK,qCAAqC,cAAc;AAAA;AAAA,IAEnE,qCAAqC,aAAa,UAAU;AACxD,aAAO,OAAO,KAAK,KAAK,oBACnB,OAAO,eAAa,CAAE,cAAa,SAAS,qBAC5C,IAAI,eAAa,KAAK,mBAAmB,YACzC,OAAO,CAAC,EAAE,WAAW,QAAQ,aAC7B,IAAI,CAAC,EAAE,UAAU,CAAC,eAAe;AAAA;AAAA,QAEtC,sBAAsB;AACtB,aAAO,OAAO,KAAK,KAAK,oBAAoB,OAAO,CAAC,QAAQ,cAAc;AACtE,cAAM,EAAE,MAAM,SAAS,aAAa,KAAK,mBAAmB;AAC5D,YAAI,QAAQ,QAAQ,CAAC,SAAS;AAC1B,iBAAO,CAAC,GAAG,QAAQ,GAAG;AAAA,mBAEjB,SAAS,SAAS,GAAG;AAC1B,iBAAO,CAAC,GAAG,QAAQ,GAAG,SAAS,MAAM;AAAA,eAEpC;AACD,iBAAO;AAAA;AAAA,SAEZ;AAAA;AAAA,IAEP,aAAa,MAAM;AACf,YAAM,UAAU,KAAK,sBAAsB;AAC3C,aAAO,UACD,QAAQ,aAAa,aACrB;AAAA;AAAA,IAEV,sBAAsB,MAAM;AACxB,aAAO,OAAO,KAAK,KAAK,oBAAoB,OAAO,CAAC,QAAQ,cAAc;AACtE,cAAM,EAAE,UAAU,CAAC,aAAa,KAAK,mBAAmB;AACxD,eAAO,6BAA6B,SAAS,QAAQ,UAAU;AAAA,SAChE;AAAA;AAAA;AAGX,uBAAqB,SAAS;AAC1B,QAAI,gBAAgB,UAAU;AAC1B,aAAO;AAAA,eAEF,oBAAoB,UAAU;AACnC,aAAO;AAAA;AAAA;AAGf,4BAA0B,SAAS;AAC/B,WAAO,QAAQ,aAAa,uBAAuB;AAAA;AAEvD,2BAAyB,SAAS;AAC9B,UAAM,UAAU,QAAQ,QAAQ;AAChC,WAAO,WAAW;AAAA;AAEtB,6BAA2B,SAAS;AAChC,UAAM,UAAU,QAAQ,QAAQ;AAChC,WAAO,WAAW;AAAA;AAEtB,+BAA6B,SAAS;AAClC,UAAM,UAAU,QAAQ,QAAQ;AAChC,WAAO,WAAW,WAAY,WAAW,UAAU,QAAQ,aAAa,UAAU;AAAA;AAEtF,wCAAsC,SAAS,MAAM;AACjD,UAAM,UAAU,QAAQ,QAAQ;AAChC,WAAO,WAAW,UAAU,QAAQ,aAAa,WAAW;AAAA;AAEhE,+BAA6B,SAAS;AAClC,QAAI,QAAQ,aAAa,UAAU;AAC/B,cAAQ,aAAa,SAAS;AAAA;AAElC,WAAO;AAAA;AAGX,mCAA2B,SAAS;AAAA,IAChC,YAAY,SAAS,cAAc;AAC/B,YAAM;AACN,WAAK,eAAe;AAAA;AAAA,WAEjB,eAAe,OAAO,IAAI;AAC7B,aAAO,KAAK,aAAa,kBAAkB;AAAA;AAAA,WAExC,YAAY,SAAS;AACxB,aAAO,KAAK,aAAa,QAAQ;AAAA;AAAA,WAE9B,aAAa,EAAE,MAAM,QAAQ;AAChC,aAAO,IAAI,KAAK,MAAM,IAAI,aAAa;AAAA;AAAA,IAE3C,QAAQ;AACJ,aAAO,IAAI,aAAa,KAAK,QAAQ,UAAU,OAAO,KAAK;AAAA;AAAA,QAE3D,cAAc;AACd,aAAO,KAAK,aAAa;AAAA;AAAA,QAEzB,eAAe;AACf,UAAI;AACJ,YAAM,OAAQ,MAAK,KAAK,WAAW,aAAa,QAAQ,OAAO,SAAS,KAAK;AAC7E,aAAO,UAAU;AAAA;AAAA,QAEjB,oBAAoB;AACpB,aAAO,KAAK,WAAW;AAAA;AAAA,QAEvB,gBAAgB;AAChB,aAAO,KAAK,qBAAqB;AAAA;AAAA,QAEjC,cAAc;AACd,aAAO,KAAK,qBAAqB;AAAA;AAAA,QAEjC,cAAc;AACd,aAAO,KAAK,WAAW,oBAAoB;AAAA;AAAA,IAE/C,WAAW,MAAM;AACb,aAAO,KAAK,aAAa,aAAa,SAAS;AAAA;AAAA;AAIvD,MAAI;AACJ,EAAC,UAAU,eAAc;AACrB,kBAAa,gBAAgB;AAC7B,kBAAa,kBAAkB;AAC/B,kBAAa,gBAAgB;AAC7B,kBAAa,cAAc;AAAA,KAC5B,gBAAiB,gBAAe;AACnC,MAAI;AACJ,EAAC,UAAU,aAAY;AACnB,gBAAW,iBAAiB;AAC5B,gBAAW,aAAa;AACxB,gBAAW,cAAc;AACzB,gBAAW,YAAY;AACvB,gBAAW,eAAe;AAAA,KAC3B,cAAe,cAAa;AAC/B,MAAM,iBAAiB;AAAA,IACnB,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,qBAAqB,MAAM;AAAA;AAAA,IAC3B,YAAY;AAAA;AAEhB,MAAI;AACJ,EAAC,UAAU,mBAAkB;AACzB,sBAAiB,kBAAiB,oBAAoB,KAAK;AAC3D,sBAAiB,kBAAiB,oBAAoB,MAAM;AAC5D,sBAAiB,kBAAiB,yBAAyB,MAAM;AAAA,KAClE,oBAAqB,oBAAmB;AAC3C,oBAAY;AAAA,IACR,YAAY,UAAU,WAAU,uBAAuB,UAAU,IAAI;AACjE,WAAK,aAAa;AAClB,WAAK,gBAAgB;AACrB,WAAK,mBAAmB;AACxB,WAAK,iBAAiB;AACtB,WAAK,WAAW;AAChB,WAAK,iBAAiB;AACtB,WAAK,QAAQ,WAAW;AACxB,WAAK,WAAW;AAChB,WAAK,WAAW;AAChB,WAAK,wBAAwB,yBAAyB;AACtD,YAAM,EAAE,QAAQ,gBAAgB,UAAU,cAAc,UAAU,qBAAqB,eAAe,OAAO,OAAO,OAAO,OAAO,IAAI,iBAAiB;AACvJ,WAAK,SAAS;AACd,WAAK,iBAAiB;AACtB,WAAK,WAAW;AAChB,WAAK,eAAe;AACpB,WAAK,WAAW;AAChB,WAAK,aAAa,KAAK,SAAS,6BAA6B,KAAK,UAAU,KAAK;AACjF,WAAK,sBAAsB;AAC3B,WAAK,aAAa;AAClB,WAAK,WAAW,CAAC;AAAA;AAAA,QAEjB,UAAU;AACV,aAAO,KAAK,SAAS;AAAA;AAAA,QAErB,OAAO;AACP,aAAO,KAAK,SAAS;AAAA;AAAA,QAErB,UAAU;AACV,aAAO,KAAK,SAAS;AAAA;AAAA,QAErB,kBAAkB;AAClB,aAAO,KAAK,QAAQ,gCAAgC,KAAK;AAAA;AAAA,QAEzD,SAAS;AACT,aAAO,KAAK;AAAA;AAAA,IAEhB,QAAQ;AACJ,UAAI,KAAK,SAAS,WAAW,aAAa;AACtC,aAAK,mBAAmB,aAAa;AACrC,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,aAAa;AAC1B,aAAK,SAAS,aAAa;AAAA;AAAA;AAAA,IAGnC,SAAS;AACL,UAAI,KAAK,SAAS,WAAW,SAAS;AAClC,YAAI,KAAK,SAAS;AACd,eAAK,QAAQ;AAAA;AAEjB,aAAK;AACL,aAAK,QAAQ,WAAW;AAAA;AAAA;AAAA,IAGhC,WAAW;AACP,UAAI,KAAK,SAAS,WAAW,SAAS;AAClC,aAAK,mBAAmB,aAAa;AACrC,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,eAAe;AAC5B,aAAK,SAAS,eAAe;AAC7B,aAAK;AAAA;AAAA;AAAA,IAGb,OAAO;AACH,UAAI,KAAK,SAAS,WAAW,SAAS;AAClC,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA;AAAA;AAAA,IAGjC,gBAAgB;AACZ,UAAI;AACJ,UAAI,CAAC,KAAK,gBAAgB;AACtB,cAAM,mBAAmB,KAAK,SAAS,SAAW,OAAK,KAAK,cAAc,QAAQ,OAAO,SAAS,SAAS,GAAG,QAAQ,YAAY,KAAK;AACvI,cAAM,SAAS,KAAK,0BAA0B;AAC9C,aAAK,QAAQ,OAAO,QAAQ,KAAK,UAAU,KAAK;AAChD,aAAK,iBAAiB;AAAA;AAAA;AAAA,IAG9B,eAAe;AACX,UAAI,KAAK,wBAAwB;AAC7B,aAAK;AAAA,iBAEA,KAAK,wBAAwB,CAAC,KAAK,SAAS;AACjD,aAAK,UAAU,IAAI,aAAa,MAAM,YAAY,KAAK,KAAK;AAC5D,aAAK,QAAQ;AAAA;AAAA;AAAA,IAGrB,kBAAkB;AACd,UAAI,KAAK,UAAU;AACf,aAAK;AACL,aAAK;AACL,aAAK;AAAA;AAAA;AAAA,IAGb,eAAe;AACX,WAAK,mBAAmB,aAAa;AACrC,WAAK,QAAQ,oBAAoB;AAAA;AAAA,IAErC,eAAe,WAAW,KAAK,UAAU;AACrC,WAAK,WAAW;AAChB,UAAI,UAAU;AACV,cAAM,EAAE,eAAe;AACvB,YAAI,aAAa,aAAa;AAC1B,eAAK,QAAQ,sBAAsB;AAAA,eAElC;AACD,eAAK,QAAQ,iCAAiC,MAAM;AAAA;AAAA;AAAA;AAAA,IAIhE,gBAAgB;AACZ,WAAK,mBAAmB,aAAa;AACrC,WAAK,QAAQ,qBAAqB;AAAA;AAAA,IAEtC,eAAe;AACX,UAAI,KAAK,UAAU;AACf,cAAM,EAAE,YAAY,iBAAiB,KAAK;AAC1C,aAAK,OAAO,YAAY;AACpB,eAAK;AACL,cAAI,KAAK,KAAK;AACV,kBAAM,KAAK,KAAK;AACpB,cAAI,aAAa,eAAe,gBAAgB,MAAM;AAClD,kBAAM,KAAK,KAAK,WAAW,aAAa,eAAe,eAAe,OAAO,KAAK;AAClF,iBAAK,QAAQ,cAAc;AAC3B,iBAAK;AAAA,iBAEJ;AACD,kBAAM,KAAK,KAAK,YAAY,aAAa,eAAe;AACxD,iBAAK,QAAQ,cAAc;AAC3B,iBAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAKrB,oBAAoB;AAChB,YAAM,WAAW,KAAK,KAAK,6BAA6B,KAAK,aAAa,KAAK;AAC/E,UAAI,YAAa,EAAC,UAAU,KAAK,aAAa,SAAS,UAAU,UAAU,KAAK,aAAa;AACzF,YAAI,KAAK,UAAU,aAAa,SAAS,eAAe;AACpD,iBAAO;AAAA;AAAA;AAAA;AAAA,IAInB,uBAAuB;AACnB,UAAI,KAAK,cAAc;AACnB,eAAO,aAAa,eAAe,KAAK;AAAA;AAAA;AAAA,IAGhD,oBAAoB;AAChB,aAAO,KAAK,uBAAuB;AAAA;AAAA,IAEvC,qBAAqB;AACjB,YAAM,WAAW,KAAK;AACtB,UAAI,UAAU;AACV,cAAM,YAAY,KAAK;AACvB,aAAK,OAAO,YAAY;AACpB,eAAK;AACL,cAAI,KAAK,YAAY;AACjB,iBAAK,QAAQ,cAAc;AAAA,iBAE1B;AACD,gBAAI,KAAK,KAAK;AACV,oBAAM,KAAK,KAAK;AACpB,kBAAM,KAAK,KAAK,WAAW,UAAU,WAAW,KAAK;AACrD,iBAAK,QAAQ,cAAc;AAC3B,gBAAI,CAAC,WAAW;AACZ,mBAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMzB,iBAAiB;AACb,UAAI;AACJ,UAAI,KAAK,wBAAwB,CAAC,KAAK,oBAAsB,OAAK,KAAK,cAAc,QAAQ,OAAO,SAAS,SAAS,GAAG,aAAa;AAClI,aAAK,QAAQ,wBAAwB,KAAK,sBAAsB;AAAA,UAC5D,QAAQ;AAAA,UACR,UAAU,KAAK;AAAA;AAEnB,aAAK,mBAAmB;AAAA;AAAA;AAAA,IAGhC,qBAAqB;AACjB,UAAI,KAAK,YAAY;AACjB,aAAK,OAAO,YAAY;AACpB,eAAK;AACL,eAAK,QAAQ,cAAc;AAAA;AAAA;AAAA;AAAA,IAIvC,iBAAiB;AACb,WAAK;AAAA;AAAA,IAET,iCAAiC,SAAS,UAAU;AAAA;AAAA,UAE9C,6BAA6B,SAAS,UAAU;AAClD,YAAM,eAAe,MAAM,SAAS;AACpC,YAAM,EAAE,YAAY,eAAe;AACnC,UAAI,gBAAgB,QAAW;AAC3B,aAAK,eAAe,EAAE,YAAY,iBAAiB,qBAAqB;AAAA,aAEvE;AACD,aAAK,uBAAuB,SAAS,aAAa,SAAS,WAAW;AACtE,aAAK,eAAe,EAAE,YAAwB,cAAc;AAAA;AAAA;AAAA,UAG9D,0BAA0B,SAAS,UAAU;AAC/C,YAAM,eAAe,MAAM,SAAS;AACpC,YAAM,EAAE,YAAY,eAAe;AACnC,UAAI,gBAAgB,QAAW;AAC3B,aAAK,eAAe,EAAE,YAAY,iBAAiB,qBAAqB;AAAA,aAEvE;AACD,aAAK,eAAe,EAAE,YAAwB,cAAc;AAAA;AAAA;AAAA,IAGpE,eAAe,SAAS,QAAO;AAC3B,WAAK,eAAe,EAAE,YAAY,iBAAiB,gBAAgB,YAAY;AAAA;AAAA,IAEnF,kBAAkB;AACd,WAAK;AAAA;AAAA,IAET,gBAAgB;AACZ,UAAI,CAAC,KAAK,UAAU;AAChB,YAAI,KAAK,UAAU,WAAW;AAC1B,eAAK,8BAA8B,KAAK,oBAAoB,KAAK,KAAK;AAAA,eAErE;AACD,eAAK,oBAAoB,KAAK,KAAK;AAAA;AAEvC,YAAI,KAAK,YAAY;AACjB,eAAK,SAAS,gCAAgC,KAAK,KAAK,sBAAsB,KAAK;AAAA;AAEvF,aAAK,WAAW;AAAA;AAAA;AAAA,IAGxB,2BAA2B;AACvB,YAAM,EAAE,mBAAmB,KAAK;AAChC,UAAI,gBAAgB;AAChB,aAAK,KAAK,iBAAiB;AAC3B,eAAO;AAAA;AAAA;AAAA,IAGf,iBAAiB;AACb,YAAM,SAAS,UAAU,KAAK;AAC9B,UAAI,UAAU,MAAM;AAChB,aAAK,KAAK,eAAe;AACzB,eAAO;AAAA;AAAA;AAAA,IAGf,mBAAmB,QAAQ;AACvB,WAAK,cAAc,UAAU,IAAI,OAAO;AAAA;AAAA,IAE5C,mBAAmB;AACf,aAAO,OAAO,OAAO,IAAI,KAAK;AAAA;AAAA,IAElC,0BAA0B,QAAQ;AAC9B,cAAQ;AAAA,aACC;AAAW,iBAAO,QAAQ;AAAA,aAC1B;AAAA,aACA;AAAW,iBAAO,QAAQ;AAAA;AAAA;AAAA,IAGvC,uBAAuB;AACnB,aAAO,OAAO,KAAK,YAAY;AAAA;AAAA,IAEnC,qBAAqB;AACjB,UAAI,KAAK,YAAY;AACjB,eAAO;AAAA,iBAEF,KAAK,UAAU,WAAW;AAC/B,eAAO,CAAC,KAAK;AAAA,aAEZ;AACD,eAAO,KAAK;AAAA;AAAA;AAAA,IAGpB,gBAAgB;AACZ,UAAI,CAAC,KAAK,gBAAgB;AACtB,aAAK,KAAK,gBAAgB,KAAK,cAAY,YAAY,KAAK,oBAAoB;AAChF,aAAK,iBAAiB;AAAA;AAAA;AAAA,UAGxB,OAAO,UAAU;AACnB,WAAK;AACL,YAAM,IAAI,QAAQ,aAAW;AACzB,aAAK,QAAQ,sBAAsB,MAAM;AAAA;AAE7C,YAAM;AACN,aAAO,KAAK;AACZ,WAAK;AAAA;AAAA,IAET,eAAe;AACX,UAAI,KAAK,OAAO;AACZ,6BAAqB,KAAK;AAC1B,eAAO,KAAK;AAAA;AAAA;AAAA;AAIxB,wBAAsB,YAAY;AAC9B,WAAO,cAAc,OAAO,aAAa;AAAA;AAG7C,6BAAqB;AAAA,IACjB,YAAY,UAAS;AACjB,WAAK,cAAc,IAAI;AACvB,WAAK,kBAAkB,MAAM;AACzB,aAAK,YAAY;AAAA;AAErB,WAAK,UAAU;AAAA;AAAA,IAEnB,wBAAwB,WAAU,SAAS;AACvC,WAAK,UAAU,WAAW,WAAU,QAAQ;AAAA;AAAA,IAEhD,aAAa,QAAO;AAChB,aAAM;AACN,aAAM;AACN,aAAM;AACN,aAAM;AAAA;AAAA,IAEV,oBAAoB,QAAO;AACvB,WAAK,YAAY,SAAS;AAC1B,UAAI,OAAM,uBAAuB,OAAM,UAAU,WAAW;AACxD,aAAK;AAAA,aAEJ;AACD,aAAK;AAAA;AAAA;AAAA,IAGb,sBAAsB,QAAO;AACzB,aAAM;AAAA;AAAA,IAEV,iCAAiC,QAAO,YAAY;AAChD,cAAQ;AAAA,aACC,iBAAiB;AAAA,aACjB,iBAAiB;AAAA,aACjB,iBAAiB;AAClB,iBAAO,KAAK;AAAA;AAEZ,iBAAO,OAAM;AAAA;AAAA;AAAA,IAGzB,qBAAqB,QAAO;AACxB,WAAK,YAAY,SAAS;AAC1B,WAAK;AAAA;AAAA,IAET,eAAe,QAAO;AAAA;AAAA,IAEtB,kBAAkB;AACd,WAAK;AAAA;AAAA,IAET,YAAY,QAAO;AAAA;AAAA,IAEnB,cAAc,QAAO;AAAA;AAAA,IAErB,sBAAsB,gBAAgB;AAClC,WAAK,YAAY,SAAS;AAC1B,WAAK;AAAA;AAAA,IAET,uBAAuB,gBAAgB;AACnC,WAAK,YAAY,SAAS;AAC1B,WAAK;AAAA;AAAA,IAET,iCAAiC;AAC7B,WAAK,0BAA0B,OAAO,WAAW,KAAK,iBAAiB,KAAK,QAAQ;AAAA;AAAA,IAExF,uBAAuB;AACnB,WAAK,YAAY;AACjB,UAAI,KAAK,2BAA2B,MAAM;AACtC,eAAO,aAAa,KAAK;AACzB,eAAO,KAAK;AAAA;AAAA;AAAA,IAGpB,gCAAgC;AAC5B,UAAI,KAAK,0BAA0B,MAAM;AACrC,aAAK,yBAAyB,OAAO,WAAW,KAAK,iBAAiB,KAAK,QAAQ;AAAA;AAAA;AAAA,IAG3F,sBAAsB;AAClB,WAAK,YAAY;AACjB,UAAI,KAAK,0BAA0B,MAAM;AACrC,eAAO,aAAa,KAAK;AACzB,eAAO,KAAK;AAAA;AAAA;AAAA,IAGpB,SAAS;AACL,aAAO,SAAS;AAAA;AAAA,QAEhB,YAAY;AACZ,aAAO,KAAK,QAAQ;AAAA;AAAA;AAI5B,4BAAoB;AAAA,IAChB,cAAc;AACV,WAAK,UAAU;AAAA;AAAA,IAEnB,QAAQ;AACJ,UAAI,CAAC,KAAK,SAAS;AACf,aAAK,UAAU;AACf,yBAAiB,sBAAsB,KAAK,qBAAqB;AAAA;AAAA;AAAA,IAGzE,OAAO;AACH,UAAI,KAAK,SAAS;AACd,aAAK,UAAU;AACf,4BAAoB,sBAAsB,KAAK,qBAAqB;AAAA;AAAA;AAAA,IAG5E,sBAAsB;AAClB,YAAM,gBAAgB,CAAC,GAAG,SAAS,iBAAiB;AACpD,iBAAW,WAAW,eAAe;AACjC,gBAAQ;AAAA;AAAA;AAAA;AAKpB,iCAAyB;AAAA,IACrB,YAAY,UAAU;AAClB,WAAK,UAAU;AACf,WAAK,iBAAiB,MAAM;AACxB,4BAAoB,UAAU,KAAK,eAAe;AAClD,yBAAiB,UAAU,KAAK,eAAe;AAAA;AAEnD,WAAK,gBAAiB,CAAC,WAAU;AAC7B,YAAI,CAAC,OAAM,kBAAkB;AACzB,gBAAM,OAAO,OAAM,kBAAkB,kBAAkB,OAAM,SAAS;AACtE,gBAAM,YAAY,OAAM,aAAa;AACrC,cAAI,MAAM;AACN,kBAAM,SAAU,eAAc,QAAQ,cAAc,SAAS,SAAS,UAAU,aAAa,kBAAkB,KAAK,aAAa;AACjI,gBAAI,UAAU,YAAY,KAAK,SAAS,eAAe,MAAM,YAAY;AACrE,qBAAM;AACN,mBAAK,SAAS,cAAc,MAAM;AAAA;AAAA;AAAA;AAAA;AAKlD,WAAK,WAAW;AAAA;AAAA,IAEpB,QAAQ;AACJ,UAAI,CAAC,KAAK,SAAS;AACf,yBAAiB,UAAU,KAAK,gBAAgB;AAChD,aAAK,UAAU;AAAA;AAAA;AAAA,IAGvB,OAAO;AACH,UAAI,KAAK,SAAS;AACd,4BAAoB,UAAU,KAAK,gBAAgB;AACnD,aAAK,UAAU;AAAA;AAAA;AAAA;AAK3B,8BAAsB;AAAA,IAClB,YAAY,SAAS;AACjB,WAAK,UAAU;AACf,WAAK,kBAAkB,IAAI,gBAAgB,MAAM;AACjD,WAAK,kBAAkB,IAAI,gBAAgB,MAAM;AAAA;AAAA,IAErD,QAAQ;AACJ,WAAK,gBAAgB;AACrB,WAAK,gBAAgB;AAAA;AAAA,IAEzB,OAAO;AACH,WAAK,gBAAgB;AACrB,WAAK,gBAAgB;AAAA;AAAA,IAEzB,yBAAyB,SAAS,KAAK;AACnC,aAAO,KAAK,eAAe;AAAA;AAAA,IAE/B,qBAAqB,SAAS,KAAK;AAC/B,YAAM,QAAQ,KAAK,iBAAiB;AACpC,UAAI,OAAO;AACP,cAAM,SAAS,qBAAqB,SAAS;AAAA;AAAA;AAAA,IAGrD,8BAA8B,SAAS,WAAW;AAC9C,aAAO,KAAK,aAAa,SAAS;AAAA;AAAA,IAEtC,0BAA0B,SAAS,WAAW;AAC1C,YAAM,QAAQ,KAAK,iBAAiB,SAAS;AAC7C,UAAI,OAAO;AACP,cAAM,gBAAgB;AACtB,cAAM,SAAS,0BAA0B,SAAS;AAAA;AAAA;AAAA,IAG1D,aAAa,MAAM,WAAW;AAC1B,UAAI;AACJ,YAAM,SAAS,UAAU,MAAM;AAC/B,YAAM,OAAO,KAAK,QAAQ,cAAc,cAAc;AACtD,YAAM,eAAe,UAAW,MAAK,SAAS,QAAQ,SAAS,SAAS,SAAS,KAAK,aAAa,QAAQ,OAAO,SAAS,KAAK;AAChI,aAAO,KAAK,eAAe,MAAM,cAAc,oBAAoB,QAAQ;AAAA;AAAA,IAE/E,eAAe,SAAS,WAAW;AAC/B,YAAM,QAAQ,KAAK,iBAAiB,SAAS;AAC7C,aAAO,QAAQ,SAAS,QAAQ,QAAQ,iBAAiB;AAAA;AAAA,IAE7D,iBAAiB,SAAS,WAAW;AACjC,YAAM,MAAM,eAAc,QAAQ,cAAc,SAAS,SAAS,UAAU,aAAa,wBAAwB,QAAQ,aAAa;AACtI,UAAI,OAAM,OAAM,QAAQ;AACpB,cAAM,QAAQ,KAAK,QAAQ,cAAc,IAAI;AAC7C,YAAI,iBAAiB,cAAc;AAC/B,iBAAO;AAAA;AAAA;AAAA;AAAA;AAMvB,sBAAc;AAAA,IACV,YAAY,UAAU;AAClB,WAAK,wBAAwB;AAC7B,WAAK,kBAAkB;AACvB,WAAK,UAAU;AACf,WAAK,aAAa;AAClB,WAAK,aAAa,CAAC,WAAU;AACzB,YAAI,KAAK,wBAAwB;AAC7B,gBAAM,EAAE,UAAU,OAAM,SAAS;AACjC,cAAI,OAAO;AACP,iBAAK,WAAW,IAAI,IAAI,OAAO,SAAS;AACxC,kBAAM,EAAE,0BAA0B;AAClC,iBAAK,wBAAwB;AAC7B,iBAAK,SAAS,iDAAiD,KAAK,UAAU;AAAA;AAAA;AAAA;AAI1F,WAAK,aAAa,OAAO,WAAU;AAC/B,cAAM;AACN,aAAK,aAAa;AAAA;AAEtB,WAAK,WAAW;AAAA;AAAA,IAEpB,QAAQ;AACJ,UAAI,CAAC,KAAK,SAAS;AACf,yBAAiB,YAAY,KAAK,YAAY;AAC9C,yBAAiB,QAAQ,KAAK,YAAY;AAC1C,aAAK,UAAU;AACf,aAAK,QAAQ,IAAI,IAAI,OAAO,SAAS;AAAA;AAAA;AAAA,IAG7C,OAAO;AACH,UAAI,KAAK,SAAS;AACd,4BAAoB,YAAY,KAAK,YAAY;AACjD,4BAAoB,QAAQ,KAAK,YAAY;AAC7C,aAAK,UAAU;AAAA;AAAA;AAAA,IAGvB,KAAK,WAAU,uBAAuB;AAClC,WAAK,OAAO,QAAQ,WAAW,WAAU;AAAA;AAAA,IAE7C,QAAQ,WAAU,uBAAuB;AACrC,WAAK,OAAO,QAAQ,cAAc,WAAU;AAAA;AAAA,IAEhD,OAAO,QAAQ,WAAU,wBAAwB,QAAQ;AACrD,YAAM,QAAQ,EAAE,OAAO,EAAE;AACzB,aAAO,KAAK,SAAS,OAAO,IAAI,UAAS;AACzC,WAAK,WAAW;AAChB,WAAK,wBAAwB;AAAA;AAAA,IAEjC,gCAAgC,uBAAuB;AACnD,aAAO,KAAK,gBAAgB,0BAA0B;AAAA;AAAA,IAE1D,sBAAsB,gBAAgB;AAClC,YAAM,EAAE,0BAA0B;AAClC,YAAM,kBAAkB,KAAK,gBAAgB;AAC7C,WAAK,gBAAgB,yBAAyB,OAAO,OAAO,OAAO,OAAO,IAAI,kBAAkB;AAAA;AAAA,IAEpG,mCAAmC;AAC/B,UAAI;AACJ,UAAI,CAAC,KAAK,2BAA2B;AACjC,aAAK,4BAA6B,MAAK,QAAQ,uBAAuB,QAAQ,OAAO,SAAS,KAAK;AACnG,gBAAQ,oBAAoB;AAAA;AAAA;AAAA,IAGpC,uCAAuC;AACnC,UAAI,KAAK,2BAA2B;AAChC,gBAAQ,oBAAoB,KAAK;AACjC,eAAO,KAAK;AAAA;AAAA;AAAA,IAGpB,uBAAuB;AACnB,aAAO,KAAK;AAAA;AAAA,IAEhB,eAAe;AACX,aAAO,KAAK,cAAc,SAAS,cAAc;AAAA;AAAA;AAIzD,gCAAwB;AAAA,IACpB,YAAY,UAAU;AAClB,WAAK,UAAU;AACf,WAAK,gBAAgB,MAAM;AACvB,4BAAoB,SAAS,KAAK,cAAc;AAChD,yBAAiB,SAAS,KAAK,cAAc;AAAA;AAEjD,WAAK,eAAe,CAAC,WAAU;AAC3B,YAAI,KAAK,wBAAwB,SAAQ;AACrC,gBAAM,SAAU,OAAM,gBAAgB,OAAM,eAAe,MAAO,OAAM;AACxE,gBAAM,QAAO,KAAK,wBAAwB;AAC1C,cAAI,OAAM;AACN,kBAAM,YAAW,KAAK,mBAAmB;AACzC,gBAAI,KAAK,SAAS,yBAAyB,OAAM,YAAW;AACxD,qBAAM;AACN,mBAAK,SAAS,uBAAuB,OAAM;AAAA;AAAA;AAAA;AAAA;AAK3D,WAAK,WAAW;AAAA;AAAA,IAEpB,QAAQ;AACJ,UAAI,CAAC,KAAK,SAAS;AACf,yBAAiB,SAAS,KAAK,eAAe;AAC9C,aAAK,UAAU;AAAA;AAAA;AAAA,IAGvB,OAAO;AACH,UAAI,KAAK,SAAS;AACd,4BAAoB,SAAS,KAAK,eAAe;AACjD,aAAK,UAAU;AAAA;AAAA;AAAA,IAGvB,wBAAwB,QAAO;AAC3B,aAAO,CAAG,QAAM,UAAU,OAAM,OAAO,qBAChC,OAAM,oBACN,OAAM,QAAQ,KACd,OAAM,UACN,OAAM,WACN,OAAM,WACN,OAAM;AAAA;AAAA,IAEjB,wBAAwB,QAAQ;AAC5B,UAAI,kBAAkB,SAAS;AAC3B,eAAO,OAAO,QAAQ;AAAA;AAAA;AAAA,IAG9B,mBAAmB,OAAM;AACrB,aAAO,UAAU,MAAK,aAAa,WAAW;AAAA;AAAA;AAItD,oBAAkB,QAAQ;AACtB,WAAO,UAAU,aAAa,UAAU,aAAa,UAAU;AAAA;AAGnE,wBAAgB;AAAA,IACZ,YAAY,UAAU;AAClB,WAAK,WAAW;AAAA;AAAA,IAEpB,aAAa,WAAU,UAAU,IAAI;AACjC,UAAI,KAAK,SAAS,iCAAiC,WAAU,QAAQ,SAAS;AAC1E,YAAI,oBAAoB,WAAU,KAAK,KAAK,SAAS,eAAe;AAChE,eAAK,SAAS,wBAAwB,WAAU;AAAA,eAE/C;AACD,iBAAO,SAAS,OAAO,UAAS;AAAA;AAAA;AAAA;AAAA,IAI5C,WAAW,WAAW,uBAAuB,UAAU,IAAI;AACvD,WAAK;AACL,WAAK,eAAe,IAAI,MAAM,MAAM,UAAU,YAAY,uBAAuB,OAAO,OAAO,EAAE,UAAU,KAAK,YAAY;AAC5H,WAAK,aAAa;AAAA;AAAA,IAEtB,WAAW,MAAM,WAAW;AACxB,WAAK;AACL,WAAK,iBAAiB,IAAI,eAAe,MAAM,MAAM,WAAW;AAChE,WAAK,eAAe;AAAA;AAAA,IAExB,OAAO;AACH,UAAI,KAAK,gBAAgB;AACrB,aAAK,eAAe;AACpB,eAAO,KAAK;AAAA;AAEhB,UAAI,KAAK,cAAc;AACnB,aAAK,aAAa;AAClB,eAAO,KAAK;AAAA;AAAA;AAAA,QAGhB,UAAU;AACV,aAAO,KAAK,SAAS;AAAA;AAAA,QAErB,OAAO;AACP,aAAO,KAAK,SAAS;AAAA;AAAA,QAErB,UAAU;AACV,aAAO,KAAK,SAAS;AAAA;AAAA,IAEzB,sBAAsB,gBAAgB;AAClC,UAAI,OAAO,KAAK,QAAQ,0BAA0B,YAAY;AAC1D,aAAK,QAAQ,sBAAsB;AAAA;AAAA;AAAA,UAGrC,oCAAoC,gBAAgB,eAAe;AACrE,UAAI,kBAAkB,KAAK,gBAAgB;AACvC,cAAM,eAAe,MAAM,cAAc;AACzC,YAAI,cAAc;AACd,cAAI,eAAe,UAAU,YAAY,KAAK;AAC1C,iBAAK,KAAK;AAAA;AAEd,gBAAM,EAAE,YAAY,eAAe;AACnC,gBAAM,SAAS,KAAK,2BAA2B;AAC/C,gBAAM,eAAe,EAAE,QAAQ,UAAU,EAAE,YAAY,cAAc;AACrE,eAAK,aAAa,cAAc,UAAU;AAAA;AAAA;AAAA;AAAA,UAIhD,iCAAiC,gBAAgB,eAAe;AAClE,YAAM,eAAe,MAAM,cAAc;AACzC,UAAI,cAAc;AACd,cAAM,WAAW,aAAa,eAAe;AAC7C,YAAI,cAAc,aAAa;AAC3B,gBAAM,KAAK,KAAK,YAAY;AAAA,eAE3B;AACD,gBAAM,KAAK,KAAK,WAAW;AAAA;AAE/B,aAAK,KAAK;AACV,aAAK,KAAK;AAAA;AAAA;AAAA,IAGlB,sBAAsB,gBAAgB,QAAO;AACzC,cAAQ,MAAM;AAAA;AAAA,IAElB,uBAAuB,gBAAgB;AACnC,UAAI,OAAO,KAAK,QAAQ,2BAA2B,YAAY;AAC3D,aAAK,QAAQ,uBAAuB;AAAA;AAAA;AAAA,IAG5C,aAAa,QAAO;AAChB,WAAK,SAAS,aAAa;AAAA;AAAA,IAE/B,eAAe,QAAO;AAClB,WAAK,SAAS,eAAe;AAAA;AAAA,IAEjC,6BAA6B,WAAU,QAAQ;AAC3C,YAAM,SAAS,UAAU;AACzB,YAAM,gBAAgB,UAAU,KAAK,KAAK;AAC1C,YAAM,qBAAqB,WAAW,aAAa,OAAO,WAAW;AACrE,aAAO,WAAW,aACd,cAAc,eAAc,cAAc,KAAK,KAAK,yBACnD,uBAAuB,UAAU,QAAQ,WAAW;AAAA;AAAA,IAE7D,gCAAgC,QAAQ,QAAQ;AAC5C,WAAK,SAAS,gCAAgC,QAAQ;AAAA;AAAA,QAEtD,WAAW;AACX,aAAO,KAAK,QAAQ;AAAA;AAAA,QAEpB,wBAAwB;AACxB,aAAO,KAAK,QAAQ;AAAA;AAAA,IAExB,2BAA2B,gBAAgB;AACvC,YAAM,EAAE,aAAa,cAAc;AACnC,YAAM,SAAS,aAAa,qBAAqB,WAAW;AAC5D,aAAO,SAAS,UAAU,SAAS;AAAA;AAAA;AAI3C,MAAI;AACJ,EAAC,UAAU,YAAW;AAClB,eAAU,WAAU,aAAa,KAAK;AACtC,eAAU,WAAU,aAAa,KAAK;AACtC,eAAU,WAAU,iBAAiB,KAAK;AAC1C,eAAU,WAAU,cAAc,KAAK;AAAA,KACxC,aAAc,aAAY;AAC7B,2BAAmB;AAAA,IACf,YAAY,UAAU;AAClB,WAAK,QAAQ,UAAU;AACvB,WAAK,UAAU;AACf,WAAK,sBAAsB,MAAM;AAC7B,cAAM,EAAE,eAAe;AACvB,YAAI,cAAc,eAAe;AAC7B,eAAK;AAAA,mBAEA,cAAc,YAAY;AAC/B,eAAK;AAAA;AAAA;AAGb,WAAK,iBAAiB,MAAM;AACxB,aAAK,SAAS;AAAA;AAElB,WAAK,WAAW;AAAA;AAAA,IAEpB,QAAQ;AACJ,UAAI,CAAC,KAAK,SAAS;AACf,YAAI,KAAK,SAAS,UAAU,SAAS;AACjC,eAAK,QAAQ,UAAU;AAAA;AAE3B,iBAAS,iBAAiB,oBAAoB,KAAK,qBAAqB;AACxE,yBAAiB,YAAY,KAAK,gBAAgB;AAClD,aAAK,UAAU;AAAA;AAAA;AAAA,IAGvB,OAAO;AACH,UAAI,KAAK,SAAS;AACd,iBAAS,oBAAoB,oBAAoB,KAAK,qBAAqB;AAC3E,4BAAoB,YAAY,KAAK,gBAAgB;AACrD,aAAK,UAAU;AAAA;AAAA;AAAA,IAGvB,oBAAoB;AAChB,UAAI,KAAK,SAAS,UAAU,SAAS;AACjC,aAAK,QAAQ,UAAU;AACvB,aAAK,SAAS;AAAA;AAAA;AAAA,IAGtB,iBAAiB;AACb,WAAK;AACL,UAAI,KAAK,SAAS,UAAU,aAAa;AACrC,aAAK,QAAQ,UAAU;AACvB,aAAK,SAAS;AAAA;AAAA;AAAA,QAGlB,aAAa;AACb,aAAO,SAAS;AAAA;AAAA;AAIxB,6BAAqB;AAAA,IACjB,YAAY,UAAU;AAClB,WAAK,UAAU;AACf,WAAK,WAAW,MAAM;AAClB,aAAK,eAAe,EAAE,GAAG,OAAO,aAAa,GAAG,OAAO;AAAA;AAE3D,WAAK,WAAW;AAAA;AAAA,IAEpB,QAAQ;AACJ,UAAI,CAAC,KAAK,SAAS;AACf,yBAAiB,UAAU,KAAK,UAAU;AAC1C,aAAK;AACL,aAAK,UAAU;AAAA;AAAA;AAAA,IAGvB,OAAO;AACH,UAAI,KAAK,SAAS;AACd,4BAAoB,UAAU,KAAK,UAAU;AAC7C,aAAK,UAAU;AAAA;AAAA;AAAA,IAGvB,eAAe,UAAU;AACrB,WAAK,SAAS,sBAAsB;AAAA;AAAA;AAI5C,6BAAqB;AAAA,IACjB,YAAY,UAAU;AAClB,WAAK,UAAU,oBAAI;AACnB,WAAK,UAAU;AACf,WAAK,uBAAwB,CAAC,WAAU;AACpC,cAAM,WAAW,uBAAuB;AACxC,YAAI,YAAY,sBAAsB,WAAW;AAC7C,iBAAM;AACN,eAAK,uBAAuB;AAAA;AAAA;AAGpC,WAAK,sBAAsB,CAAC,WAAU;AAClC,YAAI,KAAK,WAAW,OAAO,OAAM,QAAQ,UAAU;AAC/C,eAAK,mBAAmB,OAAM;AAAA;AAAA;AAGtC,WAAK,WAAW;AAAA;AAAA,IAEpB,QAAQ;AACJ,UAAI,CAAC,KAAK,SAAS;AACf,aAAK,UAAU;AACf,yBAAiB,+BAA+B,KAAK,sBAAsB;AAAA;AAAA;AAAA,IAGnF,OAAO;AACH,UAAI,KAAK,SAAS;AACd,aAAK,UAAU;AACf,4BAAoB,+BAA+B,KAAK,sBAAsB;AAAA;AAAA;AAAA,IAGtF,oBAAoB,QAAQ;AACxB,UAAI,CAAC,KAAK,wBAAwB,SAAS;AACvC,aAAK,QAAQ,IAAI;AACjB,eAAO,iBAAiB,WAAW,KAAK,qBAAqB;AAAA;AAAA;AAAA,IAGrE,uBAAuB,QAAQ;AAC3B,UAAI,KAAK,wBAAwB,SAAS;AACtC,aAAK,QAAQ,OAAO;AACpB,eAAO,oBAAoB,WAAW,KAAK,qBAAqB;AAAA;AAAA;AAAA,IAGxE,wBAAwB,QAAQ;AAC5B,aAAO,KAAK,QAAQ,IAAI;AAAA;AAAA,UAEtB,uBAAuB,UAAU;AACnC,YAAM,OAAO,MAAM,SAAS;AAC5B,UAAI,MAAM;AACN,aAAK,mBAAmB;AAAA;AAAA;AAAA,IAGhC,mBAAmB,MAAM;AACrB,WAAK,SAAS,0BAA0B,IAAI,cAAc;AAAA;AAAA;AAGlE,kCAAgC,QAAO;AACnC,QAAI;AACJ,UAAM,gBAAiB,MAAK,OAAM,YAAY,QAAQ,OAAO,SAAS,SAAS,GAAG;AAClF,QAAI,yBAAyB,eAAe;AACxC,aAAO;AAAA;AAAA;AAGf,iCAA+B,UAAU;AACrC,QAAI;AACJ,UAAM,cAAe,MAAK,SAAS,iBAAiB,QAAQ,OAAO,SAAS,KAAK;AACjF,WAAO,YAAY,WAAW,cAAc;AAAA;AAGhD,oCAA4B,SAAS;AAAA,UAC3B,SAAS;AACX,WAAK;AACL,WAAK;AAAA;AAAA,IAET,qBAAqB;AACjB,YAAM,EAAE,iBAAiB,MAAM,SAAS;AACxC,sBAAgB,aAAa,KAAK,SAAS;AAC3C,sBAAgB,aAAa,KAAK,YAAY;AAAA;AAAA,IAElD,yBAAyB;AACrB,iBAAW,sBAAsB,KAAK,gBAAgB;AAClD,cAAM,aAAa,mBAAmB;AACtC,YAAI,YAAY;AACZ,gBAAM,UAAU,KAAK,oBAAoB;AACzC,qBAAW,aAAa,SAAS;AAAA;AAAA;AAAA;AAAA,QAIzC,UAAU;AACV,aAAO,KAAK,YAAY,aAAa;AAAA;AAAA,QAErC,iBAAiB;AACjB,aAAO,CAAC,GAAG,SAAS,gBAAgB,iBAAiB;AAAA;AAAA;AAI7D,mCAA2B,SAAS;AAAA,QAC5B,eAAe;AACf,aAAO,KAAK,YAAY,eAAe,KAAK;AAAA;AAAA,IAEhD,kBAAkB;AACd,WAAK;AAAA;AAAA,UAEH,SAAS;AACX,UAAI,KAAK,YAAY;AACjB,aAAK;AAAA;AAAA;AAAA,IAGb,kBAAkB;AACd,YAAM;AACN,UAAI,CAAC,KAAK,WAAW;AACjB,aAAK;AAAA;AAAA;AAAA,QAGT,sBAAsB;AACtB,aAAO,KAAK,gBAAgB;AAAA;AAAA,QAE5B,kBAAkB;AAClB,aAAO,KAAK,YAAY;AAAA;AAAA,QAExB,aAAa;AACb,aAAO,KAAK,YAAY;AAAA;AAAA,IAE5B,YAAY;AACR,WAAK;AACL,WAAK;AACL,WAAK;AACL,WAAK;AAAA;AAAA,IAET,cAAc;AACV,WAAK,4BAA4B,MAAM;AACnC,aAAK;AACL,aAAK;AAAA;AAAA;AAAA,QAGT,8BAA8B;AAC9B,aAAO,KAAK,oBAAoB,2BAA2B,KAAK,gBAAgB;AAAA;AAAA,IAEpF,gCAAgC;AAC5B,iBAAW,WAAW,KAAK,2BAA2B;AAClD,iBAAS,KAAK,YAAY;AAAA;AAAA;AAAA,IAGlC,4BAA4B;AACxB,iBAAW,WAAW,KAAK,uBAAuB;AAC9C,iBAAS,KAAK,YAAY,KAAK,oBAAoB;AAAA;AAAA;AAAA,IAG3D,uCAAuC;AACnC,iBAAW,WAAW,KAAK,gCAAgC;AACvD,iBAAS,KAAK,YAAY;AAAA;AAAA;AAAA,IAGlC,iCAAiC;AAC7B,iBAAW,WAAW,KAAK,4BAA4B;AACnD,iBAAS,KAAK,YAAY;AAAA;AAAA;AAAA,IAGlC,kBAAkB;AACd,eAAS,UAAU,KAAK;AACxB,WAAK;AAAA;AAAA,IAET,gCAAgC;AAC5B,iBAAW,sBAAsB,KAAK,uBAAuB;AACzD,cAAM,yBAAyB,KAAK,oBAAoB;AACxD,2BAAmB,YAAY;AAAA;AAAA;AAAA,IAGvC,gBAAgB;AACZ,UAAI,SAAS,QAAQ,KAAK,sBAAsB,iBAAiB;AAC7D,iBAAS,KAAK,YAAY,KAAK;AAAA,aAE9B;AACD,iBAAS,gBAAgB,YAAY,KAAK;AAAA;AAAA;AAAA,QAG9C,4BAA4B;AAC5B,aAAO,KAAK,gBAAgB,mCAAmC,KAAK;AAAA;AAAA,QAEpE,wBAAwB;AACxB,aAAO,KAAK,gBAAgB,+BAA+B,KAAK;AAAA;AAAA,QAEhE,iCAAiC;AACjC,aAAO,KAAK,oBAAoB;AAAA;AAAA,QAEhC,6BAA6B;AAC7B,aAAO,KAAK,gBAAgB;AAAA;AAAA,QAE5B,wBAAwB;AACxB,aAAO,KAAK,WAAW,iBAAiB;AAAA;AAAA;AAIhD,4BAAoB;AAAA,IAChB,YAAY,MAAM;AACd,WAAK,OAAO;AACZ,WAAK,YAAY;AACjB,WAAK,OAAO;AAAA;AAAA,IAEhB,IAAI,WAAU;AACV,aAAO,WAAW,cAAa,KAAK;AAAA;AAAA,IAExC,IAAI,WAAU;AACV,UAAI,KAAK,IAAI,YAAW;AACpB,cAAM,WAAW,KAAK,KAAK;AAC3B,aAAK,MAAM;AACX,eAAO;AAAA;AAAA;AAAA,IAGf,IAAI,WAAU,UAAU;AACpB,WAAK,MAAM,WAAU;AACrB,WAAK,MAAM;AACX,aAAO;AAAA;AAAA,IAEX,QAAQ;AACJ,WAAK,YAAY;AAAA;AAAA,IAErB,KAAK,WAAU;AACX,aAAO,KAAK,UAAU,WAAW;AAAA;AAAA,IAErC,MAAM,WAAU,UAAU;AACtB,WAAK,UAAU,WAAW,cAAa;AAAA;AAAA,IAE3C,MAAM,WAAU;AACZ,YAAM,MAAM,WAAW;AACvB,YAAM,SAAQ,KAAK,KAAK,QAAQ;AAChC,UAAI,SAAQ;AACR,aAAK,KAAK,OAAO,QAAO;AAC5B,WAAK,KAAK,QAAQ;AAClB,WAAK;AAAA;AAAA,IAET,OAAO;AACH,iBAAW,OAAO,KAAK,KAAK,OAAO,KAAK,OAAO;AAC3C,eAAO,KAAK,UAAU;AAAA;AAAA;AAAA;AAKlC,+BAAuB,KAAK;AAAA,IACxB,cAAc;AACV,YAAM,GAAG;AACT,WAAK,gBAAgB,IAAI,cAAc;AACvC,WAAK,uBAAuB,IAAI,IAAI,SAAS;AAAA;AAAA,IAEjD,WAAW,UAAU,YAAY,OAAO,aAAa,MAAM;AACvD,YAAM,WAAW,IAAI,aAAa,KAAK,UAAU,UAAU,WAAW;AACtE,aAAO,KAAK,OAAO;AAAA;AAAA,IAEvB,YAAY,UAAU;AAClB,YAAM,WAAW,IAAI,cAAc,KAAK,UAAU,UAAU;AAC5D,aAAO,KAAK,OAAO;AAAA;AAAA,IAEvB,qBAAqB;AACjB,WAAK,cAAc;AAAA;AAAA,UAEjB,gBAAgB;AAClB,UAAI,KAAK,qBAAqB;AAC1B,aAAK,SAAS;AACd,cAAM,EAAE,UAAU,sBAAsB,cAAa;AACrD,cAAM;AACN,cAAM,iBAAiB,SAAS;AAChC,aAAK,cAAc,IAAI,WAAU;AACjC,eAAO;AAAA;AAAA;AAAA,IAGf,6BAA6B,WAAU;AACnC,aAAO,KAAK,cAAc,IAAI;AAAA;AAAA,QAE9B,WAAW;AACX,aAAO,aAAa,YAAY,KAAK;AAAA;AAAA,QAErC,sBAAsB;AACtB,aAAO,KAAK,SAAS;AAAA;AAAA;AAI7B,sBAAc;AAAA,IACV,cAAc;AACV,WAAK,YAAY,IAAI,UAAU;AAC/B,WAAK,UAAU,IAAI,QAAQ;AAC3B,WAAK,OAAO,IAAI,SAAS,MAAM,SAAS;AACxC,WAAK,UAAU,IAAI,eAAe;AAClC,WAAK,eAAe,IAAI,aAAa;AACrC,WAAK,gBAAgB,IAAI;AACzB,WAAK,oBAAoB,IAAI,kBAAkB;AAC/C,WAAK,qBAAqB,IAAI,mBAAmB;AACjD,WAAK,iBAAiB,IAAI,eAAe;AACzC,WAAK,iBAAiB,IAAI,eAAe;AACzC,WAAK,kBAAkB,IAAI,gBAAgB,SAAS;AACpD,WAAK,QAAQ;AACb,WAAK,UAAU;AACf,WAAK,mBAAmB;AACxB,WAAK,UAAU;AAAA;AAAA,IAEnB,QAAQ;AACJ,UAAI,CAAC,KAAK,SAAS;AACf,aAAK,aAAa;AAClB,aAAK,cAAc;AACnB,aAAK,kBAAkB;AACvB,aAAK,mBAAmB;AACxB,aAAK,eAAe;AACpB,aAAK,eAAe;AACpB,aAAK,gBAAgB;AACrB,aAAK,QAAQ;AACb,aAAK,UAAU;AACf,aAAK,UAAU;AAAA;AAAA;AAAA,IAGvB,UAAU;AACN,WAAK,UAAU;AAAA;AAAA,IAEnB,OAAO;AACH,UAAI,KAAK,SAAS;AACd,aAAK,aAAa;AAClB,aAAK,cAAc;AACnB,aAAK,kBAAkB;AACvB,aAAK,mBAAmB;AACxB,aAAK,eAAe;AACpB,aAAK,eAAe;AACpB,aAAK,gBAAgB;AACrB,aAAK,QAAQ;AACb,aAAK,UAAU;AAAA;AAAA;AAAA,IAGvB,gBAAgB,SAAS;AACrB,WAAK,UAAU;AAAA;AAAA,IAEnB,MAAM,WAAU,UAAU,IAAI;AAC1B,WAAK,UAAU,aAAa,UAAU,YAAW;AAAA;AAAA,IAErD,oBAAoB,QAAQ;AACxB,WAAK,eAAe,oBAAoB;AAAA;AAAA,IAE5C,uBAAuB,QAAQ;AAC3B,WAAK,eAAe,uBAAuB;AAAA;AAAA,IAE/C,oBAAoB,SAAS;AACzB,eAAS,gBAAgB,YAAY,cAAc,KAAK,SAAS;AAAA;AAAA,IAErE,aAAa;AACT,WAAK,KAAK;AAAA;AAAA,IAEd,oBAAoB,OAAO;AACvB,WAAK,mBAAmB;AAAA;AAAA,QAExB,WAAW;AACX,aAAO,KAAK,QAAQ;AAAA;AAAA,QAEpB,wBAAwB;AACxB,aAAO,KAAK,QAAQ;AAAA;AAAA,IAExB,iDAAiD,WAAU,uBAAuB;AAC9E,UAAI,KAAK,SAAS;AACd,aAAK,UAAU,WAAW,WAAU,uBAAuB,EAAE,QAAQ,WAAW,gBAAgB;AAAA,aAE/F;AACD,aAAK,QAAQ;AAAA;AAAA;AAAA,IAGrB,sBAAsB,UAAU;AAC5B,WAAK,QAAQ,sBAAsB,EAAE,gBAAgB;AAAA;AAAA,IAEzD,yBAAyB,OAAM,WAAU;AACrC,aAAO,KAAK,oBAAoB,UACzB,oBAAoB,WAAU,KAAK,SAAS,iBAC5C,KAAK,yCAAyC,OAAM;AAAA;AAAA,IAE/D,uBAAuB,OAAM,WAAU;AACnC,YAAM,SAAS,KAAK,iBAAiB;AACrC,WAAK,2CAA2C,UAAS,KAAK,MAAM,UAAS,MAAM,EAAE;AAAA;AAAA,IAEzF,2CAA2C,OAAM;AAC7C,YAAM,aAAa,MAAK,aAAa;AACrC,UAAI,YAAY;AACZ,cAAM,OAAO,SAAS,cAAc;AACpC,aAAK,SAAS;AACd,aAAK,SAAS,MAAK,aAAa,WAAW;AAC3C,aAAK,SAAS;AACd,YAAI,MAAK,aAAa,uBAAuB;AACzC,eAAK,aAAa,sBAAsB,MAAK,aAAa;AAAA;AAE9D,cAAM,QAAQ,KAAK,sBAAsB;AACzC,YAAI,OAAO;AACP,eAAK,aAAa,oBAAoB;AACtC,eAAK,iBAAiB,sBAAsB,MAAM,KAAK;AAAA,eAEtD;AACD,eAAK,iBAAiB,UAAU,MAAM,KAAK;AAAA;AAE/C,iBAAS,KAAK,YAAY;AAC1B,eAAO,SAAS,UAAU,EAAE,YAAY,MAAM,QAAQ;AAAA,aAErD;AACD,eAAO;AAAA;AAAA;AAAA,IAGf,iCAAiC,WAAU,QAAQ;AAC/C,aAAO,KAAK,6BAA6B,WAAU,WAAW,KAAK,kCAAkC;AAAA;AAAA,IAEzG,wBAAwB,WAAU,SAAS;AACvC,wCAAkC;AAClC,WAAK,QAAQ,wBAAwB,WAAU;AAAA;AAAA,IAEnD,aAAa,QAAO;AAChB,wCAAkC,OAAM;AACxC,UAAI,CAAC,OAAM,QAAQ;AACf,aAAK,uCAAuC,OAAM,UAAU,OAAM;AAAA;AAAA;AAAA,IAG1E,eAAe,QAAO;AAClB,WAAK,+BAA+B,OAAM;AAAA;AAAA,IAE9C,6BAA6B,WAAU,QAAQ;AAC3C,aAAO,KAAK,UAAU,6BAA6B,WAAU;AAAA;AAAA,IAEjE,gCAAgC,QAAQ,QAAQ;AAC5C,WAAK,+CAA+C,QAAQ;AAAA;AAAA,IAEhE,eAAe,MAAM,WAAW;AAC5B,YAAM,SAAS,UAAU,MAAM;AAC/B,aAAO,KAAK,oBAAoB,SACxB,EAAC,aAAa,KAAK,oBAAoB,eACxC,oBAAoB,UAAU,SAAS,KAAK,SAAS;AAAA;AAAA,IAEhE,cAAc,MAAM,WAAW;AAC3B,WAAK,UAAU,WAAW,MAAM;AAAA;AAAA,IAEpC,wBAAwB;AACpB,WAAK,KAAK,uBAAuB,KAAK;AACtC,WAAK;AAAA;AAAA,IAET,aAAa;AACT,WAAK,QAAQ;AAAA;AAAA,IAEjB,iBAAiB;AACb,WAAK,QAAQ;AAAA;AAAA,IAEjB,0BAA0B,SAAS;AAC/B,WAAK,oBAAoB;AAAA;AAAA,IAE7B,wBAAwB;AACpB,UAAI;AACJ,UAAI,CAAG,OAAK,KAAK,UAAU,kBAAkB,QAAQ,OAAO,SAAS,SAAS,GAAG,SAAS;AACtF,aAAK;AAAA;AAAA;AAAA,IAGb,sBAAsB,EAAE,WAAW,QAAQ;AACvC,YAAM,SAAQ,KAAK,8BAA8B,SAAS;AAC1D,aAAO,CAAC,OAAM;AAAA;AAAA,IAElB,qBAAqB,UAAU,WAAW;AACtC,WAAK,KAAK,uBAAuB,KAAK,QAAQ;AAC9C,WAAK;AAAA;AAAA,IAET,kBAAkB;AACd,WAAK,QAAQ;AAAA;AAAA,IAEjB,YAAY,OAAO;AACf,WAAK,gCAAgC;AAAA;AAAA,IAEzC,cAAc,eAAe,OAAO;AAChC,WAAK,kCAAkC,eAAe;AAAA;AAAA,IAE1D,yCAAyC,OAAM,WAAU;AACrD,YAAM,SAAQ,KAAK,6CAA6C,OAAM;AACtE,aAAO,CAAC,OAAM;AAAA;AAAA,IAElB,kCAAkC,WAAU;AACxC,YAAM,SAAQ,KAAK,wCAAwC;AAC3D,aAAO,CAAC,OAAM;AAAA;AAAA,IAElB,6CAA6C,OAAM,WAAU;AACzD,aAAO,SAAS,eAAe,EAAE,QAAQ,OAAM,QAAQ,EAAE,KAAK,UAAS,QAAQ,YAAY;AAAA;AAAA,IAE/F,wCAAwC,WAAU;AAC9C,aAAO,SAAS,sBAAsB,EAAE,QAAQ,EAAE,KAAK,UAAS,QAAQ,YAAY;AAAA;AAAA,IAExF,uCAAuC,WAAU,QAAQ;AACrD,iBAAW,SAAS;AACpB,aAAO,SAAS,eAAe,EAAE,QAAQ,EAAE,KAAK,UAAS,MAAM;AAAA;AAAA,IAEnE,yCAAyC;AACrC,aAAO,SAAS;AAAA;AAAA,IAEpB,8BAA8B,SAAS,QAAQ;AAC3C,aAAO,SAAS,uBAAuB,EAAE,QAAQ,EAAE,SAAS,UAAU,YAAY;AAAA;AAAA,IAEtF,+BAA+B;AAC3B,aAAO,SAAS;AAAA;AAAA,IAEpB,+BAA+B,SAAS,IAAI;AACxC,qBAAe,SAAS;AACxB,aAAO,SAAS,cAAc,EAAE,QAAQ,EAAE,KAAK,KAAK,SAAS,MAAM;AAAA;AAAA,IAEvE,+CAA+C,QAAQ,QAAQ;AAC3D,oBAAc,IAAI,gBAAgB,cAAc,EAAE,QAAQ,OAAO,YAAY,QAAQ,OAAO;AAAA;AAAA,IAEhG,gCAAgC,OAAO;AACnC,aAAO,SAAS,oBAAoB,EAAE,QAAQ;AAAA;AAAA,IAElD,kCAAkC,eAAe,OAAO;AACpD,aAAO,SAAS,sBAAsB,EAAE,QAAQ,EAAE,iBAAiB,QAAQ,OAAO,YAAY;AAAA;AAAA,IAElG,oBAAoB,SAAS;AACzB,YAAM,YAAY,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,QAAQ;AACpF,UAAI,KAAK,OAAO;AACZ,YAAI,WAAW;AACX,iBAAO,UAAU,aAAa,iBAAiB;AAAA,eAE9C;AACD,iBAAO;AAAA;AAAA,aAGV;AACD,YAAI,WAAW;AACX,iBAAO,UAAU,aAAa,iBAAiB;AAAA,eAE9C;AACD,iBAAO;AAAA;AAAA;AAAA;AAAA,IAInB,iBAAiB,OAAM;AACnB,YAAM,SAAS,MAAK,aAAa;AACjC,aAAO,SAAS,UAAU,SAAS;AAAA;AAAA,IAEvC,sBAAsB,OAAM;AACxB,YAAM,QAAQ,MAAK,aAAa;AAChC,UAAI,OAAO;AACP,eAAO;AAAA,aAEN;AACD,cAAM,YAAY,MAAK,QAAQ;AAC/B,YAAI,WAAW;AACX,iBAAO,UAAU;AAAA;AAAA;AAAA;AAAA,QAIzB,WAAW;AACX,aAAO,KAAK,KAAK;AAAA;AAAA;AAGzB,6CAA2C,KAAK;AAC5C,WAAO,iBAAiB,KAAK;AAAA;AAEjC,MAAM,wCAAwC;AAAA,IAC1C,aAAa;AAAA,MACT,MAAM;AACF,eAAO,KAAK;AAAA;AAAA;AAAA;AAKxB,MAAM,UAAU,IAAI;AACpB,MAAM,EAAE,WAAW,gBAAgB;AACnC,mBAAiB;AACb,YAAQ;AAAA;AAEZ,2BAAyB,SAAS;AAC9B,YAAQ,gBAAgB;AAAA;AAE5B,iBAAe,WAAU,SAAS;AAC9B,YAAQ,MAAM,WAAU;AAAA;AAE5B,+BAA6B,QAAQ;AACjC,YAAQ,oBAAoB;AAAA;AAEhC,kCAAgC,QAAQ;AACpC,YAAQ,uBAAuB;AAAA;AAEnC,+BAA6B,SAAS;AAClC,YAAQ,oBAAoB;AAAA;AAEhC,wBAAsB;AAClB,YAAQ;AAAA;AAEZ,+BAA6B,OAAO;AAChC,YAAQ,oBAAoB;AAAA;AAEhC,4BAA0B,eAAe;AACrC,mBAAe,gBAAgB;AAAA;AAGnC,MAAI,QAAqB,uBAAO,OAAO;AAAA,IACnC,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGJ,8BAAsB;AAAA,IAClB,YAAY,SAAS;AACjB,WAAK,sBAAsB,CAAC,kBAAkB;AAAA;AAC9C,WAAK,sBAAsB;AAC3B,WAAK,sBAAsB,MAAM;AAAA;AACjC,WAAK,YAAY;AACjB,WAAK,gBAAgB;AACrB,WAAK,mBAAmB;AACxB,WAAK,UAAU;AACf,WAAK,OAAO,IAAI,UAAU,MAAM,KAAK;AACrC,WAAK,qBAAqB,IAAI,mBAAmB,MAAM,KAAK;AAC5D,WAAK,kBAAkB,IAAI,gBAAgB,MAAM,KAAK;AACtD,WAAK,kBAAkB,IAAI,gBAAgB,MAAM,KAAK;AAAA;AAAA,IAE1D,UAAU;AACN,UAAI,CAAC,KAAK,WAAW;AACjB,aAAK,YAAY;AACjB,aAAK,aAAa;AAClB,YAAI,KAAK,gBAAgB,kBAAkB,MAAM;AAC7C,eAAK,mBAAmB;AAAA;AAE5B,aAAK,gBAAgB;AACrB,aAAK,gBAAgB;AACrB,aAAK;AAAA;AAAA;AAAA,IAGb,aAAa;AACT,UAAI,KAAK,WAAW;AAChB,aAAK,YAAY;AACjB,aAAK,mBAAmB;AACxB,aAAK,gBAAgB;AACrB,aAAK,gBAAgB;AAAA;AAAA;AAAA,IAG7B,kBAAkB;AACd,UAAI,KAAK,gBAAgB,kBAAkB,OAAO;AAC9C,aAAK;AAAA;AAAA;AAAA,IAGb,mBAAmB;AACf,UAAI,KAAK,gBAAgB,kBAAkB,SAAS,KAAK,eAAe;AACpE,aAAK;AAAA;AAAA;AAAA,IAGb,sBAAsB;AAClB,UAAI,KAAK,gBAAgB,kBAAkB,MAAM;AAC7C,aAAK,mBAAmB;AAAA,aAEvB;AACD,aAAK,mBAAmB;AACxB,aAAK;AAAA;AAAA;AAAA,UAGP,gBAAgB;AAClB,UAAI,CAAC,KAAK,oBAAoB,KAAK,WAAW,KAAK,YAAa,MAAK,cAAc,KAAK,aAAa,KAAK,aAAa;AACnH,cAAM,cAAc,KAAK;AACzB,aAAK,aAAa,KAAK;AACvB,YAAI,KAAK,WAAW;AAChB,cAAI;AACA,iBAAK,QAAQ,SAAS,KAAK,MAAM,UAAU,KAAK;AAChD,iBAAK,mBAAmB;AACxB,kBAAM,KAAK,QAAQ;AACnB,iBAAK,gBAAgB;AAAA,mBAElB,QAAP;AACI,iBAAK,aAAa;AAClB,kBAAM;AAAA;AAAA;AAAA;AAAA;AAAA,UAKhB,aAAa,eAAe;AAC9B,UAAI,cAAc,cAAe,cAAc,aAAa,cAAc,QAAS;AAC/E,aAAK,YAAY,cAAc,SAAS;AAAA;AAE5C,UAAI;AACA,cAAM,OAAO,MAAM,cAAc;AACjC,YAAI,MAAM;AACN,gBAAM,EAAE,SAAS,kBAAkB;AACnC,gBAAM,WAAW,IAAI,SAAS,MAAM,KAAK,2BAA2B;AACpE,gBAAM,WAAW,IAAI,cAAc,KAAK,KAAK,UAAU,UAAU,OAAO;AACxE,cAAI,KAAK,KAAK;AACV,kBAAM,KAAK,KAAK;AACpB,gBAAM,KAAK,KAAK,OAAO;AACvB,kBAAQ,cAAc,eAAe,KAAK;AAC1C,kBAAQ,YAAY,KAAK;AACzB,eAAK,oBAAoB;AAAA;AAAA,eAG1B,QAAP;AACI,gBAAQ,MAAM;AACd,aAAK,KAAK;AAAA,gBAEd;AACI,aAAK,sBAAsB,MAAM;AAAA;AAAA;AAAA;AAAA,IAGzC,0BAA0B,SAAS;AAC/B,WAAK;AAAA;AAAA,IAET,yBAAyB,SAAS,KAAK;AACnC,UAAI,QAAQ,aAAa,sBAAsB;AAC3C,eAAO;AAAA,aAEN;AACD,eAAO,KAAK,0BAA0B;AAAA;AAAA;AAAA,IAG9C,qBAAqB,SAAS,KAAK;AAC/B,WAAK,aAAa;AAClB,WAAK,cAAc,SAAS;AAAA;AAAA,IAEhC,8BAA8B,SAAS,WAAW;AAC9C,aAAO,KAAK,0BAA0B,SAAS;AAAA;AAAA,IAEnD,0BAA0B,SAAS,WAAW;AAC1C,UAAI,KAAK,gBAAgB;AACrB,aAAK,eAAe;AAAA;AAExB,WAAK,aAAa;AAClB,WAAK,iBAAiB,IAAI,eAAe,MAAM,SAAS;AACxD,YAAM,EAAE,iBAAiB,KAAK;AAC9B,WAAK,yBAAyB,aAAa,SAAS;AACpD,WAAK,eAAe;AAAA;AAAA,IAExB,yBAAyB,SAAS,SAAS;AACvC,cAAQ,iBAAiB,KAAK;AAAA;AAAA,IAElC,eAAe,SAAS;AACpB,iBAAW,KAAK;AAAA;AAAA,IAEpB,iCAAiC,SAAS,UAAU;AAChD,WAAK;AAAA;AAAA,UAEH,6BAA6B,SAAS,UAAU;AAClD,YAAM,KAAK,aAAa;AACxB,WAAK;AAAA;AAAA,IAET,0BAA0B,SAAS,UAAU;AACzC,cAAQ,MAAM;AACd,WAAK;AAAA;AAAA,IAET,eAAe,SAAS,QAAO;AAC3B,cAAQ,MAAM;AACd,WAAK;AAAA;AAAA,IAET,gBAAgB,SAAS;AACrB,qBAAe,KAAK;AAAA;AAAA,IAExB,sBAAsB,EAAE,eAAe;AACnC,iBAAW,aAAa,KAAK,iBAAiB;AAAA;AAAA,IAElD,oCAAoC,gBAAgB,UAAU;AAC1D,YAAM,QAAQ,KAAK,iBAAiB,eAAe,aAAa,eAAe;AAC/E,WAAK,kCAAkC,OAAO,eAAe,aAAa,eAAe;AACzF,YAAM,SAAS,aAAa;AAAA;AAAA,IAEhC,iCAAiC,gBAAgB,eAAe;AAC5D,WAAK,QAAQ,SAAS,aAAa;AAAA;AAAA,IAEvC,sBAAsB,gBAAgB,QAAO;AACzC,cAAQ,MAAM;AAAA;AAAA,IAElB,uBAAuB,EAAE,eAAe;AACpC,qBAAe,aAAa,KAAK,iBAAiB;AAAA;AAAA,IAEtD,sBAAsB,UAAU,QAAQ;AACpC,aAAO;AAAA;AAAA,IAEX,qBAAqB,UAAU,WAAW;AAAA;AAAA,IAE1C,kBAAkB;AAAA;AAAA,UAEZ,MAAM,KAAK;AACb,UAAI;AACJ,YAAM,UAAU,IAAI,aAAa,MAAM,YAAY,KAAK,KAAK,IAAI,mBAAiB,KAAK;AACvF,MAAC,MAAK,KAAK,yBAAyB,QAAQ,OAAO,SAAS,SAAS,GAAG;AACxE,WAAK,sBAAsB;AAC3B,aAAO,IAAI,QAAQ,aAAW;AAC1B,aAAK,sBAAsB,MAAM;AAC7B,eAAK,sBAAsB,MAAM;AAAA;AACjC,eAAK,sBAAsB;AAC3B;AAAA;AAEJ,gBAAQ;AAAA;AAAA;AAAA,IAGhB,cAAc,SAAS,KAAK,WAAW;AACnC,YAAM,QAAQ,KAAK,iBAAiB,SAAS;AAC7C,WAAK,kCAAkC,OAAO,SAAS;AACvD,YAAM,aAAa,cAAc;AACjC,YAAM,MAAM;AAAA;AAAA,IAEhB,kCAAkC,OAAO,SAAS,WAAW;AACzD,YAAM,SAAS,aAAa,qBAAqB,WAAW,SAAS;AACrE,UAAI,SAAS,SAAS;AAClB,cAAM,EAAE,wBAAwB,IAAI,qBAAqB;AACzD,cAAM,SAAS,sBAAsB,CAAC,kBAAkB;AACpD,cAAI,MAAM,KAAK;AACX,kBAAM,EAAE,YAAY,eAAe;AACnC,kBAAM,eAAe,MAAM,cAAc,gBAAgB;AACzD,kBAAM,WAAW,EAAE,YAAY,YAAY;AAC3C,oBAAQ,MAAM,MAAM,KAAK,EAAE,QAAQ,UAAU,qBAAqB,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,IAK9F,iBAAiB,SAAS,WAAW;AACjC,UAAI;AACJ,YAAM,MAAK,aAAa,oBAAoB,WAAW,YAAY,KAAK,QAAQ,aAAa;AAC7F,aAAQ,MAAK,oBAAoB,UAAS,QAAQ,OAAO,SAAS,KAAK,KAAK;AAAA;AAAA,UAE1E,2BAA2B,WAAW;AACxC,UAAI;AACJ,YAAM,MAAK,IAAI,OAAO,KAAK;AAC3B,UAAI;AACA,YAAI,UAAU,gBAAgB,UAAU,cAAc,eAAe,QAAO,KAAK,aAAa;AAC1F,iBAAO;AAAA;AAEX,YAAI,UAAU,gBAAgB,UAAU,cAAc,6BAA6B,SAAQ,KAAK,aAAa;AACzG,gBAAM,QAAQ;AACd,iBAAO,MAAM,KAAK,2BAA2B;AAAA;AAEjD,gBAAQ,MAAM,6CAA6C;AAAA,eAExD,QAAP;AACI,gBAAQ,MAAM;AAAA;AAElB,aAAO,IAAI;AAAA;AAAA,IAEf,sBAAsB,MAAM,WAAW;AACnC,YAAM,SAAS,UAAU,MAAM;AAC/B,aAAO,oBAAoB,UAAU,SAAS,KAAK;AAAA;AAAA,IAEvD,0BAA0B,SAAS,WAAW;AAC1C,YAAM,MAAK,aAAa,oBAAoB,WAAW,YAAY,KAAK,QAAQ,aAAa;AAC7F,UAAI,mBAAmB,mBAAmB,CAAC,KAAK,sBAAsB,SAAS,YAAY;AACvF,eAAO;AAAA;AAEX,UAAI,CAAC,KAAK,WAAW,OAAM,QAAQ;AAC/B,eAAO;AAAA;AAEX,UAAI,KAAI;AACJ,cAAM,eAAe,oBAAoB;AACzC,YAAI,cAAc;AACd,iBAAO,CAAC,aAAa;AAAA;AAAA;AAG7B,UAAI,CAAC,QAAQ,oBAAoB,UAAU;AACvC,eAAO;AAAA;AAEX,UAAI,aAAa,CAAC,QAAQ,oBAAoB,YAAY;AACtD,eAAO;AAAA;AAEX,aAAO;AAAA;AAAA,QAEP,KAAK;AACL,aAAO,KAAK,QAAQ;AAAA;AAAA,QAEpB,UAAU;AACV,aAAO,CAAC,KAAK,QAAQ;AAAA;AAAA,QAErB,YAAY;AACZ,UAAI,KAAK,QAAQ,KAAK;AAClB,eAAO,KAAK,QAAQ;AAAA;AAAA;AAAA,QAGxB,aAAa;AACb,YAAM,QAAQ,KAAK,iBAAiB,KAAK;AACzC,aAAO,MAAM,aAAa;AAAA;AAAA,QAE1B,WAAW,OAAO;AAClB,YAAM,QAAQ,KAAK,iBAAiB,KAAK;AACzC,UAAI,OAAO;AACP,cAAM,aAAa,cAAc;AAAA,aAEhC;AACD,cAAM,gBAAgB;AAAA;AAAA;AAAA,QAG1B,UAAU,WAAW;AACrB,WAAK,mBAAmB;AACxB,WAAK,QAAQ,MAAM,cAAc,QAAQ,cAAc,SAAS,YAAY;AAC5E,WAAK,aAAa,KAAK,QAAQ;AAC/B,WAAK,mBAAmB;AAAA;AAAA,QAExB,eAAe;AACf,aAAO,KAAK,QAAQ;AAAA;AAAA,QAEpB,YAAY;AACZ,aAAO,KAAK,mBAAmB,UAAa,KAAK,0BAA0B;AAAA;AAAA,QAE3E,WAAW;AACX,aAAO,KAAK,QAAQ,YAAY,KAAK;AAAA;AAAA,QAErC,eAAe;AACf,UAAI;AACJ,YAAM,OAAO,KAAK,QAAQ,cAAc,cAAc;AACtD,YAAM,OAAQ,MAAK,SAAS,QAAQ,SAAS,SAAS,SAAS,KAAK,aAAa,QAAQ,OAAO,SAAS,KAAK;AAC9G,aAAO,UAAU;AAAA;AAAA;AAGzB,mCAA2B;AAAA,IACvB,YAAY,SAAS;AACjB,WAAK,sBAAsB,CAAC,EAAE,wBAAc;AACxC,YAAI;AACJ,cAAM,EAAE,SAAI,kBAAU;AACtB,QAAC,MAAK,SAAQ,cAAc,MAAM,UAAS,QAAQ,OAAO,SAAS,SAAS,GAAG,YAAY;AAAA;AAE/F,WAAK,QAAQ,QAAQ,UAAU;AAC/B,WAAK,KAAK,QAAQ;AAAA;AAAA;AAG1B,+BAA6B,KAAI;AAC7B,QAAI,OAAM,MAAM;AACZ,YAAM,UAAU,SAAS,eAAe;AACxC,UAAI,mBAAmB,cAAc;AACjC,eAAO;AAAA;AAAA;AAAA;AAInB,2BAAyB,SAAS,YAAY;AAC1C,QAAI,SAAS;AACT,YAAM,MAAM,QAAQ,aAAa;AACjC,UAAI,OAAO,QAAQ,cAAc,QAAQ,aAAa,KAAK,aAAa;AACpE,cAAM,IAAI,MAAM,6BAA6B,QAAQ;AAAA;AAEzD,UAAI,QAAQ,kBAAkB,UAAU;AACpC,kBAAU,SAAS,WAAW,SAAS;AAAA;AAE3C,UAAI,mBAAmB,cAAc;AACjC,gBAAQ;AACR,gBAAQ;AACR,eAAO;AAAA;AAAA;AAAA;AAKnB,MAAM,gBAAgB;AAAA,IAClB,QAAQ;AACJ,WAAK,eAAe,QAAQ,OAAK;AAAE,YAAI;AAAI,eAAQ,MAAK,EAAE,mBAAmB,QAAQ,OAAO,SAAS,SAAS,GAAG,aAAa,KAAK,iBAAiB,EAAE;AAAA;AAAA;AAAA,IAE1J,SAAS;AACL,WAAK;AACL,WAAK,eAAe,QAAQ,OAAK,EAAE,OAAO,KAAK;AAAA;AAAA,IAEnD,SAAS;AACL,WAAK,eAAe,QAAQ,OAAK;AAAE,YAAI;AAAI,eAAQ,MAAK,EAAE,mBAAmB,QAAQ,OAAO,SAAS,SAAS,GAAG,aAAa,KAAK,iBAAiB;AAAA;AAAA;AAAA,IAExJ,UAAU;AACN,WAAK;AACL,WAAK,eAAe,QAAQ,OAAK,EAAE,QAAQ,KAAK;AAAA;AAAA,IAEpD,SAAS;AACL,WAAK,eAAe,QAAQ,OAAK,EAAE;AAAA;AAAA,IAEvC,UAAU;AACN,WAAK,eAAe,QAAQ,OAAK,EAAE,YAAY,KAAK;AAAA;AAAA,IAExD,SAAS;AACL,WAAK,eAAe,QAAQ,OAAK;AAC7B,UAAE,YAAY;AACd,UAAE,OAAO,KAAK;AAAA;AAAA;AAAA;AAK1B,oCAA4B,YAAY;AAAA,UAC9B,oBAAoB;AACtB,UAAI;AACA,cAAM,KAAK;AAAA,eAER,QAAP;AACI,gBAAQ,MAAM;AAAA,gBAElB;AACI,aAAK;AAAA;AAAA;AAAA,UAGP,SAAS;AACX,UAAI;AACJ,aAAQ,MAAK,KAAK,mBAAmB,QAAQ,OAAO,SAAS,KAAM,KAAK,gBAAiB,aAAY;AACjG,YAAI,KAAK,cAAc,KAAK,oBAAoB;AAC5C,gBAAM;AACN,eAAK;AAAA;AAAA;AAAA;AAAA,IAIjB,aAAa;AACT,UAAI;AACA,aAAK;AAAA,eAEF,IAAP;AAAA;AAAA;AAAA,IAEJ,gCAAgC;AAC5B,WAAK,kBAAkB,QAAQ,OAAK,EAAE;AAAA;AAAA,QAEtC,oBAAoB;AACpB,UAAI;AACJ,YAAM,mBAAmB,KAAK,eAAe,QAAQ,OAAK,CAAC,GAAG,EAAE,WAAW,OAAO,OAAK,CAAC,CAAC,EAAE;AAC3F,YAAM,iBAAiB,CAAC,GAAI,MAAK,KAAK,qBAAqB,QAAQ,OAAO,SAAS,SAAS,GAAG,UAAU,OAAO,OAAK,CAAC,CAAC,EAAE,IAAI,IAAI,OAAK,EAAE;AACxI,aAAO,iBAAiB,OAAO,OAAK,eAAe,SAAS,EAAE;AAAA;AAAA,QAE9D,gBAAgB;AAChB,UAAI,KAAK,QAAQ;AACb,cAAM,iBAAiB,cAAc,KAAK;AAC1C,YAAI,gBAAgB;AAChB,iBAAO;AAAA;AAEX,aAAK,MAAM;AAAA;AAEf,WAAK,MAAM;AAAA;AAAA,QAEX,iBAAiB;AACjB,UAAI,KAAK,QAAQ;AACb,eAAO,KAAK;AAAA,iBAEP,KAAK,SAAS;AACnB,eAAO,KAAK;AAAA,aAEX;AACD,aAAK,MAAM;AAAA;AAAA;AAAA,QAGf,kBAAkB;AAClB,aAAO,KAAK,gBAAgB,QAAQ,UAAU;AAAA;AAAA,QAE9C,kBAAkB;AAClB,UAAI,KAAK,6BAA6B,qBAAqB;AACvD,eAAO,KAAK;AAAA;AAEhB,WAAK,MAAM;AAAA;AAAA,QAEX,SAAS;AACT,aAAO,KAAK,aAAa;AAAA;AAAA,QAEzB,SAAS;AACT,aAAO,KAAK,aAAa;AAAA;AAAA,QAEzB,UAAU;AACV,aAAO,KAAK,aAAa;AAAA;AAAA,IAE7B,MAAM,SAAS;AACX,YAAM,IAAI,MAAM,GAAG,KAAK,gBAAgB;AAAA;AAAA,QAExC,cAAc;AACd,UAAI,IAAI;AACR,aAAQ,MAAO,OAAK,KAAK,UAAU,MAAM,gBAAgB,QAAQ,OAAO,SAAS,KAAK,IAAI,QAAQ,QAAQ,OAAO,SAAS,KAAK;AAAA;AAAA,QAE/H,oBAAoB;AACpB,aAAO,IAAI,YAAY,8BAA8B,EAAE,SAAS,MAAM,YAAY;AAAA;AAAA,QAElF,qBAAqB;AACrB,UAAI;AACJ,YAAM,UAAW,MAAK,KAAK,mBAAmB,QAAQ,OAAO,SAAS,SAAS,GAAG,eAAe,KAAK;AACtG,UAAI,YAAY,MAAM;AAClB,eAAO,CAAC;AAAA,aAEP;AACD,eAAO;AAAA;AAAA;AAAA,QAGX,wBAAwB;AACxB,UAAI;AACJ,YAAM,WAAY,MAAK,KAAK,mBAAmB,QAAQ,OAAO,SAAS,SAAS,GAAG,iBAAiB,KAAK;AACzG,UAAI,SAAS,WAAW,GAAG;AACvB,eAAO,MAAM,UAAU,MAAM,KAAK;AAAA,aAEjC;AACD,eAAO;AAAA;AAAA;AAAA;AAKnB,eAAa,sBAAsB;AACnC,iBAAe,OAAO,eAAe;AACrC,iBAAe,OAAO,gBAAgB;AAEtC,EAAC,OAAM;AACH,QAAI,UAAU,SAAS;AACvB,QAAI,CAAC;AACD;AACJ,QAAI,QAAQ,aAAa;AACrB;AACJ,WAAO,UAAU,QAAQ,eAAe;AACpC,UAAI,WAAW,SAAS,MAAM;AAC1B,eAAO,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASvB,QAAQ;AAAA;AAAA;AAAA;AAKjB,SAAO,QAAQ;AACf;;;ACzwGA,MAAI;AAEJ,+BAAoC;AAClC,WAAO,YAAY,YAAY,kBAAiB,KAAK;AAAA;AAGhD,uBAAqB,aAAa;AACvC,WAAO,WAAW;AAAA;AAGpB,mCAAuC;AACrC,UAAM,EAAE,oCAAmB,MAAM;AACjC,WAAO;AAAA;AAGT,6BAAkC,SAAS,QAAO;AAChD,UAAM,EAAE,kBAAkB,MAAM;AAChC,WAAO,cAAc,OAAO,SAAS;AAAA;;;ACdvC,oDAA4C,YAAY;AAAA,UAChD,oBAAoB;AACxB,0BAAoB;AACpB,WAAK,eAAe,MAAM,YAAY,KAAK,SAAS,EAAE,UAAU,KAAK,qBAAqB,KAAK;AAAA;AAAA,IAGjG,uBAAuB;AACrB,6BAAuB;AACvB,UAAI,KAAK;AAAc,aAAK,aAAa;AAAA;AAAA,IAG3C,qBAAqB,MAAM;AACzB,YAAM,SAAQ,IAAI,aAAa,WAAW,EAAE;AAC5C,aAAO,KAAK,cAAc;AAAA;AAAA,QAGxB,UAAU;AACZ,YAAM,UAAU,KAAK,aAAa;AAClC,YAAM,qBAAqB,KAAK,aAAa;AAC7C,aAAO,EAAE,SAAS;AAAA;AAAA;AAItB,iBAAe,OAAO,6BAA6B;;;ACtBnD,4BAAoB;AAAA,IAChB,YAAY,aAAa,WAAW,cAAc;AAC9C,WAAK,cAAc;AACnB,WAAK,YAAY;AACjB,WAAK,eAAe;AACpB,WAAK,oBAAoB,oBAAI;AAAA;AAAA,IAEjC,UAAU;AACN,WAAK,YAAY,iBAAiB,KAAK,WAAW,MAAM,KAAK;AAAA;AAAA,IAEjE,aAAa;AACT,WAAK,YAAY,oBAAoB,KAAK,WAAW,MAAM,KAAK;AAAA;AAAA,IAEpE,iBAAiB,SAAS;AACtB,WAAK,kBAAkB,IAAI;AAAA;AAAA,IAE/B,oBAAoB,SAAS;AACzB,WAAK,kBAAkB,OAAO;AAAA;AAAA,IAElC,YAAY,QAAO;AACf,YAAM,gBAAgB,YAAY;AAClC,iBAAW,WAAW,KAAK,UAAU;AACjC,YAAI,cAAc,6BAA6B;AAC3C;AAAA,eAEC;AACD,kBAAQ,YAAY;AAAA;AAAA;AAAA;AAAA,QAI5B,WAAW;AACX,aAAO,MAAM,KAAK,KAAK,mBAAmB,KAAK,CAAC,OAAM,WAAU;AAC5D,cAAM,YAAY,MAAK,OAAO,aAAa,OAAM;AACjD,eAAO,YAAY,aAAa,KAAK,YAAY,aAAa,IAAI;AAAA;AAAA;AAAA;AAI9E,uBAAqB,QAAO;AACxB,QAAI,iCAAiC,QAAO;AACxC,aAAO;AAAA,WAEN;AACD,YAAM,EAAE,wDAA6B;AACrC,aAAO,OAAO,OAAO,QAAO;AAAA,QACxB,6BAA6B;AAAA,QAC7B,2BAA2B;AACvB,eAAK,8BAA8B;AACnC,oCAAyB,KAAK;AAAA;AAAA;AAAA;AAAA;AAM9C,yBAAiB;AAAA,IACb,YAAY,cAAa;AACrB,WAAK,cAAc;AACnB,WAAK,oBAAoB,oBAAI;AAC7B,WAAK,UAAU;AAAA;AAAA,IAEnB,QAAQ;AACJ,UAAI,CAAC,KAAK,SAAS;AACf,aAAK,UAAU;AACf,aAAK,eAAe,QAAQ,mBAAiB,cAAc;AAAA;AAAA;AAAA,IAGnE,OAAO;AACH,UAAI,KAAK,SAAS;AACd,aAAK,UAAU;AACf,aAAK,eAAe,QAAQ,mBAAiB,cAAc;AAAA;AAAA;AAAA,QAG/D,iBAAiB;AACjB,aAAO,MAAM,KAAK,KAAK,kBAAkB,UACpC,OAAO,CAAC,WAAW,SAAQ,UAAU,OAAO,MAAM,KAAK,KAAI,YAAY;AAAA;AAAA,IAEhF,iBAAiB,SAAS;AACtB,WAAK,6BAA6B,SAAS,iBAAiB;AAAA;AAAA,IAEhE,oBAAoB,SAAS;AACzB,WAAK,6BAA6B,SAAS,oBAAoB;AAAA;AAAA,IAEnE,YAAY,QAAO,SAAS,SAAS,IAAI;AACrC,WAAK,YAAY,YAAY,QAAO,SAAS,WAAW;AAAA;AAAA,IAE5D,6BAA6B,SAAS;AAClC,YAAM,EAAE,aAAa,WAAW,iBAAiB;AACjD,aAAO,KAAK,mBAAmB,aAAa,WAAW;AAAA;AAAA,IAE3D,mBAAmB,aAAa,WAAW,cAAc;AACrD,YAAM,mBAAmB,KAAK,oCAAoC;AAClE,YAAM,WAAW,KAAK,SAAS,WAAW;AAC1C,UAAI,gBAAgB,iBAAiB,IAAI;AACzC,UAAI,CAAC,eAAe;AAChB,wBAAgB,KAAK,oBAAoB,aAAa,WAAW;AACjE,yBAAiB,IAAI,UAAU;AAAA;AAEnC,aAAO;AAAA;AAAA,IAEX,oBAAoB,aAAa,WAAW,cAAc;AACtD,YAAM,gBAAgB,IAAI,cAAc,aAAa,WAAW;AAChE,UAAI,KAAK,SAAS;AACd,sBAAc;AAAA;AAElB,aAAO;AAAA;AAAA,IAEX,oCAAoC,aAAa;AAC7C,UAAI,mBAAmB,KAAK,kBAAkB,IAAI;AAClD,UAAI,CAAC,kBAAkB;AACnB,2BAAmB,oBAAI;AACvB,aAAK,kBAAkB,IAAI,aAAa;AAAA;AAE5C,aAAO;AAAA;AAAA,IAEX,SAAS,WAAW,cAAc;AAC9B,YAAM,QAAQ,CAAC;AACf,aAAO,KAAK,cAAc,OAAO,QAAQ,SAAO;AAC5C,cAAM,KAAK,GAAG,aAAa,OAAO,KAAK,MAAM;AAAA;AAEjD,aAAO,MAAM,KAAK;AAAA;AAAA;AAI1B,MAAM,oBAAoB;AAC1B,uCAAqC,kBAAkB;AACnD,UAAM,SAAS,iBAAiB;AAChC,UAAM,UAAU,OAAO,MAAM,sBAAsB;AACnD,WAAO;AAAA,MACH,aAAa,iBAAiB,QAAQ;AAAA,MACtC,WAAW,QAAQ;AAAA,MACnB,cAAc,QAAQ,KAAK,kBAAkB,QAAQ,MAAM;AAAA,MAC3D,YAAY,QAAQ;AAAA,MACpB,YAAY,QAAQ;AAAA;AAAA;AAG5B,4BAA0B,iBAAiB;AACvC,QAAI,mBAAmB,UAAU;AAC7B,aAAO;AAAA,eAEF,mBAAmB,YAAY;AACpC,aAAO;AAAA;AAAA;AAGf,6BAA2B,cAAc;AACrC,WAAO,aAAa,MAAM,KAAK,OAAO,CAAC,SAAS,UAAU,OAAO,OAAO,SAAS,GAAG,MAAM,QAAQ,MAAM,MAAM,CAAC,KAAK,KAAK,WAAW;AAAA;AAExI,gCAA8B,aAAa;AACvC,QAAI,eAAe,QAAQ;AACvB,aAAO;AAAA,eAEF,eAAe,UAAU;AAC9B,aAAO;AAAA;AAAA;AAIf,oBAAkB,OAAO;AACrB,WAAO,MAAM,QAAQ,uBAAuB,CAAC,GAAG,SAAS,KAAK;AAAA;AAElE,sBAAoB,OAAO;AACvB,WAAO,MAAM,OAAO,GAAG,gBAAgB,MAAM,MAAM;AAAA;AAEvD,qBAAmB,OAAO;AACtB,WAAO,MAAM,QAAQ,YAAY,CAAC,GAAG,SAAS,IAAI,KAAK;AAAA;AAE3D,oBAAkB,OAAO;AACrB,WAAO,MAAM,MAAM,cAAc;AAAA;AAGrC,qBAAa;AAAA,IACT,YAAY,SAAS,QAAO,YAAY;AACpC,WAAK,UAAU;AACf,WAAK,QAAQ;AACb,WAAK,cAAc,WAAW,eAAe;AAC7C,WAAK,YAAY,WAAW,aAAa,8BAA8B,YAAY,MAAM;AACzF,WAAK,eAAe,WAAW,gBAAgB;AAC/C,WAAK,aAAa,WAAW,cAAc,MAAM;AACjD,WAAK,aAAa,WAAW,cAAc,MAAM;AAAA;AAAA,WAE9C,SAAS,OAAO;AACnB,aAAO,IAAI,KAAK,MAAM,SAAS,MAAM,OAAO,4BAA4B,MAAM;AAAA;AAAA,IAElF,WAAW;AACP,YAAM,kBAAkB,KAAK,kBAAkB,IAAI,KAAK,oBAAoB;AAC5E,aAAO,GAAG,KAAK,YAAY,oBAAoB,KAAK,cAAc,KAAK;AAAA;AAAA,QAEvE,SAAS;AACT,UAAI,KAAK,uBAAuB,SAAS;AACrC,eAAO,KAAK,mCAAmC,KAAK;AAAA,aAEnD;AACD,eAAO;AAAA;AAAA;AAAA,IAGf,mCAAmC,aAAa;AAC5C,YAAM,SAAS;AACf,YAAM,UAAU,IAAI,OAAO,SAAS,KAAK;AACzC,YAAM,aAAa,MAAM,KAAK,YAAY;AAC1C,iBAAW,QAAQ,CAAC,EAAE,MAAM,YAAY;AACpC,cAAM,QAAQ,KAAK,MAAM;AACzB,cAAM,MAAM,SAAS,MAAM;AAC3B,YAAI,KAAK;AACL,iBAAO,OAAO,QAAQ,GAAG,SAAS,OAAO,SAAS;AAAA;AAAA;AAG1D,aAAO;AAAA;AAAA,QAEP,kBAAkB;AAClB,aAAO,qBAAqB,KAAK;AAAA;AAAA;AAGzC,MAAM,oBAAoB;AAAA,IACtB,KAAK,OAAK;AAAA,IACV,UAAU,OAAK;AAAA,IACf,QAAQ,OAAK;AAAA,IACb,WAAW,OAAK;AAAA,IAChB,SAAS,OAAK,EAAE,aAAa,WAAW,WAAW,UAAU;AAAA,IAC7D,UAAU,OAAK;AAAA,IACf,YAAY,OAAK;AAAA;AAErB,yCAAuC,SAAS;AAC5C,UAAM,UAAU,QAAQ,QAAQ;AAChC,QAAI,WAAW,mBAAmB;AAC9B,aAAO,kBAAkB,SAAS;AAAA;AAAA;AAG1C,iBAAe,SAAS;AACpB,UAAM,IAAI,MAAM;AAAA;AAEpB,oBAAkB,OAAO;AACrB,QAAI;AACA,aAAO,KAAK,MAAM;AAAA,aAEf,KAAP;AACI,aAAO;AAAA;AAAA;AAIf,sBAAc;AAAA,IACV,YAAY,SAAS,QAAQ;AACzB,WAAK,UAAU;AACf,WAAK,SAAS;AAAA;AAAA,QAEd,QAAQ;AACR,aAAO,KAAK,OAAO;AAAA;AAAA,QAEnB,cAAc;AACd,aAAO,KAAK,OAAO;AAAA;AAAA,QAEnB,eAAe;AACf,aAAO,KAAK,OAAO;AAAA;AAAA,QAEnB,aAAa;AACb,aAAO,KAAK,QAAQ;AAAA;AAAA,IAExB,YAAY,QAAO;AACf,UAAI,KAAK,qBAAqB,SAAQ;AAClC,aAAK,gBAAgB;AAAA;AAAA;AAAA,QAGzB,YAAY;AACZ,aAAO,KAAK,OAAO;AAAA;AAAA,QAEnB,SAAS;AACT,YAAM,SAAS,KAAK,WAAW,KAAK;AACpC,UAAI,OAAO,UAAU,YAAY;AAC7B,eAAO;AAAA;AAEX,YAAM,IAAI,MAAM,WAAW,KAAK,wCAAwC,KAAK;AAAA;AAAA,IAEjF,gBAAgB,QAAO;AACnB,YAAM,EAAE,QAAQ,kBAAkB;AAClC,UAAI;AACA,cAAM,EAAE,WAAW,KAAK;AACxB,cAAM,cAAc,OAAO,OAAO,QAAO,EAAE;AAC3C,aAAK,OAAO,KAAK,KAAK,YAAY;AAClC,aAAK,QAAQ,iBAAiB,KAAK,YAAY,EAAE,eAAO,QAAQ,eAAe,QAAQ,KAAK;AAAA,eAEzF,QAAP;AACI,cAAM,EAAE,YAAY,YAAY,SAAS,kBAAU;AACnD,cAAM,SAAS,EAAE,YAAY,YAAY,SAAS,eAAO;AACzD,aAAK,QAAQ,YAAY,QAAO,oBAAoB,KAAK,WAAW;AAAA;AAAA;AAAA,IAG5E,qBAAqB,QAAO;AACxB,YAAM,cAAc,OAAM;AAC1B,UAAI,KAAK,YAAY,aAAa;AAC9B,eAAO;AAAA,iBAEF,uBAAuB,WAAW,KAAK,QAAQ,SAAS,cAAc;AAC3E,eAAO,KAAK,MAAM,gBAAgB;AAAA,aAEjC;AACD,eAAO,KAAK,MAAM,gBAAgB,KAAK,OAAO;AAAA;AAAA;AAAA,QAGlD,aAAa;AACb,aAAO,KAAK,QAAQ;AAAA;AAAA,QAEpB,aAAa;AACb,aAAO,KAAK,OAAO;AAAA;AAAA,QAEnB,UAAU;AACV,aAAO,KAAK,MAAM;AAAA;AAAA,QAElB,QAAQ;AACR,aAAO,KAAK,QAAQ;AAAA;AAAA;AAI5B,8BAAsB;AAAA,IAClB,YAAY,SAAS,UAAU;AAC3B,WAAK,uBAAuB,EAAE,YAAY,MAAM,WAAW,MAAM,SAAS;AAC1E,WAAK,UAAU;AACf,WAAK,UAAU;AACf,WAAK,WAAW;AAChB,WAAK,WAAW,oBAAI;AACpB,WAAK,mBAAmB,IAAI,iBAAiB,CAAC,cAAc,KAAK,iBAAiB;AAAA;AAAA,IAEtF,QAAQ;AACJ,UAAI,CAAC,KAAK,SAAS;AACf,aAAK,UAAU;AACf,aAAK,iBAAiB,QAAQ,KAAK,SAAS,KAAK;AACjD,aAAK;AAAA;AAAA;AAAA,IAGb,MAAM,UAAU;AACZ,UAAI,KAAK,SAAS;AACd,aAAK,iBAAiB;AACtB,aAAK,UAAU;AAAA;AAEnB;AACA,UAAI,CAAC,KAAK,SAAS;AACf,aAAK,iBAAiB,QAAQ,KAAK,SAAS,KAAK;AACjD,aAAK,UAAU;AAAA;AAAA;AAAA,IAGvB,OAAO;AACH,UAAI,KAAK,SAAS;AACd,aAAK,iBAAiB;AACtB,aAAK,iBAAiB;AACtB,aAAK,UAAU;AAAA;AAAA;AAAA,IAGvB,UAAU;AACN,UAAI,KAAK,SAAS;AACd,cAAM,UAAU,IAAI,IAAI,KAAK;AAC7B,mBAAW,WAAW,MAAM,KAAK,KAAK,WAAW;AAC7C,cAAI,CAAC,QAAQ,IAAI,UAAU;AACvB,iBAAK,cAAc;AAAA;AAAA;AAG3B,mBAAW,WAAW,MAAM,KAAK,UAAU;AACvC,eAAK,WAAW;AAAA;AAAA;AAAA;AAAA,IAI5B,iBAAiB,WAAW;AACxB,UAAI,KAAK,SAAS;AACd,mBAAW,YAAY,WAAW;AAC9B,eAAK,gBAAgB;AAAA;AAAA;AAAA;AAAA,IAIjC,gBAAgB,UAAU;AACtB,UAAI,SAAS,QAAQ,cAAc;AAC/B,aAAK,uBAAuB,SAAS,QAAQ,SAAS;AAAA,iBAEjD,SAAS,QAAQ,aAAa;AACnC,aAAK,oBAAoB,SAAS;AAClC,aAAK,kBAAkB,SAAS;AAAA;AAAA;AAAA,IAGxC,uBAAuB,MAAM,eAAe;AACxC,YAAM,UAAU;AAChB,UAAI,KAAK,SAAS,IAAI,UAAU;AAC5B,YAAI,KAAK,SAAS,2BAA2B,KAAK,aAAa,UAAU;AACrE,eAAK,SAAS,wBAAwB,SAAS;AAAA,eAE9C;AACD,eAAK,cAAc;AAAA;AAAA,iBAGlB,KAAK,aAAa,UAAU;AACjC,aAAK,WAAW;AAAA;AAAA;AAAA,IAGxB,oBAAoB,OAAO;AACvB,iBAAW,QAAQ,MAAM,KAAK,QAAQ;AAClC,cAAM,UAAU,KAAK,gBAAgB;AACrC,YAAI,SAAS;AACT,eAAK,YAAY,SAAS,KAAK;AAAA;AAAA;AAAA;AAAA,IAI3C,kBAAkB,OAAO;AACrB,iBAAW,QAAQ,MAAM,KAAK,QAAQ;AAClC,cAAM,UAAU,KAAK,gBAAgB;AACrC,YAAI,WAAW,KAAK,gBAAgB,UAAU;AAC1C,eAAK,YAAY,SAAS,KAAK;AAAA;AAAA;AAAA;AAAA,IAI3C,aAAa,SAAS;AAClB,aAAO,KAAK,SAAS,aAAa;AAAA;AAAA,IAEtC,oBAAoB,OAAO,KAAK,SAAS;AACrC,aAAO,KAAK,SAAS,oBAAoB;AAAA;AAAA,IAE7C,YAAY,MAAM,WAAW;AACzB,iBAAW,WAAW,KAAK,oBAAoB,OAAO;AAClD,kBAAU,KAAK,MAAM;AAAA;AAAA;AAAA,IAG7B,gBAAgB,MAAM;AAClB,UAAI,KAAK,YAAY,KAAK,cAAc;AACpC,eAAO;AAAA;AAAA;AAAA,IAGf,gBAAgB,SAAS;AACrB,UAAI,QAAQ,eAAe,KAAK,QAAQ,aAAa;AACjD,eAAO;AAAA,aAEN;AACD,eAAO,KAAK,QAAQ,SAAS;AAAA;AAAA;AAAA,IAGrC,WAAW,SAAS;AAChB,UAAI,CAAC,KAAK,SAAS,IAAI,UAAU;AAC7B,YAAI,KAAK,gBAAgB,UAAU;AAC/B,eAAK,SAAS,IAAI;AAClB,cAAI,KAAK,SAAS,gBAAgB;AAC9B,iBAAK,SAAS,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,IAK7C,cAAc,SAAS;AACnB,UAAI,KAAK,SAAS,IAAI,UAAU;AAC5B,aAAK,SAAS,OAAO;AACrB,YAAI,KAAK,SAAS,kBAAkB;AAChC,eAAK,SAAS,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAM/C,gCAAwB;AAAA,IACpB,YAAY,SAAS,eAAe,UAAU;AAC1C,WAAK,gBAAgB;AACrB,WAAK,WAAW;AAChB,WAAK,kBAAkB,IAAI,gBAAgB,SAAS;AAAA;AAAA,QAEpD,UAAU;AACV,aAAO,KAAK,gBAAgB;AAAA;AAAA,QAE5B,WAAW;AACX,aAAO,IAAI,KAAK;AAAA;AAAA,IAEpB,QAAQ;AACJ,WAAK,gBAAgB;AAAA;AAAA,IAEzB,MAAM,UAAU;AACZ,WAAK,gBAAgB,MAAM;AAAA;AAAA,IAE/B,OAAO;AACH,WAAK,gBAAgB;AAAA;AAAA,IAEzB,UAAU;AACN,WAAK,gBAAgB;AAAA;AAAA,QAErB,UAAU;AACV,aAAO,KAAK,gBAAgB;AAAA;AAAA,IAEhC,aAAa,SAAS;AAClB,aAAO,QAAQ,aAAa,KAAK;AAAA;AAAA,IAErC,oBAAoB,MAAM;AACtB,YAAM,QAAQ,KAAK,aAAa,QAAQ,CAAC,QAAQ;AACjD,YAAM,UAAU,MAAM,KAAK,KAAK,iBAAiB,KAAK;AACtD,aAAO,MAAM,OAAO;AAAA;AAAA,IAExB,eAAe,SAAS;AACpB,UAAI,KAAK,SAAS,yBAAyB;AACvC,aAAK,SAAS,wBAAwB,SAAS,KAAK;AAAA;AAAA;AAAA,IAG5D,iBAAiB,SAAS;AACtB,UAAI,KAAK,SAAS,2BAA2B;AACzC,aAAK,SAAS,0BAA0B,SAAS,KAAK;AAAA;AAAA;AAAA,IAG9D,wBAAwB,SAAS,eAAe;AAC5C,UAAI,KAAK,SAAS,gCAAgC,KAAK,iBAAiB,eAAe;AACnF,aAAK,SAAS,6BAA6B,SAAS;AAAA;AAAA;AAAA;AAKhE,gCAAwB;AAAA,IACpB,YAAY,SAAS,UAAU;AAC3B,WAAK,UAAU;AACf,WAAK,WAAW;AAChB,WAAK,UAAU;AACf,WAAK,YAAY,oBAAI;AACrB,WAAK,mBAAmB,IAAI,iBAAiB,eAAa,KAAK,iBAAiB;AAAA;AAAA,IAEpF,QAAQ;AACJ,UAAI,CAAC,KAAK,SAAS;AACf,aAAK,UAAU;AACf,aAAK,iBAAiB,QAAQ,KAAK,SAAS,EAAE,YAAY,MAAM,mBAAmB;AACnF,aAAK;AAAA;AAAA;AAAA,IAGb,OAAO;AACH,UAAI,KAAK,SAAS;AACd,aAAK,iBAAiB;AACtB,aAAK,iBAAiB;AACtB,aAAK,UAAU;AAAA;AAAA;AAAA,IAGvB,UAAU;AACN,UAAI,KAAK,SAAS;AACd,mBAAW,iBAAiB,KAAK,qBAAqB;AAClD,eAAK,iBAAiB,eAAe;AAAA;AAAA;AAAA;AAAA,IAIjD,iBAAiB,WAAW;AACxB,UAAI,KAAK,SAAS;AACd,mBAAW,YAAY,WAAW;AAC9B,eAAK,gBAAgB;AAAA;AAAA;AAAA;AAAA,IAIjC,gBAAgB,UAAU;AACtB,YAAM,gBAAgB,SAAS;AAC/B,UAAI,eAAe;AACf,aAAK,iBAAiB,eAAe,SAAS;AAAA;AAAA;AAAA,IAGtD,iBAAiB,eAAe,UAAU;AACtC,YAAM,MAAM,KAAK,SAAS,4BAA4B;AACtD,UAAI,OAAO,MAAM;AACb,YAAI,CAAC,KAAK,UAAU,IAAI,gBAAgB;AACpC,eAAK,kBAAkB,KAAK;AAAA;AAEhC,cAAM,QAAQ,KAAK,QAAQ,aAAa;AACxC,YAAI,KAAK,UAAU,IAAI,kBAAkB,OAAO;AAC5C,eAAK,sBAAsB,OAAO,KAAK;AAAA;AAE3C,YAAI,SAAS,MAAM;AACf,gBAAM,YAAW,KAAK,UAAU,IAAI;AACpC,eAAK,UAAU,OAAO;AACtB,cAAI;AACA,iBAAK,oBAAoB,KAAK,eAAe;AAAA,eAEhD;AACD,eAAK,UAAU,IAAI,eAAe;AAAA;AAAA;AAAA;AAAA,IAI9C,kBAAkB,KAAK,eAAe;AAClC,UAAI,KAAK,SAAS,mBAAmB;AACjC,aAAK,SAAS,kBAAkB,KAAK;AAAA;AAAA;AAAA,IAG7C,sBAAsB,OAAO,KAAK,UAAU;AACxC,UAAI,KAAK,SAAS,uBAAuB;AACrC,aAAK,SAAS,sBAAsB,OAAO,KAAK;AAAA;AAAA;AAAA,IAGxD,oBAAoB,KAAK,eAAe,UAAU;AAC9C,UAAI,KAAK,SAAS,qBAAqB;AACnC,aAAK,SAAS,oBAAoB,KAAK,eAAe;AAAA;AAAA;AAAA,QAG1D,sBAAsB;AACtB,aAAO,MAAM,KAAK,IAAI,IAAI,KAAK,sBAAsB,OAAO,KAAK;AAAA;AAAA,QAEjE,wBAAwB;AACxB,aAAO,MAAM,KAAK,KAAK,QAAQ,YAAY,IAAI,eAAa,UAAU;AAAA;AAAA,QAEtE,yBAAyB;AACzB,aAAO,MAAM,KAAK,KAAK,UAAU;AAAA;AAAA;AAIzC,eAAa,MAAK,KAAK,OAAO;AAC1B,WAAM,MAAK,KAAK,IAAI;AAAA;AAExB,eAAa,MAAK,KAAK,OAAO;AAC1B,WAAM,MAAK,KAAK,OAAO;AACvB,UAAM,MAAK;AAAA;AAEf,kBAAe,MAAK,KAAK;AACrB,QAAI,UAAS,KAAI,IAAI;AACrB,QAAI,CAAC,SAAQ;AACT,gBAAS,oBAAI;AACb,WAAI,IAAI,KAAK;AAAA;AAEjB,WAAO;AAAA;AAEX,iBAAe,MAAK,KAAK;AACrB,UAAM,UAAS,KAAI,IAAI;AACvB,QAAI,WAAU,QAAQ,QAAO,QAAQ,GAAG;AACpC,WAAI,OAAO;AAAA;AAAA;AAInB,uBAAe;AAAA,IACX,cAAc;AACV,WAAK,cAAc,oBAAI;AAAA;AAAA,QAEvB,OAAO;AACP,aAAO,MAAM,KAAK,KAAK,YAAY;AAAA;AAAA,QAEnC,SAAS;AACT,YAAM,OAAO,MAAM,KAAK,KAAK,YAAY;AACzC,aAAO,KAAK,OAAO,CAAC,SAAQ,QAAQ,QAAO,OAAO,MAAM,KAAK,OAAO;AAAA;AAAA,QAEpE,OAAO;AACP,YAAM,OAAO,MAAM,KAAK,KAAK,YAAY;AACzC,aAAO,KAAK,OAAO,CAAC,MAAM,QAAQ,OAAO,IAAI,MAAM;AAAA;AAAA,IAEvD,IAAI,KAAK,OAAO;AACZ,UAAI,KAAK,aAAa,KAAK;AAAA;AAAA,IAE/B,OAAO,KAAK,OAAO;AACf,UAAI,KAAK,aAAa,KAAK;AAAA;AAAA,IAE/B,IAAI,KAAK,OAAO;AACZ,YAAM,UAAS,KAAK,YAAY,IAAI;AACpC,aAAO,WAAU,QAAQ,QAAO,IAAI;AAAA;AAAA,IAExC,OAAO,KAAK;AACR,aAAO,KAAK,YAAY,IAAI;AAAA;AAAA,IAEhC,SAAS,OAAO;AACZ,YAAM,OAAO,MAAM,KAAK,KAAK,YAAY;AACzC,aAAO,KAAK,KAAK,SAAO,IAAI,IAAI;AAAA;AAAA,IAEpC,gBAAgB,KAAK;AACjB,YAAM,UAAS,KAAK,YAAY,IAAI;AACpC,aAAO,UAAS,MAAM,KAAK,WAAU;AAAA;AAAA,IAEzC,gBAAgB,OAAO;AACnB,aAAO,MAAM,KAAK,KAAK,aAClB,OAAO,CAAC,CAAC,KAAK,aAAY,QAAO,IAAI,QACrC,IAAI,CAAC,CAAC,KAAK,aAAY;AAAA;AAAA;AA6BpC,gCAAwB;AAAA,IACpB,YAAY,SAAS,eAAe,UAAU;AAC1C,WAAK,oBAAoB,IAAI,kBAAkB,SAAS,eAAe;AACvE,WAAK,WAAW;AAChB,WAAK,kBAAkB,IAAI;AAAA;AAAA,QAE3B,UAAU;AACV,aAAO,KAAK,kBAAkB;AAAA;AAAA,IAElC,QAAQ;AACJ,WAAK,kBAAkB;AAAA;AAAA,IAE3B,MAAM,UAAU;AACZ,WAAK,kBAAkB,MAAM;AAAA;AAAA,IAEjC,OAAO;AACH,WAAK,kBAAkB;AAAA;AAAA,IAE3B,UAAU;AACN,WAAK,kBAAkB;AAAA;AAAA,QAEvB,UAAU;AACV,aAAO,KAAK,kBAAkB;AAAA;AAAA,QAE9B,gBAAgB;AAChB,aAAO,KAAK,kBAAkB;AAAA;AAAA,IAElC,wBAAwB,SAAS;AAC7B,WAAK,cAAc,KAAK,qBAAqB;AAAA;AAAA,IAEjD,6BAA6B,SAAS;AAClC,YAAM,CAAC,iBAAiB,iBAAiB,KAAK,wBAAwB;AACtE,WAAK,gBAAgB;AACrB,WAAK,cAAc;AAAA;AAAA,IAEvB,0BAA0B,SAAS;AAC/B,WAAK,gBAAgB,KAAK,gBAAgB,gBAAgB;AAAA;AAAA,IAE9D,cAAc,QAAQ;AAClB,aAAO,QAAQ,WAAS,KAAK,aAAa;AAAA;AAAA,IAE9C,gBAAgB,QAAQ;AACpB,aAAO,QAAQ,WAAS,KAAK,eAAe;AAAA;AAAA,IAEhD,aAAa,OAAO;AAChB,WAAK,SAAS,aAAa;AAC3B,WAAK,gBAAgB,IAAI,MAAM,SAAS;AAAA;AAAA,IAE5C,eAAe,OAAO;AAClB,WAAK,SAAS,eAAe;AAC7B,WAAK,gBAAgB,OAAO,MAAM,SAAS;AAAA;AAAA,IAE/C,wBAAwB,SAAS;AAC7B,YAAM,iBAAiB,KAAK,gBAAgB,gBAAgB;AAC5D,YAAM,gBAAgB,KAAK,qBAAqB;AAChD,YAAM,sBAAsB,IAAI,gBAAgB,eAC3C,UAAU,CAAC,CAAC,eAAe,kBAAkB,CAAC,eAAe,eAAe;AACjF,UAAI,uBAAuB,IAAI;AAC3B,eAAO,CAAC,IAAI;AAAA,aAEX;AACD,eAAO,CAAC,eAAe,MAAM,sBAAsB,cAAc,MAAM;AAAA;AAAA;AAAA,IAG/E,qBAAqB,SAAS;AAC1B,YAAM,gBAAgB,KAAK;AAC3B,YAAM,cAAc,QAAQ,aAAa,kBAAkB;AAC3D,aAAO,iBAAiB,aAAa,SAAS;AAAA;AAAA;AAGtD,4BAA0B,aAAa,SAAS,eAAe;AAC3D,WAAO,YAAY,OAAO,MAAM,OAAO,OAAO,aAAW,QAAQ,QAC5D,IAAI,CAAC,SAAS,WAAW,GAAE,SAAS,eAAe,SAAS;AAAA;AAErE,eAAa,OAAM,QAAO;AACtB,UAAM,SAAS,KAAK,IAAI,MAAK,QAAQ,OAAM;AAC3C,WAAO,MAAM,KAAK,EAAE,UAAU,CAAC,GAAG,WAAU,CAAC,MAAK,SAAQ,OAAM;AAAA;AAEpE,0BAAwB,OAAM,QAAO;AACjC,WAAO,SAAQ,UAAS,MAAK,SAAS,OAAM,SAAS,MAAK,WAAW,OAAM;AAAA;AAG/E,gCAAwB;AAAA,IACpB,YAAY,SAAS,eAAe,UAAU;AAC1C,WAAK,oBAAoB,IAAI,kBAAkB,SAAS,eAAe;AACvE,WAAK,WAAW;AAChB,WAAK,sBAAsB,oBAAI;AAC/B,WAAK,yBAAyB,oBAAI;AAAA;AAAA,QAElC,UAAU;AACV,aAAO,KAAK,kBAAkB;AAAA;AAAA,IAElC,QAAQ;AACJ,WAAK,kBAAkB;AAAA;AAAA,IAE3B,OAAO;AACH,WAAK,kBAAkB;AAAA;AAAA,IAE3B,UAAU;AACN,WAAK,kBAAkB;AAAA;AAAA,QAEvB,UAAU;AACV,aAAO,KAAK,kBAAkB;AAAA;AAAA,QAE9B,gBAAgB;AAChB,aAAO,KAAK,kBAAkB;AAAA;AAAA,IAElC,aAAa,OAAO;AAChB,YAAM,EAAE,YAAY;AACpB,YAAM,EAAE,UAAU,KAAK,yBAAyB;AAChD,UAAI,OAAO;AACP,aAAK,6BAA6B,SAAS,IAAI,OAAO;AACtD,aAAK,SAAS,oBAAoB,SAAS;AAAA;AAAA;AAAA,IAGnD,eAAe,OAAO;AAClB,YAAM,EAAE,YAAY;AACpB,YAAM,EAAE,UAAU,KAAK,yBAAyB;AAChD,UAAI,OAAO;AACP,aAAK,6BAA6B,SAAS,OAAO;AAClD,aAAK,SAAS,sBAAsB,SAAS;AAAA;AAAA;AAAA,IAGrD,yBAAyB,OAAO;AAC5B,UAAI,cAAc,KAAK,oBAAoB,IAAI;AAC/C,UAAI,CAAC,aAAa;AACd,sBAAc,KAAK,WAAW;AAC9B,aAAK,oBAAoB,IAAI,OAAO;AAAA;AAExC,aAAO;AAAA;AAAA,IAEX,6BAA6B,SAAS;AAClC,UAAI,gBAAgB,KAAK,uBAAuB,IAAI;AACpD,UAAI,CAAC,eAAe;AAChB,wBAAgB,oBAAI;AACpB,aAAK,uBAAuB,IAAI,SAAS;AAAA;AAE7C,aAAO;AAAA;AAAA,IAEX,WAAW,OAAO;AACd,UAAI;AACA,cAAM,QAAQ,KAAK,SAAS,mBAAmB;AAC/C,eAAO,EAAE;AAAA,eAEN,QAAP;AACI,eAAO,EAAE;AAAA;AAAA;AAAA;AAKrB,8BAAsB;AAAA,IAClB,YAAY,SAAS,UAAU;AAC3B,WAAK,UAAU;AACf,WAAK,WAAW;AAChB,WAAK,mBAAmB,oBAAI;AAAA;AAAA,IAEhC,QAAQ;AACJ,UAAI,CAAC,KAAK,mBAAmB;AACzB,aAAK,oBAAoB,IAAI,kBAAkB,KAAK,SAAS,KAAK,iBAAiB;AACnF,aAAK,kBAAkB;AAAA;AAAA;AAAA,IAG/B,OAAO;AACH,UAAI,KAAK,mBAAmB;AACxB,aAAK,kBAAkB;AACvB,eAAO,KAAK;AACZ,aAAK;AAAA;AAAA;AAAA,QAGT,UAAU;AACV,aAAO,KAAK,QAAQ;AAAA;AAAA,QAEpB,aAAa;AACb,aAAO,KAAK,QAAQ;AAAA;AAAA,QAEpB,kBAAkB;AAClB,aAAO,KAAK,OAAO;AAAA;AAAA,QAEnB,SAAS;AACT,aAAO,KAAK,QAAQ;AAAA;AAAA,QAEpB,WAAW;AACX,aAAO,MAAM,KAAK,KAAK,iBAAiB;AAAA;AAAA,IAE5C,cAAc,QAAQ;AAClB,YAAM,UAAU,IAAI,QAAQ,KAAK,SAAS;AAC1C,WAAK,iBAAiB,IAAI,QAAQ;AAClC,WAAK,SAAS,iBAAiB;AAAA;AAAA,IAEnC,iBAAiB,QAAQ;AACrB,YAAM,UAAU,KAAK,iBAAiB,IAAI;AAC1C,UAAI,SAAS;AACT,aAAK,iBAAiB,OAAO;AAC7B,aAAK,SAAS,oBAAoB;AAAA;AAAA;AAAA,IAG1C,uBAAuB;AACnB,WAAK,SAAS,QAAQ,aAAW,KAAK,SAAS,oBAAoB;AACnE,WAAK,iBAAiB;AAAA;AAAA,IAE1B,mBAAmB,OAAO;AACtB,YAAM,SAAS,OAAO,SAAS;AAC/B,UAAI,OAAO,cAAc,KAAK,YAAY;AACtC,eAAO;AAAA;AAAA;AAAA,IAGf,oBAAoB,SAAS,QAAQ;AACjC,WAAK,cAAc;AAAA;AAAA,IAEvB,sBAAsB,SAAS,QAAQ;AACnC,WAAK,iBAAiB;AAAA;AAAA;AAI9B,4BAAoB;AAAA,IAChB,YAAY,SAAS,UAAU;AAC3B,WAAK,UAAU;AACf,WAAK,WAAW;AAChB,WAAK,oBAAoB,IAAI,kBAAkB,KAAK,SAAS;AAC7D,WAAK,qBAAqB,KAAK,WAAW;AAC1C,WAAK;AAAA;AAAA,IAET,QAAQ;AACJ,WAAK,kBAAkB;AAAA;AAAA,IAE3B,OAAO;AACH,WAAK,kBAAkB;AAAA;AAAA,QAEvB,UAAU;AACV,aAAO,KAAK,QAAQ;AAAA;AAAA,QAEpB,aAAa;AACb,aAAO,KAAK,QAAQ;AAAA;AAAA,IAExB,4BAA4B,eAAe;AACvC,UAAI,iBAAiB,KAAK,oBAAoB;AAC1C,eAAO,KAAK,mBAAmB,eAAe;AAAA;AAAA;AAAA,IAGtD,kBAAkB,KAAK,eAAe;AAClC,YAAM,aAAa,KAAK,mBAAmB;AAC3C,UAAI,CAAC,KAAK,SAAS,MAAM;AACrB,aAAK,sBAAsB,KAAK,WAAW,OAAO,KAAK,SAAS,OAAO,WAAW,OAAO,WAAW;AAAA;AAAA;AAAA,IAG5G,sBAAsB,OAAO,MAAM,UAAU;AACzC,YAAM,aAAa,KAAK,uBAAuB;AAC/C,UAAI,UAAU;AACV;AACJ,UAAI,aAAa,MAAM;AACnB,mBAAW,WAAW,OAAO,WAAW;AAAA;AAE5C,WAAK,sBAAsB,MAAM,OAAO;AAAA;AAAA,IAE5C,oBAAoB,KAAK,eAAe,UAAU;AAC9C,YAAM,aAAa,KAAK,uBAAuB;AAC/C,UAAI,KAAK,SAAS,MAAM;AACpB,aAAK,sBAAsB,KAAK,WAAW,OAAO,KAAK,SAAS,OAAO;AAAA,aAEtE;AACD,aAAK,sBAAsB,KAAK,WAAW,OAAO,WAAW,eAAe;AAAA;AAAA;AAAA,IAGpF,yCAAyC;AACrC,iBAAW,EAAE,KAAK,MAAM,cAAc,YAAY,KAAK,kBAAkB;AACrE,YAAI,gBAAgB,UAAa,CAAC,KAAK,WAAW,KAAK,IAAI,MAAM;AAC7D,eAAK,sBAAsB,MAAM,OAAO,eAAe;AAAA;AAAA;AAAA;AAAA,IAInE,sBAAsB,MAAM,UAAU,aAAa;AAC/C,YAAM,oBAAoB,GAAG;AAC7B,YAAM,gBAAgB,KAAK,SAAS;AACpC,UAAI,OAAO,iBAAiB,YAAY;AACpC,cAAM,aAAa,KAAK,uBAAuB;AAC/C,cAAM,QAAQ,WAAW,OAAO;AAChC,YAAI,WAAW;AACf,YAAI,aAAa;AACb,qBAAW,WAAW,OAAO;AAAA;AAEjC,sBAAc,KAAK,KAAK,UAAU,OAAO;AAAA;AAAA;AAAA,QAG7C,mBAAmB;AACnB,YAAM,EAAE,uBAAuB;AAC/B,aAAO,OAAO,KAAK,oBAAoB,IAAI,SAAO,mBAAmB;AAAA;AAAA,QAErE,yBAAyB;AACzB,YAAM,cAAc;AACpB,aAAO,KAAK,KAAK,oBAAoB,QAAQ,SAAO;AAChD,cAAM,aAAa,KAAK,mBAAmB;AAC3C,oBAAY,WAAW,QAAQ;AAAA;AAEnC,aAAO;AAAA;AAAA,IAEX,SAAS,eAAe;AACpB,YAAM,aAAa,KAAK,uBAAuB;AAC/C,YAAM,gBAAgB,MAAM,WAAW,WAAW;AAClD,aAAO,KAAK,SAAS;AAAA;AAAA;AAI7B,6BAAqB;AAAA,IACjB,YAAY,SAAS,UAAU;AAC3B,WAAK,UAAU;AACf,WAAK,WAAW;AAChB,WAAK,gBAAgB,IAAI;AAAA;AAAA,IAE7B,QAAQ;AACJ,UAAI,CAAC,KAAK,mBAAmB;AACzB,aAAK,oBAAoB,IAAI,kBAAkB,KAAK,SAAS,KAAK,eAAe;AACjF,aAAK,kBAAkB;AAAA;AAAA;AAAA,IAG/B,OAAO;AACH,UAAI,KAAK,mBAAmB;AACxB,aAAK;AACL,aAAK,kBAAkB;AACvB,eAAO,KAAK;AAAA;AAAA;AAAA,IAGpB,aAAa,EAAE,SAAS,SAAS,QAAQ;AACrC,UAAI,KAAK,MAAM,gBAAgB,UAAU;AACrC,aAAK,cAAc,SAAS;AAAA;AAAA;AAAA,IAGpC,eAAe,EAAE,SAAS,SAAS,QAAQ;AACvC,WAAK,iBAAiB,SAAS;AAAA;AAAA,IAEnC,cAAc,SAAS,MAAM;AACzB,UAAI;AACJ,UAAI,CAAC,KAAK,cAAc,IAAI,MAAM,UAAU;AACxC,aAAK,cAAc,IAAI,MAAM;AAC7B,QAAC,MAAK,KAAK,uBAAuB,QAAQ,OAAO,SAAS,SAAS,GAAG,MAAM,MAAM,KAAK,SAAS,gBAAgB,SAAS;AAAA;AAAA;AAAA,IAGjI,iBAAiB,SAAS,MAAM;AAC5B,UAAI;AACJ,UAAI,KAAK,cAAc,IAAI,MAAM,UAAU;AACvC,aAAK,cAAc,OAAO,MAAM;AAChC,QAAC,MAAK,KAAK,uBAAuB,QAAQ,OAAO,SAAS,SAAS,GAAG,MAAM,MAAM,KAAK,SAAS,mBAAmB,SAAS;AAAA;AAAA;AAAA,IAGpI,uBAAuB;AACnB,iBAAW,QAAQ,KAAK,cAAc,MAAM;AACxC,mBAAW,WAAW,KAAK,cAAc,gBAAgB,OAAO;AAC5D,eAAK,iBAAiB,SAAS;AAAA;AAAA;AAAA;AAAA,QAIvC,gBAAgB;AAChB,aAAO,QAAQ,KAAK,QAAQ;AAAA;AAAA,QAE5B,UAAU;AACV,aAAO,KAAK,QAAQ;AAAA;AAAA,QAEpB,QAAQ;AACR,aAAO,KAAK,QAAQ;AAAA;AAAA;AAI5B,sBAAc;AAAA,IACV,YAAY,QAAQ,OAAO;AACvB,WAAK,mBAAmB,CAAC,cAAc,SAAS,OAAO;AACnD,cAAM,EAAE,YAAY,YAAY,YAAY;AAC5C,iBAAS,OAAO,OAAO,EAAE,YAAY,YAAY,WAAW;AAC5D,aAAK,YAAY,iBAAiB,KAAK,YAAY,cAAc;AAAA;AAErE,WAAK,SAAS;AACd,WAAK,QAAQ;AACb,WAAK,aAAa,IAAI,OAAO,sBAAsB;AACnD,WAAK,kBAAkB,IAAI,gBAAgB,MAAM,KAAK;AACtD,WAAK,gBAAgB,IAAI,cAAc,MAAM,KAAK;AAClD,WAAK,iBAAiB,IAAI,eAAe,MAAM;AAC/C,UAAI;AACA,aAAK,WAAW;AAChB,aAAK,iBAAiB;AAAA,eAEnB,QAAP;AACI,aAAK,YAAY,QAAO;AAAA;AAAA;AAAA,IAGhC,UAAU;AACN,WAAK,gBAAgB;AACrB,WAAK,cAAc;AACnB,WAAK,eAAe;AACpB,UAAI;AACA,aAAK,WAAW;AAChB,aAAK,iBAAiB;AAAA,eAEnB,QAAP;AACI,aAAK,YAAY,QAAO;AAAA;AAAA;AAAA,IAGhC,aAAa;AACT,UAAI;AACA,aAAK,WAAW;AAChB,aAAK,iBAAiB;AAAA,eAEnB,QAAP;AACI,aAAK,YAAY,QAAO;AAAA;AAE5B,WAAK,eAAe;AACpB,WAAK,cAAc;AACnB,WAAK,gBAAgB;AAAA;AAAA,QAErB,cAAc;AACd,aAAO,KAAK,OAAO;AAAA;AAAA,QAEnB,aAAa;AACb,aAAO,KAAK,OAAO;AAAA;AAAA,QAEnB,SAAS;AACT,aAAO,KAAK,YAAY;AAAA;AAAA,QAExB,aAAa;AACb,aAAO,KAAK,YAAY;AAAA;AAAA,QAExB,UAAU;AACV,aAAO,KAAK,MAAM;AAAA;AAAA,QAElB,gBAAgB;AAChB,aAAO,KAAK,QAAQ;AAAA;AAAA,IAExB,YAAY,QAAO,SAAS,SAAS,IAAI;AACrC,YAAM,EAAE,YAAY,YAAY,YAAY;AAC5C,eAAS,OAAO,OAAO,EAAE,YAAY,YAAY,WAAW;AAC5D,WAAK,YAAY,YAAY,QAAO,SAAS,WAAW;AAAA;AAAA,IAE5D,gBAAgB,SAAS,MAAM;AAC3B,WAAK,uBAAuB,GAAG,uBAAuB;AAAA;AAAA,IAE1D,mBAAmB,SAAS,MAAM;AAC9B,WAAK,uBAAuB,GAAG,0BAA0B;AAAA;AAAA,IAE7D,uBAAuB,eAAe,MAAM;AACxC,YAAM,aAAa,KAAK;AACxB,UAAI,OAAO,WAAW,eAAe,YAAY;AAC7C,mBAAW,YAAY,GAAG;AAAA;AAAA;AAAA;AAKtC,4CAA0C,aAAa,cAAc;AACjE,UAAM,YAAY,2BAA2B;AAC7C,WAAO,MAAM,KAAK,UAAU,OAAO,CAAC,SAAQ,iBAAgB;AACxD,8BAAwB,cAAa,cAAc,QAAQ,UAAQ,QAAO,IAAI;AAC9E,aAAO;AAAA,OACR,oBAAI;AAAA;AAEX,4CAA0C,aAAa,cAAc;AACjE,UAAM,YAAY,2BAA2B;AAC7C,WAAO,UAAU,OAAO,CAAC,OAAO,iBAAgB;AAC5C,YAAM,KAAK,GAAG,wBAAwB,cAAa;AACnD,aAAO;AAAA,OACR;AAAA;AAEP,sCAAoC,aAAa;AAC7C,UAAM,YAAY;AAClB,WAAO,aAAa;AAChB,gBAAU,KAAK;AACf,oBAAc,OAAO,eAAe;AAAA;AAExC,WAAO,UAAU;AAAA;AAErB,mCAAiC,aAAa,cAAc;AACxD,UAAM,aAAa,YAAY;AAC/B,WAAO,MAAM,QAAQ,cAAc,aAAa;AAAA;AAEpD,mCAAiC,aAAa,cAAc;AACxD,UAAM,aAAa,YAAY;AAC/B,WAAO,aAAa,OAAO,KAAK,YAAY,IAAI,SAAO,CAAC,KAAK,WAAW,SAAS;AAAA;AAGrF,iBAAe,aAAa;AACxB,WAAO,OAAO,aAAa,qBAAqB;AAAA;AAEpD,kBAAgB,aAAa,YAAY;AACrC,UAAM,oBAAoB,QAAO;AACjC,UAAM,mBAAmB,oBAAoB,YAAY,WAAW;AACpE,WAAO,iBAAiB,kBAAkB,WAAW;AACrD,WAAO;AAAA;AAEX,gCAA8B,aAAa;AACvC,UAAM,YAAY,iCAAiC,aAAa;AAChE,WAAO,UAAU,OAAO,CAAC,mBAAmB,aAAa;AACrD,YAAM,aAAa,SAAS;AAC5B,iBAAW,OAAO,YAAY;AAC1B,cAAM,aAAa,kBAAkB,QAAQ;AAC7C,0BAAkB,OAAO,OAAO,OAAO,YAAY,WAAW;AAAA;AAElE,aAAO;AAAA,OACR;AAAA;AAEP,+BAA6B,WAAW,YAAY;AAChD,WAAO,WAAW,YAAY,OAAO,CAAC,kBAAkB,QAAQ;AAC5D,YAAM,aAAa,sBAAsB,WAAW,YAAY;AAChE,UAAI,YAAY;AACZ,eAAO,OAAO,kBAAkB,GAAG,MAAM;AAAA;AAE7C,aAAO;AAAA,OACR;AAAA;AAEP,iCAA+B,WAAW,YAAY,KAAK;AACvD,UAAM,sBAAsB,OAAO,yBAAyB,WAAW;AACvE,UAAM,kBAAkB,uBAAuB,WAAW;AAC1D,QAAI,CAAC,iBAAiB;AAClB,YAAM,aAAa,OAAO,yBAAyB,YAAY,KAAK;AACpE,UAAI,qBAAqB;AACrB,mBAAW,MAAM,oBAAoB,OAAO,WAAW;AACvD,mBAAW,MAAM,oBAAoB,OAAO,WAAW;AAAA;AAE3D,aAAO;AAAA;AAAA;AAGf,MAAM,aAAc,OAAM;AACtB,QAAI,OAAO,OAAO,yBAAyB,YAAY;AACnD,aAAO,CAAC,WAAW;AAAA,QACf,GAAG,OAAO,oBAAoB;AAAA,QAC9B,GAAG,OAAO,sBAAsB;AAAA;AAAA,WAGnC;AACD,aAAO,OAAO;AAAA;AAAA;AAGtB,MAAM,UAAU,OAAM;AAClB,+BAA2B,aAAa;AACpC,0BAAoB;AAChB,eAAO,QAAQ,UAAU,aAAa,WAAW;AAAA;AAErD,eAAS,YAAY,OAAO,OAAO,YAAY,WAAW;AAAA,QACtD,aAAa,EAAE,OAAO;AAAA;AAE1B,cAAQ,eAAe,UAAU;AACjC,aAAO;AAAA;AAEX,oCAAgC;AAC5B,YAAM,IAAI,WAAY;AAAE,aAAK,EAAE,KAAK;AAAA;AACpC,YAAM,IAAI,kBAAkB;AAC5B,QAAE,UAAU,IAAI,WAAY;AAAA;AAC5B,aAAO,IAAI;AAAA;AAEf,QAAI;AACA;AACA,aAAO;AAAA,aAEJ,QAAP;AACI,aAAO,CAAC,gBAAgB,uBAAuB,YAAY;AAAA;AAAA;AAAA;AAKnE,2BAAyB,YAAY;AACjC,WAAO;AAAA,MACH,YAAY,WAAW;AAAA,MACvB,uBAAuB,MAAM,WAAW;AAAA;AAAA;AAIhD,qBAAa;AAAA,IACT,YAAY,cAAa,YAAY;AACjC,WAAK,cAAc;AACnB,WAAK,aAAa,gBAAgB;AAClC,WAAK,kBAAkB,oBAAI;AAC3B,WAAK,oBAAoB,oBAAI;AAAA;AAAA,QAE7B,aAAa;AACb,aAAO,KAAK,WAAW;AAAA;AAAA,QAEvB,wBAAwB;AACxB,aAAO,KAAK,WAAW;AAAA;AAAA,QAEvB,WAAW;AACX,aAAO,MAAM,KAAK,KAAK;AAAA;AAAA,IAE3B,uBAAuB,OAAO;AAC1B,YAAM,UAAU,KAAK,qBAAqB;AAC1C,WAAK,kBAAkB,IAAI;AAC3B,cAAQ;AAAA;AAAA,IAEZ,0BAA0B,OAAO;AAC7B,YAAM,UAAU,KAAK,gBAAgB,IAAI;AACzC,UAAI,SAAS;AACT,aAAK,kBAAkB,OAAO;AAC9B,gBAAQ;AAAA;AAAA;AAAA,IAGhB,qBAAqB,OAAO;AACxB,UAAI,UAAU,KAAK,gBAAgB,IAAI;AACvC,UAAI,CAAC,SAAS;AACV,kBAAU,IAAI,QAAQ,MAAM;AAC5B,aAAK,gBAAgB,IAAI,OAAO;AAAA;AAEpC,aAAO;AAAA;AAAA;AAIf,uBAAe;AAAA,IACX,YAAY,OAAO;AACf,WAAK,QAAQ;AAAA;AAAA,IAEjB,IAAI,MAAM;AACN,aAAO,KAAK,KAAK,IAAI,KAAK,WAAW;AAAA;AAAA,IAEzC,IAAI,MAAM;AACN,aAAO,KAAK,OAAO,MAAM;AAAA;AAAA,IAE7B,OAAO,MAAM;AACT,YAAM,cAAc,KAAK,KAAK,IAAI,KAAK,WAAW,UAAU;AAC5D,aAAO,SAAS;AAAA;AAAA,IAEpB,iBAAiB,MAAM;AACnB,aAAO,KAAK,KAAK,uBAAuB,KAAK,WAAW;AAAA;AAAA,IAE5D,WAAW,MAAM;AACb,aAAO,GAAG;AAAA;AAAA,QAEV,OAAO;AACP,aAAO,KAAK,MAAM;AAAA;AAAA;AAI1B,sBAAc;AAAA,IACV,YAAY,OAAO;AACf,WAAK,QAAQ;AAAA;AAAA,QAEb,UAAU;AACV,aAAO,KAAK,MAAM;AAAA;AAAA,QAElB,aAAa;AACb,aAAO,KAAK,MAAM;AAAA;AAAA,IAEtB,IAAI,KAAK;AACL,YAAM,OAAO,KAAK,uBAAuB;AACzC,aAAO,KAAK,QAAQ,aAAa;AAAA;AAAA,IAErC,IAAI,KAAK,OAAO;AACZ,YAAM,OAAO,KAAK,uBAAuB;AACzC,WAAK,QAAQ,aAAa,MAAM;AAChC,aAAO,KAAK,IAAI;AAAA;AAAA,IAEpB,IAAI,KAAK;AACL,YAAM,OAAO,KAAK,uBAAuB;AACzC,aAAO,KAAK,QAAQ,aAAa;AAAA;AAAA,IAErC,OAAO,KAAK;AACR,UAAI,KAAK,IAAI,MAAM;AACf,cAAM,OAAO,KAAK,uBAAuB;AACzC,aAAK,QAAQ,gBAAgB;AAC7B,eAAO;AAAA,aAEN;AACD,eAAO;AAAA;AAAA;AAAA,IAGf,uBAAuB,KAAK;AACxB,aAAO,QAAQ,KAAK,cAAc,UAAU;AAAA;AAAA;AAIpD,oBAAY;AAAA,IACR,YAAY,QAAQ;AAChB,WAAK,qBAAqB,oBAAI;AAC9B,WAAK,SAAS;AAAA;AAAA,IAElB,KAAK,QAAQ,KAAK,SAAS;AACvB,UAAI,aAAa,KAAK,mBAAmB,IAAI;AAC7C,UAAI,CAAC,YAAY;AACb,qBAAa,oBAAI;AACjB,aAAK,mBAAmB,IAAI,QAAQ;AAAA;AAExC,UAAI,CAAC,WAAW,IAAI,MAAM;AACtB,mBAAW,IAAI;AACf,aAAK,OAAO,KAAK,SAAS;AAAA;AAAA;AAAA;AAKtC,uCAAqC,eAAe,OAAO;AACvD,WAAO,IAAI,mBAAmB;AAAA;AAGlC,wBAAgB;AAAA,IACZ,YAAY,OAAO;AACf,WAAK,QAAQ;AAAA;AAAA,QAEb,UAAU;AACV,aAAO,KAAK,MAAM;AAAA;AAAA,QAElB,aAAa;AACb,aAAO,KAAK,MAAM;AAAA;AAAA,QAElB,SAAS;AACT,aAAO,KAAK,MAAM;AAAA;AAAA,IAEtB,IAAI,YAAY;AACZ,aAAO,KAAK,KAAK,eAAe;AAAA;AAAA,IAEpC,QAAQ,aAAa;AACjB,aAAO,YAAY,OAAO,CAAC,QAAQ,eAAe,UAC3C,KAAK,WAAW,eAChB,KAAK,iBAAiB,aAAa;AAAA;AAAA,IAE9C,WAAW,aAAa;AACpB,aAAO,YAAY,OAAO,CAAC,SAAS,eAAe;AAAA,QAC/C,GAAG;AAAA,QACH,GAAG,KAAK,eAAe;AAAA,QACvB,GAAG,KAAK,qBAAqB;AAAA,SAC9B;AAAA;AAAA,IAEP,WAAW,YAAY;AACnB,YAAM,WAAW,KAAK,yBAAyB;AAC/C,aAAO,KAAK,MAAM,YAAY;AAAA;AAAA,IAElC,eAAe,YAAY;AACvB,YAAM,WAAW,KAAK,yBAAyB;AAC/C,aAAO,KAAK,MAAM,gBAAgB;AAAA;AAAA,IAEtC,yBAAyB,YAAY;AACjC,YAAM,gBAAgB,KAAK,OAAO,wBAAwB,KAAK;AAC/D,aAAO,4BAA4B,eAAe;AAAA;AAAA,IAEtD,iBAAiB,YAAY;AACzB,YAAM,WAAW,KAAK,+BAA+B;AACrD,aAAO,KAAK,UAAU,KAAK,MAAM,YAAY,WAAW;AAAA;AAAA,IAE5D,qBAAqB,YAAY;AAC7B,YAAM,WAAW,KAAK,+BAA+B;AACrD,aAAO,KAAK,MAAM,gBAAgB,UAAU,IAAI,aAAW,KAAK,UAAU,SAAS;AAAA;AAAA,IAEvF,+BAA+B,YAAY;AACvC,YAAM,mBAAmB,GAAG,KAAK,cAAc;AAC/C,aAAO,4BAA4B,KAAK,OAAO,iBAAiB;AAAA;AAAA,IAEpE,UAAU,SAAS,YAAY;AAC3B,UAAI,SAAS;AACT,cAAM,EAAE,eAAe;AACvB,cAAM,gBAAgB,KAAK,OAAO;AAClC,cAAM,uBAAuB,KAAK,OAAO,wBAAwB;AACjE,aAAK,MAAM,KAAK,SAAS,UAAU,cAAc,kBAAkB,kBAAkB,cAAc,oBAAoB,yBAAyB,oBACrI;AAAA;AAEf,aAAO;AAAA;AAAA,QAEP,QAAQ;AACR,aAAO,KAAK,MAAM;AAAA;AAAA;AAI1B,oBAAY;AAAA,IACR,YAAY,QAAQ,SAAS,YAAY,QAAQ;AAC7C,WAAK,UAAU,IAAI,UAAU;AAC7B,WAAK,UAAU,IAAI,SAAS;AAC5B,WAAK,OAAO,IAAI,QAAQ;AACxB,WAAK,kBAAkB,CAAC,aAAY;AAChC,eAAO,SAAQ,QAAQ,KAAK,wBAAwB,KAAK;AAAA;AAE7D,WAAK,SAAS;AACd,WAAK,UAAU;AACf,WAAK,aAAa;AAClB,WAAK,QAAQ,IAAI,MAAM;AAAA;AAAA,IAE3B,YAAY,UAAU;AAClB,aAAO,KAAK,QAAQ,QAAQ,YACtB,KAAK,UACL,KAAK,cAAc,UAAU,KAAK,KAAK;AAAA;AAAA,IAEjD,gBAAgB,UAAU;AACtB,aAAO;AAAA,QACH,GAAG,KAAK,QAAQ,QAAQ,YAAY,CAAC,KAAK,WAAW;AAAA,QACrD,GAAG,KAAK,cAAc,UAAU,OAAO,KAAK;AAAA;AAAA;AAAA,IAGpD,cAAc,UAAU;AACpB,aAAO,MAAM,KAAK,KAAK,QAAQ,iBAAiB;AAAA;AAAA,QAEhD,qBAAqB;AACrB,aAAO,4BAA4B,KAAK,OAAO,qBAAqB,KAAK;AAAA;AAAA;AAIjF,4BAAoB;AAAA,IAChB,YAAY,SAAS,QAAQ,UAAU;AACnC,WAAK,UAAU;AACf,WAAK,SAAS;AACd,WAAK,WAAW;AAChB,WAAK,oBAAoB,IAAI,kBAAkB,KAAK,SAAS,KAAK,qBAAqB;AACvF,WAAK,8BAA8B,oBAAI;AACvC,WAAK,uBAAuB,oBAAI;AAAA;AAAA,IAEpC,QAAQ;AACJ,WAAK,kBAAkB;AAAA;AAAA,IAE3B,OAAO;AACH,WAAK,kBAAkB;AAAA;AAAA,QAEvB,sBAAsB;AACtB,aAAO,KAAK,OAAO;AAAA;AAAA,IAEvB,mBAAmB,OAAO;AACtB,YAAM,EAAE,SAAS,SAAS,eAAe;AACzC,YAAM,qBAAqB,KAAK,kCAAkC;AAClE,UAAI,QAAQ,mBAAmB,IAAI;AACnC,UAAI,CAAC,OAAO;AACR,gBAAQ,KAAK,SAAS,mCAAmC,SAAS;AAClE,2BAAmB,IAAI,YAAY;AAAA;AAEvC,aAAO;AAAA;AAAA,IAEX,oBAAoB,SAAS,OAAO;AAChC,YAAM,iBAAkB,MAAK,qBAAqB,IAAI,UAAU,KAAK;AACrE,WAAK,qBAAqB,IAAI,OAAO;AACrC,UAAI,kBAAkB,GAAG;AACrB,aAAK,SAAS,eAAe;AAAA;AAAA;AAAA,IAGrC,sBAAsB,SAAS,OAAO;AAClC,YAAM,iBAAiB,KAAK,qBAAqB,IAAI;AACrD,UAAI,gBAAgB;AAChB,aAAK,qBAAqB,IAAI,OAAO,iBAAiB;AACtD,YAAI,kBAAkB,GAAG;AACrB,eAAK,SAAS,kBAAkB;AAAA;AAAA;AAAA;AAAA,IAI5C,kCAAkC,SAAS;AACvC,UAAI,qBAAqB,KAAK,4BAA4B,IAAI;AAC9D,UAAI,CAAC,oBAAoB;AACrB,6BAAqB,oBAAI;AACzB,aAAK,4BAA4B,IAAI,SAAS;AAAA;AAElD,aAAO;AAAA;AAAA;AAIf,qBAAa;AAAA,IACT,YAAY,cAAa;AACrB,WAAK,cAAc;AACnB,WAAK,gBAAgB,IAAI,cAAc,KAAK,SAAS,KAAK,QAAQ;AAClE,WAAK,qBAAqB,IAAI;AAC9B,WAAK,sBAAsB,oBAAI;AAAA;AAAA,QAE/B,UAAU;AACV,aAAO,KAAK,YAAY;AAAA;AAAA,QAExB,SAAS;AACT,aAAO,KAAK,YAAY;AAAA;AAAA,QAExB,SAAS;AACT,aAAO,KAAK,YAAY;AAAA;AAAA,QAExB,sBAAsB;AACtB,aAAO,KAAK,OAAO;AAAA;AAAA,QAEnB,UAAU;AACV,aAAO,MAAM,KAAK,KAAK,oBAAoB;AAAA;AAAA,QAE3C,WAAW;AACX,aAAO,KAAK,QAAQ,OAAO,CAAC,UAAU,WAAW,SAAS,OAAO,OAAO,WAAW;AAAA;AAAA,IAEvF,QAAQ;AACJ,WAAK,cAAc;AAAA;AAAA,IAEvB,OAAO;AACH,WAAK,cAAc;AAAA;AAAA,IAEvB,eAAe,YAAY;AACvB,WAAK,iBAAiB,WAAW;AACjC,YAAM,SAAS,IAAI,OAAO,KAAK,aAAa;AAC5C,WAAK,cAAc;AAAA;AAAA,IAEvB,iBAAiB,YAAY;AACzB,YAAM,SAAS,KAAK,oBAAoB,IAAI;AAC5C,UAAI,QAAQ;AACR,aAAK,iBAAiB;AAAA;AAAA;AAAA,IAG9B,kCAAkC,SAAS,YAAY;AACnD,YAAM,SAAS,KAAK,oBAAoB,IAAI;AAC5C,UAAI,QAAQ;AACR,eAAO,OAAO,SAAS,KAAK,aAAW,QAAQ,WAAW;AAAA;AAAA;AAAA,IAGlE,YAAY,QAAO,SAAS,QAAQ;AAChC,WAAK,YAAY,YAAY,QAAO,SAAS;AAAA;AAAA,IAEjD,mCAAmC,SAAS,YAAY;AACpD,aAAO,IAAI,MAAM,KAAK,QAAQ,SAAS,YAAY,KAAK;AAAA;AAAA,IAE5D,eAAe,OAAO;AAClB,WAAK,mBAAmB,IAAI,MAAM,YAAY;AAC9C,YAAM,SAAS,KAAK,oBAAoB,IAAI,MAAM;AAClD,UAAI,QAAQ;AACR,eAAO,uBAAuB;AAAA;AAAA;AAAA,IAGtC,kBAAkB,OAAO;AACrB,WAAK,mBAAmB,OAAO,MAAM,YAAY;AACjD,YAAM,SAAS,KAAK,oBAAoB,IAAI,MAAM;AAClD,UAAI,QAAQ;AACR,eAAO,0BAA0B;AAAA;AAAA;AAAA,IAGzC,cAAc,QAAQ;AAClB,WAAK,oBAAoB,IAAI,OAAO,YAAY;AAChD,YAAM,SAAS,KAAK,mBAAmB,gBAAgB,OAAO;AAC9D,aAAO,QAAQ,WAAS,OAAO,uBAAuB;AAAA;AAAA,IAE1D,iBAAiB,QAAQ;AACrB,WAAK,oBAAoB,OAAO,OAAO;AACvC,YAAM,SAAS,KAAK,mBAAmB,gBAAgB,OAAO;AAC9D,aAAO,QAAQ,WAAS,OAAO,0BAA0B;AAAA;AAAA;AAIjE,MAAM,gBAAgB;AAAA,IAClB,qBAAqB;AAAA,IACrB,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,yBAAyB,gBAAc,QAAQ;AAAA;AAGnD,0BAAkB;AAAA,IACd,YAAY,UAAU,SAAS,iBAAiB,SAAS,eAAe;AACpE,WAAK,SAAS;AACd,WAAK,QAAQ;AACb,WAAK,mBAAmB,CAAC,YAAY,cAAc,SAAS,OAAO;AAC/D,YAAI,KAAK,OAAO;AACZ,eAAK,oBAAoB,YAAY,cAAc;AAAA;AAAA;AAG3D,WAAK,UAAU;AACf,WAAK,SAAS;AACd,WAAK,aAAa,IAAI,WAAW;AACjC,WAAK,SAAS,IAAI,OAAO;AAAA;AAAA,WAEtB,MAAM,SAAS,QAAQ;AAC1B,YAAM,eAAc,IAAI,YAAY,SAAS;AAC7C,mBAAY;AACZ,aAAO;AAAA;AAAA,UAEL,QAAQ;AACV,YAAM;AACN,WAAK,iBAAiB,eAAe;AACrC,WAAK,WAAW;AAChB,WAAK,OAAO;AACZ,WAAK,iBAAiB,eAAe;AAAA;AAAA,IAEzC,OAAO;AACH,WAAK,iBAAiB,eAAe;AACrC,WAAK,WAAW;AAChB,WAAK,OAAO;AACZ,WAAK,iBAAiB,eAAe;AAAA;AAAA,IAEzC,SAAS,YAAY,uBAAuB;AACxC,UAAI,sBAAsB,YAAY;AAClC,aAAK,KAAK,EAAE,YAAY;AAAA;AAAA;AAAA,IAGhC,KAAK,SAAS,MAAM;AAChB,YAAM,cAAc,MAAM,QAAQ,QAAQ,OAAO,CAAC,MAAM,GAAG;AAC3D,kBAAY,QAAQ,gBAAc,KAAK,OAAO,eAAe;AAAA;AAAA,IAEjE,OAAO,SAAS,MAAM;AAClB,YAAM,cAAc,MAAM,QAAQ,QAAQ,OAAO,CAAC,MAAM,GAAG;AAC3D,kBAAY,QAAQ,gBAAc,KAAK,OAAO,iBAAiB;AAAA;AAAA,QAE/D,cAAc;AACd,aAAO,KAAK,OAAO,SAAS,IAAI,aAAW,QAAQ;AAAA;AAAA,IAEvD,qCAAqC,SAAS,YAAY;AACtD,YAAM,UAAU,KAAK,OAAO,kCAAkC,SAAS;AACvE,aAAO,UAAU,QAAQ,aAAa;AAAA;AAAA,IAE1C,YAAY,QAAO,SAAS,QAAQ;AAChC,UAAI;AACJ,WAAK,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA,KAAkB,SAAS,QAAO;AACpD,MAAC,MAAK,OAAO,aAAa,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,QAAQ,SAAS,IAAI,GAAG,GAAG;AAAA;AAAA,IAElG,oBAAoB,YAAY,cAAc,SAAS,IAAI;AACvD,eAAS,OAAO,OAAO,EAAE,aAAa,QAAQ;AAC9C,WAAK,OAAO,eAAe,GAAG,eAAe;AAC7C,WAAK,OAAO,IAAI,YAAY,OAAO,OAAO,IAAI;AAC9C,WAAK,OAAO;AAAA;AAAA;AAGpB,sBAAoB;AAChB,WAAO,IAAI,QAAQ,aAAW;AAC1B,UAAI,SAAS,cAAc,WAAW;AAClC,iBAAS,iBAAiB,oBAAoB,MAAM;AAAA,aAEnD;AACD;AAAA;AAAA;AAAA;AAKZ,mCAAiC,aAAa;AAC1C,UAAM,UAAU,iCAAiC,aAAa;AAC9D,WAAO,QAAQ,OAAO,CAAC,YAAY,oBAAoB;AACnD,aAAO,OAAO,OAAO,YAAY,6BAA6B;AAAA,OAC/D;AAAA;AAEP,wCAAsC,KAAK;AACvC,WAAO;AAAA,OACF,GAAG,aAAa;AAAA,QACb,MAAM;AACF,gBAAM,EAAE,YAAY;AACpB,cAAI,QAAQ,IAAI,MAAM;AAClB,mBAAO,QAAQ,IAAI;AAAA,iBAElB;AACD,kBAAM,YAAY,QAAQ,iBAAiB;AAC3C,kBAAM,IAAI,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA,OAIjD,GAAG,eAAe;AAAA,QACf,MAAM;AACF,iBAAO,KAAK,QAAQ,OAAO;AAAA;AAAA;AAAA,OAGlC,MAAM,WAAW,cAAc;AAAA,QAC5B,MAAM;AACF,iBAAO,KAAK,QAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAMxC,oCAAkC,aAAa;AAC3C,UAAM,UAAU,iCAAiC,aAAa;AAC9D,WAAO,QAAQ,OAAO,CAAC,YAAY,qBAAqB;AACpD,aAAO,OAAO,OAAO,YAAY,8BAA8B;AAAA,OAChE;AAAA;AAEP,yCAAuC,MAAM;AACzC,WAAO;AAAA,OACF,GAAG,eAAe;AAAA,QACf,MAAM;AACF,gBAAM,SAAS,KAAK,QAAQ,KAAK;AACjC,cAAI,QAAQ;AACR,mBAAO;AAAA,iBAEN;AACD,kBAAM,IAAI,MAAM,2BAA2B,cAAc,KAAK;AAAA;AAAA;AAAA;AAAA,OAIzE,GAAG,gBAAgB;AAAA,QAChB,MAAM;AACF,iBAAO,KAAK,QAAQ,QAAQ;AAAA;AAAA;AAAA,OAGnC,MAAM,WAAW,gBAAgB;AAAA,QAC9B,MAAM;AACF,iBAAO,KAAK,QAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAMxC,mCAAiC,aAAa;AAC1C,UAAM,uBAAuB,iCAAiC,aAAa;AAC3E,UAAM,wBAAwB;AAAA,MAC1B,oBAAoB;AAAA,QAChB,MAAM;AACF,iBAAO,qBAAqB,OAAO,CAAC,QAAQ,wBAAwB;AAChE,kBAAM,kBAAkB,yBAAyB;AACjD,kBAAM,gBAAgB,KAAK,KAAK,uBAAuB,gBAAgB;AACvE,mBAAO,OAAO,OAAO,QAAQ,GAAG,gBAAgB;AAAA,aACjD;AAAA;AAAA;AAAA;AAIf,WAAO,qBAAqB,OAAO,CAAC,YAAY,wBAAwB;AACpE,aAAO,OAAO,OAAO,YAAY,iCAAiC;AAAA,OACnE;AAAA;AAEP,4CAA0C,qBAAqB;AAC3D,UAAM,aAAa,yBAAyB;AAC5C,UAAM,EAAE,KAAK,MAAM,QAAQ,OAAM,QAAQ,WAAU;AACnD,WAAO;AAAA,OACF,OAAO;AAAA,QACJ,MAAM;AACF,gBAAM,QAAQ,KAAK,KAAK,IAAI;AAC5B,cAAI,UAAU,MAAM;AAChB,mBAAO,MAAK;AAAA,iBAEX;AACD,mBAAO,WAAW;AAAA;AAAA;AAAA,QAG1B,IAAI,OAAO;AACP,cAAI,UAAU,QAAW;AACrB,iBAAK,KAAK,OAAO;AAAA,iBAEhB;AACD,iBAAK,KAAK,IAAI,KAAK,OAAM;AAAA;AAAA;AAAA;AAAA,OAIpC,MAAM,WAAW,UAAU;AAAA,QACxB,MAAM;AACF,iBAAO,KAAK,KAAK,IAAI,QAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAKxD,oCAAkC,CAAC,OAAO,iBAAiB;AACvD,WAAO,yCAAyC,OAAO;AAAA;AAE3D,kCAAgC,UAAU;AACtC,YAAQ;AAAA,WACC;AAAO,eAAO;AAAA,WACd;AAAS,eAAO;AAAA,WAChB;AAAQ,eAAO;AAAA,WACf;AAAQ,eAAO;AAAA,WACf;AAAQ,eAAO;AAAA;AAAA;AAG5B,iCAA+B,cAAc;AACzC,YAAQ,OAAO;AAAA,WACN;AAAW,eAAO;AAAA,WAClB;AAAU,eAAO;AAAA,WACjB;AAAU,eAAO;AAAA;AAE1B,QAAI,MAAM,QAAQ;AACd,aAAO;AACX,QAAI,OAAO,UAAU,SAAS,KAAK,kBAAkB;AACjD,aAAO;AAAA;AAEf,gCAA8B,YAAY;AACtC,UAAM,iBAAiB,uBAAuB,WAAW;AACzD,QAAI,gBAAgB;AAChB,YAAM,mBAAmB,sBAAsB,WAAW;AAC1D,UAAI,mBAAmB,kBAAkB;AACrC,cAAM,IAAI,MAAM,SAAS,mFAAmF,WAAW,gBAAgB;AAAA;AAE3I,aAAO;AAAA;AAAA;AAGf,oCAAkC,gBAAgB;AAC9C,UAAM,iBAAiB,qBAAqB;AAC5C,UAAM,uBAAuB,sBAAsB;AACnD,UAAM,mBAAmB,uBAAuB;AAChD,UAAM,OAAO,kBAAkB,wBAAwB;AACvD,QAAI;AACA,aAAO;AACX,UAAM,IAAI,MAAM,uBAAuB;AAAA;AAE3C,qCAAmC,gBAAgB;AAC/C,UAAM,WAAW,uBAAuB;AACxC,QAAI;AACA,aAAO,oBAAoB;AAC/B,UAAM,eAAe,eAAe;AACpC,QAAI,iBAAiB;AACjB,aAAO;AACX,WAAO;AAAA;AAEX,oDAAkD,OAAO,gBAAgB;AACrE,UAAM,MAAM,GAAG,UAAU;AACzB,UAAM,OAAO,yBAAyB;AACtC,WAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA,MAAM,SAAS;AAAA,UACX,eAAe;AAAE,eAAO,0BAA0B;AAAA;AAAA,UAClD,wBAAwB;AAAE,eAAO,sBAAsB,oBAAoB;AAAA;AAAA,MAC/E,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ,SAAS,QAAQ;AAAA;AAAA;AAGzC,MAAM,sBAAsB;AAAA,QACpB,QAAQ;AAAE,aAAO;AAAA;AAAA,IACrB,SAAS;AAAA,IACT,QAAQ;AAAA,QACJ,SAAS;AAAE,aAAO;AAAA;AAAA,IACtB,QAAQ;AAAA;AAEZ,MAAM,UAAU;AAAA,IACZ,MAAM,OAAO;AACT,YAAM,QAAQ,KAAK,MAAM;AACzB,UAAI,CAAC,MAAM,QAAQ,QAAQ;AACvB,cAAM,IAAI,UAAU;AAAA;AAExB,aAAO;AAAA;AAAA,IAEX,QAAQ,OAAO;AACX,aAAO,CAAE,UAAS,OAAO,SAAS;AAAA;AAAA,IAEtC,OAAO,OAAO;AACV,aAAO,OAAO;AAAA;AAAA,IAElB,OAAO,OAAO;AACV,YAAM,SAAS,KAAK,MAAM;AAC1B,UAAI,WAAW,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,SAAS;AACvE,cAAM,IAAI,UAAU;AAAA;AAExB,aAAO;AAAA;AAAA,IAEX,OAAO,OAAO;AACV,aAAO;AAAA;AAAA;AAGf,MAAM,UAAU;AAAA,IACZ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA;AAEZ,qBAAmB,OAAO;AACtB,WAAO,KAAK,UAAU;AAAA;AAE1B,uBAAqB,OAAO;AACxB,WAAO,GAAG;AAAA;AAGd,yBAAiB;AAAA,IACb,YAAY,SAAS;AACjB,WAAK,UAAU;AAAA;AAAA,eAER,aAAa;AACpB,aAAO;AAAA;AAAA,QAEP,cAAc;AACd,aAAO,KAAK,QAAQ;AAAA;AAAA,QAEpB,QAAQ;AACR,aAAO,KAAK,QAAQ;AAAA;AAAA,QAEpB,UAAU;AACV,aAAO,KAAK,MAAM;AAAA;AAAA,QAElB,aAAa;AACb,aAAO,KAAK,MAAM;AAAA;AAAA,QAElB,UAAU;AACV,aAAO,KAAK,MAAM;AAAA;AAAA,QAElB,UAAU;AACV,aAAO,KAAK,MAAM;AAAA;AAAA,QAElB,OAAO;AACP,aAAO,KAAK,MAAM;AAAA;AAAA,IAEtB,aAAa;AAAA;AAAA,IAEb,UAAU;AAAA;AAAA,IAEV,aAAa;AAAA;AAAA,IAEb,SAAS,WAAW,EAAE,SAAS,KAAK,SAAS,SAAS,IAAI,SAAS,KAAK,YAAY,UAAU,MAAM,aAAa,SAAS,IAAI;AAC1H,YAAM,OAAO,SAAS,GAAG,UAAU,cAAc;AACjD,YAAM,SAAQ,IAAI,YAAY,MAAM,EAAE,QAAQ,SAAS;AACvD,aAAO,cAAc;AACrB,aAAO;AAAA;AAAA;AAGf,aAAW,YAAY,CAAC,yBAAyB,0BAA0B;AAC3E,aAAW,UAAU;AACrB,aAAW,SAAS;;;ACn5DpB,MAAM,cAAc,YAAY;AAGhC,cAAY,QAAQ;AACpB,SAAO,WAAa;AAKpB,MAAI,MAAwC;AAC1C,WAAO,kBAAkB,CAAC,mBAAmB;AAC3C,aAAO,SAAS,qCACd,SAAS,cAAc,qBAAqB,qBAC5C;AAAA;AAAA;;;ACbN,gDAA6B,WAAW;AAAA,IACtC,UAAU;AAAA;AAAA,IAEV,YAAY,QAAO;AAEjB,aAAM;AACN,YAAM,iBAAiB,EAAE,OAAM,eAAe,KAAK;AACnD,UAAI,gBAAgB;AAClB,cAAM,KAAK,QAAQ;AACnB,YAAI,IAAI;AACN,gBAAM,OAAO,OAAM,cAAc;AACjC,gBAAM,SAAS;AACf,cAAI,OAAO,EAAE,iCAAiC,OAAO;AACrD,cAAI,gBACF,kCAAkC,SAAS;AAC7C,gBAAM,YAAY,SAAS,kBAAkB,cAAc,GAAG;AAC9D,gBAAM,YAAY,SAAS,kBAAkB,cAAc,GAAG;AAC9D,cAAI,cAAc,UAAa,cAAc,QAAW;AACtD,6BACE,kBACA,YACA,cACA,YACA;AAAA;AAEJ,eAAK,OAAO,OAAO,eAAe,SAAS;AAC3C,eAAK;AAAA;AAAA,aAEF;AACL,cAAM,OAAO,OAAM,cAAc;AACjC,cAAM,SAAS;AACf,YAAI,OAAO,EAAE,iCAAiC,OAAO;AACrD,YAAI,gBACF,kCAAkC,SAAS;AAC7C,cAAM,YAAY,SAAS,kBAAkB,cAAc,GAAG;AAC9D,cAAM,YAAY,SAAS,kBAAkB,cAAc,GAAG;AAC9D,YAAI,cAAc,UAAa,cAAc,QAAW;AACtD,2BACE,kBACA,YACA,cACA,YACA;AAAA;AAEJ,aAAK,OAAO,OAAO,eAAe,SAAS;AAC3C,aAAK;AAAA;AAAA;AAAA,IAKT,WAAW,QAAO;AAChB,aAAM,cAAc,KAAK;AAAA;AAAA,IAG3B,WAAW,QAAO;AAChB,aAAM;AACN,QAAE,OAAM,eAAe,QAAQ,QAAQ;AAAA;AAAA;;;AC1D3C,MAAI,WAAW;AAAA,IACb,SAAS;AAAA;AAGX,EAAC,UAAS,QAAQ,SAAS;AACzB,IAAC,UAAS,SAAS;AACjB;AACE,eAAO,UAAU;AAAA;AAAA,OAEjB,SAAS,aAAa;AACxB,UAAI,UAAU,CAAE,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;AAC3F,wBAAkB,GAAG,GAAG;AACtB,YAAI,IAAI,EAAE,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE;AACxC,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,KAAK,YAAY;AAC3C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,KAAK,YAAY;AAC3C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,KAAK,YAAY;AAC3C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,KAAK,aAAa;AAC5C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,KAAK,YAAY;AAC3C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,KAAK,aAAa;AAC5C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,KAAK,aAAa;AAC5C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,KAAK,WAAW;AAC1C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,KAAK,aAAa;AAC5C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,KAAK,aAAa;AAC5C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,MAAM,QAAQ;AACxC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,MAAM,aAAa;AAC7C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,MAAM,aAAa;AAC7C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,MAAM,WAAW;AAC3C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,MAAM,aAAa;AAC7C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,MAAM,aAAa;AAC7C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,YAAY;AAC3C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,aAAa;AAC5C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,YAAY;AAC5C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,YAAY;AAC3C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,YAAY;AAC3C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,WAAW;AAC3C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,YAAY;AAC5C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,YAAY;AAC3C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,YAAY;AAC3C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,aAAa;AAC7C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,YAAY;AAC3C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,aAAa;AAC5C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,aAAa;AAC7C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,WAAW;AAC1C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,aAAa;AAC5C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,aAAa;AAC7C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,KAAK,EAAE,KAAK,SAAS;AACnC,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,KAAK,EAAE,KAAK,aAAa;AACvC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,KAAK,EAAE,MAAM,aAAa;AACxC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,KAAK,EAAE,MAAM,WAAW;AACtC,YAAK,MAAK,KAAK,MAAM,KAAK,IAAI;AAC9B,aAAM,KAAI,IAAI,KAAK,EAAE,KAAK,aAAa;AACvC,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,KAAK,EAAE,KAAK,aAAa;AACvC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,KAAK,EAAE,KAAK,YAAY;AACtC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,KAAK,EAAE,MAAM,aAAa;AACxC,YAAK,MAAK,KAAK,MAAM,KAAK,IAAI;AAC9B,aAAM,KAAI,IAAI,KAAK,EAAE,MAAM,YAAY;AACvC,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,KAAK,EAAE,KAAK,YAAY;AACtC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,KAAK,EAAE,KAAK,YAAY;AACtC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,KAAK,EAAE,KAAK,WAAW;AACrC,YAAK,MAAK,KAAK,MAAM,KAAK,IAAI;AAC9B,aAAM,KAAI,IAAI,KAAK,EAAE,KAAK,YAAY;AACtC,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAI,IAAI,KAAK,EAAE,MAAM,YAAY;AACvC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,KAAK,EAAE,MAAM,YAAY;AACvC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAI,IAAI,KAAK,EAAE,KAAK,YAAY;AACtC,YAAK,MAAK,KAAK,MAAM,KAAK,IAAI;AAC9B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,KAAK,YAAY;AACzC,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,KAAK,aAAa;AAC1C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,MAAM,aAAa;AAC3C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,KAAK,WAAW;AACxC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,MAAM,aAAa;AAC3C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,KAAK,aAAa;AAC1C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,MAAM,UAAU;AACxC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,KAAK,aAAa;AAC1C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,KAAK,aAAa;AAC1C,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,MAAM,WAAW;AACzC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,KAAK,aAAa;AAC1C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,MAAM,aAAa;AAC3C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,KAAK,YAAY;AACzC,YAAK,MAAK,IAAI,MAAM,MAAM,IAAI;AAC9B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,MAAM,aAAa;AAC3C,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,KAAK,YAAY;AACzC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,aAAM,KAAK,KAAI,CAAC,MAAM,EAAE,KAAK,YAAY;AACzC,YAAK,MAAK,KAAK,MAAM,MAAM,IAAI;AAC/B,UAAE,KAAK,IAAI,EAAE,KAAK;AAClB,UAAE,KAAK,IAAI,EAAE,KAAK;AAClB,UAAE,KAAK,IAAI,EAAE,KAAK;AAClB,UAAE,KAAK,IAAI,EAAE,KAAK;AAAA;AAEpB,sBAAgB,GAAG;AACjB,YAAI,UAAU,IAAI;AAClB,aAAK,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC1B,kBAAQ,KAAK,KAAK,EAAE,WAAW,KAAM,GAAE,WAAW,IAAI,MAAM,KAAM,GAAE,WAAW,IAAI,MAAM,MAAO,GAAE,WAAW,IAAI,MAAM;AAAA;AAEzH,eAAO;AAAA;AAET,4BAAsB,GAAG;AACvB,YAAI,UAAU,IAAI;AAClB,aAAK,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC1B,kBAAQ,KAAK,KAAK,EAAE,KAAM,GAAE,IAAI,MAAM,KAAM,GAAE,IAAI,MAAM,MAAO,GAAE,IAAI,MAAM;AAAA;AAE7E,eAAO;AAAA;AAET,oBAAc,GAAG;AACf,YAAI,IAAI,EAAE,QAAQ,QAAQ,CAAE,YAAY,YAAY,aAAa,YAAa,GAAG,QAAQ,MAAM,KAAK,IAAI;AACxG,aAAK,IAAI,IAAI,KAAK,GAAG,KAAK,IAAI;AAC5B,mBAAS,OAAO,OAAO,EAAE,UAAU,IAAI,IAAI;AAAA;AAE7C,YAAI,EAAE,UAAU,IAAI;AACpB,iBAAS,EAAE;AACX,eAAO,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AACtD,aAAK,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;AAC9B,eAAK,KAAK,MAAM,EAAE,WAAW,MAAO,KAAI,KAAK;AAAA;AAE/C,aAAK,KAAK,MAAM,OAAQ,KAAI,KAAK;AACjC,YAAI,IAAI,IAAI;AACV,mBAAS,OAAO;AAChB,eAAK,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC1B,iBAAK,KAAK;AAAA;AAAA;AAGd,cAAM,IAAI;AACV,cAAM,IAAI,SAAS,IAAI,MAAM;AAC7B,aAAK,SAAS,IAAI,IAAI;AACtB,aAAK,SAAS,IAAI,IAAI,OAAO;AAC7B,aAAK,MAAM;AACX,aAAK,MAAM;AACX,iBAAS,OAAO;AAChB,eAAO;AAAA;AAET,0BAAoB,GAAG;AACrB,YAAI,IAAI,EAAE,QAAQ,QAAQ,CAAE,YAAY,YAAY,aAAa,YAAa,GAAG,QAAQ,MAAM,KAAK,IAAI;AACxG,aAAK,IAAI,IAAI,KAAK,GAAG,KAAK,IAAI;AAC5B,mBAAS,OAAO,aAAa,EAAE,SAAS,IAAI,IAAI;AAAA;AAElD,YAAI,IAAI,KAAK,IAAI,EAAE,SAAS,IAAI,MAAM,IAAI,WAAW;AACrD,iBAAS,EAAE;AACX,eAAO,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AACtD,aAAK,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;AAC9B,eAAK,KAAK,MAAM,EAAE,MAAO,KAAI,KAAK;AAAA;AAEpC,aAAK,KAAK,MAAM,OAAQ,KAAI,KAAK;AACjC,YAAI,IAAI,IAAI;AACV,mBAAS,OAAO;AAChB,eAAK,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC1B,iBAAK,KAAK;AAAA;AAAA;AAGd,cAAM,IAAI;AACV,cAAM,IAAI,SAAS,IAAI,MAAM;AAC7B,aAAK,SAAS,IAAI,IAAI;AACtB,aAAK,SAAS,IAAI,IAAI,OAAO;AAC7B,aAAK,MAAM;AACX,aAAK,MAAM;AACX,iBAAS,OAAO;AAChB,eAAO;AAAA;AAET,oBAAc,GAAG;AACf,YAAI,IAAI,IAAI;AACZ,aAAK,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AACzB,eAAK,QAAQ,KAAK,IAAI,IAAI,IAAI,MAAM,QAAQ,KAAK,IAAI,IAAI;AAAA;AAE3D,eAAO;AAAA;AAET,mBAAa,GAAG;AACd,YAAI;AACJ,aAAK,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,GAAG;AAChC,YAAE,KAAK,KAAK,EAAE;AAAA;AAEhB,eAAO,EAAE,KAAK;AAAA;AAEhB,UAAI,IAAI,KAAK,cAAc;AAAoC;AAC/D,UAAI,OAAO,gBAAgB,eAAe,CAAC,YAAY,UAAU,OAAO;AACtE,QAAC,YAAW;AACV,0BAAe,KAAK,QAAQ;AAC1B,kBAAM,MAAM,KAAK;AACjB,gBAAI,MAAM,GAAG;AACX,qBAAO,KAAK,IAAI,MAAM,QAAQ;AAAA;AAEhC,mBAAO,KAAK,IAAI,KAAK;AAAA;AAEvB,sBAAY,UAAU,QAAQ,SAAS,OAAM,IAAI;AAC/C,gBAAI,SAAS,KAAK,YAAY,QAAQ,OAAM,OAAM,SAAS,OAAM,QAAQ,KAAK,QAAQ,aAAa;AACnG,gBAAI,OAAO,aAAa;AACtB,qBAAM,OAAM,IAAI;AAAA;AAElB,gBAAI,QAAQ,MAAK;AACf,qBAAO,IAAI,YAAY;AAAA;AAEzB,kBAAM,OAAM;AACZ,qBAAS,IAAI,YAAY;AACzB,0BAAc,IAAI,WAAW;AAC7B,0BAAc,IAAI,WAAW,MAAM,OAAO;AAC1C,wBAAY,IAAI;AAChB,mBAAO;AAAA;AAAA;AAAA;AAIb,sBAAgB,KAAK;AACnB,YAAI,kBAAkB,KAAK,MAAM;AAC/B,gBAAM,SAAS,mBAAmB;AAAA;AAEpC,eAAO;AAAA;AAET,mCAA6B,KAAK,kBAAkB;AAClD,YAAI,SAAS,IAAI,QAAQ,OAAO,IAAI,YAAY,SAAS,MAAM,IAAI,WAAW,OAAO;AACrF,aAAK,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;AAC9B,cAAI,KAAK,IAAI,WAAW;AAAA;AAE1B,eAAO,mBAAmB,MAAM;AAAA;AAElC,mCAA6B,MAAM;AACjC,eAAO,OAAO,aAAa,MAAM,MAAM,IAAI,WAAW;AAAA;AAExD,uCAAiC,OAAO,QAAQ,kBAAkB;AAChE,YAAI,SAAS,IAAI,WAAW,MAAM,aAAa,OAAO;AACtD,eAAO,IAAI,IAAI,WAAW;AAC1B,eAAO,IAAI,IAAI,WAAW,SAAS,MAAM;AACzC,eAAO,mBAAmB,SAAS,OAAO;AAAA;AAE5C,iCAA2B,MAAK;AAC9B,YAAI,QAAQ,IAAI,SAAS,KAAI,QAAQ;AACrC,aAAK,IAAI,GAAG,IAAI,SAAS,GAAG,KAAK,GAAG;AAClC,gBAAM,KAAK,SAAS,KAAI,OAAO,GAAG,IAAI;AAAA;AAExC,eAAO,OAAO,aAAa,MAAM,QAAQ;AAAA;AAE3C,2BAAoB;AAClB,aAAK;AAAA;AAEP,gBAAS,UAAU,SAAS,SAAS,KAAK;AACxC,aAAK,aAAa,OAAO;AACzB,eAAO;AAAA;AAET,gBAAS,UAAU,eAAe,SAAS,UAAU;AACnD,aAAK,SAAS;AACd,aAAK,WAAW,SAAS;AACzB,YAAI,SAAS,KAAK,MAAM,QAAQ;AAChC,aAAK,IAAI,IAAI,KAAK,QAAQ,KAAK,IAAI;AACjC,mBAAS,KAAK,OAAO,OAAO,KAAK,MAAM,UAAU,IAAI,IAAI;AAAA;AAE3D,aAAK,QAAQ,KAAK,MAAM,UAAU,IAAI;AACtC,eAAO;AAAA;AAET,gBAAS,UAAU,MAAM,SAAS,KAAK;AACrC,YAAI,OAAO,KAAK,OAAO,SAAS,KAAK,QAAQ,GAAG,OAAO,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAK;AAC3G,aAAK,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;AAC9B,eAAK,KAAK,MAAM,KAAK,WAAW,MAAO,KAAI,KAAK;AAAA;AAElD,aAAK,QAAQ,MAAM;AACnB,cAAM,IAAI,KAAK;AACf,YAAI,KAAK;AACP,gBAAM,kBAAkB;AAAA;AAE1B,aAAK;AACL,eAAO;AAAA;AAET,gBAAS,UAAU,QAAQ,WAAW;AACpC,aAAK,QAAQ;AACb,aAAK,UAAU;AACf,aAAK,QAAQ,CAAE,YAAY,YAAY,aAAa;AACpD,eAAO;AAAA;AAET,gBAAS,UAAU,WAAW,WAAW;AACvC,eAAO;AAAA,UACL,MAAM,KAAK;AAAA,UACX,QAAQ,KAAK;AAAA,UACb,MAAM,KAAK,MAAM;AAAA;AAAA;AAGrB,gBAAS,UAAU,WAAW,SAAS,OAAO;AAC5C,aAAK,QAAQ,MAAM;AACnB,aAAK,UAAU,MAAM;AACrB,aAAK,QAAQ,MAAM;AACnB,eAAO;AAAA;AAET,gBAAS,UAAU,UAAU,WAAW;AACtC,eAAO,KAAK;AACZ,eAAO,KAAK;AACZ,eAAO,KAAK;AAAA;AAEd,gBAAS,UAAU,UAAU,SAAS,MAAM,QAAQ;AAClD,YAAI,IAAI,QAAQ,KAAK,IAAI;AACzB,aAAK,KAAK,MAAM,OAAQ,KAAI,KAAK;AACjC,YAAI,IAAI,IAAI;AACV,mBAAS,KAAK,OAAO;AACrB,eAAK,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC1B,iBAAK,KAAK;AAAA;AAAA;AAGd,cAAM,KAAK,UAAU;AACrB,cAAM,IAAI,SAAS,IAAI,MAAM;AAC7B,aAAK,SAAS,IAAI,IAAI;AACtB,aAAK,SAAS,IAAI,IAAI,OAAO;AAC7B,aAAK,MAAM;AACX,aAAK,MAAM;AACX,iBAAS,KAAK,OAAO;AAAA;AAEvB,gBAAS,OAAO,SAAS,KAAK,KAAK;AACjC,eAAO,UAAS,WAAW,OAAO,MAAM;AAAA;AAE1C,gBAAS,aAAa,SAAS,SAAS,KAAK;AAC3C,YAAI,QAAO,KAAK,UAAU,MAAM,IAAI;AACpC,eAAO,MAAM,kBAAkB,OAAO;AAAA;AAExC,gBAAS,cAAc,WAAW;AAChC,aAAK;AAAA;AAEP,gBAAS,YAAY,UAAU,SAAS,SAAS,KAAK;AACpD,YAAI,OAAO,wBAAwB,KAAK,MAAM,QAAQ,KAAK,OAAO,SAAS,KAAK,QAAQ;AACxF,aAAK,WAAW,IAAI;AACpB,aAAK,IAAI,IAAI,KAAK,QAAQ,KAAK,IAAI;AACjC,mBAAS,KAAK,OAAO,aAAa,KAAK,SAAS,IAAI,IAAI;AAAA;AAE1D,aAAK,QAAQ,IAAI,KAAK,SAAS,IAAI,WAAW,KAAK,OAAO,MAAM,IAAI,OAAO,IAAI,WAAW;AAC1F,eAAO;AAAA;AAET,gBAAS,YAAY,UAAU,MAAM,SAAS,KAAK;AACjD,YAAI,OAAO,KAAK,OAAO,SAAS,KAAK,QAAQ,OAAO,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAK,GAAG;AAC3G,aAAK,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;AAC9B,eAAK,KAAK,MAAM,KAAK,MAAO,KAAI,KAAK;AAAA;AAEvC,aAAK,QAAQ,MAAM;AACnB,cAAM,IAAI,KAAK;AACf,YAAI,KAAK;AACP,gBAAM,kBAAkB;AAAA;AAE1B,aAAK;AACL,eAAO;AAAA;AAET,gBAAS,YAAY,UAAU,QAAQ,WAAW;AAChD,aAAK,QAAQ,IAAI,WAAW;AAC5B,aAAK,UAAU;AACf,aAAK,QAAQ,CAAE,YAAY,YAAY,aAAa;AACpD,eAAO;AAAA;AAET,gBAAS,YAAY,UAAU,WAAW,WAAW;AACnD,YAAI,QAAQ,UAAS,UAAU,SAAS,KAAK;AAC7C,cAAM,OAAO,oBAAoB,MAAM;AACvC,eAAO;AAAA;AAET,gBAAS,YAAY,UAAU,WAAW,SAAS,OAAO;AACxD,cAAM,OAAO,oBAAoB,MAAM,MAAM;AAC7C,eAAO,UAAS,UAAU,SAAS,KAAK,MAAM;AAAA;AAEhD,gBAAS,YAAY,UAAU,UAAU,UAAS,UAAU;AAC5D,gBAAS,YAAY,UAAU,UAAU,UAAS,UAAU;AAC5D,gBAAS,YAAY,OAAO,SAAS,KAAK,KAAK;AAC7C,YAAI,QAAO,WAAW,IAAI,WAAW,OAAO,MAAM,IAAI;AACtD,eAAO,MAAM,kBAAkB,OAAO;AAAA;AAExC,aAAO;AAAA;AAAA,KAER;AAEH,MAAI,WAAW,SAAS;AAExB,MAAM,YAAY,KAAK,UAAU,SAAS,KAAK,UAAU,YAAY,KAAK,UAAU;AAEpF,2BAAmB;AAAA,WACV,OAAO,MAAM,UAAU;AAC5B,YAAM,WAAW,IAAI,aAAa;AAClC,eAAS,OAAO;AAAA;AAAA,IAElB,YAAY,MAAM;AAChB,WAAK,OAAO;AACZ,WAAK,YAAY;AACjB,WAAK,aAAa,KAAK,KAAK,KAAK,KAAK,OAAO,KAAK;AAClD,WAAK,aAAa;AAAA;AAAA,IAEpB,OAAO,UAAU;AACf,WAAK,WAAW;AAChB,WAAK,YAAY,IAAI,SAAS;AAC9B,WAAK,aAAa,IAAI;AACtB,WAAK,WAAW,iBAAiB,QAAS,YAAS,KAAK,kBAAkB;AAC1E,WAAK,WAAW,iBAAiB,SAAU,YAAS,KAAK,mBAAmB;AAC5E,WAAK;AAAA;AAAA,IAEP,kBAAkB,QAAO;AACvB,WAAK,UAAU,OAAO,OAAM,OAAO;AACnC,UAAI,CAAC,KAAK,iBAAiB;AACzB,cAAM,eAAe,KAAK,UAAU,IAAI;AACxC,cAAM,eAAe,KAAK;AAC1B,aAAK,SAAS,MAAM;AAAA;AAAA;AAAA,IAGxB,mBAAmB,QAAO;AACxB,WAAK,SAAS,iBAAiB,KAAK,KAAK;AAAA;AAAA,IAE3C,gBAAgB;AACd,UAAI,KAAK,aAAa,KAAK,cAAc,KAAK,cAAc,KAAK,KAAK,cAAc,GAAG;AACrF,cAAM,SAAQ,KAAK,aAAa,KAAK;AACrC,cAAM,OAAM,KAAK,IAAI,SAAQ,KAAK,WAAW,KAAK,KAAK;AACvD,cAAM,QAAQ,UAAU,KAAK,KAAK,MAAM,QAAO;AAC/C,aAAK,WAAW,kBAAkB;AAClC,aAAK;AACL,eAAO;AAAA,aACF;AACL,eAAO;AAAA;AAAA;AAAA;AAKb,wBAAsB,MAAM;AAC1B,UAAM,UAAU,YAAY,SAAS,MAAM,cAAc;AACzD,QAAI,SAAS;AACX,aAAO,QAAQ,aAAa;AAAA;AAAA;AAIhC,wBAAsB,MAAM,UAAU;AACpC,QAAI,OAAO,QAAQ,UAAU;AAC3B,iBAAW;AACX,aAAO;AAAA;AAET,UAAM,WAAW,KAAK,iBAAiB;AACvC,WAAO,QAAQ;AAAA;AAGjB,uBAAqB,MAAM,UAAU;AACnC,QAAI,OAAO,QAAQ,UAAU;AAC3B,iBAAW;AACX,aAAO;AAAA;AAET,WAAO,KAAK,cAAc;AAAA;AAG5B,0BAAuB,SAAS,MAAM,YAAY,IAAI;AACpD,UAAM,EAAC,aAAsB;AAC7B,UAAM,EAAC,SAAkB,YAAwB,WAAkB;AACnE,UAAM,SAAQ,SAAS,YAAY;AACnC,WAAM,UAAU,MAAM,WAAW,MAAM,cAAc;AACrD,WAAM,SAAS,UAAU;AACzB,QAAI;AACF,cAAQ,WAAW;AACnB,cAAQ,cAAc;AAAA,cACtB;AACA,cAAQ,WAAW;AAAA;AAErB,WAAO;AAAA;AAGT,mBAAiB,OAAO;AACtB,QAAI,MAAM,QAAQ,QAAQ;AACxB,aAAO;AAAA,eACE,MAAM,MAAM;AACrB,aAAO,MAAM,KAAK;AAAA,WACb;AACL,aAAO,GAAG,MAAM,KAAK;AAAA;AAAA;AAIzB,yBAAiB;AAAA,IACf,YAAY,MAAM,UAAU,KAAK,mBAAmB,gBAAgB;AAClE,WAAK,OAAO;AACZ,WAAK,aAAa;AAAA,QAChB,UAAU,KAAK;AAAA,QACf,cAAc,KAAK,QAAQ;AAAA,QAC3B,WAAW,KAAK;AAAA,QAChB;AAAA;AAEF,WAAK,oBAAoB;AACzB,WAAK,iBAAiB;AACtB,WAAK,MAAM,IAAI;AACf,WAAK,IAAI,KAAK,QAAQ,KAAK;AAC3B,WAAK,IAAI,eAAe;AACxB,WAAK,IAAI,iBAAiB,gBAAgB;AAC1C,WAAK,IAAI,iBAAiB,UAAU;AACpC,WAAK,IAAI,iBAAiB,oBAAoB;AAC9C,YAAM,YAAY,aAAa;AAC/B,UAAI,aAAa,QAAW;AAC1B,aAAK,IAAI,iBAAiB,gBAAgB;AAAA;AAE5C,WAAK,IAAI,iBAAiB,QAAS,YAAS,KAAK,eAAe;AAChE,WAAK,IAAI,iBAAiB,SAAU,YAAS,KAAK,gBAAgB;AAAA;AAAA,QAEhE,SAAS;AACX,aAAO,KAAK,IAAI;AAAA;AAAA,QAEd,WAAW;AACb,YAAM,EAAC,cAA4B,aAAsB,KAAK;AAC9D,UAAI,gBAAgB,QAAQ;AAC1B,eAAO;AAAA,aACF;AACL,eAAO,KAAK,MAAM;AAAA;AAAA;AAAA,IAGtB,OAAO,UAAU;AACf,WAAK,WAAW;AAChB,WAAK,IAAI,KAAK,KAAK,UAAU;AAAA,QAC3B,MAAM,KAAK;AAAA,QACX,qBAAqB,KAAK;AAAA,QAC1B,iBAAiB,KAAK;AAAA;AAAA;AAAA,IAG1B,eAAe,QAAO;AACpB,UAAI,KAAK,UAAU,OAAO,KAAK,SAAS,KAAK;AAC3C,cAAM,EAAC,aAAsB;AAC7B,cAAM,EAAC,kBAAgC;AACvC,eAAO,SAAS;AAChB,aAAK,aAAa;AAClB,aAAK,mBAAmB;AACxB,aAAK,SAAS,MAAM,KAAK;AAAA,aACpB;AACL,aAAK,gBAAgB;AAAA;AAAA;AAAA,IAGzB,gBAAgB,QAAO;AACrB,WAAK,SAAS,4BAA4B,KAAK,KAAK,kBAAkB,KAAK;AAAA;AAAA,IAE7E,SAAS;AACP,YAAM,SAAS;AACf,iBAAW,OAAO,KAAK,YAAY;AACjC,eAAO,OAAO,KAAK,WAAW;AAAA;AAEhC,aAAO;AAAA;AAAA;AAIX,yBAAiB;AAAA,IACf,YAAY,MAAM;AAChB,WAAK,OAAO;AACZ,WAAK,OAAO,KAAK;AACjB,YAAM,EAAC,KAAU,YAAoB,KAAK;AAC1C,WAAK,MAAM,IAAI;AACf,WAAK,IAAI,KAAK,OAAO,KAAK;AAC1B,WAAK,IAAI,eAAe;AACxB,iBAAW,OAAO,SAAS;AACzB,aAAK,IAAI,iBAAiB,KAAK,QAAQ;AAAA;AAEzC,WAAK,IAAI,iBAAiB,QAAS,YAAS,KAAK,eAAe;AAChE,WAAK,IAAI,iBAAiB,SAAU,YAAS,KAAK,gBAAgB;AAAA;AAAA,IAEpE,OAAO,UAAU;AACf,WAAK,WAAW;AAChB,WAAK,IAAI,KAAK,KAAK,KAAK;AAAA;AAAA,IAE1B,eAAe,QAAO;AACpB,YAAM,EAAC,QAAgB,aAAsB,KAAK;AAClD,UAAI,UAAU,OAAO,SAAS,KAAK;AACjC,aAAK,SAAS,MAAM;AAAA,aACf;AACL,aAAK,gBAAgB;AAAA;AAAA;AAAA,IAGzB,gBAAgB,QAAO;AACrB,WAAK,SAAS,kBAAkB,KAAK,KAAK,kBAAkB,KAAK,IAAI;AAAA;AAAA;AAIzE,MAAI,KAAK;AAET,2BAAmB;AAAA,IACjB,YAAY,MAAM,KAAK,aAAa,gBAAgB,UAAU;AAC5D,WAAK,KAAK,EAAE;AACZ,WAAK,OAAO;AACZ,WAAK,MAAM;AACX,WAAK,cAAc;AACnB,WAAK,iBAAiB;AACtB,WAAK,WAAW;AAAA;AAAA,IAElB,OAAO,UAAU;AACf,mBAAa,OAAO,KAAK,MAAO,CAAC,QAAO,aAAa;AACnD,YAAI,QAAO;AACT,mBAAS;AACT;AAAA;AAEF,cAAM,OAAO,IAAI,WAAW,KAAK,MAAM,UAAU,KAAK,KAAK,KAAK,aAAa,KAAK;AAClF,eAAO,KAAK,UAAU,qCAAqC,KAAK;AAChE,aAAK,OAAQ,YAAS;AACpB,cAAI,QAAO;AACT,qBAAS;AAAA,iBACJ;AACL,kBAAM,SAAS,IAAI,WAAW;AAC9B,mBAAO,KAAK,UAAU,oCAAoC,OAAO;AACjE,mBAAO,OAAQ,YAAS;AACtB,kBAAI,QAAO;AACT,yBAAS;AAAA,qBACJ;AACL,yBAAS,MAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASlC,kBAAgB,QAAQ,eAAe,UAAU;AAC/C,QAAI,UAAU,OAAO,OAAO,eAAe,YAAY;AACrD,aAAO,OAAO,YAAY,GAAG;AAAA;AAAA;AAIjC,qCAA6B;AAAA,IAC3B,YAAY,OAAO,MAAM;AACvB,WAAK,QAAQ;AACb,WAAK,OAAO;AACZ,WAAK,eAAe,IAAI,aAAa,KAAK,MAAM,KAAK,KAAK,KAAK,mBAAmB,KAAK,gBAAgB;AACvG,WAAK,SAAS;AAAA;AAAA,IAEhB,MAAM,UAAU;AACd,YAAM,cAAc,SAAS,cAAc;AAC3C,kBAAY,OAAO;AACnB,kBAAY,OAAO,KAAK,MAAM;AAC9B,WAAK,MAAM,sBAAsB,eAAe;AAChD,WAAK,SAAS;AACd,WAAK,aAAa,OAAQ,CAAC,QAAO,eAAe;AAC/C,YAAI,QAAO;AACT,sBAAY,WAAW,YAAY;AACnC,eAAK,cAAc;AAAA,eACd;AACL,sBAAY,QAAQ,WAAW;AAAA;AAEjC,aAAK,SAAS;AACd,iBAAS;AAAA;AAAA;AAAA,IAGb,yBAAyB,QAAO;AAC9B,YAAM,WAAW,OAAM,SAAS,OAAM,QAAQ;AAC9C,UAAI,UAAU;AACZ,aAAK,SAAS,YAAY;AAAA,UACxB;AAAA;AAAA;AAAA;AAAA,QAIF,MAAM;AACR,aAAO,KAAK,MAAM,aAAa;AAAA;AAAA,QAE7B,oBAAoB;AACtB,aAAO,KAAK,MAAM,aAAa;AAAA;AAAA,QAE7B,iBAAiB;AACnB,aAAO,KAAK,MAAM,aAAa;AAAA;AAAA,IAEjC,SAAS,MAAM,SAAS,IAAI;AAC1B,aAAO,OAAO,KAAK;AACnB,aAAO,KAAK,KAAK,aAAa;AAC9B,aAAO,eAAc,KAAK,OAAO,iBAAiB,QAAQ;AAAA,QACxD;AAAA;AAAA;AAAA,IAGJ,cAAc,QAAO;AACnB,YAAM,SAAQ,KAAK,SAAS,SAAS;AAAA,QACnC,OAAO;AAAA;AAET,UAAI,CAAC,OAAM,kBAAkB;AAC3B,cAAM;AAAA;AAAA;AAAA,IAGV,kCAAkC,KAAK;AACrC,WAAK,SAAS,uBAAuB;AAAA,QACnC;AAAA;AAAA;AAAA,IAGJ,iCAAiC,KAAK;AACpC,WAAK,SAAS,0BAA0B;AAAA,QACtC;AAAA;AAEF,UAAI,OAAO,iBAAiB,YAAa,YAAS,KAAK,yBAAyB;AAAA;AAAA;AAIpF,MAAM,gBAAgB;AAEtB,sCAA8B;AAAA,IAC5B,YAAY,MAAM;AAChB,WAAK,OAAO;AACZ,WAAK,SAAS,aAAa,MAAM,eAAe,OAAQ,WAAS,MAAM,MAAM;AAAA;AAAA,IAE/E,MAAM,UAAU;AACd,YAAM,cAAc,KAAK;AACzB,YAAM,sBAAsB,MAAM;AAChC,cAAM,aAAa,YAAY;AAC/B,YAAI,YAAY;AACd,qBAAW,MAAO,YAAS;AACzB,gBAAI,QAAO;AACT,uBAAS;AACT,mBAAK,SAAS;AAAA,mBACT;AACL;AAAA;AAAA;AAAA,eAGC;AACL;AACA,eAAK,SAAS;AAAA;AAAA;AAGlB,WAAK,SAAS;AACd;AAAA;AAAA,IAEF,gCAAgC;AAC9B,YAAM,cAAc;AACpB,WAAK,OAAO,QAAS,WAAS;AAC5B,gBAAQ,MAAM,OAAO,QAAS,UAAQ;AACpC,gBAAM,aAAa,IAAI,uBAAuB,OAAO;AACrD,sBAAY,KAAK;AAAA;AAAA;AAGrB,aAAO;AAAA;AAAA,IAET,SAAS,MAAM,SAAS,IAAI;AAC1B,aAAO,eAAc,KAAK,MAAM,kBAAkB,QAAQ;AAAA,QACxD;AAAA;AAAA;AAAA;AAKN,MAAM,sBAAsB;AAE5B,MAAM,sBAAsB,oBAAI;AAEhC,MAAI,UAAU;AAEd,oBAAiB;AACf,QAAI,CAAC,SAAS;AACZ,gBAAU;AACV,eAAS,iBAAiB,SAAS,UAAU;AAC7C,eAAS,iBAAiB,UAAU,eAAe;AACnD,eAAS,iBAAiB,eAAe;AAAA;AAAA;AAI7C,oBAAkB,QAAO;AACvB,UAAM,EAAC,WAAkB;AACzB,QAAK,QAAO,WAAW,WAAW,OAAO,WAAW,aAAa,OAAO,QAAQ,YAAY,OAAO,MAAM;AACvG,0BAAoB,IAAI,OAAO,MAAM;AAAA;AAAA;AAIzC,yBAAuB,QAAO;AAC5B,8BAA0B;AAAA;AAG5B,kCAAgC,QAAO;AACrC,QAAI,OAAM,OAAO,WAAW,QAAQ;AAClC,gCAA0B;AAAA;AAAA;AAI9B,qCAAmC,QAAO;AACxC,UAAM,OAAO,OAAM;AACnB,QAAI,KAAK,aAAa,sBAAsB;AAC1C,aAAM;AACN;AAAA;AAEF,UAAM,aAAa,IAAI,wBAAwB;AAC/C,UAAM,EAAC,WAAkB;AACzB,QAAI,OAAO,QAAQ;AACjB,aAAM;AACN,WAAK,aAAa,qBAAqB;AACvC,aAAO,QAAQ;AACf,iBAAW,MAAO,YAAS;AACzB,aAAK,gBAAgB;AACrB,YAAI,QAAO;AACT,iBAAO,QAAQ;AAAA,eACV;AACL,qBAAW;AAAA;AAAA;AAAA;AAAA;AAMnB,sBAAoB,MAAM;AACxB,QAAI,SAAS,oBAAoB,IAAI,SAAS,YAAY,MAAM;AAChE,QAAI,QAAQ;AACV,YAAM,EAAC,aAAsB;AAC7B,aAAO,WAAW;AAClB,aAAO;AACP,aAAO;AACP,aAAO,WAAW;AAAA,WACb;AACL,eAAS,SAAS,cAAc;AAChC,aAAO,OAAO;AACd,aAAO,MAAM,UAAU;AACvB,WAAK,YAAY;AACjB,aAAO;AACP,WAAK,YAAY;AAAA;AAEnB,wBAAoB,OAAO;AAAA;AAG7B,mBAAiB,OAAO;AACtB,UAAM,WAAW;AAAA;AAGnB,kBAAgB,OAAO;AACrB,UAAM,WAAW;AAAA;AAGnB,uBAAqB;AACnB,QAAI,OAAO,eAAe;AACxB;AAAA;AAAA;AAIJ,aAAW,WAAW;;;ACl1BtB,uDAA6B,WAAW;AAAA,IAOtC,UAAU;AACR,WAAK,YAAY,iBAAiB,UAAU,KAAK,iBAAiB,KAAK;AACvE,QAAE,oBAAoB,GAAG,SAAS,KAAK,WAAW,KAAK;AAAA;AAAA,IAGzD,iBAAiB,QAAO;AACtB,YAAM,QAAQ,MAAM,KAAK,KAAK,YAAY;AAC1C,YAAM,YAAY,EAAE,6BAA6B;AACjD,YAAM,kBAAkB,MAAM,KAAK,UAAQ,KAAK,OAAO,KAAK;AAE5D,UAAI,YAAY,MAAM,SAAS,KAAK,iBAAiB,iBAAiB;AACpE,cAAM,eAAK,KAAK,mBAAoB,QAAO,0DAAkB,KAAK;AAClE,aAAK,YAAY,QAAQ;AACzB;AAAA;AAGF,YAAM,QAAQ,KAAK,YAAY,KAAK;AACpC,WAAK,YAAY,QAAQ;AAAA;AAAA,IAG3B,YAAY,MAAM;AAChB,WAAK;AAEL,YAAM,SAAS,IAAI,aACjB,MACA,KAAK,YAAY,aAAa,2BAC9B,KAAK,YAAY,aAAa,6BAC9B,KAAK,YAAY,aAAa;AAGhC,aAAO,OAAO,CAAC,QAAO,SAAS;AAC7B,aAAK;AAEL,YAAI,QAAO;AACT,kBAAQ,IAAI;AACZ;AAAA;AAGF,cAAM,cAAc,KAAK,mBAAmB;AAC5C,iBAAS,cAAc,QAAQ,YAAY;AAE3C,aAAK,eAAe;AAAA;AAAA;AAAA,IAIxB,mBAAmB,MAAM;AACvB,YAAM,cAAc,SAAS,cAAc;AAC3C,kBAAY,OAAO;AACnB,kBAAY,QAAQ,KAAK;AACzB,kBAAY,KAAK,KAAK;AACtB,kBAAY,UAAU,IAAI;AAC1B,kBAAY,OAAO,KAAK,YAAY;AACpC,aAAO;AAAA;AAAA,IAGT,eAAe,MAAM;AACnB,UAAI,CAAC,EAAE,2BAA2B,QAAQ;AACxC,UAAE,qBAAqB,OAAO;AAAA;AAGhC,YAAM,UAAU;AAAA;AAAA,oBAEA,KAAK;AAAA,2FACkE,KAAK;AAAA;AAE5F,QAAE,2BAA2B,OAAO;AAAA;AAAA,IAGtC,eAAe;AACb,UAAI,CAAC,EAAE,2BAA2B,QAAQ;AACxC,UAAE,qBAAqB,OAAO;AAAA;AAGhC,YAAM,iBAAiB;AAAA;AAAA;AAAA;AAIvB,QAAE,2BAA2B,OAAO;AAAA;AAAA,IAGtC,eAAe;AACb,QAAE,eAAe;AAAA;AAAA,IAGnB,WAAW,GAAG;AACZ,YAAM,MAAK,EAAE,EAAE,eAAe,KAAK;AACnC,QAAE,IAAI,OAAM;AACZ,QAAE,cAAc,QAAQ,iBAAiB;AAAA;AAAA;AA7FpC,gBADT,kCACS,WAAU,CAAC;AACX,gBAFT,kCAES,UAAS;AAAA,IACd,aAAa;AAAA,IACb,UAAU;AAAA;;;ACPd,MAAI,KAAI;AACR,MAAI,QAAQ;AACZ,MAAI,sBAAsB,iDAA+D;AAGzF,MAAI,sBAAsB,MAAM,WAAY;AAAE,WAAO,CAAC,OAAO,oBAAoB;AAAA;AAIjF,KAAE,EAAE,QAAQ,UAAU,MAAM,MAAM,QAAQ,uBAAuB;AAAA,IAC/D;AAAA;;;ACTF,MAAI,KAAI;AACR,MAAI,cAAc;AAClB,MAAI,YAAY;AAChB,MAAI,WAAW;AACf,MAAI,oBAAoB;AACxB,MAAI,WAAW;AACf,MAAI,SAAQ;AACZ,MAAI,eAAe;AACnB,MAAI,sBAAsB;AAC1B,MAAI,KAAK;AACT,MAAI,aAAa;AACjB,MAAI,KAAK;AACT,MAAI,SAAS;AAEb,MAAI,OAAO;AACX,MAAI,UAAU,YAAY,KAAK;AAC/B,MAAI,OAAO,YAAY,KAAK;AAG5B,MAAI,qBAAqB,OAAM,WAAY;AACzC,SAAK,KAAK;AAAA;AAGZ,MAAI,gBAAgB,OAAM,WAAY;AACpC,SAAK,KAAK;AAAA;AAGZ,MAAI,gBAAgB,oBAAoB;AAExC,MAAI,cAAc,CAAC,OAAM,WAAY;AAEnC,QAAI;AAAI,aAAO,KAAK;AACpB,QAAI,MAAM,KAAK;AAAG;AAClB,QAAI;AAAY,aAAO;AACvB,QAAI;AAAQ,aAAO,SAAS;AAE5B,QAAI,SAAS;AACb,QAAI,MAAM,KAAK,OAAO;AAGtB,SAAK,OAAO,IAAI,OAAO,IAAI,QAAQ;AACjC,YAAM,OAAO,aAAa;AAE1B,cAAQ;AAAA,aACD;AAAA,aAAS;AAAA,aAAS;AAAA,aAAS;AAAI,kBAAQ;AAAG;AAAA,aAC1C;AAAA,aAAS;AAAI,kBAAQ;AAAG;AAAA;AACpB,kBAAQ;AAAA;AAGnB,WAAK,SAAQ,GAAG,SAAQ,IAAI,UAAS;AACnC,aAAK,KAAK,EAAE,GAAG,MAAM,QAAO,GAAG;AAAA;AAAA;AAInC,SAAK,KAAK,SAAU,GAAG,GAAG;AAAE,aAAO,EAAE,IAAI,EAAE;AAAA;AAE3C,SAAK,SAAQ,GAAG,SAAQ,KAAK,QAAQ,UAAS;AAC5C,YAAM,KAAK,QAAO,EAAE,OAAO;AAC3B,UAAI,OAAO,OAAO,OAAO,SAAS,OAAO;AAAK,kBAAU;AAAA;AAG1D,WAAO,WAAW;AAAA;AAGpB,MAAI,SAAS,sBAAsB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;AAExE,MAAI,iBAAiB,SAAU,WAAW;AACxC,WAAO,SAAU,GAAG,GAAG;AACrB,UAAI,MAAM;AAAW,eAAO;AAC5B,UAAI,MAAM;AAAW,eAAO;AAC5B,UAAI,cAAc;AAAW,eAAO,CAAC,UAAU,GAAG,MAAM;AACxD,aAAO,SAAS,KAAK,SAAS,KAAK,IAAI;AAAA;AAAA;AAM3C,KAAE,EAAE,QAAQ,SAAS,OAAO,MAAM,QAAQ,UAAU;AAAA,IAClD,MAAM,cAAc,WAAW;AAC7B,UAAI,cAAc;AAAW,kBAAU;AAEvC,UAAI,QAAQ,SAAS;AAErB,UAAI;AAAa,eAAO,cAAc,SAAY,QAAQ,SAAS,QAAQ,OAAO;AAElF,UAAI,QAAQ;AACZ,UAAI,cAAc,kBAAkB;AACpC,UAAI,aAAa;AAEjB,WAAK,SAAQ,GAAG,SAAQ,aAAa,UAAS;AAC5C,YAAI,UAAS;AAAO,eAAK,OAAO,MAAM;AAAA;AAGxC,mBAAa,OAAO,eAAe;AAEnC,oBAAc,MAAM;AACpB,eAAQ;AAER,aAAO,SAAQ;AAAa,cAAM,UAAS,MAAM;AACjD,aAAO,SAAQ;AAAa,eAAO,MAAM;AAEzC,aAAO;AAAA;AAAA;;;ACrGX,MAAI,KAAI;AACR,MAAI,UAAS;AACb,MAAI,kBAAkB;AACtB,MAAI,sBAAsB;AAC1B,MAAI,qBAAoB;AACxB,MAAI,YAAW;AACf,MAAI,qBAAqB;AACzB,MAAI,iBAAiB;AACrB,MAAI,+BAA+B;AAEnC,MAAI,sBAAsB,6BAA6B;AAEvD,MAAI,aAAY,QAAO;AACvB,MAAI,MAAM,KAAK;AACf,MAAI,MAAM,KAAK;AACf,MAAI,mBAAmB;AACvB,MAAI,kCAAkC;AAKtC,KAAE,EAAE,QAAQ,SAAS,OAAO,MAAM,QAAQ,CAAC,uBAAuB;AAAA,IAChE,QAAQ,gBAAgB,QAAO,aAA8B;AAC3D,UAAI,IAAI,UAAS;AACjB,UAAI,MAAM,mBAAkB;AAC5B,UAAI,cAAc,gBAAgB,QAAO;AACzC,UAAI,kBAAkB,UAAU;AAChC,UAAI,aAAa,mBAAmB,GAAG,GAAG,OAAM;AAChD,UAAI,oBAAoB,GAAG;AACzB,sBAAc,oBAAoB;AAAA,iBACzB,oBAAoB,GAAG;AAChC,sBAAc;AACd,4BAAoB,MAAM;AAAA,aACrB;AACL,sBAAc,kBAAkB;AAChC,4BAAoB,IAAI,IAAI,oBAAoB,cAAc,IAAI,MAAM;AAAA;AAE1E,UAAI,MAAM,cAAc,oBAAoB,kBAAkB;AAC5D,cAAM,WAAU;AAAA;AAElB,UAAI,mBAAmB,GAAG;AAC1B,WAAK,IAAI,GAAG,IAAI,mBAAmB,KAAK;AACtC,gBAAO,cAAc;AACrB,YAAI,SAAQ;AAAG,yBAAe,GAAG,GAAG,EAAE;AAAA;AAExC,QAAE,SAAS;AACX,UAAI,cAAc,mBAAmB;AACnC,aAAK,IAAI,aAAa,IAAI,MAAM,mBAAmB,KAAK;AACtD,kBAAO,IAAI;AACX,eAAK,IAAI;AACT,cAAI,SAAQ;AAAG,cAAE,MAAM,EAAE;AAAA;AACpB,mBAAO,EAAE;AAAA;AAEhB,aAAK,IAAI,KAAK,IAAI,MAAM,oBAAoB,aAAa;AAAK,iBAAO,EAAE,IAAI;AAAA,iBAClE,cAAc,mBAAmB;AAC1C,aAAK,IAAI,MAAM,mBAAmB,IAAI,aAAa,KAAK;AACtD,kBAAO,IAAI,oBAAoB;AAC/B,eAAK,IAAI,cAAc;AACvB,cAAI,SAAQ;AAAG,cAAE,MAAM,EAAE;AAAA;AACpB,mBAAO,EAAE;AAAA;AAAA;AAGlB,WAAK,IAAI,GAAG,IAAI,aAAa,KAAK;AAChC,UAAE,IAAI,eAAe,UAAU,IAAI;AAAA;AAErC,QAAE,SAAS,MAAM,oBAAoB;AACrC,aAAO;AAAA;AAAA;;;ACnEX,MAAI,KAAI;AACR,MAAI,mBAAmB;AAIvB,KAAE,EAAE,QAAQ,UAAU,MAAM,QAAQ;AAAA,IAClC,WAAW;AAAA;;;ACLb,MAAI,cAAc;AAClB,MAAI,UAAS;AACb,MAAI,eAAc;AAClB,MAAI,WAAW;AACf,MAAI,WAAW;AACf,MAAI,SAAS;AACb,MAAI,oBAAoB;AACxB,MAAI,gBAAgB;AACpB,MAAI,WAAW;AACf,MAAI,cAAc;AAClB,MAAI,SAAQ;AACZ,MAAI,uBAAsB,wCAAsD;AAChF,MAAI,2BAA2B,6CAA2D;AAC1F,MAAI,iBAAiB,iCAA+C;AACpE,MAAI,kBAAkB;AACtB,MAAI,OAAO,sBAAoC;AAE/C,MAAI,SAAS;AACb,MAAI,eAAe,QAAO;AAC1B,MAAI,kBAAkB,aAAa;AACnC,MAAI,aAAY,QAAO;AACvB,MAAI,aAAa,aAAY,GAAG;AAChC,MAAI,aAAa,aAAY,GAAG;AAIhC,MAAI,YAAY,SAAU,OAAO;AAC/B,QAAI,YAAY,YAAY,OAAO;AACnC,WAAO,OAAO,aAAa,WAAW,YAAY,SAAS;AAAA;AAK7D,MAAI,WAAW,SAAU,UAAU;AACjC,QAAI,KAAK,YAAY,UAAU;AAC/B,QAAI,OAAO,OAAO,OAAO,SAAS,QAAQ,QAAQ,QAAO;AACzD,QAAI,SAAS;AAAK,YAAM,WAAU;AAClC,QAAI,OAAO,MAAM,YAAY,GAAG,SAAS,GAAG;AAC1C,WAAK,KAAK;AACV,cAAQ,WAAW,IAAI;AACvB,UAAI,UAAU,MAAM,UAAU,IAAI;AAChC,gBAAQ,WAAW,IAAI;AACvB,YAAI,UAAU,MAAM,UAAU;AAAK,iBAAO;AAAA,iBACjC,UAAU,IAAI;AACvB,gBAAQ,WAAW,IAAI;AAAA,eAChB;AAAA,eAAS;AAAI,oBAAQ;AAAG,sBAAU;AAAI;AAAA,eACtC;AAAA,eAAS;AAAK,oBAAQ;AAAG,sBAAU;AAAI;AAAA;AACnC,mBAAO,CAAC;AAAA;AAEnB,iBAAS,WAAW,IAAI;AACxB,iBAAS,OAAO;AAChB,aAAK,SAAQ,GAAG,SAAQ,QAAQ,UAAS;AACvC,iBAAO,WAAW,QAAQ;AAG1B,cAAI,OAAO,MAAM,OAAO;AAAS,mBAAO;AAAA;AACxC,eAAO,SAAS,QAAQ;AAAA;AAAA;AAE5B,WAAO,CAAC;AAAA;AAKZ,MAAI,SAAS,QAAQ,CAAC,aAAa,WAAW,CAAC,aAAa,UAAU,aAAa,UAAU;AACvF,oBAAgB,iBAAgB,OAAO;AACzC,UAAI,IAAI,UAAU,SAAS,IAAI,IAAI,aAAa,UAAU;AAC1D,UAAI,QAAQ;AAEZ,aAAO,cAAc,iBAAiB,UAAU,OAAM,WAAY;AAAE,wBAAgB;AAAA,WAChF,kBAAkB,OAAO,IAAI,OAAO,iBAAiB;AAAA;AAE3D,SAAS,QAAO,cAAc,qBAAoB,gBAEhD,oLAKA,MAAM,MAAM,IAAI,GAAQ,MAAK,SAAS,GAAG,KAAK;AAC9C,UAAI,OAAO,cAAc,MAAM,MAAK,OAAO,CAAC,OAAO,eAAe,MAAM;AACtE,uBAAe,eAAe,KAAK,yBAAyB,cAAc;AAAA;AAAA;AAG9E,kBAAc,YAAY;AAC1B,oBAAgB,cAAc;AAC9B,aAAS,SAAQ,QAAQ;AAAA;AArBrB;AAOK;AAOK;AAAO;;;AC9EvB,MAAI,KAAI;AACR,MAAI,UAAS;AACb,MAAI,UAAU;AACd,MAAI,gBAAgB;AACpB,MAAI,WAAW;AACf,MAAI,mBAAkB;AACtB,MAAI,qBAAoB;AACxB,MAAI,kBAAkB;AACtB,MAAI,kBAAiB;AACrB,MAAI,kBAAkB;AACtB,MAAI,gCAA+B;AACnC,MAAI,WAAW;AAEf,MAAI,uBAAsB,8BAA6B;AAEvD,MAAI,UAAU,gBAAgB;AAC9B,MAAI,SAAQ,QAAO;AACnB,MAAI,OAAM,KAAK;AAKf,KAAE,EAAE,QAAQ,SAAS,OAAO,MAAM,QAAQ,CAAC,wBAAuB;AAAA,IAChE,OAAO,eAAe,QAAO,MAAK;AAChC,UAAI,IAAI,gBAAgB;AACxB,UAAI,SAAS,mBAAkB;AAC/B,UAAI,IAAI,iBAAgB,QAAO;AAC/B,UAAI,MAAM,iBAAgB,SAAQ,SAAY,SAAS,MAAK;AAE5D,UAAI,aAAa,QAAQ;AACzB,UAAI,QAAQ,IAAI;AACd,sBAAc,EAAE;AAEhB,YAAI,cAAc,gBAAiB,iBAAgB,UAAS,QAAQ,YAAY,aAAa;AAC3F,wBAAc;AAAA,mBACL,SAAS,cAAc;AAChC,wBAAc,YAAY;AAC1B,cAAI,gBAAgB;AAAM,0BAAc;AAAA;AAE1C,YAAI,gBAAgB,UAAS,gBAAgB,QAAW;AACtD,iBAAO,SAAS,GAAG,GAAG;AAAA;AAAA;AAG1B,eAAS,IAAK,iBAAgB,SAAY,SAAQ,aAAa,KAAI,MAAM,GAAG;AAC5E,WAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AAAK,YAAI,KAAK;AAAG,0BAAe,QAAQ,GAAG,EAAE;AACvE,aAAO,SAAS;AAChB,aAAO;AAAA;AAAA;;;AC9CX,MAAI,KAAI;AACR,MAAI,UAAS;AACb,MAAI,SAAQ;AACZ,MAAI,WAAU;AACd,MAAI,YAAW;AACf,MAAI,YAAW;AACf,MAAI,qBAAoB;AACxB,MAAI,kBAAiB;AACrB,MAAI,sBAAqB;AACzB,MAAI,gCAA+B;AACnC,MAAI,mBAAkB;AACtB,MAAI,aAAa;AAEjB,MAAI,uBAAuB,iBAAgB;AAC3C,MAAI,oBAAmB;AACvB,MAAI,iCAAiC;AACrC,MAAI,aAAY,QAAO;AAKvB,MAAI,+BAA+B,cAAc,MAAM,CAAC,OAAM,WAAY;AACxE,QAAI,QAAQ;AACZ,UAAM,wBAAwB;AAC9B,WAAO,MAAM,SAAS,OAAO;AAAA;AAG/B,MAAI,kBAAkB,8BAA6B;AAEnD,MAAI,qBAAqB,SAAU,GAAG;AACpC,QAAI,CAAC,UAAS;AAAI,aAAO;AACzB,QAAI,aAAa,EAAE;AACnB,WAAO,eAAe,SAAY,CAAC,CAAC,aAAa,SAAQ;AAAA;AAG3D,MAAI,UAAS,CAAC,gCAAgC,CAAC;AAK/C,KAAE,EAAE,QAAQ,SAAS,OAAO,MAAM,QAAQ,WAAU;AAAA,IAElD,QAAQ,gBAAgB,KAAK;AAC3B,UAAI,IAAI,UAAS;AACjB,UAAI,IAAI,oBAAmB,GAAG;AAC9B,UAAI,IAAI;AACR,UAAI,GAAG,GAAG,QAAQ,KAAK;AACvB,WAAK,IAAI,IAAI,SAAS,UAAU,QAAQ,IAAI,QAAQ,KAAK;AACvD,YAAI,MAAM,KAAK,IAAI,UAAU;AAC7B,YAAI,mBAAmB,IAAI;AACzB,gBAAM,mBAAkB;AACxB,cAAI,IAAI,MAAM;AAAkB,kBAAM,WAAU;AAChD,eAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AAAK,gBAAI,KAAK;AAAG,8BAAe,GAAG,GAAG,EAAE;AAAA,eAC7D;AACL,cAAI,KAAK;AAAkB,kBAAM,WAAU;AAC3C,0BAAe,GAAG,KAAK;AAAA;AAAA;AAG3B,QAAE,SAAS;AACX,aAAO;AAAA;AAAA;;;AC5DX,MAAI,KAAI;AACR,MAAI,OAAO;AACX,MAAI,mBAAmB;AAIvB,KAAE,EAAE,QAAQ,SAAS,OAAO,QAAQ;AAAA,IAClC;AAAA;AAIF,mBAAiB;;;ACVjB,MAAI,KAAI;AACR,MAAI,OAAO,0BAAwC;AACnD,MAAI,gCAA+B;AAEnC,MAAI,uBAAsB,8BAA6B;AAKvD,KAAE,EAAE,QAAQ,SAAS,OAAO,MAAM,QAAQ,CAAC,wBAAuB;AAAA,IAChE,KAAK,aAAa,YAA4B;AAC5C,aAAO,KAAK,MAAM,YAAY,UAAU,SAAS,IAAI,UAAU,KAAK;AAAA;AAAA;;;ACMxE,gCAAO;;;ACjBP,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,MAAI,eAAc;AAClB,MAAI,gCAAgC;AACpC,MAAI,SAAQ;AACZ,MAAI,WAAW;AACf,MAAI,aAAa;AACjB,MAAI,uBAAsB;AAC1B,MAAI,WAAW;AACf,MAAI,YAAW;AACf,MAAI,yBAAyB;AAC7B,MAAI,qBAAqB;AACzB,MAAI,YAAY;AAChB,MAAI,kBAAkB;AACtB,MAAI,aAAa;AACjB,MAAI,mBAAkB;AAEtB,MAAI,UAAU,iBAAgB;AAC9B,MAAI,OAAM,KAAK;AACf,MAAI,OAAM,KAAK;AACf,MAAI,UAAS,aAAY,GAAG;AAC5B,MAAI,QAAO,aAAY,GAAG;AAC1B,MAAI,gBAAgB,aAAY,GAAG;AACnC,MAAI,cAAc,aAAY,GAAG;AAEjC,MAAI,gBAAgB,SAAU,IAAI;AAChC,WAAO,OAAO,SAAY,KAAK,OAAO;AAAA;AAKxC,MAAI,mBAAoB,WAAY;AAElC,WAAO,IAAI,QAAQ,KAAK,UAAU;AAAA;AAIpC,MAAI,+CAAgD,WAAY;AAC9D,QAAI,IAAI,UAAU;AAChB,aAAO,IAAI,SAAS,KAAK,UAAU;AAAA;AAErC,WAAO;AAAA;AAGT,MAAI,gCAAgC,CAAC,OAAM,WAAY;AACrD,QAAI,KAAK;AACT,OAAG,OAAO,WAAY;AACpB,UAAI,SAAS;AACb,aAAO,SAAS,EAAE,GAAG;AACrB,aAAO;AAAA;AAGT,WAAO,GAAG,QAAQ,IAAI,YAAY;AAAA;AAIpC,gCAA8B,WAAW,SAAU,GAAG,eAAe,iBAAiB;AACpF,QAAI,oBAAoB,+CAA+C,MAAM;AAE7E,WAAO;AAAA,MAGL,kBAAiB,aAAa,cAAc;AAC1C,YAAI,IAAI,uBAAuB;AAC/B,YAAI,WAAW,eAAe,SAAY,SAAY,UAAU,aAAa;AAC7E,eAAO,WACH,KAAK,UAAU,aAAa,GAAG,gBAC/B,KAAK,eAAe,UAAS,IAAI,aAAa;AAAA;AAAA,MAIpD,SAAU,QAAQ,cAAc;AAC9B,YAAI,KAAK,SAAS;AAClB,YAAI,IAAI,UAAS;AAEjB,YACE,OAAO,gBAAgB,YACvB,cAAc,cAAc,uBAAuB,MACnD,cAAc,cAAc,UAAU,IACtC;AACA,cAAI,MAAM,gBAAgB,eAAe,IAAI,GAAG;AAChD,cAAI,IAAI;AAAM,mBAAO,IAAI;AAAA;AAG3B,YAAI,oBAAoB,WAAW;AACnC,YAAI,CAAC;AAAmB,yBAAe,UAAS;AAEhD,YAAI,WAAS,GAAG;AAChB,YAAI,UAAQ;AACV,cAAI,cAAc,GAAG;AACrB,aAAG,YAAY;AAAA;AAEjB,YAAI,UAAU;AACd,eAAO,MAAM;AACX,cAAI,SAAS,WAAW,IAAI;AAC5B,cAAI,WAAW;AAAM;AAErB,gBAAK,SAAS;AACd,cAAI,CAAC;AAAQ;AAEb,cAAI,WAAW,UAAS,OAAO;AAC/B,cAAI,aAAa;AAAI,eAAG,YAAY,mBAAmB,GAAG,SAAS,GAAG,YAAY;AAAA;AAGpF,YAAI,oBAAoB;AACxB,YAAI,qBAAqB;AACzB,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,mBAAS,QAAQ;AAEjB,cAAI,UAAU,UAAS,OAAO;AAC9B,cAAI,WAAW,KAAI,KAAI,qBAAoB,OAAO,QAAQ,EAAE,SAAS;AACrE,cAAI,WAAW;AAMf,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ;AAAK,kBAAK,UAAU,cAAc,OAAO;AAC5E,cAAI,gBAAgB,OAAO;AAC3B,cAAI,mBAAmB;AACrB,gBAAI,eAAe,QAAO,CAAC,UAAU,UAAU,UAAU;AACzD,gBAAI,kBAAkB;AAAW,oBAAK,cAAc;AACpD,gBAAI,cAAc,UAAS,MAAM,cAAc,QAAW;AAAA,iBACrD;AACL,0BAAc,gBAAgB,SAAS,GAAG,UAAU,UAAU,eAAe;AAAA;AAE/E,cAAI,YAAY,oBAAoB;AAClC,iCAAqB,YAAY,GAAG,oBAAoB,YAAY;AACpE,iCAAqB,WAAW,QAAQ;AAAA;AAAA;AAG5C,eAAO,oBAAoB,YAAY,GAAG;AAAA;AAAA;AAAA,KAG7C,CAAC,iCAAiC,CAAC,oBAAoB;;;ACvI1D,MAAI,MAAI;AACR,MAAI,OAAO;AACX,MAAI,8BAA8B;AAElC,MAAI,sBAAsB,CAAC,4BAA4B,SAAU,UAAU;AAEzE,UAAM,KAAK;AAAA;AAKb,MAAE,EAAE,QAAQ,SAAS,MAAM,MAAM,QAAQ,uBAAuB;AAAA,IAC9D;AAAA;;;ACXF,MAAI,SAAS,2BAAyC;AACtD,MAAI,YAAW;AACf,MAAI,sBAAsB;AAC1B,MAAI,iBAAiB;AAErB,MAAI,kBAAkB;AACtB,MAAI,mBAAmB,oBAAoB;AAC3C,MAAI,mBAAmB,oBAAoB,UAAU;AAIrD,iBAAe,QAAQ,UAAU,SAAU,UAAU;AACnD,qBAAiB,MAAM;AAAA,MACrB,MAAM;AAAA,MACN,QAAQ,UAAS;AAAA,MACjB,OAAO;AAAA;AAAA,KAIR,gBAAgB;AACjB,QAAI,QAAQ,iBAAiB;AAC7B,QAAI,SAAS,MAAM;AACnB,QAAI,SAAQ,MAAM;AAClB,QAAI;AACJ,QAAI,UAAS,OAAO;AAAQ,aAAO,EAAE,OAAO,QAAW,MAAM;AAC7D,YAAQ,OAAO,QAAQ;AACvB,UAAM,SAAS,MAAM;AACrB,WAAO,EAAE,OAAO,OAAO,MAAM;AAAA;;;AC1B/B,MAAI,MAAI;AACR,MAAI,eAAc;AAClB,MAAI,WAAW,yBAAuC;AACtD,MAAI,uBAAsB;AAE1B,MAAI,aAAa,aAAY,GAAG;AAEhC,MAAI,gBAAgB,CAAC,CAAC,cAAc,IAAI,WAAW,CAAC,IAAI,GAAG,MAAM;AACjE,MAAI,iBAAgB,qBAAoB;AAIxC,MAAE,EAAE,QAAQ,SAAS,OAAO,MAAM,QAAQ,iBAAiB,CAAC,kBAAiB;AAAA,IAC3E,SAAS,kBAAiB,eAAqC;AAC7D,UAAI,YAAY,UAAU,SAAS,IAAI,UAAU,KAAK;AACtD,aAAO,gBAEH,WAAW,MAAM,eAAe,cAAc,IAC9C,SAAS,MAAM,eAAe;AAAA;AAAA;;;ACnBtC,MAAI,MAAI;AACR,MAAI,eAAc;AAClB,MAAI,WAAU;AAEd,MAAI,aAAa,aAAY,GAAG;AAChC,MAAI,QAAO,CAAC,GAAG;AAMf,MAAE,EAAE,QAAQ,SAAS,OAAO,MAAM,QAAQ,OAAO,WAAU,OAAO,MAAK,cAAc;AAAA,IACnF,SAAS,mBAAmB;AAE1B,UAAI,SAAQ;AAAO,aAAK,SAAS,KAAK;AACtC,aAAO,WAAW;AAAA;AAAA;;;AChBtB,MAAI,wBAAwB;AAC5B,MAAI,YAAW;AACf,MAAI,YAAW;AAIf,MAAI,CAAC,uBAAuB;AAC1B,cAAS,OAAO,WAAW,YAAY,WAAU,EAAE,QAAQ;AAAA;;;ACP7D,MAAI,UAAS;AACb,MAAI,eAAe;AACnB,MAAI,wBAAwB;AAC5B,MAAI,UAAU;AACd,MAAI,8BAA8B;AAElC,MAAI,kBAAkB,SAAU,qBAAqB;AAEnD,QAAI,uBAAuB,oBAAoB,YAAY;AAAS,UAAI;AACtE,oCAA4B,qBAAqB,WAAW;AAAA,eACrD,QAAP;AACA,4BAAoB,UAAU;AAAA;AAAA;AAIlC,OAAS,mBAAmB,cAAc;AACxC,QAAI,aAAa,kBAAkB;AACjC,sBAAgB,QAAO,oBAAoB,QAAO,iBAAiB;AAAA;AAAA;AAF9D;AAMT,kBAAgB;;;ACrBhB,MAAI,MAAI;AACR,MAAI,UAAS;AACb,MAAI,SAAQ;AACZ,MAAI,cAAa;AACjB,MAAI,YAAY;AAChB,MAAI,cAAa;AACjB,MAAI,0BAA0B;AAE9B,MAAI,OAAO,WAAW,KAAK;AAC3B,MAAI,YAAW,QAAO;AAEtB,MAAI,OAAO,SAAU,WAAW;AAC9B,WAAO,SAAU,SAAS,SAA8B;AACtD,UAAI,YAAY,wBAAwB,UAAU,QAAQ,KAAK;AAC/D,UAAI,MAAK,YAAW,WAAW,UAAU,UAAS;AAClD,UAAI,OAAO,YAAY,YAAW,WAAW,KAAK;AAClD,aAAO,UAAU,YAAY,WAAY;AACvC,eAAM,KAAI,MAAM;AAAA,UACd,KAAI;AAAA;AAAA;AAMZ,MAAE,EAAE,QAAQ,MAAM,MAAM,MAAM,QAAQ,QAAQ;AAAA,IAG5C,YAAY,KAAK,QAAO;AAAA,IAGxB,aAAa,KAAK,QAAO;AAAA;;;AC9B3B,MAAI,MAAI;AACR,MAAI,UAAS;AACb,MAAI,OAAO;AAEX,MAAI,UAAS,CAAC,QAAO,gBAAgB,CAAC,QAAO;AAG7C,MAAE,EAAE,QAAQ,MAAM,MAAM,MAAM,YAAY,MAAM,QAAQ,WAAU;AAAA,IAGhE,cAAc,KAAK;AAAA,IAGnB,gBAAgB,KAAK;AAAA;;;ACZvB,MAAI,MAAI;AACR,MAAI,UAAS;AACb,MAAI,aAAa;AACjB,MAAI,SAAQ;AACZ,MAAI,QAAO;AACX,MAAI,eAAc;AAClB,MAAI,UAAU;AACd,MAAI,eAAc;AAClB,MAAI,gBAAgB;AACpB,MAAI,SAAQ;AACZ,MAAI,UAAS;AACb,MAAI,WAAU;AACd,MAAI,cAAa;AACjB,MAAI,YAAW;AACf,MAAI,iBAAgB;AACpB,MAAI,YAAW;AACf,MAAI,YAAW;AACf,MAAI,YAAW;AACf,MAAI,mBAAkB;AACtB,MAAI,gBAAgB;AACpB,MAAI,YAAY;AAChB,MAAI,2BAA2B;AAC/B,MAAI,qBAAqB;AACzB,MAAI,aAAa;AACjB,MAAI,4BAA4B;AAChC,MAAI,8BAA8B;AAClC,MAAI,8BAA8B;AAClC,MAAI,iCAAiC;AACrC,MAAI,uBAAuB;AAC3B,MAAI,yBAAyB;AAC7B,MAAI,6BAA6B;AACjC,MAAI,cAAa;AACjB,MAAI,YAAW;AACf,MAAI,SAAS;AACb,MAAI,YAAY;AAChB,MAAI,aAAa;AACjB,MAAI,MAAM;AACV,MAAI,mBAAkB;AACtB,MAAI,+BAA+B;AACnC,MAAI,wBAAwB;AAC5B,MAAI,iBAAiB;AACrB,MAAI,uBAAsB;AAC1B,MAAI,WAAW,0BAAwC;AAEvD,MAAI,SAAS,UAAU;AACvB,MAAI,SAAS;AACb,MAAI,YAAY;AAChB,MAAI,eAAe,iBAAgB;AAEnC,MAAI,oBAAmB,qBAAoB;AAC3C,MAAI,oBAAmB,qBAAoB,UAAU;AAErD,MAAI,kBAAkB,OAAO;AAC7B,MAAI,UAAU,QAAO;AACrB,MAAI,kBAAkB,WAAW,QAAQ;AACzC,MAAI,aAAY,QAAO;AACvB,MAAI,UAAU,QAAO;AACrB,MAAI,aAAa,WAAW,QAAQ;AACpC,MAAI,iCAAiC,+BAA+B;AACpE,MAAI,uBAAuB,qBAAqB;AAChD,MAAI,4BAA4B,4BAA4B;AAC5D,MAAI,6BAA6B,2BAA2B;AAC5D,MAAI,QAAO,aAAY,GAAG;AAE1B,MAAI,aAAa,OAAO;AACxB,MAAI,yBAAyB,OAAO;AACpC,MAAI,yBAAyB,OAAO;AACpC,MAAI,yBAAyB,OAAO;AACpC,MAAI,wBAAwB,OAAO;AAGnC,MAAI,aAAa,CAAC,WAAW,CAAC,QAAQ,cAAc,CAAC,QAAQ,WAAW;AAGxE,MAAI,sBAAsB,gBAAe,OAAM,WAAY;AACzD,WAAO,mBAAmB,qBAAqB,IAAI,KAAK;AAAA,MACtD,KAAK,WAAY;AAAE,eAAO,qBAAqB,MAAM,KAAK,EAAE,OAAO,KAAK;AAAA;AAAA,QACtE,KAAK;AAAA,OACN,SAAU,GAAG,GAAG,YAAY;AAC/B,QAAI,4BAA4B,+BAA+B,iBAAiB;AAChF,QAAI;AAA2B,aAAO,gBAAgB;AACtD,yBAAqB,GAAG,GAAG;AAC3B,QAAI,6BAA6B,MAAM,iBAAiB;AACtD,2BAAqB,iBAAiB,GAAG;AAAA;AAAA,MAEzC;AAEJ,MAAI,QAAO,SAAU,KAAK,aAAa;AACrC,QAAI,SAAS,WAAW,OAAO,mBAAmB;AAClD,sBAAiB,QAAQ;AAAA,MACvB,MAAM;AAAA,MACN;AAAA,MACA;AAAA;AAEF,QAAI,CAAC;AAAa,aAAO,cAAc;AACvC,WAAO;AAAA;AAGT,MAAI,kBAAkB,yBAAwB,GAAG,GAAG,YAAY;AAC9D,QAAI,MAAM;AAAiB,sBAAgB,wBAAwB,GAAG;AACtE,cAAS;AACT,QAAI,MAAM,cAAc;AACxB,cAAS;AACT,QAAI,QAAO,YAAY,MAAM;AAC3B,UAAI,CAAC,WAAW,YAAY;AAC1B,YAAI,CAAC,QAAO,GAAG;AAAS,+BAAqB,GAAG,QAAQ,yBAAyB,GAAG;AACpF,UAAE,QAAQ,OAAO;AAAA,aACZ;AACL,YAAI,QAAO,GAAG,WAAW,EAAE,QAAQ;AAAM,YAAE,QAAQ,OAAO;AAC1D,qBAAa,mBAAmB,YAAY,EAAE,YAAY,yBAAyB,GAAG;AAAA;AACtF,aAAO,oBAAoB,GAAG,KAAK;AAAA;AACrC,WAAO,qBAAqB,GAAG,KAAK;AAAA;AAGxC,MAAI,oBAAoB,0BAA0B,GAAG,YAAY;AAC/D,cAAS;AACT,QAAI,aAAa,iBAAgB;AACjC,QAAI,QAAO,WAAW,YAAY,OAAO,uBAAuB;AAChE,aAAS,OAAM,SAAU,KAAK;AAC5B,UAAI,CAAC,gBAAe,MAAK,uBAAuB,YAAY;AAAM,wBAAgB,GAAG,KAAK,WAAW;AAAA;AAEvG,WAAO;AAAA;AAGT,MAAI,UAAU,gBAAgB,GAAG,YAAY;AAC3C,WAAO,eAAe,SAAY,mBAAmB,KAAK,kBAAkB,mBAAmB,IAAI;AAAA;AAGrG,MAAI,wBAAwB,8BAA8B,GAAG;AAC3D,QAAI,IAAI,cAAc;AACtB,QAAI,aAAa,MAAK,4BAA4B,MAAM;AACxD,QAAI,SAAS,mBAAmB,QAAO,YAAY,MAAM,CAAC,QAAO,wBAAwB;AAAI,aAAO;AACpG,WAAO,cAAc,CAAC,QAAO,MAAM,MAAM,CAAC,QAAO,YAAY,MAAM,QAAO,MAAM,WAAW,KAAK,QAAQ,KACpG,aAAa;AAAA;AAGnB,MAAI,4BAA4B,mCAAkC,GAAG,GAAG;AACtE,QAAI,KAAK,iBAAgB;AACzB,QAAI,MAAM,cAAc;AACxB,QAAI,OAAO,mBAAmB,QAAO,YAAY,QAAQ,CAAC,QAAO,wBAAwB;AAAM;AAC/F,QAAI,aAAa,+BAA+B,IAAI;AACpD,QAAI,cAAc,QAAO,YAAY,QAAQ,CAAE,SAAO,IAAI,WAAW,GAAG,QAAQ,OAAO;AACrF,iBAAW,aAAa;AAAA;AAE1B,WAAO;AAAA;AAGT,MAAI,uBAAuB,8BAA6B,GAAG;AACzD,QAAI,QAAQ,0BAA0B,iBAAgB;AACtD,QAAI,SAAS;AACb,aAAS,OAAO,SAAU,KAAK;AAC7B,UAAI,CAAC,QAAO,YAAY,QAAQ,CAAC,QAAO,YAAY;AAAM,cAAK,QAAQ;AAAA;AAEzE,WAAO;AAAA;AAGT,MAAI,yBAAyB,+BAA+B,GAAG;AAC7D,QAAI,sBAAsB,MAAM;AAChC,QAAI,QAAQ,0BAA0B,sBAAsB,yBAAyB,iBAAgB;AACrG,QAAI,SAAS;AACb,aAAS,OAAO,SAAU,KAAK;AAC7B,UAAI,QAAO,YAAY,QAAS,EAAC,uBAAuB,QAAO,iBAAiB,OAAO;AACrF,cAAK,QAAQ,WAAW;AAAA;AAAA;AAG5B,WAAO;AAAA;AAKT,MAAI,CAAC,eAAe;AAClB,cAAU,mBAAkB;AAC1B,UAAI,eAAc,iBAAiB;AAAO,cAAM,WAAU;AAC1D,UAAI,cAAc,CAAC,UAAU,UAAU,UAAU,OAAO,SAAY,SAAY,UAAU,UAAU;AACpG,UAAI,MAAM,IAAI;AACd,UAAI,SAAS,SAAU,OAAO;AAC5B,YAAI,SAAS;AAAiB,gBAAK,QAAQ,wBAAwB;AACnE,YAAI,QAAO,MAAM,WAAW,QAAO,KAAK,SAAS;AAAM,eAAK,QAAQ,OAAO;AAC3E,4BAAoB,MAAM,KAAK,yBAAyB,GAAG;AAAA;AAE7D,UAAI,gBAAe;AAAY,4BAAoB,iBAAiB,KAAK,EAAE,cAAc,MAAM,KAAK;AACpG,aAAO,MAAK,KAAK;AAAA;AAGnB,sBAAkB,QAAQ;AAE1B,cAAS,iBAAiB,YAAY,sBAAoB;AACxD,aAAO,kBAAiB,MAAM;AAAA;AAGhC,cAAS,SAAS,iBAAiB,SAAU,aAAa;AACxD,aAAO,MAAK,IAAI,cAAc;AAAA;AAGhC,+BAA2B,IAAI;AAC/B,yBAAqB,IAAI;AACzB,2BAAuB,IAAI;AAC3B,mCAA+B,IAAI;AACnC,8BAA0B,IAAI,4BAA4B,IAAI;AAC9D,gCAA4B,IAAI;AAEhC,iCAA6B,IAAI,SAAU,MAAM;AAC/C,aAAO,MAAK,iBAAgB,OAAO;AAAA;AAGrC,QAAI,cAAa;AAEf,2BAAqB,iBAAiB,eAAe;AAAA,QACnD,cAAc;AAAA,QACd,KAAK,uBAAuB;AAC1B,iBAAO,kBAAiB,MAAM;AAAA;AAAA;AAGlC,UAAI,CAAC,SAAS;AACZ,kBAAS,iBAAiB,wBAAwB,uBAAuB,EAAE,QAAQ;AAAA;AAAA;AAAA;AAKzF,MAAE,EAAE,QAAQ,MAAM,MAAM,MAAM,QAAQ,CAAC,eAAe,MAAM,CAAC,iBAAiB;AAAA,IAC5E,QAAQ;AAAA;AAGV,WAAS,WAAW,wBAAwB,SAAU,MAAM;AAC1D,0BAAsB;AAAA;AAGxB,MAAE,EAAE,QAAQ,QAAQ,MAAM,MAAM,QAAQ,CAAC,iBAAiB;AAAA,IAGxD,OAAO,SAAU,KAAK;AACpB,UAAI,SAAS,UAAU;AACvB,UAAI,QAAO,wBAAwB;AAAS,eAAO,uBAAuB;AAC1E,UAAI,SAAS,QAAQ;AACrB,6BAAuB,UAAU;AACjC,6BAAuB,UAAU;AACjC,aAAO;AAAA;AAAA,IAIT,QAAQ,gBAAgB,KAAK;AAC3B,UAAI,CAAC,UAAS;AAAM,cAAM,WAAU,MAAM;AAC1C,UAAI,QAAO,wBAAwB;AAAM,eAAO,uBAAuB;AAAA;AAAA,IAEzE,WAAW,WAAY;AAAE,mBAAa;AAAA;AAAA,IACtC,WAAW,WAAY;AAAE,mBAAa;AAAA;AAAA;AAGxC,MAAE,EAAE,QAAQ,UAAU,MAAM,MAAM,QAAQ,CAAC,eAAe,MAAM,CAAC,gBAAe;AAAA,IAG9E,QAAQ;AAAA,IAGR,gBAAgB;AAAA,IAGhB,kBAAkB;AAAA,IAGlB,0BAA0B;AAAA;AAG5B,MAAE,EAAE,QAAQ,UAAU,MAAM,MAAM,QAAQ,CAAC,iBAAiB;AAAA,IAG1D,qBAAqB;AAAA,IAGrB,uBAAuB;AAAA;AAKzB,MAAE,EAAE,QAAQ,UAAU,MAAM,MAAM,QAAQ,OAAM,WAAY;AAAE,gCAA4B,EAAE;AAAA,QAAU;AAAA,IACpG,uBAAuB,gCAA+B,IAAI;AACxD,aAAO,4BAA4B,EAAE,UAAS;AAAA;AAAA;AAMlD,MAAI,YAAY;AACV,4BAAwB,CAAC,iBAAiB,OAAM,WAAY;AAC9D,UAAI,SAAS;AAEb,aAAO,WAAW,CAAC,YAAY,YAE1B,WAAW,EAAE,GAAG,aAAa,QAE7B,WAAW,OAAO,YAAY;AAAA;AAGrC,QAAE,EAAE,QAAQ,QAAQ,MAAM,MAAM,QAAQ,yBAAyB;AAAA,MAE/D,WAAW,oBAAmB,IAAI,UAAU,OAAO;AACjD,YAAI,OAAO,YAAW;AACtB,YAAI,YAAY;AAChB,YAAI,CAAC,UAAS,aAAa,OAAO,UAAa,UAAS;AAAK;AAC7D,YAAI,CAAC,SAAQ;AAAW,qBAAW,SAAU,KAAK,OAAO;AACvD,gBAAI,YAAW;AAAY,sBAAQ,MAAK,WAAW,MAAM,KAAK;AAC9D,gBAAI,CAAC,UAAS;AAAQ,qBAAO;AAAA;AAE/B,aAAK,KAAK;AACV,eAAO,OAAM,YAAY,MAAM;AAAA;AAAA;AAAA;AArB/B;AA4BN,MAAI,CAAC,gBAAgB,eAAe;AAC9B,cAAU,gBAAgB;AAE9B,cAAS,iBAAiB,cAAc,SAAU,MAAM;AAEtD,aAAO,MAAK,SAAS;AAAA;AAAA;AAJnB;AASN,iBAAe,SAAS;AAExB,aAAW,UAAU;;;ACjUrB,MAAI,MAAI;AACR,MAAI,eAAc;AAClB,MAAI,WAAS;AACb,MAAI,eAAc;AAClB,MAAI,UAAS;AACb,MAAI,cAAa;AACjB,MAAI,iBAAgB;AACpB,MAAI,YAAW;AACf,MAAI,kBAAiB,iCAA+C;AACpE,MAAI,4BAA4B;AAEhC,MAAI,eAAe,SAAO;AAC1B,MAAI,mBAAkB,gBAAgB,aAAa;AAEnD,MAAI,gBAAe,YAAW,iBAAkB,EAAE,kBAAiB,qBAEjE,eAAe,gBAAgB,SAC9B;AACG,kCAA8B;AAE9B,oBAAgB,mBAAkB;AACpC,UAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,SAAY,UAAS,UAAU;AACtG,UAAI,SAAS,eAAc,kBAAiB,QACxC,IAAI,aAAa,eAEjB,gBAAgB,SAAY,iBAAiB,aAAa;AAC9D,UAAI,gBAAgB;AAAI,oCAA4B,UAAU;AAC9D,aAAO;AAAA;AAGT,8BAA0B,eAAe;AACzC,kBAAc,YAAY;AAC1B,qBAAgB,cAAc;AAE1B,qBAAgB,OAAO,aAAa,YAAY;AAChD,qBAAiB,aAAY,iBAAgB;AAC7C,oBAAgB,aAAY,iBAAgB;AAC5C,aAAS;AACT,eAAU,aAAY,GAAG;AACzB,mBAAc,aAAY,GAAG;AAEjC,oBAAe,kBAAiB,eAAe;AAAA,MAC7C,cAAc;AAAA,MACd,KAAK,uBAAuB;AAC1B,YAAI,SAAS,cAAc;AAC3B,YAAI,SAAS,eAAe;AAC5B,YAAI,QAAO,6BAA6B;AAAS,iBAAO;AACxD,YAAI,OAAO,iBAAgB,aAAY,QAAQ,GAAG,MAAM,SAAQ,QAAQ,QAAQ;AAChF,eAAO,SAAS,KAAK,SAAY;AAAA;AAAA;AAIrC,QAAE,EAAE,QAAQ,MAAM,QAAQ,QAAQ;AAAA,MAChC,QAAQ;AAAA;AAAA;AAnCN;AAEA;AAcA;AACA;AACA;AACA;AACA;AACA;;;AC1CN,MAAI,yBAAwB;AAI5B,yBAAsB;;;AZ2BtB,mCAAO;;;Aa/BP,MAAI,WAAS;AACb,MAAI,gBAAe;AACnB,MAAI,yBAAwB;AAC5B,MAAI,uBAAuB;AAC3B,MAAI,+BAA8B;AAClC,MAAI,mBAAkB;AAEtB,MAAI,WAAW,iBAAgB;AAC/B,MAAI,gBAAgB,iBAAgB;AACpC,MAAI,cAAc,qBAAqB;AAEvC,MAAI,mBAAkB,SAAU,qBAAqB,iBAAiB;AACpE,QAAI,qBAAqB;AAEvB,UAAI,oBAAoB,cAAc;AAAa,YAAI;AACrD,uCAA4B,qBAAqB,UAAU;AAAA,iBACpD,QAAP;AACA,8BAAoB,YAAY;AAAA;AAElC,UAAI,CAAC,oBAAoB,gBAAgB;AACvC,qCAA4B,qBAAqB,eAAe;AAAA;AAElE,UAAI,cAAa;AAAkB,iBAAS,eAAe,sBAAsB;AAE/E,cAAI,oBAAoB,iBAAiB,qBAAqB;AAAc,gBAAI;AAC9E,2CAA4B,qBAAqB,aAAa,qBAAqB;AAAA,qBAC5E,QAAP;AACA,kCAAoB,eAAe,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAMhE,OAAS,mBAAmB,eAAc;AACxC,qBAAgB,SAAO,oBAAoB,SAAO,iBAAiB,WAAW;AAAA;AADvE;AAIT,mBAAgB,wBAAuB;;;ACrCvC,MAAI,eAAc;AAClB,MAAI,uBAAuB,wBAAsC;AACjE,MAAI,eAAc;AAClB,MAAI,kBAAiB,iCAA+C;AAEpE,MAAI,oBAAoB,SAAS;AACjC,MAAI,mBAAmB,aAAY,kBAAkB;AACrD,MAAI,SAAS;AACb,MAAI,cAAa,aAAY,OAAO;AACpC,MAAI,OAAO;AAIX,MAAI,gBAAe,CAAC,sBAAsB;AACxC,oBAAe,mBAAmB,MAAM;AAAA,MACtC,cAAc;AAAA,MACd,KAAK,WAAY;AACf,YAAI;AACF,iBAAO,YAAW,QAAQ,iBAAiB,OAAO;AAAA,iBAC3C,QAAP;AACA,iBAAO;AAAA;AAAA;AAAA;AAAA;;;ACpBf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,MAAI,MAAI;AACR,MAAI,SAAQ;AACZ,MAAI,YAAW;AACf,MAAI,uBAAuB;AAC3B,MAAI,2BAA2B;AAE/B,MAAI,uBAAsB,OAAM,WAAY;AAAE,yBAAqB;AAAA;AAInE,MAAE,EAAE,QAAQ,UAAU,MAAM,MAAM,QAAQ,sBAAqB,MAAM,CAAC,4BAA4B;AAAA,IAChG,gBAAgB,wBAAwB,IAAI;AAC1C,aAAO,qBAAqB,UAAS;AAAA;AAAA;;;ACXzC,MAAI,MAAI;AACR,MAAI,YAAY,yBAAuC;AACvD,MAAI,oBAAmB;AAIvB,MAAE,EAAE,QAAQ,SAAS,OAAO,QAAQ;AAAA,IAClC,UAAU,kBAAkB,IAA0B;AACpD,aAAO,UAAU,MAAM,IAAI,UAAU,SAAS,IAAI,UAAU,KAAK;AAAA;AAAA;AAKrE,oBAAiB;;;ACbjB,MAAI,MAAI;AACR,MAAI,eAAc;AAClB,MAAI,aAAa;AACjB,MAAI,0BAAyB;AAC7B,MAAI,YAAW;AACf,MAAI,uBAAuB;AAE3B,MAAI,iBAAgB,aAAY,GAAG;AAInC,MAAE,EAAE,QAAQ,UAAU,OAAO,MAAM,QAAQ,CAAC,qBAAqB,eAAe;AAAA,IAC9E,UAAU,mBAAkB,cAAmC;AAC7D,aAAO,CAAC,CAAC,CAAC,eACR,UAAS,wBAAuB,QAChC,UAAS,WAAW,gBACpB,UAAU,SAAS,IAAI,UAAU,KAAK;AAAA;AAAA;;;AChB5C,MAAI,MAAI;AACR,MAAI,UAAU,0BAAwC;AACtD,MAAI,gCAA+B;AAEnC,MAAI,uBAAsB,8BAA6B;AAKvD,MAAE,EAAE,QAAQ,SAAS,OAAO,MAAM,QAAQ,CAAC,wBAAuB;AAAA,IAChE,QAAQ,gBAAgB,YAA4B;AAClD,aAAO,QAAQ,MAAM,YAAY,UAAU,SAAS,IAAI,UAAU,KAAK;AAAA;AAAA;;;AJO3E,+BAAO;;;AKlBP,MAAI,SAAQ;AACZ,MAAI,QAAO;AACX,MAAI,gBAAc;AAClB,MAAI,iCAAgC;AACpC,MAAI,WAAW;AACf,MAAI,YAAW;AACf,MAAI,0BAAyB;AAC7B,MAAI,qBAAqB;AACzB,MAAI,sBAAqB;AACzB,MAAI,YAAW;AACf,MAAI,YAAW;AACf,MAAI,aAAY;AAChB,MAAI,cAAa;AACjB,MAAI,iBAAiB;AACrB,MAAI,aAAa;AACjB,MAAI,gBAAgB;AACpB,MAAI,SAAQ;AAEZ,MAAI,gBAAgB,cAAc;AAClC,MAAI,aAAa;AACjB,MAAI,OAAM,KAAK;AACf,MAAI,QAAQ,GAAG;AACf,MAAI,OAAO,cAAY,IAAI;AAC3B,MAAI,QAAO,cAAY;AACvB,MAAI,eAAc,cAAY,GAAG;AAIjC,MAAI,oCAAoC,CAAC,OAAM,WAAY;AAEzD,QAAI,KAAK;AACT,QAAI,eAAe,GAAG;AACtB,OAAG,OAAO,WAAY;AAAE,aAAO,aAAa,MAAM,MAAM;AAAA;AACxD,QAAI,SAAS,KAAK,MAAM;AACxB,WAAO,OAAO,WAAW,KAAK,OAAO,OAAO,OAAO,OAAO,OAAO;AAAA;AAInE,iCAA8B,SAAS,SAAU,OAAO,aAAa,iBAAiB;AACpF,QAAI;AACJ,QACE,OAAO,MAAM,QAAQ,MAAM,OAE3B,OAAO,MAAM,QAAQ,IAAI,UAAU,KACnC,KAAK,MAAM,WAAW,UAAU,KAChC,IAAI,MAAM,YAAY,UAAU,KAEhC,IAAI,MAAM,QAAQ,SAAS,KAC3B,GAAG,MAAM,MAAM,QACf;AAEA,sBAAgB,SAAU,WAAW,OAAO;AAC1C,YAAI,SAAS,UAAS,wBAAuB;AAC7C,YAAI,MAAM,UAAU,SAAY,aAAa,UAAU;AACvD,YAAI,QAAQ;AAAG,iBAAO;AACtB,YAAI,cAAc;AAAW,iBAAO,CAAC;AAErC,YAAI,CAAC,SAAS,YAAY;AACxB,iBAAO,MAAK,aAAa,QAAQ,WAAW;AAAA;AAE9C,YAAI,SAAS;AACb,YAAI,QAAS,WAAU,aAAa,MAAM,MAC7B,WAAU,YAAY,MAAM,MAC5B,WAAU,UAAU,MAAM,MAC1B,WAAU,SAAS,MAAM;AACtC,YAAI,gBAAgB;AAEpB,YAAI,gBAAgB,IAAI,OAAO,UAAU,QAAQ,QAAQ;AACzD,YAAI,OAAO,WAAW;AACtB,eAAO,QAAQ,MAAK,YAAY,eAAe,SAAS;AACtD,sBAAY,cAAc;AAC1B,cAAI,YAAY,eAAe;AAC7B,kBAAK,QAAQ,aAAY,QAAQ,eAAe,MAAM;AACtD,gBAAI,MAAM,SAAS,KAAK,MAAM,QAAQ,OAAO;AAAQ,qBAAM,OAAO,QAAQ,YAAW,OAAO;AAC5F,yBAAa,MAAM,GAAG;AACtB,4BAAgB;AAChB,gBAAI,OAAO,UAAU;AAAK;AAAA;AAE5B,cAAI,cAAc,cAAc,MAAM;AAAO,0BAAc;AAAA;AAE7D,YAAI,kBAAkB,OAAO,QAAQ;AACnC,cAAI,cAAc,CAAC,KAAK,eAAe;AAAK,kBAAK,QAAQ;AAAA;AACpD,gBAAK,QAAQ,aAAY,QAAQ;AACxC,eAAO,OAAO,SAAS,MAAM,YAAW,QAAQ,GAAG,OAAO;AAAA;AAAA,eAGnD,IAAI,MAAM,QAAW,GAAG,QAAQ;AACzC,sBAAgB,SAAU,WAAW,OAAO;AAC1C,eAAO,cAAc,UAAa,UAAU,IAAI,KAAK,MAAK,aAAa,MAAM,WAAW;AAAA;AAAA;AAErF,sBAAgB;AAEvB,WAAO;AAAA,MAGL,eAAe,WAAW,OAAO;AAC/B,YAAI,IAAI,wBAAuB;AAC/B,YAAI,WAAW,aAAa,SAAY,SAAY,WAAU,WAAW;AACzE,eAAO,WACH,MAAK,UAAU,WAAW,GAAG,SAC7B,MAAK,eAAe,UAAS,IAAI,WAAW;AAAA;AAAA,MAOlD,SAAU,QAAQ,OAAO;AACvB,YAAI,KAAK,UAAS;AAClB,YAAI,IAAI,UAAS;AACjB,YAAI,MAAM,gBAAgB,eAAe,IAAI,GAAG,OAAO,kBAAkB;AAEzE,YAAI,IAAI;AAAM,iBAAO,IAAI;AAEzB,YAAI,IAAI,mBAAmB,IAAI;AAE/B,YAAI,kBAAkB,GAAG;AACzB,YAAI,QAAS,IAAG,aAAa,MAAM,MACtB,IAAG,YAAY,MAAM,MACrB,IAAG,UAAU,MAAM,MACnB,iBAAgB,MAAM;AAInC,YAAI,WAAW,IAAI,EAAE,gBAAgB,SAAS,GAAG,SAAS,MAAM,IAAI;AACpE,YAAI,MAAM,UAAU,SAAY,aAAa,UAAU;AACvD,YAAI,QAAQ;AAAG,iBAAO;AACtB,YAAI,EAAE,WAAW;AAAG,iBAAO,eAAe,UAAU,OAAO,OAAO,CAAC,KAAK;AACxE,YAAI,IAAI;AACR,YAAI,IAAI;AACR,YAAI,IAAI;AACR,eAAO,IAAI,EAAE,QAAQ;AACnB,mBAAS,YAAY,gBAAgB,IAAI;AACzC,cAAI,IAAI,eAAe,UAAU,gBAAgB,aAAY,GAAG,KAAK;AACrE,cAAI;AACJ,cACE,MAAM,QACL,KAAI,KAAI,UAAS,SAAS,YAAa,iBAAgB,IAAI,KAAK,EAAE,aAAa,GAChF;AACA,gBAAI,oBAAmB,GAAG,GAAG;AAAA,iBACxB;AACL,kBAAK,GAAG,aAAY,GAAG,GAAG;AAC1B,gBAAI,EAAE,WAAW;AAAK,qBAAO;AAC7B,qBAAS,IAAI,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK;AACtC,oBAAK,GAAG,EAAE;AACV,kBAAI,EAAE,WAAW;AAAK,uBAAO;AAAA;AAE/B,gBAAI,IAAI;AAAA;AAAA;AAGZ,cAAK,GAAG,aAAY,GAAG;AACvB,eAAO;AAAA;AAAA;AAAA,KAGV,CAAC,mCAAmC;;;AC3JvC,MAAI,eAAc;AAClB,MAAI,WAAS;AACb,MAAI,gBAAc;AAClB,MAAI,YAAW;AACf,MAAI,qBAAoB;AACxB,MAAI,+BAA8B;AAClC,MAAI,kBAAiB,iCAA+C;AACpE,MAAI,uBAAsB,wCAAsD;AAChF,MAAI,iBAAgB;AACpB,MAAI,YAAW;AACf,MAAI,YAAW;AACf,MAAI,cAAc;AAClB,MAAI,iBAAgB;AACpB,MAAI,YAAW;AACf,MAAI,SAAQ;AACZ,MAAI,UAAS;AACb,MAAI,uBAAuB,yBAAuC;AAClE,MAAI,aAAa;AACjB,MAAI,mBAAkB;AACtB,MAAI,sBAAsB;AAC1B,MAAI,kBAAkB;AAEtB,MAAI,QAAQ,iBAAgB;AAC5B,MAAI,eAAe,SAAO;AAC1B,MAAI,kBAAkB,aAAa;AACnC,MAAI,cAAc,SAAO;AACzB,MAAI,WAAW,cAAY;AAC3B,MAAI,QAAO,cAAY,gBAAgB;AACvC,MAAI,UAAS,cAAY,GAAG;AAC5B,MAAI,UAAU,cAAY,GAAG;AAC7B,MAAI,iBAAgB,cAAY,GAAG;AACnC,MAAI,eAAc,cAAY,GAAG;AAEjC,MAAI,SAAS;AACb,MAAI,MAAM;AACV,MAAI,MAAM;AAGV,MAAI,cAAc,IAAI,aAAa,SAAS;AAE5C,MAAI,gBAAgB,eAAc;AAClC,MAAI,iBAAgB,eAAc;AAElC,MAAI,cAAc,gBACf,EAAC,eAAe,iBAAiB,uBAAuB,mBAAmB,OAAM,WAAY;AAC5F,QAAI,SAAS;AAEb,WAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,aAAa,KAAK,QAAQ;AAAA;AAG7F,MAAI,eAAe,SAAU,QAAQ;AACnC,QAAI,SAAS,OAAO;AACpB,QAAI,SAAQ;AACZ,QAAI,SAAS;AACb,QAAI,WAAW;AACf,QAAI;AACJ,WAAO,UAAS,QAAQ,UAAS;AAC/B,YAAM,QAAO,QAAQ;AACrB,UAAI,QAAQ,MAAM;AAChB,kBAAU,MAAM,QAAO,QAAQ,EAAE;AACjC;AAAA;AAEF,UAAI,CAAC,YAAY,QAAQ,KAAK;AAC5B,kBAAU;AAAA,aACL;AACL,YAAI,QAAQ,KAAK;AACf,qBAAW;AAAA,mBACF,QAAQ,KAAK;AACtB,qBAAW;AAAA;AACX,kBAAU;AAAA;AAAA;AAEd,WAAO;AAAA;AAGX,MAAI,YAAY,SAAU,QAAQ;AAChC,QAAI,SAAS,OAAO;AACpB,QAAI,SAAQ;AACZ,QAAI,SAAS;AACb,QAAI,QAAQ;AACZ,QAAI,QAAQ;AACZ,QAAI,WAAW;AACf,QAAI,MAAM;AACV,QAAI,UAAU;AACd,QAAI,YAAY;AAChB,QAAI;AACJ,WAAO,UAAS,QAAQ,UAAS;AAC/B,YAAM,QAAO,QAAQ;AACrB,UAAI,QAAQ,MAAM;AAChB,cAAM,MAAM,QAAO,QAAQ,EAAE;AAAA,iBACpB,QAAQ,KAAK;AACtB,mBAAW;AAAA,iBACF,CAAC;AAAU,gBAAQ;AAAA,eACvB,QAAQ;AACX,uBAAW;AACX;AAAA,eACG,QAAQ;AACX,gBAAI,MAAK,QAAQ,aAAY,QAAQ,SAAQ,KAAK;AAChD,wBAAS;AACT,oBAAM;AAAA;AAER,sBAAU;AACV;AACA;AAAA,eACG,SAAQ,OAAO;AAClB,gBAAI,cAAc,MAAM,QAAO,OAAO,YAAY;AAChD,oBAAM,IAAI,YAAY;AAAA;AAExB,kBAAM,aAAa;AACnB,kBAAM,MAAM,UAAU,CAAC,WAAW;AAClC,kBAAM;AACN,wBAAY;AACZ;AAAA;AAEJ,UAAI;AAAK,qBAAa;AAAA;AACjB,kBAAU;AAAA;AACf,WAAO,CAAC,QAAQ;AAAA;AAKpB,MAAI,UAAS,UAAU,cAAc;AAC/B,oBAAgB,iBAAgB,SAAS,OAAO;AAClD,UAAI,eAAe,eAAc,iBAAiB;AAClD,UAAI,kBAAkB,UAAS;AAC/B,UAAI,oBAAoB,UAAU;AAClC,UAAI,SAAS;AACb,UAAI,aAAa;AACjB,UAAI,UAAU,QAAQ,QAAQ,SAAS,QAAQ;AAE/C,UAAI,CAAC,gBAAgB,mBAAmB,qBAAqB,QAAQ,gBAAgB,eAAe;AAClG,eAAO;AAAA;AAGT,UAAI,mBAAmB,eAAc,iBAAiB,UAAU;AAC9D,kBAAU,QAAQ;AAClB,YAAI;AAAmB,kBAAQ,WAAW,aAAa,WAAW,QAAQ,SAAS;AAAA;AAGrF,gBAAU,YAAY,SAAY,KAAK,UAAS;AAChD,cAAQ,UAAU,SAAY,KAAK,UAAS;AAC5C,mBAAa;AAEb,UAAI,uBAAuB,YAAY,KAAK;AAC1C,iBAAS,CAAC,CAAC,SAAS,eAAc,OAAO,OAAO;AAChD,YAAI;AAAQ,kBAAQ,QAAQ,OAAO,MAAM;AAAA;AAG3C,iBAAW;AAEX,UAAI,iBAAiB,YAAY,KAAK;AACpC,iBAAS,CAAC,CAAC,SAAS,eAAc,OAAO,OAAO;AAChD,YAAI,UAAU;AAAe,kBAAQ,QAAQ,OAAO,MAAM;AAAA;AAG5D,UAAI,iBAAiB;AACnB,kBAAU,UAAU;AACpB,kBAAU,QAAQ;AAClB,iBAAS,QAAQ;AAAA;AAGnB,eAAS,mBAAkB,aAAa,SAAS,QAAQ,eAAe,OAAO,iBAAiB;AAEhG,UAAI,UAAU,UAAU,OAAO,QAAQ;AACrC,gBAAQ,qBAAqB;AAC7B,YAAI,QAAQ;AACV,gBAAM,SAAS;AACf,gBAAM,MAAM,cAAc,aAAa,UAAU;AAAA;AAEnD,YAAI;AAAQ,gBAAM,SAAS;AAC3B,YAAI,OAAO;AAAQ,gBAAM,SAAS;AAAA;AAGpC,UAAI,YAAY;AAAY,YAAI;AAE9B,uCAA4B,QAAQ,UAAU,eAAe,KAAK,SAAS;AAAA,iBACpE,QAAP;AAAA;AAEF,aAAO;AAAA;AAGL,YAAQ,SAAU,KAAK;AACzB,aAAO,iBAAiB,gBAAe,eAAe,KAAK;AAAA,QACzD,cAAc;AAAA,QACd,KAAK,WAAY;AAAE,iBAAO,aAAa;AAAA;AAAA,QACvC,KAAK,SAAU,IAAI;AAAE,uBAAa,OAAO;AAAA;AAAA;AAAA;AAI7C,SAAS,QAAO,qBAAoB,eAAe,SAAQ,GAAG,MAAK,SAAS,UAAQ;AAClF,YAAM,MAAK;AAAA;AAGb,oBAAgB,cAAc;AAC9B,kBAAc,YAAY;AAC1B,cAAS,UAAQ,UAAU;AAAA;AAzEvB;AA2DA;AAQK;AAA0C;AAUrD,aAAW;;;ACrMX,MAAI,gBAAc;AAClB,MAAI,uBAAuB,wBAAsC;AACjE,MAAI,YAAW;AACf,MAAI,YAAW;AACf,MAAI,iBAAgB;AACpB,MAAI,aAAY;AAChB,MAAI,UAAQ;AACZ,MAAI,eAAc;AAElB,MAAI,YAAY;AAChB,MAAI,mBAAkB,OAAO;AAC7B,MAAI,aAAa,iBAAgB;AACjC,MAAI,YAAW,cAAY;AAE3B,MAAI,cAAc,QAAM,WAAY;AAAE,WAAO,WAAW,KAAK,EAAE,QAAQ,KAAK,OAAO,UAAU;AAAA;AAE7F,MAAI,iBAAiB,wBAAwB,WAAW,QAAQ;AAIhE,MAAI,eAAe,gBAAgB;AACjC,cAAS,OAAO,WAAW,WAAW,sBAAoB;AACxD,UAAI,IAAI,UAAS;AACjB,UAAI,IAAI,WAAU,EAAE;AACpB,UAAI,KAAK,EAAE;AACX,UAAI,IAAI,WAAU,OAAO,UAAa,eAAc,kBAAiB,MAAM,CAAE,YAAW,oBAAmB,UAAS,KAAK;AACzH,aAAO,MAAM,IAAI,MAAM;AAAA,OACtB,EAAE,QAAQ;AAAA;;;AC3Bf,MAAI,MAAI;AACR,MAAI,gBAAc;AAClB,MAAI,gBAAgB;AACpB,MAAI,mBAAkB;AACtB,MAAI,uBAAsB;AAE1B,MAAI,UAAU,cAAY,GAAG;AAE7B,MAAI,cAAc,iBAAiB;AACnC,MAAI,iBAAgB,qBAAoB,QAAQ;AAIhD,MAAE,EAAE,QAAQ,SAAS,OAAO,MAAM,QAAQ,eAAe,CAAC,kBAAiB;AAAA,IACzE,MAAM,cAAc,WAAW;AAC7B,aAAO,QAAQ,iBAAgB,OAAO,cAAc,SAAY,MAAM;AAAA;AAAA;;;ACf1E,MAAI,MAAI;AACR,MAAI,QAAQ,sBAAoC;AAChD,MAAI,yBAAyB;AAI7B,MAAE,EAAE,QAAQ,UAAU,OAAO,MAAM,QAAQ,uBAAuB,WAAW;AAAA,IAC3E,MAAM,iBAAgB;AACpB,aAAO,MAAM;AAAA;AAAA;;;ATqBjB,kCAAO;;;AU9BP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,iCAAO;AAPP,mBAAiB,KAAK;AAAE;AAA2B,WAAO,UAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,QAAQ;AAAA;AAazU,MAAI,WAAW;AACf,MAAI,UAAU,CAAC,MAAM,OAAO,UAAU;AACtC,MAAI,yBAAyB,OAAO;AACpC,MAAI,wBAAwB,OAAO;AAEnC,OAAS,IAAI,GAAG,IAAI,QAAQ,UAAU,CAAC,wBAAwB,EAAE,GAAG;AAClE,6BAAyB,OAAO,GAAG,OAAO,QAAQ,IAAI;AACtD,4BAAwB,OAAO,GAAG,OAAO,QAAQ,IAAI,4BAA4B,OAAO,GAAG,OAAO,QAAQ,IAAI;AAAA;AAFvG;AAKT,MAAI,CAAC,wBAAwB;AAC3B,6BAAyB,iCAAgC,UAAU;AACjE,UAAI,WAAW,IAAI,OAAO;AAC1B,UAAI,aAAa,KAAK,IAAI,GAAG,KAAM,YAAW;AAC9C,UAAI,MAAK,OAAO,WAAW,WAAY;AACrC,iBAAS,WAAW;AAAA,SACnB;AACH,iBAAW,WAAW;AACtB,aAAO;AAAA;AAAA;AAIX,MAAI,CAAC,uBAAuB;AAC1B,4BAAwB,gCAA+B,KAAI;AACzD,mBAAa;AAAA;AAAA;AAWV,kCAA+B,UAAU;AAC9C,WAAO,uBAAuB,KAAK,QAAQ;AAAA;AAMtC,kCAAgC;AACrC,WAAO,CAAC,CAAC,SAAS,gBAAgB;AAAA;AAM7B,oCAAkC;AACvC,WAAO,CAAC,CAAC,SAAS,eAAe,QAAQ;AAAA;AAMpC,yCAAuC;AAC5C,WAAO,CAAC,CAAC,OAAO;AAAA;AAQX,iCAA8B,KAAI;AACvC,0BAAsB,KAAK,QAAQ;AAAA;AAM9B,8BAA4B;AACjC,WAAO,kBAAkB;AAAA;AAG3B,MAAI;AAMJ,kCAAgC;AAC9B,QAAI,QAAQ,SAAS,cAAc;AACnC,UAAM,MAAM,gBAAgB;AAC5B,UAAM,MAAM,cAAc;AAC1B,UAAM,MAAM,UAAU;AACtB,QAAI,QAAQ,SAAS,cAAc;AACnC,UAAM,YAAY;AAClB,UAAM,YAAY,SAAS,cAAc;AACzC,UAAM,WAAW,YAAY,SAAS,cAAc;AACpD,UAAM,WAAW,WAAW,YAAY;AACxC,QAAI,UAAU,SAAS,cAAc;AACrC,YAAQ,YAAY;AACpB,YAAQ,MAAM,UAAU;AACxB,YAAQ,MAAM,SAAS;AACvB,UAAM,aAAa,SAAS;AAC5B,aAAS,KAAK,YAAY;AAC1B,yBAAqB,MAAM,eAAe,IAAI,MAAM,UAAU;AAE9D,aAAS,KAAK,YAAY;AAAA;AAOrB,+BAA6B;AAClC,QAAI,uBAAuB,QAAQ;AACjC;AAAA;AAGF,WAAO;AAAA;AAET,MAAI;AASG,iCAA+B,UAAU;AAC9C,QAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAElF,QAAI,oBAAoB;AACtB,aAAO;AAAA;AAGT,QAAK,QAAO,SAAS,cAAc,cAAc,QAAQ,WAAW,UAAU;AAC5E,2BAAqB,IAAI,KAAK,SAAS,UAAU,SAAS;AAAA,eACjD,OAAO,OAAO,UAAU,kBAAkB,YAAY;AAC/D,2BAAqB,6BAA4B,GAAG,GAAG;AACrD,eAAO,GAAG,OAAO,GAAG,cAAc;AAAA;AAAA,WAE/B;AACL,2BAAqB,6BAA4B,GAAG,GAAG;AACrD,YAAI,MAAM,GAAG;AACX,iBAAO;AAAA;AAGT,eAAO,IAAI,IAAI,KAAK;AAAA;AAAA;AAIxB,WAAO;AAAA;AAET,MAAI;AAOG,qCAAmC;AACxC,QAAI,qBAAqB,QAAQ;AAC/B,aAAO;AAAA;AAGT,QAAI;AACF,UAAI,UAAU;AAAA,YACR,UAAU;AACZ,6BAAmB;AAAA;AAAA;AAKvB,aAAO,iBAAiB,QAAQ,SAAS;AAEzC,aAAO,oBAAoB,QAAQ,SAAS;AAAA,aACrC,KAAP;AACA,yBAAmB;AAAA;AAGrB,WAAO;AAAA;;;AC5LT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAAO;;;ACAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,+BAAO;AAMP,kCAAO;;;ACXP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,kCAAO;;;ACRP,MAAI,aAAa;AACjB,MAAI,mBAAmB;AAIvB,aAAW,OAAO,SAAU,MAAM;AAChC,WAAO,gBAAe;AAAE,aAAO,KAAK,MAAM,UAAU,SAAS,UAAU,KAAK;AAAA;AAAA,KAC3E;;;ADIH,8BAAO;AAMA,qBAAmB,KAAK;AAC7B,QAAI,OAAO,IAAI;AACf,QAAI,IAAI;AAER,WAAO,IAAI,MAAM;AACf,UAAI,KAAK,CAAC,IAAI;AACd,WAAK;AAAA;AAAA;AAQF,uBAAqB,KAAK,WAAW;AAC1C,QAAI,OAAO,UAAU;AACrB,QAAI,IAAI;AAER,WAAO,IAAI,MAAM;AACf,UAAI,KAAK,UAAU;AACnB,WAAK;AAAA;AAAA;AAQF,iBAAe,KAAK;AACzB,QAAI,aAAa;AAEjB,QAAI,CAAC,OAAO,IAAI,WAAW,KAAK,CAAC,IAAI,MAAM,IAAI,GAAG,WAAW,GAAG;AAC9D,aAAO;AAAA;AAGT,QAAI,WAAW,IAAI;AACnB,QAAI,WAAW,IAAI,GAAG;AAEtB,aAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,eAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,YAAI,CAAC,WAAW,IAAI;AAClB,qBAAW,KAAK;AAAA;AAGlB,mBAAW,GAAG,KAAK,IAAI,GAAG;AAAA;AAAA;AAI9B,WAAO;AAAA;AAeF,uBAAqB,OAAO,UAAU,aAAa,eAAe;AACvE,QAAI,SAAQ;AACZ,QAAI,WAAW;AACf,QAAI,SAAS;AAEb,QAAI,CAAC,MAAM,QAAQ,QAAQ;AACzB,iBAAW,MAAM,KAAK;AAAA;AAGxB,QAAI,SAAS,SAAS;AAEtB,QAAI,iBAAiB,QAAQ;AAC3B,gBAAS;AACT,eAAS,SAAS;AAAA;AAGpB,cAAS;AAET,WAAO,SAAQ,QAAQ;AACrB,eAAS,SAAS,QAAQ,SAAS,SAAQ,QAAO;AAClD,gBAAS;AAAA;AAGX,WAAO;AAAA;AAaF,uBAAqB,OAAO,WAAW;AAC5C,QAAI,SAAQ;AACZ,QAAI,WAAW;AAEf,QAAI,CAAC,MAAM,QAAQ,QAAQ;AACzB,iBAAW,MAAM,KAAK;AAAA;AAGxB,QAAI,SAAS,SAAS;AACtB,QAAI,SAAS;AACb,QAAI,WAAW;AAEf,WAAO,SAAQ,QAAQ;AACrB,UAAI,QAAQ,SAAS;AAErB,UAAI,UAAU,OAAO,QAAO,WAAW;AACrC,oBAAY;AACZ,eAAO,YAAY;AAAA;AAGrB,gBAAS;AAAA;AAGX,WAAO;AAAA;AAWF,oBAAkB,OAAO,UAAU;AACxC,QAAI,SAAQ;AACZ,QAAI,WAAW;AAEf,QAAI,CAAC,MAAM,QAAQ,QAAQ;AACzB,iBAAW,MAAM,KAAK;AAAA;AAGxB,QAAI,SAAS,SAAS;AACtB,QAAI,SAAS;AACb,QAAI,WAAW;AAEf,WAAO,SAAQ,QAAQ;AACrB,UAAI,QAAQ,SAAS;AACrB,kBAAY;AACZ,aAAO,YAAY,SAAS,OAAO,QAAO;AAC1C,gBAAS;AAAA;AAGX,WAAO;AAAA;AAaF,qBAAmB,OAAO,UAAU;AACzC,QAAI,SAAQ;AACZ,QAAI,WAAW;AAEf,QAAI,CAAC,MAAM,QAAQ,QAAQ;AACzB,iBAAW,MAAM,KAAK;AAAA;AAGxB,QAAI,SAAS,SAAS;AAEtB,WAAO,SAAQ,QAAQ;AACrB,UAAI,SAAS,SAAS,SAAQ,QAAO,cAAc,OAAO;AACxD;AAAA;AAGF,gBAAS;AAAA;AAGX,WAAO;AAAA;AASF,oBAAkB,OAAO;AAC9B,WAAO,YAAY,OAAO,SAAU,GAAG,GAAG;AACxC,aAAO,IAAI;AAAA,OACV;AAAA;AAUE,oBAAkB,OAAO;AAC9B,WAAO,YAAY,OAAO,SAAU,GAAG,GAAG;AACxC,aAAO,IAAI,IAAI,IAAI;AAAA,OAClB,MAAM,QAAQ,SAAS,MAAM,KAAK;AAAA;AAUhC,oBAAkB,OAAO;AAC9B,WAAO,YAAY,OAAO,SAAU,GAAG,GAAG;AACxC,aAAO,IAAI,IAAI,IAAI;AAAA,OAClB,MAAM,QAAQ,SAAS,MAAM,KAAK;AAAA;AAShC,oBAAkB,OAAO;AAC9B,QAAI,CAAC,MAAM,QAAQ;AACjB,aAAO;AAAA;AAGT,WAAO,SAAS,SAAS,MAAM;AAAA;AAS1B,wBAAsB,OAAO;AAClC,WAAO,YAAY,OAAO,SAAU,SAAS,OAAO;AAClD,aAAO,QAAQ,OAAO,MAAM,QAAQ,SAAS,aAAa,SAAS;AAAA,OAClE;AAAA;AASE,uBAAqB,OAAO;AACjC,QAAI,SAAS;AACb,cAAU,OAAO,SAAU,OAAO;AAChC,UAAI,OAAO,QAAQ,WAAW,IAAI;AAChC,eAAO,KAAK;AAAA;AAAA;AAGhB,WAAO;AAAA;AASF,mCAAiC;AACtC,aAAS,OAAO,UAAU,QAAQ,SAAS,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACzF,aAAO,QAAQ,UAAU;AAAA;AAG3B,QAAI,OAAO,GAAG,OAAO,SACjB,QAAQ,KAAK,IACb,OAAO,KAAK,MAAM;AAEtB,QAAI,qBAAqB;AACzB,cAAU,MAAM,SAAU,OAAO;AAC/B,2BAAqB,mBAAmB,OAAO,SAAU,OAAO;AAC9D,eAAO,CAAC,MAAM,SAAS;AAAA;AAAA;AAG3B,WAAO;AAAA;AASF,qCAAmC;AACxC,aAAS,QAAQ,UAAU,QAAQ,SAAS,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC/F,aAAO,SAAS,UAAU;AAAA;AAG5B,QAAI,QAAQ,GAAG,OAAO,SAClB,QAAQ,MAAM,IACd,OAAO,MAAM,MAAM;AAEvB,QAAI,qBAAqB;AACzB,cAAU,MAAM,SAAU,OAAO;AAC/B,2BAAqB,mBAAmB,OAAO,SAAU,OAAO;AAC9D,eAAO,MAAM,SAAS;AAAA;AAAA;AAG1B,WAAO;AAAA;AASF,8BAA4B;AACjC,aAAS,QAAQ,UAAU,QAAQ,SAAS,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC/F,aAAO,SAAS,UAAU;AAAA;AAG5B,QAAI,QAAQ,GAAG,OAAO,SAClB,QAAQ,MAAM,IACd,OAAO,MAAM,MAAM;AAEvB,QAAI,MAAM,IAAI,IAAI;AAClB,cAAU,MAAM,SAAU,OAAO;AAC/B,gBAAU,OAAO,SAAU,OAAO;AAChC,YAAI,CAAC,IAAI,IAAI,QAAQ;AACnB,cAAI,IAAI;AAAA;AAAA;AAAA;AAId,WAAO,MAAM,KAAK;AAAA;AAUb,yBAAuB,OAAO;AACnC,QAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,WAAO,MAAM,MAAM;AAAA;;;AD/WrB,2BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAe3M,oBAAiB,KAAK;AAAE;AAA2B,WAAO,WAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,SAAQ;AAAA;AAUlU,sBAAoB,QAAQ;AACjC,QAAI;AAEJ,QAAI,MAAM,QAAQ,SAAS;AACzB,eAAS;AAAA,WACJ;AACL,eAAS;AACT,iBAAW,QAAQ,SAAU,OAAO,KAAK;AACvC,YAAI,QAAQ,cAAc;AACxB;AAAA;AAGF,YAAI,SAAS,SAAQ,WAAW,YAAY,CAAC,MAAM,QAAQ,QAAQ;AACjE,iBAAO,OAAO,WAAW;AAAA,mBAChB,MAAM,QAAQ,QAAQ;AAC/B,cAAI,MAAM,UAAU,SAAQ,MAAM,QAAQ,YAAY,CAAC,MAAM,QAAQ,MAAM,KAAK;AAC9E,mBAAO,OAAO,CAAC,WAAW,MAAM;AAAA,iBAC3B;AACL,mBAAO,OAAO;AAAA;AAAA,eAEX;AACL,iBAAO,OAAO;AAAA;AAAA;AAAA;AAKpB,WAAO;AAAA;AAYF,mBAAiB,OAAO,QAAQ;AACrC,WAAO,UAAU,cAAc;AAC/B,UAAM,YAAY,IAAI;AACtB,UAAM,UAAU,cAAc;AAC9B,WAAO;AAAA;AAWF,mBAAgB,QAAQ,WAAW,cAAc;AACtD,QAAI,kBAAkB,MAAM,QAAQ;AACpC,eAAW,WAAW,SAAU,OAAO,KAAK;AAC1C,UAAI,oBAAoB,SAAS,aAAa,SAAS,MAAM;AAC3D,eAAO,OAAO;AAAA;AAAA;AAGlB,WAAO;AAAA;AASF,sBAAoB,QAAQ,WAAW;AAC5C,eAAW,WAAW,SAAU,OAAO,KAAK;AAC1C,UAAI,UAAU,QAAQ,SAAQ,UAAU,UAAU,UAAU;AAC1D,YAAI,CAAC,OAAO,MAAM;AAChB,cAAI,MAAM,QAAQ,UAAU,OAAO;AACjC,mBAAO,OAAO;AAAA,qBACL,OAAO,UAAU,SAAS,KAAK,UAAU,UAAU,iBAAiB;AAC7E,mBAAO,OAAO,UAAU;AAAA,iBACnB;AACL,mBAAO,OAAO;AAAA;AAAA;AAIlB,mBAAW,OAAO,MAAM,UAAU;AAAA,aAC7B;AACL,eAAO,OAAO,UAAU;AAAA;AAAA;AAAA;AAYvB,qBAAmB,KAAK;AAC7B,QAAI,SAAQ,SAAS,UAAU;AAC7B,aAAO,KAAK,MAAM,KAAK,UAAU;AAAA;AAGnC,WAAO;AAAA;AASF,iBAAe,QAAQ;AAC5B,QAAI,SAAS;AACb,eAAW,QAAQ,SAAU,OAAO,KAAK;AACvC,aAAO,OAAO;AAAA;AAEhB,WAAO;AAAA;AAUF,iBAAe,MAAM;AAC1B,QAAI,CAAC,KAAK,QAAQ;AAChB,WAAK,SAAS;AAAA;AAGhB,aAAS,OAAO,UAAU,QAAQ,SAAS,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,IAAI,OAAO,GAAG,OAAO,MAAM,QAAQ;AAC5G,aAAO,OAAO,KAAK,UAAU;AAAA;AAG/B,cAAU,QAAQ,SAAU,WAAW;AACrC,WAAK,OAAO,KAAK,UAAU;AAC3B,iBAAW,WAAW,SAAU,OAAO,KAAK;AAC1C,YAAI,KAAK,UAAU,SAAS,QAAQ;AAClC,gBAAM,IAAI,MAAM,6BAA6B,OAAO,KAAK;AAAA;AAG3D,YAAI,OAAO,UAAU,YAAY;AAC/B,eAAK,UAAU,OAAO;AAAA,eACjB;AACL,cAAI,SAAS,iBAAiB,UAAU,cAAc;AACpD,gBAAI,eAAe,IAAI,OAAO;AAE9B,gBAAI,YAAY,oBAAmB,UAAU;AAC3C,kBAAI,SAAS;AAEb,kBAAI,MAAM,QAAQ,WAAW,UAAS,SAAS;AAC7C,yBAAS,UAAU;AAAA;AAGrB,qBAAO;AAAA;AAGT,mBAAO,WAAY;AACjB,kBAAI,KAAK,kBAAkB,QAAQ;AACjC,qBAAK,gBAAgB,UAAU;AAAA;AAGjC,qBAAO,KAAK;AAAA;AAAA;AAIhB,cAAI,SAAS,iBAAiB,UAAU;AACtC,gBAAI,eAAe,IAAI,OAAO;AAC9B,mBAAO,SAAU,UAAU;AACzB,mBAAK,gBAAgB;AAAA;AAAA;AAIzB,iBAAO,eAAe,KAAK,WAAW,KAAK;AAAA,YACzC,KAAK,OAAO,KAAK;AAAA,YACjB,KAAK,OAAO;AAAA,YACZ,cAAc;AAAA;AAAA;AAAA;AAAA;AAKtB,WAAO;AAAA;AAUF,yBAAuB,SAAS,SAAS;AAC9C,WAAO,KAAK,UAAU,aAAa,KAAK,UAAU;AAAA;AAU7C,qBAAkB,QAAQ;AAC/B,WAAO,OAAO,UAAU,SAAS,KAAK,YAAY;AAAA;AAS7C,wBAAsB,QAAQ,UAAU,OAAO,SAAS;AAC7D,YAAQ,QAAQ;AAChB,YAAQ,WAAW,QAAQ,aAAa;AACxC,YAAQ,aAAa,QAAQ,eAAe;AAC5C,YAAQ,eAAe,QAAQ,iBAAiB;AAChD,WAAO,eAAe,QAAQ,UAAU;AAAA;AAUnC,sBAAoB,QAAQ,UAAU;AAE3C,aAAS,OAAO,QAAQ;AACtB,UAAI,CAAC,OAAO,kBAAkB,OAAO,kBAAkB,OAAO,UAAU,eAAe,KAAK,QAAQ,MAAM;AACxG,YAAI,SAAS,OAAO,MAAM,KAAK,YAAY,OAAO;AAChD;AAAA;AAAA;AAAA;AAKN,WAAO;AAAA;AAUF,uBAAqB,QAAQ,MAAM;AACxC,QAAI,QAAQ,KAAK,MAAM;AACvB,QAAI,SAAS;AACb,eAAW,OAAO,SAAU,UAAU;AACpC,eAAS,OAAO;AAEhB,UAAI,WAAW,QAAQ;AACrB,iBAAS;AACT,eAAO;AAAA;AAAA;AAGX,WAAO;AAAA;AAUF,uBAAqB,QAAQ,MAAM,OAAO;AAC/C,QAAI,QAAQ,KAAK,MAAM;AACvB,QAAI,gBAAgB;AACpB,UAAM,QAAQ,SAAU,UAAU,QAAO;AACvC,UAAI,WAAU,MAAM,SAAS,GAAG;AAC9B,YAAI,CAAC,eAAe,eAAe,WAAW;AAC5C,wBAAc,YAAY;AAAA;AAG5B,wBAAgB,cAAc;AAAA,aACzB;AACL,sBAAc,YAAY;AAAA;AAAA;AAAA;AAWzB,0BAAwB,QAAQ;AACrC,QAAI,CAAC,UAAS,SAAS;AACrB,aAAO;AAAA;AAGT,QAAI,eAAe,uBAAsB,KAAK;AAC5C,UAAI,SAAS;AAEb,UAAI,UAAS,MAAM;AACjB,mBAAW,KAAK,SAAU,OAAO,KAAK;AACpC,cAAI,QAAQ,cAAc;AACxB;AAAA;AAGF,oBAAU,cAAa;AAAA;AAAA,aAEpB;AACL,kBAAU;AAAA;AAGZ,aAAO;AAAA;AAGT,WAAO,aAAa;AAAA;AAUf,oCAAkC,cAAc;AACrD,QAAI;AAEJ,QAAI,mBAAmB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC3F,QAAI,kBAAkB,IAAI,OAAO;AACjC,QAAI,UAAU,WAAU;AAAA,MACtB,UAAU;AAAA,OACT,gBAAgB,SAAS,iBAAiB,eAAe,gBAAgB,SAAS,aAAa,qBAAqB;AACrH,aAAO,KAAK;AAAA,QACV;AACJ,WAAO,eAAe,SAAQ,kBAAkB;AAAA,MAC9C,KAAK,gBAAe;AAClB,eAAO,KAAK;AAAA;AAAA,MAEd,KAAK,aAAa,OAAO;AACvB,aAAK,WAAW;AAChB,aAAK,mBAAmB;AAAA;AAAA,MAE1B,YAAY;AAAA,MACZ,cAAc;AAAA;AAEhB,WAAO;AAAA;AAUF,0BAAwB,QAAQ,KAAK;AAC1C,WAAO,OAAO,UAAU,eAAe,KAAK,QAAQ;AAAA;;;ADzXtD,MAAI,SAAS,iBAAgB,YAAY;AACvC,QAAI,SAAS;AAAA,MACX,OAAO;AAAA;AAGT,WAAO,OAAO,SAAU,IAAI,QAAQ;AAClC,aAAO,QAAQ,WAAW,IAAI;AAAA;AAGhC,WAAO;AAAA;AAGT,MAAI,WAAW;AAAA,IACb,QAAQ,OAAO,SAAU,IAAI,QAAQ;AACnC,aAAO,SAAS,KAAK,OAAO,SAAS,KAAK;AAAA;AAAA,IAE5C,cAAc,OAAO,SAAU,IAAI;AACjC,aAAO,QAAQ,KAAK;AAAA;AAAA,IAEtB,MAAM,OAAO,SAAU,IAAI;AACzB,aAAO,OAAO,KAAK;AAAA;AAAA,IAErB,YAAY,OAAO,SAAU,IAAI;AAC/B,aAAO,SAAS,KAAK;AAAA;AAAA,IAEvB,SAAS,OAAO,SAAU,IAAI;AAC5B,aAAO,UAAU,KAAK;AAAA;AAAA,IAExB,eAAe,OAAO,SAAU,IAAI;AAClC,aAAO,QAAQ,KAAK;AAAA;AAAA,IAEtB,IAAI,OAAO,SAAU,IAAI;AACvB,aAAO,UAAU,KAAK;AAAA;AAAA,IAGxB,KAAK,OAAO,WAAY;AACtB,aAAO,CAAC,CAAC,SAAS;AAAA;AAAA,IAEpB,QAAQ,OAAO,SAAU,IAAI;AAC3B,aAAO,iEAAiE,KAAK;AAAA;AAAA,IAE/E,QAAQ,OAAO,SAAU,IAAI,QAAQ;AACnC,aAAO,SAAS,KAAK,OAAO,iBAAiB,KAAK;AAAA;AAAA;AAGtD,MAAI,YAAY;AAAA,IACd,KAAK,OAAO,SAAU,UAAU;AAC9B,aAAO,OAAO,KAAK;AAAA;AAAA,IAErB,KAAK,OAAO,SAAU,UAAU;AAC9B,aAAO,OAAO,KAAK;AAAA;AAAA,IAErB,OAAO,OAAO,SAAU,UAAU;AAChC,aAAO,SAAS,KAAK;AAAA;AAAA,IAEvB,KAAK,OAAO,SAAU,IAAI;AACxB,aAAO,oBAAoB,KAAK;AAAA;AAAA;AAS7B,4BAA0B;AAC/B,QAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,IAC3E,iBAAiB,KAAK,WACtB,aAAY,mBAAmB,SAAS,UAAU,YAAY,gBAC9D,cAAc,KAAK,QACnB,SAAS,gBAAgB,SAAS,UAAU,SAAS;AAEzD,eAAW,UAAU,SAAU,OAAO;AACpC,UAAI,QAAO,MAAM;AACjB,aAAO,KAAK,MAAK,YAAW;AAAA;AAAA;AAQzB,6BAA2B;AAChC,QAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,IAC5E,iBAAiB,MAAM,UACvB,WAAW,mBAAmB,SAAS,UAAU,WAAW;AAEhE,eAAW,WAAW,SAAU,OAAO;AACrC,UAAI,QAAO,MAAM;AACjB,aAAO,KAAK,MAAK;AAAA;AAAA;AAGrB;AACA;AAKO,sBAAoB;AACzB,WAAO,SAAS,OAAO;AAAA;AAMlB,4BAA0B;AAC/B,WAAO,SAAS,aAAa;AAAA;AAMxB,uBAAqB;AAC1B,WAAO,SAAS,QAAQ;AAAA;AAMnB,6BAA2B;AAChC,WAAO,SAAS,cAAc;AAAA;AAMzB,sBAAoB;AACzB,WAAO,SAAS,OAAO;AAAA;AAMlB,oBAAkB;AACvB,WAAO,SAAS,KAAK;AAAA;AAMhB,0BAAwB;AAC7B,WAAO,SAAS,WAAW;AAAA;AAMtB,kBAAgB;AACrB,WAAO,SAAS,GAAG;AAAA;AAMd,mBAAiB;AACtB,WAAO,SAAS,IAAI;AAAA;AAMf,yBAAuB;AAC5B,WAAO,SAAS,GAAG,SAAS,SAAS,KAAK;AAAA;AAMrC,6BAA2B;AAChC,WAAO,SAAS,OAAO;AAAA;AAMlB,mBAAiB;AACtB,WAAO,UAAU,IAAI;AAAA;AAWhB,sBAAoB;AACzB,QAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,WAC5E,iBAAiB,MAAM;AAE3B,WAAO,iBAAiB,KAAK,UAAU,IAAI;AAAA;AAMtC,yBAAuB;AAC5B,WAAO,UAAU,IAAI;AAAA;AAMhB,qBAAmB;AACxB,WAAO,UAAU,IAAI;AAAA;AAMhB,uBAAqB;AAC1B,WAAO,UAAU,MAAM;AAAA;;;AIvNzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,+BAAO;AAEP,yBAAsB;;;ACLtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,MAAI,MAAI;AACR,MAAI,WAAW;AACf,MAAI,UAAQ;AACZ,MAAI,YAAW;AACf,MAAI,WAAW,4BAA0C;AAGzD,MAAI,UAAU,OAAO;AACrB,MAAI,uBAAsB,QAAM,WAAY;AAAE,YAAQ;AAAA;AAItD,MAAE,EAAE,QAAQ,UAAU,MAAM,MAAM,QAAQ,sBAAqB,MAAM,CAAC,YAAY;AAAA,IAChF,QAAQ,gBAAgB,IAAI;AAC1B,aAAO,WAAW,UAAS,MAAM,QAAQ,SAAS,OAAO;AAAA;AAAA;;;ACb7D,MAAI,MAAI;AACR,MAAI,SAAS,2BAAyC;AAItD,MAAE,EAAE,QAAQ,UAAU,OAAO,QAAQ;AAAA,IACnC,aAAa,qBAAqB,KAAK;AACrC,aAAO,OAAO,MAAM;AAAA;AAAA;;;AFExB,+BAAO;;;AGTP,MAAI,MAAI;AACR,MAAI,YAAY,qBAAmC;AACnD,MAAI,aAAa;AAIjB,MAAE,EAAE,QAAQ,UAAU,OAAO,MAAM,QAAQ,cAAc;AAAA,IACvD,UAAU,kBAAkB,WAAoC;AAC9D,aAAO,UAAU,MAAM,WAAW,UAAU,SAAS,IAAI,UAAU,KAAK;AAAA;AAAA;;;AHQ5E,kCAAO;AAMP,sBAAmB;;;AIvBnB,+BAAO;AAYA,wBAAsB,SAAS;AACpC,aAAS,OAAO,UAAU,QAAQ,cAAc,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,IAAI,OAAO,GAAG,OAAO,MAAM,QAAQ;AACjH,kBAAY,OAAO,KAAK,UAAU;AAAA;AAGpC,QAAI,SAAS,YAAY,SAAS,SAAU,eAAe,cAAc,QAAO;AAC9E,UAAI,0BAA0B,aAAa,QAAQ,aAAa;AAChE,UAAI,qBAAqB,YAAY,UAAS,YAAY,UAAS;AACnE,aAAO,gBAAgB,0BAA0B;AAAA,OAChD;AACH,WAAO,OAAO;AAAA;;;AJnBhB,MAAI;AAAJ,MAAqB;AAArB,MAAuC;AAAvC,MAAyD;AAAzD,MAA2E;AAA3E,MAA6F;AAE7F,kCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAgB1K,oBAAiB,KAAK;AAAE;AAA2B,WAAO,WAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,SAAQ;AAAA;AAWlU,qBAAmB,OAAO;AAC/B,QAAI;AAEJ,YAAQ,SAAQ;AAAA,WACT;AAAA,WACA;AACH,iBAAS,GAAG,OAAO;AACnB;AAAA,WAEG;AACH,iBAAS,UAAU,OAAO,KAAK,MAAM;AACrC;AAAA,WAEG;AACH,iBAAS;AACT;AAAA;AAGA,iBAAS,MAAM;AACf;AAAA;AAGJ,WAAO;AAAA;AASF,qBAAmB,UAAU;AAClC,WAAO,OAAO,aAAa;AAAA;AAStB,uBAAqB,UAAU;AACpC,WAAO,OAAO,aAAa;AAAA;AAStB,mBAAiB,UAAU;AAChC,WAAO,aAAa,QAAQ,aAAa,MAAM,YAAY;AAAA;AAStD,qBAAkB,UAAU;AACjC,WAAO,OAAO,UAAU,SAAS,KAAK,cAAc;AAAA;AAItD,MAAI,KAAK;AAET,MAAI,MAAM,cAAa,GAAG;AACxB,WAAO,SAAS,GAAG;AAAA;AAGrB,MAAI,MAAM,cAAa,GAAG;AACxB,WAAO,SAAS,GAAG;AAAA;AAGrB,MAAI,MAAM,cAAa,GAAG,GAAG,GAAG;AAC9B,WAAO,EAAE,UAA4B,GAAG;AAAA;AAG1C,MAAI,MAAM,cAAa,GAAG;AACxB,WAAO,EAAE,eAAgD,KAAK;AAAA;AAGhE,MAAI,QAAQ,gBAAe,GAAG;AAC5B,WAAO,GAAG,OAAO,GAAG,QAAQ,OAAO;AAAA;AAGrC,MAAI,eAAe,uBAAsB,GAAG;AAC1C,WAAO,IAAI,IAAI,MAAM,IAAI,IAAI,OAAO,IAAI,SAAa,KAAI,IAAI,MAAM,IAAI,IAAI,MAAS,CAAC,CAAC,CAAC,GAAG,SAAS;AAAA;AAGrG,MAAI,WAAW,qBAAoB;AACjC,WAAO,OAAO,aAAa,eAAe,sFAAsF,KAAK,SAAS;AAAA;AAGhJ,MAAI,YAAY;AAChB,MAAI,kBAAkB;AAAA,IACpB,SAAS,mBAAmB;AAC1B,aAAO,aAAa,mBAAoB,mBAAkB,uBAAuB,CAAC,2HAA2H,CAAC;AAAA;AAAA,IAEhN,SAAS,iBAAiB,MAAM;AAC9B,UAAI,kBAAkB,KAAK,iBACvB,aAAa,KAAK;AACtB,aAAO,aAAa,oBAAqB,oBAAmB,uBAAuB,CAAC,sDAAsD,uDAAuD,mGAAmG,kEAAkE,CAAC,sDAAsD,2DAA2D,uGAAuG,oEAAoE,iBAAiB,YAAY;AAAA;AAAA,IAElqB,SAAS,mBAAmB;AAC1B,aAAO,aAAa,oBAAqB,oBAAmB,uBAAuB,CAAC,4TAA4T,CAAC;AAAA;AAAA,IAEnZ,gBAAgB,0BAA0B;AACxC,aAAO;AAAA;AAAA;AAGX,MAAI,cAAc;AAAA,IAChB,SAAS,oBAAmB;AAC1B,aAAO,aAAa,oBAAqB,oBAAmB,uBAAuB,CAAC,0RAAgS,CAAC;AAAA;AAAA,IAEvX,SAAS,kBAAiB,OAAO;AAC/B,UAAI,kBAAkB,MAAM,iBACxB,aAAa,MAAM;AACvB,aAAO,aAAa,oBAAqB,oBAAmB,uBAAuB,CAAC,sDAAsD,uDAAuD,8IAAkJ,oHAAsH,CAAC,sDAAsD,2DAA2D,kJAAsJ,0HAA4H,iBAAiB,YAAY;AAAA;AAAA,IAE52B,SAAS,oBAAmB;AAC1B,aAAO,aAAa,oBAAqB,oBAAmB,uBAAuB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,kHAAie,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAExjB,gBAAgB,2BAA0B;AACxC,aAAO;AAAA;AAAA;AAGJ,8BAA4B,KAAK,SAAS;AAC/C,QAAI,eAAe,CAAC,QAAQ;AAC5B,QAAI,kBAAkB,OAAO,QAAQ,YAAY,IAAI,kBAAkB;AACvE,QAAI,aAAa;AACjB,QAAI;AACJ,QAAI,sBAAsB;AAC1B,QAAI,kBAAkB;AACtB,UAAM,MAAM,OAAO;AAEnB,QAAI,iBAAiB,gBAAgB;AAErC,QAAI,gBAAgB,mBAAmB,gBAAgB;AACrD,UAAI,gBAAgB;AAClB,YAAI,cAAc,2BAAO,cAAc;AACvC,YAAI,cAAc,KAAK,MAAM,YAAY,SAAS,YAAY;AAE9D,YAAI,kBAAkB,aAAa;AAEnC,0BAAkB,2BAAQ,mBAAkB,KAAK,OAAQ,KAAK,OAAO;AAErE,YAAI,cAAc,iBAAiB;AACjC,cAAI,mBAAmB,6BAAS,KAAK,aAAa;AAClD,gCAAsB,oBAAoB,IAAI,UAAU;AACxD,4BAAkB,oBAAoB,KAAK,UAAU;AAAA,eAChD;AACL,gCAAsB;AACtB,4BAAkB;AAAA;AAAA,iBAEX,iBAAiB;AAC1B,8BAAsB;AACtB,0BAAkB;AAAA,aACb;AACL,8BAAsB;AACtB,0BAAkB;AAAA;AAAA,WAEf;AACL,4BAAsB;AACtB,wBAAkB;AAAA;AAGpB,QAAI,YAAY;AACd,4BAAsB;AACtB,wBAAkB;AAAA;AAGpB,QAAI,CAAC,aAAa,wBAAwB,SAAS;AACjD,UAAI,UAAU,gBAAgB,qBAAqB;AAAA,QACjD;AAAA,QACA;AAAA;AAGF,UAAI,SAAS;AACX,gBAAQ,wBAAwB,mBAAmB,SAAS,QAAQ,gBAAgB,qBAAqB;AAAA,UACvG;AAAA,UACA;AAAA;AAAA;AAIJ,kBAAY;AAAA;AAGd,QAAI,oBAAoB,WAAW,QAAQ,YAAY;AACrD,UAAI,WAAW,YAAY,iBAAiB;AAAA,QAC1C;AAAA,QACA;AAAA;AAGF,UAAI,UAAU;AACZ,YAAI,cAAc,SAAS,cAAc;AACzC,oBAAY,KAAK;AACjB,oBAAY,YAAY,YAAY,iBAAiB;AAAA,UACnD;AAAA,UACA;AAAA;AAEF,gBAAQ,WAAW,aAAa,aAAa,QAAQ;AAAA;AAAA;AAAA;AAK3D,2BAAyB,GAAG;AAC1B,QAAI,IAAI,GAAG;AACX,QAAI,IAAI;AAER,QAAI,EAAE,QAAQ,IAAI,MAAS;AACzB,aAAO;AAAA;AAGT,aAAS,IAAI,IAAI,IAAI,SAA2B,MAAM,KAAK,IAAI,IAAI,EAAE,UAAU,GAAG,IAAI,IAAI,EAAE,WAAW,MAAM;AAC3G,QAAE,IAAI,GAAG,MAAM,IAAI,IAAK,KAAI,GAAG,OAAO,IAAI,IAAI,KAAM,KAAI,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,SAAS,GAAG,UAAU,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,QAAQ,IAAI,IAAI;AAAA;AAGvK,WAAO,MAAM;AAAA;;;AD9OR,4BAA0B,QAAQ;AACvC,WAAO,OAAO,GAAG,gBAAgB,OAAO,OAAO;AAAA;AAS1C,8BAA4B;AACjC,QAAI,SAAS;AAEb,aAAS,OAAO,UAAU,QAAQ,UAAU,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AAC1F,cAAQ,QAAQ,UAAU;AAAA;AAG5B,QAAI,SAAS,QAAQ;AAErB,WAAO,QAAQ;AACb,gBAAU;AACV,UAAI,SAAS,UAAU,QAAQ,SAAS;AAExC,UAAI,OAAO,QAAQ,YAAY,IAAI;AACjC,eAAO,KAAK;AAAA;AAAA;AAIhB,WAAO,OAAO,WAAW;AAAA;AAQpB,0BAAwB;AAI7B,kBAAc;AACZ,aAAO,KAAK,MAAO,KAAI,KAAK,YAAY,OAAS,SAAS,IAAI,UAAU;AAAA;AAG1E,WAAO,OAAO,OAAO,OAAO;AAAA;AASvB,0BAAwB,OAAO;AACpC,WAAO,4BAA4B,KAAK;AAAA;AAWnC,sBAAoB,UAAU;AACnC,QAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,WAAO,GAAG,OAAO,UAAU,QAAQ,wBAAwB,SAAU,OAAO,MAAM;AAChF,UAAI,MAAM,OAAO,OAAO,MAAM;AAC5B,eAAO,MAAM,OAAO,GAAG,MAAM,SAAS;AAAA;AAGxC,aAAO,UAAU,UAAU,SAAS,KAAK,UAAU;AAAA;AAAA;AAUhD,qBAAmB,QAAQ;AAChC,WAAO,SAAS,GAAG,OAAO,SAAS;AAAA,MACjC,cAAc;AAAA;AAAA;AAWX,oBAAkB,QAAQ,SAAS;AACxC,WAAO,yBAAU,SAAS,QAAQ;AAAA;;;Af9GpC,8BAA4B,KAAK;AAAE,WAAO,mBAAmB,QAAQ,iBAAiB,QAAQ,4BAA4B,QAAQ;AAAA;AAElI,gCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,uCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,kBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,kBAAkB,GAAG;AAAA;AAEtZ,4BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,8BAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,kBAAkB;AAAA;AAEpF,6BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAoCzK,qBAAmB,SAAS;AACjC,QAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,QAAI,YAAY;AAChB,QAAI,SAAS;AACb,QAAI,iBAAiB;AAErB,WAAO,mBAAmB,MAAM;AAC9B,UAAI,cAAc,OAAO;AACvB,iBAAS;AACT;AAAA;AAGF,UAAI,eAAe,QAAQ,eAAe,aAAa,KAAK,wBAAwB;AAClF,yBAAiB,eAAe;AAAA,aAC3B;AACL,qBAAa;AACb,yBAAiB,eAAe;AAAA;AAAA;AAIpC,WAAO;AAAA;AASF,2BAAyB,OAAO;AACrC,WAAO,OAAO,eAAe,MAAM,WAAW,MAAM;AAAA;AAS/C,2BAAyB,OAAO;AACrC,WAAO,gBAAgB,UAAU,MAAM;AAAA;AASlC,mCAAiC,OAAO;AAC7C,WAAO,CAAC,CAAC,OAAO,eAAe,MAAM;AAAA;AAYhC,mBAAiB,SAAS;AAC/B,QAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,QAAI,QAAQ,UAAU,SAAS,IAAI,UAAU,KAAK;AAClD,QAAI,QAAQ,MACR,eAAe,MAAM,cACrB,yBAAyB,MAAM;AACnC,QAAI,iBAAiB;AAErB,WAAO,mBAAmB,QAAQ,mBAAmB,UAAU,mBAAmB,OAAO;AACvF,UAAI,kBAAkB,gBAClB,WAAW,gBAAgB,UAC3B,WAAW,gBAAgB;AAE/B,UAAI,aAAa,gBAAiB,OAAM,SAAS,aAAa,MAAM,SAAS,kBAAkB;AAC7F,eAAO;AAAA;AAGT,UAAI,mBAAmB,gBACnB,OAAO,iBAAiB;AAE5B,UAAI,QAAQ,aAAa,wBAAwB;AAC/C,yBAAiB;AAAA,aACZ;AACL,yBAAiB,eAAe;AAAA;AAAA;AAIpC,WAAO;AAAA;AAWF,uBAAqB,SAAS,OAAO,OAAO;AACjD,QAAI,UAAU;AACd,QAAI,iBAAiB;AAErB,WAAO,gBAAgB;AACrB,uBAAiB,QAAQ,gBAAgB,OAAO;AAEhD,UAAI,CAAC,kBAAkB,SAAS,CAAC,MAAM,SAAS,iBAAiB;AAC/D;AAAA;AAGF,cAAQ,KAAK;AAEb,UAAI,eAAe,QAAQ,eAAe,aAAa,KAAK,wBAAwB;AAClF,yBAAiB,eAAe;AAAA,aAC3B;AACL,yBAAiB,eAAe;AAAA;AAAA;AAIpC,QAAI,SAAS,QAAQ;AACrB,WAAO,SAAS,QAAQ,SAAS,KAAK;AAAA;AAWjC,qBAAmB,OAAO,QAAQ;AACvC,QAAI,OAAO,MAAM;AACjB,QAAI,iBAAiB;AAErB,QAAI,OAAO,WAAW,UAAU;AAC9B,UAAI,MAAM,aAAa;AACrB,yBAAiB,MAAM,UAAU,MAAM,KAAK,MAAM,iBAAiB,SAAS;AAAA,aACvE;AACL,yBAAiB,MAAM,UAAU,MAAM,KAAK,MAAM,cAAc,iBAAiB,SAAS;AAAA;AAAA,WAEvF;AACL,qBAAe,KAAK;AAAA;AAGtB,WAAO,SAAS,MAAM;AACpB,UAAI,eAAe,QAAQ,QAAQ,IAAI;AACrC,eAAO;AAAA;AAGT,aAAO,KAAK;AAAA;AAGd,WAAO;AAAA;AAYF,iBAAe,SAAS;AAC7B,QAAI,IAAI;AACR,QAAI,iBAAiB;AAErB,QAAI,eAAe,iBAAiB;AAElC,aAAO,iBAAiB,eAAe,iBAAiB;AACtD,aAAK;AAAA;AAAA;AAIT,WAAO;AAAA;AAWF,kCAAgC,aAAa,SAAS,MAAM;AACjE,QAAI,iBAAiB,KAAK,cAAc,cAAc,aAAa,OAAO;AAC1E,WAAO,iBAAiB,eAAe,SAAS,WAAW;AAAA;AAG7D,MAAI;AAEJ,MAAI;AAEJ,MAAI;AAOJ,iCAA+B,YAAY;AACzC,QAAI,CAAC,cAAc,CAAC,WAAW,QAAQ;AACrC,aAAO;AAAA;AAGT,WAAO,WAAW,OAAO,SAAU,GAAG;AACpC,aAAO,CAAC,CAAC;AAAA;AAAA;AAIb,MAAI,wBAAwB;AACtB,kCAA8B,sCAAqC,cAAc;AACnF,UAAI,UAAU,aAAa,cAAc;AACzC,cAAQ,UAAU,IAAI,QAAQ;AAC9B,aAAO,QAAQ,UAAU,SAAS;AAAA;AAGpC,gBAAY,oBAAmB,SAAS,WAAW;AACjD,UAAI,QAAQ,cAAc,UAAU,OAAO,cAAc,YAAY,cAAc,IAAI;AACrF,eAAO;AAAA;AAGT,aAAO,QAAQ,UAAU,SAAS;AAAA;AAGpC,gBAAY,oBAAmB,SAAS,SAAS;AAC/C,UAAI,eAAe,QAAQ;AAC3B,UAAI,YAAY;AAEhB,UAAI,OAAO,cAAc,UAAU;AACjC,oBAAY,UAAU,MAAM;AAAA;AAG9B,kBAAY,sBAAsB;AAElC,UAAI,UAAU,SAAS,GAAG;AACxB,YAAI,4BAA4B,eAAe;AAC7C,cAAI;AAEJ,UAAC,sBAAqB,QAAQ,WAAW,IAAI,MAAM,oBAAoB,mBAAmB;AAAA,eACrF;AACL,cAAI,MAAM;AAEV,iBAAO,UAAU,MAAM;AACrB,oBAAQ,UAAU,IAAI,UAAU;AAChC,mBAAO;AAAA;AAAA;AAAA;AAAA;AAMf,mBAAe,uBAAsB,SAAS,SAAS;AACrD,UAAI,eAAe,QAAQ;AAC3B,UAAI,YAAY;AAEhB,UAAI,OAAO,cAAc,UAAU;AACjC,oBAAY,UAAU,MAAM;AAAA;AAG9B,kBAAY,sBAAsB;AAElC,UAAI,UAAU,SAAS,GAAG;AACxB,YAAI,4BAA4B,eAAe;AAC7C,cAAI;AAEJ,UAAC,uBAAsB,QAAQ,WAAW,OAAO,MAAM,qBAAqB,mBAAmB;AAAA,eAC1F;AACL,cAAI,MAAM;AAEV,iBAAO,UAAU,MAAM;AACrB,oBAAQ,UAAU,OAAO,UAAU;AACnC,mBAAO;AAAA;AAAA;AAAA;AAAA;AAAA,SAKV;AACD,4BAAwB,gCAA+B,WAAW;AACpE,aAAO,IAAI,OAAO,UAAU,OAAO,WAAW;AAAA;AAGhD,gBAAY,oBAAmB,SAAS,WAAW;AAEjD,aAAO,QAAQ,cAAc,UAAU,sBAAsB,WAAW,KAAK,QAAQ;AAAA;AAGvF,gBAAY,oBAAmB,SAAS,SAAS;AAC/C,UAAI,aAAa,QAAQ;AACzB,UAAI,YAAY;AAEhB,UAAI,OAAO,cAAc,UAAU;AACjC,oBAAY,UAAU,MAAM;AAAA;AAG9B,kBAAY,sBAAsB;AAElC,UAAI,eAAe,IAAI;AACrB,qBAAa,UAAU,KAAK;AAAA,aACvB;AACL,iBAAS,MAAM,GAAG,MAAM,UAAU,QAAQ,OAAO;AAC/C,cAAI,UAAU,QAAQ,CAAC,sBAAsB,UAAU,MAAM,KAAK,aAAa;AAC7E,0BAAc,IAAI,OAAO,UAAU;AAAA;AAAA;AAAA;AAKzC,cAAQ,YAAY;AAAA;AAGtB,mBAAe,uBAAsB,SAAS,SAAS;AACrD,UAAI,MAAM;AACV,UAAI,aAAa,QAAQ;AACzB,UAAI,YAAY;AAEhB,UAAI,OAAO,cAAc,UAAU;AACjC,oBAAY,UAAU,MAAM;AAAA;AAG9B,kBAAY,sBAAsB;AAElC,aAAO,UAAU,MAAM;AAErB,qBAAa,WAAW,QAAQ,sBAAsB,UAAU,OAAO,KAAK;AAC5E,eAAO;AAAA;AAGT,UAAI,QAAQ,cAAc,YAAY;AACpC,gBAAQ,YAAY;AAAA;AAAA;AAAA;AApHpB;AAkEA;AA+DC,oBAAkB,SAAS,WAAW;AAC3C,WAAO,UAAU,SAAS;AAAA;AASrB,oBAAkB,SAAS,WAAW;AAC3C,cAAU,SAAS;AAAA;AASd,uBAAqB,SAAS,WAAW;AAC9C,iBAAa,SAAS;AAAA;AAMjB,2BAAyB,SAAS;AACvC,QAAI,QAAQ,aAAa,GAAG;AAC1B,cAAQ,WAAW,YAAY;AAAA,eACtB,CAAC,SAAS,SAAS,SAAS,SAAS,MAAM,QAAQ,QAAQ,YAAY,IAAI;AACpF,UAAI,SAAS,QAAQ;AAErB,eAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,wBAAgB,OAAO;AAAA;AAAA;AAAA;AAatB,iBAAe,SAAS;AAC7B,QAAI;AAGJ,WAAO,QAAQ,QAAQ,WAAW;AAChC,cAAQ,YAAY;AAAA;AAAA;AAGjB,MAAI,kBAAkB;AAStB,yBAAuB,SAAS,SAAS;AAC9C,QAAI,kBAAkB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAE1F,QAAI,gBAAgB,KAAK,UAAU;AACjC,cAAQ,YAAY,kBAAkB,SAAS,WAAW;AAAA,WACrD;AACL,oBAAc,SAAS;AAAA;AAAA;AAUpB,yBAAuB,SAAS,SAAS;AAC9C,QAAI,QAAQ,QAAQ;AAEpB,QAAI,SAAS,MAAM,aAAa,KAAK,MAAM,gBAAgB,MAAM;AAE/D,UAAI,wBAAwB;AAE1B,cAAM,cAAc;AAAA,aACf;AAEL,cAAM,OAAO;AAAA;AAAA,WAEV;AAEL,YAAM;AACN,cAAQ,YAAY,QAAQ,cAAc,eAAe;AAAA;AAAA;AAUtD,qBAAmB,SAAS;AACjC,QAAI,kBAAkB,QAAQ,cAAc;AAC5C,QAAI,QAAO;AAEX,WAAO,UAAS,iBAAiB;AAE/B,UAAI,UAAS,MAAM;AAEjB,eAAO;AAAA,iBACE,MAAK,aAAa,KAAK,wBAAwB;AACxD,YAAI,MAAK,MAAM;AAIb,cAAI,MAAK,KAAK,MAAM;AAElB,mBAAO,UAAU,MAAK,KAAK;AAAA,qBAClB,MAAK,MAAM;AAEpB,mBAAO,UAAU,MAAK;AAAA;AAGxB,gBAAM,IAAI,MAAM;AAAA,eACX;AACL,iBAAO;AAAA;AAAA,iBAEA,MAAK,SAAS,MAAK,MAAM,YAAY,QAAQ;AACtD,eAAO;AAAA;AAGT,cAAO,MAAK;AAAA;AAGd,WAAO;AAAA;AASF,kBAAgB,SAAS;AAC9B,QAAI,eAAe,QAAQ;AAC3B,QAAI,aAAa,aAAa;AAC9B,QAAI,kBAAkB,aAAa;AACnC,QAAI,iBAAiB;AACrB,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AAEJ,QAAI,uBAAuB,eAAe,cAAc,eAAe,WAAW,aAAa,WAAW;AAGxG,YAAM,eAAe;AACrB,aAAO;AAAA,QACL,KAAK,IAAI,MAAO,YAAW,eAAe,gBAAgB,aAAc,iBAAgB,aAAa;AAAA,QACrG,MAAM,IAAI,OAAQ,YAAW,eAAe,gBAAgB,cAAe,iBAAgB,cAAc;AAAA;AAAA;AAI7G,iBAAa,eAAe;AAC5B,gBAAY,eAAe;AAC3B,eAAW;AAGX,WAAO,iBAAiB,eAAe,cAAc;AAEnD,UAAI,mBAAmB,aAAa,MAAM;AACxC;AAAA;AAGF,oBAAc,eAAe;AAC7B,mBAAa,eAAe;AAC5B,iBAAW;AAAA;AAIb,QAAI,YAAY,SAAS,MAAM,aAAa,SAAS;AAEnD,oBAAc,WAAW,eAAe,gBAAgB;AACxD,mBAAa,WAAW,eAAe,gBAAgB;AAAA;AAGzD,WAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK;AAAA;AAAA;AAWF,gCAA8B;AACnC,QAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,QAAI,MAAM,WAAW;AAErB,QAAI,QAAQ,QAAQ;AAElB,YAAM,WAAW,SAAS,gBAAgB;AAAA;AAG5C,WAAO;AAAA;AAUF,iCAA+B;AACpC,QAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,QAAI,MAAM,WAAW;AAErB,QAAI,QAAQ,QAAQ;AAElB,YAAM,WAAW,SAAS,gBAAgB;AAAA;AAG5C,WAAO;AAAA;AAWF,wBAAsB,SAAS;AACpC,QAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAErF,QAAI,YAAY,YAAY;AAC1B,aAAO,mBAAmB;AAAA;AAG5B,WAAO,QAAQ;AAAA;AAWV,yBAAuB,SAAS;AACrC,QAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAErF,QAAI,YAAY,YAAY;AAC1B,aAAO,oBAAoB;AAAA;AAG7B,WAAO,QAAQ;AAAA;AASV,gCAA8B,SAAS;AAC5C,QAAI,eAAe,QAAQ;AAC3B,QAAI,aAAa,eAAe,aAAa,cAAc;AAE3D,QAAI,CAAC,cAAc;AACjB,qBAAe,QAAQ,WAAW,QAAQ,WAAW;AACrD,mBAAa,aAAa;AAAA;AAG5B,QAAI,QAAQ,CAAC,QAAQ;AACrB,QAAI,4BAA4B;AAChC,QAAI,KAAK,QAAQ;AAEjB,WAAO,MAAM,GAAG,SAAS,aAAa,SAAS,IAAI;AACjD,UAAI,YAAY,GAAG,OACf,WAAW,UAAU,UACrB,YAAY,UAAU,WACtB,YAAY,UAAU;AAE1B,UAAI,CAAC,UAAU,WAAW,WAAW,SAAS,WAAW;AACvD,eAAO;AAAA,iBACE,2BAA2B;AACpC,YAAI,wBAAwB,WAAW,iBAAiB;AAExD,mBAAW,sBAAsB;AACjC,oBAAY,sBAAsB;AAClC,oBAAY,sBAAsB;AAElC,YAAI,MAAM,SAAS,aAAa,MAAM,SAAS,cAAc,MAAM,SAAS,YAAY;AACtF,iBAAO;AAAA;AAAA;AAKX,UAAI,GAAG,gBAAgB,GAAG,eAAe,KAAM,OAAM,SAAS,cAAc,MAAM,SAAS,YAAY;AACrG,eAAO;AAAA;AAGT,UAAI,GAAG,eAAe,GAAG,cAAc,KAAM,OAAM,SAAS,cAAc,MAAM,SAAS,YAAY;AACnG,eAAO;AAAA;AAGT,WAAK,GAAG;AAAA;AAGV,WAAO;AAAA;AASF,gCAA8B,MAAM;AACzC,QAAI,eAAe,KAAK;AACxB,QAAI,aAAa,aAAa;AAC9B,QAAI,KAAK,KAAK;AAEd,WAAO,MAAM,GAAG,SAAS,aAAa,SAAS,IAAI;AACjD,UAAI,GAAG,MAAM,aAAa,aAAa,GAAG,MAAM,aAAa,IAAI;AAC/D,eAAO;AAAA;AAGT,UAAI,gBAAgB,kBAAiB,IAAI;AACzC,UAAI,oBAAoB,CAAC,UAAU,UAAU;AAC7C,UAAI,WAAW,cAAc,iBAAiB;AAC9C,UAAI,YAAY,cAAc,iBAAiB;AAC/C,UAAI,YAAY,cAAc,iBAAiB;AAE/C,UAAI,kBAAkB,SAAS,aAAa,kBAAkB,SAAS,cAAc,kBAAkB,SAAS,YAAY;AAC1H,eAAO;AAAA;AAGT,WAAK,GAAG;AAAA;AAGV,WAAO;AAAA;AAYF,oBAAkB,SAAS,MAAM;AACtC,QAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAErF,QAAI,CAAC,SAAS;AACZ;AAAA,eACS,YAAY,YAAY;AACjC,UAAI,SAAS,SAAS;AACpB,eAAO,GAAG,OAAO,WAAW,YAAY;AAAA,iBAC/B,SAAS,UAAU;AAC5B,eAAO,GAAG,OAAO,WAAW,aAAa;AAAA;AAG3C;AAAA;AAGF,QAAI,YAAY,QAAQ,MAAM;AAE9B,QAAI,cAAc,MAAM,cAAc,QAAQ;AAC5C,aAAO;AAAA;AAGT,QAAI,gBAAgB,kBAAiB,SAAS;AAE9C,QAAI,cAAc,UAAU,MAAM,cAAc,UAAU,QAAQ;AAChE,aAAO,cAAc;AAAA;AAAA;AAWlB,2BAAyB,SAAS,MAAM;AAC7C,QAAI,eAAe,KAAK;AACxB,QAAI,SAAS;AAEb,QAAI,KAAK,SAAS,QAAQ,cAAc,cAAc;AACpD,UAAI,QAAQ,mBAAmB;AAC7B,iBAAS,QAAQ,kBAAkB;AAAA,iBAC1B,QAAQ,SAAS;AAC1B,iBAAS,QAAQ,QAAQ;AAAA;AAAA;AAI7B,WAAO;AAAA;AAWF,6BAA0B,SAAS;AACxC,QAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,WAAO,QAAQ,gBAAgB,WAAW,iBAAiB;AAAA;AAStD,sBAAoB,SAAS;AAClC,WAAO,QAAQ;AAAA;AASV,uBAAqB,SAAS;AACnC,QAAI,uBAAuB,QAAQ,cAAc,QAAQ,WAAW,aAAa,WAAW;AAQ1F,aAAO,QAAQ,eAAe,QAAQ,WAAW;AAAA;AAGnD,WAAO,QAAQ;AAAA;AASV,uBAAqB,SAAS;AACnC,WAAO,QAAQ,gBAAgB,QAAQ;AAAA;AASlC,sBAAoB,SAAS;AAClC,WAAO,QAAQ,eAAe,QAAQ;AAAA;AAQjC,oBAAkB,SAAS,QAAO,UAAU;AACjD,YAAQ,iBAAiB,QAAO,UAAU;AAAA;AAQrC,uBAAqB,SAAS,QAAO,UAAU;AACpD,YAAQ,oBAAoB,QAAO,UAAU;AAAA;AAUxC,4BAA0B,IAAI;AACnC,QAAI,eAAe,GAAG;AAEtB,QAAI,GAAG,gBAAgB;AACrB,aAAO,GAAG;AAAA,eACD,aAAa,WAAW;AAEjC,SAAG;AACH,UAAI,IAAI,aAAa,UAAU;AAE/B,UAAI,MAAM,MAAM;AACd,eAAO;AAAA;AAGT,UAAI,KAAK,GAAG;AACZ,UAAI,KAAK,GAAG;AACZ,SAAG,eAAe,EAAE;AACpB,SAAG,YAAY,cAAc;AAC7B,aAAO,GAAG,KAAK;AAAA;AAGjB,WAAO;AAAA;AASF,mCAAiC,IAAI;AAC1C,QAAI,eAAe,GAAG;AAEtB,QAAI,GAAG,cAAc;AACnB,aAAO,GAAG;AAAA,eACD,aAAa,WAAW;AAEjC,UAAI,IAAI,aAAa,UAAU;AAE/B,UAAI,MAAM,MAAM;AACd,eAAO;AAAA;AAGT,UAAI,KAAK,GAAG;AACZ,aAAO,GAAG,KAAK,QAAQ,EAAE,QAAQ,EAAE,KAAK;AAAA;AAG1C,WAAO;AAAA;AAUF,8BAA4B;AACjC,QAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,QAAI,eAAe,WAAW;AAC9B,QAAI,OAAO;AAEX,QAAI,WAAW,cAAc;AAC3B,aAAO,WAAW,eAAe;AAAA,eACxB,aAAa,aAAa,aAAa,UAAU,SAAS,WAAW;AAC9E,aAAO,aAAa,UAAU,cAAc;AAAA;AAG9C,WAAO;AAAA;AASF,gCAA8B;AACnC,QAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,QAAI,eAAe,WAAW;AAE9B,QAAI,WAAW,cAAc;AAC3B,UAAI,WAAW,eAAe,OAAO;AAEnC,mBAAW,eAAe;AAAA,iBACjB,WAAW,eAAe,iBAAiB;AAEpD,mBAAW,eAAe;AAAA;AAAA,eAEnB,aAAa,WAAW;AAEjC,mBAAa,UAAU;AAAA;AAAA;AAYpB,4BAA0B,SAAS,KAAK,QAAQ;AACrD,QAAI,WAAW,QAAQ;AACrB,eAAS;AAAA;AAGX,QAAI,QAAQ,mBAAmB;AAC7B,cAAQ;AAER,UAAI;AACF,gBAAQ,kBAAkB,KAAK;AAAA,eACxB,KAAP;AACA,YAAI,gBAAgB,QAAQ;AAC5B,YAAI,qBAAqB,cAAc,MAAM;AAC7C,sBAAc,MAAM,UAAU;AAC9B,gBAAQ,kBAAkB,KAAK;AAC/B,sBAAc,MAAM,UAAU;AAAA;AAAA;AAAA;AAIpC,MAAI;AAWJ,gDAA8C;AAC5C,QAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACvF,QAAI,QAAQ,aAAa,cAAc;AACvC,UAAM,MAAM,SAAS;AACrB,UAAM,MAAM,QAAQ;AACpB,QAAI,QAAQ,aAAa,cAAc;AACvC,UAAM,MAAM,YAAY;AACxB,UAAM,MAAM,SAAS;AACrB,UAAM,MAAM,OAAO;AACnB,UAAM,MAAM,WAAW;AACvB,UAAM,MAAM,WAAW;AACvB,UAAM,MAAM,MAAM;AAClB,UAAM,MAAM,QAAQ;AACpB,UAAM,MAAM,aAAa;AACzB,UAAM,YAAY;AAClB,IAAC,cAAa,QAAQ,aAAa,iBAAiB,YAAY;AAChE,QAAI,KAAK,MAAM;AACf,UAAM,MAAM,WAAW;AACvB,QAAI,KAAK,MAAM;AAEf,QAAI,OAAO,IAAI;AACb,WAAK,MAAM;AAAA;AAGb,IAAC,cAAa,QAAQ,aAAa,iBAAiB,YAAY;AAChE,WAAO,KAAK;AAAA;AAWP,+BAA6B;AAClC,QAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEvF,QAAI,yBAAyB,QAAQ;AACnC,6BAAuB,mCAAmC;AAAA;AAG5D,WAAO;AAAA;AASF,gCAA8B,SAAS;AAC5C,WAAO,QAAQ,gBAAgB,QAAQ;AAAA;AASlC,kCAAgC,SAAS;AAC9C,WAAO,QAAQ,iBAAiB,QAAQ;AAAA;AAUnC,8BAA4B,aAAa,OAAM,MAAK;AACzD,QAAI,SAAS;AACX,kBAAY,MAAM,MAAM;AACxB,kBAAY,MAAM,OAAO;AAAA,eAChB,YAAY;AACrB,kBAAY,MAAM,uBAAuB,eAAe,OAAO,OAAM,KAAK,OAAO,MAAK;AAAA,WACjF;AACL,kBAAY,MAAM,YAAY,eAAe,OAAO,OAAM,KAAK,OAAO,MAAK;AAAA;AAAA;AAQxE,2BAAyB,SAAS;AACvC,QAAI;AAEJ,QAAI,QAAQ,MAAM,aAAc,aAAY,QAAQ,MAAM,eAAe,IAAI;AAC3E,aAAO,CAAC,aAAa;AAAA,eACZ,QAAQ,MAAM,wBAAyB,aAAY,QAAQ,MAAM,0BAA0B,IAAI;AACxG,aAAO,CAAC,qBAAqB;AAAA;AAG/B,WAAO;AAAA;AAMF,6BAA2B,SAAS;AACzC,QAAI,QAAQ,MAAM,aAAa,QAAQ,MAAM,cAAc,IAAI;AAC7D,cAAQ,MAAM,YAAY;AAAA,eACjB,QAAQ,MAAM,wBAAwB,QAAQ,MAAM,yBAAyB,IAAI;AAC1F,cAAQ,MAAM,uBAAuB;AAAA;AAAA;AAWlC,mBAAiB,SAAS;AAC/B,QAAI,SAAS,CAAC,SAAS,UAAU;AACjC,WAAO,WAAY,QAAO,QAAQ,QAAQ,YAAY,MAAM,QAAQ,oBAAoB;AAAA;AAUnF,0BAAwB,SAAS;AACtC,WAAO,QAAQ,YAAY,QAAQ,aAAa,sBAAsB;AAAA;AAQjE,kCAAgC,SAAS;AAC9C,QAAI,gBAAgB,QAAQ,cAAc;AAE1C,QAAI,CAAC,eAAe,gBAAgB;AAClC,cAAQ;AAAA;AAAA;AAUL,sBAAoB,SAAS;AAClC,WAAO,CAAC,QAAQ;AAAA;;;AqB7pClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaO,sBAAoB,MAAM;AAC/B,WAAO,OAAO,SAAS;AAAA;AAUlB,oBAAkB,MAAM;AAC7B,QAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/E,QAAI,aAAa;AACjB,QAAI,SAAS;AAAA,MACX,mBAAmB;AAAA;AAErB,QAAI,YAAY;AAMhB,yBAAqB;AACnB,UAAI,QAAQ;AAEZ,eAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,aAAK,QAAQ,UAAU;AAAA;AAGzB,UAAI,QAAQ,KAAK;AACjB,UAAI,WAAW;AACf,aAAO,oBAAoB;AAE3B,UAAI,CAAC,YAAY;AACf,qBAAa;AACb,mBAAW;AAAA;AAGb,UAAI,YAAY,OAAQ,SAAQ;AAEhC,UAAI,UAAU;AACZ,eAAO,oBAAoB;AAC3B,aAAK,MAAM,MAAM;AAAA,aACZ;AACL,YAAI,WAAW;AACb,uBAAa;AAAA;AAGf,oBAAY,WAAW,WAAY;AACjC,iBAAO,oBAAoB;AAC3B,eAAK,MAAM,OAAO;AAClB,uBAAa;AACb,sBAAY;AAAA,WACX;AAAA;AAGL,aAAO;AAAA;AAGT,WAAO;AAAA;AAYF,6BAA2B,MAAM;AACtC,QAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/E,QAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/E,QAAI,eAAe,SAAS,MAAM;AAClC,QAAI,aAAa;AAKjB,0BAAsB;AACpB,mBAAa;AAAA;AAQf,kCAA8B;AAC5B,eAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC7F,aAAK,SAAS,UAAU;AAAA;AAG1B,UAAI,YAAY;AACd,sBAAc;AACd,eAAO,KAAK,MAAM,MAAM;AAAA;AAG1B,aAAO,aAAa,MAAM,MAAM;AAAA;AAGlC,uBAAmB,YAAY;AAC/B,WAAO;AAAA;AAWF,oBAAkB,MAAM;AAC7B,QAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/E,QAAI,YAAY;AAChB,QAAI;AAMJ,yBAAqB;AACnB,UAAI,SAAS;AAEb,eAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC7F,aAAK,SAAS,UAAU;AAAA;AAG1B,UAAI,WAAW;AACb,qBAAa;AAAA;AAGf,kBAAY,WAAW,WAAY;AACjC,iBAAS,KAAK,MAAM,QAAQ;AAAA,SAC3B;AACH,aAAO;AAAA;AAGT,WAAO;AAAA;AAUF,kBAAgB;AACrB,aAAS,QAAQ,UAAU,QAAQ,YAAY,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAClG,gBAAU,SAAS,UAAU;AAAA;AAG/B,QAAI,YAAY,UAAU,IACtB,WAAW,UAAU,MAAM;AAC/B,WAAO,iBAAiB;AACtB,eAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC7F,aAAK,SAAS,UAAU;AAAA;AAG1B,aAAO,YAAY,UAAU,SAAU,KAAK,KAAI;AAC9C,eAAO,IAAG;AAAA,SACT,UAAU,MAAM,MAAM;AAAA;AAAA;AAWtB,mBAAiB,MAAM;AAC5B,aAAS,QAAQ,UAAU,QAAQ,SAAS,IAAI,MAAM,QAAQ,IAAI,QAAQ,IAAI,IAAI,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACnH,aAAO,QAAQ,KAAK,UAAU;AAAA;AAGhC,WAAO,oBAAoB;AACzB,eAAS,QAAQ,UAAU,QAAQ,aAAa,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACnG,mBAAW,SAAS,UAAU;AAAA;AAGhC,aAAO,KAAK,MAAM,MAAM,OAAO,OAAO;AAAA;AAAA;AA0BnC,iBAAe,MAAM;AAC1B,QAAI,aAAa,KAAK;AAMtB,mBAAe,WAAW;AACxB,aAAO,kBAAkB;AACvB,iBAAS,QAAQ,UAAU,QAAQ,SAAS,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC/F,iBAAO,SAAS,UAAU;AAAA;AAG5B,YAAI,kBAAkB,UAAU,OAAO;AACvC,YAAI;AAEJ,YAAI,gBAAgB,UAAU,YAAY;AACxC,mBAAS,KAAK,MAAM,MAAM;AAAA,eACrB;AACL,mBAAS,MAAM;AAAA;AAGjB,eAAO;AAAA;AAAA;AAIX,WAAO,MAAM;AAAA;AAyBR,sBAAoB,MAAM;AAC/B,QAAI,aAAa,KAAK;AAMtB,mBAAe,WAAW;AACxB,aAAO,kBAAkB;AACvB,iBAAS,QAAQ,UAAU,QAAQ,SAAS,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC/F,iBAAO,SAAS,UAAU;AAAA;AAG5B,YAAI,kBAAkB,UAAU,OAAO,OAAO;AAC9C,YAAI;AAEJ,YAAI,gBAAgB,UAAU,YAAY;AACxC,mBAAS,KAAK,MAAM,MAAM;AAAA,eACrB;AACL,mBAAS,MAAM;AAAA;AAGjB,eAAO;AAAA;AAAA;AAIX,WAAO,MAAM;AAAA;AAmBR,oBAAkB,MAAM,SAAS,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;AAC1E,QAAI,UAAU,OAAO;AACnB,aAAO,KAAK,KAAK,SAAS,MAAM,MAAM,MAAM,MAAM,MAAM;AAAA,eAC/C,UAAU,OAAO;AAC1B,aAAO,KAAK,KAAK,SAAS,MAAM,MAAM,MAAM,MAAM;AAAA,eACzC,UAAU,OAAO;AAC1B,aAAO,KAAK,KAAK,SAAS,MAAM,MAAM,MAAM;AAAA,eACnC,UAAU,OAAO;AAC1B,aAAO,KAAK,KAAK,SAAS,MAAM,MAAM;AAAA,eAC7B,UAAU,OAAO;AAC1B,aAAO,KAAK,KAAK,SAAS,MAAM;AAAA,eACvB,UAAU,OAAO;AAC1B,aAAO,KAAK,KAAK,SAAS;AAAA;AAG5B,WAAO,KAAK,KAAK;AAAA;;;AChVnB,mCAAO;;;ACCP,MAAI,WAAS;AACb,MAAI,gBAAc;AAClB,MAAI,cAAc;AAClB,MAAI,yBAAyB;AAC7B,MAAI,cAAa;AACjB,MAAI,iBAAiB;AACrB,MAAI,YAAW;AACf,MAAI,eAAe;AACnB,MAAI,wBAAuB,yBAAuC;AAClE,MAAI,kBAAkB;AAEtB,MAAI,UAAU,CAAC,SAAO,iBAAiB,mBAAmB;AAC1D,MAAI;AAEJ,MAAI,UAAU,SAAU,MAAM;AAC5B,WAAO,oBAAmB;AACxB,aAAO,KAAK,MAAM,UAAU,SAAS,UAAU,KAAK;AAAA;AAAA;AAMxD,MAAI,WAAW,YAAW,WAAW,SAAS;AAK9C,MAAI,mBAAmB,SAAS;AAC9B,sBAAkB,eAAe,eAAe,SAAS,WAAW;AACpE,2BAAuB;AACnB,uBAAmB,SAAS;AAC5B,mBAAe,cAAY,iBAAiB;AAC5C,gBAAY,cAAY,iBAAiB;AACzC,gBAAY,cAAY,iBAAiB;AACzC,gBAAY,cAAY,iBAAiB;AAC7C,gBAAY,kBAAkB;AAAA,MAC5B,UAAU,SAAU,KAAK;AACvB,YAAI,UAAS,QAAQ,CAAC,aAAa,MAAM;AACvC,cAAI,QAAQ,sBAAqB;AACjC,cAAI,CAAC,MAAM;AAAQ,kBAAM,SAAS,IAAI;AACtC,iBAAO,aAAa,MAAM,QAAQ,MAAM,OAAO,UAAU;AAAA;AACzD,eAAO,aAAa,MAAM;AAAA;AAAA,MAE9B,KAAK,aAAa,KAAK;AACrB,YAAI,UAAS,QAAQ,CAAC,aAAa,MAAM;AACvC,cAAI,QAAQ,sBAAqB;AACjC,cAAI,CAAC,MAAM;AAAQ,kBAAM,SAAS,IAAI;AACtC,iBAAO,UAAU,MAAM,QAAQ,MAAM,OAAO,IAAI;AAAA;AAChD,eAAO,UAAU,MAAM;AAAA;AAAA,MAE3B,KAAK,cAAa,KAAK;AACrB,YAAI,UAAS,QAAQ,CAAC,aAAa,MAAM;AACvC,cAAI,QAAQ,sBAAqB;AACjC,cAAI,CAAC,MAAM;AAAQ,kBAAM,SAAS,IAAI;AACtC,iBAAO,UAAU,MAAM,OAAO,UAAU,MAAM,OAAO,MAAM,OAAO,IAAI;AAAA;AACtE,eAAO,UAAU,MAAM;AAAA;AAAA,MAE3B,KAAK,aAAa,KAAK,OAAO;AAC5B,YAAI,UAAS,QAAQ,CAAC,aAAa,MAAM;AACvC,cAAI,QAAQ,sBAAqB;AACjC,cAAI,CAAC,MAAM;AAAQ,kBAAM,SAAS,IAAI;AACtC,oBAAU,MAAM,OAAO,UAAU,MAAM,KAAK,SAAS,MAAM,OAAO,IAAI,KAAK;AAAA;AACtE,oBAAU,MAAM,KAAK;AAC5B,eAAO;AAAA;AAAA;AAAA;AAjCP;AACA;AACA;AACA;AACA;;;ADxBN,gCAAO;;;AELP,kCAAO;;;ACAA,MAAI,cAAc;AAQlB,MAAI,qBAAqB;;;ADdhC,2BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,6BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,wBAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,wBAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,wBAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAQ/Q,MAAI,cAAc,oBAAI;AAQtB,MAAI,4BAAyC,2BAAY;AAYvD,0CAAqC;AACnC,UAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,IAC3E,eAAe,KAAK,cACpB,eAAe,KAAK,cACpB,aAAa,KAAK,YAClB,aAAa,KAAK,YAClB,aAAa,KAAK,YAClB,kBAAkB,KAAK,iBACvB,cAAc,KAAK,aACnB,wBAAwB,KAAK,uBAC7B,wBAAwB,0BAA0B,SAAS,SAAU,OAAO;AAC9E,eAAO;AAAA,UACL;AAEJ,sBAAgB,MAAM;AAEtB,kBAAY,IAAI,MAAM;AAAA,QACpB,eAAe;AAAA,QACf;AAAA,QACA,cAAc;AAAA,QACd,eAAe;AAAA,QACf;AAAA,QACA;AAAA,QACA,yBAAyB;AAAA;AAQ3B,WAAK,QAAQ;AAOb,WAAK,cAAc;AAOnB,WAAK,YAAY;AAOjB,WAAK,gBAAgB;AACrB,WAAK,kBAAkB;AACvB,WAAK,mBAAmB;AACxB,WAAK,UAAU;AACf,WAAK,mBAAmB;AACxB,WAAK,4BAA4B;AACjC,WAAK,yBAAyB;AAC9B,WAAK;AAAA;AAOP,iBAAa,4BAA2B,CAAC;AAAA,MACvC,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,MAAM;AACV,YAAI,cAAc;AAClB,YAAI,iBAAiB;AACrB,YAAI;AACJ,YAAI,OAAO,YAAY,IAAI;AAC3B,YAAI,kBAAkB,KAAK;AAC3B,YAAI,aAAa,KAAK;AACtB,YAAI,eAAe,KAAK;AACxB,YAAI,eAAe,KAAK;AACxB,YAAI,gBAAgB,KAAK;AAEzB,iBAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACrC,wBAAc,KAAK,gBAAgB;AAEnC,cAAI,OAAO,gBAAgB,oBAAoB,oBAAoB;AACjE,iBAAK,cAAc;AAAA;AAIrB,cAAI,2BAA2B,eAAe,IAAI,gBAAgB,IAAI;AAEtE,cAAI,OAAO,gBAAgB,MAAO,qBAAoB,qBAAqB,cAAc,MAAM,eAAe,0BAA0B;AAEtI,gBAAI,KAAK,gBAAgB,QAAQ,KAAK,gBAAgB,QAAQ;AAC5D,mBAAK,cAAc;AAAA;AAGrB,iBAAK,YAAY;AAAA;AAGnB,yBAAe,KAAK;AACpB,iBAAO;AAEP,cAAI,oBAAoB,oBAAoB;AAC1C,iBAAK,YAAY;AAAA;AAGnB,cAAI,OAAO,eAAe,eAAe;AACvC,0BAAc;AACd;AAAA;AAAA;AAIJ,YAAI,KAAK,cAAc,eAAe,KAAK,aAAa;AACtD,eAAK,cAAc,KAAK;AAExB,iBAAO,KAAK,cAAc,GAAG;AAC3B,gBAAI,cAAc,eAAe,KAAK,aAAa,cAAc,eAAe,KAAK,cAAc;AAEnG,gBAAI,eAAe,iBAAiB,oBAAoB,oBAAoB;AAC1E,mBAAK,eAAe;AAAA;AAGtB,gBAAI,cAAc,eAAe;AAC/B;AAAA;AAAA;AAAA;AAKN,YAAI,oBAAoB,eAAe,KAAK,gBAAgB,QAAQ,YAAY;AAC9E,qBAAW;AAAA;AAGb,aAAK,gBAAgB,eAAe,KAAK;AAEzC,YAAI,KAAK,kBAAkB,QAAQ;AACjC,eAAK,gBAAgB;AAAA;AAIvB,YAAI,eAAe,KAAK,WAAW;AACjC,eAAK,YAAY,eAAe;AAAA;AAGlC,YAAI,KAAK,gBAAgB,MAAM;AAC7B,eAAK,QAAQ,KAAK,YAAY,KAAK,cAAc;AAAA;AAAA;AAAA,OASpD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,YAAY;AAC5C,YAAI,KAAK,YAAY,QAAQ;AAC3B;AAAA;AAGF,YAAI,oBAAoB;AACxB,aAAK,mBAAmB;AACxB,YAAI,OAAO,YAAY,IAAI;AAC3B,YAAI,eAAe,KAAK;AACxB,YAAI,SAAS;AAEb,iBAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACrC,cAAI,cAAc,KAAK,gBAAgB;AAEvC,cAAI,uBAAuB,KAAK,wBAAwB,QAAQ;AAEhE,cAAI,OAAO,yBAAyB,UAAU;AAC5C,iCAAqB;AAAA,iBAChB;AACL,sBAAU;AAAA;AAAA;AAId,YAAI,gBAAgB,oBAAoB;AAExC,YAAI,KAAK,YAAY,SAAS,gBAAgB,GAAG;AAC/C,eAAK,kBAAkB,oBAAoB;AAC3C,eAAK,yBAAyB;AAC9B,eAAK,4BAA4B;AAAA,mBACxB,KAAK,YAAY,UAAU,sBAAsB,UAAU;AACpE,cAAI,eAAe,KAAK,gBAAgB,eAAe;AAEvD,cAAI,kBAAkB,gBAAgB;AACtC,eAAK,mBAAmB,mBAAmB,IAAI,kBAAkB;AAAA;AAAA;AAAA,OAWpE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAQ,WAAW;AACzD,YAAI,SAAS;AAEb,YAAI,KAAK,YAAY,SAAS,KAAK,oBAAoB,GAAG;AACxD,mBAAS,KAAK,4BAA4B,QAAQ;AAAA,mBACzC,KAAK,YAAY,UAAU,KAAK,qBAAqB,GAAG;AACjE,mBAAS,KAAK,6BAA6B;AAAA;AAG7C,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,QAAQ,WAAW;AAC7D,YAAI,gBAAgB;AACpB,YAAI,OAAO,YAAY,IAAI;AAC3B,YAAI,eAAe,KAAK;AAExB,YAAI,CAAC,KAAK,uBAAuB,SAAS;AACxC,cAAI,iBAAiB,KAAK,MAAM,YAAY,KAAK;AACjD,cAAI,oBAAoB,KAAK,wBAAwB,gBAAgB;AAErE,cAAI,sBAAsB,QAAQ;AAChC,iBAAK,uBAAuB,UAAU;AAAA,iBACjC;AACL,iBAAK,uBAAuB,UAAU,MAAM,qBAAqB,KAAK,gBAAgB,UAAU;AAAA;AAAA;AAIpG,YAAI,KAAK,uBAAuB,WAAW,gBAAgB,KAAK,2BAA2B;AACzF,eAAK,4BAA4B;AAEjC,mBAAS,IAAI,GAAG,IAAI,KAAK,uBAAuB,QAAQ,KAAK;AAC3D,6BAAiB,KAAK,uBAAuB;AAAA;AAG/C,cAAI,kBAAkB,KAAK,kBAAkB;AAC3C,iBAAK,uBAAuB,KAAK,uBAAuB,SAAS,MAAM,KAAK,mBAAmB;AAAA;AAAA;AAInG,eAAO,KAAK,uBAAuB;AAAA;AAAA,OAQpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC,QAAQ;AACnD,YAAI,OAAO,YAAY,IAAI;AAC3B,YAAI,eAAe,KAAK;AAExB,YAAI,WAAW,eAAe,GAAG;AAC/B,iBAAO,KAAK;AAAA;AAGd,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAQ;AACtC,YAAI,QAAQ,YAAY,IAAI,MAAM,cAAc;AAEhD,YAAI,MAAM,QAAQ;AAChB,kBAAQ,2BAA0B;AAAA;AAGpC,eAAO;AAAA;AAAA,QAEP,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAMA,gBAAe;AACb,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;AAGT,MAAO,0BAAQ;;;AExUf,kCAAO;AANP,4BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,8BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,yBAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,yBAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,yBAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAQ/Q,MAAI,eAAc,oBAAI;AAQtB,MAAI,yBAAsC,2BAAY;AAWpD,uCAAkC;AAChC,UAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,IAC3E,eAAe,KAAK,cACpB,eAAe,KAAK,cACpB,aAAa,KAAK,YAClB,aAAa,KAAK,YAClB,aAAa,KAAK,YAClB,kBAAkB,KAAK,iBACvB,kBAAkB,KAAK;AAE3B,uBAAgB,MAAM;AAEtB,mBAAY,IAAI,MAAM;AAAA,QACpB,gBAAgB;AAAA,QAChB;AAAA,QACA,WAAW;AAAA,QACX,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,2BAA2B;AAAA;AAQ7B,WAAK,QAAQ;AAOb,WAAK,WAAW;AAOhB,WAAK,SAAS;AAOd,WAAK,gBAAgB;AACrB,WAAK;AAAA;AAOP,kBAAa,yBAAwB,CAAC;AAAA,MACpC,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,MAAM;AACV,YAAI,cAAc;AAClB,YAAI,iBAAiB;AACrB,YAAI,OAAO,aAAY,IAAI;AAC3B,YAAI,kBAAkB,KAAK;AAC3B,YAAI,aAAa,KAAK;AACtB,YAAI,cAAc,KAAK;AACvB,YAAI,eAAe,KAAK;AACxB,YAAI,YAAY,KAAK;AACrB,YAAI,iBAAiB,KAAK;AAC1B,YAAI,4BAA4B,KAAK,6BAA6B;AAClE,YAAI;AAEJ,iBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,sBAAY,YAAY;AAExB,cAAI,MAAM,YAAY;AACpB,wBAAY,wBAAuB;AAAA;AAGrC,cAAI,OAAO,gBAAgB,oBAAoB,oBAAoB;AACjE,iBAAK,WAAW;AAAA;AAGlB,cAAI,OAAO,gBAAgB,MAAO,qBAAoB,qBAAqB,YAAY,MAAM,eAAe,iBAAiB,2BAA2B;AAEtJ,gBAAI,KAAK,aAAa,MAAM;AAC1B,mBAAK,WAAW;AAAA;AAGlB,iBAAK,SAAS;AAAA;AAGhB,yBAAe,KAAK;AACpB,iBAAO;AAEP,cAAI,oBAAoB,oBAAoB;AAC1C,iBAAK,SAAS;AAAA;AAGhB,cAAI,OAAO,eAAe,iBAAiB,2BAA2B;AACpE,0BAAc;AACd;AAAA;AAAA;AAMJ,YAAI,KAAK,WAAW,YAAY,KAAK,aAAa;AAChD,eAAK,WAAW,KAAK;AAErB,iBAAO,KAAK,WAAW,GAAG;AAExB,gBAAI,cAAc,eAAe,KAAK,UAAU,YAAY,eAAe,KAAK,WAAW;AAE3F,gBAAI,eAAe,iBAAiB,6BAA6B,oBAAoB,oBAAoB;AACvG,mBAAK,YAAY;AAAA;AAGnB,gBAAI,eAAe,iBAAiB,2BAA2B;AAC7D;AAAA;AAAA;AAAA;AAKN,YAAI,oBAAoB,eAAe,KAAK,aAAa,QAAQ,YAAY;AAC3E,qBAAW;AAAA;AAGb,aAAK,gBAAgB,eAAe,KAAK;AAEzC,YAAI,KAAK,kBAAkB,QAAQ;AACjC,eAAK,gBAAgB;AAAA;AAIvB,YAAI,YAAY,KAAK,QAAQ;AAC3B,eAAK,SAAS,YAAY;AAAA;AAG5B,YAAI,KAAK,aAAa,MAAM;AAC1B,eAAK,QAAQ,KAAK,SAAS,KAAK,WAAW;AAAA;AAAA;AAAA,QAG7C,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAMA,gBAAe;AACb,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;AAGT,MAAO,uBAAQ;;;AC9Lf,4BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,8BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,yBAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,yBAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,yBAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAO/Q,MAAI,aAA0B,2BAAY;AACxC,yBAAoB,KAAK,QAAQ;AAC/B,uBAAgB,MAAM;AAOtB,WAAK,MAAM;AAOX,WAAK,MAAM;AAEX,UAAI,OAAO,QAAQ,eAAe,OAAO,WAAW,aAAa;AAC/D,aAAK,MAAM;AACX,aAAK,MAAM;AAAA;AAAA;AAWf,kBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,iBAAiB,KAAK;AAE3B,YAAI,KAAK,MAAM,KAAK,KAAK,MAAM,GAAG;AAChC,iBAAO;AAAA;AAIT,YAAI,KAAK,OAAO,IAAI,WAAW,gBAAgB,KAAK,OAAO,IAAI,WAAW,iBAAiB;AACzF,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,YAAY;AAClC,YAAI,eAAe,MAAM;AACvB,iBAAO;AAAA;AAGT,eAAO,KAAK,QAAQ,WAAW,OAAO,KAAK,QAAQ,WAAW;AAAA;AAAA,OAS/D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,cAAc;AAC1C,eAAO,KAAK,OAAO,aAAa,OAAO,KAAK,OAAO,aAAa;AAAA;AAAA,OASjE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,cAAc;AAC1C,eAAO,KAAK,OAAO,aAAa,OAAO,KAAK,OAAO,aAAa;AAAA;AAAA,OASjE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,cAAc;AAC1C,eAAO,KAAK,OAAO,aAAa,OAAO,KAAK,OAAO,aAAa;AAAA;AAAA,OASjE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,cAAc;AAC1C,eAAO,KAAK,OAAO,aAAa,OAAO,KAAK,OAAO,aAAa;AAAA;AAAA,OASjE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,aAAK,MAAM,KAAK,QAAQ,OAAO,KAAK,MAAM,KAAK,IAAI,KAAK,KAAK;AAC7D,aAAK,MAAM,KAAK,QAAQ,OAAO,KAAK,MAAM,KAAK,IAAI,KAAK,KAAK;AAC7D,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAiB;AACtB,eAAO,IAAI,YAAW,KAAK,KAAK,KAAK;AAAA;AAAA,OAQtC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAoB;AACzB,eAAO;AAAA,UACL,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA;AAAA;AAAA;AAKhB,WAAO;AAAA;AAGT,MAAO,iBAAQ;;;ACjKf,4BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,8BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,yBAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,yBAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,yBAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAU/Q,MAAI,YAAyB,2BAAY;AACvC,wBAAmB,WAAW;AAC5B,UAAI,QAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/E,UAAI,KAAK,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAE7E,uBAAgB,MAAM;AAStB,WAAK,YAAY,UAAU,QAAQ;AAQnC,WAAK,OAAO,MAAK;AAOjB,WAAK,KAAK,GAAG;AAAA;AAUf,kBAAa,YAAW,CAAC;AAAA,MACvB,KAAK;AAAA,MACL,OAAO,sBAAsB,QAAQ;AACnC,aAAK,YAAY,OAAO,QAAQ;AAChC,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,QAAQ;AAC9B,aAAK,OAAO,OAAO;AACnB,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,eAAe,QAAQ;AAC5B,aAAK,KAAK,OAAO;AACjB,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,KAAK;AAC3B,eAAO,KAAK,KAAK,QAAQ,QAAQ,KAAK,GAAG,QAAQ;AAAA;AAAA,OAQlD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,QAAQ,KAAK,GAAG,OAAO,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,QAAQ,KAAK,GAAG;AAAA;AAAA,OAQ/G;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,eAAO,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,OAAO,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,OAAO;AAAA;AAAA,OAQtF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,eAAO,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,OAAO,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,OAAO;AAAA;AAAA,OAQtF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,UAAU,KAAK,IAAI,KAAK,KAAK,KAAK;AACtC,YAAI,QAAQ,KAAK,IAAI,KAAK,GAAG,KAAK;AAClC,eAAO,KAAK,IAAI,SAAS,SAAS,KAAK,IAAI,SAAS,SAAS;AAAA;AAAA,OAQ9D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,YAAI,UAAU,KAAK,IAAI,KAAK,KAAK,KAAK;AACtC,YAAI,QAAQ,KAAK,IAAI,KAAK,GAAG,KAAK;AAClC,eAAO,KAAK,IAAI,SAAS,SAAS,KAAK,IAAI,SAAS,SAAS;AAAA;AAAA,OAS9D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAkB,YAAY;AACnC,YAAI,MAAM,WAAW,KACjB,MAAM,WAAW;AACrB,YAAI,UAAU,KAAK;AACnB,YAAI,cAAc,KAAK;AACvB,eAAO,QAAQ,OAAO,OAAO,YAAY,OAAO,OAAO,QAAQ,OAAO,OAAO,YAAY,OAAO;AAAA;AAAA,OASjG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,WAAW;AACvC,eAAO,KAAK,SAAS,UAAU,4BAA4B,KAAK,SAAS,UAAU;AAAA;AAAA,OASpF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,WAAW;AACjC,eAAO,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,SAAS,KAAK,IAAI,UAAU,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,SAAS,KAAK,IAAI,UAAU,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,SAAS,KAAK,IAAI,UAAU,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,SAAS,KAAK,IAAI,UAAU,KAAK,KAAK,UAAU,GAAG;AAAA;AAAA,OAU5W;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,WAAW;AAClC,eAAO,UAAU,cAAc,KAAK,4BAA4B,UAAU,cAAc,KAAK;AAAA;AAAA,OAS9F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,WAAW;AACvC,eAAO,KAAK,wBAAwB,cAAc,cAAc,KAAK,4BAA4B,cAAc;AAAA;AAAA,OAShH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,WAAW;AACvC,eAAO,KAAK,wBAAwB,cAAc,cAAc,KAAK,4BAA4B,cAAc;AAAA;AAAA,OAUhH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC,WAAW;AACnD,eAAO,KAAK,yBAAyB,OAAO,UAAU,wBAAwB,OAAO,KAAK,yBAAyB,OAAO,UAAU,yBAAyB,OAAO,KAAK,wBAAwB,OAAO,UAAU,yBAAyB,OAAO,KAAK,wBAAwB,OAAO,UAAU,wBAAwB;AAAA;AAAA,OAUzT;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,WAAW;AACjD,eAAO,KAAK,4BAA4B,OAAO,UAAU,yBAAyB,OAAO,KAAK,4BAA4B,OAAO,UAAU,4BAA4B,OAAO,KAAK,yBAAyB,OAAO,UAAU,4BAA4B,OAAO,KAAK,yBAAyB,OAAO,UAAU,yBAAyB;AAAA;AAAA,OASzU;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,YAAY;AACjC,YAAI,UAAU,KAAK;AACnB,YAAI,cAAc,KAAK;AAEvB,YAAI,WAAW,MAAM,QAAQ,OAAO,WAAW,MAAM,QAAQ,OAAO,WAAW,MAAM,YAAY,OAAO,WAAW,MAAM,YAAY,KAAK;AACxI,eAAK,OAAO,IAAI,eAAW,KAAK,IAAI,QAAQ,KAAK,WAAW,MAAM,KAAK,IAAI,QAAQ,KAAK,WAAW;AACnG,eAAK,KAAK,IAAI,eAAW,KAAK,IAAI,YAAY,KAAK,WAAW,MAAM,KAAK,IAAI,YAAY,KAAK,WAAW;AACzG,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,gBAAgB;AAC5C,YAAI,KAAK,cAAc,mBAAmB,CAAC,KAAK,SAAS,iBAAiB;AACxE,iBAAO;AAAA;AAGT,YAAI,UAAU,KAAK;AACnB,YAAI,cAAc,KAAK;AACvB,YAAI,mBAAmB,KAAK;AAC5B,YAAI,mBAAmB,eAAe;AACtC,YAAI,uBAAuB,eAAe;AAC1C,YAAI,eAAe,KAAK,IAAI,QAAQ,KAAK,iBAAiB;AAC1D,YAAI,eAAe,KAAK,IAAI,QAAQ,KAAK,iBAAiB;AAC1D,YAAI,kBAAkB,KAAK,IAAI,YAAY,KAAK,qBAAqB;AACrE,YAAI,kBAAkB,KAAK,IAAI,YAAY,KAAK,qBAAqB;AACrE,YAAI,YAAY,IAAI,eAAW,cAAc;AAC7C,YAAI,UAAU,IAAI,eAAW,iBAAiB;AAC9C,aAAK,OAAO;AACZ,aAAK,KAAK;AACV,aAAK,aAAa;AAElB,YAAI,KAAK,UAAU,QAAQ,KAAK,4BAA4B,OAAO,KAAK,2BAA2B,OAAO;AACxG,eAAK;AAAA;AAGP,YAAI,KAAK,UAAU,QAAQ,KAAK,yBAAyB,OAAO,KAAK,6BAA6B,OAAO;AACvG,eAAK;AAAA;AAGP,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,KAAK,KAAK,cAAc,KAAK,KAAK;AAEpC,iBAAO;AAAA,mBACE,KAAK,KAAK,cAAc,KAAK,KAAK;AAE3C,iBAAO;AAAA,mBACE,KAAK,KAAK,cAAc,KAAK,KAAK;AAE3C,iBAAO;AAAA,mBACE,KAAK,KAAK,cAAc,KAAK,KAAK;AAE3C,iBAAO;AAAA;AAAA;AAAA,OASV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,WAAW;AACtC,gBAAQ;AAAA,eACD;AACH,gBAAI,OAAO,CAAC,KAAK,yBAAyB,KAAK;AAC/C,iBAAK,OAAO,KAAK;AACjB,iBAAK,KAAK,KAAK;AACf;AAAA,eAEG;AACH,gBAAI,QAAQ,CAAC,KAAK,0BAA0B,KAAK;AACjD,iBAAK,OAAO,MAAM;AAClB,iBAAK,KAAK,MAAM;AAChB;AAAA,eAEG;AACH,gBAAI,QAAQ,CAAC,KAAK,6BAA6B,KAAK;AACpD,iBAAK,OAAO,MAAM;AAClB,iBAAK,KAAK,MAAM;AAChB;AAAA,eAEG;AACH,gBAAI,QAAQ,CAAC,KAAK,4BAA4B,KAAK;AACnD,iBAAK,OAAO,MAAM;AAClB,iBAAK,KAAK,MAAM;AAChB;AAAA;AAGA;AAAA;AAAA;AAAA,OASL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,eAAO,CAAC,SAAS,SAAS,QAAQ,KAAK,kBAAkB,KAAK,QAAQ;AAAA;AAAA,OAQvE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,eAAO,CAAC,SAAS,SAAS,QAAQ,KAAK,kBAAkB,KAAK,QAAQ;AAAA;AAAA,OAMvE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,YAAI,YAAY,KAAK;AAErB,gBAAQ;AAAA,eACD;AACH,iBAAK,aAAa;AAClB;AAAA,eAEG;AACH,iBAAK,aAAa;AAClB;AAAA,eAEG;AACH,iBAAK,aAAa;AAClB;AAAA,eAEG;AACH,iBAAK,aAAa;AAClB;AAAA;AAGA;AAAA;AAAA;AAAA,OAOL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC;AAC1C,YAAI,YAAY,KAAK;AAErB,gBAAQ;AAAA,eACD;AACH,iBAAK,aAAa;AAClB;AAAA,eAEG;AACH,iBAAK,aAAa;AAClB;AAAA,eAEG;AACH,iBAAK,aAAa;AAClB;AAAA,eAEG;AACH,iBAAK,aAAa;AAClB;AAAA;AAGA;AAAA;AAAA;AAAA,OAUL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,eAAO,IAAI,eAAW,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM;AAAA;AAAA,OASnG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,eAAO,IAAI,eAAW,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM;AAAA;AAAA,OASnG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,eAAO,IAAI,eAAW,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM;AAAA;AAAA,OASnG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,eAAO,IAAI,eAAW,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM;AAAA;AAAA,OASnG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,eAAO,IAAI,eAAW,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,OAQ7F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC;AAC1C,eAAO,IAAI,eAAW,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,OAS7F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,eAAO,IAAI,eAAW,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,OAS7F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,eAAO,IAAI,eAAW,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,OAU7F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,QAAQ,eAAe;AAC9C,YAAI,iBAAiB,cAAc,SAAS,WAAY,MAAK,wBAAwB,QAAQ,IAAI,eAAW,cAAc,KAAK,KAAK,cAAc,KAAK,SAAS,KAAK,yBAAyB,QAAQ,IAAI,eAAW,cAAc,KAAK,KAAK,cAAc,GAAG,SAAS,KAAK,2BAA2B,QAAQ,IAAI,eAAW,cAAc,GAAG,KAAK,cAAc,KAAK,SAAS,KAAK,4BAA4B,QAAQ,IAAI,eAAW,cAAc,GAAG,KAAK,cAAc,GAAG,QAAQ;AACrd,iBAAO;AAAA;AAGT,eAAO,OAAO,QAAQ,KAAK,4BAA4B,OAAO,QAAQ,KAAK,6BAA6B,OAAO,QAAQ,KAAK,+BAA+B,OAAO,QAAQ,KAAK;AAAA;AAAA,OAWhL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,QAAQ,eAAe;AACvD,YAAI,CAAE,mBAAkB,iBAAa;AACnC,iBAAO;AAAA;AAGT,YAAI,eAAe;AACjB,cAAI,cAAc,SAAS,SAAS;AAClC,gBAAI,KAAK,wBAAwB,QAAQ,IAAI,eAAW,cAAc,KAAK,KAAK,cAAc,KAAK,OAAO;AACxG,qBAAO,KAAK;AAAA;AAGd,gBAAI,KAAK,yBAAyB,QAAQ,IAAI,eAAW,cAAc,KAAK,KAAK,cAAc,GAAG,OAAO;AACvG,qBAAO,KAAK;AAAA;AAGd,gBAAI,KAAK,2BAA2B,QAAQ,IAAI,eAAW,cAAc,GAAG,KAAK,cAAc,KAAK,OAAO;AACzG,qBAAO,KAAK;AAAA;AAGd,gBAAI,KAAK,4BAA4B,QAAQ,IAAI,eAAW,cAAc,GAAG,KAAK,cAAc,GAAG,OAAO;AACxG,qBAAO,KAAK;AAAA;AAAA;AAAA;AAKlB,YAAI,OAAO,QAAQ,KAAK,8BAA8B;AACpD,iBAAO,KAAK;AAAA,mBACH,OAAO,QAAQ,KAAK,0BAA0B;AACvD,iBAAO,KAAK;AAAA,mBACH,OAAO,QAAQ,KAAK,2BAA2B;AACxD,iBAAO,KAAK;AAAA,mBACH,OAAO,QAAQ,KAAK,6BAA6B;AAC1D,iBAAO,KAAK;AAAA;AAAA;AAAA,OAQf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,OAAO;AAC1C,YAAI,CAAC,KAAK,cAAc,QAAQ;AAC9B,iBAAO;AAAA;AAGT,YAAI,cAAc;AAAA,UAChB,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,UACrC,QAAQ,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,UACxC,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,UACtC,OAAO,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAEzC,YAAI,eAAe;AAAA,UACjB,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,MAAM,GAAG;AAAA,UACvC,QAAQ,KAAK,IAAI,MAAM,KAAK,KAAK,MAAM,GAAG;AAAA,UAC1C,MAAM,KAAK,IAAI,MAAM,KAAK,KAAK,MAAM,GAAG;AAAA,UACxC,OAAO,KAAK,IAAI,MAAM,KAAK,KAAK,MAAM,GAAG;AAAA;AAE3C,YAAI,SAAS;AAEb,YAAI,YAAY,QAAQ,aAAa,KAAK;AACxC,iBAAO,KAAK;AAAA;AAGd,YAAI,YAAY,UAAU,aAAa,OAAO;AAC5C,iBAAO,KAAK;AAAA;AAGd,YAAI,YAAY,WAAW,aAAa,QAAQ;AAC9C,iBAAO,KAAK;AAAA;AAGd,YAAI,YAAY,SAAS,aAAa,MAAM;AAC1C,iBAAO,KAAK;AAAA;AAGd,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,YAAI,UAAU,KAAK;AACnB,YAAI,cAAc,KAAK;AACvB,YAAI,MAAM;AAEV,iBAAS,IAAI,QAAQ,KAAK,KAAK,YAAY,KAAK,KAAK;AACnD,mBAAS,IAAI,QAAQ,KAAK,KAAK,YAAY,KAAK,KAAK;AACnD,gBAAI,CAAE,MAAK,KAAK,QAAQ,KAAK,KAAK,KAAK,QAAQ,MAAM,CAAE,MAAK,GAAG,QAAQ,KAAK,KAAK,GAAG,QAAQ,IAAI;AAC9F,kBAAI,KAAK,IAAI,eAAW,GAAG;AAAA;AAAA;AAAA;AAKjC,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAkB;AACvB,YAAI,UAAU,KAAK;AACnB,YAAI,cAAc,KAAK;AACvB,YAAI,MAAM;AAEV,iBAAS,IAAI,QAAQ,KAAK,KAAK,YAAY,KAAK,KAAK;AACnD,mBAAS,IAAI,QAAQ,KAAK,KAAK,YAAY,KAAK,KAAK;AACnD,gBAAI,QAAQ,QAAQ,KAAK,QAAQ,QAAQ,GAAG;AAC1C,kBAAI,KAAK;AAAA,uBACA,YAAY,QAAQ,KAAK,YAAY,QAAQ,GAAG;AACzD,kBAAI,KAAK;AAAA,mBACJ;AACL,kBAAI,KAAK,IAAI,eAAW,GAAG;AAAA;AAAA;AAAA;AAKjC,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,UAAU;AAC/B,YAAI,UAAU,KAAK;AACnB,YAAI,cAAc,KAAK;AAEvB,iBAAS,IAAI,QAAQ,KAAK,KAAK,YAAY,KAAK,KAAK;AACnD,mBAAS,IAAI,QAAQ,KAAK,KAAK,YAAY,KAAK,KAAK;AACnD,gBAAI,iBAAiB,SAAS,GAAG;AAEjC,gBAAI,mBAAmB,OAAO;AAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,OAWP;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAiB;AACtB,eAAO,IAAI,WAAU,KAAK,WAAW,KAAK,MAAM,KAAK;AAAA;AAAA,OAStD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAoB;AACzB,eAAO;AAAA,UACL,MAAM,KAAK,KAAK;AAAA,UAChB,IAAI,KAAK,GAAG;AAAA;AAAA;AAAA;AAKlB,WAAO;AAAA;AAGT,MAAO,gBAAQ;;;ACpwBf,4BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,8BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,yBAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,yBAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,yBAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAK/Q,MAAI,eAA4B,2BAAY;AAM1C,2BAAsB,SAAQ,OAAO,SAAS;AAC5C,uBAAgB,MAAM;AAEtB,WAAK,SAAS;AACd,WAAK,QAAQ;AACb,WAAK,UAAU;AAAA;AAQjB,kBAAa,eAAc,CAAC;AAAA,MAC1B,KAAK;AAAA,MACL,OAAO,mBAAmB,QAAO;AAC/B,eAAO,SAAQ,KAAK;AAAA;AAAA,OAOrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,eAAO,SAAQ,KAAK;AAAA;AAAA,OAOrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,QAAO;AACtC,eAAO,KAAK,UAAU;AAAA;AAAA,OAOvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,QAAO;AACtC,eAAO,KAAK,YAAY;AAAA;AAAA,OAOzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,eAAO,SAAQ,KAAK;AAAA;AAAA,OAOrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAO;AACnC,eAAO,SAAQ,KAAK;AAAA;AAAA,OAOrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8CAA8C,QAAO;AAC1D,eAAO,KAAK,iBAAiB,KAAK,YAAY;AAAA;AAAA,OAO/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8CAA8C,QAAO;AAC1D,eAAO,KAAK,cAAc,KAAK,iBAAiB;AAAA;AAAA;AAIpD,WAAO;AAAA;AAGT,MAAO,iBAAQ;;;AC5Gf,4BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,8BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,yBAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,yBAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,yBAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAK/Q,MAAI,YAAyB,2BAAY;AAMvC,wBAAmB,SAAQ,OAAO,SAAS;AACzC,uBAAgB,MAAM;AAEtB,WAAK,SAAS;AACd,WAAK,QAAQ;AACb,WAAK,UAAU;AAAA;AAQjB,kBAAa,YAAW,CAAC;AAAA,MACvB,KAAK;AAAA,MACL,OAAO,mBAAmB,QAAO;AAC/B,eAAO,SAAQ,KAAK;AAAA;AAAA,OAOrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,eAAO,SAAQ,KAAK;AAAA;AAAA,OAOrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,QAAO;AACtC,eAAO,KAAK,UAAU;AAAA;AAAA,OAOvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,QAAO;AACtC,eAAO,KAAK,YAAY;AAAA;AAAA,OAOzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,eAAO,SAAQ,KAAK;AAAA;AAAA,OAOrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAO;AACnC,eAAO,SAAQ,KAAK;AAAA;AAAA,OAOrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wCAAwC,QAAO;AACpD,eAAO,KAAK,iBAAiB,KAAK,YAAY;AAAA;AAAA,OAO/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wCAAwC,QAAO;AACpD,eAAO,KAAK,cAAc,KAAK,iBAAiB;AAAA;AAAA;AAIpD,WAAO;AAAA;AAGT,MAAO,cAAQ;;;AC5Gf,MAAI,MAAI;AACR,MAAI,iBAAiB;AAIrB,MAAE,EAAE,QAAQ,UAAU,MAAM,QAAQ;AAAA,IAClC;AAAA;;;ACNF,MAAI,MAAI;AACR,MAAI,cAAa;AACjB,MAAI,SAAQ;AACZ,MAAI,OAAO;AACX,MAAI,eAAe;AACnB,MAAI,YAAW;AACf,MAAI,YAAW;AACf,MAAI,UAAS;AACb,MAAI,UAAQ;AAEZ,MAAI,kBAAkB,YAAW,WAAW;AAC5C,MAAI,mBAAkB,OAAO;AAC7B,MAAI,QAAO,GAAG;AAMd,MAAI,iBAAiB,QAAM,WAAY;AACrC,iBAAa;AAAA;AACb,WAAO,CAAE,iBAAgB,WAAY;AAAA,OAAiB,IAAI,cAAc;AAAA;AAG1E,MAAI,WAAW,CAAC,QAAM,WAAY;AAChC,oBAAgB,WAAY;AAAA;AAAA;AAG9B,MAAI,UAAS,kBAAkB;AAE/B,MAAE,EAAE,QAAQ,WAAW,MAAM,MAAM,QAAQ,SAAQ,MAAM,WAAU;AAAA,IACjE,WAAW,mBAAmB,QAAQ,MAAwB;AAC5D,mBAAa;AACb,gBAAS;AACT,UAAI,YAAY,UAAU,SAAS,IAAI,SAAS,aAAa,UAAU;AACvE,UAAI,YAAY,CAAC;AAAgB,eAAO,gBAAgB,QAAQ,MAAM;AACtE,UAAI,UAAU,WAAW;AAEvB,gBAAQ,KAAK;AAAA,eACN;AAAG,mBAAO,IAAI;AAAA,eACd;AAAG,mBAAO,IAAI,OAAO,KAAK;AAAA,eAC1B;AAAG,mBAAO,IAAI,OAAO,KAAK,IAAI,KAAK;AAAA,eACnC;AAAG,mBAAO,IAAI,OAAO,KAAK,IAAI,KAAK,IAAI,KAAK;AAAA,eAC5C;AAAG,mBAAO,IAAI,OAAO,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAAA;AAG5D,YAAI,QAAQ,CAAC;AACb,eAAM,OAAM,OAAO;AACnB,eAAO,IAAK,QAAM,MAAM,QAAQ;AAAA;AAGlC,UAAI,QAAQ,UAAU;AACtB,UAAI,WAAW,QAAO,UAAS,SAAS,QAAQ;AAChD,UAAI,SAAS,OAAM,QAAQ,UAAU;AACrC,aAAO,UAAS,UAAU,SAAS;AAAA;AAAA;;;AC3CvC,mCAAO;;;ACkBP,mCAAO;AAIP,+BAAO;;;AC9BP,kCAAO;;;ACIA,MAAI,oBAAoB;AASxB,MAAI,oBAAoB;AASxB,MAAI,uBAAuB;;;ACxBlC,4BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,8BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,yBAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,yBAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,yBAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAO/Q,MAAI,WAAwB,2BAAY;AACtC,yBAAoB;AAClB,uBAAgB,MAAM;AAOtB,WAAK,cAAc;AAOnB,WAAK,WAAW;AAOhB,WAAK,gBAAgB;AAOrB,WAAK,aAAa;AAAA;AASpB,kBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,iBAAiB,MAAM;AAC5B,aAAK,cAAc,KAAK;AACxB,aAAK,WAAW;AAAA;AAAA,OAQjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,SAAQ;AAChC,aAAK,gBAAgB,KAAK;AAC1B,aAAK,aAAa;AAAA;AAAA;AAItB,WAAO;AAAA;;;ACtET,4BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,8BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,yBAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,yBAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,yBAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAqB/Q,MAAI,cAA2B,2BAAY;AACzC,4BAAuB;AACrB,uBAAgB,MAAM;AAOtB,WAAK,OAAO,IAAI;AAQhB,WAAK,eAAe;AAOpB,WAAK,aAAa;AAAA;AAUpB,kBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAAO,iBAAiB,MAAM;AAC5B,aAAK,KAAK,QAAQ;AAAA;AAAA,OASnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,SAAQ;AAChC,aAAK,KAAK,UAAU;AAAA;AAAA,OAQrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,KAAK,sBAAsB;AAAA;AAAA,OASnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,cAAc;AACtC,eAAO,KAAK,iBAAiB;AAAA;AAAA,OAQ9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,UAAU;AAC/B,aAAK,eAAe;AACpB,iBAAS,eAAe;AACxB,aAAK,aAAa,SAAS;AAAA;AAAA,OAQ5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,UAAU;AAChC,aAAK,eAAe;AACpB,iBAAS,eAAe;AACxB,aAAK,aAAa,SAAS;AAAA;AAAA;AAI/B,WAAO;AAAA;;;AC1IT,4BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,8BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,yBAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,yBAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,yBAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAa/Q,MAAI,YAAyB,2BAAY;AACvC,wBAAmB,UAAU,WAAW,eAAe;AACrD,uBAAgB,MAAM;AAOtB,WAAK,WAAW;AAOhB,WAAK,YAAY;AAOjB,WAAK,UAAU,IAAI;AAOnB,WAAK,gBAAgB,cAAc;AAOnC,WAAK,cAAc;AAOnB,WAAK,iBAAiB;AAAA;AAWxB,kBAAa,YAAW,CAAC;AAAA,MACvB,KAAK;AAAA,MACL,OAAO,iBAAiB,MAAM;AAC5B,aAAK,QAAQ,QAAQ;AACrB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,SAAQ;AAChC,aAAK,QAAQ,UAAU;AACvB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,eAAO,KAAK,QAAQ;AAAA;AAAA,OASrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,aAAa;AACnC,eAAO,cAAc,KAAK,eAAe,SAAS,KAAK,eAAe,eAAe;AAAA;AAAA,OAQtF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,YAAI,SAAS,KAAK,eAAe;AACjC,eAAO,SAAS,IAAI,KAAK,eAAe,SAAS,KAAK;AAAA;AAAA,OAQvD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,WAAW,KAAK,UAChB,UAAU,KAAK;AACnB,YAAI,oBAAoB;AAExB,YAAI,KAAK,mBAAmB;AAC1B,cAAI,UAAU,SAAS;AAEvB,iBAAO,SAAS;AACd,gBAAI,QAAQ,YAAY,KAAK,eAAe;AAC1C,mCAAqB;AAAA,uBACZ,QAAQ,UAAU,oBAAoB;AAC/C;AAAA;AAGF,sBAAU,QAAQ;AAAA;AAAA,eAEf;AACL,8BAAoB,SAAS;AAAA;AAG/B,eAAO;AAAA;AAAA,OAOR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAiB;AACtB,aAAK,eAAe,SAAS;AAC7B,aAAK,cAAc;AACnB,YAAI,WAAW,KAAK,UAChB,UAAU,KAAK;AACnB,YAAI,WAAW,KAAK;AAEpB,YAAI,uBAAuB,QAAQ,eAC/B,WAAW,qBAAqB;AAEpC,YAAI,oBAAoB,KAAK;AAE7B,eAAO,oBAAoB,UAAU;AACnC,cAAI,UAAU,KAAK;AAEnB,cAAI,CAAC,YAAY,YAAY,QAAQ,UAAU,uBAAuB;AACpE,qBAAS,YAAY;AAAA,iBAChB;AACL,qBAAS,aAAa,SAAS,SAAS;AAAA;AAG1C,+BAAqB;AAAA;AAGvB,YAAI,sBAAsB,YAAY,QAAQ,UAAU;AAExD,eAAO,oBAAoB,UAAU;AACnC,mBAAS,YAAY,sBAAsB,SAAS,aAAa,SAAS;AAC1E,+BAAqB;AAAA;AAAA;AAAA,OAQxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,WAAW,KAAK,UAChB,UAAU,KAAK;AACnB,YAAI,cAAc,KAAK;AAEvB,YAAI,KAAK,qBAAqB,QAAQ,UAAU,uBAAuB;AACrE,yBAAe,QAAQ,WAAW;AAAA;AAGpC,YAAI,OAAO,SAAS,WAAW;AAE/B,YAAI,KAAK,YAAY,KAAK,eAAe;AACvC,cAAI,UAAU,KAAK;AACnB,mBAAS,aAAa,SAAS;AAC/B,iBAAO;AAAA;AAGT,aAAK,eAAe,KAAK;AACzB,aAAK,eAAe;AAAA;AAAA,OAOrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAe;AAAA;AAAA;AAGxB,WAAO;AAAA;;;AClOT,kCAAO;AATP,oBAAiB,KAAK;AAAE;AAA2B,WAAO,WAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,SAAQ;AAAA;AAazU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,qBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,sBAAgB,UAAU;AAAA;AAEtb,2BAAyB,GAAG,GAAG;AAAE,sBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,gBAAgB,GAAG;AAAA;AAErK,wBAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,gBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,gBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,2BAA2B,MAAM;AAAA;AAAA;AAE5Z,sCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,UAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,uBAAuB;AAAA;AAExR,kCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,uCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,2BAAyB,GAAG;AAAE,sBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,gBAAgB;AAAA;AASxM,MAAI,kBAA+B,yBAAU,YAAY;AACvD,cAAU,kBAAiB;AAE3B,QAAI,SAAS,aAAa;AAE1B,gCAA2B;AACzB,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,mBAAa,kBAAiB,CAAC;AAAA,MAC7B,KAAK;AAAA,MACL,OAYA,qBAAqB,WAAW;AAC9B,aAAK,QAAQ,QAAQ,UAAU;AAC/B,kBAAU,QAAQ,OAAO,KAAK;AAC9B,eAAO;AAAA;AAAA,OAcR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,WAAW;AACpC,aAAK,QAAQ,OAAO,UAAU;AAC9B,kBAAU,QAAQ,QAAQ,KAAK;AAC/B,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AC5FF,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAO/Q,MAAI,YAAyB,2BAAY;AACvC,wBAAmB,UAAU;AAC3B,wBAAgB,MAAM;AAOtB,WAAK,WAAW,SAAS;AAAA;AAS3B,mBAAa,YAAW,CAAC;AAAA,MACvB,KAAK;AAAA,MACL,OAAO,yBAAyB,cAAc;AAC5C,aAAK,eAAe;AAAA;AAAA,OAQrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,eAAO,KAAK,aAAa,cAAc,KAAK;AAAA;AAAA;AAIhD,WAAO;AAAA;;;AC/CT,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAS/Q,MAAI,eAA4B,2BAAY;AAC1C,2BAAsB,UAAU,UAAU;AACxC,wBAAgB,MAAM;AAUtB,WAAK,YAAY,OAAO,aAAa,WAAW,IAAI,UAAU,YAAY;AAO1E,WAAK,WAAW;AAOhB,WAAK,WAAW;AAOhB,WAAK,QAAQ;AAOb,WAAK,gBAAgB;AAAA;AASvB,mBAAa,eAAc,CAAC;AAAA,MAC1B,KAAK;AAAA,MACL,OAAO,kBAAkB,OAAO;AAC9B,YAAI,KAAK,WAAW;AAClB,eAAK,UAAU,gBAAgB,MAAM;AAAA;AAGvC,aAAK,QAAQ;AAAA;AAAA,OAMd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AAAA;AAAA,OAKxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AAAA;AAAA;AAG3B,WAAO;AAAA;;;APvFT,oBAAiB,KAAK;AAAE;AAA2B,WAAO,WAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,SAAQ;AAAA;AAczU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,sBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,uBAAgB,UAAU;AAAA;AAEtb,4BAAyB,GAAG,GAAG;AAAE,uBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,iBAAgB,GAAG;AAAA;AAErK,yBAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,iBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,iBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,4BAA2B,MAAM;AAAA;AAAA;AAE5Z,uCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,UAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,wBAAuB;AAAA;AAExR,mCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,wCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,4BAAyB,GAAG;AAAE,uBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,iBAAgB;AAAA;AAkBxM,MAAI,qBAAkC,yBAAU,eAAe;AAC7D,eAAU,qBAAoB;AAE9B,QAAI,SAAS,cAAa;AAE1B,mCAA8B;AAC5B,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAO1B,YAAM,aAAa,oBAAI;AAOvB,YAAM,iBAAiB;AACvB,aAAO;AAAA;AAUT,mBAAa,qBAAoB,CAAC;AAAA,MAChC,KAAK;AAAA,MACL,OAAO,yBAAyB,UAAU;AACxC,YAAI,SAAS;AAEb,YAAI;AAEJ,YAAI,KAAK,WAAW,IAAI,WAAW;AACjC,sBAAY,KAAK,WAAW,IAAI;AAAA,eAC3B;AACL,sBAAY,IAAI,gBAAgB,UAAU,SAAU,mBAAmB;AACrE,mBAAO,OAAO,UAAU,OAAO,OAAO,gBAAgB;AAAA,aACrD,KAAK;AACR,eAAK,WAAW,IAAI,UAAU;AAAA;AAGhC,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,cAAc,KAAK,OACnB,eAAe,YAAY,cAC3B,qBAAqB,YAAY,oBACjC,kBAAkB,YAAY,iBAC9B,OAAO,YAAY,MACnB,QAAQ,YAAY;AAExB,iBAAS,kBAAkB,GAAG,kBAAkB,cAAc,mBAAmB;AAC/E,cAAI,iBAAiB,KAAK,MAAM,oBAAoB;AACpD,cAAI,KAAK,KAAK,gBAAgB;AAC9B,eAAK,iBAAiB;AACtB,cAAI,YAAY,KAAK,gBAAgB;AACrC,cAAI,YAAY,MAAM,gBAAgB;AACtC,oBAAU,WAAW,WAAW,QAAQ,iBAAiB,UAAU,KAAK,MAAM,uBAAuB,IAAI;AAEzG,mBAAS,qBAAqB,GAAG,qBAAqB,iBAAiB,sBAAsB;AAC3F,sBAAU;AACV,gBAAI,KAAK,UAAU;AACnB,eAAG,YAAY;AACf,eAAG,gBAAgB;AACnB,+BAAmB,oBAAoB,gBAAgB,IAAI;AAAA;AAG7D,oBAAU;AAAA;AAAA;AAAA;AAKhB,WAAO;AAAA,IACP;;;AQlIF,mCAAO;AATP,oBAAiB,KAAK;AAAE;AAA2B,WAAO,WAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,SAAQ;AAAA;AAazU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,sBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,uBAAgB,UAAU;AAAA;AAEtb,4BAAyB,GAAG,GAAG;AAAE,uBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,iBAAgB,GAAG;AAAA;AAErK,yBAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,iBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,iBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,4BAA2B,MAAM;AAAA;AAAA;AAE5Z,uCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,UAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,wBAAuB;AAAA;AAExR,mCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,wCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,4BAAyB,GAAG;AAAE,uBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,iBAAgB;AAAA;AAiBxM,MAAI,wBAAqC,yBAAU,eAAe;AAChE,eAAU,wBAAuB;AAEjC,QAAI,SAAS,cAAa;AAE1B,oCAA+B,UAAU;AACvC,wBAAgB,MAAM;AAEtB,aAAO,OAAO,KAAK,MAAM,MAAM;AAAA;AAOjC,mBAAa,wBAAuB,CAAC;AAAA,MACnC,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,cAAc,KAAK,OACnB,qBAAqB,YAAY,oBACjC,kBAAkB,YAAY;AAClC,YAAI,KAAK,KAAK,SAAS;AAEvB,YAAI,oBAAoB;AACtB,cAAI,kBAAkB,KAAK,MAAM;AACjC,cAAI,qBAAqB,kBAAkB;AAE3C,mBAAS,IAAI,GAAG,MAAM,oBAAoB,IAAI,KAAK,KAAK;AACtD,iBAAK,KAAK,SAAS,WAAW;AAE9B,gBAAI,CAAC,IAAI;AACP,mBAAK,KAAK,MAAM,aAAa,cAAc;AAC3C,mBAAK,SAAS,YAAY;AAAA;AAG5B,iBAAK,gBAAgB,GAAG,WAAW;AAEnC,mBAAO,KAAK,gBAAgB,oBAAoB;AAC9C,iBAAG,YAAY,KAAK,MAAM,aAAa,cAAc;AACrD,mBAAK,iBAAiB;AAAA;AAGxB,mBAAO,KAAK,gBAAgB,oBAAoB;AAC9C,iBAAG,YAAY,GAAG;AAClB,mBAAK,iBAAiB;AAAA;AAAA;AAI1B,cAAI,sBAAsB,KAAK,SAAS,WAAW;AAEnD,cAAI,sBAAsB,oBAAoB;AAC5C,qBAAS,KAAK,oBAAoB,KAAK,qBAAqB,MAAM;AAChE,mBAAK,SAAS,YAAY,KAAK,SAAS;AAAA;AAAA;AAAA,mBAGnC,IAAI;AACb,gBAAM;AAAA;AAAA;AAAA,OAOT;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,qBAAqB,KAAK,MAAM;AAEpC,iBAAS,iBAAiB,GAAG,iBAAiB,oBAAoB,kBAAkB,GAAG;AACrF,cAAI,eAAe,KAAK,OACpB,wBAAwB,aAAa,uBACrC,kBAAkB,aAAa,iBAC/B,kBAAkB,aAAa;AACnC,cAAI,KAAK,KAAK,SAAS,WAAW;AAElC,mBAAS,sBAAsB,KAAK,iBAAiB,sBAAsB,iBAAiB,uBAAuB,GAAG;AAEpH,gBAAI,oBAAoB,KAAK,MAAM,uBAAuB;AAC1D,gBAAI,KAAK,GAAG,WAAW,sBAAsB;AAC7C,eAAG,YAAY;AACf,eAAG,gBAAgB;AACnB,kCAAsB,gBAAgB,mBAAmB,IAAI;AAAA;AAAA;AAAA;AAAA;AAMrE,WAAO;AAAA,IACP;;;AC/HF,mCAAO;AATP,oBAAiB,KAAK;AAAE;AAA2B,WAAO,WAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,SAAQ;AAAA;AAazU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,sBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,uBAAgB,UAAU;AAAA;AAEtb,4BAAyB,GAAG,GAAG;AAAE,uBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,iBAAgB,GAAG;AAAA;AAErK,yBAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,iBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,iBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,4BAA2B,MAAM;AAAA;AAAA;AAE5Z,uCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,UAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,wBAAuB;AAAA;AAExR,mCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,wCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,4BAAyB,GAAG;AAAE,uBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,iBAAgB;AAAA;AAiBxM,MAAI,mBAAgC,yBAAU,eAAe;AAC3D,eAAU,mBAAkB;AAE5B,QAAI,SAAS,cAAa;AAE1B,+BAA0B,UAAU;AAClC,wBAAgB,MAAM;AAEtB,aAAO,OAAO,KAAK,MAAM,MAAM;AAAA;AAOjC,mBAAa,mBAAkB,CAAC;AAAA,MAC9B,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,cAAc,KAAK,OACnB,kBAAkB,YAAY,iBAC9B,kBAAkB,YAAY;AAClC,YAAI,qBAAqB,kBAAkB;AAE3C,eAAO,KAAK,gBAAgB,oBAAoB;AAC9C,eAAK,SAAS,YAAY,KAAK,MAAM,aAAa,cAAc;AAChE,eAAK,iBAAiB;AAAA;AAGxB,eAAO,KAAK,gBAAgB,oBAAoB;AAC9C,eAAK,SAAS,YAAY,KAAK,SAAS;AACxC,eAAK,iBAAiB;AAAA;AAAA;AAAA,OAOzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,aAAK;AACL,YAAI,eAAe,KAAK,OACpB,kBAAkB,aAAa,iBAC/B,kBAAkB,aAAa;AAEnC,iBAAS,qBAAqB,GAAG,qBAAqB,iBAAiB,sBAAsB;AAC3F,cAAI,oBAAoB,KAAK,MAAM,uBAAuB;AAC1D,cAAI,QAAQ,KAAK,MAAM,YAAY,eAAe;AAClD,eAAK,SAAS,WAAW,oBAAoB,MAAM,QAAQ,GAAG,OAAO,OAAO;AAAA;AAI9E,iBAAS,sBAAsB,GAAG,sBAAsB,iBAAiB,uBAAuB;AAC9F,cAAI,qBAAqB,KAAK,MAAM,uBAAuB;AAE3D,cAAI,SAAS,KAAK,MAAM,YAAY,wBAAwB;AAE5D,eAAK,SAAS,WAAW,sBAAsB,iBAAiB,MAAM,QAAQ,GAAG,OAAO,QAAQ;AAAA;AAGlG,YAAI,aAAa,KAAK,SAAS;AAE/B,YAAI,YAAY;AACd,mBAAS,YAAY;AAAA;AAAA;AAAA;AAK3B,WAAO;AAAA,IACP;;;AC1GF,mCAAO;;;ACmBA,kBAAgB;AACrB,QAAI,UAAU,UAAU;AACtB,UAAI;AAEJ,MAAC,aAAY,SAAS,KAAK,MAAM,WAAW;AAAA;AAAA;AAsBzC,oBAAiB;AACtB,QAAI,UAAU,UAAU;AACtB,UAAI;AAEJ,MAAC,aAAY,SAAS,MAAM,MAAM,WAAW;AAAA;AAAA;;;AD5DjD,oBAAiB,KAAK;AAAE;AAA2B,WAAO,WAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,SAAQ;AAAA;AAezU,MAAI;AAEJ,mCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAE1K,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,sBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,uBAAgB,UAAU;AAAA;AAEtb,4BAAyB,GAAG,GAAG;AAAE,uBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,iBAAgB,GAAG;AAAA;AAErK,yBAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,iBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,iBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,4BAA2B,MAAM;AAAA;AAAA;AAE5Z,uCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,UAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,wBAAuB;AAAA;AAExR,mCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,wCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,4BAAyB,GAAG;AAAE,uBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,iBAAgB;AAAA;AAMxM,MAAI,6BAA6B;AAcjC,MAAI,eAA4B,yBAAU,eAAe;AACvD,eAAU,eAAc;AAExB,QAAI,SAAS,cAAa;AAE1B,2BAAsB,UAAU;AAC9B,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,MAAM;AAOhC,YAAM,YAAY,IAAI,UAAU,UAAU,SAAU,gBAAgB;AAClE,eAAO,MAAM,UAAU,OAAO;AAAA,SAC7B,MAAM;AACT,aAAO;AAAA;AAUT,mBAAa,eAAc,CAAC;AAAA,MAC1B,KAAK;AAAA,MACL,OAAO,yBAAyB,aAAa;AAC3C,eAAO,KAAK,UAAU,QAAQ;AAAA;AAAA,OAM/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,eAAe,KAAK,MAAM;AAE9B,YAAI,CAAC,8BAA8B,eAAe,KAAM;AACtD,uCAA6B;AAC7B,eAAK,aAAa,oBAAoB,oBAAkB,wBAAuB,CAAC,8MAAgN,CAAC;AAAA;AAGnS,aAAK,UAAU,QAAQ,cAAc,UAAU,KAAK,MAAM,oBAAoB,IAAI;AAElF,iBAAS,kBAAkB,GAAG,kBAAkB,cAAc,mBAAmB;AAC/E,eAAK,UAAU;AAAA;AAGjB,aAAK,UAAU;AAAA;AAAA;AAInB,WAAO;AAAA,IACP;;;AEnHF,mCAAO;AAFP,oBAAiB,KAAK;AAAE;AAA2B,WAAO,WAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,SAAQ;AAAA;AAczU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,sBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,uBAAgB,UAAU;AAAA;AAEtb,4BAAyB,GAAG,GAAG;AAAE,uBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,iBAAgB,GAAG;AAAA;AAErK,yBAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,iBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,iBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,4BAA2B,MAAM;AAAA;AAAA;AAE5Z,uCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,UAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,wBAAuB;AAAA;AAExR,mCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,wCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,4BAAyB,GAAG;AAAE,uBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,iBAAgB;AAAA;AAmBxM,MAAI,gBAA6B,yBAAU,eAAe;AACxD,eAAU,gBAAe;AAEzB,QAAI,SAAS,cAAa;AAE1B,8BAAyB;AACvB,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAO1B,YAAM,aAAa,oBAAI;AAOvB,YAAM,iBAAiB;AACvB,aAAO;AAAA;AAUT,mBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,yBAAyB,UAAU;AACxC,YAAI,SAAS;AAEb,YAAI;AAEJ,YAAI,KAAK,WAAW,IAAI,WAAW;AACjC,sBAAY,KAAK,WAAW,IAAI;AAAA,eAC3B;AACL,sBAAY,IAAI,gBAAgB,UAAU,SAAU,mBAAmB;AACrE,mBAAO,OAAO,UAAU,OAAO,OAAO,gBAAgB;AAAA,aACrD,KAAK;AACR,eAAK,WAAW,IAAI,UAAU;AAAA;AAGhC,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,cAAc,KAAK,OACnB,eAAe,YAAY,cAC3B,kBAAkB,YAAY,iBAC9B,OAAO,YAAY,MACnB,aAAa,YAAY;AAE7B,iBAAS,kBAAkB,GAAG,kBAAkB,cAAc,mBAAmB;AAC/E,cAAI,iBAAiB,KAAK,MAAM,oBAAoB;AACpD,cAAI,KAAK,KAAK,gBAAgB;AAC9B,eAAK,iBAAiB;AACtB,cAAI,YAAY,KAAK,gBAAgB;AACrC,cAAI,iBAAiB,WAAW,gBAAgB;AAGhD,oBAAU,YAAY,gBAAgB,QAAQ,iBAAiB,UAAU,KAAK,MAAM,uBAAuB,IAAI;AAE/G,mBAAS,qBAAqB,GAAG,qBAAqB,iBAAiB,sBAAsB;AAC3F,sBAAU;AACV,gBAAI,KAAK,UAAU;AACnB,gBAAI,oBAAoB,KAAK,MAAM,uBAAuB;AAE1D,gBAAI,CAAC,SAAS,IAAI,SAAS;AAEzB,iBAAG,YAAY;AAAA;AAGjB,eAAG,gBAAgB;AACnB,iBAAK,MAAM,aAAa,gBAAgB,mBAAmB;AAAA;AAG7D,oBAAU;AAAA;AAAA;AAAA;AAKhB,WAAO;AAAA,IACP;;;ACnJF,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AA8C/Q,MAAI,gBAA6B,2BAAY;AAC3C,4BAAuB,UAAU;AAC/B,UAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,IAC3E,eAAe,KAAK;AAExB,wBAAgB,MAAM;AAOtB,WAAK,WAAW;AAOhB,WAAK,eAAe,KAAK,SAAS;AAOlC,WAAK,aAAa;AAOlB,WAAK,gBAAgB;AAOrB,WAAK,WAAW;AAOhB,WAAK,OAAO;AAOZ,WAAK,QAAQ;AAOb,WAAK,YAAY;AAOjB,WAAK,eAAe;AAOpB,WAAK,WAAW;AAOhB,WAAK,cAAc;AAOnB,WAAK,eAAe;AAOpB,WAAK,kBAAkB;AAOvB,WAAK,qBAAqB;AAO1B,WAAK,kBAAkB;AAOvB,WAAK,wBAAwB;AAO7B,WAAK,qBAAqB;AAO1B,WAAK,eAAe;AAAA;AAUtB,mBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,sBAAsB,UAAU,aAAa;AAClD,aAAK,WAAW;AAChB,aAAK,cAAc;AAAA;AAAA,OASpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,WAAW,cAAc;AACvD,aAAK,eAAe;AACpB,aAAK,kBAAkB;AAAA;AAAA,OASxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,WAAW,cAAc;AAClD,aAAK,YAAY;AACjB,aAAK,eAAe;AAAA;AAAA,OASrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC,YAAY,eAAe;AACnE,aAAK,qBAAqB;AAC1B,aAAK,kBAAkB,WAAW;AAClC,aAAK,wBAAwB;AAC7B,aAAK,qBAAqB,cAAc;AAAA;AAAA,OAazC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,IAC5E,aAAa,MAAM,YACnB,gBAAgB,MAAM,eACtB,WAAW,MAAM,UACjB,OAAO,MAAM,MACb,QAAQ,MAAM;AAElB,mBAAW,SAAS;AACpB,sBAAc,SAAS;AACvB,iBAAS,SAAS;AAClB,aAAK,SAAS;AACd,cAAM,SAAS;AACf,aAAK,aAAa;AAClB,aAAK,gBAAgB;AACrB,aAAK,WAAW;AAChB,aAAK,OAAO;AACZ,aAAK,QAAQ;AAAA;AAAA,OASd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,UAAU;AAC5C,eAAO,KAAK,UAAU,iBAAiB;AAAA;AAAA,OASxC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,aAAa;AAClD,eAAO,KAAK,aAAa,iBAAiB;AAAA;AAAA,OAM3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,aAAK,SAAS;AACd,aAAK,cAAc;AACnB,aAAK,KAAK;AACV,aAAK,WAAW;AAChB,aAAK,cAAc;AACnB,aAAK,KAAK;AACV,aAAK,WAAW;AAChB,aAAK,MAAM;AAGX,aAAK,YAAY;AACjB,aAAK,SAAS;AACd,YAAI,eAAe,KAAK,cACpB,OAAO,KAAK;AAEhB,iBAAS,kBAAkB,GAAG,kBAAkB,cAAc,mBAAmB;AAC/E,cAAI,KAAK,KAAK,gBAAgB;AAE9B,cAAI,GAAG,YAAY;AACjB,gBAAI,iBAAiB,KAAK,oBAAoB;AAC9C,gBAAI,YAAY,KAAK,SAAS,UAAU;AAExC,gBAAI,WAAW;AAEb,iBAAG,WAAW,MAAM,SAAS,GAAG,OAAO,YAAY,GAAG;AAAA,mBACjD;AACL,iBAAG,WAAW,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAOvC,WAAO;AAAA;;;AC9UT,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAc/Q,MAAI,YAAwB,2BAAY;AACtC,yBAAoB;AAClB,UAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,IAC3E,QAAQ,KAAK,OACb,QAAQ,KAAK,OACb,WAAW,KAAK,UAChB,QAAQ,KAAK,OACb,WAAW,KAAK,UAChB,cAAc,KAAK,aACnB,eAAe,KAAK;AAExB,wBAAgB,MAAM;AAOtB,WAAK,WAAW,IAAI,cAAc,OAAO;AAAA,QACvC;AAAA;AAEF,WAAK,SAAS,aAAa;AAAA,QACzB,YAAY,IAAI;AAAA,QAChB,eAAe,IAAI,sBAAsB;AAAA,QACzC,UAAU,IAAI,iBAAiB;AAAA,QAC/B,MAAM,IAAI,aAAa;AAAA,QACvB,OAAO,IAAI;AAAA;AAEb,WAAK,SAAS,aAAa,UAAU;AAAA;AAYvC,mBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,oBAAoB,WAAW,cAAc;AAClD,aAAK,SAAS,WAAW,WAAW;AACpC,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,WAAW,cAAc;AACvD,aAAK,SAAS,gBAAgB,WAAW;AACzC,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC,YAAY,eAAe;AACnE,aAAK,SAAS,0BAA0B,YAAY;AACpD,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,aAAK,SAAS;AAAA;AAAA,OAMf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,aAAK,SAAS;AAAA;AAAA;AAIlB,WAAO;AAAA;;;AC9GT,mCAAO;;;ACDP,MAAI,cAAa;AACjB,MAAI,oBAAmB;AAIvB,cAAW,OAAO,SAAU,MAAM;AAChC,WAAO,gBAAe;AAAE,aAAO,KAAK,MAAM,UAAU,SAAS,UAAU,KAAK;AAAA;AAAA,KAC3E;;;ADRH,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAWzU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAS/Q,MAAI,cAA2B,2BAAY;AACzC,0BAAqB,KAAK;AACxB,wBAAgB,MAAM;AAEtB,WAAK,MAAM;AACX,WAAK,eAAe,oBAAI;AAAA;AAU1B,mBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAAO,kBAAkB,aAAa;AACpC,YAAI,QAAQ,KAAK,IAAI,WAAW,SAAS;AAEzC,YAAI,OAAO,UAAU,YAAY;AAC/B,kBAAQ,MAAM;AAAA,mBACL,UAAQ,WAAW,UAAU;AACtC,kBAAQ,MAAM;AAAA;AAGhB,eAAO,SAAS,KAAK,IAAI,WAAW,SAAS;AAAA;AAAA,OAS9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,aAAa;AACnD,YAAI,cAAc,KAAK,SAAS;AAChC,YAAI,aAAa,KAAK,IAAI,WAAW;AACrC,YAAI,QAAQ,gBAAgB,QAAQ,gBAAgB,SAAS,cAAc,KAAK,IAAI,WAAW,SAAS;AAExG,YAAI,YAAY;AACd,cAAI,iBAAiB,WAAW,wBAAwB,aAAa;AAErE,cAAI,gBAAgB;AAClB,oBAAQ;AAAA;AAAA;AAIZ,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,OAAO;AACrC,YAAI,SAAS,KAAK,IAAI,WAAW,SAAS;AAC1C,YAAI,kBAAkB,KAAK,IAAI,WAAW,uBAAuB;AAEjE,YAAI,oBAAoB,QAAQ;AAC9B,mBAAS,SAAS,KAAK,IAAI,QAAQ,mBAAmB;AAAA;AAGxD,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,aAAa;AAC1C,eAAO,KAAK,aAAa,IAAI,KAAK,IAAI,QAAQ,aAAa,iBAAiB;AAAA;AAAA,OAM7E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,MAAM,KAAK;AACf,YAAI,UAAU,IAAI,SACd,aAAa,IAAI,YACjB,cAAc,IAAI;AACtB,YAAI,aAAa,cAAc,YAAY,QAAQ,SAAS,QAAQ;AACpE,YAAI,wBAAwB,WAAW,eAAe,WAAW,eAAe,sBAAsB;AACtG,YAAI,wBAAwB,IAAI,WAAW;AAC3C,mBAAW,wBAAwB,kBAAkB,WAAW,qBAAqB;AACrF,gCAAwB,IAAI,WAAW,0BAA0B;AAEjE,YAAI,0BAA0B,QAAQ,0BAA0B,QAAQ;AACtE,cAAI,kBAAkB,IAAI,WAAW,cAAc;AACnD,cAAI,qBAAqB,IAAI,WAAW;AAExC,mBAAS,qBAAqB,GAAG,qBAAqB,iBAAiB,sBAAsB;AAC3F,gBAAI,QAAQ,MAAM,QAAQ,yBAAyB,sBAAsB,sBAAsB;AAC/F,oBAAQ,UAAU,QAAQ,UAAU,SAAS,qBAAqB;AAClE,iBAAK,aAAa,IAAI,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAMlD,WAAO;AAAA;;;AEzIT,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAO/Q,MAAI,WAAwB,2BAAY;AACtC,uBAAkB,KAAK;AACrB,wBAAgB,MAAM;AAEtB,WAAK,MAAM;AAAA;AAUb,mBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,mBAAmB,aAAa;AACrC,YAAI,SAAS,KAAK,IAAI,WAAW,SAAS,UAAU;AACpD,YAAI,kBAAkB,KAAK,IAAI,WAAW,cAAc;AAExD,YAAI,oBAAoB,QAAQ;AAC9B,mBAAS,WAAW,SAAS,kBAAkB,KAAK,IAAI,QAAQ;AAAA;AAGlE,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;;;ACvCF,MAAI,YAAY;AAChB,MAAI,eAAe;AACnB,MAAI,aAAa;AACjB,MAAI,wBAAwB;AAC5B,MAAI,2BAA2B;AAC/B,MAAI,cAAc,CAAC,WAAW,cAAc,YAAY,uBAAuB;;;ACHtF,MAAI,qBAAqB;AAQlB,+BAA6B,cAAc;AAChD,QAAI,cAAc,aAAa;AAE/B,QAAI,YAAY,QAAQ,iBAAiB,IAAI;AAC3C,YAAM,IAAI,MAAM,wBAAwB,OAAO,aAAa;AAAA;AAG9D,QAAI,CAAC,WAAW,cAAc;AAC5B,yBAAmB,eAAe;AAAA;AAAA;AAW/B,yBAAuB,MAAM,KAAK;AACvC,WAAO,IAAI,mBAAmB,MAAM;AAAA;AAS/B,sBAAoB,MAAM;AAC/B,WAAO,mBAAmB,UAAU;AAAA;AAU/B,2BAAyB,SAAS,MAAM;AAC7C,QAAI,CAAC,WAAW,CAAC,mBAAmB,OAAO;AACzC,aAAO;AAAA;AAGT,WAAO,mBAAmB,mBAAmB;AAAA;;;ApBvD/C,+BAA4B,KAAK;AAAE,WAAO,oBAAmB,QAAQ,kBAAiB,QAAQ,6BAA4B,QAAQ;AAAA;AAElI,iCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,6BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,+BAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,mBAAkB;AAAA;AAEpF,0BAAwB,KAAK,GAAG;AAAE,WAAO,gBAAgB,QAAQ,sBAAsB,KAAK,MAAM,6BAA4B,KAAK,MAAM;AAAA;AAEzI,8BAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,wCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,mBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,mBAAkB,GAAG;AAAA;AAEtZ,8BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,iCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,2BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAgB/D,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAgB/Q,MAAI,QAAqB,2BAAY;AAKnC,oBAAe,aAAa,OAAO;AACjC,UAAI,QAAQ;AAEZ,wBAAgB,MAAM;AAOtB,WAAK,WAAW,CAAC,YAAY;AAE7B,WAAK,MAAM;AAEX,WAAK,WAAW,KAAK;AACrB,WAAK,QAAQ;AACb,WAAK,QAAQ;AACb,WAAK,QAAQ;AACb,WAAK,WAAW;AAChB,WAAK,cAAc;AACnB,WAAK,eAAe;AAOpB,WAAK,iBAAiB;AAOtB,WAAK,gBAAgB;AAQrB,WAAK,iBAAiB;AACtB,sBAAgB,KAAK;AACrB,WAAK,WAAW,KAAK,eAAe,KAAK;AACzC,WAAK,QAAQ,KAAK,YAAY,KAAK;AACnC,WAAK,SAAS,KAAK,aAAa,KAAK;AACrC,WAAK,gBAAgB,KAAK,OAAO;AAEjC,UAAI,KAAK,UAAU;AACjB,aAAK;AAAA;AAGP,WAAK;AACL,WAAK,YAAY;AACjB,WAAK,eAAe;AACpB,WAAK,qBAAqB;AAC1B,UAAI,qBAAqB,KAAK,IAAI,WAAW,SAAS;AAEtD,WAAK,IAAI,WAAW,SAAS,iBAAiB,WAAY;AACxD,eAAO,MAAM,sBAAsB;AAAA;AAGrC,WAAK,WAAW,IAAI,SAAS,KAAK;AAClC,WAAK,cAAc,IAAI,YAAY,KAAK;AACxC,WAAK,gBAAgB,IAAI,UAAS;AAAA,QAChC,OAAO,KAAK;AAAA,QACZ,OAAO,KAAK;AAAA,QACZ,UAAU,KAAK;AAAA,QACf,OAAO,KAAK;AAAA,QACZ,UAAU,KAAK;AAAA,QACf,aAAa,KAAK;AAAA,QAClB,cAAc,KAAK,IAAI,WAAW,SAAS;AAAA;AAAA;AAY/C,mBAAa,QAAO,CAAC;AAAA,MACnB,KAAK;AAAA,MACL,OAAO,YAAY,iBAAiB;AAClC,eAAO,gBAAgB,KAAK,IAAI,cAAc;AAAA;AAAA,OAM/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,eAAe,KAAK,IAAI;AAC5B,aAAK,QAAQ,KAAK,MAAM,cAAc;AAEtC,YAAI,CAAC,KAAK,OAAO;AACf,eAAK,QAAQ,aAAa,cAAc;AACxC,eAAK,MAAM,YAAY,KAAK;AAAA;AAG9B,aAAK,QAAQ,KAAK,MAAM,cAAc;AAEtC,YAAI,CAAC,KAAK,OAAO;AACf,eAAK,QAAQ,aAAa,cAAc;AACxC,eAAK,MAAM,aAAa,KAAK,OAAO,KAAK;AAAA;AAG3C,aAAK,WAAW,KAAK,MAAM,cAAc;AAEzC,YAAI,CAAC,KAAK,UAAU;AAClB,eAAK,WAAW,aAAa,cAAc;AAC3C,eAAK,MAAM,aAAa,KAAK,UAAU,KAAK;AAAA;AAG9C,YAAI,KAAK,IAAI,WAAW,iBAAiB,UAAU,CAAC,KAAK,MAAM,WAAW,QAAQ;AAChF,eAAK,MAAM,YAAY,aAAa,cAAc;AAAA;AAAA;AAAA,OAQrD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,OAAO;AACpC,YAAI,SAAS,MAAM;AACnB,YAAI;AAEJ,YAAI,CAAC,UAAU,OAAO,aAAa,KAAK,gBAAgB,CAAC,SAAS,QAAQ,aAAa;AACrF,qBAAW,KAAK,IAAI,aAAa,cAAc;AAC/C,mBAAS,YAAY;AAErB,cAAI,QAAQ;AAEV,mBAAO,aAAa,UAAU;AAAA;AAGhC,mBAAS,YAAY;AAAA;AAGvB,iBAAS,MAAM,WAAW;AAC1B,eAAO;AAAA;AAAA,OAOR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,UAAU;AACpC,YAAI,SAAS,SAAS;AACtB,YAAI;AAEJ,YAAI,CAAC,UAAU,OAAO,aAAa,KAAK,gBAAgB,CAAC,SAAS,QAAQ,aAAa;AACrF,kBAAQ,KAAK,IAAI,aAAa,cAAc;AAC5C,gBAAM,YAAY;AAElB,cAAI,QAAQ;AAEV,mBAAO,aAAa,OAAO;AAAA;AAG7B,gBAAM,YAAY;AAAA;AAGpB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,OAAO;AAClC,YAAI,SAAS,MAAM;AACnB,YAAI;AAEJ,YAAI,CAAC,UAAU,OAAO,aAAa,KAAK,gBAAgB,CAAC,SAAS,QAAQ,aAAa;AACrF,oBAAS,KAAK,IAAI,aAAa,cAAc;AAC7C,kBAAO,MAAM,WAAW;AACxB,kBAAO,YAAY;AAEnB,cAAI,QAAQ;AAEV,mBAAO,aAAa,SAAQ;AAAA;AAG9B,cAAI,KAAK,UAAU;AACjB,oBAAO,WAAW,aAAa;AAAA;AAGjC,kBAAO,YAAY;AAAA;AAGrB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACnF,YAAI,MAAM,KAAK;AACf,YAAI,aAAa,IAAI,YACjB,aAAa,IAAI;AACrB,YAAI,YAAY,IAAI,WAAW;AAC/B,YAAI,eAAe,IAAI,WAAW;AAClC,YAAI,aAAa,IAAI,WAAW;AAChC,YAAI,kBAAkB,WAAW;AACjC,YAAI,gBAAgB,IAAI,WAAW;AACnC,YAAI,qBAAqB,cAAc;AACvC,YAAI,aAAa;AACjB,YAAI,cAAc;AAElB,YAAI,KAAK,UAAU;AACjB,eAAK,eAAe,OAAO,KAAK;AAChC,wBAAc,WAAW,wBAAwB;AAEjD,cAAI,mBAAmB,CAAC,IAAI,WAAW,qBAAqB;AAC1D,gBAAI,gBAAgB,WAAW,YAAY;AAC3C,gBAAI,gBAAgB,KAAK;AACzB,iBAAK,qBAAqB,gBAAgB;AAE1C,gBAAI,kBAAkB,KAAK,oBAAoB;AAC7C,4BAAc;AAAA;AAAA;AAAA;AAKpB,YAAI,KAAK,UAAU;AACjB,uBAAa,WAAW;AAAA;AAG1B,YAAI,aAAa;AACf,cAAI,KAAK,UAAU;AAEjB,uBAAW;AAAA;AAGb,cAAI,YAAY;AACd,uBAAW,QAAQ;AAAA;AAAA,eAEhB;AACL,cAAI,KAAK,UAAU;AACjB,iBAAK,cAAc,OAAO,KAAK;AAAA,iBAC1B;AACL,iBAAK,cAAc,KAAK,IAAI,YAAY,QAAQ;AAAA;AAGlD,cAAI,WAAW,YAAY,IAAI,KAAK,wBAAwB;AAC5D,cAAI,cAAc,eAAe,IAAI,KAAK,2BAA2B;AACrE,eAAK,YAAY,IAAI,YAAU,UAAU,WAAW;AACpD,eAAK,eAAe,IAAI,eAAa,aAAa,cAAc;AAChE,cAAI,gBAAgB;AAEpB,cAAI,KAAK,UAAU;AACjB,iBAAK;AACL,gBAAI,aAAa;AACjB,iBAAK,IAAI,WAAW,cAAc,MAAM;AACxC,4BAAgB,WAAW,eAAe;AAAA;AAG5C,cAAI,eAAe;AACjB,iBAAK,cAAc,0BAA0B,YAAY;AAEzD,gBAAI,KAAK,GAAG,iBAAiB,KAAK,GAAG,2BAA2B;AAE9D,mBAAK,cAAc,0BAA0B,YAAY;AAAA;AAG3D,iBAAK;AACL,iBAAK,cAAc,gBAAgB,KAAK,wBAAwB,KAAK,2BAA2B,WAAW,KAAK,WAAW,KAAK,cAAc;AAC9I,gBAAI;AAEJ,gBAAI,KAAK,UAAU;AACjB,+BAAiB,KAAK,IAAI,WAAW;AACrC,mBAAK,IAAI,WAAW,iBAAiB;AACrC,mBAAK;AAAA;AAGP,iBAAK;AAEL,gBAAI,KAAK,YAAY,KAAK,GAAG,eAAe;AAC1C,mBAAK;AAAA;AAGP,gBAAI,KAAK,UAAU;AACjB,mBAAK,IAAI,WAAW;AACpB,mBAAK,IAAI,WAAW,QAAQ;AAC5B,mBAAK,IAAI,WAAW;AACpB,kBAAI,aAAa,WAAW,KAAK;AACjC,kBAAI,aAAa,WAAW,KAAK;AAEjC,kBAAI,eAAe,KAAK,eAAe,YAAY;AAEjD,qBAAK,YAAY;AACjB,qBAAK,cAAc,SAAS,SAAS;AAAA;AAGvC,kBAAI,mBAAmB,KAAK,IAAI,WAAW,qBAAqB;AAE9D,qBAAK,IAAI,WAAW,iBAAiB;AACrC,qBAAK,YAAY;AACjB,qBAAK,cAAc,SAAS,SAAS;AAAA;AAGvC,mBAAK,IAAI,WAAW,UAAU;AAAA,uBACrB,KAAK,GAAG,eAAe;AAChC,mBAAK,IAAI,YAAY,WAAW;AAAA;AAAA;AAAA;AAKtC,YAAI,KAAK,UAAU;AACjB,cAAI,kBAAkB,WAAW,WAAW;AAE5C,cAAI,WAAW,cAAc,OAAO;AAClC,8BAAkB,WAAW,cAAc,wBAAwB;AAAA;AAGrE,4BAAkB,WAAW,YAAY,wBAAwB;AAEjE,cAAI,WAAW,sBAAsB;AACnC,uBAAW,qBAAqB;AAAA;AAGlC,cAAI,WAAW,2BAA2B,WAAW,wBAAwB,OAAO;AAClF,uBAAW,wBAAwB;AAAA;AAGrC,cAAI,iBAAiB;AAInB,uBAAW;AACX,uBAAW;AAAA;AAAA;AAIf,aAAK,kBAAkB;AAEvB,YAAI,YAAY;AACd,qBAAW;AAAA;AAGb,YAAI,QAAQ;AACZ,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,KAAK;AAC/C,YAAI,iBAAiB,KAAK,IAAI,QAAQ,aAAa,iBAAiB;AACpE,YAAI,QAAQ,KAAK,IAAI,WAAW,iBAAiB;AACjD,YAAI,mBAAmB,KAAK,IAAI,WAAW,SAAS;AACpD,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI,4BAA4B,KAAK,IAAI,WAAW,yBAAyB;AAE7E,eAAO,OAAO;AACZ,mBAAS;AACT,oCAA0B,KAAK,IAAI,QAAQ,sBAAsB;AACjE,0BAAgB,KAAK,IAAI,QAAQ,gBAAgB,gBAAgB;AAEjE,cAAI,CAAC,eAAe;AAElB;AAAA;AAGF,gCAAsB,YAAY;AAElC,cAAI,CAAC,2BAA2B,mBAAmB,uBAAuB,0BAA0B,qBAAqB;AACvH,iBAAK,IAAI,WAAW,uBAAuB,SAAS;AAAA;AAGtD,cAAI,MAAM,QAAQ,4BAA4B;AAC5C,gBAAI,0BAA0B,WAAW,QAAQ,0BAA0B,WAAW,QAAQ;AAC5F,mBAAK,IAAI,WAAW,uBAAuB,SAAS,0BAA0B;AAAA;AAAA,qBAEvE,CAAC,MAAM,4BAA4B;AAC5C,iBAAK,IAAI,WAAW,uBAAuB,SAAS;AAAA;AAGtD,cAAI,KAAK,IAAI,WAAW,uBAAuB,SAAU,2BAA0B,UAAU,4BAA4B;AACvH,iBAAK,IAAI,WAAW,uBAAuB,SAAS,0BAA0B,UAAU;AAAA;AAAA;AAAA;AAAA,OAQ7F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC;AAC1C,YAAI,MAAM,KAAK;AACf,YAAI,WAAW,IAAI,QAAQ,MAAM;AACjC,YAAI,yBAAyB,IAAI,WAAW;AAC5C,YAAI,gBAAgB,IAAI,WAAW;AAEnC,iBAAS,IAAI,GAAG,MAAM,cAAc,QAAQ,IAAI,KAAK,KAAK;AACxD,cAAI,uBAAuB,IAAI;AAC7B,gBAAI,CAAC,SAAS,MAAM,SAAS,GAAG,WAAW,WAAW,GAAG;AACvD;AAAA;AAGF,qBAAS,GAAG,WAAW,GAAG,MAAM,SAAS,GAAG,OAAO,uBAAuB,IAAI;AAAA;AAAA;AAAA;AAAA,OASnF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,MAAM,KAAK;AAEf,YAAI,CAAC,KAAK,YAAY,CAAC,KAAK,GAAG,eAAe;AAC5C;AAAA;AAGF,YAAI,CAAC,IAAI,WAAW,0BAA0B;AAC5C,cAAI,eAAe,KAAK;AAExB,mBAAS,kBAAkB,GAAG,kBAAkB,cAAc,mBAAmB;AAC/E,gBAAI,YAAY,KAAK,UAAU,iBAAiB;AAEhD,gBAAI,IAAI,WAAW,iBAAiB,IAAI,WAAW,cAAc,YAAY;AAC3E,kBAAI,WAAW,cAAc,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,OASjD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,WAAW;AAC9C,YAAI,QAAQ,KAAK,MAAM,iBAAiB,IAAI,OAAO;AAEnD,iBAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,sBAAY,MAAM,IAAI;AAAA;AAAA;AAAA,OASzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,UAAU;AAC1C,YAAI,MAAM,KAAK;AAEf,YAAI,CAAC,IAAI,YAAY;AACnB;AAAA;AAGF,YAAI,aAAa,MAAM,KAAK,IAAI;AAChC,YAAI,MAAM,WAAW;AAErB,YAAI,UAAU;AACZ,cAAI,kBAAkB;AAEtB,mBAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,gBAAI,wBAAwB,WAAW,GAAG,UACtC,2BAA2B,sBAAsB,0BACjD,wBAAwB,sBAAsB,uBAC9C,2BAA2B,sBAAsB;AACrD,gBAAI,aAAa,WAAW,GAAG;AAC/B,gBAAI,mBAAmB,WAAW;AAElC,qBAAS,IAAI,GAAG,IAAI,kBAAkB,KAAK;AACzC,kBAAI,CAAC,gBAAgB,SAAS,WAAW,KAAK;AAC5C,gCAAgB,KAAK,WAAW;AAAA;AAAA;AAIpC,gBAAI,4BAA4B,CAAC,gBAAgB,SAAS,2BAA2B;AACnF,8BAAgB,KAAK;AAAA;AAGvB,gBAAI,yBAAyB,CAAC,gBAAgB,SAAS,wBAAwB;AAC7E,8BAAgB,KAAK;AAAA;AAGvB,gBAAI,4BAA4B,CAAC,gBAAgB,SAAS,2BAA2B;AACnF,8BAAgB,KAAK;AAAA;AAAA;AAIzB,cAAI,4BAA4B,IAAI,WAAW;AAE/C,cAAI,MAAM,QAAQ,4BAA4B;AAC5C,qBAAS,KAAK,GAAG,KAAK,0BAA0B,QAAQ,MAAM;AAC5D,8BAAgB,KAAK,0BAA0B;AAAA;AAAA;AAInD,cAAI,wBAAwB,gBAAgB;AAE5C,mBAAS,MAAM,GAAG,MAAM,uBAAuB,OAAO;AAEpD,iBAAK,qBAAqB,gBAAgB;AAAA;AAAA;AAI9C,iBAAS,MAAM,GAAG,MAAM,KAAK,OAAO;AAClC,qBAAW,KAAK,KAAK,KAAK;AAAA;AAAA;AAAA,OAuB7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,QAAQ;AAC9B,YAAI,MAAM,OAAO;AACjB,YAAI,SAAS,OAAO;AACpB,YAAI,aAAa,KAAK,IAAI,WAAW,yBAAyB,KAAK;AAEnE,YAAI,cAAc,MAAM,QAAQ,aAAa;AAC3C,cAAI,cAAc,eAAe,YAAY;AAE7C,gBAAM,YAAY;AAClB,mBAAS,YAAY;AAAA;AAGvB,YAAI,KAAK,wBAAwB,MAAM;AAErC,iBAAO;AAAA,mBACE,KAAK,uBAAuB,MAAM;AAE3C,iBAAO;AAAA,mBACE,KAAK,8BAA8B,SAAS;AAErD,iBAAO;AAAA,mBACE,KAAK,6BAA6B,SAAS;AAEpD,iBAAO;AAAA;AAGT,YAAI;AAEJ,YAAI,MAAM,GAAG;AACX,eAAK,KAAK,MAAM,WAAW,KAAK,UAAU,+BAA+B;AAAA,eACpE;AACL,eAAK,KAAK,MAAM,WAAW,KAAK,UAAU,iBAAiB;AAAA;AAG7D,YAAI,CAAC,MAAM,OAAO,GAAG;AACnB,gBAAM,IAAI,MAAM;AAAA;AAGlB,YAAI,KAAK,GAAG,WAAW,KAAK,aAAa,qCAAqC;AAE9E,YAAI,CAAC,MAAM,UAAU,GAAG;AACtB,gBAAM,IAAI,MAAM;AAAA;AAGlB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,KAAK;AACnC,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,YAAI,KAAK,KAAK,MAAM,WAAW;AAC/B,eAAO,OAAO,QAAQ,OAAO,SAAS,SAAS,GAAG,WAAW,KAAK,aAAa,qCAAqC;AAAA;AAAA,OASrH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,QAAQ;AACvC,YAAI,MAAM;AACV,YAAI,gBAAgB,KAAK,aAAa,qCAAqC;AAC3E,aAAK,MAAM,WAAW,QAAQ,SAAU,IAAI;AAC1C,cAAI,KAAK,GAAG,WAAW;AAEvB,cAAI,IAAI;AACN,gBAAI,KAAK;AAAA;AAAA;AAGb,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,KAAK;AAChC,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEhF,YAAI,KAAK,aAAa,qCAAqC,OAAO,GAAG;AACnE;AAAA;AAGF,YAAI,kBAAkB,KAAK,IAAI,WAAW,cAAc;AAExD,YAAI,SAAS,iBAAiB;AAC5B;AAAA;AAGF,YAAI,KAAK,KAAK,MAAM,WAAW,KAAK,UAAU,iBAAiB;AAC/D,eAAO,OAAO,QAAQ,OAAO,SAAS,SAAS,GAAG,WAAW;AAAA;AAAA,OAS9D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,KAAK;AACjC,YAAI,KAAK,aAAa,qCAAqC,OAAO,GAAG;AACnE,iBAAO;AAAA;AAGT,YAAI,MAAM;AACV,YAAI,kBAAkB,KAAK,IAAI,WAAW,cAAc;AAExD,iBAAS,mBAAmB,GAAG,mBAAmB,iBAAiB,oBAAoB;AACrF,cAAI,KAAK,KAAK,MAAM,WAAW,KAAK,UAAU,iBAAiB;AAC/D,cAAI,KAAK,OAAO,QAAQ,OAAO,SAAS,SAAS,GAAG,WAAW;AAE/D,cAAI,IAAI;AACN,gBAAI,KAAK;AAAA;AAAA;AAIb,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,IAAI;AAC5B,YAAI,cAAc;AAElB,YAAI,YAAY,aAAa,QAAQ,YAAY,aAAa,MAAM;AAClE,wBAAc,QAAQ,aAAa,CAAC,MAAM;AAAA;AAG5C,YAAI,gBAAgB,MAAM;AACxB,iBAAO;AAAA;AAGT,YAAI,KAAK,YAAY;AACrB,YAAI,YAAY,GAAG;AACnB,YAAI,MAAM,MAAM;AAChB,YAAI,MAAM,YAAY;AAEtB,YAAI,uBAAuB,uBAAuB,aAAa,KAAK,kBAAkB,uBAAuB,WAAW,aAAa,KAAK,gBAAgB;AACxJ,cAAI,UAAU,aAAa,SAAS;AAClC,mBAAO,UAAU,WAAW;AAAA;AAAA,mBAErB,uBAAuB,0BAA0B,aAAa,KAAK,kBAAkB,uBAAuB,cAAc,aAAa,KAAK,gBAAgB;AACrK,cAAI,YAAY,KAAK,IAAI,WAAW;AACpC,gBAAM,YAAY,UAAU,WAAW,SAAS;AAAA,mBACvC,cAAc,KAAK,OAAO;AACnC,gBAAM,KAAK,UAAU,+BAA+B;AAAA,eAC/C;AACL,gBAAM,KAAK,UAAU,iBAAiB;AAAA;AAGxC,YAAI,uBAAuB,uBAAuB,aAAa,KAAK,kBAAkB,uBAAuB,YAAY,aAAa,KAAK,kBAAkB,uBAAuB,0BAA0B,aAAa,KAAK,gBAAgB;AAC9O,gBAAM,KAAK,aAAa,YAAY;AAAA,eAC/B;AACL,gBAAM,KAAK,aAAa,qCAAqC;AAAA;AAG/D,eAAO,IAAI,eAAW,KAAK;AAAA;AAAA,OAM5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,KAAK,IAAI,WAAW,0BAA0B;AAChD;AAAA;AAGF,YAAI,WAAW,KAAK,MAAM,WAAW;AACrC,YAAI,sBAAsB,WAAW,KAAK,IAAI,WAAW,SAAS;AAClE,YAAI,oBAAoB,YAAY,KAAK,SAAS;AAClD,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AAEJ,YAAI,wBAAwB,qBAAqB,CAAC,KAAK,IAAI,WAAW,oBAAoB;AAExF;AAAA;AAGF,eAAO,UAAU;AACf,sBAAY;AACZ,2BAAiB,KAAK,UAAU,iBAAiB;AACjD,8BAAoB,KAAK,aAAa;AACtC,sBAAY,KAAK,YAAY;AAC7B,sBAAY,UAAU,cAAc;AAEpC,cAAI,WAAW;AACb,6BAAiB,YAAY;AAAA,iBACxB;AACL,6BAAiB,YAAY,aAAa;AAAA;AAG5C,cAAI,CAAC,qBAAqB,KAAK,IAAI,WAAW,SAAS,mBAAmB,kBAAkB,oBAAoB,gBAAgB;AAC9H,8BAAkB;AAClB,iBAAK,IAAI,WAAW,cAAc,kBAAkB;AAAA;AAAA;AAAA;AAAA,OASzD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,KAAK;AAC/B,eAAO,KAAK,MAAM,WAAW,KAAK,UAAU,iBAAiB;AAAA;AAAA,OAS9D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,QAAQ;AAC7C,YAAI,UAAU,GAAG;AACf,iBAAO;AAAA;AAGT,YAAI,aAAa,KAAK,IAAI,WAAW;AACrC,YAAI,kBAAkB,WAAW;AACjC,eAAO,KAAK,IAAI,WAAW;AAAA;AAAA,OAS5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,KAAK;AACvC,YAAI,OAAO,GAAG;AACZ,iBAAO;AAAA;AAGT,YAAI,gBAAgB,KAAK,IAAI,WAAW;AACxC,YAAI,qBAAqB,cAAc;AACvC,eAAO,KAAK,IAAI,QAAQ;AAAA;AAAA,OAmCzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,KAAK;AAC3C,YAAI,QAAQ,KAAK;AAGjB,YAAI,MAAM,KAAK,SAAS,GAAG;AACzB,iBAAO,CAAC,KAAK,oBAAoB;AAAA;AAGnC,eAAO,MAAM;AAAA;AAAA,OAsCd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,KAAK;AAC1C,eAAO,MAAM,KAAK;AAAA;AAAA,OAkCnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uCAAuC,QAAQ;AACpD,YAAI,QAAQ,KAAK;AAGjB,YAAI,SAAS,KAAK,SAAS,GAAG;AAC5B,iBAAO,CAAC,KAAK,uBAAuB;AAAA;AAGtC,eAAO,SAAS;AAAA;AAAA,OAqCjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC,QAAQ;AACnD,eAAO,KAAK,gBAAgB,SAAS,KAAK;AAAA;AAAA,OAE3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,QAAQ;AAC5C,eAAO,KAAK,gBAAgB,SAAS,KAAK;AAAA;AAAA,OAE3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,KAAK;AACtC,eAAO,KAAK,aAAa,MAAM,KAAK;AAAA;AAAA,OAErC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,QAAQ;AAC7C,eAAO,KAAK,gBAAgB,KAAK,aAAa,iBAAiB,UAAU,KAAK,UAAU;AAAA;AAAA,OAEzF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,eAAO,KAAK,wBAAwB,KAAK;AAAA;AAAA,OAE1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,eAAO,KAAK,2BAA2B,KAAK;AAAA;AAAA,OAE7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,eAAO,KAAK,IAAI,WAAW,iBAAiB,KAAK;AAAA;AAAA,OAElD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,eAAO,KAAK,IAAI,WAAW,oBAAoB,KAAK;AAAA;AAAA,OASrD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,WAAW;AACtC,eAAO,KAAK,SAAS,UAAU;AAAA;AAAA,OAOhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,OAAO;AAC3C,eAAO,KAAK,YAAY,gBAAgB;AAAA;AAAA,OAOzC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,cAAc;AAC3C,eAAO,KAAK,YAAY,SAAS;AAAA;AAAA,OAOlC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,cAAc;AACpD,eAAO,KAAK,YAAY,wBAAwB;AAAA;AAAA,OASjD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,eAAO,KAAK,kBAAkB,KAAK;AAAA;AAAA,OASpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAqB;AAC1B,eAAO,UAAW,KAAK;AAAA;AAAA,OAUxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,uBAAuB;AAC3D,YAAI,SAAS,WAAW,yBAAyB,0BAA0B;AAE3E,YAAI,MAAM,QAAQ,SAAS;AACzB,mBAAS,oBAAmB;AAC5B,iBAAO,OAAO,SAAS,KAAK,KAAK,uBAAuB,OAAO,OAAO,SAAS;AAAA,eAC1E;AACL,mBAAS,KAAK,uBAAuB;AAAA;AAGvC,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,OAAO;AAC5C,YAAI,iBAAiB;AAErB,YAAI,OAAO,UAAU,UAAU;AAC7B,2BAAiB,KAAK,IAAI,WAAW;AAAA;AAGvC,YAAI,KAAK,oBAAoB;AAC3B,4BAAkB;AAAA;AAGpB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;AAGT,MAAO,gBAAQ;;;AqBxrCf,MAAI,aAAa;AAUjB,MAAI,iBAAiB;AAAA,IAMnB,qBAAqB,+BAA+B;AAClD,UAAI,WAAW,KAAK,IAAI,WAAW,qBAAqB;AAExD,UAAI,aAAa,MAAM;AACrB,eAAO;AAAA;AAGT,aAAO;AAAA;AAAA,IAQT,oBAAoB,8BAA8B;AAChD,UAAI,WAAW,KAAK,IAAI,WAAW,sBAAsB;AAEzD,UAAI,aAAa,MAAM;AACrB,eAAO;AAAA;AAGT,aAAO;AAAA;AAAA,IAQT,oBAAoB,8BAA8B;AAChD,UAAI,SAAS,KAAK,IAAI,WAAW,qBAAqB;AAEtD,UAAI,WAAW,MAAM;AACnB,eAAO;AAAA;AAGT,aAAO;AAAA;AAAA,IAQT,mBAAmB,6BAA6B;AAC9C,UAAI,SAAS,KAAK,IAAI,WAAW,sBAAsB;AAEvD,UAAI,WAAW,MAAM;AACnB,eAAO;AAAA;AAGT,aAAO;AAAA;AAAA,IAQT,sBAAsB,gCAAgC;AACpD,aAAO,KAAK,IAAI,WAAW,qBAAqB;AAAA;AAAA,IAQlD,qBAAqB,+BAA+B;AAClD,aAAO,KAAK,IAAI,WAAW,sBAAsB;AAAA;AAAA;AAGrD,eAAa,gBAAgB,cAAc,YAAY;AAAA,IACrD,UAAU;AAAA,IACV,YAAY;AAAA;AAEd,MAAO,yBAAQ;;;AC7Ff,MAAI,cAAa;AAUjB,MAAI,oBAAoB;AAAA,IAMtB,wBAAwB,kCAAkC;AACxD,UAAI,cAAc,KAAK,IAAI,WAAW,wBAAwB;AAE9D,UAAI,gBAAgB,MAAM;AACxB,eAAO;AAAA;AAGT,aAAO;AAAA;AAAA,IAQT,uBAAuB,iCAAiC;AACtD,UAAI,cAAc,KAAK,IAAI,WAAW,yBAAyB;AAE/D,UAAI,gBAAgB,MAAM;AACxB,eAAO;AAAA;AAGT,aAAO;AAAA;AAAA,IAQT,uBAAuB,iCAAiC;AACtD,UAAI,YAAY,KAAK,IAAI,WAAW,wBAAwB;AAE5D,UAAI,cAAc,MAAM;AACtB,eAAO;AAAA;AAGT,aAAO;AAAA;AAAA,IAQT,sBAAsB,gCAAgC;AACpD,UAAI,YAAY,KAAK,IAAI,WAAW,yBAAyB;AAE7D,UAAI,cAAc,MAAM;AACtB,eAAO;AAAA;AAGT,aAAO;AAAA;AAAA,IAQT,yBAAyB,mCAAmC;AAC1D,aAAO,KAAK,IAAI,WAAW,wBAAwB;AAAA;AAAA,IAQrD,wBAAwB,kCAAkC;AACxD,aAAO,KAAK,IAAI,WAAW,yBAAyB;AAAA;AAAA;AAGxD,eAAa,mBAAmB,cAAc,aAAY;AAAA,IACxD,UAAU;AAAA,IACV,YAAY;AAAA;AAEd,MAAO,4BAAQ;;;AvB9Ff,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAczU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,sBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,uBAAgB,UAAU;AAAA;AAEtb,4BAAyB,GAAG,GAAG;AAAE,uBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,iBAAgB,GAAG;AAAA;AAErK,yBAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,iBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,iBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,4BAA2B,MAAM;AAAA;AAAA;AAE5Z,uCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,wBAAuB;AAAA;AAExR,mCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,wCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,4BAAyB,GAAG;AAAE,uBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,iBAAgB;AAAA;AAWxM,MAAI,cAA2B,yBAAU,QAAQ;AAC/C,eAAU,cAAa;AAEvB,QAAI,SAAS,cAAa;AAE1B,4BAAuB;AACrB,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,mBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAAO,8CAA8C;AACnD,YAAI,kBAAkB,qBAAqB,KAAK;AAChD,YAAI,aAAa,KAAK,IAAI;AAE1B,YAAI,oBAAoB,YAAY;AAClC,cAAI,mBAAkB,KAAK,IAAI,WAAW;AAE1C,cAAI,CAAC,kBAAiB;AACpB,iBAAK,OAAO,MAAM,WAAW;AAC7B,iBAAK,cAAc,MAAM,WAAW;AAAA;AAAA,eAEjC;AACL,cAAI,wBAAwB,gBAAgB;AAC5C,cAAI,iBAAiB,SAAS,iBAAiB,UAAU;AACzD,cAAI,mBAAmB,SAAS,iBAAiB,YAAY;AAC7D,cAAI,cAAc,KAAK,OAAO;AAC9B,cAAI,cAAc,gBAAgB,aAC9B,eAAe,gBAAgB;AAEnC,cAAI,wBAAwB,gBAAgB,yBACxC,QAAQ,sBAAsB,OAC9B,SAAS,sBAAsB;AAEnC,cAAI,WAAW,CAAC,QAAQ,UAAU;AAElC,cAAI,yBAAyB,SAAS,SAAS,mBAAmB;AAChE,gBAAI,YAAY,gBAAgB,UAAU;AAI1C,sBAAU,MAAM,WAAW;AAE3B,gBAAI,gBAAgB,oBAAoB;AACtC,oCAAsB,aAAa,WAAW,gBAAgB;AAAA,mBACzD;AACL,oCAAsB,YAAY;AAAA;AAGpC,gBAAI,cAAc,SAAS,kBAAiB,WAAW,YAAY,QAAQ;AAC3E,kCAAsB,YAAY;AAElC,gBAAI,gBAAgB,GAAG;AACrB,uBAAS;AAAA;AAAA;AAIb,mBAAS,KAAK,IAAI,QAAQ;AAC1B,sBAAY,SAAS,mBAAmB,SAAS,SAAS,GAAG,OAAO,QAAQ;AAC5E,kBAAQ,KAAK,IAAI,OAAO;AACxB,sBAAY,QAAQ,GAAG,OAAO,OAAO;AACrC,sBAAY,WAAW;AACvB,eAAK,iBAAiB,YAAY,WAAW,SAAS,OAAO,SAAS;AACtE,eAAK,gBAAgB,QAAQ;AAAA;AAG/B,aAAK,iBAAiB,UAAU,KAAK;AAAA;AAAA,OAEtC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC;AAC3C,YAAI,MAAM,KAAK;AACf,YAAI,cAAc,IAAI;AACtB,YAAI,gBAAgB,IAAI,WAAW;AACnC,YAAI,qBAAqB,cAAc;AAEvC,YAAI,sBAAsB,CAAC,IAAI,WAAW,gCAAgC,cAAc;AACtF,cAAI,aAAa,IAAI,WAAW;AAChC,cAAI,iBAAiB,WAAW;AAChC,cAAI,cAAc,KAAK;AAEvB,mBAAS,IAAI,GAAG,IAAI,oBAAoB,KAAK;AAC3C,qBAAS,sBAAsB,KAAK,gBAAgB,sBAAsB,aAAa,uBAAuB;AAE5G,mBAAK,4BAA4B;AAAA;AAAA;AAIrC,cAAI,WAAW,gCAAgC,eAAe;AAAA;AAAA;AAAA;AAKpE,WAAO;AAAA,IACP;AAEF,QAAM,aAAa;AACnB,QAAM,aAAa;AACnB,MAAO,iBAAQ;;;AwBtIf,mCAAO;;;ACAP,mCAAO;;;ACRP,MAAI,cAAa;AAUjB,MAAI,mBAAmB;AAAA,IAMrB,qBAAqB,gCAA+B;AAClD,UAAI,YAAY,KAAK,IAAI,WAAW;AACpC,UAAI,kBAAkB,KAAK,IAAI,WAAW;AAC1C,UAAI,SAAQ,YAAY;AAExB,UAAI,cAAc,KAAK,oBAAoB,GAAG;AAC5C,eAAO;AAAA;AAGT,UAAI,SAAQ,GAAG;AACb,eAAO;AAAA;AAGT,aAAO;AAAA;AAAA,IAST,oBAAoB,+BAA8B;AAChD,aAAO,KAAK;AAAA;AAAA,IAQd,oBAAoB,+BAA8B;AAChD,aAAO,KAAK,IAAI,WAAW,eAAe;AAAA;AAAA,IAS5C,mBAAmB,8BAA6B;AAC9C,aAAO,KAAK;AAAA;AAAA,IAQd,sBAAsB,iCAAgC;AACpD,UAAI,YAAY,KAAK,IAAI,WAAW;AACpC,aAAO,KAAK,IAAI,KAAK,IAAI,WAAW,oBAAoB;AAAA;AAAA,IAS1D,qBAAqB,gCAA+B;AAClD,aAAO,KAAK;AAAA;AAAA;AAGhB,eAAa,kBAAkB,cAAc,aAAY;AAAA,IACvD,UAAU;AAAA,IACV,YAAY;AAAA;AAEd,MAAO,2BAAQ;;;ACrFf,MAAI,cAAa;AAUjB,MAAI,oBAAoB;AAAA,IAMtB,wBAAwB,mCAAkC;AACxD,UAAI,eAAe,KAAK,IAAI,WAAW;AAEvC,UAAI,iBAAiB,GAAG;AACtB,eAAO;AAAA;AAGT,aAAO;AAAA;AAAA,IAST,uBAAuB,kCAAiC;AACtD,aAAO,KAAK;AAAA;AAAA,IAQd,uBAAuB,kCAAiC;AACtD,aAAO,KAAK,4BAA4B;AAAA;AAAA,IAS1C,sBAAsB,iCAAgC;AACpD,aAAO,KAAK;AAAA;AAAA,IAQd,yBAAyB,oCAAmC;AAC1D,UAAI,eAAe,KAAK,IAAI,WAAW;AACvC,aAAO,KAAK,IAAI,KAAK,IAAI,WAAW,qBAAqB;AAAA;AAAA,IAS3D,wBAAwB,mCAAkC;AACxD,aAAO,KAAK;AAAA;AAAA;AAGhB,eAAa,mBAAmB,cAAc,aAAY;AAAA,IACxD,UAAU;AAAA,IACV,YAAY;AAAA;AAEd,MAAO,4BAAQ;;;AFhFf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,sBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,uBAAgB,UAAU;AAAA;AAEtb,4BAAyB,GAAG,GAAG;AAAE,uBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,iBAAgB,GAAG;AAAA;AAErK,yBAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,iBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,iBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,4BAA2B,MAAM;AAAA;AAAA;AAE5Z,uCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,wBAAuB;AAAA;AAExR,mCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,wCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,4BAAyB,GAAG;AAAE,uBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,iBAAgB;AAAA;AAUxM,MAAI,+BAA4C,yBAAU,QAAQ;AAChE,eAAU,+BAA8B;AAExC,QAAI,SAAS,cAAa;AAE1B,6CAAwC;AACtC,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,WAAO,eAAa;AAAA,IACpB;AAEF,QAAM,8BAA8B;AACpC,QAAM,8BAA8B;AACpC,MAAO,2BAAQ;;;AGzDf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKO,oCAAkC,QAAO;AAC9C,WAAM,gCAAgC;AACtC,WAAM,eAAe;AAAA;AAShB,yCAAuC,QAAO;AACnD,WAAO,OAAM,kCAAkC;AAAA;AAS1C,wBAAsB,QAAO;AAClC,WAAO,OAAM,WAAW;AAAA;AASnB,uBAAqB,QAAO;AACjC,WAAO,OAAM,WAAW;AAAA;;;ACnC1B,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAU/Q,MAAI,mBAAmB;AAQvB,MAAI,eAA4B,2BAAY;AAK1C,6BAAwB;AACtB,UAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAElF,wBAAgB,MAAM;AAEtB,WAAK,UAAU,WAAW;AAE1B,UAAI,CAAC,KAAK,QAAQ,gBAAgB;AAChC,aAAK,QAAQ,iBAAiB;AAAA;AAAA;AAclC,mBAAa,eAAc,CAAC;AAAA,MAC1B,KAAK;AAAA,MACL,OAAO,2BAA0B,SAAS,WAAW,UAAU;AAC7D,YAAI,QAAQ;AAEZ,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAKlF,+BAAuB,QAAO;AAC5B,mBAAS,KAAK,MAAM,aAAY;AAAA;AAGlC,YAAI,OAAO,YAAY,aAAa,CAAC,2BAA2B;AAC9D,oBAAU;AAAA;AAGZ,aAAK,QAAQ,eAAe,KAAK;AAAA,UAC/B;AAAA,UACA,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA,cAAc;AAAA;AAEhB,gBAAQ,iBAAiB,WAAW,eAAe;AACnD,4BAAoB;AACpB,eAAO,WAAY;AACjB,gBAAM,oBAAoB,SAAS,WAAW;AAAA;AAAA;AAAA,OAYjD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA6B,SAAS,WAAW,UAAU;AAChE,YAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACxF,YAAI,MAAM,KAAK,QAAQ,eAAe;AACtC,YAAI;AAEJ,eAAO,KAAK;AACV,iBAAO;AACP,qBAAW,KAAK,QAAQ,eAAe;AAEvC,cAAI,SAAS,UAAU,aAAa,SAAS,YAAY,SAAS;AAChE,gBAAI,YAAY,aAAa,SAAS,UAAU;AAE9C;AAAA;AAGF,gBAAI,iBAAiB,SAAS,iBAAiB,MAAM;AACnD;AAAA;AAGF,iBAAK,QAAQ,eAAe,OAAO,KAAK;AACxC,qBAAS,QAAQ,oBAAoB,SAAS,OAAO,SAAS,eAAe,SAAS;AACtF,gCAAoB;AAAA;AAAA;AAAA;AAAA,OAYzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAExF,YAAI,CAAC,KAAK,SAAS;AACjB;AAAA;AAGF,YAAI,MAAM,KAAK,QAAQ,eAAe;AAEtC,eAAO,KAAK;AACV,iBAAO;AACP,cAAI,SAAQ,KAAK,QAAQ,eAAe;AAExC,cAAI,iBAAiB,OAAM,iBAAiB,MAAM;AAChD;AAAA;AAGF,eAAK,QAAQ,eAAe,OAAO,KAAK;AACxC,iBAAM,QAAQ,oBAAoB,OAAM,OAAO,OAAM,eAAe,OAAM;AAC1E,8BAAoB;AAAA;AAAA;AAAA,OAOvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK;AACL,aAAK,UAAU;AAAA;AAAA,OAMhB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,aAAK,YAAY;AACjB,aAAK,UAAU;AAAA;AAAA,OAShB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,SAAS,WAAW;AAC5C,YAAI,eAAe,QAAQ;AAC3B,YAAI,aAAa;AAEjB,YAAI,CAAC,cAAc;AACjB,yBAAe,QAAQ,gBAAgB,QAAQ,gBAAgB;AAC/D,uBAAa,aAAa;AAAA;AAG5B,YAAI,UAAU;AAAA,UACZ,SAAS;AAAA,UACT,YAAY,cAAc;AAAA,UAC1B,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,eAAe;AAAA;AAEjB,YAAI;AAEJ,YAAI,aAAa,aAAa;AAC5B,mBAAQ,aAAa,YAAY;AACjC,iBAAM,eAAe,WAAW,QAAQ,SAAS,QAAQ,YAAY,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,SAAS,QAAQ,SAAS,QAAQ,SAAS,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,iBAAiB,aAAa,KAAK;AAAA,eACjS;AACL,mBAAQ,aAAa;AAAA;AAGvB,YAAI,QAAQ,eAAe;AACzB,kBAAQ,cAAc;AAAA,eACjB;AACL,kBAAQ,UAAU,KAAK,OAAO,YAAY;AAAA;AAAA;AAAA;AAKhD,WAAO;AAAA;AAST,wBAAqB,QAAO;AAC1B,QAAI,iCAAiC,OAAM;AAE3C,WAAM,2BAA2B,WAAY;AAC3C,qCAA+B,MAAM;AAErC,+BAA0B;AAAA;AAG5B,WAAO;AAAA;AAGT,MAAO,uBAAQ;AAKR,iCAA+B;AACpC,WAAO;AAAA;;;AChQT,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAexQ,MAAI,UAAuB,2BAAY;AAI5C,sBAAiB,aAAa;AAC5B,wBAAgB,MAAM;AAEtB,mBAAa,MAAM,OAAO,aAAa;AAAA,QACrC,UAAU;AAAA;AAEZ,UAAI,oBAAoB,KAAK,IAAI,SAC7B,QAAQ,kBAAkB,OAC1B,QAAQ,kBAAkB,OAC1B,WAAW,kBAAkB,UAC7B,UAAS,kBAAkB,QAC3B,gBAAgB,kBAAkB;AAEtC,WAAK,WAAW,KAAK;AACrB,WAAK,OAAO;AACZ,WAAK,6BAA6B;AAClC,WAAK,QAAQ;AACb,WAAK,QAAQ;AACb,WAAK,WAAW;AAChB,WAAK,SAAS;AACd,WAAK,gBAAgB;AACrB,WAAK,oBAAoB,qBAAqB,KAAK,MAAM,WAAW;AACpE,WAAK;AAAA;AASP,mBAAa,UAAS,CAAC;AAAA,MACrB,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,YAAI,gBAAgB,KAAK;AACzB,aAAK,iBAAiB,KAAK;AAC3B,YAAI,UAAU,kBAAkB,KAAK;AAErC,YAAI,WAAW,CAAC,KAAK,gBAAgB;AACnC,eAAK;AAAA;AAGP,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,aAAK,oBAAoB,qBAAqB,KAAK,MAAM,WAAW;AAAA;AAAA,OAMrE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uCAAuC;AAC5C,YAAI,YAAY,KAAK,KACjB,UAAU,UAAU,SACpB,aAAa,UAAU;AAE3B,YAAI,WAAW,iBAAiB,QAAQ,cAAc,YAAY,iBAAiB,gBAAgB,UAAU;AAC3G,eAAK,6BAA6B,KAAK,IAAI,QAAQ;AAAA,eAC9C;AACL,eAAK,6BAA6B,qBAAqB,QAAQ;AAAA;AAAA;AAAA,OAalE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,SAAS,UAAU,aAAa;AACtE,YAAI,KAAK,MAAM,QAAQ,OAAO,SAAS,aAAa,OAAO;AACzD,eAAK,8CAA8C,OAAO,KAAK,MAAM;AACrE;AAAA;AAGF,YAAI,eAAe,KAAK,+BAA+B,KAAK,IAAI;AAChE,YAAI,cAAc,cAAc,KAAK,IAAI,WAAW;AACpD,YAAI,cAAc,WAAW,KAAK,IAAI,WAAW;AACjD,YAAI,iBAAiB,YAAY,KAAK,IAAI,WAAW,eAAe,KAAK,IAAI,WAAW;AACxF,YAAI,iBAAiB;AAAA,UACnB,MAAM,KAAK,MAAM,QAAQ,SAAS;AAAA,UAClC,KAAK,KAAK,MAAM,QAAQ,SAAS;AAAA;AAEnC,YAAI,gBAAgB;AAAA,UAClB,MAAM,QAAQ;AAAA,UACd,KAAK,QAAQ;AAAA;AAEf,YAAI,eAAe;AAEnB,YAAI,cAAc;AAChB,yBAAe,KAAK,oCAAoC,aAAa,aAAa,eAAe;AAAA,eAC5F;AACL,yBAAe,KAAK,oCAAoC,aAAa,gBAAgB,aAAa,eAAe;AAAA;AAGnH,eAAO;AAAA;AAAA,OAcR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6CAA6C,eAAe,eAAe,eAAe,gBAAgB;AAC/G,YAAI,8BAA8B,KAAK,IAAI,QAAQ,cAAc;AACjE,YAAI,mBAAmB;AACvB,YAAI,iBAAiB;AAErB,YAAI,CAAC,eAAe;AAClB,6BAAmB,eAAe;AAAA,eAC7B;AACL,6BAAmB,4BAA4B,QAAQ,IAAI,KAAK,4BAA4B,OAAO;AAAA;AAGrG,YAAI,eAAe;AACjB,cAAI,0BAA0B,KAAK,MAAM,QAAQ,MAAM;AACvD,2BAAiB,wBAAwB,MAAM,4BAA4B;AAAA,eACtE;AACL,2BAAiB,eAAe;AAAA;AAGlC,eAAO;AAAA,UACL,MAAM,cAAc,OAAO;AAAA,UAC3B,KAAK,cAAc,MAAM;AAAA;AAAA;AAAA,OAgB5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6CAA6C,eAAe,kBAAkB,eAAe,eAAe,gBAAgB;AACjI,YAAI,sBAAsB;AAAA,UACxB,YAAY,KAAK,MAAM,YAAY,WAAW,YAAY;AAAA,UAC1D,UAAU,KAAK,MAAM,YAAY,WAAW,WAAW;AAAA;AAEzD,YAAI,mBAAmB;AACvB,YAAI,iBAAiB;AAErB,YAAI,CAAC,eAAe;AAClB,6BAAmB,oBAAoB,aAAa,eAAe;AAAA;AAGrE,YAAI,kBAAkB;AACpB,cAAI,8BAA8B,KAAK,IAAI,QAAQ,cAAc;AACjE,cAAI,0BAA0B,KAAK,MAAM,QAAQ,MAAM;AACvD,2BAAiB,wBAAwB,MAAM,KAAK,4BAA4B;AAAA,mBACvE,CAAC,eAAe;AACzB,2BAAiB,oBAAoB,WAAW,eAAe;AAAA;AAGjE,eAAO;AAAA,UACL,MAAM,cAAc,OAAO;AAAA,UAC3B,KAAK,cAAc,MAAM;AAAA;AAAA;AAAA,OAW5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,WAAW;AACnC,YAAI,YAAY,QAAQ,eAAe,IAAI;AACzC,gBAAM,IAAI,MAAM,eAAgB,OAAO,WAAW;AAAA;AAGpD,YAAI,aAAa,KAAK,KAClB,UAAU,WAAW,SACrB,eAAe,WAAW,cAC1B,aAAa,WAAW;AAC5B,YAAI,SAAQ,aAAa,cAAc;AACvC,YAAI,cAAc,aAAa,cAAc;AAC7C,YAAI,cAAc,QAAQ,cAAc;AACxC,eAAM,YAAY,YAAY,OAAO,WAAW;AAChD,eAAM,MAAM,WAAW;AACvB,eAAM,MAAM,MAAM;AAClB,eAAM,MAAM,OAAO;AACnB,eAAM,MAAM,WAAW;AACvB,oBAAY,YAAY,QAAQ,MAAM;AACtC,eAAM,YAAY;AAClB,aAAK,OAAO;AACZ,oBAAY,YAAY;AACxB,YAAI,mBAAkB,KAAK,IAAI,WAAW;AAE1C,YAAI,qBAAoB,QAAQ,qBAAoB,gBAAgB,KAAK,SAAS,aAAa,qBAAoB,cAAc,KAAK,SAAS,YAAY;AACzJ,eAAK,6BAA6B;AAAA,mBACzB,WAAW,iBAAiB,aAAa,iBAAiB,gBAAgB,UAAU;AAC7F,eAAK,6BAA6B,QAAQ;AAAA,eACrC;AACL,eAAK,6BAA6B,qBAAqB,QAAQ;AAAA;AAIjE,eAAO,IAAI,KAAK,IAAI,YAAY;AAAA,UAC9B,aAAa,KAAK;AAAA,UAClB,cAAc;AAAA,UACd,OAAO;AAAA;AAAA;AAAA,OAWV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEnF,YAAI,sBAAsB,KAAK;AAE/B,YAAI,KAAK,SAAU,MAAK,kBAAkB,sBAAsB;AAC9D,eAAK,MAAM,KAAK;AAAA;AAGlB,aAAK,iBAAiB;AAAA;AAAA,OAMvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,CAAC,KAAK,OAAO;AACf;AAAA;AAGF,YAAI,UAAS,KAAK,MAAM,QAAQ;AAChC,YAAI,QAAQ,KAAK,MAAM,QAAQ;AAC/B,YAAI,cAAc,QAAO;AACzB,YAAI,cAAc,MAAM;AACxB,YAAI,YAAY,QAAO,WAAW;AAClC,kBAAU,CAAC,aAAa,aAAa,YAAY,SAAU,OAAO;AAChE,gBAAM,QAAQ;AACd,gBAAM,SAAS;AAAA;AAAA;AAAA,OAOlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,qBAAa,KAAK,OAAO;AAAA;AAAA;AAIjC,WAAO;AAAA;;;ANpUT,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,sBAAoB,QAAQ,MAAM,OAAO;AAAE,QAAI,8BAA6B;AAAE,mBAAa,QAAQ;AAAA,WAAkB;AAAE,mBAAa,qBAAoB,SAAQ,OAAM,QAAO;AAAE,YAAI,IAAI,CAAC;AAAO,UAAE,KAAK,MAAM,GAAG;AAAO,YAAI,cAAc,SAAS,KAAK,MAAM,SAAQ;AAAI,YAAI,WAAW,IAAI;AAAe,YAAI;AAAO,2BAAgB,UAAU,OAAM;AAAY,eAAO;AAAA;AAAA;AAAe,WAAO,WAAW,MAAM,MAAM;AAAA;AAErZ,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,sBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,uBAAgB,UAAU;AAAA;AAEtb,4BAAyB,GAAG,GAAG;AAAE,uBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,iBAAgB,GAAG;AAAA;AAErK,yBAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,iBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,iBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,4BAA2B,MAAM;AAAA;AAAA;AAE5Z,uCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,wBAAuB;AAAA;AAExR,mCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,wCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,4BAAyB,GAAG;AAAE,uBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,iBAAgB;AAAA;AAUjM,MAAI,0BAAuC,yBAAU,UAAU;AACpE,eAAU,0BAAyB;AAEnC,QAAI,SAAS,cAAa;AAK1B,sCAAiC,aAAa;AAC5C,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAC1B,YAAM,QAAQ,MAAM,UAAU;AAC9B,aAAO;AAAA;AAWT,mBAAa,0BAAyB,CAAC;AAAA,MACrC,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,iBAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,eAAK,QAAQ,UAAU;AAAA;AAGzB,eAAO,WAAW,0BAA8B;AAAA;AAAA,OAQjD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,MAAM,KAAK;AACf,eAAO,IAAI,WAAW,gCAAgC,IAAI,WAAW;AAAA;AAAA,OAQtE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,MAAM,KAAK;AACf,aAAK;AAEL,YAAI,CAAC,IAAI,QAAQ,OAAO,YAAY;AAElC;AAAA;AAGF,YAAI,cAAc,KAAK,MAAM,QAAQ,OAAO;AAC5C,oBAAY,MAAM,MAAM;AAExB,YAAI,KAAK,sBAAsB,IAAI,YAAY;AAC7C,cAAI,YAAY,KAAK,KACjB,eAAe,UAAU,cACzB,UAAU,UAAU;AACxB,cAAI,YAAY,QAAQ,MAAM;AAC9B,cAAI,UAAS,KAAK,KAAK,UAAU;AACjC,cAAI,QAAO,KAAK,KAAK,UAAU;AAC/B,cAAI,aAAa,aAAa,gBAAgB;AAC9C,cAAI;AACJ,cAAI;AAEJ,cAAI,QAAO,GAAG;AACZ,wBAAY,CAAC;AAAA,iBACR;AACL,wBAAY;AAAA;AAGd,cAAI,UAAS,YAAY;AACvB,0BAAc,UAAS;AAAA,iBAClB;AACL,0BAAc;AAAA;AAGhB,yBAAe;AACf,uBAAa;AACb,sBAAY,MAAM,OAAO;AACzB,sBAAY,MAAM,SAAS;AAAA,eACtB;AACL,4BAAkB;AAClB,eAAK;AAAA;AAGP,YAAI,cAAc,YAAY,KAAK,MAAM,QAAQ;AACjD,YAAI,aAAa,WAAW,KAAK,MAAM,QAAQ;AAE/C,YAAI,CAAC,KAAK,IAAI,QAAQ,kBAAkB;AACtC,wBAAc;AAAA;AAGhB,oBAAY,MAAM,SAAS,GAAG,OAAO,aAAa;AAClD,oBAAY,MAAM,QAAQ,GAAG,OAAO,YAAY;AAChD,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,aAAa,KAAK,KAClB,UAAU,WAAW,SACrB,eAAe,WAAW;AAC9B,YAAI,YAAY,KAAK,MAAM,QAAQ,OAAO;AAC1C,YAAI,iBAAiB,kBAAkB;AAEvC,YAAI,QAAQ,OAAO,iBAAiB,QAAQ,OAAO,cAAc;AAC/D,2BAAiB;AAAA;AAGnB,kBAAU,MAAM,SAAS,GAAG,OAAO,gBAAgB;AAAA;AAAA,QAEnD,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AO3KF,mCAAO;;;ACAP,mCAAO;AATP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAUxM,MAAI,qBAAkC,yBAAU,QAAQ;AACtD,gBAAU,qBAAoB;AAE9B,QAAI,SAAS,eAAa;AAE1B,mCAA8B;AAC5B,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,WAAO,eAAa;AAAA,IACpB;AAEF,QAAM,oBAAoB;AAC1B,QAAM,oBAAoB;AAC1B,MAAO,iBAAQ;;;ADzDf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,uBAAoB,QAAQ,MAAM,OAAO;AAAE,QAAI,+BAA6B;AAAE,oBAAa,QAAQ;AAAA,WAAkB;AAAE,oBAAa,qBAAoB,SAAQ,OAAM,QAAO;AAAE,YAAI,IAAI,CAAC;AAAO,UAAE,KAAK,MAAM,GAAG;AAAO,YAAI,cAAc,SAAS,KAAK,MAAM,SAAQ;AAAI,YAAI,WAAW,IAAI;AAAe,YAAI;AAAO,4BAAgB,UAAU,OAAM;AAAY,eAAO;AAAA;AAAA;AAAe,WAAO,YAAW,MAAM,MAAM;AAAA;AAErZ,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAExM,4BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAUpM,MAAI,gBAA6B,yBAAU,UAAU;AAC1D,gBAAU,gBAAe;AAEzB,QAAI,SAAS,eAAa;AAK1B,4BAAuB,aAAa;AAClC,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAE1B,uBAAgB,yBAAuB,QAAQ,yBAAyB;AAExE,YAAM,QAAQ,MAAM,UAAU;AAC9B,YAAM,wBAAwB,MAAM,IAAI,WAAW;AACnD,aAAO;AAAA;AAWT,mBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,iBAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,eAAK,QAAQ,UAAU;AAAA;AAGzB,eAAO,YAAW,gBAAoB;AAAA;AAAA,OAQvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,eAAO,KAAK,IAAI,WAAW;AAAA;AAAA,OAQ5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,CAAC,KAAK,kBAAkB,CAAC,KAAK,IAAI,QAAQ,OAAO,YAAY;AAE/D;AAAA;AAGF,YAAI,cAAc,KAAK,MAAM,QAAQ,OAAO;AAC5C,oBAAY,MAAM,MAAM;AACxB,YAAI,iBAAiB;AACrB,YAAI,mBAAkB,KAAK,IAAI,WAAW;AAE1C,YAAI,KAAK,sBAAsB,KAAK,IAAI,cAAe,EAAC,oBAAmB,qBAAoB,aAAa;AAC1G,cAAI,YAAY,KAAK,KACjB,eAAe,UAAU,cACzB,UAAU,UAAU;AACxB,cAAI,YAAY,QAAQ,MAAM;AAC9B,cAAI,UAAS,KAAK,KAAK,UAAU;AACjC,cAAI,aAAa,aAAa,gBAAgB;AAC9C,cAAI;AACJ,cAAI;AACJ,sBAAY,QAAQ,MAAM,MAAM;AAChC,sBAAY,cAAc,KAAK,IAAI;AAEnC,cAAI,UAAS,YAAY;AACvB,0BAAc,UAAS;AAAA,iBAClB;AACL,0BAAc;AAAA;AAGhB,2BAAiB;AACjB,yBAAe;AACf,sBAAY,MAAM,OAAO;AACzB,sBAAY,MAAM,SAAS;AAAA,eACtB;AACL,2BAAiB,KAAK;AACtB,eAAK;AAAA;AAGP,YAAI,kBAAkB,KAAK,4BAA4B;AACvD,aAAK;AACL,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,aAAa,KAAK,KAClB,UAAU,WAAW,SACrB,eAAe,WAAW;AAC9B,YAAI,YAAY,KAAK,MAAM,QAAQ,OAAO;AAC1C,YAAI,iBAAiB,kBAAkB;AAEvC,YAAI,QAAQ,OAAO,iBAAiB,QAAQ,OAAO,cAAc;AAC/D,2BAAiB;AAAA;AAGnB,kBAAU,MAAM,SAAS,GAAG,OAAO,gBAAgB;AAAA;AAAA,OASpD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,KAAK;AACrC,YAAI,aAAa,KAAK,IAAI;AAC1B,YAAI,SAAS;AAEb,YAAI,KAAK,+BAA+B,YAAY;AAClD,qBAAW,SAAS,oBAAoB,aAAa;AACrD,mBAAS;AAAA,mBACA,KAAK,2BAA2B,cAAc,KAAK;AAC5D,eAAK,2BAA2B,YAAY;AAC5C,mBAAS;AAAA;AAGX,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,aAAK,IAAI,WAAW;AAAA;AAAA,OAUrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,OAAM,IAAI;AACrC,YAAI,aAAa,KAAK,KAClB,UAAU,WAAW,SACrB,aAAa,WAAW;AAC5B,YAAI,mBAAmB,WAAW,SAAS;AAC3C,YAAI,MAAM;AACV,YAAI,MAAM;AAEV,eAAO,MAAM,IAAI;AACf,cAAI,SAAS,QAAQ,aAAa;AAClC,iBAAO,WAAW,SAAS,mBAAmB;AAC9C,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,aAAK;AAEL,YAAI,KAAK,kBAAkB,OAAO;AAChC,eAAK;AACL,eAAK;AAAA;AAAA;AAAA,OAOR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,aAAa,KAAK,KAClB,UAAU,WAAW,SACrB,aAAa,WAAW,YACxB,aAAa,WAAW;AAC5B,YAAI,iBAAiB,kBAAkB,KAAK,IAAI;AAChD,YAAI,cAAc,KAAK,MAAM,QAAQ,OAAO;AAC5C,YAAI,mBAAmB,YAAY;AACnC,YAAI,mBAAkB,KAAK,IAAI,WAAW;AAE1C,YAAI,KAAK,sBAAsB,cAAc,qBAAoB,cAAc;AAC7E,cAAI,QAAQ,WAAW;AAEvB,cAAI,KAAK,IAAI,WAAW,mBAAmB;AACzC,qBAAS;AAAA;AAGX,kBAAQ,KAAK,IAAI,OAAO,QAAQ,cAAc;AAC9C,2BAAiB,QAAQ,GAAG,OAAO,OAAO;AAAA,eACrC;AACL,2BAAiB,QAAQ;AAAA;AAG3B,aAAK,MAAM,QAAQ,OAAO,MAAM,QAAQ,iBAAiB;AACzD,YAAI,cAAc,YAAY,KAAK,MAAM,QAAQ;AAEjD,YAAI,CAAC,KAAK,IAAI,QAAQ,kBAAkB;AACtC,wBAAc;AAAA;AAGhB,yBAAiB,SAAS,GAAG,OAAO,aAAa;AAAA;AAAA,OAMlD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,YAAI,UAAS,KAAK,MAAM,QAAQ;AAChC,aAAK,MAAM,QAAQ,MAAM,MAAM,QAAQ,KAAK,MAAM,MAAM;AACxD,gBAAO,MAAM,QAAQ,QAAO,WAAW,MAAM;AAC7C,gBAAO,MAAM,SAAS,QAAO,WAAW,MAAM;AAAA;AAAA,OAM/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,QAAQ,KAAK,IAAI,WAAW;AAEhC,YAAI,OAAO,KAAK,IAAI,WAAW,qBAAqB,kBAAkB,UAAU;AAC9E,eAAK,SAAS,MAAM,MAAM,GAAG,OAAO,KAAK,IAAI,WAAW,qBAAqB,eAAe;AAAA,mBACnF,UAAU,GAAG;AAEtB,eAAK,SAAS,MAAM,MAAM;AAAA,eACrB;AACL,gBAAM,IAAI,MAAM;AAAA;AAGlB,aAAK,SAAS,MAAM,SAAS;AAE7B,YAAI,KAAK,gBAAgB;AACvB,eAAK;AAAA;AAAA;AAAA,OAOR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,OAAO,KAAK,IAAI,WAAW,wBAAwB,kBAAkB,UAAU;AACjF,eAAK,MAAM,QAAQ,SAAS,MAAM,OAAO,GAAG,OAAO,KAAK,IAAI,WAAW,wBAAwB,eAAe;AAAA,eACzG;AACL,eAAK,MAAM,QAAQ,SAAS,MAAM,OAAO;AAAA;AAAA;AAAA,OAU5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,WAAW,YAAY;AAC9C,YAAI,OAAO,KAAK;AAChB,YAAI,iBAAiB,KAAK,IAAI,cAAc,KAAK,IAAI,cAAc,KAAK;AACxE,YAAI,aAAa,eAAe,QAAQ;AACxC,YAAI,wBAAwB;AAE5B,YAAI,cAAc,WAAW,iBAAiB,WAAW,cAAc;AACrE,kCAAwB,kBAAkB,KAAK,IAAI;AAAA;AAGrD,YAAI,YAAY;AACd,kBAAQ,KAAK,aAAa,GAAG,YAAY;AACzC,kBAAQ,KAAK,IAAI,WAAW;AAE5B,kBAAQ;AAAA,eACH;AACL,kBAAQ,KAAK,aAAa,KAAK,IAAI,WAAW,oBAAoB;AAAA;AAGpE,gBAAQ;AACR,aAAK,kBAAkB;AAAA;AAAA,OAQxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,KAAK,+BAA+B,KAAK,IAAI,YAAY;AAC3D,iBAAO,KAAK,IAAI,QAAQ,aAAa;AAAA;AAGvC,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,eAAO,aAAa,KAAK,4BAA4B,KAAK,IAAI;AAAA;AAAA,OAS/D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,UAAU;AACpD,YAAI,kBAAkB,KAAK,IAAI,WAAW;AAC1C,YAAI,4BAA4B,KAAK,0BAA0B;AAC/D,YAAI,gBAAgB,KAAK,IAAI,WAAW;AACxC,YAAI,kBAAkB;AAEtB,YAAK,8BAA6B,oBAAoB,MAAM,cAAc,SAAS,GAAG;AACpF,cAAI,eAAe,KAAK,IAAI,QAAQ,OAAO;AAC3C,cAAI,gBAAgB,SAAS,cAAc;AAC3C,eAAK,wBAAwB,KAAK,IAAI,WAAW;AAEjD,cAAI,YAAY,KAAK,IAAI,WAAW,iBAAiB,GAAG;AACtD,qBAAS,cAAc;AACvB,8BAAkB,CAAC;AAAA,iBACd;AACL,wBAAY,cAAc;AAC1B,8BAAkB;AAAA;AAAA;AAItB,eAAO;AAAA;AAAA,QAEP,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAWX,WAAO;AAAA,IACP;;;AEpaF,mCAAO;;;ACAP,mCAAO;AATP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAUxM,MAAI,mBAAgC,yBAAU,QAAQ;AACpD,gBAAU,mBAAkB;AAE5B,QAAI,SAAS,eAAa;AAE1B,iCAA4B;AAC1B,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,WAAO,eAAa;AAAA,IACpB;AAEF,QAAM,kBAAkB;AACxB,QAAM,kBAAkB;AACxB,MAAO,eAAQ;;;ADzDf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,uBAAoB,QAAQ,MAAM,OAAO;AAAE,QAAI,+BAA6B;AAAE,oBAAa,QAAQ;AAAA,WAAkB;AAAE,oBAAa,qBAAoB,SAAQ,OAAM,QAAO;AAAE,YAAI,IAAI,CAAC;AAAO,UAAE,KAAK,MAAM,GAAG;AAAO,YAAI,cAAc,SAAS,KAAK,MAAM,SAAQ;AAAI,YAAI,WAAW,IAAI;AAAe,YAAI;AAAO,4BAAgB,UAAU,OAAM;AAAY,eAAO;AAAA;AAAA;AAAe,WAAO,YAAW,MAAM,MAAM;AAAA;AAErZ,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAUjM,MAAI,cAA2B,yBAAU,UAAU;AACxD,gBAAU,cAAa;AAEvB,QAAI,SAAS,eAAa;AAK1B,0BAAqB,aAAa;AAChC,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAC1B,YAAM,QAAQ,MAAM,UAAU;AAC9B,aAAO;AAAA;AAWT,mBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,iBAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,eAAK,QAAQ,UAAU;AAAA;AAGzB,eAAO,YAAW,cAAkB;AAAA;AAAA,OAQrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,eAAO,KAAK,IAAI,WAAW;AAAA;AAAA,OAQ5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,UAAU,KAAK,IAAI;AAEvB,YAAI,CAAC,KAAK,kBAAkB,CAAC,QAAQ,OAAO,YAAY;AAEtD;AAAA;AAGF,YAAI,cAAc,KAAK,MAAM,QAAQ,OAAO;AAC5C,YAAI,iBAAiB;AACrB,YAAI,mBAAkB,KAAK,IAAI,WAAW;AAE1C,YAAI,KAAK,sBAAsB,KAAK,IAAI,cAAe,EAAC,oBAAmB,qBAAoB,eAAe;AAC5G,cAAI,YAAY,QAAQ,MAAM;AAC9B,cAAI,QAAO,KAAK,KAAK,UAAU;AAC/B,cAAI,SAAQ,KAAK,KAAK,UAAU;AAChC,cAAI;AACJ,cAAI;AACJ,qBAAW,QAAQ,MAAM,MAAM;AAC/B,qBAAW,aAAa,KAAK,IAAI;AAEjC,cAAI,QAAO,KAAK,SAAQ,YAAY,cAAc,GAAG;AACnD,wBAAY,CAAC;AAAA,iBACR;AACL,wBAAY;AAAA;AAGd,2BAAiB;AACjB,uBAAa;AACb,6BAAmB,aAAa,WAAW;AAAA,eACtC;AACL,2BAAiB,KAAK;AACtB,4BAAkB;AAAA;AAGpB,YAAI,kBAAkB,KAAK,4BAA4B;AACvD,aAAK;AACL,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,KAAK;AACrC,YAAI,aAAa,KAAK,IAAI;AAC1B,YAAI,SAAS;AAEb,YAAI,KAAK,+BAA+B,cAAc,WAAW,YAAY,KAAK;AAChF,qBAAW,SAAS,KAAK,mBAAmB;AAC5C,mBAAS;AAAA,mBACA,KAAK,2BAA2B,eAAe,KAAK;AAC7D,eAAK,2BAA2B,aAAa;AAC7C,mBAAS;AAAA;AAGX,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,aAAK,IAAI,WAAW;AAAA;AAAA,OAUrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,OAAM,IAAI;AACrC,YAAI,qBAAqB,KAAK,IAAI,WAAW;AAC7C,YAAI,SAAS;AACb,YAAI,MAAM;AAEV,eAAO,SAAS,IAAI;AAClB,iBAAO,KAAK,IAAI,QAAQ,wBAAwB,WAAW;AAC3D,oBAAU;AAAA;AAGZ,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,aAAK;AAEL,YAAI,KAAK,kBAAkB,OAAO;AAChC,eAAK;AACL,eAAK;AAAA;AAAA;AAAA,OAOR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,YAAY,KAAK,KACjB,UAAU,UAAU,SACpB,eAAe,UAAU,cACzB,aAAa,UAAU;AAC3B,YAAI,kBAAkB,kBAAkB;AACxC,YAAI,cAAc,KAAK,MAAM,QAAQ,OAAO;AAC5C,YAAI,mBAAmB,YAAY;AACnC,YAAI,mBAAkB,KAAK,IAAI,WAAW;AAE1C,YAAI,KAAK,sBAAsB,cAAc,qBAAoB,YAAY;AAC3E,cAAI,SAAS,KAAK,IAAI,WAAW;AAEjC,cAAI,KAAK,IAAI,WAAW,oBAAoB;AAC1C,sBAAU;AAAA;AAGZ,mBAAS,KAAK,IAAI,QAAQ,QAAQ,cAAc;AAChD,2BAAiB,SAAS,GAAG,OAAO,QAAQ;AAAA,eACvC;AACL,2BAAiB,SAAS;AAAA;AAG5B,aAAK,MAAM,QAAQ,OAAO,MAAM,SAAS,iBAAiB;AAC1D,YAAI,aAAa,WAAW,KAAK,MAAM,QAAQ;AAC/C,yBAAiB,QAAQ,GAAG,OAAO,YAAY;AAAA;AAAA,OAMhD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,YAAI;AAEJ,YAAI,UAAS,KAAK,MAAM,QAAQ;AAChC,YAAI,aAAa,KAAK,IAAI;AAC1B,YAAI,wBAAwB,KAAK,IAAK,yBAAwB,eAAe,QAAQ,eAAe,SAAS,SAAS,WAAW,UAAU,UAAU,KAAK,KAAK,6BAA6B,QAAQ,0BAA0B,SAAS,wBAAwB;AAC/P,aAAK,MAAM,QAAQ,MAAM,MAAM,SAAS,KAAK,MAAM,MAAM;AACzD,gBAAO,MAAM,SAAS,QAAO,WAAW,MAAM;AAG9C,gBAAO,MAAM,QAAQ,GAAG,OAAO,SAAS,QAAO,WAAW,MAAM,OAAO,MAAM,uBAAuB;AAAA;AAAA,OAMrG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,QAAQ,KAAK,IAAI,WAAW;AAEhC,YAAI,OAAO,KAAK,IAAI,WAAW,wBAAwB,kBAAkB,UAAU;AACjF,eAAK,SAAS,MAAM,OAAO,GAAG,OAAO,KAAK,IAAI,WAAW,wBAAwB,eAAe;AAAA,mBACvF,UAAU,GAAG;AACtB,eAAK,SAAS,MAAM,OAAO;AAAA,eACtB;AACL,gBAAM,IAAI,MAAM;AAAA;AAGlB,aAAK,SAAS,MAAM,QAAQ;AAE5B,YAAI,KAAK,gBAAgB;AACvB,eAAK;AAAA;AAAA;AAAA,OAOR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,OAAO,KAAK,IAAI,WAAW,qBAAqB,kBAAkB,UAAU;AAC9E,eAAK,MAAM,QAAQ,SAAS,MAAM,MAAM,GAAG,OAAO,KAAK,IAAI,WAAW,qBAAqB,eAAe;AAAA,eACrG;AACL,eAAK,MAAM,QAAQ,SAAS,MAAM,MAAM;AAAA;AAAA;AAAA,OAY3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,WAAW,gBAAgB;AAClD,YAAI,OAAO,KAAK;AAChB,YAAI,iBAAiB,KAAK,IAAI,cAAc,KAAK,IAAI,cAAc,KAAK;AACxE,YAAI,aAAa,eAAe,QAAQ;AACxC,YAAI,wBAAwB;AAE5B,YAAI,kBAAkB,WAAW,gBAAgB,WAAW,aAAa;AACvE,kCAAwB,kBAAkB,KAAK,IAAI;AAAA;AAGrD,YAAI,gBAAgB;AAClB,kBAAQ,KAAK,aAAa,GAAG,YAAY;AACzC,kBAAQ,KAAK,IAAI,WAAW;AAAA,eACvB;AACL,kBAAQ,KAAK,aAAa,KAAK,IAAI,WAAW,qBAAqB;AAAA;AAGrE,gBAAQ;AACR,eAAO,KAAK,kBAAkB;AAAA;AAAA,OAQ/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,mBAAkB,KAAK,IAAI,WAAW;AAC1C,YAAI,UAAS;AAEb,YAAI,CAAC,oBAAmB,KAAK,sBAAsB,KAAK,IAAI,YAAY;AACtE,oBAAS,KAAK,IAAI,QAAQ,aAAa;AAAA;AAGzC,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,eAAO,cAAc,KAAK,4BAA4B,KAAK,IAAI;AAAA;AAAA,OAShE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,UAAU;AACpD,YAAI,eAAe,KAAK,IAAI,QAAQ,OAAO;AAC3C,YAAI,aAAa,KAAK,IAAI,WAAW;AACrC,YAAI,mBAAmB,KAAK,IAAI,WAAW;AAC3C,YAAI,YAAY,KAAK,IAAI,WAAW;AAEpC,YAAI,WAAW;AACb,sBAAY,cAAc;AAAA,eACrB;AACL,mBAAS,cAAc;AAAA;AAGzB,YAAI,kBAAkB;AAEtB,YAAI,oBAAoB,CAAC,WAAW,QAAQ;AAC1C,mBAAS,cAAc;AAAA,mBACd,CAAC,oBAAoB,WAAW,QAAQ;AACjD,cAAI,gBAAgB,SAAS,cAAc;AAE3C,cAAI,UAAU;AACZ,qBAAS,cAAc;AACvB,8BAAkB,CAAC;AAAA,iBACd;AACL,wBAAY,cAAc;AAC1B,8BAAkB;AAAA;AAAA;AAItB,eAAO;AAAA;AAAA,QAEP,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AExYF,mCAAO;;;ACAP,mCAAO;;;ACRP,MAAI,cAAa;AAUjB,MAAI,gBAAgB;AAAA,IAMlB,qBAAqB,gCAA+B;AAClD,UAAI,YAAY,KAAK,IAAI,WAAW;AAEpC,UAAI,cAAc,GAAG;AACnB,eAAO;AAAA;AAGT,aAAO;AAAA;AAAA,IAST,oBAAoB,+BAA8B;AAChD,aAAO,KAAK;AAAA;AAAA,IAQd,oBAAoB,+BAA8B;AAChD,aAAO,KAAK,yBAAyB;AAAA;AAAA,IASvC,mBAAmB,8BAA6B;AAC9C,aAAO,KAAK;AAAA;AAAA,IAQd,sBAAsB,iCAAgC;AACpD,UAAI,YAAY,KAAK,IAAI,WAAW;AACpC,aAAO,KAAK,IAAI,KAAK,IAAI,WAAW,iBAAiB;AAAA;AAAA,IASvD,qBAAqB,gCAA+B;AAClD,aAAO,KAAK;AAAA;AAAA;AAGhB,eAAa,eAAe,cAAc,aAAY;AAAA,IACpD,UAAU;AAAA,IACV,YAAY;AAAA;AAEd,MAAO,wBAAQ;;;ADhFf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAUxM,MAAI,4BAAyC,yBAAU,QAAQ;AAC7D,gBAAU,4BAA2B;AAErC,QAAI,SAAS,eAAa;AAE1B,0CAAqC;AACnC,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,WAAO,eAAa;AAAA,IACpB;AAEF,QAAM,2BAA2B;AACjC,QAAM,2BAA2B;AACjC,MAAO,wBAAQ;;;ADzDf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,uBAAoB,QAAQ,MAAM,OAAO;AAAE,QAAI,+BAA6B;AAAE,oBAAa,QAAQ;AAAA,WAAkB;AAAE,oBAAa,qBAAoB,SAAQ,OAAM,QAAO;AAAE,YAAI,IAAI,CAAC;AAAO,UAAE,KAAK,MAAM,GAAG;AAAO,YAAI,cAAc,SAAS,KAAK,MAAM,SAAQ;AAAI,YAAI,WAAW,IAAI;AAAe,YAAI;AAAO,4BAAgB,UAAU,OAAM;AAAY,eAAO;AAAA;AAAA;AAAe,WAAO,YAAW,MAAM,MAAM;AAAA;AAErZ,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAUjM,MAAI,uBAAoC,yBAAU,UAAU;AACjE,gBAAU,uBAAsB;AAEhC,QAAI,SAAS,eAAa;AAK1B,mCAA8B,aAAa;AACzC,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAC1B,YAAM,QAAQ,MAAM,UAAU;AAC9B,aAAO;AAAA;AAWT,mBAAa,uBAAsB,CAAC;AAAA,MAClC,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,iBAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,eAAK,QAAQ,UAAU;AAAA;AAGzB,eAAO,YAAW,uBAA2B;AAAA;AAAA,OAQ9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,MAAM,KAAK;AACf,eAAO,IAAI,WAAW,6BAA6B,IAAI,WAAW;AAAA;AAAA,OAQnE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,aAAK;AAEL,YAAI,CAAC,KAAK,IAAI,QAAQ,OAAO,YAAY;AAEvC;AAAA;AAGF,YAAI,cAAc,KAAK,MAAM,QAAQ,OAAO;AAC5C,YAAI,mBAAkB,KAAK,IAAI,WAAW;AAE1C,YAAI,KAAK,sBAAsB,KAAK,IAAI,YAAY;AAClD,cAAI,UAAU,KAAK,IAAI;AACvB,cAAI,YAAY,QAAQ,MAAM;AAC9B,cAAI,OAAM,KAAK,KAAK,UAAU;AAC9B,cAAI,QAAO,KAAK,KAAK,UAAU;AAC/B,cAAI,UAAS,KAAK,KAAK,UAAU;AACjC,cAAI,SAAQ,KAAK,KAAK,UAAU;AAChC,cAAI,YAAY;AAChB,cAAI,WAAW;AAEf,cAAI,CAAC,oBAAmB,qBAAoB,YAAY;AACtD,gBAAI,QAAO,KAAK,SAAQ,YAAY,cAAc,GAAG;AACnD,0BAAY,GAAG,OAAO,CAAC,OAAM;AAAA;AAAA;AAIjC,cAAI,CAAC,oBAAmB,qBAAoB,cAAc;AACxD,gBAAI,OAAM,KAAK,UAAS,YAAY,eAAe,GAAG;AACpD,yBAAW,GAAG,OAAO,CAAC,MAAK;AAAA;AAAA;AAI/B,6BAAmB,aAAa,WAAW;AAAA,eACtC;AACL,4BAAkB;AAAA;AAGpB,YAAI,cAAc,YAAY,KAAK,MAAM,QAAQ;AACjD,YAAI,aAAa,WAAW,KAAK,MAAM,QAAQ;AAE/C,YAAI,CAAC,KAAK,IAAI,QAAQ,kBAAkB;AACtC,wBAAc;AAAA;AAGhB,oBAAY,MAAM,SAAS,GAAG,OAAO,aAAa;AAClD,oBAAY,MAAM,QAAQ,GAAG,OAAO,YAAY;AAChD,eAAO;AAAA;AAAA,QAEP,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AGlJF,mCAAO;;;ACAP,mCAAO;AATP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAUxM,MAAI,kBAA+B,yBAAU,QAAQ;AACnD,gBAAU,kBAAiB;AAE3B,QAAI,SAAS,eAAa;AAE1B,gCAA2B;AACzB,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,WAAO,eAAa;AAAA,IACpB;AAEF,QAAM,iBAAiB;AACvB,QAAM,iBAAiB;AACvB,MAAO,cAAQ;;;ADzDf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,uBAAoB,QAAQ,MAAM,OAAO;AAAE,QAAI,+BAA6B;AAAE,oBAAa,QAAQ;AAAA,WAAkB;AAAE,oBAAa,qBAAoB,SAAQ,OAAM,QAAO;AAAE,YAAI,IAAI,CAAC;AAAO,UAAE,KAAK,MAAM,GAAG;AAAO,YAAI,cAAc,SAAS,KAAK,MAAM,SAAQ;AAAI,YAAI,WAAW,IAAI;AAAe,YAAI;AAAO,4BAAgB,UAAU,OAAM;AAAY,eAAO;AAAA;AAAA;AAAe,WAAO,YAAW,MAAM,MAAM;AAAA;AAErZ,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAExM,4BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAUpM,MAAI,aAA0B,yBAAU,UAAU;AACvD,gBAAU,aAAY;AAEtB,QAAI,SAAS,eAAa;AAK1B,yBAAoB,aAAa;AAC/B,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAE1B,uBAAgB,yBAAuB,QAAQ,sBAAsB;AAErE,YAAM,QAAQ,MAAM,UAAU;AAC9B,YAAM,qBAAqB,MAAM,IAAI,WAAW;AAChD,aAAO;AAAA;AAWT,mBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,iBAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,eAAK,QAAQ,UAAU;AAAA;AAGzB,eAAO,YAAW,aAAiB;AAAA;AAAA,OAQpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,eAAO,KAAK,IAAI,WAAW;AAAA;AAAA,OAQ5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,CAAC,KAAK,kBAAkB,CAAC,KAAK,IAAI,QAAQ,OAAO,YAAY;AAE/D;AAAA;AAGF,YAAI,cAAc,KAAK,MAAM,QAAQ,OAAO;AAC5C,YAAI,mBAAkB,KAAK,IAAI,WAAW;AAC1C,YAAI,iBAAiB;AACrB,YAAI,2BAA2B;AAE/B,YAAI,KAAK,sBAAsB,KAAK,IAAI,cAAe,EAAC,oBAAmB,qBAAoB,aAAa;AAC1G,cAAI,UAAU,KAAK,IAAI;AACvB,cAAI,YAAY,QAAQ,MAAM;AAC9B,cAAI,OAAM,KAAK,KAAK,UAAU;AAC9B,cAAI,UAAS,KAAK,KAAK,UAAU;AACjC,cAAI,aAAa,YAAY;AAY7B,qCAA2B,YAAW;AACtC,cAAI;AACJ,cAAI;AACJ,sBAAY,QAAQ,MAAM,MAAM;AAChC,sBAAY,cAAc,KAAK,IAAI;AAEnC,cAAI,OAAM,KAAK,UAAS,aAAa,GAAG;AACtC,uBAAW,CAAC;AAAA,iBACP;AACL,uBAAW;AAAA;AAGb,2BAAiB;AACjB,sBAAY;AACZ,6BAAmB,aAAa,WAAW;AAAA,eACtC;AACL,2BAAiB,KAAK;AACtB,4BAAkB;AAAA;AAGpB,YAAI,kBAAkB,KAAK,4BAA4B,gBAAgB;AACvE,aAAK;AACL,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,KAAK;AACrC,YAAI,aAAa,KAAK,IAAI;AAC1B,YAAI,SAAS;AAEb,YAAI,KAAK,+BAA+B,cAAc,WAAW,YAAY,KAAK;AAChF,qBAAW,SAAS,oBAAoB,aAAa;AACrD,mBAAS;AAAA,mBACA,KAAK,2BAA2B,cAAc,KAAK;AAC5D,eAAK,2BAA2B,YAAY;AAC5C,mBAAS;AAAA;AAGX,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,aAAK,IAAI,WAAW;AAAA;AAAA,OAUrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,OAAM,IAAI;AACrC,YAAI,mBAAmB,KAAK,IAAI,WAAW,SAAS;AACpD,YAAI,MAAM;AACV,YAAI,MAAM;AAEV,eAAO,MAAM,IAAI;AACf,cAAI,SAAS,KAAK,IAAI,QAAQ,aAAa;AAC3C,iBAAO,WAAW,SAAS,mBAAmB;AAC9C,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,aAAK;AAEL,YAAI,KAAK,kBAAkB,OAAO;AAChC,eAAK;AACL,eAAK;AAAA;AAAA;AAAA,OAOR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,YAAY,KAAK,KACjB,UAAU,UAAU,SACpB,eAAe,UAAU,cACzB,aAAa,UAAU;AAC3B,YAAI,iBAAiB,kBAAkB;AACvC,YAAI,cAAc,KAAK,MAAM,QAAQ,OAAO;AAC5C,YAAI,mBAAmB,YAAY;AACnC,YAAI,mBAAkB,KAAK,IAAI,WAAW;AAE1C,YAAI,KAAK,sBAAsB,cAAc,qBAAoB,cAAc;AAC7E,cAAI,QAAQ,KAAK,IAAI,WAAW;AAEhC,cAAI,KAAK,IAAI,WAAW,mBAAmB;AACzC,qBAAS;AAAA;AAGX,kBAAQ,KAAK,IAAI,OAAO,QAAQ,cAAc;AAC9C,2BAAiB,QAAQ,GAAG,OAAO,OAAO;AAAA,eACrC;AACL,2BAAiB,QAAQ;AAAA;AAG3B,aAAK,MAAM,QAAQ,OAAO,MAAM,QAAQ,iBAAiB;AACzD,YAAI,cAAc,YAAY,KAAK,MAAM,QAAQ;AAEjD,YAAI,CAAC,KAAK,IAAI,QAAQ,kBAAkB;AACtC,wBAAc;AAAA;AAGhB,yBAAiB,SAAS,GAAG,OAAO,aAAa;AAAA;AAAA,OAMlD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,YAAI;AAEJ,YAAI,UAAS,KAAK,MAAM,QAAQ;AAChC,YAAI,aAAa,KAAK,IAAI;AAC1B,YAAI,wBAAwB,KAAK,IAAK,yBAAwB,eAAe,QAAQ,eAAe,SAAS,SAAS,WAAW,UAAU,UAAU,KAAK,KAAK,6BAA6B,QAAQ,0BAA0B,SAAS,wBAAwB;AAC/P,aAAK,MAAM,QAAQ,MAAM,MAAM,QAAQ,KAAK,MAAM,MAAM;AACxD,gBAAO,MAAM,QAAQ,QAAO,WAAW,MAAM;AAG7C,gBAAO,MAAM,SAAS,GAAG,OAAO,SAAS,QAAO,WAAW,MAAM,QAAQ,MAAM,uBAAuB;AAAA;AAAA,OAMvG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,QAAQ,KAAK,IAAI,WAAW;AAEhC,YAAI,OAAO,KAAK,IAAI,WAAW,qBAAqB,kBAAkB,UAAU;AAC9E,eAAK,SAAS,MAAM,MAAM,GAAG,OAAO,KAAK,IAAI,WAAW,qBAAqB,eAAe;AAAA,mBACnF,UAAU,GAAG;AAEtB,eAAK,SAAS,MAAM,MAAM;AAAA,eACrB;AACL,gBAAM,IAAI,MAAM;AAAA;AAGlB,aAAK,SAAS,MAAM,SAAS;AAE7B,YAAI,KAAK,gBAAgB;AACvB,eAAK;AAAA;AAAA;AAAA,OAOR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,OAAO,KAAK,IAAI,WAAW,wBAAwB,kBAAkB,UAAU;AACjF,eAAK,MAAM,QAAQ,SAAS,MAAM,OAAO,GAAG,OAAO,KAAK,IAAI,WAAW,wBAAwB,eAAe;AAAA,eACzG;AACL,eAAK,MAAM,QAAQ,SAAS,MAAM,OAAO;AAAA;AAAA;AAAA,OAW5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,WAAW,YAAY;AAC9C,YAAI,MAAM,KAAK;AACf,YAAI,iBAAiB,IAAI,cAAc,IAAI,cAAc;AACzD,YAAI,aAAa,eAAe,QAAQ;AACxC,YAAI,OAAO,KAAK;AAChB,YAAI,wBAAwB;AAE5B,YAAI,cAAc,WAAW,iBAAiB,WAAW,cAAc;AACrE,kCAAwB,kBAAkB,IAAI;AAAA;AAGhD,YAAI,YAAY;AACd,cAAI,kBAAkB,IAAI,WAAW;AACrC,cAAI,YAAY,IAAI,WAAW;AAC/B,kBAAQ,KAAK,aAAa,GAAG,YAAY;AACzC,kBAAQ,IAAI,WAAW,sBAAsB,KAAK,aAAa,YAAY,iBAAiB;AAE5F,kBAAQ;AAAA,eACH;AACL,kBAAQ,KAAK,aAAa,IAAI,WAAW,iBAAiB;AAAA;AAG5D,gBAAQ;AACR,eAAO,KAAK,kBAAkB;AAAA;AAAA,OAQ/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,KAAK,+BAA+B,KAAK,IAAI,YAAY;AAC3D,iBAAO,KAAK,IAAI,QAAQ,aAAa;AAAA;AAGvC,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,eAAO,aAAa,KAAK,4BAA4B,KAAK,IAAI;AAAA;AAAA,OAU/D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,UAAU;AACpD,YAAI,2BAA2B,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACnG,YAAI,eAAe,KAAK,IAAI,QAAQ,OAAO;AAC3C,YAAI,eAAe,KAAK,IAAI,WAAW;AAEvC,YAAI,cAAc;AAChB,sBAAY,cAAc;AAAA,eACrB;AACL,mBAAS,cAAc;AAAA;AAGzB,YAAI,kBAAkB;AAEtB,YAAI,CAAC,0BAA0B;AAC7B,cAAI,eAAe,KAAK,IAAI,WAAW;AACvC,cAAI,yBAAyB,KAAK,uBAAuB;AACzD,cAAI,gBAAgB,KAAK,IAAI,WAAW;AAExC,cAAK,2BAA0B,iBAAiB,MAAM,cAAc,SAAS,GAAG;AAC9E,gBAAI,gBAAgB,SAAS,cAAc;AAC3C,iBAAK,qBAAqB,KAAK,IAAI,WAAW;AAE9C,gBAAI,YAAY,KAAK,IAAI,WAAW,iBAAiB,GAAG;AACtD,uBAAS,cAAc;AACvB,gCAAkB,CAAC;AAAA,mBACd;AACL,0BAAY,cAAc;AAC1B,gCAAkB;AAAA;AAAA;AAAA;AAKxB,eAAO;AAAA;AAAA,QAEP,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAWX,WAAO;AAAA,IACP;;;AEvaF,mCAAO;AAMP,+BAAO;AAvBP,2BAAwB,KAAK,GAAG;AAAE,WAAO,iBAAgB,QAAQ,uBAAsB,KAAK,MAAM,6BAA4B,KAAK,MAAM;AAAA;AAEzI,+BAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,wCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,mBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,mBAAkB,GAAG;AAAA;AAEtZ,8BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,kCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,4BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAe/D,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAY/Q,MAAI,SAAsB,2BAAY;AAKpC,qBAAgB,aAAa,UAAU;AACrC,wBAAgB,MAAM;AAEtB,UAAI,CAAC,UAAU;AACb;AAAA;AAGF,WAAK,eAAe,IAAI,qBAAa;AACrC,WAAK,WAAW;AAChB,WAAK,MAAM;AACX,WAAK,WAAW;AAChB,WAAK,YAAY;AACjB,WAAK,OAAO;AACZ,WAAK,MAAM;AACX,WAAK,OAAO;AACZ,WAAK,SAAS;AACd,WAAK,QAAQ;AACb,WAAK,WAAW;AAChB,WAAK,YAAY;AACjB,WAAK,cAAc;AACnB,WAAK,aAAa;AAClB,WAAK,qBAAqB;AAAA,QACxB,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,aAAa;AAAA,QACb,aAAa;AAAA;AAGf,WAAK,0BAA0B,CAAE,UAAS,KAAK,mBAAmB,OAAO,MAAM;AAC/E,WAAK,SAAS;AACd,WAAK,cAAc;AACnB,WAAK,cAAc;AACnB,WAAK;AAAA;AAOP,mBAAa,SAAQ,CAAC;AAAA,MACpB,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,SAAS;AAEb,YAAI,eAAe,KAAK,IAAI,aAAa;AACzC,aAAK,aAAa,iBAAiB,cAAc,aAAa,WAAY;AACxE,iBAAO,OAAO;AAAA;AAEhB,aAAK,aAAa,iBAAiB,cAAc,WAAW,WAAY;AACtE,iBAAO,OAAO;AAAA;AAGhB,YAAI,QAAQ,gBAAe,IAAG,MAAK;AACjC,cAAI,UAAU,OAAO,KAAK,WAAW;AAErC,iBAAO,aAAa,iBAAiB,SAAS,cAAc,SAAU,QAAO;AAC3E,mBAAO,OAAO,aAAa,QAAO,OAAO,KAAK,WAAW;AAAA;AAAA;AAI7D,iBAAS,IAAI,GAAG,MAAM,KAAK,KAAK,WAAW,QAAQ,IAAI,KAAK,KAAK;AAC/D,gBAAM,GAAG;AAAA;AAAA;AAAA,OASZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,aAAK,YAAY;AAAA;AAAA,OAQlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAqB;AAC1B,aAAK,YAAY;AAAA;AAAA,OAUlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,QAAO,eAAe;AACjD,YAAI,CAAC,KAAK,aAAa,CAAC,KAAK,IAAI,WAAW,8BAA8B;AACxE;AAAA;AAGF,eAAM;AACN,iCAAyB;AAEzB,YAAI,QAAQ;AAEZ,YAAI,eAAe,KAAK,IAAI,aAAa;AACzC,YAAI,SAAS,cAAc;AAE3B,sBAAc,MAAM,UAAU;AAM9B,2BAAmB,YAAY;AAC7B,cAAI,WAAW,UAAU,KAAK,MAAM,OAAO,MAAM;AAC/C,mBAAO;AAAA;AAGT,cAAI,WAAW,UAAU,KAAK,KAAK,OAAO,MAAM,OAAO,SAAS;AAC9D,mBAAO;AAAA;AAGT,cAAI,WAAW,UAAU,KAAK,MAAM,OAAO,OAAO;AAChD,mBAAO;AAAA;AAGT,cAAI,WAAW,UAAU,KAAK,KAAK,OAAO,OAAO,OAAO,QAAQ;AAC9D,mBAAO;AAAA;AAAA;AAQX,yBAAiB,cAAc;AAC7B,cAAI,UAAU,eAAe;AAC3B,kBAAM,aAAa,oBAAoB,cAAc,aAAa;AAElE,0BAAc,MAAM,UAAU;AAAA;AAAA;AAIlC,aAAK,aAAa,iBAAiB,cAAc,aAAa;AAAA;AAAA,OAQ/D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,UAAU;AACtC,YAAI,eAAe,KAAK,IAAI;AAC5B,aAAK,OAAO,aAAa,cAAc;AACvC,YAAI,aAAa,CAAC,OAAO,QAAQ,UAAU,SAAS;AACpD,YAAI,QAAQ,KAAK,KAAK;AACtB,cAAM,WAAW;AACjB,cAAM,MAAM;AACZ,cAAM,OAAO;AAEb,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,cAAI,WAAW,WAAW;AAC1B,cAAI,MAAM,aAAa,cAAc;AACrC,cAAI,YAAY,YAAY,OAAO,KAAK,SAAS,aAAa;AAE9D,cAAI,KAAK,SAAS,aAAa,KAAK,SAAS,UAAU,MAAM;AAC3D,gBAAI,aAAa;AAAA;AAGnB,kBAAQ,IAAI;AACZ,gBAAM,kBAAkB,KAAK,SAAS,aAAa,KAAK,SAAS,UAAU,QAAQ,KAAK,SAAS,UAAU,QAAQ,SAAS,OAAO;AACnI,gBAAM,SAAS,KAAK,SAAS,aAAa,KAAK,SAAS,UAAU,QAAQ,GAAG,OAAO,KAAK,SAAS,UAAU,OAAO,QAAQ,GAAG,OAAO,SAAS,OAAO,OAAO;AAC5J,gBAAM,QAAQ,KAAK,SAAS,aAAa,KAAK,SAAS,UAAU,QAAQ,GAAG,OAAO,KAAK,SAAS,UAAU,OAAO,QAAQ,GAAG,OAAO,SAAS,OAAO,OAAO;AAC3J,eAAK,KAAK,YAAY;AAAA;AAGxB,aAAK,MAAM,KAAK,KAAK,WAAW;AAChC,aAAK,OAAO,KAAK,KAAK,WAAW;AACjC,aAAK,SAAS,KAAK,KAAK,WAAW;AACnC,aAAK,QAAQ,KAAK,KAAK,WAAW;AAClC,aAAK,WAAW,KAAK,IAAI;AACzB,aAAK,YAAY,KAAK,KAAK;AAC3B,aAAK,cAAc,KAAK,OAAO;AAC/B,aAAK,aAAa,KAAK,MAAM;AAC7B,aAAK,SAAS,KAAK,KAAK,WAAW;AACnC,aAAK,OAAO,aAAa;AACzB,aAAK,cAAc,KAAK,OAAO;AAC/B,aAAK,YAAY,QAAQ,KAAK,mBAAmB;AACjD,aAAK,YAAY,SAAS,KAAK,mBAAmB;AAClD,aAAK,YAAY,SAAS,CAAC,KAAK,mBAAmB,aAAa,KAAK,mBAAmB,aAAa,KAAK,mBAAmB,aAAa,KAAK;AAE/I,YAAI,mBAAmB;AACrB,eAAK;AAAA;AAGP,aAAK;AACL,YAAI,UAAU,KAAK,IAAI;AACvB,YAAI,gBAAgB,QAAQ;AAE5B,YAAI,CAAC,eAAe;AAClB,0BAAgB,aAAa,cAAc;AAC3C,wBAAc,YAAY;AAC1B,kBAAQ,gBAAgB;AACxB,kBAAQ,SAAS,YAAY;AAAA;AAG/B,sBAAc,YAAY,KAAK;AAAA;AAAA,OAMhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yCAAyC;AAC9C,YAAI,SAAS;AAEb,YAAI,eAAe,KAAK,IAAI;AAC5B,aAAK,mBAAmB;AAAA,UACtB,SAAS,aAAa,cAAc;AAAA,UACpC,gBAAgB,aAAa,cAAc;AAAA,UAC3C,aAAa,aAAa,cAAc;AAAA,UACxC,oBAAoB,aAAa,cAAc;AAAA;AAEjD,YAAI,QAAQ;AACZ,YAAI,eAAe;AACnB,aAAK,iBAAiB,QAAQ,YAAY;AAC1C,aAAK,iBAAiB,eAAe,YAAY;AACjD,aAAK,iBAAiB,YAAY,YAAY;AAC9C,aAAK,iBAAiB,mBAAmB,YAAY;AACrD,aAAK,iBAAiB,SAAS;AAAA,UAC7B,SAAS,KAAK,iBAAiB,QAAQ;AAAA,UACvC,gBAAgB,KAAK,iBAAiB,eAAe;AAAA,UACrD,aAAa,KAAK,iBAAiB,YAAY;AAAA,UAC/C,oBAAoB,KAAK,iBAAiB,mBAAmB;AAAA;AAE/D,YAAI,eAAe;AAAA,UACjB,UAAU;AAAA,UACV,QAAQ,GAAG,OAAO,cAAc;AAAA,UAChC,OAAO,GAAG,OAAO,cAAc;AAAA,UAC/B,iBAAiB,GAAG,OAAO,SAAS,eAAe,KAAK,KAAK;AAAA;AAE/D,mBAAW,cAAc,SAAU,OAAO,KAAK;AAC7C,iBAAO,iBAAiB,OAAO,mBAAmB,OAAO;AACzD,iBAAO,iBAAiB,OAAO,eAAe,OAAO;AAAA;AAEvD,YAAI,cAAc;AAAA,UAChB,UAAU;AAAA,UACV,QAAQ,GAAG,OAAO,OAAO;AAAA,UACzB,OAAO,GAAG,OAAO,OAAO;AAAA,UACxB,iBAAiB,GAAG,OAAO,SAAS,QAAQ,KAAK,KAAK;AAAA,UACtD,YAAY;AAAA,UACZ,QAAQ;AAAA;AAEV,mBAAW,aAAa,SAAU,OAAO,KAAK;AAC5C,iBAAO,iBAAiB,OAAO,YAAY,OAAO;AAClD,iBAAO,iBAAiB,OAAO,QAAQ,OAAO;AAAA;AAEhD,aAAK,KAAK,YAAY,KAAK,iBAAiB;AAC5C,aAAK,KAAK,YAAY,KAAK,iBAAiB;AAC5C,aAAK,KAAK,YAAY,KAAK,iBAAiB;AAC5C,aAAK,KAAK,YAAY,KAAK,iBAAiB;AAAA;AAAA,OAQ7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,KAAK,KAAK;AACpC,YAAI,gBAAgB,KAAK,IAAI,WAAW;AAExC,YAAI,cAAc,WAAW;AAC3B,cAAI,QAAQ,cAAc,UAAU,GAAG,OAAO,QAAQ,cAAc,UAAU,GAAG,KAAK;AACpF,mBAAO;AAAA;AAAA;AAIX,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gDAAgD,KAAK,KAAK,MAAK,OAAM,OAAO,QAAQ;AACzF,YAAI,cAAc,SAAS,KAAK,iBAAiB,OAAO,QAAQ,OAAO;AACvE,YAAI,eAAe,SAAS,KAAK,iBAAiB,OAAO,eAAe,OAAO;AAC/E,aAAK,iBAAiB,OAAO,QAAQ,MAAM,GAAG,OAAO,SAAS,OAAM,aAAa,KAAK;AACtF,aAAK,iBAAiB,OAAO,QAAQ,OAAO,GAAG,OAAO,SAAS,QAAO,aAAa,KAAK;AACxF,aAAK,iBAAiB,OAAO,eAAe,MAAM,GAAG,OAAO,SAAS,OAAM,eAAe,IAAI,GAAG,KAAK;AACtG,aAAK,iBAAiB,OAAO,eAAe,OAAO,GAAG,OAAO,SAAS,QAAO,eAAe,IAAI,GAAG,KAAK;AACxG,aAAK,iBAAiB,OAAO,YAAY,MAAM,GAAG,OAAO,SAAS,OAAM,QAAQ,KAAK;AACrF,aAAK,iBAAiB,OAAO,YAAY,OAAO,GAAG,OAAO,SAAS,QAAO,OAAO,KAAK;AACtF,aAAK,iBAAiB,OAAO,mBAAmB,MAAM,GAAG,OAAO,SAAS,OAAM,SAAS,eAAe,GAAG,KAAK;AAC/G,aAAK,iBAAiB,OAAO,mBAAmB,OAAO,GAAG,OAAO,SAAS,QAAO,QAAQ,eAAe,GAAG,KAAK;AAEhH,YAAI,KAAK,SAAS,OAAO,iBAAiB,KAAK,SAAS,OAAO,iBAAiB;AAC9E,eAAK,iBAAiB,OAAO,QAAQ,UAAU;AAC/C,eAAK,iBAAiB,OAAO,eAAe,UAAU;AAEtD,cAAI,KAAK,YAAY,KAAK,MAAM;AAC9B,iBAAK,iBAAiB,OAAO,YAAY,UAAU;AACnD,iBAAK,iBAAiB,OAAO,mBAAmB,UAAU;AAAA,iBACrD;AACL,iBAAK,iBAAiB,OAAO,YAAY,UAAU;AACnD,iBAAK,iBAAiB,OAAO,mBAAmB,UAAU;AAAA;AAAA,eAEvD;AACL,eAAK,iBAAiB,OAAO,QAAQ,UAAU;AAC/C,eAAK,iBAAiB,OAAO,YAAY,UAAU;AACnD,eAAK,iBAAiB,OAAO,eAAe,UAAU;AACtD,eAAK,iBAAiB,OAAO,mBAAmB,UAAU;AAAA;AAG5D,YAAI,QAAQ,KAAK,IAAI,WAAW,WAAW,mBAAmB,QAAQ,KAAK,IAAI,WAAW,WAAW,qBAAqB;AACxH,eAAK,iBAAiB,OAAO,QAAQ,SAAS;AAC9C,eAAK,iBAAiB,OAAO,eAAe,SAAS;AAAA,eAChD;AACL,eAAK,iBAAiB,OAAO,QAAQ,SAAS;AAC9C,eAAK,iBAAiB,OAAO,eAAe,SAAS;AAAA;AAAA;AAAA,OASxD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,SAAS;AAC9B,YAAI,KAAK,UAAU;AACjB;AAAA;AAGF,YAAI,YAAY,KAAK,KACjB,UAAU,UAAU,SACpB,eAAe,UAAU,cACzB,aAAa,UAAU;AAC3B,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI,YAAY,QAAQ;AAExB,iBAAS,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;AACrC,cAAI,IAAI,QAAQ,UAAU,iBAAiB;AAE3C,cAAI,KAAK,QAAQ,MAAM,KAAK,QAAQ,IAAI;AACtC,sBAAU;AACV,wBAAY,QAAQ;AACpB;AAAA;AAAA;AAIJ,iBAAS,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG;AAC7C,cAAI,KAAK,QAAQ,UAAU,iBAAiB;AAE5C,cAAI,MAAM,QAAQ,MAAM,MAAM,QAAQ,IAAI;AACxC,oBAAQ;AACR;AAAA;AAAA;AAIJ,YAAI,eAAe,QAAQ;AAE3B,iBAAS,MAAM,GAAG,MAAM,cAAc,OAAO,GAAG;AAC9C,cAAI,MAAM,QAAQ,aAAa,iBAAiB;AAEhD,cAAI,OAAO,QAAQ,MAAM,OAAO,QAAQ,IAAI;AAC1C,yBAAa;AACb,2BAAe,QAAQ;AACvB;AAAA;AAAA;AAIJ,iBAAS,MAAM,eAAe,GAAG,OAAO,GAAG,OAAO,GAAG;AACnD,cAAI,MAAM,QAAQ,aAAa,iBAAiB;AAEhD,cAAI,OAAO,QAAQ,MAAM,OAAO,QAAQ,IAAI;AAC1C,uBAAW;AACX;AAAA;AAAA;AAIJ,YAAI,YAAY,UAAU,eAAe,QAAQ;AAC/C,eAAK;AACL;AAAA;AAGF,YAAI,SAAS,QAAQ,QAAQ,IAAI,eAAW,SAAS;AACrD,YAAI,aAAa,YAAY,SAAS,eAAe;AACrD,YAAI,OAAO,aAAa,QAAQ,QAAQ,IAAI,eAAW,OAAO,aAAa;AAC3E,YAAI,aAAa,OAAO;AACxB,YAAI,WAAW,aAAa,OAAO,QAAQ;AAC3C,YAAI,kBAAkB,OAAO,QAAQ;AACrC,YAAI,SAAS,WAAW;AACxB,YAAI,UAAU,WAAW;AACzB,YAAI,QAAO,UAAU,gBAAgB,OAAO;AAC5C,YAAI,QAAQ,SAAS,OAAO,WAAW,QAAQ;AAE/C,YAAI,KAAK,uBAAuB,SAAS,QAAQ;AAC/C,cAAI,iBAAiB,KAAK,wBAAwB,WAAW,YAAY,UAAU,WAAW;AAC9F,cAAI,SAAS;AAEb,cAAI,gBAAgB;AAClB,gBAAI,kBAAkB,gBAAe,gBAAgB;AAErD,qBAAS,gBAAgB;AACzB,oBAAO,gBAAgB;AACvB,oBAAQ,gBAAgB;AAAA;AAG1B,cAAI,QAAQ;AACV,qBAAS;AAAA;AAAA;AAIb,YAAI,OAAM,SAAS,gBAAgB,MAAM;AACzC,YAAI,SAAS,SAAS,MAAM,YAAY,QAAQ;AAEhD,YAAI,KAAK,oBAAoB,YAAY,WAAW;AAClD,cAAI,mBAAmB,KAAK,wBAAwB,QAAQ,SAAS,OAAO,cAAc;AAE1F,cAAI,UAAU;AAEd,cAAI,kBAAkB;AACpB,gBAAI,mBAAmB,gBAAe,kBAAkB;AAExD,sBAAU,iBAAiB;AAC3B,mBAAM,iBAAiB;AACvB,qBAAS,iBAAiB;AAAA;AAG5B,cAAI,SAAS;AACX,qBAAS;AAAA;AAAA;AAIb,YAAI,QAAQ,kBAAiB,QAAQ;AAErC,YAAI,SAAS,MAAM,gBAAgB,MAAM,GAAG;AAC1C,kBAAO;AACP,mBAAS,SAAS,IAAI,SAAS,IAAI;AAAA;AAGrC,YAAI,SAAS,MAAM,iBAAiB,MAAM,GAAG;AAC3C,mBAAQ;AACR,kBAAQ,QAAQ,IAAI,QAAQ,IAAI;AAAA;AAGlC,aAAK,SAAS,MAAM,GAAG,OAAO,MAAK;AACnC,aAAK,SAAS,OAAO,GAAG,OAAO,OAAM;AACrC,aAAK,SAAS,QAAQ,GAAG,OAAO,OAAO;AACvC,aAAK,SAAS,UAAU;AACxB,aAAK,UAAU,MAAM,GAAG,OAAO,MAAK;AACpC,aAAK,UAAU,OAAO,GAAG,OAAO,OAAM;AACtC,aAAK,UAAU,SAAS,GAAG,OAAO,QAAQ;AAC1C,aAAK,UAAU,UAAU;AACzB,YAAI,QAAQ,KAAK,MAAM,KAAK,SAAS,OAAO,QAAQ;AACpD,aAAK,YAAY,MAAM,GAAG,OAAO,OAAM,SAAS,OAAO;AACvD,aAAK,YAAY,OAAO,GAAG,OAAO,OAAM;AACxC,aAAK,YAAY,QAAQ,GAAG,OAAO,OAAO;AAC1C,aAAK,YAAY,UAAU;AAC3B,aAAK,WAAW,MAAM,GAAG,OAAO,MAAK;AACrC,aAAK,WAAW,OAAO,GAAG,OAAO,QAAO,QAAQ,OAAO;AACvD,aAAK,WAAW,SAAS,GAAG,OAAO,SAAS,GAAG;AAC/C,aAAK,WAAW,UAAU;AAC1B,YAAI,uBAAuB,KAAK,SAAS,OAAO;AAChD,+BAAuB,OAAO,yBAAyB,aAAa,qBAAqB,KAAK,SAAS,cAAc;AACrH,YAAI,aAAa,KAAK,IAAI,WAAW,yBAAyB,OAAO;AACrE,YAAI,WAAW,OACX,WAAW;AAEf,YAAI,cAAc,MAAM,QAAQ,aAAa;AAC3C,cAAI,cAAc,gBAAe,YAAY;AAE7C,qBAAW,YAAY;AACvB,qBAAW,YAAY;AAAA;AAGzB,YAAI,qBAAqB,CAAC,wBAAwB,KAAK,YAAY,UAAU,WAAW;AACtF,eAAK,YAAY,UAAU;AAAA,eACtB;AACL,eAAK,YAAY,MAAM,GAAG,OAAO,OAAM,SAAS,KAAK,0BAA0B,GAAG;AAClF,eAAK,YAAY,OAAO,GAAG,OAAO,QAAO,QAAQ,KAAK,0BAA0B,GAAG;AACnF,eAAK,YAAY,mBAAmB,KAAK,mBAAmB;AAC5D,eAAK,YAAY,QAAQ,KAAK,mBAAmB;AAEjD,eAAK,YAAY,UAAU;AAC3B,cAAI,oBAAoB,qBAAqB,QAAQ;AACrD,cAAI,eAAe,sBAAsB;AAEzC,cAAI,cAAc;AAChB,gCAAoB,aAAa;AAAA;AAGnC,cAAI,aAAa,KAAK,IAAI,WAAW,kBAAkB,GAAG;AACxD,gBAAI,iBAAiB,eAAe,KAAK,wBAAwB,OAAO,KAAK;AAC7E,gBAAI,kBAAkB,iBAAiB,WAAW,QAAQ,SAAS,KAAK,mBAAmB,OAAO,MAAM;AACxG,gBAAI,6BAA6B,mBAAmB,WAAW;AAE/D,gBAAI,4BAA4B;AAC9B,mBAAK,YAAY,OAAO,GAAG,OAAO,KAAK,MAAM,QAAO,QAAQ,KAAK,0BAA0B,SAAS,KAAK,mBAAmB,OAAO,MAAM,IAAI;AAE7I,mBAAK,YAAY,mBAAmB;AAAA;AAAA;AAIxC,cAAI,UAAU,KAAK,IAAI,WAAW,eAAe,GAAG;AAClD,gBAAI,gBAAgB,eAAe,KAAK,wBAAwB,MAAM,KAAK;AAC3E,gBAAI,mBAAmB,gBAAgB,YAAY,QAAQ,SAAS,KAAK,mBAAmB,QAAQ,MAAM;AAE1G,gBAAI,8BAA8B,oBAAoB,YAAY;AAElE,gBAAI,6BAA6B;AAC/B,mBAAK,YAAY,MAAM,GAAG,OAAO,KAAK,MAAM,OAAM,SAAS,KAAK,0BAA0B,SAAS,KAAK,mBAAmB,QAAQ,MAAM,IAAI;AAE7I,mBAAK,YAAY,oBAAoB;AAAA;AAAA;AAIzC,eAAK,YAAY,UAAU;AAAA;AAG7B,YAAI,mBAAmB;AACrB,eAAK,uCAAuC,OAAO,UAAU,MAAK,OAAM,OAAO;AAAA;AAAA;AAAA,OAYlF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,eAAe,aAAa;AACjE,eAAO,kBAAkB,KAAK,IAAI,QAAQ,yBAAyB,gBAAgB,KAAK,IAAI,QAAQ;AAAA;AAAA,OAWrG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,kBAAkB,gBAAgB;AACpE,eAAO,qBAAqB,KAAK,IAAI,QAAQ,4BAA4B,mBAAmB,KAAK,IAAI,QAAQ;AAAA;AAAA,OAc9G;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,WAAW,WAAW,SAAS,aAAa,iBAAiB;AACnG,YAAI,UAAU,KAAK,IAAI;AACvB,YAAI,iBAAiB,QAAQ,cAAc;AAC3C,YAAI,cAAc;AAClB,YAAI,cAAc;AAClB,YAAI,2BAA2B;AAC/B,YAAI,SAAQ;AACZ,YAAI,YAAY;AAChB,YAAI,oBAAoB;AACxB,YAAI,cAAc;AAClB,YAAI,YAAY;AAEhB,gBAAQ;AAAA,eACD;AACH,0BAAc,wBAAuB;AACnC,qBAAO,QAAQ,aAAa,MAAM,SAAS;AAAA;AAG7C,0BAAc,wBAAuB;AACnC,qBAAO,YAAY,MAAM,QAAQ;AAAA;AAGnC,uCAA2B;AAC3B,gCAAoB;AACpB;AAAA,eAEG;AACH,0BAAc,wBAAuB;AACnC,qBAAO,QAAQ,gBAAgB,MAAM,SAAS;AAAA;AAGhD,0BAAc,wBAAuB;AACnC,qBAAO,WAAW,MAAM,QAAQ;AAAA;AAGlC,uCAA2B;AAC3B,gCAAoB;AACpB;AAAA;AAAA;AAKJ,YAAI,eAAe,UAAU,SAAS,2BAA2B;AAC/D,cAAI,yBAAyB,KAAK,IAAI,WAAW,iBAAiB;AAClE,wBAAc,YAAY,WAAW,yBAAyB;AAC9D,sBAAY,YAAY,SAAS,yBAAyB;AAE1D,cAAI,CAAC,eAAe,CAAC,WAAW;AAC9B,mBAAO;AAAA;AAGT,cAAI,oBAAoB,OAAO;AAC/B,cAAI,YAAY,OAAO;AAEvB,cAAI,eAAe,WAAW;AAC5B,qBAAQ,kBAAkB,qBAAqB,gBAAgB,qBAAqB;AACpF,wBAAY,UAAU,qBAAqB,YAAY,aAAa,kBAAkB;AAAA;AAGxF,iBAAO,CAAC,aAAa,QAAO;AAAA;AAG9B,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,eAAe,QAAQ;AACvD,YAAI,QAAQ,KAAK,eAAe;AAChC,YAAI,cAAc,OAAO;AAEzB,YAAI,CAAC,eAAe,YAAY,MAAM;AACpC,mBAAS,KAAK,gBAAgB;AAAA,eACzB;AACL,cAAI,SAAS,KAAK,gBAAgB,WAAW;AAC3C,wBAAY,KAAK,gBAAgB;AAAA;AAGnC,gBAAM,kBAAkB,YAAY;AAEpC,cAAI,kBAAkB,SAAS,kBAAkB,UAAU;AACzD,kBAAM,SAAS,GAAG,OAAO,YAAY,OAAO;AAAA;AAG9C,cAAI,kBAAkB,WAAW,kBAAkB,QAAQ;AACzD,kBAAM,QAAQ,GAAG,OAAO,YAAY,OAAO;AAAA;AAAA;AAAA;AAAA,OAWhD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC,UAAU;AACnD,YAAI,gBAAgB;AAAA,UAClB,OAAO;AAAA,UACP,OAAO;AAAA;AAET,YAAI,QAAQ,KAAK,UAAU;AAC3B,cAAM,kBAAkB,cAAc;AACtC,cAAM,QAAQ,GAAG,OAAO,cAAc,OAAO;AAC7C,cAAM,SAAS,GAAG,OAAO,cAAc,OAAO;AAAA;AAAA,OAU/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,eAAe,QAAQ;AACvD,aAAK,2BAA2B;AAEhC,YAAI,QAAQ;AACV,mBAAS,KAAK,gBAAgB;AAAA,eACzB;AACL,sBAAY,KAAK,gBAAgB;AAAA;AAAA;AAAA,OAOpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,aAAK,SAAS,UAAU;AACxB,aAAK,UAAU,UAAU;AACzB,aAAK,YAAY,UAAU;AAC3B,aAAK,WAAW,UAAU;AAC1B,aAAK,YAAY,UAAU;AAE3B,YAAI,mBAAmB;AACrB,eAAK,iBAAiB,OAAO,QAAQ,UAAU;AAC/C,eAAK,iBAAiB,OAAO,YAAY,UAAU;AAAA;AAAA;AAAA,OAOtD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,aAAa;AAClB,aAAK,KAAK,WAAW,YAAY,KAAK;AAAA;AAAA;AAI1C,WAAO;AAAA;AAGT,MAAO,iBAAQ;;;AC1xBf,mCAAO;AANP,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAe/Q,MAAI,eAAc,oBAAI;AAKtB,MAAI,SAAqB,2BAAY;AAInC,oBAAe,UAAU;AACvB,wBAAgB,MAAM;AAQtB,WAAK,WAAW;AAQhB,WAAK,eAAe,IAAI,qBAAa;AACrC,mBAAY,IAAI,MAAM;AAAA,QACpB,4BAA4B;AAAA,QAC5B,iBAAiB,CAAC,MAAM;AAAA,QACxB,gBAAgB,CAAC,MAAM;AAAA;AAEzB,WAAK;AAAA;AASP,mBAAa,QAAO,CAAC;AAAA,MACnB,KAAK;AAAA,MACL,OAAO,2BAA0B;AAC/B,YAAI,QAAQ;AAEZ,aAAK,aAAa,iBAAiB,KAAK,SAAS,QAAQ,QAAQ,eAAe,SAAU,QAAO;AAC/F,iBAAO,MAAM,cAAc;AAAA;AAE7B,aAAK,aAAa,iBAAiB,KAAK,SAAS,QAAQ,OAAO,aAAa,SAAU,QAAO;AAC5F,iBAAO,MAAM,YAAY;AAAA;AAE3B,aAAK,aAAa,iBAAiB,KAAK,SAAS,QAAQ,OAAO,YAAY,SAAU,QAAO;AAC3F,iBAAO,MAAM,WAAW;AAAA;AAG1B,YAAI,kBAAkB,4BAA2B;AAC/C,gBAAM,aAAa,iBAAiB,MAAM,SAAS,QAAQ,QAAQ,cAAc,SAAU,QAAO;AAChG,mBAAO,MAAM,aAAa;AAAA;AAG5B,gBAAM,aAAa,iBAAiB,MAAM,SAAS,QAAQ,QAAQ,YAAY,SAAU,QAAO;AAC9F,mBAAO,MAAM,WAAW;AAAA;AAG1B,cAAI,CAAC,MAAM,SAAS,mBAAmB;AACrC,kBAAM,SAAS,oBAAoB;AAAA;AAGrC,gBAAM,aAAa,iBAAiB,MAAM,SAAS,QAAQ,QAAQ,UAAU,WAAY;AACvF,yBAAa,MAAM,SAAS,kBAAkB;AAE9C,gBAAI,CAAC,MAAM,SAAS,kBAAkB,SAAS;AAC7C,oBAAM,SAAS,WAAW;AAAA;AAG5B,kBAAM,SAAS,kBAAkB,UAAU;AAC3C,kBAAM,SAAS,kBAAkB,WAAW,WAAW,WAAY;AACjE,kBAAI,CAAC,MAAM,SAAS,cAAc;AAChC,sBAAM,SAAS,kBAAkB,UAAU;AAE3C,sBAAM,SAAS,WAAW;AAAA;AAAA,eAE3B;AAAA;AAAA;AAIP,YAAI,kBAAkB,4BAA2B;AAC/C,gBAAM,aAAa,iBAAiB,MAAM,SAAS,QAAQ,QAAQ,WAAW,SAAU,QAAO;AAC7F,mBAAO,MAAM,UAAU;AAAA;AAGzB,gBAAM,aAAa,iBAAiB,MAAM,SAAS,QAAQ,QAAQ,aAAa,SAAU,QAAO;AAC/F,mBAAO,MAAM,YAAY;AAAA;AAAA;AAI7B,YAAI,mBAAmB;AACrB;AAAA,eACK;AAEL,cAAI,oBAAoB;AACtB;AAAA;AAGF;AAAA;AAAA;AAAA,OAWH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,aAAa;AAClD,YAAI,OAAO,aAAY,IAAI;AAC3B,YAAI,kBAAkB,KAAK,WAAW;AACtC,YAAI,0BAA0B,gBAAgB;AAE9C,YAAI,KAAK,8BAA8B,yBAAyB;AAC9D,cAAI,OAAO,CAAC,wBAAwB,KAAK,KAAK,2BAA2B,KAAK,MAC1E,aAAa,KAAK,IAClB,cAAc,KAAK;AACvB,cAAI,QAAQ,CAAC,wBAAwB,KAAK,KAAK,2BAA2B,KAAK,MAC3E,aAAa,MAAM,IACnB,cAAc,MAAM;AACxB,iBAAO,eAAe,eAAe,eAAe;AAAA;AAGtD,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,MAAM;AAC/B,YAAI,OAAO;AACX,YAAI,QAAQ,KAAK,SAAS,QAAQ;AAClC,YAAI,KAAK,YAAY,MAAM,CAAC,MAAM,OAAO;AAEzC,YAAI,IAAI;AACN,eAAK,SAAS,KAAK,SAAS,QAAQ,UAAU;AAC9C,eAAK,KAAK;AAAA,mBACD,SAAS,MAAM,eAAe,SAAS,MAAM,YAAY;AAClE,eAAK,SAAS,KAAK,SAAS,WAAW,UAAU,UAAU;AAC3D,eAAK,KAAK,KAAK,SAAS,QAAQ,QAAQ,KAAK;AAAA,mBACpC,SAAS,MAAM,eAAe,SAAS,MAAM,SAAS;AAC/D,cAAI,KAAK,SAAS,WAAW,kBAAkB,WAAW;AACxD,iBAAK,SAAS,KAAK,SAAS,WAAW,kBAAkB,UAAU;AACnE,iBAAK,KAAK,KAAK,SAAS,QAAQ,QAAQ,KAAK;AAAA;AAAA;AAIjD,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,YAAI,OAAO,aAAY,IAAI;AAC3B,YAAI,gBAAgB,KAAK,SAAS,aAAa;AAC/C,YAAI,iBAAgB,QAAQ,WAAW,OAAM;AAC7C,YAAI,aAAa,OAAM;AAEvB,YAAI,eAAe,iBAAiB,eAAc,OAAO,iBAAiB,eAAc,OAAO,eAAe;AAC5G;AAAA;AAGF,YAAI,OAAO,KAAK,WAAW;AAE3B,YAAI,SAAS,YAAY,WAAW;AAClC,eAAK,SAAS,WAAW,yBAAyB,QAAO;AAAA,mBAChD,KAAK,MAAM,KAAK,SAAS,WAAW,oBAAoB;AACjE,eAAK,SAAS,WAAW,mBAAmB,QAAO,KAAK,QAAQ,KAAK,IAAI,KAAK;AAAA;AAIhF,YAAK,QAAM,WAAW,KAAK,KAAK,SAAS,iBAAiB,KAAK,IAAI;AACjE,eAAK,eAAe,KAAK,KAAK;AAC9B,uBAAa,KAAK,gBAAgB;AAClC,eAAK,gBAAgB,KAAK,WAAW,WAAY;AAC/C,iBAAK,eAAe,KAAK;AAAA,aACxB;AAAA;AAAA;AAAA,OAUN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAO;AACnC,YAAI,KAAK,SAAS,WAAW,sBAAsB;AACjD,cAAI,OAAO,KAAK,WAAW,OAAM;AAEjC,cAAI,KAAK,IAAI;AACX,iBAAK,SAAS,WAAW,qBAAqB,QAAO,KAAK,QAAQ,KAAK,IAAI,KAAK;AAAA;AAAA;AAAA;AAAA,OAWrF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,YAAI,CAAC,KAAK,SAAS,WAAW,oBAAoB;AAChD;AAAA;AAGF,YAAI,QAAQ,KAAK,SAAS,QAAQ;AAClC,YAAI,KAAK,YAAY,OAAM,QAAQ,CAAC,MAAM,OAAO;AACjD,YAAI,UAAU,KAAK,SAAS,eAAe,KAAK;AAEhD,YAAI,MAAM,OAAO,QAAQ,iBAAiB,UAAU,IAAI,QAAQ;AAC9D,kBAAQ,gBAAgB;AACxB,eAAK,SAAS,WAAW,mBAAmB,QAAO,KAAK,SAAS,QAAQ,UAAU,KAAK,IAAI,KAAK;AAAA;AAAA;AAAA,OAUpG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,QAAO;AAChC,YAAI,CAAC,KAAK,SAAS,WAAW,mBAAmB;AAC/C;AAAA;AAGF,YAAI,QAAQ,KAAK,SAAS,QAAQ;AAClC,YAAI,SAAS,YAAY,OAAM,QAAQ,CAAC,MAAM,OAAO;AACrD,YAAI,SAAS,YAAY,OAAM,eAAe,CAAC,MAAM,OAAO;AAE5D,YAAI,UAAU,WAAW,UAAU,UAAU,QAAQ,QAAQ;AAC3D,eAAK,SAAS,WAAW,kBAAkB,QAAO,KAAK,SAAS,QAAQ,UAAU,SAAS,QAAQ,KAAK;AAAA;AAAA;AAAA,OAU3G;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAmB,QAAO;AAC/B,YAAI,OAAO,aAAY,IAAI;AAC3B,YAAI,OAAO,KAAK,WAAW,OAAM;AAEjC,YAAI,KAAK,MAAM,KAAK,SAAS,WAAW,kBAAkB;AACxD,eAAK,SAAS,WAAW,iBAAiB,QAAO,KAAK,QAAQ,KAAK,IAAI,KAAK;AAAA;AAI9E,YAAI,OAAM,WAAW,KAAK,CAAC,KAAK,SAAS,cAAc;AACrD;AAAA;AAGF,YAAI,KAAK,OAAO,KAAK,eAAe,MAAM,KAAK,OAAO,KAAK,eAAe,IAAI;AAC5E,cAAI,SAAS,OAAM,QAAQ,WAAW;AACpC,iBAAK,SAAS,WAAW,wBAAwB,QAAO,KAAK,QAAQ,KAAK,IAAI,KAAK;AAAA,iBAC9E;AACL,iBAAK,SAAS,WAAW,kBAAkB,QAAO,KAAK,QAAQ,KAAK,IAAI,KAAK;AAAA;AAG/E,eAAK,eAAe,KAAK;AACzB,eAAK,eAAe,KAAK;AAAA,mBAChB,KAAK,OAAO,KAAK,eAAe,IAAI;AAC7C,eAAK,eAAe,KAAK,KAAK;AAC9B,uBAAa,KAAK,gBAAgB;AAClC,eAAK,gBAAgB,KAAK,WAAW,WAAY;AAC/C,iBAAK,eAAe,KAAK;AAAA,aACxB;AAAA;AAAA;AAAA,OAUN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,QAAO;AAClC,YAAI,OAAO,aAAY,IAAI;AAC3B,aAAK,6BAA6B,KAAK,SAAS,WAAW,UAAU;AACrE,aAAK,SAAS,eAAe;AAC7B,aAAK,YAAY;AAAA;AAAA,OASlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,QAAO;AAChC,YAAI;AAEJ,YAAI,SAAS,OAAM;AACnB,YAAI,mBAAoB,oBAAmB,KAAK,WAAW,aAAa,QAAQ,qBAAqB,SAAS,SAAS,iBAAiB;AACxI,YAAI,eAAe,UAAU,qBAAqB,iBAAiB,OAAO,KAAK,iBAAiB,OAAO;AACvG,YAAI,oBAAoB,OAAM,cAAc,gBAAgB,KAAK,SAAS,WAAW;AAKrF,YAAI,mBAAmB;AACrB,cAAI,sBAAsB,CAAC,KAAK,UAAU;AAM1C,cAAI,WAAY,qBAAoB,sBAAsB,KAAK,uBAAuB,WAAW,CAAC,oBAAoB,SAAS,OAAO,UAAU;AAC9I,mBAAM;AAAA,qBACG,CAAC,KAAK,uBAAuB,SAAS;AAG/C,mBAAM;AAAA;AAAA;AAIV,aAAK,UAAU;AACf,aAAK,SAAS,eAAe;AAAA;AAAA,OAM9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,OAAO,aAAY,IAAI;AAC3B,qBAAa,KAAK,gBAAgB;AAClC,qBAAa,KAAK,gBAAgB;AAClC,aAAK,aAAa;AAAA;AAAA;AAItB,WAAO;AAAA;AAGT,MAAO,gBAAQ;;;ACzYf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,gCAAO;AAIA,MAAI,YAAY;AAAA,IACrB,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,UAAU;AAAA,IACV,YAAY,cAAc,MAAM;AAAA,IAChC,YAAY,cAAc,MAAM;AAAA,IAChC,UAAU,cAAc,MAAM;AAAA,IAC9B,WAAW;AAAA,IACX,WAAW;AAAA,IACX,OAAO;AAAA,IACP,cAAc;AAAA,IACd,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA;AAEL,MAAI,gBAAgB,CAAC,UAAU,KAAK,UAAU,YAAY,UAAU,YAAY,UAAU,aAAa,UAAU,UAAU,UAAU,YAAY,UAAU,YAAY,UAAU,UAAU,UAAU,WAAW,UAAU,WAAW,UAAU,QAAQ,UAAU,KAAK,UAAU,OAAO,UAAU,QAAQ,UAAU,IAAI,UAAU,IAAI,UAAU,IAAI,UAAU,IAAI,UAAU,IAAI,UAAU,IAAI,UAAU,IAAI,UAAU,IAAI,UAAU,IAAI,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,MAAM,UAAU,QAAQ,UAAU,YAAY,UAAU,kBAAkB,UAAU,YAAY,UAAU,YAAY,UAAU,MAAM,UAAU,UAAU,UAAU,WAAW,UAAU,SAAS,UAAU,OAAO,UAAU,aAAa,UAAU,OAAO,UAAU;AAQr0B,2BAAyB,SAAS;AACvC,WAAO,YAAY,MACnB,WAAW,MAAM,WAAW,MAC5B,WAAW,MAAM,WAAW,OAC5B,WAAW,OAAO,WAAW,OAC7B,WAAW,OAAO,WAAW,OAC7B,WAAW,OACX,WAAW,MAAM,WAAW;AAAA;AAOvB,yBAAuB,SAAS;AACrC,WAAO,cAAc,SAAS;AAAA;AAUzB,qBAAmB,SAAS;AACjC,QAAI,QAAO;AAEX,QAAI,WAAW;AACb,YAAK,KAAK,UAAU,cAAc,UAAU,eAAe,UAAU;AAAA,WAChE;AACL,YAAK,KAAK,UAAU;AAAA;AAGtB,WAAO,MAAK,SAAS;AAAA;AAUhB,yBAAuB,SAAS;AACrC,WAAO,CAAC,UAAU,SAAS,UAAU,cAAc,UAAU,eAAe,UAAU,iBAAiB,SAAS;AAAA;AAQ3G,iBAAe,SAAS,UAAU;AACvC,QAAI,QAAO,SAAS,MAAM;AAC1B,QAAI,SAAS;AACb,cAAU,OAAM,SAAU,KAAK;AAC7B,UAAI,YAAY,UAAU,MAAM;AAC9B,iBAAS;AACT,eAAO;AAAA;AAAA;AAGX,WAAO;AAAA;;;AC5IT,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAQ/Q,sBAAoB;AACpB,sBAAoB;AACpB,sBAAoB;AACpB,sBAAoB;AACpB,sBAAoB;AAKpB,MAAI,WAAwB,2BAAY;AAItC,uBAAkB,aAAa;AAC7B,wBAAgB,MAAM;AAQtB,WAAK,MAAM;AACX,UAAI,YAAY,KAAK,KACjB,eAAe,UAAU,cACzB,aAAa,UAAU,YACvB,UAAU,UAAU;AAMxB,UAAI,mBAAmB,SAAS,WAAW,iBAAiB,aAAa,MAAM,YAAY;AAC3F,UAAI,4BAA4B,SAAS,WAAW,iBAAiB,aAAa,MAAM,UAAU,MAAM;AAExG,WAAK,WAAW,KAAK;AACrB,WAAK,eAAe,IAAI,qBAAa,KAAK;AAC1C,WAAK,gBAAgB,kBAAkB;AACvC,WAAK,IAAI,OAAO,kBAAkB,KAAK;AACvC,WAAK,IAAI,OAAO,mBAAmB,KAAK;AACxC,UAAI,mBAAmB,WAAW,iBAAiB,QAAQ,cAAc,YAAY,iBAAiB,gBAAgB;AACtH,WAAK,oBAAoB,mBAAmB,QAAQ,SAAS,qBAAqB,QAAQ;AAC1F,WAAK,aAAa;AAClB,WAAK,gBAAgB;AACrB,WAAK,cAAc;AACnB,WAAK,uBAAuB;AAC5B,WAAK,0BAA0B;AAC/B,WAAK;AACL,WAAK,qBAAqB;AAC1B,WAAK,oBAAoB;AACzB,WAAK,YAAY;AACjB,WAAK,aAAa;AAClB,WAAK,mBAAmB;AAAA,QACtB,OAAO;AAAA,QACP,QAAQ;AAAA;AAEV,WAAK,oBAAoB;AACzB,WAAK,sBAAsB;AAC3B,WAAK,oBAAoB,oBAAoB;AAC7C,WAAK;AACL,WAAK,cAAc,WAAW;AAC9B,WAAK,cAAc,WAAW;AAAA;AAShC,mBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,aAAa;AAEjB,YAAI,KAAK,YAAY;AACnB,uBAAa,KAAK,WAAW,4BAA4B;AAAA,eACpD;AACL,eAAK,aAAa,cAAc,WAAW,KAAK;AAAA;AAGlD,YAAI,CAAC,WAAW,eAAe;AAC7B,eAAK,gBAAgB;AAAA,YACnB,gBAAgB;AAAA,YAChB,wBAAwB,kCAAkC;AACxD,qBAAO;AAAA;AAAA;AAAA;AAKb,YAAI,CAAC,WAAW,2BAA2B;AACzC,eAAK,0BAA0B;AAAA,YAC7B,gBAAgB;AAAA,YAChB,wBAAwB,kCAAkC;AACxD,qBAAO;AAAA;AAAA;AAAA;AAKb,YAAI,KAAK,eAAe;AACtB,uBAAa,KAAK,cAAc,4BAA4B;AAAA,eACvD;AACL,eAAK,gBAAgB,cAAc,cAAc,KAAK;AAAA;AAGxD,YAAI,KAAK,aAAa;AACpB,uBAAa,KAAK,YAAY,4BAA4B;AAAA,eACrD;AACL,eAAK,cAAc,cAAc,YAAY,KAAK;AAAA;AAGpD,YAAI,KAAK,WAAW,kBAAkB,KAAK,YAAY,gBAAgB;AACrE,cAAI,KAAK,sBAAsB;AAC7B,yBAAa,KAAK,qBAAqB,4BAA4B;AAAA,iBAC9D;AACL,iBAAK,uBAAuB,cAAc,uBAAuB,KAAK;AAAA;AAAA;AAI1E,YAAI,KAAK,cAAc,kBAAkB,KAAK,YAAY,gBAAgB;AACxE,cAAI,KAAK,yBAAyB;AAChC,yBAAa,KAAK,wBAAwB,4BAA4B;AAAA,iBACjE;AACL,iBAAK,0BAA0B,cAAc,0BAA0B,KAAK;AAAA;AAAA;AAIhF,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,CAAC,KAAK,IAAI,OAAO;AACnB;AAAA;AAGF,YAAI,CAAC,KAAK,IAAI,QAAQ,OAAO,YAAY;AAEvC,eAAK;AACL;AAAA;AAGF,aAAK,IAAI,KAAK;AAEd,YAAI,KAAK,mBAAmB;AAC1B,eAAK,YAAY;AAAA;AAGnB,YAAI,KAAK,qBAAqB;AAC5B,eAAK,WAAW;AAAA;AAGlB,aAAK,oBAAoB;AACzB,aAAK,sBAAsB;AAAA;AAAA,OAM5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,QAAQ;AAEZ,YAAI,aAAa,KAAK,KAClB,eAAe,WAAW,cAC1B,aAAa,WAAW;AAC5B,YAAI,8BAA8B,KAAK,WAAW;AAClD,YAAI,+BAA+B,KAAK,YAAY;AACpD,aAAK,aAAa,iBAAiB,aAAa,iBAAiB,WAAW,SAAU,QAAO;AAC3F,iBAAO,MAAM,UAAU;AAAA;AAEzB,aAAK,aAAa,iBAAiB,aAAa,iBAAiB,SAAS,WAAY;AACpF,iBAAO,MAAM;AAAA;AAEf,aAAK,aAAa,iBAAiB,cAAc,oBAAoB,WAAY;AAC/E,iBAAO,MAAM;AAAA;AAEf,aAAK,aAAa,iBAAiB,6BAA6B,UAAU,SAAU,QAAO;AACzF,iBAAO,MAAM,cAAc;AAAA,WAC1B;AAAA,UACD,SAAS;AAAA;AAGX,YAAI,gCAAgC,8BAA8B;AAChE,eAAK,aAAa,iBAAiB,8BAA8B,UAAU,SAAU,QAAO;AAC1F,mBAAO,MAAM,cAAc;AAAA,aAC1B;AAAA,YACD,SAAS;AAAA;AAAA;AAIb,YAAI,mBAAmB,WAAW,oBAAoB,WAAW,mBAAmB;AACpF,YAAI,mBAAmB,KAAK,sBAAsB;AAClD,YAAI,eAAe,KAAK,IAAI,WAAW,WAAW;AAClD,YAAI,oBAAoB;AAAA,UACtB,SAAS;AAAA;AAGX,YAAI,gBAAgB,oBAAoB,CAAC,YAAY;AACnD,eAAK,aAAa,iBAAiB,KAAK,IAAI,QAAQ,eAAe,SAAS,SAAU,QAAO;AAC3F,mBAAO,MAAM,aAAa,QAAO;AAAA,aAChC;AAAA;AAGL,YAAI,WAAW,CAAC,KAAK,YAAY,KAAK,eAAe,KAAK,aAAa,KAAK,sBAAsB,KAAK;AACvG,iBAAS,QAAQ,SAAU,SAAS;AAClC,cAAI,WAAW,QAAQ,gBAAgB;AACrC,gBAAI,UAAS,QAAQ,MAAM,QAAQ;AAEnC,kBAAM,aAAa,iBAAiB,SAAQ,SAAS,SAAU,QAAO;AACpE,qBAAO,MAAM,aAAa,QAAO;AAAA,eAChC;AAAA;AAAA;AAGP,YAAI;AACJ,aAAK,aAAa,iBAAiB,YAAY,UAAU,WAAY;AACnE,uBAAa;AACb,0BAAgB,WAAW,WAAY;AACrC,kBAAM,IAAI,WAAW;AAAA,aACpB;AAAA;AAAA;AAAA,OAON;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,aAAK,aAAa,YAAY;AAAA;AAAA,OAQ/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAO;AAGnC,YAAI,aAAa,KAAK,IAAI;AAC1B,YAAI,mBAAmB,KAAK,YAAY;AACxC,YAAI,iBAAiB,KAAK,WAAW;AACrC,YAAI,SAAS,OAAM;AAGnB,YAAI,KAAK,YAAY;AACnB,cAAI,mBAAmB,cAAc,WAAW,cAAc,CAAC,OAAM,OAAO,SAAS,mBAAmB,qBAAqB,cAAc,WAAW,cAAc,CAAC,OAAM,OAAO,SAAS,mBAAmB;AAC5M;AAAA;AAAA;AAIJ,aAAK,oBAAoB;AAAA;AAAA,OAS1B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,QAAO,gBAAgB;AAClD,YAAI,aAAa,KAAK,IAAI;AAG1B,YAAI,mBAAmB,KAAK,YAAY;AACxC,YAAI,iBAAiB,KAAK,WAAW;AACrC,YAAI,SAAS,OAAM;AAGnB,YAAI,2BAA2B,mBAAmB,cAAc,WAAW,cAAc,CAAC,OAAO,SAAS;AAC1G,YAAI,6BAA6B,qBAAqB,cAAc,WAAW,cAAc,CAAC,OAAO,SAAS;AAE9G,YAAI,KAAK,cAAe,6BAA4B,6BAA6B;AAC/E;AAAA;AAGF,YAAI,mBAAmB,KAAK,4BAA4B;AAExD,YAAI,kBAAkB,KAAK,sBAAsB,cAAc,kBAAkB;AAC/E,iBAAM;AAAA;AAAA;AAAA,OAST;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,QAAO;AAC/B,aAAK,aAAa,MAAM,OAAM,SAAS;AAAA;AAAA,OAMxC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,aAAa;AAAA;AAAA,OAUnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,QAAO;AACjD,YAAI,oBAAoB,KAAK;AAC7B,YAAI,SAAS,MAAM,OAAM,UAAU,KAAK,OAAM,cAAc,OAAM;AAClE,YAAI,SAAS,MAAM,OAAM,UAAU,KAAK,OAAM,cAAc,OAAM;AAElE,YAAI,OAAM,cAAc,GAAG;AACzB,oBAAU,SAAS;AACnB,oBAAU,SAAS;AAAA;AAGrB,YAAI,6BAA6B,KAAK,iBAAiB;AACvD,YAAI,+BAA+B,KAAK,mBAAmB;AAC3D,eAAO,8BAA8B;AAAA;AAAA,OAStC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,OAAO;AACtC,YAAI,iBAAiB,KAAK,kBAAkB;AAC5C,aAAK,kBAAkB,aAAa;AACpC,eAAO,mBAAmB,KAAK,kBAAkB;AAAA;AAAA,OASlD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,OAAO;AACxC,YAAI,iBAAiB,KAAK,kBAAkB;AAC5C,aAAK,kBAAkB,cAAc;AACrC,eAAO,mBAAmB,KAAK,kBAAkB;AAAA;AAAA,OAQlD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,YAAI,KAAK,WAAW;AAClB;AAAA;AAGF,YAAI,aAAa,KAAK,IAAI;AAC1B,YAAI,YAAY,KAAK,WAAW,MAAM,QAAQ;AAC9C,YAAI,aAAa,KAAK,YAAY,MAAM,QAAQ;AAChD,YAAI,OAAO,CAAC,KAAK,kBAAkB,YAAY,KAAK,kBAAkB,YAClE,aAAa,KAAK,IAClB,YAAY,KAAK;AACrB,aAAK,sBAAsB,UAAU,eAAe,cAAc,KAAK,gBAAgB,WAAW;AAClG,aAAK,oBAAoB,WAAW,cAAc,aAAa,KAAK,gBAAgB,WAAW;AAC/F,aAAK,cAAc,WAAW;AAC9B,aAAK,cAAc,WAAW;AAE9B,YAAI,KAAK,qBAAqB;AAC5B,oBAAU,aAAa;AACvB,cAAI,eAAe,KAAK,cAAc,iBAAiB,KAAK,cAAc,MAAM,QAAQ,SAAS;AAEjG,cAAI,cAAc;AAChB,yBAAa,aAAa;AAAA;AAAA;AAI9B,YAAI,KAAK,mBAAmB;AAC1B,qBAAW,YAAY;AAAA;AAGzB,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,SAAS,KAAK,WAAW;AAC7B,YAAI,aAAa,OAAO,YACpB,YAAY,OAAO;AAEvB,YAAI,KAAK,WAAW,gBAAgB;AAClC,eAAK,WAAW,MAAM,QAAQ,OAAO,aAAa;AAAA;AAGpD,YAAI,KAAK,cAAc,gBAAgB;AACrC,eAAK,cAAc,MAAM,QAAQ,OAAO,aAAa;AAAA;AAGvD,YAAI,KAAK,YAAY,gBAAgB;AACnC,eAAK,YAAY,MAAM,QAAQ,OAAO,YAAY;AAAA;AAAA;AAAA,OAOrD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wCAAwC;AAC7C,aAAK;AACL,aAAK,YAAY;AACjB,aAAK,WAAW;AAEhB,YAAI,KAAK,cAAc,gBAAgB;AACrC,eAAK,cAAc;AAAA;AAGrB,YAAI,aAAa,KAAK,KAClB,aAAa,WAAW,YACxB,UAAU,WAAW;AAEzB,YAAI,WAAW,iBAAiB,QAAQ,cAAc,YAAY,iBAAiB,gBAAgB,UAAU;AAC3G,eAAK,oBAAoB,QAAQ;AAAA,eAC5B;AACL,eAAK,oBAAoB,qBAAqB,QAAQ;AAAA;AAGxD,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,aAAa;AAClB,aAAK,WAAW;AAEhB,YAAI,KAAK,cAAc,OAAO;AAC5B,eAAK,cAAc;AAAA;AAGrB,aAAK,YAAY;AAEjB,YAAI,KAAK,sBAAsB;AAC7B,eAAK,qBAAqB;AAAA;AAG5B,YAAI,KAAK,2BAA2B,KAAK,wBAAwB,OAAO;AACtE,eAAK,wBAAwB;AAAA;AAG/B,aAAK,YAAY;AAAA;AAAA,OAQlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACnF,YAAI,WAAW,KAAK,IAAI,QAAQ;AAChC,YAAI,QAAQ,SAAS;AACrB,YAAI,SAAS,SAAS;AAEtB,YAAI,UAAU,KAAK,iBAAiB,SAAS,WAAW,KAAK,iBAAiB,QAAQ;AACpF,eAAK,iBAAiB,QAAQ;AAC9B,eAAK,iBAAiB,SAAS;AAC/B,eAAK;AAAA;AAGP,YAAI,KAAK,cAAc,OAAO;AAC5B,eAAK,cAAc,QAAQ;AAAA;AAG7B,aAAK,YAAY,QAAQ;AACzB,aAAK,WAAW,QAAQ;AAExB,YAAI,KAAK,sBAAsB;AAC7B,eAAK,qBAAqB,QAAQ;AAAA;AAGpC,YAAI,KAAK,2BAA2B,KAAK,wBAAwB,OAAO;AACtE,eAAK,wBAAwB,QAAQ;AAAA;AAAA;AAAA,OASxC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,YAAI,aAAa,KAAK,KAClB,aAAa,WAAW,YACxB,UAAU,WAAW;AACzB,YAAI,eAAe,KAAK,IAAI,WAAW;AACvC,YAAI,YAAY,KAAK,IAAI,WAAW;AACpC,YAAI,gBAAgB,WAAW;AAC/B,YAAI,mBAAmB,WAAW;AAClC,YAAI,aAAa,QAAQ,MAAM;AAC/B,mBAAW,QAAQ,GAAG,OAAO,gBAAgB,KAAK,YAAY,aAAa,GAAG,eAAe;AAC7F,mBAAW,SAAS,GAAG,OAAO,mBAAmB,KAAK,WAAW,aAAa,GAAG,aAAa,GAAG;AAEjG,YAAI,KAAK,gBAAgB,GAAG;AAC1B,cAAI,wBAAwB,QAAQ,eAChC,uBAAuB,sBAAsB,cAC7C,sBAAsB,sBAAsB;AAChD,cAAI,kBAAkB,QAAQ,QAC1B,qBAAqB,gBAAgB,cACrC,oBAAoB,gBAAgB;AACxC,eAAK,oBAAoB,uBAAuB;AAChD,eAAK,qBAAqB,sBAAsB;AAEhD,cAAI,KAAK,qBAAqB,QAAQ,MAAM,cAAc,KAAK,gBAAgB,qBAAqB;AAClG,iBAAK,qBAAqB;AAAA,qBACjB,KAAK,sBAAsB,QAAQ,MAAM,eAAe,KAAK,gBAAgB,sBAAsB;AAC5G,iBAAK,oBAAoB;AAAA;AAAA;AAI7B,aAAK,WAAW,mBAAmB;AACnC,aAAK,YAAY,mBAAmB;AACpC,aAAK,cAAc,mBAAmB;AAAA;AAAA,OAMvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,UAAU,KAAK,IAAI;AAEvB,YAAI,CAAC,QAAQ,aAAa;AACxB;AAAA;AAGF,aAAK,WAAW;AAEhB,YAAI,KAAK,cAAc,OAAO;AAC5B,eAAK,cAAc;AAAA;AAGrB,aAAK,YAAY;AAAA;AAAA,OASlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,SAAS;AACxC,YAAI,CAAC,SAAS;AACZ,iBAAO;AAAA;AAGT,YAAI,WAAW,CAAC,KAAK,YAAY,KAAK,aAAa,KAAK,eAAe,KAAK,sBAAsB,KAAK;AACvG,YAAI,SAAS;AACb,kBAAU,UAAU,SAAU,MAAM;AAClC,cAAI,CAAC,MAAM;AACT;AAAA;AAGF,cAAI,KAAK,SAAS,KAAK,MAAM,QAAQ,MAAM,SAAS,UAAU;AAC5D,qBAAS,KAAK;AAAA;AAAA;AAGlB,eAAO;AAAA;AAAA,OAOR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC;AAC3C,YAAI,cAAc,KAAK,SAAS,QAAQ;AACxC,YAAI,WAAW,CAAC,KAAK,YAAY,KAAK,aAAa,KAAK,eAAe,KAAK,sBAAsB,KAAK;AACvG,kBAAU,UAAU,SAAU,MAAM;AAClC,cAAI,CAAC,MAAM;AACT;AAAA;AAGF,eAAK,MAAM,QAAQ,MAAM,YAAY,YAAY;AAAA;AAAA;AAAA;AAKvD,WAAO;AAAA;AAGT,MAAO,mBAAQ;;;ACnoBf,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAO/Q,MAAI,SAAsB,2BAAY;AAIpC,qBAAgB,aAAa;AAC3B,wBAAgB,MAAM;AAEtB,WAAK,MAAM;AAAA;AAcb,mBAAa,SAAQ,CAAC;AAAA,MACpB,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAQ,WAAW,aAAa,cAAc,YAAY;AACvF,YAAI,OAAO,MAAM,KAAK,OAAO,MAAM,GAAG;AACpC,iBAAO;AAAA;AAGT,YAAI,uBAAuB,KAAK,2BAA2B,OAAO,KAAK,aAAa;AACpF,YAAI,qBAAqB,KAAK,yBAAyB,OAAO,KAAK,WAAW;AAC9E,eAAO,wBAAwB;AAAA;AAAA,OAWhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC,QAAQ,aAAa,YAAY;AAC1E,YAAI,CAAC,KAAK,IAAI,OAAO;AACnB,iBAAO;AAAA;AAGT,YAAI,sBAAsB,KAAK,iBAC3B,mBAAmB,oBAAoB,kBACvC,cAAc,oBAAoB,aAClC,eAAe,oBAAoB;AAEvC,YAAI,SAAS;AAEb,YAAI,UAAU,KAAK,UAAU,KAAK,IAAI,eAAe,GAAG,IAAI;AAC1D,cAAI,qBAAqB,KAAK;AAC9B,cAAI,oBAAoB,KAAK;AAE7B,cAAI,UAAU,oBAAoB,qBAAqB,MAAO,UAAS,sBAAsB,aAAa;AACxG,qBAAS,YAAY,SAAS;AAAA,qBACrB,sBAAsB,MAAM,oBAAoB,MAAO,UAAS,qBAAqB,cAAc;AAC5G,qBAAS,YAAY,SAAS,QAAQ;AAAA;AAAA;AAI1C,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,KAAK,WAAW,cAAc;AACrE,YAAI,CAAC,KAAK,IAAI,OAAO;AACnB,iBAAO;AAAA;AAGT,YAAI,uBAAuB,KAAK,iBAC5B,kBAAkB,qBAAqB,iBACvC,eAAe,qBAAqB,cACpC,aAAa,qBAAqB,YAClC,YAAY,qBAAqB;AAErC,YAAI,SAAS;AAEb,YAAI,OAAO,KAAK,OAAO,KAAK,IAAI,YAAY,GAAG,IAAI;AACjD,cAAI,kBAAkB,KAAK;AAC3B,cAAI,iBAAiB,KAAK;AAE1B,cAAI,OAAO,gBAAgB,kBAAkB,MAAO,OAAM,mBAAmB,YAAY;AACvF,qBAAS,WAAW,SAAS;AAAA,qBACpB,mBAAmB,MAAM,iBAAiB,MAAO,OAAM,kBAAkB,MAAM,YAAY,mBAAmB,eAAe;AACtI,qBAAS,WAAW,SAAS,KAAK;AAAA;AAAA;AAItC,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA8B;AACnC,YAAI,uBAAuB,KAAK,iBAC5B,aAAa,qBAAqB,YAClC,UAAU,qBAAqB,SAC/B,aAAa,qBAAqB,YAClC,YAAY,qBAAqB,WACjC,eAAe,qBAAqB;AAExC,YAAI,aAAa,KAAK,IAAI;AAC1B,YAAI,kBAAkB,QAAQ;AAE9B,YAAI,WAAW,+BAA+B,YAAY;AACxD,cAAI,oBAAoB,OAAO,QAAQ;AACvC,cAAI,mBAAmB,YAAY,QAAQ;AAC3C,cAAI,eAAe,YAAY;AAC/B,cAAI,kBAAkB,aAAa,YAAY;AAE/C,cAAI,kBAAkB,MAAM,mBAAmB,gBAAgB,iBAAiB;AAC9E,gBAAI,aAAa,WAAW;AAC5B,0BAAc,WAAW,aAAa,GAAG;AAEzC,qBAAS,MAAM,WAAW,MAAM,GAAG,OAAO;AACxC,4BAAc,WAAW,aAAa,MAAM,GAAG;AAE/C,kBAAI,kBAAkB,MAAM,mBAAmB,cAAc,iBAAiB;AAE5E,kCAAkB;AAClB;AAAA;AAAA;AAAA;AAAA;AAMR,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA6B;AAClC,YAAI,uBAAuB,KAAK,iBAC5B,aAAa,qBAAqB,YAClC,UAAU,qBAAqB,SAC/B,aAAa,qBAAqB,YAClC,YAAY,qBAAqB;AAErC,YAAI,aAAa,KAAK,IAAI;AAC1B,YAAI,iBAAiB,QAAQ;AAE7B,YAAI,WAAW,+BAA+B,YAAY;AACxD,cAAI,oBAAoB,OAAO,QAAQ;AACvC,cAAI,kBAAkB,aAAa,YAAY;AAE/C,cAAI,kBAAkB,MAAM,iBAAiB;AAC3C,gBAAI,eAAe,YAAY;AAC/B,gBAAI,aAAa,WAAW;AAE5B,qBAAS,MAAM,GAAG,OAAO,WAAW,OAAO;AACzC,4BAAc,WAAW,aAAa,MAAM,GAAG;AAE/C,kBAAI,kBAAkB,MAAM,aAAa,mBAAmB,cAAc;AAExE,iCAAiB,MAAM;AACvB;AAAA;AAAA;AAAA;AAAA;AAMR,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAiC;AACtC,YAAI,uBAAuB,KAAK,iBAC5B,cAAc,qBAAqB,aACnC,UAAU,qBAAqB,SAC/B,aAAa,qBAAqB,YAClC,eAAe,qBAAqB;AAExC,YAAI,aAAa,KAAK,IAAI;AAC1B,YAAI,qBAAqB,QAAQ;AAEjC,YAAI,YAAY,+BAA+B,YAAY;AACzD,cAAI,oBAAoB,OAAO,QAAQ;AACvC,cAAI,kBAAkB,WAAW,QAAQ;AACzC,cAAI,cAAc,WAAW;AAC7B,cAAI,mBAAmB,cAAc,YAAY;AAEjD,cAAI,kBAAkB,OAAO,kBAAkB,eAAe,kBAAkB;AAC9E,gBAAI,eAAe,WAAW;AAE9B,qBAAS,SAAS,cAAc,SAAS,GAAG,UAAU;AACpD,8BAAgB,YAAY,aAAa,SAAS,GAAG;AAErD,kBAAI,kBAAkB,OAAO,kBAAkB,gBAAgB,kBAAkB;AAE/E,qCAAqB;AACrB;AAAA;AAAA;AAAA;AAAA;AAMR,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAgC;AACrC,YAAI,uBAAuB,KAAK,iBAC5B,cAAc,qBAAqB,aACnC,UAAU,qBAAqB,SAC/B,aAAa,qBAAqB,YAClC,eAAe,qBAAqB;AAExC,YAAI,aAAa,KAAK,IAAI;AAC1B,YAAI,oBAAoB,QAAQ;AAEhC,YAAI,YAAY,+BAA+B,YAAY;AACzD,cAAI,oBAAoB,OAAO,QAAQ;AACvC,cAAI,mBAAmB,cAAc,YAAY;AAEjD,cAAI,kBAAkB,OAAO,kBAAkB;AAC7C,gBAAI,cAAc,WAAW;AAC7B,gBAAI,eAAe,WAAW;AAE9B,qBAAS,SAAS,GAAG,UAAU,cAAc,UAAU;AACrD,8BAAgB,YAAY,aAAa,SAAS,GAAG;AAErD,kBAAI,kBAAkB,OAAO,eAAe,oBAAoB,aAAa;AAE3E,oCAAoB,SAAS;AAC7B;AAAA;AAAA;AAAA;AAAA;AAMR,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,MAAM,KAAK;AACf,YAAI,aAAa,IAAI,WAAW;AAChC,YAAI,cAAc,IAAI,WAAW;AACjC,YAAI,UAAU,IAAI;AAClB,YAAI,aAAa,IAAI;AACrB,YAAI,YAAY,IAAI,WAAW;AAC/B,YAAI,eAAe,IAAI,WAAW;AAClC,YAAI,eAAe,IAAI,WAAW;AAClC,YAAI,kBAAkB,IAAI,WAAW;AACrC,YAAI,mBAAmB,IAAI,WAAW;AACtC,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA;AAAA;AAKN,WAAO;AAAA;AAGT,MAAO,iBAAQ;;;AC7Tf,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAQ/Q,MAAI,WAAwB,2BAAY;AAKtC,uBAAkB,aAAa,UAAU;AACvC,UAAI,QAAQ;AAEZ,wBAAgB,MAAM;AAEtB,WAAK,MAAM;AAEX,WAAK,WAAW;AAEhB,WAAK,WAAW;AAAA,QACd,OAAO;AAAA,QAGP,oBAAoB;AAAA,QAEpB,uBAAuB;AAAA,QACvB,UAAU;AAAA,QAEV,qBAAqB;AAAA,QACrB,wBAAwB;AAAA,QACxB,iBAAiB,4BAA2B;AAC1C,iBAAO;AAAA;AAAA,QAET,cAAc;AAAA,QAEd,MAAM;AAAA,QACN,gBAAgB;AAAA,QAEhB,kBAAkB;AAAA,QAElB,cAAc;AAAA,QAEd,iBAAiB;AAAA,QAEjB,yBAAyB,mCAAmC;AAC1D,iBAAO,MAAM,WAAW,sBAAsB,KAAK,MAAM,WAAW,cAAc,SAAS;AAAA;AAAA,QAG7F,wBAAwB,kCAAkC;AACxD,iBAAO,MAAM,WAAW,kBAAkB,KAAK,MAAM,WAAW,iBAAiB,SAAS;AAAA;AAAA,QAG5F,2BAA2B,qCAAqC;AAC9D,iBAAO,MAAM,WAAW,qBAAqB;AAAA;AAAA,QAE/C,cAAc;AAAA,QAEd,YAAY,sBAAsB;AAChC,iBAAO;AAAA;AAAA,QAGT,eAAe,yBAAyB;AACtC,iBAAO;AAAA;AAAA,QAET,WAAW;AAAA,QACX,cAAc;AAAA,QACd,cAAc,sBAAsB,KAAK,QAAQ,IAAI;AACnD,cAAI,WAAW,MAAM,WAAW,QAAQ,KAAK;AAE7C,wBAAc,IAAI,aAAa,UAAU,aAAa,OAAO,KAAK;AAAA;AAAA,QAGpE,aAAa,uBAAuB;AAAA;AAAA,QAEpC,WAAW,qBAAqB;AAAA;AAAA,QAEhC,kBAAkB;AAAA,QAClB,oBAAoB;AAAA,QACpB,YAAY;AAAA,QACZ,2BAA2B;AAAA,QAC3B,+BAA+B;AAAA,QAC/B,kCAAkC;AAAA,QAElC,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,eAAe;AAAA,QAEf,gBAAgB;AAAA,QAChB,uBAAuB;AAAA,QACvB,sBAAsB;AAAA,QACtB,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,8BAA8B;AAAA,QAC9B,sBAAsB;AAAA,QACtB,qBAAqB;AAAA,QACrB,oBAAoB;AAAA,QACpB,sBAAsB;AAAA,QACtB,qBAAqB;AAAA,QACrB,uBAAuB;AAAA,QACvB,+BAA+B,uCAAuC,OAAO;AAC3E,iBAAO;AAAA;AAAA,QAET,wBAAwB;AAAA,QACxB,uBAAuB;AAAA,QACvB,+BAA+B,uCAAuC,WAAW;AAC/E,iBAAO;AAAA;AAAA,QAET,kCAAkC,0CAA0C,WAAW;AACrF,iBAAO;AAAA;AAAA,QAET,gBAAgB;AAAA,QAEhB,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,gBAAgB;AAAA,QAChB,oBAAoB;AAAA,QACpB,iBAAiB;AAAA;AAGnB,WAAK,WAAW;AAChB,iBAAW,KAAK,UAAU,SAAU,OAAO,KAAK;AAC9C,YAAI,SAAS,SAAS,QAAQ;AAC5B,gBAAM,SAAS,OAAO,SAAS;AAAA,mBACtB,UAAU,QAAQ;AAC3B,gBAAM,IAAI,MAAM,uBAAwB,OAAO,KAAK;AAAA,eAC/C;AACL,gBAAM,SAAS,OAAO;AAAA;AAAA;AAAA;AAa5B,mBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,gBAAgB,UAAU,OAAO;AACtC,YAAI,SAAS;AAEb,YAAI,UAAU,QAAQ;AAEpB,qBAAW,UAAU,SAAU,cAAc,KAAK;AAChD,mBAAO,SAAS,OAAO;AAAA;AAAA,eAEpB;AAEL,eAAK,SAAS,YAAY;AAAA;AAG5B,eAAO,KAAK;AAAA;AAAA,OAab;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,KAAK,QAAQ,QAAQ,QAAQ,QAAQ;AAC9D,YAAI,OAAO,KAAK,SAAS,SAAS,YAAY;AAE5C,iBAAO,KAAK,SAAS,KAAK,QAAQ,QAAQ,QAAQ;AAAA,mBACzC,WAAW,UAAU,MAAM,QAAQ,KAAK,SAAS,OAAO;AAEjE,iBAAO,KAAK,SAAS,KAAK;AAAA;AAG5B,eAAO,KAAK,SAAS;AAAA;AAAA,OAStB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,aAAa,KAAK;AACvB,eAAO,CAAC,CAAC,KAAK,SAAS;AAAA;AAAA;AAI3B,WAAO;AAAA;AAGT,MAAO,mBAAQ;;;AChNf,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAU/Q,MAAI,WAAwB,2BAAY;AAItC,uBAAkB,aAAa;AAC7B,UAAI,QAAQ;AAEZ,wBAAgB,MAAM;AAEtB,WAAK,MAAM;AAEX,WAAK,WAAW,KAAK;AACrB,WAAK,gBAAgB;AACrB,WAAK,yBAAyB;AAC9B,WAAK,kCAAkC;AACvC,WAAK,eAAe;AACpB,WAAK,iBAAiB;AACtB,WAAK,iBAAiB;AACtB,WAAK,wBAAwB;AAC7B,WAAK,2BAA2B;AAChC,WAAK,eAAe,IAAI,qBAAa,KAAK;AAC1C,WAAK,aAAa,iBAAiB,KAAK,IAAI,YAAY,UAAU,WAAY;AAC5E,cAAM,eAAe,MAAM;AAAA;AAAA;AAQ/B,mBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,kBAAkB,KAAK,IAAI;AAC/B,YAAI,oBAAoB,KAAK,SAAS,WAAW,WAAW;AAC5D,YAAI,SAAS;AAEb,YAAI,sBAAsB,KAAK,IAAI,YAAY;AAC7C,mBAAS,gBAAgB,gBAAgB;AAAA,eACpC;AACL,cAAI,aAAa,YAAY;AAE7B,mBAAS,aAAa,KAAK,kBAAkB,eAAe,IAAI,kBAAkB,eAAe;AAAA;AAGnG,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,MAAM,KAAK;AACf,YAAI,eAAe,IAAI,cACnB,aAAa,IAAI;AACrB,YAAI,oBAAoB,KAAK,SAAS,WAAW,YAAY;AAC7D,YAAI,iBAAiB,aAAa,gBAAgB;AAClD,YAAI,eAAe,IAAI,WAAW;AAClC,YAAI,mBAAkB,IAAI,WAAW;AACrC,YAAI;AACJ,YAAI;AAEJ,YAAI,kBAAiB;AACnB,iBAAO,WAAW,KAAK,SAAS,QAAQ;AAAA;AAG1C,YAAI,IAAI,WAAW,mBAAmB;AACpC,kBAAQ,KAAK,IAAI,iBAAiB,KAAK,qBAAqB,MAAM;AAAA,eAC7D;AACL,kBAAQ,KAAK,IAAI,KAAK,yBAAyB,iBAAiB,KAAK,qBAAqB,MAAM;AAAA;AAGlG,YAAI,sBAAsB,cAAc,eAAe,KAAK,KAAK,gBAAgB,GAAG,eAAe,KAAK,OAAO;AAK7G,iBAAO,aAAa,gBAAgB;AAAA;AAGtC,YAAI,sBAAsB,YAAY;AACpC,qBAAW,SAAS,KAAK,SAAS,WAAW,YAAY,mBAAmB,YAAY;AAExF,cAAI,aAAa,YAAY,aAAa,YAAY,aAAa,QAAQ;AAGzE,mBAAO,KAAK,IAAI,OAAO,kBAAkB;AAAA;AAAA;AAI7C,YAAI,iBAAiB,IAAI,WAAW;AAEpC,YAAI,mBAAmB,UAAU,CAAC,gBAAgB;AAEhD,iBAAO,KAAK,IAAI,OAAO,WAAW,KAAK,SAAS,QAAQ;AAAA;AAI1D,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,eAAO,KAAK,6BAA6B,KAAK;AAAA;AAAA,OAQ/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,eAAO,KAAK,4BAA4B,KAAK;AAAA;AAAA,OAQ9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,OAAM,QAAQ;AAC5C,YAAI,UAAU,KAAK,IAAI;AACvB,YAAI,MAAM;AACV,YAAI,SAAS;AAEb,eAAO,SAAS,QAAQ;AACtB,iBAAO,QAAQ,eAAe;AAC9B,oBAAU;AAAA;AAGZ,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,KAAK,gBAAgB;AACvB,iBAAO,KAAK;AAAA;AAGd,YAAI,gBAAgB,KAAK,SAAS,QAAQ;AAC1C,YAAI,eAAe,KAAK,IAAI,aAAa,cAAc;AACvD,qBAAa,MAAM,QAAQ;AAC3B,qBAAa,MAAM,SAAS;AAC5B,sBAAc,YAAY;AAC1B,YAAI,YAAY,aAAa;AAC7B,aAAK,iBAAiB;AACtB,sBAAc,YAAY;AAC1B,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,eAAO,OAAO,KAAK,IAAI,QAAQ;AAAA;AAAA,OAMhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,eAAO,YAAY,KAAK,IAAI,QAAQ;AAAA;AAAA,OAMrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,YAAI,UAAU,KAAK,IAAI;AACvB,eAAO,WAAW,QAAQ,UAAU,WAAW,QAAQ,UAAU,WAAW,QAAQ;AAAA;AAAA,OAMrF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,gBAAgB,KAAK,SAAS,WAAW;AAE7C,YAAI,CAAC,cAAc,QAAQ;AACzB,eAAK,qBAAqB;AAAA,mBACjB,MAAM,KAAK,qBAAqB;AACzC,eAAK,qBAAqB,YAAY,KAAK,IAAI,QAAQ;AAAA;AAGzD,eAAO,KAAK;AAAA;AAAA,OAMb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,kBAAkB,KAAK;AAE3B,YAAI,oBAAoB,UAAU;AAChC,iBAAO;AAAA;AAGT,YAAI,qBAAqB,KAAK;AAE9B,YAAI,qBAAqB,GAAG;AAC1B,6BAAmB;AAAA;AAGrB,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,yBAAyB,KAAK,SAAS,WAAW;AACtD,YAAI,aAAa,KAAK,SAAS,WAAW;AAE1C,YAAI,wBAAwB;AAC1B,eAAK,iBAAiB;AAEtB,mBAAS,IAAI,GAAG,MAAM,WAAW,QAAQ,IAAI,KAAK,KAAK;AACrD,iBAAK,kBAAkB,uBAAuB,MAAM;AAAA;AAAA;AAIxD,YAAI,KAAK,IAAI,aAAa;AACxB,iBAAO,KAAK,IAAI,YAAY,WAAW;AAAA;AAGzC,YAAI,MAAM,KAAK,iBAAiB;AAC9B,cAAI,WAAW,QAAQ;AACrB,gBAAI,KAAK,KAAK,SAAS,QAAQ,MAAM,cAAc;AACnD,iBAAK,iBAAiB;AAEtB,qBAAS,KAAK,GAAG,OAAO,WAAW,QAAQ,KAAK,MAAM,MAAM;AAC1D,kBAAI,IAAI;AACN,qBAAK,kBAAkB,WAAW;AAClC,qBAAK,GAAG;AAAA,qBACH;AAGL,qBAAK,kBAAkB;AAAA;AAAA;AAAA,iBAGtB;AACL,iBAAK,iBAAiB;AAAA;AAAA;AAI1B,aAAK,iBAAiB,KAAK,SAAS,WAAW,0BAA0B,KAAK,mBAAmB,KAAK;AACtG,eAAO,KAAK;AAAA;AAAA,OAMb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,iBAAiB,KAAK;AAE1B,YAAI,mBAAmB,UAAU;AAC/B,iBAAO;AAAA;AAGT,YAAI,iBAAiB,KAAK;AAE1B,YAAI,iBAAiB,GAAG;AACtB,iBAAO,iBAAiB;AAAA;AAG1B,eAAO;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,kBAAkB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC1F,YAAI,MAAM,KAAK;AACf,YAAI,aAAa,IAAI,YACjB,aAAa,IAAI,YACjB,UAAU,IAAI,SACd,eAAe,IAAI;AACvB,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,aAAK,iBAAiB;AAEtB,YAAI,WAAW,SAAS,iBAAiB,oBAAoB,aAAa;AACxE,mBAAS;AAAA,eACJ;AACL,mBAAS,KAAK;AAAA;AAGhB,YAAI,MAAM,WAAW,WAAW,sBAAsB,WAAW,WAAW;AAE5E,YAAI,MAAM,GAAG;AACX,gBAAM;AAAA;AAGR,YAAI,eAAe,IAAI,WAAW;AAClC,YAAI,kBAAkB,IAAI,WAAW;AACrC,YAAI,YAAY,IAAI,WAAW;AAE/B,YAAI,cAAc;AAChB,4BAAkB,WAAW,WAAW,aAAa,GAAG;AACxD,iBAAO;AACP,oBAAU;AAAA;AAGZ,YAAI,mBAAmB,WAAW,cAAc,OAAO;AACrD,4BAAkB,WAAW,cAAc,aAAa,YAAY,iBAAiB;AACrF,oBAAU;AAAA;AAGZ,YAAI,QAAQ,OAAO,iBAAiB,QAAQ,OAAO,cAAc;AAC/D,4BAAkB;AAAA,eACb;AACL,4BAAkB,kBAAkB;AAAA;AAGtC,eAAO,IAAI,qBAAuB;AAAA,UAChC,cAAc;AAAA,UACd,cAAc;AAAA,UACd,YAAY,IAAI,WAAW;AAAA,UAC3B,YAAY,oBAAoB,WAAW;AACzC,mBAAO,QAAQ,aAAa;AAAA;AAAA,UAE9B,YAAY,WAAW,SAAS;AAAA,UAChC;AAAA,UACA;AAAA;AAAA;AAAA,OAaH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,YAAI,kBAAkB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC1F,YAAI,MAAM,KAAK;AACf,YAAI,aAAa,IAAI,YACjB,aAAa,IAAI,YACjB,UAAU,IAAI,SACd,eAAe,IAAI;AACvB,YAAI,QAAQ,KAAK;AACjB,YAAI,MAAM,WAAW,YAAY,sBAAsB,WAAW,YAAY;AAC9E,aAAK,qBAAqB;AAE1B,YAAI,MAAM,GAAG;AACX,gBAAM;AAAA;AAGR,YAAI,mBAAmB,IAAI,WAAW;AAEtC,YAAI,kBAAkB;AACpB,cAAI,oBAAoB,WAAW,YAAY,aAAa,GAAG;AAC/D,iBAAO;AACP,mBAAS;AAAA;AAGX,YAAI,QAAQ,OAAO,gBAAgB,QAAQ,OAAO,aAAa;AAC7D,mBAAS,kBAAkB;AAAA;AAG7B,eAAO,IAAI,wBAA0B;AAAA,UACnC,cAAc;AAAA,UACd,cAAc;AAAA,UACd,YAAY,IAAI,WAAW;AAAA,UAC3B,YAAY,oBAAoB,WAAW;AACzC,mBAAO,IAAI,QAAQ,eAAe;AAAA;AAAA,UAEpC,YAAY,WAAW,SAAS;AAAA,UAChC;AAAA,UACA,aAAa,IAAI,WAAW;AAAA,UAC5B,uBAAuB,+BAA+B,gBAAgB,QAAQ;AAC5E,mBAAO,IAAI,WAAW,iCAAiC,gBAAgB;AAAA;AAAA;AAAA;AAAA,OAa5E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACnF,YAAI,cAAc;AAElB,YAAI,aAAa;AACf,cAAI,gCAAgC,KAAK,qBAAqB;AAC9D,cAAI,mCAAmC,KAAK,wBAAwB;AAEpE,cAAI,CAAE,MAAK,yCAAyC,kCAAkC,KAAK,4CAA4C,oCAAoC;AACzK,0BAAc;AAAA;AAAA;AAIlB,YAAI,CAAC,aAAa;AAChB,eAAK,uBAAuB,KAAK,qBAAqB;AACtD,eAAK,0BAA0B,KAAK,wBAAwB;AAAA;AAI9D,aAAK,wBAAwB;AAC7B,aAAK,2BAA2B;AAChC,eAAO;AAAA;AAAA,OAOR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,aAAK,wBAAwB,KAAK,qBAAqB;AACvD,aAAK,2BAA2B,KAAK,wBAAwB;AAAA;AAAA,OAW9D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kDAAkD,+BAA+B;AACtF,YAAI,CAAC,KAAK,uBAAuB;AAC/B,iBAAO;AAAA;AAGT,YAAI,WAAW,8BAA8B,UACzC,SAAS,8BAA8B;AAC3C,YAAI,wBAAwB,KAAK,sBAC7B,mBAAmB,sBAAsB,UACzC,iBAAiB,sBAAsB;AAE3C,YAAI,WAAW,oBAAoB,aAAa,oBAAoB,WAAW,GAAG;AAChF,iBAAO;AAAA,mBACE,SAAS,kBAAkB,WAAW,kBAAkB,SAAS,KAAK,IAAI,WAAW,eAAe,GAAG;AAChH,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qDAAqD,kCAAkC;AAC5F,YAAI,CAAC,KAAK,0BAA0B;AAClC,iBAAO;AAAA;AAGT,YAAI,cAAc,iCAAiC,aAC/C,YAAY,iCAAiC;AACjD,YAAI,wBAAwB,KAAK,yBAC7B,sBAAsB,sBAAsB,aAC5C,oBAAoB,sBAAsB;AAE9C,YAAI,cAAc,uBAAuB,gBAAgB,uBAAuB,cAAc,GAAG;AAC/F,iBAAO;AAAA,mBACE,YAAY,qBAAqB,cAAc,qBAAqB,YAAY,KAAK,IAAI,WAAW,kBAAkB,GAAG;AAClI,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gDAAgD;AACrD,mBAAW,KAAK,iCAAiC,SAAU,OAAO,KAAK,QAAQ;AAC7E,iBAAO,OAAO;AAAA;AAAA;AAAA;AAKpB,WAAO;AAAA;AAGT,MAAO,mBAAQ;;;ACviBf,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAe/Q,MAAI,cAA2B,2BAAY;AAIzC,0BAAqB,UAAU;AAC7B,wBAAgB,MAAM;AAEtB,UAAI,kBAAkB;AAEtB,WAAK,OAAO,MAAM,OAAO;AACzB,WAAK,eAAe,SAAS,MAAM;AACnC,WAAK,aAAa,KAAK,aAAa;AAEpC,UAAI,SAAS,aAAa;AACxB,aAAK,cAAc,SAAS;AAC5B,aAAK,eAAe,SAAS;AAC7B,aAAK,aAAa,SAAS,YAAY;AACvC,aAAK,UAAU,KAAK,aAAa,YAAY,MAAM,SAAS;AAC5D,aAAK,WAAW,IAAI,eAAO;AAC3B,aAAK,aAAa,SAAS,YAAY;AACvC,aAAK,UAAU,IAAI,cAAM;AACzB,aAAK,aAAa,KAAK,YAAY;AAAA,aAC9B;AACL,aAAK,aAAa,IAAI,iBAAS,MAAM;AACrC,aAAK,UAAU,IAAI,eAAY,MAAM,SAAS;AAC9C,aAAK,WAAW,IAAI,eAAO;AAC3B,aAAK,aAAa,IAAI,iBAAS;AAC/B,aAAK,UAAU,IAAI,cAAM;AACzB,aAAK,aAAa,KAAK,WAAW;AAClC,aAAK,aAAa,IAAI,iBAAS;AAC/B,aAAK;AAAA;AAIP,UAAI,KAAK,QAAQ,MAAM,WAAW,UAAU,KAAK,QAAQ,MAAM,WAAW,GAAG,WAAW,QAAQ;AAC9F,iBAAS,IAAI,GAAG,OAAO,KAAK,QAAQ,MAAM,WAAW,GAAG,WAAW,QAAQ,IAAI,MAAM,KAAK;AACxF,0BAAgB,KAAK,KAAK,QAAQ,MAAM,WAAW,GAAG,WAAW,GAAG;AAAA;AAGtE,YAAI,CAAC,KAAK,WAAW,iBAAiB,QAAQ;AAC5C,eAAK,OAAO,iBAAiB,CAAC,SAAU,QAAQ,IAAI;AAClD,0BAAc,IAAI,gBAAgB;AAAA;AAAA;AAAA;AAKxC,WAAK,QAAQ;AACb,WAAK,kBAAkB;AAAA;AAYzB,mBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACnF,aAAK,kBAAkB;AAEvB,YAAI,CAAC,YAAY,CAAC,KAAK,QAAQ,aAAa;AAE1C,eAAK,kBAAkB;AAAA,eAClB;AACL,eAAK,QAAQ,KAAK;AAAA;AAGpB,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,QAAQ;AAC9B,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAElF,YAAI,CAAC,SAAS;AACZ,iBAAO,KAAK,QAAQ,QAAQ;AAAA;AAG9B,YAAI,YAAY,KAAK,WAAW,WAAW;AAC3C,YAAI,eAAe,KAAK,WAAW,WAAW;AAC9C,YAAI,kBAAkB,KAAK,WAAW,WAAW;AACjD,YAAI,eAAe,KAAK,WAAW,WAAW;AAE9C,YAAI,OAAO,MAAM,gBAAgB,OAAO,MAAM,cAAc;AAC1D,iBAAO,KAAK,WAAW,qBAAqB,MAAM,QAAQ,QAAQ;AAAA,mBACzD,OAAO,MAAM,cAAc;AACpC,iBAAO,KAAK,WAAW,WAAW,MAAM,QAAQ,QAAQ;AAAA,mBAC/C,OAAO,MAAM,gBAAgB,OAAO,OAAO,YAAY,iBAAiB;AACjF,cAAI,KAAK,WAAW,2BAA2B,KAAK,WAAW,wBAAwB,OAAO;AAC5F,mBAAO,KAAK,WAAW,wBAAwB,MAAM,QAAQ,QAAQ;AAAA;AAAA,mBAE9D,OAAO,MAAM,cAAc;AACpC,iBAAO,KAAK,WAAW,YAAY,MAAM,QAAQ,QAAQ;AAAA,mBAChD,OAAO,MAAM,aAAa,OAAO,OAAO,YAAY,iBAAiB;AAC9E,cAAI,KAAK,WAAW,iBAAiB,KAAK,WAAW,cAAc,OAAO;AACxE,mBAAO,KAAK,WAAW,cAAc,MAAM,QAAQ,QAAQ;AAAA;AAAA;AAI/D,eAAO,KAAK,QAAQ,QAAQ;AAAA;AAAA,OAQ7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,UAAU,OAAO;AACtC,eAAO,KAAK,WAAW,OAAO,UAAU;AAAA;AAAA,OAazC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAQ,WAAW,aAAa,cAAc,YAAY;AACvF,YAAI,OAAO,MAAM,KAAK,OAAO,MAAM,GAAG;AACpC,iBAAO;AAAA;AAGT,eAAO,KAAK,SAAS,eAAe,QAAQ,WAAW,aAAa,cAAc;AAAA;AAAA,OAWnF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC,QAAQ,aAAa,YAAY;AAC1E,YAAI,SAAS,GAAG;AACd,iBAAO;AAAA;AAGT,eAAO,KAAK,SAAS,2BAA2B,QAAQ,aAAa;AAAA;AAAA,OAWtE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,KAAK,WAAW,cAAc;AACrE,YAAI,MAAM,GAAG;AACX,iBAAO;AAAA;AAGT,eAAO,KAAK,SAAS,yBAAyB,KAAK,WAAW;AAAA;AAAA,OAM/D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,eAAO,CAAC,KAAK,QAAQ,sBAAsB,KAAK,QAAQ,yBAAyB,KAAK,QAAQ,qBAAqB,KAAK,QAAQ;AAAA;AAAA,OAQjI;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,eAAO,KAAK,eAAe,KAAK,aAAa,OAAO;AAAA;AAAA,OAMrD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC;AAC3C,YAAI,QAAQ;AAEZ,YAAI,WAAW;AAAA,UACb,YAAY;AAAA,UACZ,eAAe;AAAA;AAEjB,YAAI,gBAAgB;AACpB,YAAI,gBAAgB;AACpB,mBAAW,UAAU,SAAU,WAAW,KAAK;AAC7C,cAAI,MAAM,WAAW,KAAK,QAAQ;AAChC,0BAAc,KAAK;AAAA;AAGrB,wBAAc,KAAK;AAAA;AAErB,oBAAY,KAAK,QAAQ,cAAc,YAAY;AACnD,iBAAS,KAAK,QAAQ,cAAc,YAAY;AAAA;AAAA,OAajD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,KAAK,QAAQ,QAAQ,QAAQ,QAAQ;AAE9D,eAAO,KAAK,WAAW,WAAW,KAAK,QAAQ,QAAQ,QAAQ;AAAA;AAAA,OAShE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,KAAK;AAC9B,eAAO,KAAK,WAAW,IAAI;AAAA;AAAA,OAM5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,WAAW;AAChB,aAAK,QAAQ;AAAA;AAAA;AAIjB,WAAO;AAAA;AAGT,MAAO,eAAQ;;;ACpSf,MAAI,MAAI;AACR,MAAI,UAAU,0BAAwC;AAItD,MAAE,EAAE,QAAQ,UAAU,MAAM,QAAQ;AAAA,IAClC,QAAQ,gBAAgB,GAAG;AACzB,aAAO,QAAQ;AAAA;AAAA;;;ACcnB,mCAAO;AAMP,gCAAO;AA3BP,2BAAwB,KAAK,GAAG;AAAE,WAAO,iBAAgB,QAAQ,uBAAsB,KAAK,MAAM,6BAA4B,KAAK,MAAM;AAAA;AAEzI,+BAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,wCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,mBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,mBAAkB,GAAG;AAAA;AAEtZ,8BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,kCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,4BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAmB/D,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAU/Q,MAAI,YAAyB,2BAAY;AAKvC,wBAAmB,UAAU,WAAW;AACtC,wBAAgB,MAAM;AAEtB,WAAK,WAAW;AAChB,WAAK,YAAY,aAAa;AAC9B,WAAK,kBAAkB;AACvB,WAAK,aAAa,CAAC,KAAK,SAAS;AACjC,WAAK,qBAAqB,KAAK,yBAAyB,KAAK,SAAS,WAAW,KAAK,SAAS;AAAA;AAWjG,mBAAa,YAAW,CAAC;AAAA,MACvB,KAAK;AAAA,MACL,OAAO,mBAAmB,aAAa;AACrC,YAAI,CAAC,KAAK,gBAAgB,YAAY,OAAO;AAC3C,eAAK,gBAAgB,YAAY,QAAQ,IAAI,eAAO,aAAa,KAAK;AAAA;AAGxE,eAAO,KAAK,gBAAgB,YAAY;AAAA;AAAA,OAQzC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAmB;AACxB,eAAO,KAAK,cAAc;AAAA;AAAA,OAS3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAa,QAAQ;AAC1B,YAAI,KAAK,WAAW;AAClB,eAAK,YAAY,IAAI,cAAU;AAAA,eAC1B;AACL,eAAK,UAAU,OAAO;AAAA;AAGxB,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAiB,WAAW,WAAW;AAC5C,YAAI,CAAC,KAAK,WAAW;AACnB,cAAI,KAAK,UAAU,KAAK,QAAQ,YAAY;AAC1C,iBAAK,UAAU,OAAO;AACtB,mBAAO;AAAA;AAGT,cAAI,KAAK,UAAU,GAAG,QAAQ,YAAY;AACxC,iBAAK,UAAU,KAAK;AACpB,mBAAO;AAAA;AAAA;AAIX,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,YAAY;AACjB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,UAAU,KAAK,UAAU;AAC7B,YAAI,cAAc,KAAK,UAAU;AACjC,eAAO,CAAC,QAAQ,KAAK,QAAQ,KAAK,YAAY,KAAK,YAAY;AAAA;AAAA,OAchE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,aAAa,WAAW,cAAc,WAAW;AAChF,YAAI,oBAAoB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC5F,YAAI,KAAK,YAAY,QAAQ,QAAQ,IAAI,eAAW,WAAW;AAE/D,YAAI,UAAQ,QAAQ,UAAU;AAC5B,cAAI,gBAAgB;AAEpB,cAAI,mBAAmB;AACrB,4BAAgB,KAAK,mBAAmB;AAExC,gBAAI,CAAC,KAAK,WAAW,SAAS,gBAAgB;AAC5C,mBAAK,WAAW,KAAK;AAAA;AAAA;AAIzB,mBAAS,IAAI;AAAA;AAGf,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,eAAe,iBAAiB;AAEvE,eAAO,uBAAuB,SAAS;AACrC,cAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAExF,cAAI,oBAAoB,KAAK,kBAAkB,GAAG;AAChD,mBAAO;AAAA;AAGT,cAAI,SAAQ,iBAAiB,IAAI,gBAAgB;AACjD,cAAI,YAAY;AAChB,oBAAS;AACT,cAAI,oBAAoB,WAAU,IAAI,gBAAgB,GAAG,OAAO,eAAe,KAAK,OAAO;AAE3F,cAAI,SAAS,SAAS,oBAAoB;AACxC,gBAAI,eAAe,SAAQ;AAC3B,wBAAY,GAAG,OAAO,eAAe,KAAK,OAAO;AAAA,iBAC5C;AACL,wBAAY,cAAc,SAAS;AAAA;AAGrC,iBAAO;AAAA;AAAA;AAAA,OAOV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAc,aAAa;AAChC,YAAI,KAAK,WAAW;AAClB,cAAI,KAAK,SAAS,QAAQ;AACxB,iBAAK,UAAU,aAAa;AAAA;AAG9B;AAAA;AAGF,YAAI,eAAe,YAAY,QAAQ;AACvC,YAAI,kBAAkB,YAAY,QAAQ;AAC1C,YAAI,UAAU,KAAK;AAEnB,YAAI,WAAW,gBAAe,SAAS,IACnC,SAAS,SAAS,IAClB,YAAY,SAAS,IACrB,YAAY,SAAS,IACrB,eAAe,SAAS;AAE5B,YAAI,iBAAiB,KAAK,UACtB,2BAA2B,eAAe,0BAC1C,2BAA2B,eAAe,0BAC1C,wBAAwB,eAAe,uBACvC,6BAA6B,eAAe,4BAC5C,gBAAgB,eAAe;AACnC,YAAI,wBAAwB,kBAAkB,UAAU,CAAC,iBAAiB,UAAU,SAAS;AAE7F,YAAI,yBAAyB,cAAc,QAAQ,iBAAiB,MAAM;AACxE,cAAI,wBAAwB;AAE5B,mBAAS,SAAS,GAAG,SAAS,iBAAiB,UAAU,GAAG;AAC1D,gBAAI,YAAY,YAAY,QAAQ,aAAa,iBAAiB;AAElE,gBAAI,aAAa,aAAa,aAAa,cAAc;AACvD,kBAAI,MAAM,YAAY,QAAQ,iBAAiB;AAC/C,kBAAI,qBAAqB,IAAI,SAAS;AAEtC,kBAAI,8BAA8B,IAAI,SAAS,GAAG;AAChD,sBAAM,CAAC,IAAI;AAAA;AAGb,uBAAS,cAAc,GAAG,cAAc,IAAI,QAAQ,eAAe,GAAG;AACpE,oBAAI,aAAa;AACjB,oBAAI,KAAK,IAAI;AAEb,oBAAI,0BAA0B;AAC5B,6BAAW,KAAK;AAAA;AAGlB,oBAAI,0BAA0B;AAC5B,6BAAW,KAAK;AAAA;AAGlB,8BAAc,6BAA6B,qBAAqB;AAChE,oBAAI,eAAe,YAAY,WAAW,oCAAoC,WAAW,aAAa;AAAA,kBACpG;AAAA,kBACA,cAAc;AAAA,kBACd,gBAAgB,eAAe,YAAY;AAAA,kBAC3C,YAAY;AAAA;AAGd,oBAAI,iBAAiB,WAAW;AAC9B,uBAAK,YAAY,QAAQ,gBAAgB,cAAc;AAAA;AAGzD,yBAAS,IAAI;AAAA;AAGf,uCAAyB;AAAA;AAAA;AAAA;AAK/B,YAAI,WAAW,QAAQ,cAAc,MAAM;AACzC,cAAI,qBAAqB;AAEzB,mBAAS,MAAM,GAAG,MAAM,cAAc,OAAO,GAAG;AAC9C,gBAAI,YAAY,YAAY,QAAQ,UAAU,iBAAiB;AAE/D,gBAAI,yBAAyB,aAAa,UAAU,aAAa,WAAW;AAC1E,kBAAI,OAAO,YAAY,QAAQ,cAAc;AAE7C,kBAAI,sBAAsB,KAAK,SAAS;AAExC,kBAAI,8BAA8B,KAAK,SAAS,GAAG;AACjD,uBAAO,CAAC,KAAK;AAAA;AAGf,uBAAS,eAAe,GAAG,eAAe,KAAK,QAAQ,gBAAgB,GAAG;AACxE,oBAAI,cAAc;AAClB,oBAAI,MAAM,KAAK;AAEf,oBAAI,0BAA0B;AAC5B,8BAAY,KAAK;AAAA;AAGnB,oBAAI,uBAAuB;AACzB,8BAAY,KAAK;AAAA;AAGnB,+BAAe,6BAA6B,sBAAsB;AAClE,oBAAI,eAAe,YAAY,WAAW,iCAAiC,WAAW,cAAc;AAAA,kBAClG;AAAA,kBACA,WAAW;AAAA,kBACX,iBAAiB,YAAY,SAAS;AAAA,kBACtC,YAAY;AAAA;AAGd,oBAAI,iBAAiB,WAAW;AAC9B,wBAAM,YAAY,QAAQ,aAAa,cAAc;AAAA;AAGvD,yBAAS,KAAK;AAAA;AAGhB,oCAAsB;AAAA;AAGxB,gBAAI,cAAc,QAAQ,iBAAiB,MAAM;AAC/C,uBAAS,UAAU,GAAG,UAAU,iBAAiB,WAAW,GAAG;AAC7D,oBAAI,aAAa,YAAY,QAAQ,aAAa,iBAAiB;AAEnE,oBAAI,aAAa,UAAU,aAAa,aAAa,cAAc,aAAa,cAAc,cAAc;AAE1G,sBAAI,KAAK,SAAS,WAAW;AAC3B,yBAAK,iBAAiB,aAAa,WAAW,YAAY,KAAK,SAAS,WAAW,KAAK,SAAS;AAAA;AAAA,2BAE1F,aAAa,UAAU,aAAa,WAAW;AAExD,sBAAI,uBAAuB;AACzB,yBAAK,iBAAiB,aAAa,WAAW,YAAY;AAAA;AAAA,2BAEnD,cAAc,aAAa,cAAc,cAAc;AAEhE,sBAAI,0BAA0B;AAC5B,yBAAK,iBAAiB,aAAa,WAAW,YAAY;AAAA;AAAA;AAI9D,oBAAI,2BAA2B,YAAY,WAAW,wBAAwB,WAAW,YAAY,KAAK,SAAS;AAEnH,oBAAI,OAAO,6BAA6B,UAAU;AAChD,uBAAK,iBAAiB,aAAa,WAAW,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpE,oBAAY,WAAW,uBAAuB,SAAS,KAAK,SAAS;AAErE,YAAI,KAAK,SAAS,QAAQ;AAExB,eAAK,UAAU,aAAa,OAAO;AAAA;AAAA;AAAA,OAOtC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAO,OAAO,KAAK,iBAAiB,QAAQ,SAAU,QAAQ;AAC5D,iBAAO,OAAO;AAAA;AAAA;AAAA;AAKpB,WAAO;AAAA;AAGT,MAAO,oBAAQ;;;ACtZf,mCAAO;;;ACWP,mCAAO;AARP,MAAI;AAEJ,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAU/Q,mCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAwD1K,MAAI,mBAAmB;AAAA,IAQvB;AAAA,IAqBA;AAAA,IAQA;AAAA,IASA;AAAA,IASA;AAAA,IASA;AAAA,IAQA;AAAA,IAQA;AAAA,IAQA;AAAA,IAWA;AAAA,IAoBA;AAAA,IAUA;AAAA,IAWA;AAAA,IAUA;AAAA,IAMA;AAAA,IAMA;AAAA,IAQA;AAAA,IAYA;AAAA,IAQA;AAAA,IASA;AAAA,IAQA;AAAA,IAQA;AAAA,IAMA;AAAA,IAeA;AAAA,IAeA;AAAA,IAMA;AAAA,IAOA;AAAA,IAOA;AAAA,IAaA;AAAA,IAaA;AAAA,IAaA;AAAA,IAaA;AAAA,IASA;AAAA,IAWA;AAAA,IAWA;AAAA,IAYA;AAAA,IAYA;AAAA,IAMA;AAAA,IAMA;AAAA,IA2BA;AAAA,IAuBA;AAAA,IAWA;AAAA,IAaA;AAAA,IAUA;AAAA,IAUA;AAAA,IASA;AAAA,IAUA;AAAA,IASA;AAAA,IAOA;AAAA,IAiBA;AAAA,IAQA;AAAA,IAQA;AAAA,IAeA;AAAA,IAaA;AAAA,IAkBA;AAAA,IAmCA;AAAA,IASA;AAAA,IAQA;AAAA,IASA;AAAA,IAWA;AAAA,IAMA;AAAA,IAOA;AAAA,IAiBA;AAAA,IAgBA;AAAA,IAUA;AAAA,IAWA;AAAA,IASA;AAAA,IAUA;AAAA,IAWA;AAAA,IASA;AAAA,IAYA;AAAA,IAYA;AAAA,IAaA;AAAA,IAaA;AAAA,IAaA;AAAA,IASA;AAAA,IAYA;AAAA,IAOA;AAAA,IAOA;AAAA,IAOA;AAAA,IAMA;AAAA,IAcA;AAAA,IASA;AAAA,IAMA;AAAA,IAMA;AAAA,IAOA;AAAA,IAQA;AAAA,IAOA;AAAA,IAQA;AAAA,IAUA;AAAA,IAWA;AAAA,IAOA;AAAA,IAaA;AAAA,IAcA;AAAA,IAcA;AAAA,IASA;AAAA,IAQA;AAAA,IASA;AAAA,IAYA;AAAA,IASA;AAAA,IASA;AAAA,IAOA;AAAA,IA6BA;AAAA,IAUA;AAAA,IAkCA;AAAA,IAUA;AAAA,IA6BA;AAAA,IAUA;AAAA,IAmBA;AAAA,IAmBA;AAAA,IAmBA;AAAA,IAmBA;AAAA,IAWA;AAAA,IAUA;AAAA,IAWA;AAAA,IAUA;AAAA,IAOA;AAAA,IAOA;AAAA,IASA;AAAA,IA4BA;AAAA,IA2BA;AAAA,IAQA;AAAA,IASA;AAAA,IASA;AAAA,IAQA;AAAA,IASA;AAAA,IASA;AAAA,IAMA;AAAA,IAUA;AAAA,IAWA;AAAA,IASA;AAAA,IASA;AAAA,IAUA;AAAA,IAQA;AAAA,IASA;AAAA,IASA;AAAA,IAOA;AAAA,IAWA;AAAA,IAOA;AAAA,IAOA;AAAA,IASA;AAAA,IASA;AAAA,IAOA;AAAA,IAOA;AAAA,IAYA;AAAA,IAWA;AAAA,IAUA;AAAA,IAWA;AAAA,IAUA;AAAA,IAWA;AAAA,IAUA;AAAA,IAWA;AAAA,IAUA;AAAA,IAUA;AAAA,IAWA;AAAA,IAUA;AAAA,IAWA;AAAA,IAQA;AAAA,IAQA;AAAA,IAQA;AAAA,IAUA;AAAA,IAUA;AAAA,IASA;AAAA,IAUA;AAAA,IAQA;AAAA,IASA;AAAA,IAUA;AAAA,IASA;AAAA,IASA;AAAA,IAOA;AAAA,IAOA;AAAA,IASA;AAAA,IAUA;AAAA,IAWA;AAAA,IAWA;AAAA,IAWA;AAAA,IAWA;AAAA,IAUA;AAAA;AAOA,MAAI,kBAAkB,aAAa,oBAAoB,oBAAkB,wBAAuB,CAAC,sOAAwO,CAAC;AAW1U,MAAI,gBAAgB,oBAAI,IAAI,CAAC,CAAC,aAAa,UAAU,CAAC,aAAa,UAAU,CAAC,eAAe,UAAU,CAAC,eAAe,UAAU,CAAC,mBAAmB,UAAU,CAAC,gBAAgB,UAAU,CAAC,aAAa;AAyBxM,MAAI,mBAAmB,oBAAI,IAAI,CAAC,CAAC,gCAAgC;AAEjE,MAAI,QAAqB,2BAAY;AAInC,sBAAiB;AACf,wBAAgB,MAAM;AAEtB,WAAK,eAAe,KAAK;AAAA;AAsB3B,mBAAa,QAAO,CAAC;AAAA,MACnB,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,SAAS,uBAAO,OAAO;AAE3B,kBAAU,kBAAkB,SAAU,OAAM;AAC1C,iBAAO,OAAO,SAAQ;AAAA;AAExB,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAElF,YAAI,SAAS;AACX,cAAI,CAAC,QAAQ,kBAAkB;AAC7B,oBAAQ,mBAAmB,KAAK;AAAA;AAGlC,iBAAO,QAAQ;AAAA;AAGjB,eAAO,KAAK;AAAA;AAAA,OA+Bb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAa,KAAK,UAAU;AACjC,YAAI,QAAQ;AAEZ,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAElF,YAAI,MAAM,QAAQ,WAAW;AAC3B,oBAAU,UAAU,SAAU,GAAG;AAC/B,mBAAO,MAAM,IAAI,KAAK,GAAG;AAAA;AAAA,eAEtB;AACL,cAAI,cAAc,IAAI,MAAM;AAC1B,iBAAK,WAAW,iBAAiB;AAAA,cAC/B,UAAU;AAAA,cACV,kBAAkB,cAAc,IAAI;AAAA;AAAA;AAIxC,cAAI,iBAAiB,IAAI,MAAM;AAC7B,iBAAK,iBAAiB,IAAI;AAAA;AAG5B,cAAI,SAAS,KAAK,UAAU;AAE5B,cAAI,OAAO,OAAO,SAAS,aAAa;AACtC,iBAAK,SAAS;AACd,mBAAO,OAAO;AAAA;AAGhB,mBAAS,OAAO;AAEhB,cAAI,OAAO,KAAK,QAAQ,cAAc,IAAI;AAExC,gBAAI,mBAAmB;AAEvB,gBAAI,SAAS,aAAa;AACxB,wBAAU,OAAO,MAAM,SAAU,IAAI,GAAG;AACtC,oBAAI,GAAG,aAAa;AAClB,yBAAO,KAAK,KAAK;AACjB,qCAAmB;AACnB,yBAAO;AAAA;AAAA;AAAA;AAKb,gBAAI,CAAC,kBAAkB;AACrB,qBAAO,KAAK,KAAK;AAAA;AAAA;AAAA;AAKvB,eAAO;AAAA;AAAA,OAgBR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAc,KAAK,UAAU;AAClC,YAAI,SAAS;AAEb,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAElF,YAAI,MAAM,QAAQ,WAAW;AAC3B,oBAAU,UAAU,SAAU,GAAG;AAC/B,mBAAO,OAAO,KAAK,KAAK,GAAG;AAAA;AAAA,eAExB;AACL,mBAAS,UAAU;AACnB,eAAK,IAAI,KAAK,UAAU;AAAA;AAAA;AAAA,OAkB3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,KAAK,UAAU;AACpC,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAClF,YAAI,SAAS,KAAK,UAAU;AAE5B,YAAI,OAAO,OAAO,SAAS,aAAa;AACtC,cAAI,OAAO,KAAK,QAAQ,aAAa,GAAG;AACtC,qBAAS,OAAO;AAChB,mBAAO;AAAA;AAAA;AAIX,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,aAAa,KAAK;AACvB,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAClF,YAAI,SAAS,KAAK,UAAU;AAC5B,eAAO,CAAC,CAAE,QAAO,SAAS,UAAU,OAAO,KAAK;AAAA;AAAA,OAuBjD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,aAAa,SAAS,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AACxD;AACE,cAAI,iBAAiB,KAAK,aAAa;AACvC,cAAI,SAAS,iBAAiB,eAAe,SAAS;AACtD,cAAI,SAAQ;AAEZ,cAAI,QAAQ;AAEV,mBAAO,SAAQ,QAAQ;AACrB,kBAAI,CAAC,eAAe,WAAU,eAAe,QAAO,MAAM;AACxD,0BAAS;AAGT;AAAA;AAGF,kBAAI,MAAM,SAAS,eAAe,SAAQ,SAAS,IAAI,IAAI,IAAI,IAAI,IAAI;AAEvE,kBAAI,QAAQ,QAAQ;AAElB,qBAAK;AAAA;AAGP,kBAAI,eAAe,WAAU,eAAe,QAAO,SAAS;AAC1D,qBAAK,OAAO,KAAK,eAAe;AAAA;AAGlC,wBAAS;AAAA;AAAA;AAAA;AAIf;AACE,cAAI,gBAAgB,KAAK,UAAU,SAAS;AAE5C,cAAI,UAAU,gBAAgB,cAAc,SAAS;AAErD,cAAI,SAAS;AAEb,cAAI,SAAS;AAEX,mBAAO,SAAS,SAAS;AACvB,kBAAI,CAAC,cAAc,WAAW,cAAc,QAAQ,MAAM;AACxD,0BAAU;AAGV;AAAA;AAGF,kBAAI,OAAO,SAAS,cAAc,SAAS,SAAS,IAAI,IAAI,IAAI,IAAI,IAAI;AAExE,kBAAI,SAAS,QAAQ;AAEnB,qBAAK;AAAA;AAGP,kBAAI,cAAc,WAAW,cAAc,QAAQ,SAAS;AAC1D,qBAAK,OAAO,KAAK,cAAc,SAAS;AAAA;AAG1C,wBAAU;AAAA;AAAA;AAAA;AAIhB,eAAO;AAAA;AAAA,OAgBR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAElF,mBAAW,KAAK,UAAU,UAAU,SAAU,OAAO,KAAK,QAAQ;AAChE,iBAAO,OAAO,KAAK,SAAS;AAAA;AAAA;AAAA,OAgB/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAkB,KAAK;AAC5B,YAAI,CAAC,KAAK,aAAa,MAAM;AAC3B,2BAAiB,KAAK;AAAA;AAAA;AAAA,OAczB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,KAAK;AAC9B,YAAI,KAAK,aAAa,MAAM;AAC1B,2BAAiB,OAAO,iBAAiB,QAAQ,MAAM;AAAA;AAAA;AAAA,OAkB1D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,UAAU;AACrC,eAAO,iBAAiB,IAAI,aAAa,cAAc,IAAI;AAAA;AAAA,OAgB5D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,UAAU;AACrC,eAAO,iBAAiB,QAAQ,aAAa;AAAA;AAAA,OAwB9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,eAAO;AAAA;AAAA,QAEP,CAAC;AAAA,MACH,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;AAGT,MAAI,kBAAkB,IAAI;AAK1B,gCAA8B;AAC5B,WAAO;AAAA;AAGT,MAAO,sBAAQ;;;AC97Ef,mCAAO;AAWP,gCAAO;AAvBP,+BAA4B,KAAK;AAAE,WAAO,oBAAmB,QAAQ,kBAAiB,QAAQ,6BAA4B,QAAQ;AAAA;AAElI,iCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,wCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,mBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,mBAAkB,GAAG;AAAA;AAEtZ,6BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,+BAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,mBAAkB;AAAA;AAEpF,8BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAczK,MAAI,cAAa,oBAAI;AAMb,4BAA0B;AACvC,QAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEpF,QAAI,CAAC,YAAW,IAAI,YAAY;AAC9B,kBAAW,IAAI,WAAW,oBAAI;AAAA;AAGhC,QAAI,gBAAgB,YAAW,IAAI;AAQnC,uBAAkB,MAAM,MAAM;AAC5B,oBAAc,IAAI,MAAM;AAAA;AAU1B,sBAAiB,MAAM;AACrB,aAAO,cAAc,IAAI;AAAA;AAU3B,sBAAiB,MAAM;AACrB,aAAO,cAAc,IAAI;AAAA;AAS3B,yBAAoB;AAClB,aAAO,oBAAmB,cAAc;AAAA;AAS1C,0BAAqB;AACnB,aAAO,oBAAmB,cAAc;AAAA;AAG1C,WAAO;AAAA,MACL,UAAU;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,WAAW;AAAA;AAAA;;;AFrFf,MAAI,0BAA0B,oBAAI;AAElC,MAAI,kBAAkB,eAAe;AAArC,MACI,WAAW,gBAAgB;AAD/B,MAEI,UAAU,gBAAgB;AAF9B,MAGI,UAAU,gBAAgB;AAH9B,MAII,WAAW,gBAAgB;AAJ/B,MAKI,YAAY,gBAAgB;AAMzB,4BAA0B,aAAa;AAC5C,QAAI,aAAY;AAChB,QAAI,QAAQ;AAEZ,SAAK,iBAAiB,WAAY;AAChC,aAAO;AAAA;AAGT,SAAK,cAAc,SAAU,aAAa;AACxC,UAAI,CAAE,aAAY,QAAQ,aAAY;AACpC,mBAAU,YAAY,QAAQ,IAAI,MAAM;AAAA;AAG1C,aAAO,WAAU,YAAY;AAAA;AAG/B,wBAAM,eAAe,IAAI,gBAAgB,WAAY;AACnD,iBAAU,KAAK,QAAQ;AAAA;AAAA;AAWpB,8BAA4B,MAAM,aAAa;AACpD,QAAI;AAEJ,QAAI,OAAO,SAAS,YAAY;AAC9B,UAAI,CAAC,wBAAwB,IAAI,OAAO;AACtC,kBAAU,MAAM;AAAA;AAGlB,eAAS,wBAAwB,IAAI;AAAA,eAC5B,OAAO,SAAS,UAAU;AACnC,eAAS,QAAQ;AAAA,WACZ;AACL,YAAM,MAAM;AAAA;AAGd,QAAI,CAAC,QAAQ;AACX,YAAM,MAAM,oCAAqC,OAAO,MAAM;AAAA;AAGhE,WAAO,OAAO,YAAY;AAAA;AAS5B,oBAAkB,MAAM;AACtB,QAAI,CAAC,QAAQ,OAAO;AAClB,YAAM,MAAM,qCAAsC,OAAO,MAAM;AAAA;AAGjE,WAAO,QAAQ,MAAM;AAAA;AAUvB,qBAAmB,MAAM,aAAa;AACpC,QAAI,QAAQ,OAAO,SAAS,UAAU;AACpC,oBAAc;AACd,aAAO,YAAY;AAAA;AAGrB,QAAI,gBAAgB,IAAI,iBAAiB;AAEzC,QAAI,OAAO,SAAS,UAAU;AAC5B,eAAS,MAAM;AAAA;AAGjB,4BAAwB,IAAI,aAAa;AAAA;;;AGhE3C,mCAAO;AAMP,gCAAO;;;AC/CP,MAAI,cAAa;AAOjB,MAAI,qBAAqB;AAAA,IAIvB,eAAe,uBAAO,OAAO;AAAA,IAS7B,SAAS,iBAAiB,KAAK,UAAU;AACvC,UAAI,CAAC,KAAK,cAAc,MAAM;AAC5B,aAAK,cAAc,OAAO;AAAA;AAG5B,WAAK,IAAI,QAAQ,KAAK;AAEtB,WAAK,cAAc,KAAK,KAAK;AAE7B,aAAO;AAAA;AAAA,IAQT,kBAAkB,0BAA0B,KAAK;AAC/C,UAAI,QAAQ;AAEZ,gBAAU,KAAK,cAAc,QAAQ,IAAI,SAAU,UAAU;AAC3D,cAAM,IAAI,WAAW,KAAK;AAAA;AAAA;AAAA,IAO9B,YAAY,sBAAsB;AAChC,UAAI,SAAS;AAEb,iBAAW,KAAK,eAAe,SAAU,WAAW,MAAM;AACxD,eAAO,OAAO,iBAAiB;AAAA;AAEjC,WAAK,gBAAgB;AAAA;AAAA;AAGzB,eAAa,oBAAoB,cAAc,aAAY;AAAA,IACzD,UAAU;AAAA,IACV,YAAY;AAAA;AAEd,MAAO,6BAAQ;;;AD/Df,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,2BAAwB,KAAK,GAAG;AAAE,WAAO,iBAAgB,QAAQ,uBAAsB,KAAK,MAAM,6BAA4B,KAAK,MAAM;AAAA;AAEzI,+BAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,wCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,mBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,mBAAkB,GAAG;AAAA;AAEtZ,8BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,kCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,4BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAE/D,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAExM,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAsBxQ,MAAI,cAAc;AAClB,MAAI,eAAe,OAAO,OAAO;AAAA,IACtC,QAAQ;AAAA,IAER,SAAS;AAAA,IACT,SAAS;AAAA,IAET,UAAU;AAAA;AAML,MAAI,aAA0B,2BAAY;AAI/C,yBAAoB,UAAU;AAC5B,wBAAgB,MAAM;AAOtB,WAAK,MAAM;AASX,WAAK,WAAW;AAOhB,WAAK,QAAQ,aAAa;AAS1B,WAAK,UAAU;AASf,WAAK,gBAAgB;AAOrB,WAAK,iBAAiB;AAOtB,WAAK,KAAK;AAOV,WAAK,MAAM;AAOX,WAAK,MAAM;AAOX,WAAK,OAAO;AAOZ,WAAK,gBAAgB;AAOrB,WAAK,iBAAiB;AACtB,WAAK;AAAA;AAUP,mBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAQ;AACrC,YAAI,KAAK,gBAAgB;AACvB,eAAK,eAAe;AAEpB,eAAK,iBAAiB;AAAA;AAAA;AAAA,OAOzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AAAA;AAAA,OAKtB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,cAAM,MAAM;AAAA;AAAA,OAMb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,cAAM,MAAM;AAAA;AAAA,OAMb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,cAAM,MAAM;AAAA;AAAA,OAMb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,cAAM,MAAM;AAAA;AAAA,OAab;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,KAAK,KAAK,MAAM,IAAI,OAAO,gBAAgB;AACjE,aAAK,KAAK;AACV,aAAK,MAAM;AACX,aAAK,MAAM;AACX,aAAK,OAAO;AACZ,aAAK,gBAAgB;AACrB,aAAK,iBAAiB;AACtB,aAAK,QAAQ,aAAa;AAAA;AAAA,OAQ3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAkB;AACvB,eAAoB,yBAAU,mBAAmB;AAC/C,sBAAU,QAAQ;AAElB,cAAI,SAAS,eAAa;AAE1B,4BAAkB;AAChB,8BAAgB,MAAM;AAEtB,mBAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,iBAAO,eAAa;AAAA,UACpB,KAAK;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,OAAO,UAAU;AACzC,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AAEJ,YAAI,UAAU;AACZ,cAAI,eAAe,KAAK,IAAI;AAC5B,0BAAgB,KAAK,IAAI,KAAK,IAAI,aAAa,IAAI,aAAa,KAAK;AAErE,6BAAmB,KAAK,IAAI,KAAK,IAAI,aAAa,IAAI,aAAa,KAAK;AAExE,wBAAc,KAAK,IAAI,aAAa,IAAI,aAAa;AACrD,2BAAiB,KAAK,IAAI,aAAa,IAAI,aAAa;AAAA,eACnD;AACL,cAAI,OAAO,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM;AACtC,0BAAgB,KAAK;AACrB,6BAAmB,KAAK;AACxB,wBAAc,KAAK;AACnB,2BAAiB,KAAK;AAAA;AAGxB,YAAI,qBAAqB,KAAK,IAAI,SAAS,uBAAuB,eAAe;AAEjF,YAAI,MAAM,QAAQ,qBAAqB;AACrC,cAAI,sBAAsB,gBAAe,oBAAoB;AAE7D,0BAAgB,oBAAoB;AACpC,6BAAmB,oBAAoB;AAAA;AAIzC,aAAK,IAAI,kBAAkB,eAAe,kBAAkB,OAAO,aAAa,gBAAgB;AAAA;AAAA,OASjG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,iBAAiB,QAAO;AACnD,YAAI,KAAK,UAAU,aAAa,QAAQ;AACtC;AAAA;AAGF,YAAI,cAAc,KAAK;AAGvB,YAAI,qBAAqB,YAAY,eAAe,6BAA6B,KAAK;AACtF,YAAI,wBAAwB,YAAY,kBAAkB,6BAA6B,KAAK;AAC5F,oBAAY,KAAK,eAAe,IAAI,eAAW,oBAAoB;AACnE,aAAK,QAAQ,aAAa;AAG1B,YAAI,KAAK,oBAAoB;AAC3B,cAAI,0BAA0B,OAAO,oBAAoB,WAAW,kBAAkB,UAAU,KAAK;AACrG,eAAK,SAAS;AAAA;AAGhB,aAAK,KAAK;AACV,aAAK,UAAU;AACf,aAAK;AAEL,oBAAY,KAAK;AACjB,oBAAY,SAAS,qBAAqB,KAAK,KAAK,KAAK;AAAA;AAAA,OAU1D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,sBAAsB,UAAU,UAAU;AACtE,YAAI,QAAQ;AAEZ,YAAI;AAEJ,YAAI,UAAU;AACZ,cAAI,wBAAwB,KAAK;AAEjC,eAAK,iBAAiB,SAAU,QAAQ;AACtC,gBAAI,uBAAuB;AACzB,oCAAsB;AAAA;AAGxB,qBAAS;AAET,kBAAM,IAAI,KAAK;AAAA;AAAA;AAInB,YAAI,KAAK,aAAa;AACpB;AAAA;AAGF,YAAI,KAAK,UAAU,aAAa,QAAQ;AACtC,eAAK,IAAI,iBAAiB,WAAY;AACpC,kBAAM,eAAe;AAAA;AAGvB;AAAA;AAGF,YAAI,KAAK,UAAU,aAAa,SAAS;AACvC,cAAI,sBAAsB;AACxB,iBAAK;AACL,iBAAK,IAAI,KAAK;AACd;AAAA;AAGF,cAAI,QAAQ,KAAK;AAEjB,cAAI,KAAK,IAAI,cAAc,gBAAgB;AAEzC,kBAAM,CAAC,CAAC,OAAO,UAAU,WAAW,OAAO,UAAU,KAAK,KAAK,SAAS,MAAM;AAAA,iBACzE;AACL,kBAAM,CAAC,CAAC;AAAA;AAGV,eAAK,QAAQ,aAAa;AAC1B,eAAK,UAAU,KAAK;AAEpB,cAAI,KAAK,IAAI,iBAAiB,KAAK,iBAAiB;AAClD,iBAAK,IAAI,YAAY,qBAAqB,SAAU,QAAQ;AAC1D,oBAAM,QAAQ,aAAa;AAE3B,oBAAM,cAAc;AAAA;AAAA,iBAEjB;AACL,iBAAK,QAAQ,aAAa;AAC1B,iBAAK,cAAc;AAAA;AAAA;AAAA;AAAA,OAQxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK,QAAQ,aAAa;AAC1B,aAAK;AAAA;AAAA,OASN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ;AACpC,YAAI,KAAK,UAAU,aAAa,UAAU;AACxC;AAAA;AAIF,YAAI,WAAW,SAAS,KAAK,eAAe,iBAAiB,MAAM;AACjE,eAAK,IAAI,WAAW,KAAK,KAAK,KAAK;AACnC,eAAK;AACL,eAAK,QAAQ,aAAa;AAE1B,eAAK,eAAe;AAAA,eACf;AACL,eAAK;AACL,eAAK,UAAU;AACf,eAAK,gBAAgB;AACrB,eAAK,QAAQ,aAAa;AAE1B,eAAK,eAAe;AAAA;AAAA;AAAA,OAQvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,aAAK,gBAAgB;AAAA;AAAA,OAQtB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,UAAU,aAAa;AAAA;AAAA,OAQpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,YAAI,gBAAgB,KAAK;AAEzB,gBAAQ;AAAA,eACD;AACH,mBAAO;AAAA,eAEJ;AACH,mBAAO;AAAA,eAEJ;AACH,mBAAO;AAAA,eAEJ;AACH,mBAAO;AAAA,eAEJ;AACH,mBAAO;AAAA,eAEJ;AACH,mBAAO;AAAA,eAEJ;AACH,mBAAO;AAAA,eAEJ;AACH,mBAAO;AAAA;AAGP,mBAAO;AAAA;AAAA;AAAA,OASZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,eAAO,KAAK,IAAI,QAAQ,KAAK,KAAK,KAAK,KAAK;AAAA;AAAA,OAS7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,YAAY,KAAK,IAAI;AACzB,YAAI,UAAU;AAEd,YAAI,KAAK,MAAM,KAAK,IAAI,cAAc,cAAc;AAClD,cAAI,KAAK,MAAM,KAAK,IAAI,cAAc,kBAAkB;AACtD,sBAAU;AAAA,iBACL;AACL,sBAAU;AAAA;AAAA,mBAEH,KAAK,IAAI,cAAc,mBAAmB,KAAK,OAAO,YAAY,KAAK,IAAI,cAAc,iBAAiB;AACnH,cAAI,KAAK,MAAM,KAAK,IAAI,cAAc,kBAAkB;AACtD,sBAAU;AAAA,iBACL;AACL,sBAAU;AAAA;AAAA,mBAEH,KAAK,MAAM,KAAK,IAAI,cAAc,kBAAkB;AAC7D,oBAAU;AAAA;AAGZ,eAAO;AAAA;AAAA,QAEP,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;AAET,QAAM,YAAY;;;AhErkBlB,2BAAwB,KAAK,GAAG;AAAE,WAAO,iBAAgB,QAAQ,uBAAsB,KAAK,MAAM,6BAA4B,KAAK,MAAM;AAAA;AAEzI,+BAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,wCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,mBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,mBAAkB,GAAG;AAAA;AAEtZ,8BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,kCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,4BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAE/D,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAU/Q,MAAI,gBAA6B,2BAAY;AAM3C,4BAAuB,UAAU,WAAW,WAAW;AACrD,UAAI,QAAQ;AAEZ,wBAAgB,MAAM;AAQtB,WAAK,WAAW;AAQhB,WAAK,YAAY;AAQjB,WAAK,YAAY;AAQjB,WAAK,eAAe,IAAI,qBAAa;AAQrC,WAAK,YAAY;AAQjB,WAAK,OAAO;AAQZ,WAAK,eAAe;AAOpB,WAAK,iBAAiB;AAOtB,WAAK,cAAc;AACnB,WAAK,SAAS,QAAQ,wBAAwB,SAAU,QAAO;AAC7D,eAAO,MAAM,uBAAuB;AAAA;AAEtC,UAAI,QAAQ,KAAK,SAAS;AAE1B,aAAO,OAAO;AACZ,aAAK,aAAa,iBAAiB,MAAM,SAAS,iBAAiB,WAAW,SAAU,QAAO;AAC7F,cAAI,CAAC,MAAM,WAAW;AACpB,kBAAM,SAAS,SAAS,wBAAwB;AAAA;AAAA;AAGpD,gBAAQ,gBAAgB;AAAA;AAI1B,WAAK,aAAa,iBAAiB,KAAK,SAAS,aAAa,iBAAiB,oBAAoB,SAAU,QAAO;AAClH,YAAI,CAAC,MAAM,aAAa,MAAM,gBAAgB,CAAC,MAAM,aAAa,cAAc,MAAM,SAAS,eAAe;AAC5G,gBAAM,WAAW,IAAI;AAAA;AAAA;AAGzB,WAAK,SAAS,KAAK,GAAG,OAAO,kBAAkB,SAAU,QAAO,QAAQ,MAAM;AAC5E,eAAO,MAAM,eAAe,QAAO,QAAQ;AAAA;AAAA;AAS/C,mBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,aAAK,OAAO;AAAA;AAAA,OAOb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK,OAAO;AAAA;AAAA,OASb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,gBAAgB;AAC5C,YAAI,CAAC,KAAK,MAAM;AACd,eAAK,YAAY;AAAA;AAAA;AAAA,OASpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,eAAO,KAAK;AAAA;AAAA,OAMb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,YAAI,KAAK,MAAM;AACb;AAAA;AAGF,YAAI,KAAK,gBAAgB,KAAK,aAAa,aAAa;AACtD,eAAK,YAAY,OAAO,OAAO,SAAU,WAAW;AAClD,gBAAI,WAAW;AACb,qBAAO;AAAA;AAAA;AAGX;AAAA;AAGF,YAAI,wBAAwB,KAAK,SAAS,UAAU,cAAc,UAAU,WACxE,MAAM,sBAAsB,KAC5B,MAAM,sBAAsB;AAChC,YAAI,qBAAqB,KAAK,SAAS,SAAS,uBAAuB,KAAK;AAC5E,YAAI,mBAAmB;AACvB,YAAI,sBAAsB;AAE1B,YAAI,MAAM,QAAQ,qBAAqB;AACrC,cAAI,sBAAsB,gBAAe,oBAAoB;AAE7D,6BAAmB,oBAAoB;AACvC,gCAAsB,oBAAoB;AAAA;AAI5C,aAAK,iBAAiB,KAAK,SAAS,YAAY,kBAAkB;AAClE,YAAI,gBAAgB,KAAK,SAAS,aAAa;AAE/C,YAAI,eAAe;AAIjB,wBAAc;AAAA;AAGhB,YAAI,KAAK,eAAe,UAAU;AAChC,eAAK;AACL;AAAA;AAGF,YAAI,cAAc,KAAK,SAAS,cAAc,KAAK;AAEnD,YAAI,KAAK,KAAK,SAAS,QAAQ,KAAK,KAAK;AAEzC,YAAI,eAAe,IAAI;AACrB,cAAI,OAAO,KAAK,SAAS,UAAU;AACnC,cAAI,gBAAgB,KAAK,SAAS,oBAAoB,KAAK,SAAS,cAAc,mBAAmB;AACrG,eAAK,eAAe,mBAAkB,aAAa,KAAK;AAGxD,eAAK,aAAa,QAAQ,KAAK,KAAK,MAAM,IAAI,eAAe,KAAK;AAAA,eAC7D;AACL,eAAK;AAAA;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,eAAO,KAAK,gBAAgB,KAAK,aAAa;AAAA;AAAA,OAS/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,iBAAiB,QAAO;AACjD,YAAI,CAAC,KAAK,cAAc;AACtB;AAAA;AAGF,aAAK,aAAa,aAAa,iBAAiB;AAAA;AAAA,OAUjD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,sBAAsB,eAAe,UAAU;AACzE,YAAI,KAAK,cAAc;AACrB,eAAK,aAAa,cAAc,sBAAsB,eAAe;AAAA,mBAC5D,UAAU;AACnB,mBAAS;AAAA;AAAA;AAAA,OASZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC,eAAe;AACvD,aAAK,YAAY,OAAO;AAAA;AAAA,OAQzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4CAA4C,eAAe;AAChE,aAAK,YAAY,MAAM;AAAA;AAAA,OAQxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,aAAK,eAAe;AAAA;AAAA,OASrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,gBAAgB;AACtD,YAAI,aAAa,OAAO,KAAK,UAAU,eAAe,aAAa,KAAK,UAAU,WAAW,SAAS,KAAK,UAAU;AAErH,YAAI,gBAAgB;AAElB,eAAK,UAAU,eAAe,CAAC,WAAW,KAAK,CAAC,WAAW;AAAA,eACtD;AAEL,eAAK,UAAU,eAAe,WAAW,KAAK,WAAW,KAAK;AAAA;AAAA;AAAA,OAUjE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,gBAAgB;AAC9C,YAAI,gBAAgB;AAClB,eAAK,UAAU,aAAa,IAAI;AAAA,eAC3B;AACL,eAAK,UAAU,eAAe,IAAI;AAAA;AAAA;AAAA,OAUrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,gBAAgB;AAChD,YAAI,gBAAgB;AAElB,eAAK,UAAU,aAAa,GAAG;AAAA,eAC1B;AACL,eAAK,UAAU,eAAe,GAAG;AAAA;AAAA;AAAA,OAUpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,gBAAgB;AACjD,YAAI,gBAAgB;AAClB,eAAK,UAAU,aAAa,GAAG,KAAK,SAAS;AAAA,eACxC;AACL,eAAK,UAAU,eAAe,GAAG,KAAK,SAAS;AAAA;AAAA;AAAA,OAUlD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,gBAAgB;AAChD,YAAI,gBAAgB;AAClB,eAAK,UAAU,aAAa,GAAG,KAAK,KAAK,SAAS;AAAA,eAC7C;AACL,eAAK,UAAU,eAAe,GAAG,KAAK,KAAK,SAAS;AAAA;AAAA;AAAA,OAUvD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,QAAO;AAC5C,YAAI,CAAC,KAAK,SAAS,eAAe;AAChC;AAAA;AAGF,aAAK,SAAS,SAAS,iBAAiB;AACxC,YAAI,UAAU,OAAM;AAGpB,YAAI,KAAK,aAAa,YAAY,KAAK;AACrC;AAAA;AAGF,YAAI,8BAA8B,SAAQ;AACxC;AAAA;AAGF,aAAK,cAAc;AAEnB,YAAI,CAAC,KAAK,UAAU,cAAc;AAChC;AAAA;AAIF,YAAI,gBAAiB,QAAM,WAAW,OAAM,YAAY,CAAC,OAAM;AAE/D,YAAI,KAAK,gBAAgB,CAAC,KAAK,aAAa,aAAa;AACvD,cAAI,CAAC,cAAc,YAAY,CAAC,cAAc,YAAY,CAAC,iBAAiB,CAAC,KAAK,kBAAkB;AAClG,iBAAK,WAAW,IAAI;AACpB;AAAA;AAAA;AAIJ,YAAI,iBAAiB,OAAM;AAC3B,YAAI,gBAAgB,iBAAiB,KAAK,UAAU,cAAc,KAAK,UAAU;AACjF,YAAI;AAEJ,gBAAQ;AAAA,eACD,UAAU;AACb,gBAAI,CAAC,KAAK,oBAAoB,eAAe;AAC3C,mBAAK,SAAS;AACd,qBAAM;AACN,qBAAM;AAAA;AAGR;AAAA,eAEG,UAAU;AACb,gBAAI,KAAK,oBAAoB,CAAC,KAAK,aAAa,aAAa;AAC3D,mBAAK,0BAA0B;AAAA;AAGjC,iBAAK,gBAAgB;AACrB,mBAAM;AACN,mBAAM;AACN;AAAA,eAEG,UAAU;AACb,gBAAI,KAAK,oBAAoB,CAAC,KAAK,aAAa,aAAa;AAC3D,mBAAK,0BAA0B;AAAA;AAGjC,iBAAK,kBAAkB;AACvB,mBAAM;AACN,mBAAM;AACN;AAAA,eAEG,UAAU;AACb,gBAAI,KAAK,oBAAoB,CAAC,KAAK,aAAa,aAAa;AAC3D,mBAAK,0BAA0B;AAAA;AAGjC,iBAAK,mBAAmB;AACxB,mBAAM;AACN,mBAAM;AACN;AAAA,eAEG,UAAU;AACb,gBAAI,KAAK,oBAAoB,CAAC,KAAK,aAAa,aAAa;AAC3D,mBAAK,0BAA0B;AAAA;AAGjC,iBAAK,kBAAkB;AACvB,mBAAM;AACN,mBAAM;AACN;AAAA,eAEG,UAAU;AACb,uBAAW,OAAO,KAAK,UAAU,aAAa,aAAa,KAAK,UAAU,SAAS,UAAS,KAAK,UAAU;AAE3G,gBAAI,gBAAgB;AAElB,mBAAK,UAAU,eAAe,CAAC,SAAS,KAAK,CAAC,SAAS;AAAA,mBAClD;AAEL,mBAAK,UAAU,eAAe,SAAS,KAAK,SAAS,KAAK;AAAA;AAG5D,mBAAM;AACN,mBAAM;AACN;AAAA,eAEG,UAAU;AAAA,eACV,UAAU;AACb,iBAAK,SAAS;AACd,iBAAK;AACL,mBAAM;AACN;AAAA,eAEG,UAAU;AAEb,gBAAI,KAAK,cAAc;AACrB,mBAAK,aAAa;AAAA;AAGpB,iBAAK,WAAW,MAAM;AACtB,mBAAM;AAEN;AAAA,eAEG,UAAU;AAEb,gBAAI,KAAK,kBAAkB;AACzB,kBAAI,KAAK,gBAAgB,KAAK,aAAa,UAAU,aAAa,SAAS;AACzE,qBAAK,0BAA0B;AAAA;AAGjC,mBAAK,wBAAwB;AAAA,uBACpB,KAAK,SAAS,cAAc,oBAAoB;AACzD,kBAAI,KAAK,eAAe,UAAU;AAChC,qBAAK;AAAA,yBACI,KAAK,cAAc;AAC5B,qBAAK,aAAa;AAClB,qBAAK,WAAW,MAAM;AAAA;AAAA,mBAEnB;AACL,mBAAK,wBAAwB;AAAA;AAG/B,mBAAM;AAEN,qCAAyB;AAEzB;AAAA,eAEG,UAAU;AACb,gBAAI,KAAK,kBAAkB;AACzB,mBAAK,mCAAmC;AACxC,mBAAK,aAAa;AAAA;AAGpB,mBAAM;AACN;AAAA,eAEG,UAAU;AACb,gBAAI,OAAM,WAAW,OAAM,SAAS;AAClC,4BAAc,KAAK,KAAK,WAAW,IAAI,eAAW,KAAK,SAAS,eAAe,uBAAuB,GAAG,IAAI,KAAK,UAAU,cAAc,UAAU,KAAK;AAAA,mBACpJ;AACL,4BAAc,KAAK,KAAK,WAAW,IAAI,eAAW,KAAK,UAAU,cAAc,UAAU,KAAK,KAAK,KAAK,SAAS,kBAAkB,uBAAuB,GAAG;AAAA;AAG/J,mBAAM;AAEN,mBAAM;AACN;AAAA,eAEG,UAAU;AACb,gBAAI,OAAM,WAAW,OAAM,SAAS;AAClC,4BAAc,KAAK,KAAK,WAAW,IAAI,eAAW,KAAK,SAAS,eAAe,uBAAuB,KAAK,SAAS,cAAc,GAAG,KAAK,KAAK,UAAU,cAAc,UAAU,KAAK;AAAA,mBACjL;AACL,4BAAc,KAAK,KAAK,WAAW,IAAI,eAAW,KAAK,UAAU,cAAc,UAAU,KAAK,KAAK,KAAK,SAAS,kBAAkB,uBAAuB,KAAK,SAAS,cAAc,GAAG;AAAA;AAG3L,mBAAM;AAEN,mBAAM;AACN;AAAA,eAEG,UAAU;AACb,iBAAK,UAAU,eAAe,CAAC,KAAK,SAAS,oBAAoB;AACjE,mBAAM;AAEN,mBAAM;AACN;AAAA,eAEG,UAAU;AACb,iBAAK,UAAU,eAAe,KAAK,SAAS,oBAAoB;AAChE,mBAAM;AAEN,mBAAM;AACN;AAAA;AAGA;AAAA;AAAA;AAAA,OAYL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAO,QAAQ,MAAM;AAElD,YAAI,KAAK,aAAa,MAAM;AAC1B,cAAI,KAAK,cAAc;AACrB,iBAAK,aAAa;AAAA;AAGpB,eAAK,WAAW,MAAM;AAAA;AAAA;AAAA,OAOzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,YAAY;AACjB,aAAK,aAAa;AAAA;AAAA;AAItB,WAAO;AAAA;AAGT,MAAI,YAAY,oBAAI;AAQpB,gBAAc,cAAc,SAAU,aAAa,WAAW,WAAW;AACvE,QAAI,gBAAgB,UAAU,IAAI;AAElC,QAAI,CAAC,eAAe;AAClB,sBAAgB,IAAI,cAAc,aAAa,WAAW;AAC1D,gBAAU,IAAI,aAAa;AAAA;AAG7B,WAAO;AAAA;AAGT,MAAO,wBAAQ;;;AkEtqBf;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA,gCAAO;;;ACbP,MAAI,MAAI;AACR,MAAI,YAAW;AACf,MAAI,aAAa;AACjB,MAAI,UAAQ;AAEZ,MAAI,uBAAsB,QAAM,WAAY;AAAE,eAAW;AAAA;AAIzD,MAAE,EAAE,QAAQ,UAAU,MAAM,MAAM,QAAQ,wBAAuB;AAAA,IAC/D,MAAM,cAAc,IAAI;AACtB,aAAO,WAAW,UAAS;AAAA;AAAA;;;ACV/B,MAAI,QAAO;AACX,MAAI,iCAAgC;AACpC,MAAI,YAAW;AACf,MAAI,YAAW;AACf,MAAI,YAAW;AACf,MAAI,0BAAyB;AAC7B,MAAI,aAAY;AAChB,MAAI,sBAAqB;AACzB,MAAI,cAAa;AAGjB,iCAA8B,SAAS,SAAU,QAAO,aAAa,iBAAiB;AACpF,WAAO;AAAA,MAGL,eAAe,QAAQ;AACrB,YAAI,IAAI,wBAAuB;AAC/B,YAAI,UAAU,UAAU,SAAY,SAAY,WAAU,QAAQ;AAClE,eAAO,UAAU,MAAK,SAAS,QAAQ,KAAK,IAAI,OAAO,QAAQ,QAAO,UAAS;AAAA;AAAA,MAIjF,SAAU,QAAQ;AAChB,YAAI,KAAK,UAAS;AAClB,YAAI,IAAI,UAAS;AACjB,YAAI,MAAM,gBAAgB,aAAa,IAAI;AAE3C,YAAI,IAAI;AAAM,iBAAO,IAAI;AAEzB,YAAI,CAAC,GAAG;AAAQ,iBAAO,YAAW,IAAI;AAEtC,YAAI,cAAc,GAAG;AACrB,WAAG,YAAY;AACf,YAAI,IAAI;AACR,YAAI,IAAI;AACR,YAAI;AACJ,eAAQ,UAAS,YAAW,IAAI,QAAQ,MAAM;AAC5C,cAAI,WAAW,UAAS,OAAO;AAC/B,YAAE,KAAK;AACP,cAAI,aAAa;AAAI,eAAG,YAAY,oBAAmB,GAAG,UAAS,GAAG,YAAY;AAClF;AAAA;AAEF,eAAO,MAAM,IAAI,OAAO;AAAA;AAAA;AAAA;;;AC3C9B,MAAI,MAAI;AACR,MAAI,cAAc;AAKlB,MAAE,EAAE,QAAQ,SAAS,OAAO,MAAM,QAAQ,gBAAgB,GAAG,eAAe;AAAA,IAC1E;AAAA;;;ACNF,MAAI,MAAI;AACR,MAAI,UAAU,uBAAqC;AACnD,MAAI,uBAAsB;AAC1B,MAAI,iBAAiB;AACrB,MAAI,UAAU;AAEd,MAAI,iBAAgB,qBAAoB;AAGxC,MAAI,aAAa,CAAC,WAAW,iBAAiB,MAAM,iBAAiB;AAIrE,MAAE,EAAE,QAAQ,SAAS,OAAO,MAAM,QAAQ,CAAC,kBAAiB,cAAc;AAAA,IACxE,QAAQ,gBAAgB,YAAiC;AACvD,UAAI,SAAS,UAAU;AACvB,aAAO,QAAQ,MAAM,YAAY,QAAQ,SAAS,IAAI,UAAU,KAAK;AAAA;AAAA;;;AChBzE,MAAI,MAAI;AACR,MAAI,aAAa,0BAAwC;AACzD,MAAI,oBAAmB;AAEvB,MAAI,aAAa;AACjB,MAAI,cAAc;AAGlB,MAAI,cAAc;AAAI,UAAM,GAAG,YAAY,WAAY;AAAE,oBAAc;AAAA;AAIvE,MAAE,EAAE,QAAQ,SAAS,OAAO,MAAM,QAAQ,eAAe;AAAA,IACvD,WAAW,mBAAmB,YAAqC;AACjE,aAAO,WAAW,MAAM,YAAY,UAAU,SAAS,IAAI,UAAU,KAAK;AAAA;AAAA;AAK9E,oBAAiB;;;ALcjB,mCAAO;AAlCP,+BAA4B,KAAK;AAAE,WAAO,oBAAmB,QAAQ,kBAAiB,QAAQ,6BAA4B,QAAQ;AAAA;AAElI,iCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,wCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,mBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,mBAAkB,GAAG;AAAA;AAEtZ,6BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,+BAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,mBAAkB;AAAA;AAEpF,8BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AA6BhL,MAAI,qBAAqB;AAAA,IACvB,UAAU;AAAA,IACV,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA;AAEV,MAAI,kBAAkB,IAAI,OAAO,OAAO,KAAK,oBAAoB,IAAI,SAAU,KAAK;AAClF,WAAO,IAAI,OAAO,KAAK;AAAA,KACtB,KAAK,MAAM;AAQd,uBAAqB,SAAS;AAC5B,WAAQ,YAAW,QAAQ,YAAY,QAAQ;AAAA;AAU1C,0BAAwB,UAAU;AACvC,QAAI,mBAAmB,SAAS;AAChC,QAAI,gBAAgB,SAAS;AAC7B,QAAI,SAAS,CAAC,mBAAmB,KAAK,GAAG,gBAAgB,KAAK,GAAG,SAAS,cAAc,GAAG,SAAS,cAAc;AAClH,QAAI,OAAO,SAAS,QAAQ,MAAM,UAAU;AAC5C,QAAI,YAAY,KAAK;AACrB,QAAI,YAAY,YAAY,IAAI,KAAK,GAAG,SAAS;AACjD,QAAI,QAAQ,CAAC,WAAW;AACxB,QAAI,QAAQ,mBAAmB,CAAC,WAAW,cAAc;AACzD,QAAI,QAAQ,CAAC,WAAW;AACxB,QAAI,cAAc,gBAAgB,IAAI;AACtC,QAAI,iBAAiB,mBAAmB,IAAI;AAE5C,aAAS,MAAM,GAAG,MAAM,WAAW,OAAO,GAAG;AAC3C,UAAI,qBAAqB,oBAAoB,QAAQ;AACrD,UAAI,QAAQ;AAEZ,eAAS,SAAS,GAAG,SAAS,WAAW,UAAU,GAAG;AACpD,YAAI,qBAAqB,CAAC,sBAAsB,iBAAiB,WAAW;AAC5E,YAAI,OAAO;AAEX,YAAI,oBAAoB;AACtB,iBAAO,OAAO,OAAO,SAAS,aAAa,SAAS,cAAc;AAAA,mBACzD,oBAAoB;AAC7B,iBAAO,OAAO,OAAO,SAAS,aAAa,MAAM,iBAAiB;AAAA,eAC7D;AACL,cAAI,WAAW,KAAK,KAAK;AAEzB,cAAI,wBAAwB,SAAS,YAAY,MAAM,gBAAgB,SAAS,cAC5E,SAAS,sBAAsB,QAC/B,UAAU,sBAAsB,SAChC,UAAU,sBAAsB;AAEpC,cAAI,CAAC,QAAQ;AACX,gBAAI,QAAQ;AAEZ,gBAAI,SAAS;AACX,oBAAM,KAAK,YAAa,OAAO,SAAS;AAAA;AAG1C,gBAAI,SAAS;AACX,oBAAM,KAAK,YAAa,OAAO,SAAS;AAAA;AAG1C,gBAAI,QAAQ,WAAW;AACrB,qBAAO,OAAO,OAAO,MAAM,KAAK,MAAM;AAAA,mBACjC;AACL,kBAAI,QAAQ,SAAS,WAAW,QAAQ,KAAK,QAAQ,QAAQ,KAAK,QAAQ,QAAQ,qCAAqC,YAAY,QAAQ,UAAU,UAAU,QAAQ,QAAQ;AAC/K,qBAAO,OAAO,OAAO,MAAM,KAAK,MAAM,KAAK,OAAO,OAAO;AAAA;AAAA;AAAA;AAK/D,cAAM,KAAK;AAAA;AAGb,UAAI,KAAK,CAAC,QAAQ,OAAO,OAAO,CAAC,UAAU,KAAK;AAEhD,UAAI,oBAAoB;AACtB,cAAM,OAAO,GAAG,GAAG;AAAA,aACd;AACL,cAAM,OAAO,IAAI,GAAG;AAAA;AAAA;AAIxB,UAAM,OAAO,GAAG,GAAG,MAAM,KAAK,KAAK,MAAM,KAAK;AAC9C,WAAO,MAAM,KAAK;AAAA;AAUb,uBAAqB,OAAO;AACjC,QAAI,WAAW,MAAM;AACrB,QAAI,SAAS,CAAC;AAEd,aAAS,MAAM,GAAG,MAAM,UAAU,OAAO,GAAG;AAC1C,UAAI,UAAU,MAAM;AACpB,UAAI,aAAa,QAAQ;AACzB,UAAI,gBAAgB;AAEpB,UAAI,QAAQ,GAAG;AACb,eAAO,KAAK;AAAA;AAGd,eAAS,SAAS,GAAG,SAAS,YAAY,UAAU,GAAG;AACrD,YAAI,WAAW,QAAQ;AACvB,YAAI,iBAAiB,QAAQ,YAAY,KAAK,SAAS,WAAW,QAAQ,MAAM,QAAQ,QAAQ,MAAM,QAAQ,QAAQ,qCAAqC,YAAY,QAAQ,UAAU,UAAU,QAAQ,QAAQ;AACnN,sBAAc,KAAK,OAAO,OAAO,gBAAgB;AAAA;AAGnD,aAAO,KAAK,MAAM,QAAQ,CAAC,QAAQ,OAAO,eAAe,CAAC;AAE1D,UAAI,MAAM,MAAM,UAAU;AACxB,eAAO,KAAK;AAAA;AAAA;AAIhB,WAAO,KAAK;AACZ,WAAO,OAAO,KAAK;AAAA;AAWd,8BAA4B,SAAS;AAC1C,QAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACvF,QAAI,cAAc;AAClB,QAAI,WAAW,aAAa;AAC5B,QAAI,WAAW,aAAa,cAAc;AAC1C,aAAS,YAAY;AACrB,QAAI,eAAe;AAEnB,QAAI,OAAO,iBAAiB,UAAU;AACpC,UAAI,sBAAsB,aAAa,QAAQ,oCAAoC,SAAU,cAAc;AACzG,YAAI,aAAa,aAAa,MAAM,iBAAiB;AACrD,YAAI,aAAY,aAAa,UAAU,WAAW,QAAQ,aAAa,YAAY,MAAM,QAAQ,uBAAuB;AACxH,YAAI,aAAa;AACjB,eAAO,GAAG,OAAO,YAAY,OAAO,YAAW,OAAO;AAAA;AAExD,eAAS,mBAAmB,cAAc,GAAG,OAAO;AACpD,qBAAe,SAAS,cAAc;AAAA;AAGxC,QAAI,CAAC,gBAAgB,CAAC,YAAY,eAAe;AAC/C;AAAA;AAGF,QAAI,YAAY,SAAS,cAAc;AACvC,QAAI,gBAAgB,aAAa,cAAc,gBAAgB;AAC/D,QAAI,YAAY,aAAa,cAAc;AAC3C,QAAI,YAAY,CAAC,YAAY,IAAI,MAAM,KAAK,UAAU,OAAO,OAAO,SAAU,MAAM,OAAM;AACxF,aAAO,OAAO,MAAK;AAAA,OAClB,KAAM,iBAAgB,IAAI;AAC7B,QAAI,kBAAkB,aAAa,SAAS,MAAM,KAAK,aAAa,MAAM,SAAS;AACnF,QAAI,eAAe;AACnB,QAAI,gBAAgB;AACpB,QAAI,YAAY;AAChB,QAAI,YAAY;AAEhB,QAAI,aAAa,OAAO;AACtB,UAAI,SAAS,MAAM,KAAK,aAAa,MAAM,MAAM,OAAO,SAAU,KAAI;AACpE,YAAI,YAAY,IAAG,cAAc,UAAU;AAE3C,YAAI,WAAW;AACb,uBAAa,KAAK;AAAA;AAGpB,eAAO,CAAC;AAAA;AAEV,kBAAY,OAAO;AACnB,sBAAgB,YAAY;AAE5B,UAAI,YAAY,GAAG;AACjB,oBAAY,gBAAgB,MAAM,KAAK,QAAQ,OAAO,SAAU,MAAM,MAAK;AACzE,cAAI,aAAa,MAAM,KAAK,KAAI,OAAO,OAAO,SAAU,SAAS,QAAQ,cAAc;AACrF,gBAAI,iBAAiB,iBAAiB,GAAG;AACvC,qBAAO;AAAA;AAGT,gBAAI,WAAU,OAAO,SACjB,aAAY,OAAO;AACvB,gBAAI,aAAa,WAAU,IAAI;AAAA,cAC7B,OAAO;AAAA,cACP,SAAS;AAAA,gBACP;AACJ,oBAAQ,KAAK;AACb,mBAAO;AAAA,aACN;AACH,eAAK,KAAK;AACV,iBAAO;AAAA,WACN;AAAA,iBACM,eAAe;AACxB,oBAAY,aAAa,MAAM,KAAK,OAAO,GAAG,UAAU,OAAO,SAAU,SAAS,QAAQ,QAAO;AAC/F,cAAI,iBAAiB,WAAU,GAAG;AAChC,mBAAO;AAAA;AAGT,kBAAQ,KAAK,OAAO;AACpB,iBAAO;AAAA,WACN;AAAA;AAAA;AAIP,QAAI,aAAa,QAAQ;AACvB,kBAAY,eAAe,aAAa;AAAA;AAG1C,QAAI,gBAAgB,QAAQ;AAC1B,kBAAY,kBAAkB,gBAAgB;AAAA;AAGhD,QAAI,WAAW,GAAG,OAAO,cAAc,oBAAmB,MAAM,KAAK,aAAa,SAAS,OAAO,SAAU,UAAU,SAAS;AAC7H,eAAS,KAAK,MAAM,UAAU,oBAAmB,MAAM,KAAK,QAAQ;AACpE,aAAO;AAAA,OACN,MAAM,oBAAmB;AAC5B,gBAAY,SAAS;AACrB,QAAI,UAAU,IAAI,MAAM;AAExB,aAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,cAAQ,KAAK,IAAI,MAAM;AAAA;AAGzB,QAAI,aAAa;AACjB,QAAI,aAAa;AAEjB,aAAS,MAAM,GAAG,MAAM,WAAW,OAAO;AACxC,UAAI,KAAK,SAAS;AAClB,UAAI,QAAQ,MAAM,KAAK,GAAG;AAC1B,UAAI,WAAW,MAAM;AAErB,eAAS,SAAS,GAAG,SAAS,UAAU,UAAU;AAChD,YAAI,OAAO,MAAM;AACjB,YAAI,WAAW,KAAK,UAChB,YAAY,KAAK,WACjB,UAAU,KAAK,SACf,UAAU,KAAK;AACnB,YAAI,MAAM,QAAQ,KAAK,UAAU,SAAU,OAAO;AAChD,iBAAO,UAAU;AAAA;AAGnB,YAAI,aAAa,MAAM;AACrB,cAAI,UAAU,KAAK,UAAU,GAAG;AAC9B,qBAAS,SAAS,KAAK,SAAS,MAAM,SAAS,UAAU;AACvD,kBAAI,SAAS,WAAW;AACtB,yBAAS,SAAS,KAAK,SAAS,MAAM,SAAS,UAAU;AACvD,0BAAQ,QAAQ,UAAU;AAAA;AAAA;AAAA;AAKhC,gBAAI,YAAY,KAAK,aAAa;AAClC,gBAAI,cAAc,aAAa,UAAU,SAAS;AAElD,gBAAI,CAAC,aAAa;AAChB,yBAAW,KAAK;AAAA,gBACd;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA;AAAA;AAKN,cAAI,YAAY;AAEhB,cAAI,aAAa,UAAU,KAAK,UAAU,UAAU;AAClD,wBAAY,UAAU,QAAQ,sBAAsB,KAAQ,QAAQ,qCAAqC;AAAA,iBACpG;AACL,wBAAY,UAAU,QAAQ,0BAA0B;AAAA;AAG1D,kBAAQ,KAAK,OAAO,UAAU,QAAQ,iBAAiB,SAAU,OAAO;AACtE,mBAAO,mBAAmB;AAAA;AAAA,eAEvB;AACL,qBAAW,KAAK;AAAA;AAAA;AAAA;AAKtB,QAAI,WAAW,QAAQ;AACrB,kBAAY,aAAa;AAAA;AAG3B,QAAI,WAAW,QAAQ;AACrB,kBAAY,aAAa;AAAA;AAG3B,QAAI,QAAQ,QAAQ;AAClB,kBAAY,OAAO;AAAA;AAGrB,WAAO;AAAA;;;AM/UT,mCAAO;AAMP,gCAAO;;;ACCP,mCAAO;AAaP,gCAAO;;;ACjCP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,gCAAO;AAKP,mCAAO;AAjBP,+BAA4B,KAAK;AAAE,WAAO,oBAAmB,QAAQ,kBAAiB,QAAQ,6BAA4B,QAAQ;AAAA;AAElI,iCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,wCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,mBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,mBAAkB,GAAG;AAAA;AAEtZ,6BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,+BAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,mBAAkB;AAAA;AAEpF,8BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAsBhL,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAqBlU,qBAAmB,OAAO;AAC/B,QAAI,uBAAuB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAE/F,QAAI,OAAO,UAAQ;AAEnB,QAAI,SAAS,UAAU;AACrB,aAAO,CAAC,MAAM,UAAU,SAAS;AAAA,eACxB,SAAS,UAAU;AAC5B,UAAI,MAAM,WAAW,GAAG;AACtB,eAAO;AAAA,iBACE,MAAM,WAAW,GAAG;AAC7B,eAAO,KAAK,KAAK;AAAA;AAGnB,UAAI,YAAY,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,OAAO,oBAAmB,yBAAyB,IAAI,SAAU,GAAG;AAC3G,eAAO,KAAK,OAAO;AAAA,SAClB,KAAK;AACR,aAAO,IAAI,OAAO,gBAAgB,OAAO,WAAW,YAAY,OAAO,WAAW,0CAA0C,KAAK,KAAK,MAAM;AAAA,eACnI,SAAS,UAAU;AAC5B,aAAO,CAAC,CAAC,SAAS,OAAO,MAAM,cAAc,YAAY,CAAE,kBAAiB;AAAA;AAG9E,WAAO;AAAA;AAYF,yBAAuB,OAAO;AACnC,WAAO,UAAU,OAAO,CAAC;AAAA;AAUpB,qBAAmB,WAAW,SAAS,UAAU;AACtD,QAAI,SAAQ;AAEZ,QAAI,OAAO,YAAY,YAAY;AACjC,iBAAW;AACX,gBAAU;AAAA,WACL;AACL,eAAQ,YAAY;AAAA;AAKtB,WAAO,EAAE,UAAS,SAAS;AACzB,UAAI,SAAS,YAAW,OAAO;AAC7B;AAAA;AAAA;AAAA;AAYC,4BAA0B,WAAW,SAAS,UAAU;AAC7D,QAAI,SAAQ,YAAY;AAExB,QAAI,OAAO,YAAY,YAAY;AACjC,iBAAW;AACX,gBAAU;AAAA;AAKZ,WAAO,EAAE,UAAS,SAAS;AACzB,UAAI,SAAS,YAAW,OAAO;AAC7B;AAAA;AAAA;AAAA;AAYC,iCAA+B,OAAO,SAAS;AACpD,cAAU,SAAS,QAAQ,WAAW,QAAQ,KAAK,KAAK;AACxD,cAAU,MAAM,WAAW,IAAI;AAC/B,WAAO,SAAS,QAAQ,UAAU,KAAK;AAAA;;;ADvJzC,+BAA4B,KAAK;AAAE,WAAO,oBAAmB,QAAQ,kBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,iCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,6BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,+BAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,2BAAwB,KAAK,GAAG;AAAE,WAAO,iBAAgB,QAAQ,uBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,+BAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,kCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,4BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAkBxD,MAAI,MAAM;AACV,MAAI,OAAO;AAClB,MAAI,YAAY,oBAAI,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG;AAEpD,MAAI,gCAAgC,wCAAuC,UAAU;AACnF,WAAO,iBAAiB,OAAO,UAAU;AAAA;AAG3C,MAAI,6BAA6B,qCAAoC,UAAU;AAC7E,WAAO,iBAAiB,OAAO,UAAU;AAAA;AAkBpC,+BAA6B;AAClC,QAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,IAC3E,sBAAsB,KAAK,qBAC3B,mBAAmB,KAAK;AAE5B,QAAI,cAAc,oBAAI;AACtB,0BAAsB,WAAW,uBAAuB,sBAAsB;AAC9E,uBAAmB,WAAW,oBAAoB,mBAAmB;AAQrE,qBAAiB,UAAU,MAAM;AAC/B,UAAI,CAAC,UAAU,WAAW;AACxB,cAAM,IAAI,MAAM,iBAAiB;AAAA;AAGnC,UAAI,YAAY,IAAI,WAAW;AAC7B,cAAM,IAAI,MAAM,oBAAoB;AAAA;AAGtC,kBAAY,IAAI,UAAU;AAAA;AAU5B,wBAAoB;AAClB,UAAI,SAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEhF,UAAI,QAAQ,UAAU,IAAI,WAAU,UAAU,IAAI,MAC9C,QAAQ,gBAAe,OAAO,IAC9B,QAAO,MAAM,IACb,SAAQ,MAAM;AAElB,aAAO,oBAAmB,aAGzB,KAAK,SAAU,GAAG,GAAG;AACpB,eAAO,EAAE,KAAK,EAAE,KAAK,QAAO;AAAA,SAC3B,IAAI,SAAU,MAAM;AACrB,eAAO,KAAK;AAAA;AAAA;AAIhB,WAAO;AAAA,MACL;AAAA,MACA;AAAA;AAAA;;;AEjGJ,mCAAO;;;ACnBP,MAAI,MAAI;AACR,MAAI,QAAQ,0BAAwC;AACpD,MAAI,oBAAmB;AAEvB,MAAI,OAAO;AACX,MAAI,eAAc;AAGlB,MAAI,QAAQ;AAAI,UAAM,GAAG,MAAM,WAAY;AAAE,qBAAc;AAAA;AAI3D,MAAE,EAAE,QAAQ,SAAS,OAAO,MAAM,QAAQ,gBAAe;AAAA,IACvD,MAAM,cAAc,YAAqC;AACvD,aAAO,MAAM,MAAM,YAAY,UAAU,SAAS,IAAI,UAAU,KAAK;AAAA;AAAA;AAKzE,oBAAiB;;;ADYjB,gCAAO;AAhCP,+BAA4B,KAAK;AAAE,WAAO,oBAAmB,QAAQ,kBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,iCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,6BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,+BAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,2BAAwB,KAAK,GAAG;AAAE,WAAO,iBAAgB,QAAQ,uBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,+BAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,kCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,4BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAiB/D,MAAI,0BAA0B,kCAAiC,KAAI;AACjE,WAAO,WAAW,OAAO,KAAI;AAAA;AAqBxB,6BAA2B;AAChC,QAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,IAC3E,gBAAgB,KAAK;AAEzB,QAAI,YAAY,oBAAI;AACpB,oBAAgB,WAAW,iBAAiB,gBAAgB;AAQ5D,qBAAiB,KAAI,MAAM;AACzB,UAAI,SAAQ,MAAK;AACf,cAAM,IAAI,MAAM,cAAc;AAAA;AAGhC,gBAAU,IAAI,KAAI;AAAA;AAOpB,qBAAiB;AACf,gBAAU;AAAA;AAUZ,mBAAe,MAAM;AACnB,UAAI,QAAQ,WAAW,KAAK,SAAU,OAAO;AAC3C,YAAI,QAAQ,gBAAe,OAAO,IAC9B,MAAK,MAAM,IACX,UAAU,MAAM;AAEpB,YAAI,SAAS,SAAS;AACpB,iBAAO;AAAA;AAGT,eAAO;AAAA,YACH,CAAC,OACH,QAAQ,gBAAe,OAAO,IAC9B,SAAS,MAAM;AAEnB,aAAO;AAAA;AAUT,sBAAiB,KAAI;AACnB,aAAO,UAAU,IAAI;AAAA;AASvB,wBAAoB;AAClB,aAAO,oBAAmB;AAAA;AAU5B,sBAAiB,KAAI;AACnB,aAAO,UAAU,IAAI;AAAA;AAGvB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA,SAAS;AAAA;AAAA;;;AEzIb,mCAAO;AAWP,gCAAO;AAvBP,+BAA4B,KAAK;AAAE,WAAO,oBAAmB,QAAQ,kBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,iCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,6BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,+BAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAgBhL,MAAI,4BAA4B,oCAAmC,MAAM;AACvE,WAAO,IAAI,OAAO,MAAM;AAAA;AAiBnB,6BAA2B;AAChC,QAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,IAC3E,kBAAkB,KAAK;AAE3B,QAAI,YAAY,oBAAI;AACpB,sBAAkB,WAAW,mBAAmB,kBAAkB;AAOlE,qBAAiB,MAAM;AACrB,UAAI,UAAU,IAAI,OAAO;AACvB,cAAM,IAAI,MAAM,gBAAgB;AAAA;AAGlC,gBAAU,IAAI;AAAA;AAShB,wBAAoB;AAClB,aAAO,oBAAmB;AAAA;AAG5B,WAAO;AAAA,MACL;AAAA,MACA;AAAA;AAAA;;;AL5EJ,2BAAwB,KAAK,GAAG;AAAE,WAAO,iBAAgB,QAAQ,uBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,+BAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,kCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,4BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAe/D,+BAA4B,KAAK;AAAE,WAAO,oBAAmB,QAAQ,kBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,iCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,6BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,+BAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAUhL,MAAI,0BAA0B,kCAAiC,YAAY;AACzE,WAAO,gCAAiC,OAAO,YAAY;AAAA;AAG7D,MAAI,4BAA4B,oCAAmC,UAAU;AAC3E,WAAO,mDAAoD,OAAO,UAAU;AAAA;AAG9E,MAAI,qBAAqB,6BAA4B,UAAU;AAC7D,WAAO,iBAAkB,OAAO,UAAU;AAAA;AAO5C,MAAI,uBAAuB,kBAAkB;AAAA,IAC3C,qBAAqB;AAAA,IACrB,kBAAkB;AAAA;AAMpB,MAAI,qBAAqB,gBAAgB;AAAA,IACvC,iBAAiB;AAAA;AAMnB,MAAI,oBAAoB,gBAAgB;AAAA,IACtC,eAAe;AAAA;AAUV,6BAA2B;AAChC,WAAO,GAAG,OAAO,oBAAmB,qBAAqB,aAAa,oBAAmB,mBAAmB;AAAA;AASvG,qBAAmB,YAAY;AACpC,QAAI,oBAAoB,iBAAiB;AACzC,WAAO,kBAAkB,QAAQ;AAAA;AAS5B,qBAAmB,YAAY;AAEpC,WAAO,UAAU,cAAc,OAAO;AAAA;AAUjC,0BAAwB,YAAY,aAAa,UAAU;AAChE,QAAI,wBAAwB,qBAAqB,YAAY,aAAa;AAE1E,QAAI,yBAAyB,gBAAe,uBAAuB;AAEnE,iBAAa,uBAAuB;AACpC,kBAAc,uBAAuB;AACrC,eAAW,uBAAuB;AAElC,QAAI,UAAU,gBAAgB,QAAQ;AACpC,sBAAgB,YAAY,aAAa;AAAA;AAAA;AAW7C,2BAAyB,YAAY,aAAa,UAAU;AAC1D,QAAI,oBAAoB,iBAAiB;AAEzC,QAAI,kBAAkB,QAAQ,oBAAoB;AAChD,YAAM,IAAI,MAAM,wBAAwB;AAAA;AAG1C,QAAI,aAAa,QAAQ;AACvB,yBAAmB,QAAQ;AAAA,WACtB;AACL,2BAAqB,QAAQ,UAAU;AAAA;AAGzC,sBAAkB,QAAQ,mBAAmB;AAAA;AAY/C,gCAA8B,YAAY,aAAa,UAAU;AAC/D,QAAI,OAAO,eAAe,YAAY;AACpC,oBAAc;AACd,mBAAa,YAAY;AACzB,iBAAW,YAAY;AAAA;AAGzB,WAAO,CAAC,YAAY,aAAa;AAAA;;;AMvKnC,MAAI,mBAAkB,eAAe;AAArC,MACI,YAAW,iBAAgB;AAD/B,MAEI,WAAU,iBAAgB;AAF9B,MAGI,WAAU,iBAAgB;AAH9B,MAII,YAAW,iBAAgB;AAJ/B,MAKI,aAAY,iBAAgB;AAShC,qBAAkB,MAAM;AACtB,QAAI,OAAO,SAAS,YAAY;AAC9B,aAAO;AAAA;AAGT,QAAI,CAAC,SAAQ,OAAO;AAClB,YAAM,MAAM,uCAAwC,OAAO,MAAM;AAAA;AAGnE,WAAO,SAAQ;AAAA;AAUjB,sBAAmB,MAAM,UAAU;AACjC,QAAI,OAAO,SAAS,UAAU;AAC5B,iBAAW;AACX,aAAO,SAAS;AAAA;AAGlB,cAAS,MAAM;AAAA;;;ACvCjB,MAAI,mBAAkB,eAAe;AAArC,MACI,YAAW,iBAAgB;AAD/B,MAEI,WAAU,iBAAgB;AAF9B,MAGI,WAAU,iBAAgB;AAH9B,MAII,YAAW,iBAAgB;AAJ/B,MAKI,aAAY,iBAAgB;AAShC,qBAAkB,MAAM;AACtB,QAAI,OAAO,SAAS,YAAY;AAC9B,aAAO;AAAA;AAGT,QAAI,CAAC,SAAQ,OAAO;AAClB,YAAM,MAAM,wCAAyC,OAAO,MAAM;AAAA;AAGpE,WAAO,SAAQ;AAAA;AAUjB,sBAAmB,MAAM,WAAW;AAClC,QAAI,OAAO,SAAS,UAAU;AAC5B,kBAAY;AACZ,aAAO,UAAU;AAAA;AAGnB,cAAS,MAAM;AAAA;;;ACTjB,mCAAO;AAaP,gCAAO;;;AC7CP,mCAAO;AAoBA,qBAAmB,MAAM;AAC9B,QAAI,aAAa,KAAK,YAClB,eAAc,KAAK,aACnB,gBAAe,KAAK,cACpB,SAAS,KAAK,QACd,YAAY,KAAK,WACjB,aAAa,KAAK;AACtB,QAAI,mBAAmB,UAAU,eAAe,UAAU,mBAAmB,YAAY;AACzF,QAAI,iBAAiB,UAAU;AAC/B,QAAI,cAAc,UAAU;AAE5B,QAAI,cAAc,kBAAkB;AAClC,UAAI,OAAO,OAAO,KAAK,OAAO,OAAO,KAAK,CAAC,WAAW,MAAM;AAC1D,kBAAU,YAAY;AAAA,iBACZ,mBAAkB,gBAAgB,OAAO,OAAO,KAAK,OAAO,OAAO,KAAK,CAAC,WAAW,MAAM;AACpG,kBAAU,YAAY,IAAI,eAAW,OAAO,KAAK,OAAO;AAAA,iBAC/C,kBAAkB,OAAO,MAAM,KAAK,CAAC,WAAW,QAAQ;AACjE,kBAAU,YAAY,IAAI,eAAW,iBAAiB,GAAG,KAAK,OAAO;AAAA,iBAC5D,eAAe,OAAO,MAAM,KAAK,CAAC,WAAW,KAAK;AAC3D,kBAAU,YAAY,IAAI,eAAW,OAAO,KAAK,iBAAiB,GAAG;AAAA,iBAC3D,EAAC,kBAAkB,CAAC,eAAe,OAAO,MAAM,KAAK,kBAAkB,OAAO,MAAM,MAAM,CAAC,WAAW,KAAK;AACrH,kBAAU,WAAW,KAAK,IAAI,iBAAiB,KAAK,KAAK,IAAI,OAAO,KAAK,OAAO;AAAA,iBACtE,EAAC,kBAAkB,CAAC,eAAe,OAAO,MAAM,KAAK,eAAe,OAAO,MAAM,MAAM,CAAC,WAAW,QAAQ;AACrH,kBAAU,cAAc,KAAK,IAAI,iBAAiB,KAAK,KAAK,IAAI,OAAO,KAAK,OAAO;AAAA;AAAA,WAEhF;AACL,UAAI,2BAA2B,CAAC,UAAU,cAAc;AACxD,UAAI,mBAAmB,gBAAe,iBAAgB;AAEtD,UAAI,OAAO,MAAM,KAAK,OAAO,OAAO,KAAK,CAAC,WAAW,QAAQ;AAC3D,YAAI,kBAAkB;AACpB,oBAAU,cAAc,OAAO,KAAK,OAAO,KAAK,OAAO;AAAA;AAAA,iBAGhD,OAAO,MAAM,KAAK,OAAO,OAAO,KAAK,CAAC,WAAW,KAAK;AAC/D,YAAI,kBAAkB;AACpB,oBAAU,WAAW,OAAO,KAAK,OAAO,KAAK,OAAO;AAAA;AAAA,iBAE7C,OAAO,OAAO,KAAK,OAAO,OAAO,KAAK,CAAC,WAAW,MAAM;AACjE,YAAI,kBAAkB;AACpB,oBAAU,cAAc;AAAA;AAAA,iBAEjB,OAAO,MAAM,KAAK,OAAO,MAAM,GAAG;AAC3C,kBAAU,UAAU,MAAM;AAAA;AAAA;AAAA;AAezB,qBAAmB,OAAO;AAC/B,QAAI,eAAc,MAAM,aACpB,SAAS,MAAM,QACf,YAAY,MAAM,WAClB,aAAa,MAAM;AAEvB,QAAI,CAAC,cAAa;AAChB;AAAA;AAGF,QAAI,cAAc,UAAU;AAC5B,QAAI,iBAAiB,UAAU;AAC/B,QAAI,YAAY,UAAU,WAAW;AACrC,QAAI,YAAY,UAAU,WAAW;AAErC,QAAI,kBAAkB,CAAC,WAAW,QAAQ;AACxC,gBAAU,YAAY,IAAI,eAAW,YAAY,GAAG,OAAO;AAAA,eAClD,eAAe,CAAC,WAAW,KAAK;AACzC,gBAAU,YAAY,IAAI,eAAW,OAAO,KAAK,YAAY;AAAA,eACpD,CAAC,WAAW,MAAM;AAC3B,gBAAU,YAAY;AAAA;AAAA;AAG1B,MAAI,WAAW,oBAAI,IAAI,CAAC,CAAC,aAAa,YAAY,CAAC,aAAa,YAAY,CAAC,cAAc;AAYpF,4BAA0B,QAAO,OAAO;AAC7C,QAAI,SAAS,MAAM,QACf,YAAY,MAAM,WAClB,aAAa,MAAM;AACvB,aAAS,IAAI,OAAM,MAAM;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,OAAM;AAAA,MAClB,aAAa,YAAiB,WAAU,OAAM,SAAS;AAAA,MACvD,cAAc,aAAkB;AAAA;AAAA;;;AC3HpC,mCAAO;AAOA,MAAI,SAAS,oBAAI;AACjB,MAAI,qBAAqB,OAAO;AAOhC,kCAAgC,QAAQ;AAC7C,WAAO,IAAI,QAAQ;AAAA;AASd,6BAA2B,YAAY;AAC5C,WAAO,eAAe;AAAA;AASjB,0BAAwB,QAAQ;AACrC,WAAO,OAAO,IAAI;AAAA;;;AFpCpB,2BAAwB,KAAK,GAAG;AAAE,WAAO,iBAAgB,QAAQ,uBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,+BAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,kCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,4BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAE/D,uBAAoB,QAAQ,MAAM,OAAO;AAAE,QAAI,+BAA6B;AAAE,oBAAa,QAAQ;AAAA,WAAkB;AAAE,oBAAa,qBAAoB,SAAQ,OAAM,QAAO;AAAE,YAAI,IAAI,CAAC;AAAO,UAAE,KAAK,MAAM,GAAG;AAAO,YAAI,cAAc,SAAS,KAAK,MAAM,SAAQ;AAAI,YAAI,WAAW,IAAI;AAAe,YAAI;AAAO,4BAAgB,UAAU,OAAM;AAAY,eAAO;AAAA;AAAA;AAAe,WAAO,YAAW,MAAM,MAAM;AAAA;AAErZ,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAwB/Q,MAAI,eAAc,oBAAI;AAMtB,MAAI,YAAyB,2BAAY;AAIvC,wBAAmB,UAAU;AAC3B,wBAAgB,MAAM;AAQtB,WAAK,WAAW;AAQhB,WAAK,eAAe,IAAI,qBAAa;AAQrC,WAAK,WAAW,SAAS;AAOzB,WAAK,QAAQ;AAOb,WAAK,QAAQ;AAOb,WAAK,KAAK;AAQV,WAAK,WAAW;AAUhB,WAAK,8BAA8B;AACnC,mBAAY,IAAI,MAAM;AAAA,QAOpB,oBAAoB;AAAA,QAMpB,WAAW;AAAA,QAQX,OAAO;AAAA,QAOP,WAAW;AAAA,QAOX,YAAY;AAAA;AAEd,WAAK;AACL,WAAK;AACL,WAAK;AAAA;AAOP,mBAAa,YAAW,CAAC;AAAA,MACvB,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,CAAC,KAAK,SAAS,qBAAqB;AACtC,eAAK,SAAS,SAAS,gBAAgB,KAAK,SAAS;AAErD,cAAI,KAAK,6BAA6B;AACpC,iBAAK,8BAA8B;AACnC,iBAAK,mBAAmB;AAAA;AAG1B,eAAK,GAAG,KAAK,CAAC,KAAK,SAAS;AAC5B,eAAK,SAAS,SAAS,eAAe,KAAK,SAAS;AACpD,eAAK,SAAS,kBAAkB;AAChC,eAAK,SAAS,aAAa;AAAA;AAAA;AAAA,OAS9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEhF,YAAI,KAAK,SAAS,qBAAqB;AACrC,eAAK,8BAA8B;AAAA,eAC9B;AACL,eAAK,GAAG,WAAW,mBAAmB;AAAA;AAAA;AAAA,OAWzC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAQ,SAAS;AAC/C,YAAI,KAAK,KAAK,GAAG,QAAQ,QAAQ;AAEjC,YAAI,KAAK,GAAG;AAEV,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAQ,WAAW,aAAa,cAAc,YAAY;AACvF,eAAO,KAAK,GAAG,eAAe,QAAQ,WAAW,aAAa,cAAc;AAAA;AAAA,OAW7E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC,QAAQ,aAAa,YAAY;AAC1E,eAAO,KAAK,GAAG,2BAA2B,QAAQ,aAAa;AAAA;AAAA,OAWhE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,KAAK,WAAW,cAAc;AACrE,eAAO,KAAK,GAAG,yBAAyB,KAAK,WAAW;AAAA;AAAA,OAQzD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,YAAI,OAAO,aAAY,IAAI;AAC3B,YAAI,iBAAiB,KAAK,UACtB,cAAc,eAAe,aAC7B,eAAe,eAAe;AAClC,YAAI,gBAAgB,YAAY,aAAa;AAE7C,YAAI,eAAe;AACjB,sBAAY,aAAa,sBAAsB;AAAA;AAGjD,iBAAS,aAAa;AACtB,aAAK,QAAQ,aAAa,cAAc;AACxC,iBAAS,KAAK,OAAO;AAErB,YAAI,KAAK,SAAS,cAAc,gBAAgB;AAC9C,mBAAS,KAAK,OAAO,KAAK,SAAS,cAAc;AAAA;AAGnD,aAAK,QAAQ,aAAa,cAAc;AACxC,aAAK,MAAM,YAAY,KAAK;AAC5B,aAAK,QAAQ,aAAa,cAAc;AACxC,aAAK,MAAM,YAAY,KAAK;AAC5B,aAAK,SAAS,QAAQ,KAAK;AAC3B,aAAK,SAAS,UAAU,aAAa,KAAK,OAAO,KAAK,SAAS,UAAU;AAAA;AAAA,OAQ1E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA0B;AAC/B,YAAI,QAAQ;AAEZ,YAAI,OAAO,aAAY,IAAI;AAC3B,YAAI,kBAAkB,KAAK,UACvB,cAAc,gBAAgB,aAC9B,eAAe,gBAAgB,cAC/B,YAAY,gBAAgB;AAChC,YAAI,kBAAkB,aAAa;AACnC,aAAK,aAAa,iBAAiB,aAAa,aAAa,SAAU,QAAO;AAC5E,eAAK,qBAAqB;AAE1B,cAAI,CAAC,MAAM,uBAAuB,OAAM,SAAS;AAC/C,gBAAI,aAAa,MAAM,SAAS;AAChC,+BAAmB;AACnB,mBAAM;AACN,uBAAW;AAAA;AAAA;AAGf,aAAK,aAAa,iBAAiB,aAAa,WAAW,WAAY;AACrE,eAAK,qBAAqB;AAAA;AAE5B,aAAK,aAAa,iBAAiB,aAAa,aAAa,SAAU,QAAO;AAC5E,cAAI,KAAK,sBAAsB,CAAC,MAAM,uBAAuB,OAAM,SAAS;AAE1E,gBAAI,MAAM,SAAS,mBAAmB;AACpC,iCAAmB,MAAM,SAAS;AAAA;AAGpC,mBAAM;AAAA;AAAA;AAGV,aAAK,aAAa,iBAAiB,iBAAiB,SAAS,SAAU,QAAO;AAC5E,cAAI,UAAU,kBAAkB,CAAC,OAAM,UAAU;AAC/C,sBAAU;AAAA;AAAA;AAGd,aAAK,aAAa,iBAAiB,iBAAiB,WAAW,SAAU,QAAO;AAC9E,cAAI,UAAU,kBAAkB,YAAY,SAAQ;AAElD,sBAAU;AAAA;AAGZ,eAAK,YAAY;AAEjB,cAAI,eAAe,aAAa,kBAAkB,CAAC,UAAU,gBAAgB,CAAC,UAAU,2BAA2B,CAAC,YAAY,SAAS,OAAM,WAAW,CAAC,aAAa,SAAQ;AAC9K,kBAAM,SAAS;AAAA;AAAA;AAGnB,aAAK,aAAa,iBAAiB,iBAAiB,eAAe,SAAU,QAAO;AAClF,cAAI,UAAU,kBAAkB,aAAa,SAAQ;AACnD,sBAAU;AACV,iBAAK,YAAY;AAAA;AAAA;AAGrB,aAAK,aAAa,iBAAiB,iBAAiB,YAAY,WAAY;AAC1E,cAAI,UAAU,gBAAgB;AAC5B,sBAAU;AAAA;AAGZ,eAAK,YAAY;AAAA;AAEnB,aAAK,aAAa,iBAAiB,iBAAiB,aAAa,SAAU,QAAO;AAChF,cAAI,iBAAiB,OAAM;AAC3B,cAAI,SAAS,OAAM,KAAK,OAAM;AAC9B,cAAI,SAAS,OAAM,KAAK,OAAM;AAC9B,cAAI,QAAO,OAAM;AAEjB,cAAI,KAAK,aAAa,CAAC,eAAe,CAAC,MAAM,SAAS,MAAM;AAC1D;AAAA;AAIF,cAAI,UAAS,MAAM,SAAS,KAAK,GAAG,QAAQ;AAE5C,cAAI,UAAS,SAAQ;AACnB,gBAAI,iBAAiB,kBAAkB;AAEvC,gBAAI,aAAa,iBAAiB,SAAS,gBAAgB,YAAY,WAAU,aAAa,iBAAiB,QAAQ,SAAS,oBAAoB,SAAQ;AAC1J;AAAA;AAAA,iBAEG;AACL,mBAAO,UAAS,iBAAiB;AAC/B,kBAAI,UAAS,MAAM;AACjB,oBAAI,OAAM,sBAAsB;AAC9B;AAAA;AAIF;AAAA;AAGF,kBAAI,UAAS,aAAa;AAExB;AAAA;AAGF,sBAAO,MAAK;AAAA;AAAA;AAKhB,cAAI,wBAAwB,OAAO,MAAM,SAAS,0BAA0B,aAAa,MAAM,SAAS,sBAAsB,kBAAkB,MAAM,SAAS;AAE/J,cAAI,uBAAuB;AACzB,kBAAM,SAAS;AAAA,iBACV;AACL,kBAAM,SAAS,cAAc,OAAO;AAAA;AAAA;AAGxC,aAAK,aAAa,iBAAiB,KAAK,OAAO,eAAe,SAAU,QAAO;AAC7E,cAAI,MAAM,SAAS,qBAAqB,QAAQ,OAAM,SAAS;AAC7D;AAAA;AAKF,iBAAM;AAAA;AAAA;AAAA,OAUT;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+CAA+C,MAAM;AAC1D,YAAI,MAAM,KAAK,KACX,MAAM,KAAK;AAEf,eAAO,YAAW,gBAAY,qBAAmB,KAAK,qCAAqC,KAAK;AAAA;AAAA,OAUjG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8CAA8C,eAAe,kBAAkB;AAGpF,YAAI,YAAY,iBAAiB,IAAI,KAAK,SAAS,eAAe,6BAA6B,iBAAiB;AAChH,YAAI,eAAe,oBAAoB,IAAI,KAAK,SAAS,kBAAkB,6BAA6B,oBAAoB;AAE5H,YAAI,cAAc,MAAM;AACtB,sBAAY;AAAA;AAGd,YAAI,iBAAiB,MAAM;AACzB,yBAAe;AAAA;AAGjB,eAAO,CAAC,WAAW;AAAA;AAAA,OAYpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,aAAa,aAAa;AAC/D,YAAI,qBAAqB,KAAK,IAAI,YAAY,8BAA8B;AAE5E,YAAI,sBAAsB,YAAY,uBAAuB,qBAAqB,GAAG;AAErF,YAAI,wBAAwB,MAAM;AAChC,iBAAO;AAAA;AAGT,eAAO,YAAY,6BAA6B,uBAAuB;AAAA;AAAA,OAQxE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,eAAO,KAAK,uBAAuB,KAAK,SAAS,mBAAmB,KAAK,SAAS;AAAA;AAAA,OAQnF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,eAAO,KAAK,uBAAuB,KAAK,SAAS,gBAAgB,KAAK,SAAS;AAAA;AAAA,OAWhF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,aAAa,aAAa;AACjE,eAAO,KAAK,sBAAsB,aAAa,aAAa,KAAK,SAAS,gBAAgB,KAAK;AAAA;AAAA,OAWhG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,aAAa,aAAa;AACpE,eAAO,KAAK,sBAAsB,aAAa,aAAa,KAAK,SAAS,mBAAmB,KAAK;AAAA;AAAA,OAanG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,aAAa,aAAa,aAAa,wBAAwB;AACnG,YAAI,MAAM,gBAAgB,cAAc,GAAG;AACzC,iBAAO;AAAA;AAGT,YAAI,oBAAoB,YAAY,uBAAuB,aAAa;AACxE,YAAI,kBAAkB,YAAY,6BAA6B;AAE/D,YAAI,CAAC,OAAO,UAAU,kBAAkB;AACtC,iBAAO;AAAA;AAGT,YAAI,mBAAmB;AAEvB,YAAI,cAAc,GAAG;AAEnB,6BAAmB,kBAAkB;AAAA,mBAC5B,cAAc,GAAG;AAC1B,6BAAmB,yBAAyB;AAAA;AAG9C,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,SAAS;AAEb,YAAI,OAAO,aAAY,IAAI;AAC3B,YAAI,oBAAoB;AAAA,UACtB,uBAAuB,KAAK,SAAS,UAAU,kBAAkB,KAAK,SAAS,UAAU,eAAe;AAAA,UACxG,OAAO,KAAK;AAAA,UACZ,oBAAoB,8BAA8B;AAChD,mBAAO,eAAe,OAAO;AAAA;AAAA,UAE/B,iBAAiB,4BAA2B;AAC1C,mBAAO,OAAO,SAAS;AAAA;AAAA,UAEzB,cAAc,wBAAwB;AACpC,mBAAO,OAAO,SAAS;AAAA;AAAA,UAEzB,UAAU,oBAAoB;AAC5B,mBAAO,OAAO,SAAS;AAAA;AAAA,UAEzB,MAAM,cAAc,eAAe,kBAAkB;AACnD,gBAAI;AAEJ,mBAAQ,mBAAkB,OAAO,UAAU,cAAc,MAAM,iBAAiB,qBAAmB,OAAO,qCAAqC,eAAe;AAAA;AAAA,UAEhK,WAAW,qBAAqB;AAC9B,mBAAO,OAAO;AAAA;AAAA,UAEhB,cAAc,wBAAwB;AACpC,mBAAO,OAAO;AAAA;AAAA,UAGhB,kBAAkB,4BAA4B;AAC5C,gBAAI,YAAY,OAAO,SAAS;AAEhC,gBAAI,yBAAyB,KAAK,IAAI,SAAS,OAAO,SAAS,kBAAkB,KAAK,aAAa;AACnG,mBAAO,OAAO,4BAA4B,wBAAwB;AAAA;AAAA,UAGpE,cAAc,wBAAwB;AACpC,gBAAI,YAAY,OAAO,SAAS;AAEhC,gBAAI,qBAAqB,KAAK,IAAI,SAAS,OAAO,SAAS,cAAc,KAAK,aAAa;AAC3F,mBAAO,OAAO,yBAAyB,oBAAoB;AAAA;AAAA,UAG7D,iBAAiB,2BAA2B;AAC1C,gBAAI,YAAY,OAAO,SAAS;AAEhC,gBAAI,wBAAwB,KAAK,IAAI,YAAY,SAAS,OAAO,SAAS,iBAAiB,KAAK;AAChG,mBAAO,OAAO,yBAAyB,uBAAuB;AAAA;AAAA,UAGhE,yBAAyB,mCAAmC;AAC1D,mBAAO,OAAO,SAAS,mBAAmB,KAAK,kBAAkB,aAAa,SAAS;AAAA;AAAA,UAGzF,wBAAwB,kCAAkC;AACxD,mBAAO,OAAO,SAAS,eAAe,KAAK,kBAAkB,gBAAgB,SAAS;AAAA;AAAA,UAGxF,2BAA2B,qCAAqC;AAC9D,mBAAO,OAAO,SAAS,kBAAkB;AAAA;AAAA,UAE3C,cAAc,wBAAwB;AACpC,mBAAO,OAAO,SAAS;AAAA;AAAA,UAEzB,eAAe,KAAK,SAAS;AAAA,UAC7B,YAAY,sBAAsB;AAChC,gBAAI,kBAAkB;AAEtB,gBAAI,OAAO,SAAS,iBAAiB;AACnC,8BAAgB,KAAK,SAAU,oBAAoB,IAAI;AAGrD,oBAAI,iBAAiB,sBAAsB,IAAI,OAAO,SAAS,eAAe,6BAA6B,sBAAsB;AAEjI,uBAAO,gBAAgB,gBAAgB;AAAA;AAAA;AAI3C,mBAAO,SAAS,SAAS,8BAA8B;AAEvD,mBAAO;AAAA;AAAA,UAET,eAAe,yBAAyB;AACtC,gBAAI,kBAAkB;AAEtB,gBAAI,OAAO,SAAS,iBAAiB;AACnC,8BAAgB,KAAK,SAAU,qBAAqB,IAAI;AAGtD,oBAAI,qBAAqB,uBAAuB,IAAI,OAAO,SAAS,kBAAkB,6BAA6B,uBAAuB;AAE1I,uBAAO,gBAAgB,oBAAoB;AAAA;AAAA;AAI/C,mBAAO,SAAS,SAAS,iCAAiC;AAE1D,mBAAO;AAAA;AAAA,UAET,aAAa,qBAAqB,qBAAqB;AACrD,gBAAI,cAAc,OAAO,SAAS,kBAAkB,6BAA6B;AAKjF,mBAAO,OAAO,SAAS,YAAY,gBAAgB,OAAO,sBAAsB;AAAA;AAAA,UAElF,WAAW,mBAAmB,kBAAkB;AAC9C,gBAAI,cAAc,OAAO,SAAS,eAAe,6BAA6B;AAE9E,mBAAO,OAAO,SAAS,aAAa,gBAAgB,OAAO,mBAAmB;AAAA;AAAA,UAEhF,cAAc,sBAAsB,kBAAkB,qBAAqB,IAAI;AAC7E,gBAAI,wBAAwB,OAAO,qCAAqC,kBAAkB,sBACtF,yBAAyB,gBAAe,uBAAuB,IAC/D,iBAAiB,uBAAuB,IACxC,oBAAoB,uBAAuB;AAG/C,gBAAI,qBAAqB,OAAO,SAAS,SAAS,uBAAuB,gBAAgB;AAEzF,gBAAI,mBAAmB;AACvB,gBAAI,sBAAsB;AAE1B,gBAAI,MAAM,QAAQ,qBAAqB;AACrC,kBAAI,sBAAsB,gBAAe,oBAAoB;AAE7D,iCAAmB,oBAAoB;AACvC,oCAAsB,oBAAoB;AAAA;AAG5C,gBAAI,iBAAiB,OAAO,SAAS,YAAY,kBAAkB;AAEnE,gBAAI,OAAO,OAAO,SAAS,UAAU;AAErC,gBAAI,QAAQ,OAAO,SAAS,iBAAiB,kBAAkB;AAE/D,gBAAI,OAAO,SAAS,QAAQ,sBAAsB;AAChD,sBAAQ,OAAO,SAAS,SAAS,qBAAqB,OAAO;AAAA;AAG/D,mBAAO,SAAS,SAAS,kBAAkB,IAAI,gBAAgB,mBAAmB,MAAM,OAAO;AAE/F,mBAAO,SAAS,gBAAgB,gBAAgB,OAAO,UAAU,IAAI,gBAAgB,mBAAmB,MAAM,OAAO;AAErH,mBAAO,SAAS,SAAS,iBAAiB,IAAI,gBAAgB,mBAAmB,MAAM,OAAO;AAAA;AAAA,UAEhG,YAAY,KAAK,SAAS,UAAU;AAAA,UACpC,2BAA2B,qCAAqC;AAC9D,mBAAO,OAAO,SAAS;AAAA;AAAA,UAEzB,gBAAgB,0BAA0B;AACxC,gBAAI,CAAC,OAAO,YAAY,OAAO,SAAS,aAAa;AACnD;AAAA;AAGF,mBAAO,SAAS;AAAA;AAAA,UAElB,iBAAiB,yBAAyB,QAAO,QAAQ,IAAI,IAAI;AAC/D,gBAAI,eAAe,OAAO,sCAAsC;AAEhE,gBAAI,aAAa;AAAA,cACf,KAAK;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA;AAGR,mBAAO,SAAS;AAEhB,mBAAO,WAAW;AAClB,iBAAK,YAAY;AAEjB,mBAAO,SAAS,SAAS,yBAAyB,QAAO,cAAc,IAAI;AAE3E,gBAAI,8BAA8B,SAAQ;AACxC;AAAA;AAGF,6BAAiB,QAAO;AAAA,cACtB,QAAQ;AAAA,cACR,WAAW,OAAO,SAAS;AAAA,cAC3B;AAAA;AAGF,mBAAO,SAAS,SAAS,wBAAwB,QAAO,cAAc;AAEtE,mBAAO,WAAW,OAAO;AAAA;AAAA,UAE3B,mBAAmB,2BAA2B,QAAO,QAAQ,IAAI,IAAI;AACnE,gBAAI,eAAe,OAAO,sCAAsC;AAEhE,mBAAO,WAAW;AAClB,iBAAK,YAAY;AAEjB,gBAAI,OAAO,SAAS,UAAU,gBAAgB;AAC5C,qBAAO,SAAS,UAAU;AAAA;AAG5B,mBAAO,SAAS,SAAS,2BAA2B,QAAO,cAAc;AAEzE,gBAAI,8BAA8B,SAAQ;AACxC;AAAA;AAGF,mBAAO,SAAS,SAAS,0BAA0B,QAAO,cAAc;AAExE,mBAAO,WAAW,OAAO;AAAA;AAAA,UAE3B,gBAAgB,wBAAwB,QAAO,QAAQ,IAAI,IAAI;AAC7D,gBAAI,eAAe,OAAO,sCAAsC;AAEhE,mBAAO,WAAW;AAElB,mBAAO,SAAS,SAAS,wBAAwB,QAAO,cAAc;AAEtE,gBAAI,8BAA8B,SAAQ;AACxC;AAAA;AAGF,mBAAO,SAAS,SAAS,uBAAuB,QAAO,cAAc;AAErE,mBAAO,WAAW,OAAO;AAAA;AAAA,UAE3B,iBAAiB,yBAAyB,QAAO,QAAQ,IAAI,IAAI;AAC/D,gBAAI,eAAe,OAAO,sCAAsC;AAEhE,gBAAI,aAAa;AAAA,cACf,KAAK;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA;AAER,mBAAO,WAAW;AAElB,mBAAO,SAAS,SAAS,yBAAyB,QAAO,cAAc,IAAI;AAE3E,gBAAI,8BAA8B,SAAQ;AACxC;AAAA;AAGF,gBAAI,KAAK,WAAW;AAClB,+BAAiB,QAAO;AAAA,gBACtB,QAAQ;AAAA,gBACR,WAAW,OAAO,SAAS;AAAA,gBAC3B;AAAA;AAAA;AAIJ,mBAAO,SAAS,SAAS,wBAAwB,QAAO,cAAc;AAEtE,mBAAO,WAAW,OAAO;AAAA;AAAA,UAE3B,eAAe,uBAAuB,QAAO,QAAQ,IAAI,IAAI;AAC3D,gBAAI,eAAe,OAAO,sCAAsC;AAEhE,mBAAO,WAAW;AAElB,mBAAO,SAAS,SAAS,uBAAuB,QAAO,cAAc;AAMrE,gBAAI,8BAA8B,WAAU,OAAO,SAAS,aAAa;AACvE;AAAA;AAGF,mBAAO,SAAS,SAAS,sBAAsB,QAAO,cAAc;AAEpE,mBAAO,WAAW,OAAO;AAAA;AAAA,UAE3B,uBAAuB,+BAA+B,QAAO;AAC3D,mBAAM;AAEN,mBAAO,SAAS,SAAS,8BAA8B;AAAA;AAAA,UAEzD,sBAAsB,8BAA8B,QAAO;AACzD,mBAAM;AAEN,mBAAO,SAAS,SAAS,6BAA6B;AAAA;AAAA,UAExD,YAAY,oBAAoB,OAAO,YAAY;AACjD,mBAAO,OAAO,aAAa,OAAO;AAAA;AAAA,UAEpC,QAAQ,gBAAgB,OAAO;AAC7B,mBAAO,OAAO,YAAY;AAAA;AAAA,UAE5B,oBAAoB,8BAA8B;AAChD,mBAAO,OAAO,SAAS,SAAS;AAAA;AAAA,UAElC,sBAAsB,gCAAgC;AACpD,mBAAO,OAAO,SAAS,SAAS;AAAA;AAAA,UAElC,8BAA8B,wCAAwC;AACpE,mBAAO,OAAO,SAAS,SAAS;AAAA;AAAA,UAElC,+BAA+B,uCAAuC,eAAe,aAAa,eAAe;AAC/G,gBAAI,YAAY,OAAO,SAAS;AAChC,gBAAI,YAAY,UAAU,6BAA6B;AAEvD,gBAAI,eAAe,OAAO,SAAS,SAAS,+BAA+B,WAAW,aAAa;AAEnG,mBAAO,UAAU,6BAA6B,UAAU,uBAAuB,cAAc;AAAA;AAAA,UAE/F,kCAAkC,0CAA0C,kBAAkB,aAAa,eAAe;AACxH,gBAAI,eAAe,OAAO,SAAS;AACnC,gBAAI,eAAe,aAAa,6BAA6B;AAE7D,gBAAI,kBAAkB,OAAO,SAAS,SAAS,kCAAkC,cAAc,aAAa;AAE5G,mBAAO,aAAa,6BAA6B,aAAa,uBAAuB,iBAAiB;AAAA;AAAA,UAExG,sBAAsB,8BAA8B,YAAY,eAAe,YAAY;AACzF,gBAAI;AAEJ,gBAAI,yBAAyB,OAAO,qCAAqC,YAAY,gBACjF,yBAAyB,gBAAe,wBAAwB,IAChE,iBAAiB,uBAAuB,IACxC,oBAAoB,uBAAuB;AAE/C,gBAAI,gBAAgB,OAAO,SAAS,UAAU;AAE9C,gBAAI,qBAAqB,cAAc;AAEvC,gBAAI,qBAAqB,GAAG;AAG1B,kBAAI,kBAAmB,gBAAe,QAAQ,eAAe,SAAS,aAAa,KAAK,IAAI;AAC5F,kBAAI,oBAAoB,cAAc,YAAY;AAClD,mCAAqB,CAAC,kBAAkB,KAAK,KAAK,kBAAkB,KAAK,KAAK,kBAAkB,GAAG,KAAK,kBAAkB,GAAG;AAAA;AAG/H,mBAAO,OAAO,SAAS,SAAS,sBAAsB,gBAAgB,mBAAmB,oBAAoB;AAAA;AAAA,UAE/G,qBAAqB,6BAA6B,SAAS,iBAAiB;AAC1E,gBAAI,WAAW,gBAAe,SAAS,IACnC,qBAAqB,SAAS,IAC9B,wBAAwB,SAAS,IACjC,mBAAmB,SAAS,IAC5B,sBAAsB,SAAS;AAEnC,gBAAI,gBAAgB,CAAC,OAAO,SAAS,eAAe,6BAA6B,qBAAqB,OAAO,SAAS,kBAAkB,6BAA6B,wBAAwB,OAAO,SAAS,eAAe,6BAA6B,mBAAmB,OAAO,SAAS,kBAAkB,6BAA6B;AAC3U,mBAAO,OAAO,SAAS,SAAS,qBAAqB,eAAe;AAAA;AAAA,UAEtE,qBAAqB,+BAA+B;AAClD,mBAAO,OAAO,SAAS,SAAS;AAAA;AAAA,UAElC,uBAAuB,iCAAiC;AACtD,mBAAO,OAAO,SAAS,SAAS;AAAA;AAAA,UAElC,+BAA+B,uCAAuC,gBAAgB,qBAAqB;AACzG,gBAAI,oBAAoB,OAAO,SAAS,kBAAkB,6BAA6B;AAEvF,mBAAO,OAAO,SAAS,SAAS,+BAA+B,gBAAgB;AAAA;AAAA,UAEjF,wBAAwB,gCAAgC,gBAAgB;AACtE,mBAAO,OAAO,SAAS,SAAS,wBAAwB;AAAA;AAAA,UAE1D,uBAAuB,+BAA+B,oBAAoB,uBAAuB,SAAS;AACxG,gBAAI,YAAY,OAAO,SAAS;AAChC,gBAAI,eAAe,OAAO,SAAS;AAEnC,gBAAI,oBAAoB,yBAAyB,IAAI,aAAa,6BAA6B,yBAAyB;AACxH,gBAAI,iBAAiB,sBAAsB,IAAI,UAAU,6BAA6B,sBAAsB;AAE5G,gBAAI,gBAAgB,OAAO,SAAS,SAAS,uBAAuB,gBAAgB,mBAAmB;AAEvG,gBAAI,MAAM,QAAQ,gBAAgB;AAChC,kBAAI,iBAAiB,gBAAe,eAAe,IAC/C,gBAAgB,eAAe,IAC/B,mBAAmB,eAAe,IAClC,cAAc,eAAe,IAC7B,iBAAiB,eAAe;AAGpC,qBAAO,CAAC,iBAAiB,IAAI,UAAU,6BAA6B,UAAU,uBAAuB,eAAe,MAAM,eAAe,oBAAoB,IAAI,aAAa,6BAA6B,aAAa,uBAAuB,kBAAkB,MAAM,kBAAkB,eAAe,IAAI,UAAU,6BAA6B,UAAU,uBAAuB,aAAa,OAAO,aAAa,kBAAkB,IAAI,aAAa,6BAA6B,aAAa,uBAAuB,gBAAgB,OAAO;AAAA;AAAA;AAAA,UAGphB,+BAA+B,uCAAuC,MAAM;AAC1E,gBAAI,iBAAiB,OAAO,SAAS;AAErC,gBAAI,mBAAmB,UAAU,OAAO,SAAS,cAAc;AAC7D,+BAAiB;AAAA;AAGnB,gBAAI,iBAAiB,KAAK,mBAAmB,QAAQ;AACnD,kBAAI,iBAAiB,OAAO;AAE5B,kBAAI,mBAAmB,KAAK;AAC5B,kBAAI,kBAAkB,KAAK;AAE3B,kBAAI,OAAO,mBAAmB,UAAU;AACtC,qBAAK,WAAW,KAAK,IAAI,mBAAmB,gBAAgB;AAC5D,qBAAK,SAAS,KAAK,IAAI,kBAAkB,gBAAgB,iBAAiB;AAAA,yBACjE,mBAAmB,QAAQ;AACpC,oBAAI,UAAS,KAAK,KAAK,kBAAkB,iBAAiB;AAC1D,qBAAK,WAAW,KAAK,IAAI,mBAAmB,SAAQ;AACpD,qBAAK,SAAS,KAAK,IAAI,kBAAkB,SAAQ,iBAAiB;AAAA;AAAA;AAItE,mBAAO,SAAS,SAAS,sCAAsC;AAAA;AAAA,UAEjE,kCAAkC,0CAA0C,MAAM;AAChF,gBAAI,iBAAiB,OAAO,SAAS;AAErC,gBAAI,mBAAmB,UAAU,OAAO,SAAS,kBAAkB;AACjE,+BAAiB;AAAA;AAGnB,gBAAI,iBAAiB,KAAK,mBAAmB,QAAQ;AACnD,kBAAI,oBAAoB,OAAO;AAE/B,kBAAI,sBAAsB,KAAK;AAC/B,kBAAI,qBAAqB,KAAK;AAE9B,kBAAI,OAAO,mBAAmB,UAAU;AACtC,qBAAK,cAAc,KAAK,IAAI,sBAAsB,gBAAgB;AAClE,qBAAK,YAAY,KAAK,IAAI,qBAAqB,gBAAgB,oBAAoB;AAAA;AAGrF,kBAAI,mBAAmB,QAAQ;AAC7B,oBAAI,UAAS,KAAK,KAAK,qBAAqB,oBAAoB;AAChE,qBAAK,cAAc,KAAK,IAAI,sBAAsB,SAAQ;AAC1D,qBAAK,YAAY,KAAK,IAAI,qBAAqB,SAAQ,oBAAoB;AAAA;AAAA;AAI/E,mBAAO,SAAS,SAAS,yCAAyC;AAAA;AAAA,UAEpE,gBAAgB,0BAA0B;AACxC,mBAAO,OAAO,SAAS;AAAA;AAAA,UAEzB,oBAAoB,8BAA8B;AAChD,gBAAI,sBAAqB,OAAO,SAAS,SAAS;AAElD,mBAAO,OAAO,SAAS,sBAAsB;AAAA;AAAA;AAGjD,aAAK,SAAS,SAAS,yBAAyB;AAChD,aAAK,KAAK,IAAI,aAAY;AAC1B,aAAK,WAAW,KAAK;AACrB,YAAI,WAAW,KAAK,GAAG,QAAQ;AAE/B,YAAI,wBAAwB,KAAK,SAAS,YAAY,yBAClD,QAAQ,sBAAsB,OAC9B,SAAS,sBAAsB;AAEnC,aAAK,YAAY,OAAO;AACxB,aAAK,aAAa,iBAAiB,UAAU,aAAa,SAAU,QAAO;AAEzE,cAAI,OAAM,WAAW,YAAY,OAAM,UAAU,GAAG;AAClD,mBAAM;AAAA;AAAA;AAGV,aAAK,aAAa,iBAAiB,UAAU,eAAe,SAAU,QAAO;AAE3E,cAAI,OAAM,WAAW,YAAY,OAAM,UAAU,GAAG;AAClD,mBAAM;AAAA;AAAA;AAGV,aAAK,aAAa,iBAAiB,KAAK,SAAS,aAAa,iBAAiB,SAAS,WAAY;AAClG,cAAI,OAAO,SAAS,sBAAsB;AACxC,gBAAI,OAAO,GAAG,iBAAiB;AAC7B,qBAAO,SAAS,kBAAkB;AAElC,qBAAO;AAAA;AAAA;AAAA;AAAA;AAAA,OAad;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,IAAI;AACzC,YAAI,QAAQ,KAAK;AACf,iBAAO;AAAA;AAGT,YAAI,qBAAqB,UAAU,IAAI,KAAK,SAAS,KAAK,GAAG,QAAQ;AAErE,YAAI,KAAK,SAAS,sBAAsB,QAAQ,oBAAoB;AAClE,iBAAO;AAAA;AAGT,YAAI,KAAK,SAAS,sBAAsB,UAAU,KAAK,wBAAwB,oBAAoB;AACjG,iBAAO;AAAA;AAGT,YAAI,CAAC,KAAK,SAAS,qBAAqB,KAAK,kBAAkB,KAAK,sBAAsB;AACxF,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,eAAO,aAAY,IAAI,MAAM;AAAA;AAAA,OAS9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,uBAAuB;AAE3B,eAAQ,yBAAyB,0BAAyB,KAAK,SAAS,4BAA4B,QAAQ,2BAA2B,SAAS,SAAS,uBAAuB,gBAAgB,QAAQ,0BAA0B,SAAS,wBAAwB;AAAA;AAAA,OASpQ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,eAAe,KAAK,SAAS;AACjC,eAAO,gBAAgB,aAAa;AAAA;AAAA,OAYrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,OAAO,YAAY;AAC9C,YAAI,OAAO;AAET,eAAK,SAAS,SAAS,oBAAoB,KAAK,SAAS,iBAAiB;AAAA;AAAA;AAAA,OAW7E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,OAAO;AACjC,YAAI,OAAO;AAET,eAAK,SAAS,SAAS,mBAAmB,KAAK,SAAS;AAAA;AAAA;AAAA,OAW3D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,gBAAgB,IAAI;AAClD,YAAI,GAAG,YAAY;AACjB,cAAI,YAAY,GAAG;AAEnB,cAAI,CAAC,SAAS,WAAW,aAAa;AACpC,kBAAM;AACN,iBAAK,gBAAgB,gBAAgB;AACrC;AAAA;AAGF,eAAK,iBAAiB,UAAU,cAAc,eAAe,gBAAgB,KAAK,SAAS;AAAA,eACtF;AACL,cAAI,kBAAkB,KAAK,UACvB,eAAe,gBAAgB,cAC/B,eAAe,gBAAgB;AACnC,cAAI,MAAM,aAAa,cAAc;AACrC,cAAI,OAAO,aAAa,cAAc;AACtC,cAAI,YAAY;AAChB,eAAK,YAAY;AACjB,eAAK,iBAAiB,MAAM,gBAAgB;AAC5C,cAAI,YAAY;AAChB,aAAG,YAAY;AAAA;AAGjB,aAAK,SAAS,SAAS,qBAAqB,gBAAgB;AAAA;AAAA,OAU7D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,mBAAmB,IAAI;AACrD,YAAI,GAAG,YAAY;AACjB,cAAI,YAAY,GAAG;AAEnB,cAAI,SAAS,WAAW,aAAa;AACnC,iBAAK,iBAAiB,UAAU,cAAc,eAAe,mBAAmB,KAAK,SAAS;AAAA,iBACzF;AACL,kBAAM;AACN,iBAAK,gBAAgB,mBAAmB;AAAA;AAAA,eAErC;AACL,cAAI,eAAe,KAAK,SAAS;AACjC,cAAI,MAAM,aAAa,cAAc;AACrC,cAAI,OAAO,aAAa,cAAc;AACtC,cAAI,YAAY;AAChB,eAAK,YAAY;AACjB,eAAK,iBAAiB,MAAM,mBAAmB,KAAK,SAAS;AAC7D,cAAI,YAAY;AAChB,aAAG,YAAY;AAAA;AAGjB,aAAK,SAAS,SAAS,qBAAqB,mBAAmB;AAAA;AAAA,OAWhE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,SAAS,QAAO,SAAS;AACxD,YAAI,gBAAgB;AACpB,YAAI,gBAAgB,KAAK,GAAG,WAAW,iBAAiB,YAAY,KAAK;AAEzE,YAAI,QAAQ,YAAY;AACtB,cAAI,SAAS,SAAS,cAAc;AAClC,4BAAgB,cAAc,QAAQ,aAAa,iBAAiB;AAAA,qBAC3D,SAAS,SAAS,cAAc;AACzC,4BAAgB,cAAc,QAAQ,UAAU,iBAAiB;AAAA;AAAA;AAIrE,YAAI,gBAAgB,IAAI;AACtB,wBAAc,SAAS,QAAQ;AAAA,eAC1B;AAEL,wBAAc,SAAS,OAAO,aAAa;AAC3C,mBAAS,SAAS;AAAA;AAAA;AAAA,OAYrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC,YAAY;AACrD,YAAI,iBAAiB,KAAK,GAAG,WAAW;AACxC,YAAI,WAAW,iBAAiB;AAChC,eAAO,WAAW,IAAI,WAAW;AAAA;AAAA,OAWlC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,WAAW;AACrD,YAAI,kBAAkB,KAAK,GAAG,WAAW;AACzC,YAAI,YAAY,kBAAkB;AAClC,eAAO,YAAY,IAAI,YAAY;AAAA;AAAA,OASpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,OAAO,QAAQ;AACzC,YAAI,OAAO,aAAY,IAAI;AAC3B,YAAI,QAAQ,CAAC,OAAO;AACpB,aAAK,YAAY,MAAM;AACvB,aAAK,aAAa,MAAM;AAAA;AAAA,OAQzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,OAAO,aAAY,IAAI;AAC3B,eAAO;AAAA,UACL,OAAO,KAAK;AAAA,UACZ,QAAQ,KAAK;AAAA;AAAA;AAAA,OAUhB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,eAAO,KAAK,OAAO,KAAK;AAAA;AAAA,OAQzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,GAAG;AACR,aAAK,aAAa;AAAA;AAAA;AAItB,WAAO;AAAA;AAGT,MAAO,oBAAQ;;;AGh1Cf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,mCAAO;;;ACJP,MAAI,mBAAkB,eAAe;AAArC,MACI,YAAW,iBAAgB;AAD/B,MAEI,WAAU,iBAAgB;AAF9B,MAGI,WAAU,iBAAgB;AAH9B,MAII,YAAW,iBAAgB;AAJ/B,MAKI,aAAY,iBAAgB;AAShC,qBAAkB,MAAM;AACtB,QAAI,CAAC,SAAQ,OAAO;AAClB,YAAM,MAAM,2BAA4B,OAAO,MAAM;AAAA;AAGvD,WAAO,SAAQ;AAAA;AAUjB,sBAAmB,MAAM,MAAM;AAC7B,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO;AACP,aAAO,KAAK;AAAA;AAGd,QAAI,QAAQ,MACR,SAAS,MAAM,QACf,WAAW,MAAM,UACjB,YAAY,MAAM;AAEtB,QAAI,QAAQ;AACV,gBAAe,MAAM;AAAA;AAGvB,QAAI,UAAU;AACZ,iBAAiB,MAAM;AAAA;AAGzB,QAAI,WAAW;AACb,iBAAkB,MAAM;AAAA;AAG1B,cAAS,MAAM;AAAA;;;ADzDjB,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAczU,MAAI,oBAAoB;AACxB,MAAI,2BAA2B,kBAAkB;AAQ1C,kCAAgC,QAAO;AAC5C,QAAI,WAAW,SAAQ;AACvB,QAAI,cAAc;AAClB,QAAI;AAEJ,WAAO,WAAW,GAAG;AACnB,eAAU,YAAW,KAAK;AAC1B,oBAAc,OAAO,aAAa,KAAK,UAAU;AACjD,iBAAW,SAAU,YAAW,UAAU,0BAA0B;AAAA;AAGtE,WAAO;AAAA;AASF,kCAAgC,OAAO;AAC5C,QAAI,SAAS;AAEb,QAAI,OAAO;AACT,eAAS,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG,KAAK,GAAG;AACtE,kBAAU,KAAK,IAAI,0BAA0B,KAAM,mBAAkB,QAAQ,MAAM,MAAM;AAAA;AAAA;AAI7F,cAAU;AACV,WAAO;AAAA;AAUF,mCAAiC;AACtC,QAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/E,QAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAClF,QAAI,QAAQ;AACZ,QAAI;AACJ,QAAI;AAEJ,SAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACzB,UAAI,MAAM;AAEV,WAAK,IAAI,GAAG,IAAI,SAAS,KAAK;AAC5B,YAAI,KAAK,uBAAuB,KAAM,KAAI;AAAA;AAG5C,YAAM,KAAK;AAAA;AAGb,WAAO;AAAA;AAUF,yCAAuC;AAC5C,QAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/E,QAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACnF,QAAI,QAAQ;AACZ,QAAI;AACJ,QAAI;AAEJ,SAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACzB,UAAI,MAAM;AAEV,WAAK,IAAI,GAAG,IAAI,UAAU,KAAK;AAC7B,YAAI,OAAO,OAAO,MAAM,uBAAuB,KAAM,KAAI;AAAA;AAG3D,YAAM,KAAK;AAAA;AAGb,WAAO;AAAA;AAUF,sCAAoC,MAAM,SAAS;AACxD,QAAI,OAAO;AACX,QAAI;AAEJ,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,YAAM;AAEN,eAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,YAAI,KAAK;AAAA;AAGX,WAAK,KAAK;AAAA;AAGZ,WAAO;AAAA;AAoBF,mCAAiC,YAAY,gBAAgB;AAClE,QAAI,qBAAqB,OAAO,mBAAmB,cAAc,OAAO;AACxE,WAAO,0BAA0B,KAAK,KAAK;AACzC,aAAO,iCAAiC,YAAY;AAClD,YAAI,CAAC,YAAY;AACf;AAAA;AAGF,YAAI,eAAe,YAAY,eAAe,WAAW,gBAAgB,QAAQ;AAE/E,iBAAO,WAAW;AAAA,mBACT,eAAe,YAAY,WAAW,WAAW,MAAM;AAEhE,cAAI,OAAO,WAAW,SAAS,UAAU;AACvC,kBAAM,IAAI,MAAM;AAAA;AAGlB,cAAI,OAAO,UAAY,WAAW;AAElC,cAAI,eAAe,MAAM,aAAa;AACpC,mBAAO,KAAK;AAAA,qBACH,oBAAoB;AAC7B;AAAA;AAAA;AAIJ,eAAO,wBAAwB,OAAO,eAAe;AAAA,QACrD,OAAO,QAAQ,WAAW,KAAK,YAAY,KAAK,OAAO;AAAA;AAAA;AAYtD,iCAA+B,SAAS;AAC7C,QAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,QAAI,WAAW;AACf,QAAI,eAAe;AAEnB,QAAI,CAAC,MAAM,QAAQ,YAAY,CAAC,MAAM,QAAQ,QAAQ,KAAK;AACzD,iBAAW,CAAC;AAAA;AAGd,aAAS,QAAQ,SAAU,KAAK,UAAU;AACxC,UAAI,MAAM,QAAQ,MAAM;AACtB,YAAI,QAAQ,SAAU,OAAO,QAAQ;AACnC,uBAAa,KAAK,CAAC,WAAW,WAAW,QAAQ;AAAA;AAAA,aAE9C;AACL,eAAO,KAAK,KAAK,QAAQ,SAAU,UAAU;AAC3C,uBAAa,KAAK,CAAC,WAAW,WAAW,UAAU,IAAI;AAAA;AAAA;AAAA;AAI7D,WAAO;AAAA;AAUF,6BAA2B,MAAM;AACtC,QAAI,SAAS;AAEb,QAAI,MAAM,QAAQ,OAAO;AACvB,UAAI,KAAK,MAAM,MAAM,QAAQ,KAAK,KAAK;AACrC,iBAAS,KAAK,GAAG;AAAA,iBACR,KAAK,MAAM,UAAS,KAAK,KAAK;AACvC,iBAAS,eAAe,KAAK;AAAA;AAAA;AAIjC,WAAO;AAAA;AASF,2BAAyB,MAAM;AACpC,WAAO,CAAC,CAAE,OAAM,QAAQ,SAAS,KAAK,UAAU,KAAK,MAAM,SAAU,IAAI;AACvE,aAAO,MAAM,QAAQ;AAAA;AAAA;AAUlB,4BAA0B,MAAM;AACrC,WAAO,CAAC,CAAE,OAAM,QAAQ,SAAS,KAAK,UAAU,KAAK,MAAM,SAAU,IAAI;AACvE,aAAO,UAAQ,QAAQ,YAAY,CAAC,MAAM,QAAQ,OAAO,OAAO;AAAA;AAAA;;;AEzPpE,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAY/Q,MAAI,aAA0B,2BAAY;AACxC,yBAAoB,aAAa;AAC/B,UAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAErF,wBAAgB,MAAM;AAOtB,WAAK,MAAM;AAOX,WAAK,OAAO;AAQZ,WAAK,WAAW;AAEhB,WAAK,YAAY,WAAY;AAAA;AAE7B,WAAK,YAAY,WAAY;AAAA;AAAA;AAW/B,mBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,uBAAuB,UAAU;AACtC,YAAI;AAEJ,YAAI,KAAK,IAAI,QAAQ,kBAAkB;AACrC,2BAAgB,KAAK,IAAI,SAAS,iBAAiB;AAAA;AAGrD,eAAO,mBAAkB,UAAU,CAAC,OAAO,UAAU,kBAAiB,iBAAgB,KAAK,KAAK;AAAA;AAAA,OAUjG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,WAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAElF,YAAI,CAAC,KAAK,QAAQ,KAAK,KAAK,WAAW,GAAG;AACxC,iBAAO,KAAK;AAAA;AAGd,eAAO,KAAK,WAAW,MAAM,MAAM;AAAA;AAAA,OAQpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,MAAM;AAC5B,aAAK,OAAO;AAAA;AAAA,OASb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAQ;AAClC,YAAI,QAAQ;AAEZ,YAAI,SAAS;AACb,kBAAU,KAAK,MAAM,SAAU,KAAK,UAAU;AAC5C,cAAI,QAAQ,MAAM,UAAU,UAAU;AAEtC,iBAAO,KAAK;AAAA;AAEd,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,KAAK,aAAa,WAAW;AACpD,YAAI,SAAS;AAEb,YAAI,WAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAClF,YAAI,cAAc,gBAAgB,UAAU,cAAc;AAC1D,YAAI,UAAU;AACd,YAAI,aAAa;AACjB,kBAAU,KAAK,cAAc;AAE7B,YAAI,MAAM,QAAQ,UAAU;AAC1B,uBAAa;AAEb,cAAI,aAAa;AACf,oBAAQ,QAAQ,SAAU,MAAM,QAAQ;AACtC,yBAAW,UAAU,OAAO,kBAAkB,KAAK,QAAQ;AAAA;AAAA,iBAExD;AAEL,sBAAU,aAAa,WAAW,SAAU,QAAQ;AAClD,yBAAW,SAAS,eAAe,OAAO,kBAAkB,KAAK,QAAQ;AAAA;AAAA;AAAA,mBAGpE,UAAS,YAAY,WAAW,UAAU;AACnD,cAAI,UAAS;AACX,yBAAa;AAAA,iBACR;AACL,yBAAa;AAAA;AAGf,cAAI,CAAC,eAAe,UAAS;AAC3B,gBAAI,aAAa;AACjB,gBAAI,WAAW,KAAK,sBAAsB;AAC1C,sBAAU,YAAY,UAAU,SAAU,QAAQ;AAChD,kBAAI,OAAO,OAAO,UAAU;AAE5B,kBAAI,UAAW,gBAAe,eAAe,UAAW,cAAa,aAAa,CAAC,OAAO,UAAU,OAAO;AACzG,oBAAI,YAAY,OAAO,kBAAkB,KAAK,MAAM;AAEpD,oBAAI,UAAS;AACX,6BAAW,KAAK;AAAA,uBACX;AACL,8BAAY,YAAY,MAAM;AAAA;AAAA;AAAA;AAAA,iBAI/B;AACL,uBAAW,SAAS,SAAU,OAAO,MAAM;AACzC,0BAAY,YAAY,MAAM,OAAO,kBAAkB,KAAK,MAAM;AAAA;AAAA;AAAA;AAKxE,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,KAAK,QAAQ,OAAO;AAC5C,YAAI,OAAO,KAAK,eAAe,UAAU,KAAK,qBAAqB;AAEjE;AAAA;AAGF,YAAI,KAAK,IAAI,QAAQ,qBAAqB;AACxC,cAAI,cAAc,yBAAyB;AAC3C,eAAK,IAAI,SAAS,oBAAoB,KAAK,KAAK,UAAU,SAAS,aAAa;AAEhF,cAAI,YAAY,aAAa;AAC3B,oBAAQ,YAAY;AAAA;AAAA;AAIxB,YAAI,CAAC,OAAO,UAAU,SAAS;AAE7B,sBAAY,KAAK,KAAK,MAAM,QAAQ;AAAA,eAC/B;AACL,eAAK,KAAK,KAAK,UAAU;AAAA;AAAA;AAAA,OAa5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,KAAK,QAAQ,SAAS;AACtD,YAAI,SAAS;AAEb,YAAI,SAAS;AACX,cAAI,OAAO,WAAW,UAAU;AAC9B,qBAAS,YAAY,SAAS;AAAA,qBACrB,OAAO,WAAW,YAAY;AACvC,qBAAS,OAAO;AAAA,iBACX;AACL,qBAAS,QAAQ;AAAA;AAAA;AAIrB,YAAI,KAAK,IAAI,QAAQ,qBAAqB;AACxC,cAAI,cAAc,yBAAyB;AAC3C,eAAK,IAAI,SAAS,oBAAoB,KAAK,KAAK,UAAU,SAAS,aAAa;AAEhF,cAAI,YAAY,aAAa;AAC3B,qBAAS,YAAY;AAAA;AAAA;AAIzB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,KAAK,QAAQ;AACrC,YAAI,UAAU,KAAK,cAAc;AACjC,eAAO,KAAK,kBAAkB,KAAK,KAAK,UAAU,SAAS;AAAA;AAAA,OAY5D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,SAAS;AAEb,YAAI,SAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,YAAI,OAAM,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC9E,YAAI,WAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAClF,YAAI,cAAc;AAClB,YAAI,WAAW;AACf,YAAI,WAAW;AACf,YAAI,SAAS;AACb,YAAI,SAAS;AAEb,YAAI,WAAU,QAAQ,SAAQ,MAAM;AAClC,wBAAc;AACd,qBAAW;AACX,mBAAS,KAAK,cAAc;AAAA,eACvB;AACL,qBAAW,KAAK,IAAI,OAAM,KAAK,KAAI;AACnC,qBAAW,KAAK,IAAI,OAAM,KAAK,KAAI;AACnC,mBAAS,KAAK,IAAI,OAAM,KAAK,KAAI;AACjC,mBAAS,KAAK,IAAI,OAAM,KAAK,KAAI;AAAA;AAGnC,YAAI,SAAS;AACb,kBAAU,UAAU,QAAQ,SAAU,YAAY;AAChD,iBAAO,KAAK,cAAc,OAAO,SAAS,YAAY,QAAQ,QAAQ,YAAW,OAAO,SAAS,YAAY,UAAU,QAAQ;AAAA;AAEjI,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,KAAK,IAAI,QAAQ,uBAAuB;AAC1C,cAAI,uBAAuB,KAAK,IAAI,SAAS;AAE7C,cAAI,OAAO,UAAU,uBAAuB;AAC1C,mBAAO;AAAA;AAAA;AAIX,eAAO,KAAK,KAAK;AAAA;AAAA,OAQlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA6B;AAClC,eAAO,kBAAmB,KAAK;AAAA;AAAA,OAMhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,OAAO;AACZ,aAAK,MAAM;AAAA;AAAA;AAIf,WAAO;AAAA;AAGT,MAAO,qBAAQ;;;ACzVf,mCAAO;AAgBP,gCAAO;;;AC7BP,mCAAO;;;ACSP,mCAAO;;;ACTP,MAAI,MAAI;AACR,MAAI,QAAO;AACX,MAAI,YAAW;AACf,MAAI,YAAW;AACf,MAAI,mBAAmB;AACvB,MAAI,kCAAiC;AACrC,MAAI,kBAAiB;AAIrB,eAAa,QAAQ,aAA8B;AACjD,QAAI,WAAW,UAAU,SAAS,IAAI,SAAS,UAAU;AACzD,QAAI,YAAY;AAChB,QAAI,UAAS,YAAY;AAAU,aAAO,OAAO;AACjD,iBAAa,gCAA+B,EAAE,QAAQ;AACtD,QAAI;AAAY,aAAO,iBAAiB,cACpC,WAAW,QACX,WAAW,QAAQ,SAAY,SAAY,MAAK,WAAW,KAAK;AACpE,QAAI,UAAS,YAAY,gBAAe;AAAU,aAAO,IAAI,WAAW,aAAa;AAAA;AAGvF,MAAE,EAAE,QAAQ,WAAW,MAAM,QAAQ;AAAA,IACnC;AAAA;;;ACtBF,MAAI,MAAI;AACR,MAAI,UAAQ;AACZ,MAAI,mBAAkB;AACtB,MAAI,kCAAiC,6CAA2D;AAChG,MAAI,eAAc;AAElB,MAAI,uBAAsB,QAAM,WAAY;AAAE,oCAA+B;AAAA;AAC7E,MAAI,UAAS,CAAC,gBAAe;AAI7B,MAAE,EAAE,QAAQ,UAAU,MAAM,MAAM,QAAQ,SAAQ,MAAM,CAAC,gBAAe;AAAA,IACtE,0BAA0B,mCAAkC,IAAI,KAAK;AACnE,aAAO,gCAA+B,iBAAgB,KAAK;AAAA;AAAA;;;ACF/D,mCAAO;;;ACTP,MAAI,cAAa;AAOjB,MAAI,aAAa;AAAA,IAIf,aAAa,uBAAO,OAAO;AAAA,IAS3B,cAAc,sBAAsB,KAAK,UAAU;AACjD,UAAI,CAAC,KAAK,YAAY,MAAM;AAC1B,aAAK,YAAY,OAAO;AAAA;AAG1B,WAAK,YAAY,KAAK,KAAK;AAE3B,aAAO;AAAA;AAAA,IAcT,eAAe,uBAAuB,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;AAC7E,UAAI,KAAK,YAAY,MAAM;AACzB,YAAI,SAAS,KAAK,YAAY,KAAK;AAInC,iBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,mBAAS,KAAK,YAAY,KAAK,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA,IAU7E,iBAAiB,2BAA2B;AAC1C,WAAK,cAAc;AACnB,aAAO;AAAA;AAAA;AAGX,eAAa,YAAY,cAAc,aAAY;AAAA,IACjD,UAAU;AAAA,IACV,YAAY;AAAA;AAEd,MAAO,qBAAQ;;;ACnEf,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAUxQ,MAAI,WAAwB,2BAAY;AAC7C,yBAAoB;AAClB,UAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAExF,wBAAgB,MAAM;AAQtB,WAAK,gBAAgB;AAQrB,WAAK,gBAAgB;AAAA;AASvB,mBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,sBAAqB;AAC1B,eAAO,KAAK;AAAA;AAAA,OASb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAO;AACrC,YAAI,UAAS,KAAK;AAElB,YAAI,SAAQ,QAAO,QAAQ;AACzB,iBAAO,QAAO;AAAA;AAAA;AAAA,OAWjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,SAAQ;AAChC,aAAK,gBAAgB,QAAO;AAC5B,aAAK,cAAc;AAAA;AAAA,OAepB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAO,OAAO;AAC5C,YAAI,SAAQ,KAAK,cAAc,QAAQ;AACrC,eAAK,cAAc,UAAS;AAC5B,eAAK,cAAc;AACnB,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK;AAAA;AAAA,OAQN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,YAAY;AAAA;AAAA,OAWzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,QAAQ;AAEZ,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK,cAAc;AACpG,aAAK,cAAc,SAAS;AAE5B,YAAI,WAAW,KAAK,gBAAgB;AAClC,oBAAU,SAAS,GAAG,SAAU,QAAO;AACrC,mBAAO,MAAM,cAAc,KAAK,MAAM,cAAc;AAAA;AAAA,eAEjD;AACL,oBAAU,SAAS,GAAG,WAAY;AAChC,mBAAO,MAAM,cAAc,KAAK,MAAM;AAAA;AAAA;AAI1C,aAAK,cAAc;AAAA;AAAA,OAUpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAc,QAAQ;AAC3B,aAAK,iBAAiB;AACtB,aAAK,cAAc;AACnB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,aAAK,cAAc;AAAA;AAAA,OAUpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,aAAK,cAAc;AAAA;AAAA,OAMpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK;AACL,aAAK,gBAAgB;AACrB,aAAK,gBAAgB;AAAA;AAAA;AAIzB,WAAO;AAAA;AAET,QAAM,UAAU;;;ACxMhB,mCAAO;AAKP,gCAAO;AAEP,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAezK,oCAAkC,eAAe,gBAAgB,iBAAiB,uBAAuB;AAC9G,QAAI,qBAAqB,gBAAgB,SAAS,gBAAgB,KAAK;AACvE,WAAO,GAAG,OAAO,qBAAmB,cAAc,MAAM,GAAG,sBAAsB,qBAAmB,gBAAgB,IAAI,SAAU,eAAe,eAAe;AAC9J,UAAI,WAAW,wBAAwB;AACrC,eAAO,sBAAsB,eAAe;AAAA;AAG9C,aAAO;AAAA,SACJ,qBAAmB,uBAAuB,SAAS,KAAK,cAAc,MAAM;AAAA;AAW5E,mCAAiC,eAAe,gBAAgB;AACrE,WAAO,YAAY,eAAe,SAAU,GAAG,QAAO;AACpD,aAAO,eAAe,SAAS,YAAW;AAAA;AAAA;;;AH9D9C,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,kBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,aAAO,QAAQ;AAAA,WAAY;AAAE,aAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,eAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,KAAK,MAAM,MAAM;AAAA;AAErZ,0BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAUjM,MAAI,0BAAuC,yBAAU,WAAW;AACrE,gBAAU,0BAAyB;AAEnC,QAAI,SAAS,eAAa;AAE1B,wCAAmC;AACjC,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,mBAAa,0BAAyB,CAAC;AAAA,MACrC,KAAK;AAAA,MACL,OAQA,gBAAgB,gBAAgB,iBAAiB;AAC/C,aAAK,gBAAgB,yBAAyB,KAAK,eAAe,gBAAgB,iBAAiB,KAAK;AAExG,aAAK,kBAAgB,yBAAwB,YAAY,UAAU,MAAM,KAAK,MAAM,gBAAgB;AAAA;AAAA,OASrG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,gBAAgB;AACrC,aAAK,gBAAgB,wBAAwB,KAAK,eAAe;AAEjE,aAAK,kBAAgB,yBAAwB,YAAY,UAAU,MAAM,KAAK,MAAM;AAAA;AAAA;AAIxF,WAAO;AAAA,IACP;;;AH1FF,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AASjM,MAAI,YAAyB,yBAAU,uBAAuB;AACnE,gBAAU,YAAW;AAErB,QAAI,SAAS,eAAa;AAE1B,0BAAqB;AACnB,UAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAExF,wBAAgB,MAAM;AAEtB,aAAO,OAAO,KAAK,MAAM;AAAA;AAW3B,mBAAa,YAAW,CAAC;AAAA,MACvB,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,eAAO,YAAY,KAAK,aAAa,SAAU,aAAa,UAAU,eAAe;AACnF,cAAI,UAAU;AACZ,wBAAY,KAAK;AAAA;AAGnB,iBAAO;AAAA,WACN;AAAA;AAAA;AAIP,WAAO;AAAA,IACP;;;AO3DF,mCAAO;AAkBP,gCAAO;;;AC1BP,mCAAO;AAKP,gCAAO;AAEP,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAazK,qCAAkC,eAAe,gBAAgB,iBAAiB;AACvF,WAAO,GAAG,OAAO,qBAAmB,cAAc,MAAM,GAAG,kBAAkB,qBAAmB,kBAAkB,qBAAmB,cAAc,MAAM;AAAA;AAWpJ,oCAAiC,eAAe,gBAAgB;AACrE,WAAO,YAAY,eAAe,SAAU,QAAO;AACjD,aAAO,eAAe,SAAS,YAAW;AAAA;AAAA;;;ACxCvC,+BAA6B,eAAe,gBAAgB;AACjE,WAAO,SAAS,eAAe,SAAU,QAAO;AAC9C,aAAO,SAAQ,eAAe,OAAO,SAAU,cAAc;AAC3D,eAAO,eAAe;AAAA,SACrB;AAAA;AAAA;AAYA,+BAA6B,eAAe,iBAAiB;AAClE,QAAI,qBAAqB,gBAAgB;AACzC,QAAI,kBAAkB,gBAAgB;AACtC,WAAO,SAAS,eAAe,SAAU,QAAO;AAC9C,UAAI,UAAS,oBAAoB;AAC/B,eAAO,SAAQ;AAAA;AAGjB,aAAO;AAAA;AAAA;;;AFpCX,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAwBhL,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,mBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,cAAO,QAAQ;AAAA,WAAY;AAAE,cAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,gBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,MAAK,MAAM,MAAM;AAAA;AAErZ,2BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAExM,4BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAcpM,MAAI,gCAA6C,yBAAU,WAAW;AAC3E,gBAAU,gCAA+B;AAEzC,QAAI,SAAS,eAAa;AAE1B,8CAAyC;AACvC,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,eAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,aAAK,QAAQ,UAAU;AAAA;AAGzB,cAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,MAAM,OAAO;AAEhD,uBAAgB,yBAAuB,QAAQ,kBAAkB;AAEjE,aAAO;AAAA;AAGT,mBAAa,gCAA+B,CAAC;AAAA,MAC3C,KAAK;AAAA,MACL,OAMA,sBAAqB;AACnB,YAAI,SAAS;AAEb,eAAO,KAAK,eAAe,IAAI,SAAU,eAAe;AACtD,iBAAO,OAAO,cAAc;AAAA;AAAA;AAAA,OAW/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,SAAQ;AAChC,aAAK,iBAAiB,qBAAmB,MAAM,QAAO,QAAQ;AAE9D,cAAK,kBAAgB,+BAA8B,YAAY,aAAa,MAAM,KAAK,MAAM;AAAA;AAAA,OAc9F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAO,OAAO;AAC5C,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK,eAAe;AAEvG,YAAI,SAAQ,KAAK,cAAc,QAAQ;AACrC,eAAK,cAAc,UAAS;AAE5B,cAAI,KAAK,eAAe,SAAS,YAAW,OAAO;AACjD,iBAAK,eAAe,OAAO,UAAU,GAAG;AAAA;AAG1C,eAAK,cAAc;AACnB,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,eAAe;AACxC,aAAK,iBAAiB,yBAAsB,KAAK,gBAAgB,CAAC;AAElE,YAAI,WAAW,KAAK,gBAAgB;AAClC,gBAAK,kBAAgB,+BAA8B,YAAY,mBAAmB,MAAM,KAAK,MAAM,eAAe,KAAK,cAAc;AAAA,eAChI;AACL,gBAAK,kBAAgB,+BAA8B,YAAY,mBAAmB,MAAM,KAAK,MAAM,eAAe,KAAK;AAAA;AAAA;AAAA,OAS1H;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,eAAe;AAAA;AAAA,OAW5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK,cAAc;AACpG,aAAK,eAAe,SAAS;AAE7B,cAAK,kBAAgB,+BAA8B,YAAY,oBAAoB,MAAM,KAAK,MAAM;AAAA;AAAA,OAUrG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,gBAAgB,iBAAiB;AACtD,aAAK,gBAAgB,yBAAyB,KAAK,eAAe,gBAAgB,iBAAiB,KAAK;AACxG,aAAK,iBAAiB,oBAAoB,KAAK,gBAAgB;AAE/D,cAAK,kBAAgB,+BAA8B,YAAY,UAAU,MAAM,KAAK,MAAM,gBAAgB;AAAA;AAAA,OAS3G;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,gBAAgB;AACrC,aAAK,gBAAgB,wBAAwB,KAAK,eAAe;AACjE,aAAK,iBAAiB,yBAAsB,KAAK,gBAAgB;AACjE,aAAK,iBAAiB,oBAAoB,KAAK,gBAAgB;AAE/D,cAAK,kBAAgB,+BAA8B,YAAY,UAAU,MAAM,KAAK,MAAM;AAAA;AAAA,OAQ3F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,SAAS;AAEb,eAAO,KAAK,eAAe,IAAI,SAAU,eAAe;AACtD,iBAAO,CAAC,eAAe,OAAO,gBAAgB;AAAA;AAAA;AAAA;AAKpD,WAAO;AAAA,IACP;;;AGjPF,mCAAO;AATP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AASjM,MAAI,cAA2B,yBAAU,uBAAuB;AACrE,gBAAU,cAAa;AAEvB,QAAI,SAAS,eAAa;AAE1B,4BAAuB;AACrB,UAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAExF,wBAAgB,MAAM;AAEtB,aAAO,OAAO,KAAK,MAAM;AAAA;AAW3B,mBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,eAAO,YAAY,KAAK,aAAa,SAAU,aAAa,WAAW,eAAe;AACpF,cAAI,WAAW;AACb,wBAAY,KAAK;AAAA;AAGnB,iBAAO;AAAA,WACN;AAAA;AAAA;AAIP,WAAO;AAAA,IACP;;;AChEF,mCAAO;;;ACXP,mCAAO;AAQP,MAAI,kBAAkB,oBAAI,IAAI,CAAC,CAAC,mBAAmB;AAAA,IACjD,0BAA0B;AAAA,IAC1B,yBAAyB;AAAA,MACvB,CAAC,qBAAqB;AAAA,IACxB;AAAA,IACA;AAAA;AAGF,MAAI,oBAAoB,4BAA2B,oBAAoB;AACrE,QAAI,gBAAgB,IAAI,wBAAwB,OAAO;AACrD,YAAM,IAAI,MAAM,2BAA2B,OAAO,oBAAoB;AAAA;AAGxE,WAAO,gBAAgB,IAAI;AAAA;;;ADrB7B,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,mBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,cAAO,QAAQ;AAAA,WAAY;AAAE,cAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,gBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,MAAK,MAAM,MAAM;AAAA;AAErZ,2BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAWjM,MAAI,kBAA+B,yBAAU,WAAW;AAC7D,gBAAU,kBAAiB;AAE3B,QAAI,SAAS,eAAa;AAE1B,gCAA2B;AACzB,wBAAgB,MAAM;AAGtB,aAAO,OAAO,KAAK,MAAM,SAAU,QAAO;AACxC,eAAO;AAAA;AAAA;AAYX,mBAAa,kBAAiB,CAAC;AAAA,MAC7B,KAAK;AAAA,MACL,OAAO,gBAAgB,gBAAgB,iBAAiB;AACtD,YAAI,kBAAkB,oBAAoB,KAAK,eAAe;AAC9D,aAAK,gBAAgB,0BAAyB,iBAAiB,gBAAgB;AAE/E,cAAK,kBAAgB,iBAAgB,YAAY,UAAU,MAAM,KAAK,MAAM,gBAAgB;AAAA;AAAA,OAS7F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,gBAAgB;AACrC,YAAI,kBAAkB,yBAAwB,KAAK,eAAe;AAClE,aAAK,gBAAgB,oBAAoB,iBAAiB;AAE1D,cAAK,kBAAgB,iBAAgB,YAAY,UAAU,MAAM,KAAK,MAAM;AAAA;AAAA;AAIhF,WAAO;AAAA,IACP;;;AZnFF,MAAI,yBAAyB,oBAAI,IAAI,CAAC,CAAC,UAAU,YAAY,CAAC,SAAS,WAAW,CAAC,8BAA8B,gCAAgC,CAAC,wBAAwB,0BAA0B,CAAC,YAAY;AAS1M,0BAAwB,SAAS;AACtC,QAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAExF,QAAI,CAAC,uBAAuB,IAAI,UAAU;AACxC,YAAM,IAAI,MAAM,2BAA4B,OAAO,SAAS;AAAA;AAG9D,WAAO,IAAK,wBAAuB,IAAI,UAAU;AAAA;;;AcpBnD,mCAAO;;;ACTP,mCAAO;AAQP,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAM/Q,MAAI,iBAAiB;AAKd,MAAI,gBAA6B,2BAAY;AAClD,8BAAyB;AACvB,wBAAgB,MAAM;AAOtB,WAAK,aAAa,oBAAI;AAAA;AAUxB,mBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,mBAAkB,YAAY,UAAU;AAC7C,YAAI,QAAQ;AAEZ,YAAI,KAAK,WAAW,IAAI,gBAAgB,OAAO;AAC7C,eAAK,WAAW,IAAI,YAAY;AAChC,mBAAS,aAAa,UAAU,WAAY;AAC1C,mBAAO,MAAM,cAAc,UAAU;AAAA;AAEvC,4BAAkB;AAAA;AAAA;AAAA,OASrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,MAAM;AAC/B,YAAI,WAAW,KAAK,WAAW,IAAI;AAEnC,YAAI,UAAU,WAAW;AACvB,mBAAS;AACT,eAAK,WAAW,OAAO;AACvB,eAAK,cAAc,UAAU;AAC7B,4BAAkB;AAAA;AAAA;AAAA,OAOrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,aAAK,WAAW,QAAQ,SAAU,UAAU,MAAM;AAChD,iBAAO,OAAO,WAAW;AAAA;AAE3B,aAAK,WAAW;AAAA;AAAA,OASjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAa,MAAM;AACxB,YAAI,YAAY,OAAO;AACrB,iBAAO,MAAM,KAAK,KAAK,WAAW;AAAA;AAGpC,eAAO,KAAK,WAAW,IAAI;AAAA;AAAA,OAQ5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,WAAW;AAAA;AAAA,OASxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,gBAAgB;AAC9C,aAAK,WAAW,QAAQ,SAAU,UAAU;AAC1C,mBAAS,OAAO;AAAA;AAAA;AAAA,OAWnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,gBAAgB,iBAAiB;AAC7D,aAAK,WAAW,QAAQ,SAAU,UAAU;AAC1C,mBAAS,OAAO,gBAAgB;AAAA;AAAA;AAAA,OASnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,QAAQ;AAChC,aAAK,WAAW,QAAQ,SAAU,UAAU;AAC1C,mBAAS,KAAK;AAAA;AAAA;AAAA;AAKpB,WAAO;AAAA;AAET,QAAM,eAAe;AAKd,sCAAoC;AACzC,WAAO;AAAA;;;ADtKT,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAUjM,MAAI,uBAAoC,yBAAU,gBAAgB;AACvE,gBAAU,uBAAsB;AAEhC,QAAI,SAAS,eAAa;AAE1B,mCAA8B,qBAAqB,eAAe;AAChE,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK;AAOpB,YAAM,oBAAoB;AAK1B,YAAM,sBAAsB;AAK5B,YAAM,gBAAgB;AACtB,aAAO;AAAA;AAUT,mBAAa,uBAAsB,CAAC;AAAA,MAClC,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAExF,YAAI,kBAAkB,MAAM;AAC1B,iBAAO,KAAK;AAAA;AAGd,YAAI,KAAK,gBAAgB,GAAG;AAC1B,iBAAO;AAAA;AAcT,YAAI,mBAAmB,SAAS,KAAK,OAAO,SAAU,MAAK;AACzD,iBAAO,KAAI;AAAA;AAgBb,YAAI,sBAAsB;AAC1B,YAAI,aAAa,UAAU,iBAAiB,OAAO,iBAAiB,GAAG,UAAU;AAEjF,iBAAS,SAAQ,GAAG,SAAQ,YAAY,UAAS,GAAG;AAClD,cAAI,iBAAiB;AAErB,mBAAS,WAAW,GAAG,WAAW,KAAK,aAAa,YAAY,GAAG;AACjE,2BAAe,KAAK,iBAAiB,UAAU;AAAA;AAGjD,8BAAoB,KAAK;AAAA;AAG3B,eAAO,SAAS,qBAAqB,KAAK;AAAA;AAAA,OAU3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,QAAO,eAAe;AAC1D,YAAI,eAAe,KAAK,gBAAgB,eAAe;AACvD,eAAO,UAAU,gBAAgB,eAAe,KAAK;AAAA;AAAA,OAMtD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,aAAK,oBAAoB,KAAK,gBAAgB;AAAA;AAAA;AAIlD,WAAO;AAAA,IACP;;;AEjKF,mCAAO;;;ACAP,mCAAO;AAMP,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,sCAAoC,KAAK,YAAY,OAAO;AAAE,+BAA2B,KAAK;AAAa,eAAW,IAAI,KAAK;AAAA;AAE/H,sCAAoC,KAAK,mBAAmB;AAAE,QAAI,kBAAkB,IAAI,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEpH,iCAA+B,UAAU,YAAY,OAAO;AAAE,QAAI,aAAa,6BAA6B,UAAU,YAAY;AAAQ,6BAAyB,UAAU,YAAY;AAAQ,WAAO;AAAA;AAExM,oCAAkC,UAAU,YAAY,OAAO;AAAE,QAAI,WAAW,KAAK;AAAE,iBAAW,IAAI,KAAK,UAAU;AAAA,WAAe;AAAE,UAAI,CAAC,WAAW,UAAU;AAAE,cAAM,IAAI,UAAU;AAAA;AAA+C,iBAAW,QAAQ;AAAA;AAAA;AAExP,iCAA+B,UAAU,YAAY;AAAE,QAAI,aAAa,6BAA6B,UAAU,YAAY;AAAQ,WAAO,yBAAyB,UAAU;AAAA;AAE7K,wCAAsC,UAAU,YAAY,QAAQ;AAAE,QAAI,CAAC,WAAW,IAAI,WAAW;AAAE,YAAM,IAAI,UAAU,kBAAkB,SAAS;AAAA;AAAqC,WAAO,WAAW,IAAI;AAAA;AAEjN,oCAAkC,UAAU,YAAY;AAAE,QAAI,WAAW,KAAK;AAAE,aAAO,WAAW,IAAI,KAAK;AAAA;AAAa,WAAO,WAAW;AAAA;AAY1I,MAAI,yBAAsC,oBAAI;AAEvC,MAAI,kBAA+B,2BAAY;AACpD,gCAA2B;AACzB,wBAAgB,MAAM;AAEtB,iCAA2B,MAAM,wBAAwB;AAAA,QACvD,UAAU;AAAA,QACV,OAAO;AAAA;AAAA;AAIX,mBAAa,kBAAiB,CAAC;AAAA,MAC7B,KAAK;AAAA,MACL,OAOA,mBAAmB,UAAU;AAC3B,aAAK,aAAa,UAAU;AAE5B,aAAK,OAAO,sBAAsB,MAAM;AAExC,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,aAAK,cAAc;AACnB,aAAK;AACL,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,SAAS;AAC9B,YAAI,QAAQ,SAAS,GAAG;AACtB,eAAK,cAAc,UAAU;AAAA;AAG/B,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,gBAAgB;AACnD,8BAAsB,MAAM,wBAAwB;AAAA;AAAA;AAIxD,WAAO;AAAA;AAET,QAAM,iBAAiB;;;ACrGhB,qBAAmB,WAAW,UAAU;AAC7C,QAAI,UAAU;AACd,QAAI,IAAI;AACR,QAAI,IAAI;AAGR,WAAO,IAAI,UAAU,UAAU,IAAI,SAAS,QAAQ,KAAK,KAAK;AAC5D,UAAI,UAAU,OAAO,SAAS,IAAI;AAChC,gBAAQ,KAAK;AAAA,UACX,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,UAAU,UAAU;AAAA,UACpB,UAAU,SAAS;AAAA;AAAA;AAAA;AAKzB,WAAO,IAAI,SAAS,QAAQ,KAAK;AAC/B,cAAQ,KAAK;AAAA,QACX,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU,SAAS;AAAA;AAAA;AAIvB,WAAO,IAAI,UAAU,QAAQ,KAAK;AAChC,cAAQ,KAAK;AAAA,QACX,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,UAAU,UAAU;AAAA,QACpB,UAAU;AAAA;AAAA;AAId,WAAO;AAAA;;;AFtCT,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uCAAoC,KAAK,YAAY,OAAO;AAAE,gCAA2B,KAAK;AAAa,eAAW,IAAI,KAAK;AAAA;AAE/H,uCAAoC,KAAK,mBAAmB;AAAE,QAAI,kBAAkB,IAAI,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEpH,kCAA+B,UAAU,YAAY;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,WAAO,0BAAyB,UAAU;AAAA;AAE7K,qCAAkC,UAAU,YAAY;AAAE,QAAI,WAAW,KAAK;AAAE,aAAO,WAAW,IAAI,KAAK;AAAA;AAAa,WAAO,WAAW;AAAA;AAE1I,kCAA+B,UAAU,YAAY,OAAO;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,8BAAyB,UAAU,YAAY;AAAQ,WAAO;AAAA;AAExM,yCAAsC,UAAU,YAAY,QAAQ;AAAE,QAAI,CAAC,WAAW,IAAI,WAAW;AAAE,YAAM,IAAI,UAAU,kBAAkB,SAAS;AAAA;AAAqC,WAAO,WAAW,IAAI;AAAA;AAEjN,qCAAkC,UAAU,YAAY,OAAO;AAAE,QAAI,WAAW,KAAK;AAAE,iBAAW,IAAI,KAAK,UAAU;AAAA,WAAe;AAAE,UAAI,CAAC,WAAW,UAAU;AAAE,cAAM,IAAI,UAAU;AAAA;AAA+C,iBAAW,QAAQ;AAAA;AAAA;AAaxP,MAAI,aAA0B,oBAAI;AAElC,MAAI,eAA4B,oBAAI;AAEpC,MAAI,qBAAkC,oBAAI;AAE1C,MAAI,8BAA2C,oBAAI;AAEnD,MAAI,qBAAkC,oBAAI;AAEnC,MAAI,oBAAiC,2BAAY;AAyCtD,kCAA6B;AAC3B,UAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,IAC3E,oBAAoB,KAAK;AAE7B,wBAAgB,MAAM;AAEtB,kCAA2B,MAAM,YAAY;AAAA,QAC3C,UAAU;AAAA,QACV,OAAO,oBAAI;AAAA;AAGb,kCAA2B,MAAM,cAAc;AAAA,QAC7C,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,kCAA2B,MAAM,oBAAoB;AAAA,QACnD,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,kCAA2B,MAAM,6BAA6B;AAAA,QAC5D,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,kCAA2B,MAAM,oBAAoB;AAAA,QACnD,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,6BAAsB,MAAM,oBAAoB,sBAAsB,QAAQ,sBAAsB,SAAS,oBAAoB;AAAA;AA8BnI,mBAAa,oBAAmB,CAAC;AAAA,MAC/B,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,YAAI,QAAQ;AAEZ,YAAI,WAAW,IAAI;AAEnB,+BAAsB,MAAM,YAAY,IAAI;AAE5C,iBAAS,aAAa,eAAe,WAAY;AAC/C,iCAAsB,OAAO,YAAY,OAAO;AAAA;AAGlD,iBAAS,qBAAqB,UAAU,uBAAsB,MAAM,eAAe,uBAAsB,MAAM;AAE/G,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAc,cAAc;AACjC,YAAI,oBAAoB,uBAAsB,MAAM;AAEpD,YAAI,CAAC,uBAAsB,MAAM,gCAAgC,uBAAsB,MAAM,cAAc,WAAW,aAAa,QAAQ;AACzI,cAAI,aAAa,WAAW,GAAG;AAC7B,2BAAe,IAAI,MAAM,kBAAkB,QAAQ,KAAK,uBAAsB,MAAM;AAAA,iBAC/E;AACL,mCAAsB,MAAM,cAAc,IAAI,MAAM,aAAa,QAAQ,KAAK,uBAAsB,MAAM;AAAA;AAG5G,cAAI,CAAC,uBAAsB,MAAM,8BAA8B;AAC7D,mCAAsB,MAAM,6BAA6B;AAEzD,gCAAoB,uBAAsB,MAAM;AAAA;AAAA;AAIpD,YAAI,UAAU,UAAU,mBAAmB;AAE3C,+BAAsB,MAAM,YAAY,QAAQ,SAAU,UAAU;AAClE,iBAAO,SAAS,OAAO;AAAA;AAGzB,+BAAsB,MAAM,oBAAoB;AAAA;AAAA;AAIpD,WAAO;AAAA;;;AjB9MT,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAqBhL,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AA6BxQ,MAAI,cAA2B,2BAAY;AAChD,4BAAuB;AACrB,UAAI,QAAQ;AAEZ,wBAAgB,MAAM;AAUtB,WAAK,kBAAkB,IAAI;AAS3B,WAAK,yBAAyB,IAAI,qBAAqB,SAAU,gBAAgB;AAC/E,eAAO,eAAe,KAAK,SAAU,OAAO;AAC1C,iBAAO,UAAU;AAAA;AAAA,SAElB;AASH,WAAK,uBAAuB,IAAI,qBAAqB,SAAU,gBAAgB;AAC7E,eAAO,eAAe,KAAK,SAAU,OAAO;AAC1C,iBAAO,UAAU;AAAA;AAAA,SAElB;AAQH,WAAK,wBAAwB,IAAI;AAWjC,WAAK,0BAA0B,IAAI,kBAAkB;AAAA,QACnD,mBAAmB;AAAA;AAWrB,WAAK,yBAAyB;AAU9B,WAAK,wBAAwB;AAQ7B,WAAK,YAAY;AAQjB,WAAK,yBAAyB;AAQ9B,WAAK,wBAAwB;AAQ7B,WAAK,uBAAuB;AAQ5B,WAAK,iCAAiC;AAQtC,WAAK,mCAAmC,oBAAI;AAQ5C,WAAK,qCAAqC,oBAAI;AAC9C,WAAK,gBAAgB,aAAa,UAAU,WAAY;AACtD,cAAM,yBAAyB;AAE/B,cAAM;AAEN,cAAM,cAAc,UAAU,MAAM,iBAAiB;AAAA;AAEvD,WAAK,uBAAuB,aAAa,UAAU,SAAU,YAAY;AACvE,cAAM,wBAAwB;AAE9B,cAAM;AAEN,cAAM,cAAc,UAAU,YAAY,MAAM;AAAA;AAElD,WAAK,qBAAqB,aAAa,UAAU,SAAU,YAAY;AACrE,cAAM,uBAAuB;AAE7B,cAAM;AAEN,cAAM,cAAc,UAAU,YAAY,MAAM;AAAA;AAElD,WAAK,sBAAsB,aAAa,UAAU,SAAU,YAAY;AACtE,cAAM,cAAc,UAAU,YAAY,MAAM;AAAA;AAAA;AAUpD,mBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,aAAK,YAAY;AAAA;AAAA,OAOlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,aAAK,YAAY;AACjB,aAAK;AAAA;AAAA,OAWN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,cAAc;AAClD,YAAI,iBAAiB,UAAU;AAC7B,gBAAM,IAAI,MAAM,+BAAgC,OAAO,cAAc;AAAA;AAGvE,eAAO,KAAK,wBAAwB;AAAA;AAAA,OAWrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC,WAAW,SAAS,eAAe;AAC3E,eAAO,KAAK,YAAY,WAAW,eAAe,SAAS;AAAA;AAAA,OAU5D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,YAAY,UAAU;AAChD,YAAI,KAAK,uBAAuB,IAAI,eAAe,KAAK,qBAAqB,IAAI,eAAe,KAAK,sBAAsB,IAAI,aAAa;AAC1I,gBAAM,MAAM,kBAAmB,OAAO,YAAY;AAAA;AAGpD,YAAI,oBAAoB,aAAa;AACnC,eAAK,uBAAuB,SAAS,YAAY;AAAA,mBACxC,oBAAoB,WAAW;AACxC,eAAK,qBAAqB,SAAS,YAAY;AAAA,eAC1C;AACL,eAAK,sBAAsB,SAAS,YAAY;AAAA;AAGlD,YAAI,kBAAkB,KAAK;AAS3B,YAAI,kBAAkB,GAAG;AACvB,mBAAS,KAAK;AAAA;AAGhB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,MAAM;AAClC,aAAK,uBAAuB,WAAW;AACvC,aAAK,qBAAqB,WAAW;AACrC,aAAK,sBAAsB,WAAW;AAAA;AAAA,OAMvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK,uBAAuB;AAC5B,aAAK,qBAAqB;AAC1B,aAAK,sBAAsB;AAAA;AAAA,OAS5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC,aAAa;AAEtD,YAAI,gBAAgB,KAAK,uBAAuB;AAEhD,YAAI,UAAU,gBAAgB;AAC5B,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wCAAwC,iBAAiB;AAC9D,YAAI,gBAAgB,KAAK,+BAA+B;AAExD,YAAI,UAAU,gBAAgB;AAC5B,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC,eAAe;AACxD,YAAI,cAAc,KAAK,iCAAiC,IAAI;AAE5D,YAAI,UAAU,cAAc;AAC1B,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC,iBAAiB;AAC5D,eAAO,KAAK,2BAA2B,KAAK,+BAA+B;AAAA;AAAA,OAS5E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC,aAAa;AACxD,YAAI,kBAAkB,KAAK,mCAAmC,IAAI;AAElE,YAAI,UAAU,kBAAkB;AAC9B,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAoBR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,iBAAiB,aAAa;AACnE,YAAI,2BAA2B,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACnG,YAAI,qBAAqB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,kBAAkB;AAC/G,YAAI,gBAAgB,KAAK,2BAA2B;AAEpD,YAAI,kBAAkB,MAAM;AAG1B,cAAI,6BAA6B,QAAQ,uBAAuB,kBAAkB,aAAa;AAC7F,mBAAO,KAAK,uBAAuB,oBAAoB,CAAC,aAAa,OAAO;AAAA;AAG9E,iBAAO;AAAA;AAGT,YAAI,KAAK,SAAS,mBAAmB,OAAO;AAC1C,iBAAO;AAAA;AAIT,eAAO,KAAK,uBAAuB,kBAAkB,aAAa,aAAa,0BAA0B;AAAA;AAAA,OAQ1G;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK;AACtF,aAAK,yBAAyB,qBAAmB,IAAI,MAAM,QAAQ;AACnE,aAAK,wBAAwB,qBAAmB,IAAI,MAAM,QAAQ;AAClE,aAAK;AACL,aAAK,gBAAgB,KAAK;AAC1B,aAAK,uBAAuB,UAAU;AACtC,aAAK;AAEL,aAAK;AACL,aAAK,qBAAqB,UAAU;AAEpC,aAAK,sBAAsB,UAAU;AACrC,aAAK;AACL,aAAK,cAAc;AAAA;AAAA,OAQpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAQ;AAClC,YAAI,oBAAoB,KAAK;AAE7B,YAAI,SAAS,mBAAmB;AAC9B,cAAI,qBAAqB,qBAAmB,MAAM,KAAK,uBAAuB,QAAQ,QAAQ,IAAI,SAAU,GAAG;AAC7G,mBAAO,IAAI;AAAA;AAGb,eAAK,cAAc;AAAA,eACd;AACL,eAAK,cAAc,mBAAmB,SAAS;AAAA;AAAA;AAAA,OASlD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,eAAO,KAAK,gBAAgB;AAAA;AAAA,OAQ7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,SAAS;AAC1C,aAAK,gBAAgB,UAAU;AAAA;AAAA,OAYhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,SAAS;AAEb,YAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAExF,YAAI,kBAAkB,MAAM;AAC1B,iBAAO,KAAK;AAAA;AAGd,YAAI,kBAAkB,KAAK;AAC3B,eAAO,gBAAgB,OAAO,SAAU,eAAe;AACrD,iBAAO,OAAO,UAAU,mBAAmB;AAAA;AAAA;AAAA,OAW9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC;AAC3C,eAAO,KAAK,uBAAuB;AAAA;AAAA,OAWpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,YAAI,SAAS;AAEb,YAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAExF,YAAI,kBAAkB,MAAM;AAC1B,iBAAO,KAAK;AAAA;AAGd,YAAI,kBAAkB,KAAK;AAC3B,eAAO,gBAAgB,OAAO,SAAU,eAAe;AACrD,iBAAO,OAAO,SAAS,mBAAmB;AAAA;AAAA;AAAA,OAW7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC;AAC1C,eAAO,KAAK,sBAAsB;AAAA;AAAA,OAUnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,SAAS;AAEb,YAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAExF,YAAI,kBAAkB,MAAM;AAC1B,iBAAO,KAAK;AAAA;AAGd,YAAI,oBAAoB,KAAK;AAC7B,eAAO,kBAAkB,OAAO,SAAU,eAAe;AACvD,iBAAO,OAAO,SAAS,mBAAmB;AAAA;AAAA;AAAA,OAS7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC;AAC3C,eAAO,KAAK,uBAAuB;AAAA;AAAA,OAQpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,eAAO,KAAK,qBAAqB;AAAA;AAAA,OASlC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,cAAc,YAAY;AACpD,YAAI,SAAS;AAEb,YAAI,OAAO,iBAAiB,UAAU;AACpC,yBAAe,CAAC;AAAA;AAGlB,YAAI,uBAAuB,SAAS,cAAc,SAAU,aAAa;AACvE,iBAAO,OAAO,2BAA2B;AAAA;AAE3C,YAAI,0BAA0B,KAAK;AACnC,YAAI,qBAAqB,aAAa;AAEtC,YAAI,uBAAuB,yBAAwB,KAAK,sBAAsB;AAE9E,YAAI,sBAAsB,0BAA0B;AAEpD,YAAI,aAAa,qBAAqB,yBAAyB;AAE7D,cAAI,gBAAgB,qBAAqB,OAAO,SAAU,QAAO;AAC/D,mBAAO,OAAO,UAAU,YAAW;AAAA,aAClC;AACH,gCAAsB,qBAAqB,QAAQ;AAAA;AAIrD,aAAK,mBAAmB,0BAAyB,sBAAsB,qBAAqB;AAAA;AAAA,OAS7F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,eAAe;AACvC,eAAO,KAAK,uBAAuB,sBAAsB;AAAA;AAAA,OAS1D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,eAAe;AACtC,eAAO,KAAK,qBAAqB,sBAAsB;AAAA;AAAA,OAUxD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,0BAA0B,iBAAiB;AACvE,YAAI,kBAAkB,KAAK,uBAAuB;AAClD,YAAI,6BAA6B,UAAU,mBAAmB,kBAAkB,KAAK;AACrF,YAAI,iBAAiB,KAAK,qBAAqB,SAAS,mBAAmB,KAAK,qBAAqB,QAAQ,mBAAmB,KAAK;AACrI,YAAI,kBAAkB,SAAS,IAAI,MAAM,iBAAiB,KAAK,6BAA6B,SAAU,WAAW,gBAAgB;AAC/H,iBAAO,YAAY;AAAA;AAErB,aAAK;AACL,aAAK,gBAAgB,OAAO,gBAAgB;AAC5C,aAAK,uBAAuB,cAAc,gBAAgB;AAC1D,aAAK,qBAAqB,cAAc,gBAAgB;AACxD,aAAK,sBAAsB,cAAc,gBAAgB;AACzD,aAAK;AAAA;AAAA,OASN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,gBAAgB;AAC5C,aAAK;AACL,aAAK,gBAAgB,OAAO;AAC5B,aAAK,uBAAuB,gBAAgB;AAC5C,aAAK,qBAAqB,gBAAgB;AAC1C,aAAK,sBAAsB,gBAAgB;AAC3C,aAAK;AAAA;AAAA,OAUN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,YAAI,wBAAwB,KAAK,0BAA0B,KAAK,yBAAyB,KAAK;AAE9F,YAAI,UAAU,QAAQ,KAAK,cAAc,SAAS,0BAA0B,MAAM;AAChF,eAAK,uBAAuB;AAC5B,eAAK,qBAAqB;AAC1B,eAAK,yBAAyB,KAAK,qBAAqB;AACxD,eAAK,wBAAwB,KAAK,oBAAoB;AACtD,eAAK,iCAAiC,KAAK,qBAAqB;AAChE,eAAK;AACL,eAAK;AAEL,cAAI,KAAK,sBAAsB;AAC7B,iBAAK,wBAAwB,KAAK,KAAK,qBAAqB;AAAA;AAG9D,eAAK,cAAc,gBAAgB;AAAA,YACjC,wBAAwB,KAAK;AAAA,YAC7B,uBAAuB,KAAK;AAAA,YAC5B,sBAAsB,KAAK;AAAA;AAE7B,eAAK,yBAAyB;AAC9B,eAAK,wBAAwB;AAC7B,eAAK,uBAAuB;AAAA;AAAA;AAAA,OAS/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4CAA4C;AACjD,YAAI,wBAAwB,KAAK;AACjC,aAAK,iCAAiC;AAEtC,iBAAS,cAAc,GAAG,cAAc,uBAAuB,eAAe,GAAG;AAC/E,cAAI,gBAAgB,KAAK,2BAA2B;AAGpD,eAAK,iCAAiC,IAAI,eAAe;AAAA;AAAA;AAAA,OAS5D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6CAA6C;AAClD,YAAI,wBAAwB,KAAK;AACjC,aAAK,mCAAmC;AAExC,iBAAS,kBAAkB,GAAG,kBAAkB,uBAAuB,mBAAmB,GAAG;AAE3F,cAAI,gBAAgB,KAAK,+BAA+B;AACxD,cAAI,cAAc,KAAK,2BAA2B;AAClD,eAAK,mCAAmC,IAAI,aAAa;AAAA;AAAA;AAAA;AAK/D,WAAO;AAAA;AAET,QAAM,aAAa;;;AoBr0BnB,gCAAO;AALP,MAAI;AAEJ,mCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAoBnK,iCAA+B,QAAQ,WAAW;AACvD,eAAW,WAAW,SAAU,OAAO,KAAK;AAC1C,UAAI,YAAY,OAAO,OAAO;AAC5B,eAAO,OAAO;AAAA;AAAA;AAGlB,WAAO;AAAA;AAwCF,iCAA+B,cAAc;AAClD,QAAI,sBAAsB;AAC1B,QAAI,sBAAsB,oBAAoB,KAAK;AAEnD,QAAI,qBAAqB;AACvB,aAAO,GAAG,OAAO,oBAAoB,GAAG,eAAe,KAAK,OAAO,oBAAoB,GAAG;AAAA;AAG5F,WAAO;AAAA;AASF,6CAA2C,cAAc;AAC9D,QAAI,UAAU,eAAe;AAC3B,aAAM,aAAa,oBAAoB,oBAAkB,wBAAuB,CAAC,wBAAyB,6KAA8K,CAAC,wBAAyB,mLAAoL;AAAA;AAAA;;;AC5E3d,qBAAmB,oBAAoB,YAAY;AAChE,QAAI,iBAAiB,MAAM,QAAQ,uBAAuB,OAAO,UAAU;AAE3E,QAAI,gBAAgB;AAClB,aAAO,mBAAmB;AAAA;AAG5B,WAAO;AAAA;;;ACfT,MAAI,mBAAkB,eAAe;AAArC,MACI,kCAAkC,iBAAgB;AADtD,MAEI,4BAA4B,iBAAgB;AASzC,qBAAkB,MAAM,aAAa;AAC1C,oCAAgC,MAAM;AAAA;AAQjC,oBAAkB;AACvB,WAAO;AAAA;AAGT,YAAS,aAAa;;;AC3BtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,MAAI,+BAA+B;AACnC,MAAI,6BAA6B,GAAG,OAAO,8BAA8B;AACzE,MAAI,8BAA8B,GAAG,OAAO,8BAA8B;AAC1E,MAAI,8BAA8B,GAAG,OAAO,8BAA8B;AAC1E,MAAI,gCAAgC,GAAG,OAAO,8BAA8B;AAC5E,MAAI,iCAAiC,GAAG,OAAO,8BAA8B;AAC7E,MAAI,+BAA+B,GAAG,OAAO,8BAA8B;AAC3E,MAAI,kCAAkC,GAAG,OAAO,8BAA8B;AAC9E,MAAI,yBAAyB,GAAG,OAAO,8BAA8B;AACrE,MAAI,yBAAyB,GAAG,OAAO,8BAA8B;AACrE,MAAI,8BAA8B,GAAG,OAAO,8BAA8B;AAC1E,MAAI,iCAAiC,GAAG,OAAO,8BAA8B;AAC7E,MAAI,yBAAyB,GAAG,OAAO,8BAA8B;AACrE,MAAI,wBAAwB,GAAG,OAAO,8BAA8B;AACpE,MAAI,kCAAkC,GAAG,OAAO,8BAA8B;AAC9E,MAAI,oCAAoC,GAAG,OAAO,8BAA8B;AAChF,MAAI,gCAAgC,GAAG,OAAO,8BAA8B;AAC5E,MAAI,kCAAkC,GAAG,OAAO,8BAA8B;AAC9E,MAAI,gCAAgC,GAAG,OAAO,8BAA8B;AAC5E,MAAI,iCAAiC,GAAG,OAAO,8BAA8B;AAC7E,MAAI,mCAAmC,GAAG,OAAO,8BAA8B;AAC/E,MAAI,sCAAsC,GAAG,OAAO,8BAA8B;AAClF,MAAI,8BAA8B,GAAG,OAAO,8BAA8B;AAC1E,MAAI,mCAAmC,GAAG,OAAO,8BAA8B;AAC/E,MAAI,qCAAqC,GAAG,OAAO,8BAA8B;AACjF,MAAI,oCAAoC,GAAG,OAAO,8BAA8B;AAChF,MAAI,sCAAsC,GAAG,OAAO,8BAA8B;AAClF,MAAI,kCAAkC,GAAG,OAAO,8BAA8B;AAC9E,MAAI,qCAAqC,GAAG,OAAO,8BAA8B;AACjF,MAAI,qCAAqC,GAAG,OAAO,8BAA8B;AACjF,MAAI,4BAA4B,GAAG,OAAO,8BAA8B;AACxE,MAAI,gCAAgC,GAAG,OAAO,8BAA8B;AAC5E,MAAI,kCAAkC,GAAG,OAAO,8BAA8B;AAC9E,MAAI,mCAAmC,GAAG,OAAO,8BAA8B;AAC/E,MAAI,iCAAiC,GAAG,OAAO,8BAA8B;AAC7E,MAAI,mCAAmC,GAAG,OAAO,8BAA8B;AAC/E,MAAI,6CAA6C,GAAG,OAAO,8BAA8B;AAEzF,MAAI,6CAA6C,GAAG,OAAO,8BAA8B;AAEzF,MAAI,gCAAgC,GAAG,OAAO,8BAA8B;AAC5E,MAAI,gCAAgC,GAAG,OAAO,8BAA8B;AAC5E,MAAI,6BAA6B,GAAG,OAAO,8BAA8B;AACzE,MAAI,6BAA6B,GAAG,OAAO,8BAA8B;AACzE,MAAI,oBAAoB;AACxB,MAAI,+BAA+B,GAAG,OAAO,mBAAmB;AAChE,MAAI,0BAA0B,GAAG,OAAO,8BAA8B;AACtE,MAAI,2BAA2B,GAAG,OAAO,8BAA8B;AACvE,MAAI,+BAA+B,GAAG,OAAO,8BAA8B;AAC3E,MAAI,2BAA2B,GAAG,OAAO,8BAA8B;AACvE,MAAI,+BAA+B,GAAG,OAAO,8BAA8B;AAC3E,MAAI,iCAAiC,GAAG,OAAO,8BAA8B;AAC7E,MAAI,+BAA+B,GAAG,OAAO,8BAA8B;AAC3E,MAAI,8BAA8B,GAAG,OAAO,8BAA8B;AAC1E,MAAI,iCAAiC,GAAG,OAAO,8BAA8B;AAC7E,MAAI,8BAA8B,GAAG,OAAO,8BAA8B;AAC1E,MAAI,kCAAkC,GAAG,OAAO,8BAA8B;AAC9E,MAAI,2CAA2C,GAAG,OAAO,8BAA8B;AACvF,MAAI,+BAA+B,GAAG,OAAO,8BAA8B;AAC3E,MAAI,wCAAwC,GAAG,OAAO,8BAA8B;AACpF,MAAI,6BAA6B,GAAG,OAAO,8BAA8B;AACzE,MAAI,iCAAiC,GAAG,OAAO,8BAA8B;AAC7E,MAAI,2BAA2B,GAAG,OAAO,8BAA8B;AACvE,MAAI,4BAA4B,GAAG,OAAO,8BAA8B;AACxE,MAAI,2BAA2B,GAAG,OAAO,8BAA8B;AACvE,MAAI,8BAA8B,GAAG,OAAO,8BAA8B;AAC1E,MAAI,+BAA+B,GAAG,OAAO,8BAA8B;AAC3E,MAAI,mCAAmC,GAAG,OAAO,mBAAmB;AACpE,MAAI,+BAA+B,GAAG,OAAO,mBAAmB;AAChE,MAAI,6BAA6B,GAAG,OAAO,mBAAmB;AAC9D,MAAI,6BAA6B,GAAG,OAAO,mBAAmB;AAC9D,MAAI,6BAA6B,GAAG,OAAO,mBAAmB;AAC9D,MAAI,6BAA6B,GAAG,OAAO,mBAAmB;AAC9D,MAAI,wBAAwB,GAAG,OAAO,mBAAmB;AACzD,MAAI,qBAAqB,GAAG,OAAO,mBAAmB;AACtD,MAAI,yBAAyB,GAAG,OAAO,mBAAmB;AAC1D,MAAI,qCAAqC,GAAG,OAAO,mBAAmB;AACtE,MAAI,oCAAoC,GAAG,OAAO,mBAAmB;AACrE,MAAI,2CAA2C,GAAG,OAAO,mBAAmB;;;ACjFnF,MAAI;AAEJ,4BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,AAQA,MAAI,aAAc,eAAc;AAAA,IAC9B,cAAc;AAAA,KACb,iBAAgB,aAAe,4BAA4B,yBAAyB,iBAAgB,aAAe,6BAA6B,qBAAqB,iBAAgB,aAAe,6BAA6B,qBAAqB,iBAAgB,aAAe,+BAA+B,uBAAuB,iBAAgB,aAAe,gCAAgC,wBAAwB,iBAAgB,aAAe,8BAA8B,CAAC,cAAc,iBAAiB,iBAAgB,aAAe,iCAAiC,CAAC,iBAAiB,oBAAoB,iBAAgB,aAAe,wBAAwB,SAAS,iBAAgB,aAAe,wBAAwB,SAAS,iBAAgB,aAAe,6BAA6B,cAAc,iBAAgB,aAAe,gCAAgC,iBAAiB,iBAAgB,aAAe,6BAA6B,cAAc,iBAAgB,aAAe,kCAAkC,SAAS,iBAAgB,aAAe,oCAAoC,WAAW,iBAAgB,aAAe,mCAAmC,UAAU,iBAAgB,aAAe,qCAAqC,YAAY,iBAAgB,aAAe,iCAAiC,QAAQ,iBAAgB,aAAe,oCAAoC,WAAW,iBAAgB,aAAe,oCAAoC,WAAW,iBAAgB,aAAe,iCAAiC,kBAAkB,iBAAgB,aAAe,mCAAmC,oBAAoB,iBAAgB,aAAe,2BAA2B,YAAY,iBAAgB,aAAe,+BAA+B,QAAQ,iBAAgB,aAAe,iCAAiC,UAAU,iBAAgB,aAAe,kCAAkC,WAAW,iBAAgB,aAAe,gCAAgC,SAAS,iBAAgB,aAAe,kCAAkC,qBAAqB,iBAAgB,aAAe,+BAA+B,gBAAgB,iBAAgB,aAAe,gCAAgC,iBAAiB,iBAAgB,aAAe,kCAAkC,mBAAmB,iBAAgB,aAAe,qCAAqC,sBAAsB,iBAAgB,aAAe,+BAA+B,gBAAgB,iBAAgB,aAAe,iCAAiC,kBAAkB,iBAAgB,aAAe,wBAAwB,SAAS,iBAAgB,aAAe,uBAAuB,QAAQ,iBAAgB,aAAe,4CAA4C,qBAAqB,iBAAgB,aAAe,4CAA4C,uBAAuB,iBAAgB,aAAe,+BAA+B,CAAC,eAAe,kBAAkB,iBAAgB,aAAe,+BAA+B,CAAC,eAAe,kBAAkB,iBAAgB,aAAe,4BAA4B,CAAC,YAAY,eAAe,iBAAgB,aAAe,4BAA4B,CAAC,YAAY,eAAe,iBAAgB,aAAe,yBAAyB,SAAS,iBAAgB,aAAe,0BAA0B,aAAa,iBAAgB,aAAe,8BAA8B,iBAAiB,iBAAgB,aAAe,0BAA0B,gBAAgB,iBAAgB,aAAe,8BAA8B,oBAAoB,iBAAgB,aAAe,gCAAgC,gBAAgB,iBAAgB,aAAe,8BAA8B,cAAc,iBAAgB,aAAe,6BAA6B,aAAa,iBAAgB,aAAe,gCAAgC,qBAAqB,iBAAgB,aAAe,iCAAiC,iBAAiB,iBAAgB,aAAe,0CAA0C,6BAA6B,iBAAgB,aAAe,8BAA8B,cAAc,iBAAgB,aAAe,uCAAuC,0BAA0B,iBAAgB,aAAe,4BAA4B,eAAe,iBAAgB,aAAe,gCAAgC,mBAAmB,iBAAgB,aAAe,0BAA0B,UAAU,iBAAgB,aAAe,2BAA2B,WAAW,iBAAgB,aAAe,0BAA0B,UAAU,iBAAgB,aAAe,6BAA6B,aAAa,iBAAgB,aAAe,8BAA8B,cAAc,iBAAgB,aAAe,4BAA4B,gBAAgB,iBAAgB,aAAe,kCAAkC,wBAAwB,iBAAgB,aAAe,8BAA8B,oBAAoB,iBAAgB,aAAe,4BAA4B,QAAQ,iBAAgB,aAAe,4BAA4B,OAAO,iBAAgB,aAAe,4BAA4B,eAAe,iBAAgB,aAAe,uBAAuB,UAAU,iBAAgB,aAAe,oBAAoB,OAAO,iBAAgB,aAAe,wBAAwB,WAAW,iBAAgB,aAAe,oCAAoC,WAAW,iBAAgB,aAAe,mCAAmC,UAAU,iBAAgB,aAAe,0CAA0C,iBAAiB;AAC7lL,MAAO,gBAAQ;;;ACNR,MAAI,wBAAwB,cAAmB;AAEtD,MAAI,mBAAkB,eAAe;AAArC,MACI,qCAAqC,iBAAgB;AADzD,MAEI,8BAA8B,iBAAgB;AAFlD,MAGI,8BAA8B,iBAAgB;AAHlD,MAII,iCAAiC,iBAAgB;AAMrD,6BAA2B;AASpB,sCAAoC,0BAA0B,aAAY;AAC/E,QAAI,eAAe;AACnB,QAAI,mBAAmB;AAEvB,QAAI,UAAS,2BAA2B;AACtC,yBAAmB;AACnB,qBAAe,iBAAiB;AAAA;AAGlC,6BAAyB,cAAc;AACvC,uCAAmC,cAAc,UAAU;AAE3D,WAAO,UAAU;AAAA;AAUnB,oCAAkC,cAAc,aAAY;AAC1D,QAAI,iBAAiB,uBAAuB;AAC1C,4BAAsB,aAAY,4BAA4B;AAAA;AAAA;AAW3D,iCAA+B,cAAc;AAClD,QAAI,CAAC,sBAAsB,eAAe;AACxC,aAAO;AAAA;AAGT,WAAO,UAAU,4BAA4B;AAAA;AAUxC,iCAA+B,cAAc;AAClD,WAAO,4BAA4B;AAAA;AAiB9B,sCAAoC;AACzC,WAAO;AAAA;AAYF,+BAA6B,cAAc,eAAe,wBAAwB;AACvF,QAAI,qBAAqB,sBAAsB;AAE/C,QAAI,uBAAuB,MAAM;AAC/B,aAAO;AAAA;AAGT,QAAI,qBAAqB,mBAAmB;AAE5C,QAAI,YAAY,qBAAqB;AACnC,aAAO;AAAA;AAGT,QAAI,kBAAkB,mBAAmB,oBAAoB;AAE7D,QAAI,MAAM,QAAQ,kBAAkB;AAClC,aAAO,gBAAgB;AAAA;AAGzB,WAAO;AAAA;AAYT,8BAA4B,oBAAoB,wBAAwB;AACtE,QAAI,8BAA8B;AAClC,cAAU,UAAuB,SAAU,WAAW;AACpD,oCAA8B,UAAU,oBAAoB;AAAA;AAE9D,WAAO;AAAA;AAUF,gCAA8B,cAAc;AACjD,QAAI,yBAAyB,sBAAsB;AAEnD,QAAI,CAAC,sBAAsB,yBAAyB;AAClD,+BAAyB;AACzB,wCAAkC;AAAA;AAGpC,WAAO;AAAA;;;ACrKT,mCAAO;AAQP,MAAI,eAAe,IAAI;AACvB,MAAI,cAAc,oBAAI;AACtB,MAAI,WAAW;AAOf,0BAAwB,cAAc;AACpC,QAAI,aAAa,GAAG;AAClB,mBAAa,iBAAiB,cAAc,WAAW,SAAU,QAAO;AACtE,YAAI,CAAC,YAAY,IAAI,OAAM,UAAU;AACnC,sBAAY,IAAI,OAAM;AAAA;AAAA;AAG1B,mBAAa,iBAAiB,cAAc,SAAS,SAAU,QAAO;AACpE,YAAI,YAAY,IAAI,OAAM,UAAU;AAClC,sBAAY,OAAO,OAAM;AAAA;AAAA;AAG7B,mBAAa,iBAAiB,cAAc,oBAAoB,WAAY;AAC1E,YAAI,aAAa,QAAQ;AACvB,sBAAY;AAAA;AAAA;AAGhB,mBAAa,iBAAiB,aAAa,aAAa,QAAQ,WAAY;AAC1E,oBAAY;AAAA;AAAA;AAIhB,gBAAY;AAAA;AAOd,2BAAyB;AACvB,QAAI,WAAW,GAAG;AAChB,kBAAY;AAAA;AAGd,QAAI,aAAa,GAAG;AAClB;AAAA;AAAA;AAQJ,yBAAuB;AACrB,iBAAa;AACb,gBAAY;AACZ,eAAW;AAAA;AAsBb,8BAA4B;AAC1B,QAAI,UAAS,MAAM,KAAK,YAAY;AACpC,WAAO,QAAO,KAAK,SAAU,UAAU;AACrC,aAAO,cAAc;AAAA;AAAA;;;ACrEzB,mCAAO;;;ACnBP,MAAI,MAAI;AACR,MAAI,eAAc;AAClB,MAAI,UAAU;AACd,MAAI,mBAAkB;AACtB,MAAI,kCAAiC;AACrC,MAAI,kBAAiB;AAIrB,MAAE,EAAE,QAAQ,UAAU,MAAM,MAAM,MAAM,CAAC,gBAAe;AAAA,IACtD,2BAA2B,mCAAmC,QAAQ;AACpE,UAAI,IAAI,iBAAgB;AACxB,UAAI,4BAA2B,gCAA+B;AAC9D,UAAI,QAAO,QAAQ;AACnB,UAAI,SAAS;AACb,UAAI,SAAQ;AACZ,UAAI,KAAK;AACT,aAAO,MAAK,SAAS,QAAO;AAC1B,qBAAa,0BAAyB,GAAG,MAAM,MAAK;AACpD,YAAI,eAAe;AAAW,0BAAe,QAAQ,KAAK;AAAA;AAE5D,aAAO;AAAA;AAAA;;;ADiBX,gCAAO;;;AEtCA,MAAI,qBAAqB;AACzB,MAAI,YAAY;AAChB,MAAI,YAAY;AAChB,MAAI,YAAY;AAChB,MAAI,cAAc;AAClB,MAAI,wBAAwB;;;ACMnC,mCAAO;AAMP,gCAAO;AAjBP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAmBzU,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAE/D,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,mBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,cAAO,QAAQ;AAAA,WAAY;AAAE,cAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,gBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,MAAK,MAAM,MAAM;AAAA;AAErZ,2BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAIxM,MAAI,kBAA+B,yBAAU,YAAY;AACvD,gBAAU,kBAAiB;AAE3B,QAAI,SAAS,eAAa;AAE1B,8BAAyB,UAAU,iBAAiB;AAClD,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,UAAU;AAOpC,YAAM,kBAAkB,mBAAmB;AAE3C,YAAM;AAEN,aAAO;AAAA;AAUT,mBAAa,kBAAiB,CAAC;AAAA,MAC7B,KAAK;AAAA,MACL,OAAO,cAAa,QAAQ;AAC1B,YAAI,KAAK,oBAAoB,MAAM;AACjC,eAAK,kBAAkB,IAAI,cAAU;AAAA,eAChC;AACL,eAAK,gBAAgB,OAAO;AAAA;AAG9B,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,kBAAkB;AACvB,eAAO,MAAK,kBAAgB,iBAAgB,YAAY,SAAS,MAAM,KAAK;AAAA;AAAA,OAmB7E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,aAAa,WAAW,gBAAgB;AAC/E,YAAI,oBAAoB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC5F,YAAI,iBAAiB,KAAK,6BAA6B,YAAY,KAAK,UAAU,KAAK;AAEvF,YAAI,mBAAmB,MAAM;AAC3B,iBAAO;AAAA;AAGT,YAAI,oBAAoB,KAAK,gCAAgC,YAAY,KAAK,UAAU,KAAK;AAE7F,YAAI,sBAAsB,MAAM;AAC9B,iBAAO;AAAA;AAGT,eAAO,IAAI,eAAW,gBAAgB;AAAA;AAAA,OAgBvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC,iBAAiB,eAAe,aAAa;AACxF,YAAI,wBAAwB,KAAK,SAAS,yBAAyB;AAAA,UACjE,KAAK;AAAA,UACL,KAAK;AAAA,YAEH,qBAAqB,sBAAsB;AAG/C,YAAI,kBAAkB,mBAAmB,uBAAuB,MAAM;AACpE,iBAAO;AAAA;AAIT,YAAI,uBAAuB,MAAM;AAC/B,iBAAO,KAAK,6BAA6B,kBAAkB,aAAa,eAAe;AAAA;AAIzF,eAAO;AAAA;AAAA,OAgBR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yCAAyC,oBAAoB,kBAAkB,aAAa;AACjG,YAAI,yBAAyB,KAAK,SAAS,yBAAyB;AAAA,UAClE,KAAK;AAAA,UACL,KAAK;AAAA,YAEH,wBAAwB,uBAAuB;AAGnD,YAAI,qBAAqB,sBAAsB,0BAA0B,MAAM;AAC7E,iBAAO;AAAA;AAIT,YAAI,0BAA0B,MAAM;AAClC,iBAAO,KAAK,gCAAgC,qBAAqB,aAAa,kBAAkB;AAAA;AAIlG,eAAO;AAAA;AAAA,OAuBR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,kBAAkB,gBAAgB,gBAAgB,mBAAmB;AAC1G,YAAI,qBAAqB,KAAK,6BAA6B,iBAAiB,KAAK,eAAe,KAAK;AACrG,YAAI,mBAAmB,KAAK,6BAA6B,eAAe,KAAK,iBAAiB,KAAK,CAAC;AACpG,YAAI,wBAAwB,KAAK,gCAAgC,iBAAiB,KAAK,eAAe,KAAK;AAC3G,YAAI,sBAAsB,KAAK,gCAAgC,eAAe,KAAK,iBAAiB,KAAK,CAAC;AAE1G,YAAI,uBAAuB,QAAQ,qBAAqB,QAAQ,0BAA0B,QAAQ,wBAAwB,MAAM;AAC9H,iBAAO;AAAA;AAGT,eAAO,CAAC,IAAI,eAAW,oBAAoB,wBAAwB,IAAI,eAAW,kBAAkB;AAAA;AAAA,OASrG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AAEvB,YAAI,KAAK,oBAAoB,MAAM;AACjC,iBAAO;AAAA;AAGT,YAAI,wBAAwB,KAAK,iBAC7B,mBAAmB,sBAAsB,MACzC,iBAAiB,sBAAsB;AAE3C,YAAI,iBAAiB,KAAK,sBAAsB,KAAK;AACrD,YAAI,oBAAoB,KAAK,yBAAyB,KAAK;AAC3D,YAAI,kBAAkB,KAAK,yBAAyB,kBAAkB,gBAAgB,gBAAgB;AACtG,YAAI,gBAAgB,KAAK,yBAAyB,gBAAgB,kBAAkB,CAAC,gBAAgB,CAAC;AAGtG,YAAI,oBAAoB,QAAQ,kBAAkB,MAAM;AACtD,cAAI,wBAAwB,KAAK,SAAS,SAAS;AACnD,cAAI,YAAY;AAGhB,cAAI,uBAAuB;AACzB,gBAAI,wBAAwB,KAAK,uBAAuB,kBAAkB,gBAAgB,gBAAgB,oBACtG,yBAAyB,iBAAe,uBAAuB,IAC/D,wBAAwB,uBAAuB,IAC/C,sBAAsB,uBAAuB;AAEjD,wBAAY,KAAK,0BAA0B,uBAAuB;AAAA;AAGpE,eAAK,YAAY;AAAA,eACZ;AACL,eAAK,YAAY,KAAK,0BAA0B,iBAAiB;AAAA;AAGnE,eAAO;AAAA;AAAA,OAcR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,kBAAkB;AAElD,YAAI,iBAAiB,KAAK,sBAAsB;AAChD,YAAI,oBAAoB,KAAK,yBAAyB;AACtD,YAAI,iBAAiB,iBAAiB,KAAK,QAAQ;AACnD,YAAI,eAAe,iBAAiB,GAAG,QAAQ;AAC/C,YAAI,wBAAwB,KAAK,yBAAyB,gBAAgB,cAAc,gBAAgB;AAExG,YAAI,0BAA0B,MAAM;AAElC,cAAI,KAAK,cAAc,MAAM;AAC3B,gBAAI,4BAA4B,KAAK,SAAS,yBAAyB;AACvE,iBAAK,YAAY,IAAI,cAAU;AAAA;AAKjC,2BAAiB,aAAa;AAC9B,iBAAO;AAAA;AAIT,yBAAiB,aAAa,iBAAiB;AAC/C,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,kBAAkB,KAAK,WACvB,QAAO,gBAAgB,MACvB,KAAK,gBAAgB;AACzB,YAAI,iBAAiB,MAAK,QAAQ,QAAQ,GAAG,QAAQ;AACrD,YAAI,oBAAoB,MAAK,QAAQ,QAAQ,GAAG,QAAQ;AACxD,YAAI,gBAAgB,IAAI,eAAW,iBAAiB,OAAO,KAAK,IAAI,MAAK,KAAK,GAAG,MAAM,oBAAoB,OAAO,KAAK,IAAI,MAAK,KAAK,GAAG;AACxI,YAAI,oBAAoB,IAAI,eAAW,iBAAiB,OAAO,KAAK,IAAI,MAAK,KAAK,GAAG,MAAM,oBAAoB,OAAO,KAAK,IAAI,MAAK,KAAK,GAAG;AAC5I,eAAO,CAAC,cAAc,KAAK,cAAc,KAAK,kBAAkB,KAAK,kBAAkB;AAAA;AAAA,OAQxF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,UAAU,KAAK,SAAS,yBAAyB,KAAK,UAAU;AACpE,YAAI,cAAc,KAAK,SAAS,yBAAyB,KAAK,UAAU;AACxE,eAAO,CAAC,QAAQ,KAAK,QAAQ,KAAK,YAAY,KAAK,YAAY;AAAA;AAAA,OAahE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC,kBAAkB,gBAAgB;AAC1E,YAAI,uBAAuB,KAAK,SAAS,yBAAyB;AAClE,YAAI,qBAAqB,KAAK,SAAS,yBAAyB;AAChE,eAAO,IAAI,cAAU,sBAAsB,sBAAsB;AAAA;AAAA,OAWlE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,WAAW;AAC/C,YAAI,UAAU,KAAK,MAAM,UAAU,GAAG,KAAK;AACzC,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,WAAW;AAClD,YAAI,UAAU,KAAK,MAAM,UAAU,GAAG,KAAK;AACzC,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;AAEF,MAAO,0BAAQ;;;ACvaf,MAAI,YAAY,CAAC;AAEjB,oBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,yBAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,SAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,yBAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,SAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,4BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,oCAAkC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS,8BAA8B,QAAQ;AAAW,QAAI,KAAK;AAAG,QAAI,OAAO,uBAAuB;AAAE,UAAI,mBAAmB,OAAO,sBAAsB;AAAS,WAAK,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAAE,cAAM,iBAAiB;AAAI,YAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,YAAI,CAAC,OAAO,UAAU,qBAAqB,KAAK,QAAQ;AAAM;AAAU,eAAO,OAAO,OAAO;AAAA;AAAA;AAAU,WAAO;AAAA;AAEne,yCAAuC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS;AAAI,QAAI,aAAa,OAAO,KAAK;AAAS,QAAI,KAAK;AAAG,SAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAAE,YAAM,WAAW;AAAI,UAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,aAAO,OAAO,OAAO;AAAA;AAAQ,WAAO;AAAA;AAU1S,2BAAyB,MAAM;AAC7B,QAAI,wBAAwB,KAAK,uBAC7B,cAAc,yBAAyB,MAAM;AAEjD,QAAI,IAAI,IAAI,wBAAgB,cAAc,cAAc;AAAA,MACtD,0BAA0B;AAAA,OACzB,cAAc,IAAI;AAAA,MACnB,eAAe;AAAA;AAEjB,WAAO;AAAA;AAGT,MAAO,uBAAQ;;;AChCf,MAAI,aAAY,CAAC,cAAc;AAE/B,oBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,0BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,SAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,yBAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,SAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,4BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,qCAAkC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS,+BAA8B,QAAQ;AAAW,QAAI,KAAK;AAAG,QAAI,OAAO,uBAAuB;AAAE,UAAI,mBAAmB,OAAO,sBAAsB;AAAS,WAAK,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAAE,cAAM,iBAAiB;AAAI,YAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,YAAI,CAAC,OAAO,UAAU,qBAAqB,KAAK,QAAQ;AAAM;AAAU,eAAO,OAAO,OAAO;AAAA;AAAA;AAAU,WAAO;AAAA;AAEne,0CAAuC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS;AAAI,QAAI,aAAa,OAAO,KAAK;AAAS,QAAI,KAAK;AAAG,SAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAAE,YAAM,WAAW;AAAI,UAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,aAAO,OAAO,OAAO;AAAA;AAAQ,WAAO;AAAA;AAa1S,4BAAyB,MAAM;AAC7B,QAAI,aAAa,KAAK,YAClB,oBAAoB,KAAK,mBACzB,cAAc,0BAAyB,MAAM;AAEjD,QAAI,IAAI,IAAI,wBAAgB,eAAc,eAAc;AAAA,MACtD,WAAW;AAAA,MACX,mBAAmB;AAAA,MACnB,YAAY,KAAK,IAAI,YAAY;AAAA,MACjC,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,eAAe;AAAA;AAAA,OAEhB,cAAc,IAAI;AAAA,MACnB,eAAe;AAAA;AAEjB,WAAO;AAAA;AAGT,MAAO,eAAQ;;;AC3Cf,MAAI,aAAY,CAAC;AAEjB,oBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,0BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,SAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,yBAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,SAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,4BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,qCAAkC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS,+BAA8B,QAAQ;AAAW,QAAI,KAAK;AAAG,QAAI,OAAO,uBAAuB;AAAE,UAAI,mBAAmB,OAAO,sBAAsB;AAAS,WAAK,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAAE,cAAM,iBAAiB;AAAI,YAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,YAAI,CAAC,OAAO,UAAU,qBAAqB,KAAK,QAAQ;AAAM;AAAU,eAAO,OAAO,OAAO;AAAA;AAAA;AAAU,WAAO;AAAA;AAEne,0CAAuC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS;AAAI,QAAI,aAAa,OAAO,KAAK;AAAS,QAAI,KAAK;AAAG,SAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAAE,YAAM,WAAW;AAAI,UAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,aAAO,OAAO,OAAO;AAAA;AAAQ,WAAO;AAAA;AAa1S,4BAAyB,MAAM;AAC7B,QAAI,oBAAoB,KAAK,mBACzB,cAAc,0BAAyB,MAAM;AAEjD,QAAI,IAAI,IAAI,wBAAgB,eAAc,eAAc;AAAA,MACtD,WAAW;AAAA,MACX,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,eAAe;AAAA;AAAA,OAEhB,cAAc,IAAI;AAAA,MACnB,eAAe;AAAA;AAEjB,WAAO;AAAA;AAGT,MAAO,eAAQ;;;ACxCf,MAAI,aAAY,CAAC,UAAU;AAE3B,oBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,0BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,SAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,yBAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,SAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,4BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,qCAAkC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS,+BAA8B,QAAQ;AAAW,QAAI,KAAK;AAAG,QAAI,OAAO,uBAAuB;AAAE,UAAI,mBAAmB,OAAO,sBAAsB;AAAS,WAAK,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAAE,cAAM,iBAAiB;AAAI,YAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,YAAI,CAAC,OAAO,UAAU,qBAAqB,KAAK,QAAQ;AAAM;AAAU,eAAO,OAAO,OAAO;AAAA;AAAA;AAAU,WAAO;AAAA;AAEne,0CAAuC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS;AAAI,QAAI,aAAa,OAAO,KAAK;AAAS,QAAI,KAAK;AAAG,SAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAAE,YAAM,WAAW;AAAI,UAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,aAAO,OAAO,OAAO;AAAA;AAAQ,WAAO;AAAA;AAc1S,4BAAyB,MAAM;AAC7B,QAAI,SAAS,KAAK,QACd,kBAAkB,KAAK,iBACvB,cAAc,0BAAyB,MAAM;AAEjD,QAAI,IAAI,IAAI,wBAAgB,eAAc,eAAc,eAAc,IAAI,SAAS,cAAc,IAAI;AAAA,MACnG,eAAe;AAAA,QACb;AACJ,WAAO;AAAA;AAGT,MAAO,0BAAQ;;;AC3Cf,MAAI,MAAI;AACR,MAAI,SAAS;AAKb,MAAE,EAAE,QAAQ,UAAU,MAAM,MAAM,QAAQ,OAAO,WAAW,UAAU;AAAA,IACpE;AAAA;;;ACPF,oBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,0BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,SAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,0BAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,SAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAoB3M,4BAAyB,MAAM;AAC7B,QAAI,cAAc,OAAO,OAAO,IAAI;AACpC,QAAI,IAAI,IAAI,wBAAgB,eAAc,eAAc;AAAA,MACtD,WAAW;AAAA,MACX,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA;AAAA,OAER,cAAc,IAAI;AAAA,MACnB,eAAe;AAAA;AAEjB,WAAO;AAAA;AAGT,MAAO,eAAQ;;;AC9Bf,MAAI,aAAY,CAAC,mBAAmB,gBAAgB;AAEpD,oBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,0BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,SAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,0BAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,SAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,qCAAkC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS,+BAA8B,QAAQ;AAAW,QAAI,KAAK;AAAG,QAAI,OAAO,uBAAuB;AAAE,UAAI,mBAAmB,OAAO,sBAAsB;AAAS,WAAK,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAAE,cAAM,iBAAiB;AAAI,YAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,YAAI,CAAC,OAAO,UAAU,qBAAqB,KAAK,QAAQ;AAAM;AAAU,eAAO,OAAO,OAAO;AAAA;AAAA;AAAU,WAAO;AAAA;AAEne,0CAAuC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS;AAAI,QAAI,aAAa,OAAO,KAAK;AAAS,QAAI,KAAK;AAAG,SAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAAE,YAAM,WAAW;AAAI,UAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,aAAO,OAAO,OAAO;AAAA;AAAQ,WAAO;AAAA;AAe1S,4BAAyB,MAAM;AAC7B,QAAI,kBAAkB,KAAK,iBACvB,eAAe,KAAK,cACpB,kBAAkB,KAAK,iBACvB,cAAc,0BAAyB,MAAM;AAEjD,QAAI,IAAI,IAAI,wBAAgB,eAAc,eAAc;AAAA,MACtD,WAAW;AAAA,MACX,0BAA0B;AAAA,MAC1B,uBAAuB;AAAA,MACvB,0BAA0B;AAAA,OACzB,cAAc,IAAI;AAAA,MACnB,4BAA4B;AAAA,MAC5B,eAAe;AAAA;AAEjB,WAAO;AAAA;AAGT,MAAO,iBAAQ;;;AC3Cf,oBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,0BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,SAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,0BAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,SAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAW3M,MAAI,mBAAkB,eAAe;AAArC,MACI,YAAW,iBAAgB;AAD/B,MAEI,WAAU,iBAAgB;AAE9B,YAAS,oBAAoB;AAC7B,YAAS,WAAW;AACpB,YAAS,WAAW;AACpB,YAAS,uBAAuB;AAChC,YAAS,WAAW;AACpB,YAAS,aAAa;AAOtB,4BAAyB,eAAe,SAAS;AAC/C,WAAO,SAAQ,eAAe,eAAc;AAAA,MAC1C,MAAM;AAAA,OACL;AAAA;;;AX1CL,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,oBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,0BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,SAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,0BAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,SAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAwB3M,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAqB/Q,MAAI,YAAyB,yBAAU,kBAAkB;AACvD,wBAAmB,SAAS;AAC1B,wBAAgB,MAAM;AAOtB,WAAK,UAAU;AAYf,WAAK,aAAa;AAQlB,WAAK,OAAO,iBAAgB,WAAW;AAQvC,WAAK,OAAO,iBAAgB,WAAW;AAQvC,WAAK,QAAQ,oBAAI;AAQjB,WAAK,UAAU,oBAAI;AASnB,WAAK,gBAAgB,oBAAI;AAOzB,WAAK,mBAAmB;AAAA;AAW1B,mBAAa,YAAW,CAAC;AAAA,MACvB,KAAK;AAAA,MACL,OAAO,sBAAsB,eAAe,QAAQ;AAClD,YAAI,OAAO;AAEX,YAAI,kBAAkB,WAAW;AAC/B,iBAAO;AAAA;AAGT,YAAI,mBAAmB,KAAK,QAAQ,sBAAsB,OAAO,KAAK,OAAO;AAE7E,YAAI,OAAO,qBAAqB,UAAU;AACxC,6BAAmB,CAAC;AAAA;AAGtB,eAAO,qBAAqB,SAAS,MAAM,QAAQ,qBAAqB,CAAC,iBAAiB,SAAS;AAAA;AAAA,OASpG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,aAAK,aAAa;AAClB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAO,KAAK;AAAA;AAAA,OASb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,aAAa,KAAK;AACtB,YAAI;AAEJ,YAAI,KAAK,MAAM,IAAI,aAAa;AAC9B,iBAAO,KAAK,MAAM,IAAI;AAAA,eACjB;AACL,iBAAO,iBAAgB,WAAW,eAAc;AAAA,YAC9C;AAAA,aACC,KAAK;AACR,eAAK,MAAM,IAAI,YAAY;AAAA;AAG7B,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,qBAAmB,KAAK,MAAM;AAAA;AAAA,OAStC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,aAAa,KAAK;AACtB,YAAI;AAEJ,YAAI,KAAK,QAAQ,IAAI,aAAa;AAChC,mBAAS,KAAK,QAAQ,IAAI;AAAA,eACrB;AACL,mBAAS,iBAAgB,aAAa,eAAc,IAAI,KAAK;AAC7D,eAAK,QAAQ,IAAI,YAAY;AAAA;AAG/B,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,eAAO,qBAAmB,KAAK,QAAQ;AAAA;AAAA,OASxC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,YAAI,aAAa,KAAK;AACtB,YAAI;AAEJ,YAAI,KAAK,cAAc,IAAI,aAAa;AACtC,mBAAS,KAAK,cAAc,IAAI;AAAA,eAC3B;AACL,mBAAS,iBAAgB,oBAAoB,eAAc,IAAI,KAAK;AACpE,eAAK,cAAc,IAAI,YAAY;AAAA;AAGrC,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,eAAO,qBAAmB,KAAK,cAAc;AAAA;AAAA,OAQ9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,eAAO,qBAAmB,KAAK,iBAAiB;AAAA;AAAA,OAQjD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,mBAAmB;AACpD,aAAK,iBAAiB,KAAK,iBAAgB,uBAAuB,eAAc,eAAc,IAAI,KAAK,UAAU;AAAA;AAAA,OAMlH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,KAAK;AACV,aAAK,KAAK;AACV,kBAAU,KAAK,MAAM,UAAU,SAAU,WAAW;AAClD,iBAAO,KAAK,UAAU;AAAA;AAExB,kBAAU,KAAK,QAAQ,UAAU,SAAU,WAAW;AACpD,iBAAO,KAAK,UAAU;AAAA;AAExB,kBAAU,KAAK,cAAc,UAAU,SAAU,WAAW;AAC1D,iBAAO,KAAK,UAAU;AAAA;AAAA;AAAA,OASzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,eAAO,CAAC,KAAK,MAAM,KAAK,MAAM,OAAO,qBAAmB,KAAK,MAAM,WAAW,qBAAmB,KAAK,QAAQ,WAAW,qBAAmB,KAAK,cAAc,WAAW,qBAAmB,KAAK,mBAAmB,OAAO;AAAA;AAAA;AAIhO,WAAO;AAAA,IACP,OAAO;AAET,MAAO,oBAAQ;;;AY9Vf,gCAAO;AAkBP,mCAAO;;;ACpBP,mCAAO;AAMP,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAW/Q,MAAI,iBAA8B,yBAAU,kBAAkB;AAC5D,+BAA0B;AACxB,wBAAgB,MAAM;AAOtB,WAAK,SAAS;AAAA;AAShB,mBAAa,iBAAgB,CAAC;AAAA,MAC5B,KAAK;AAAA,MACL,OAAO,oBAAmB;AACxB,eAAO,KAAK,WAAW;AAAA;AAAA,OAUxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,aAAa,QAAQ;AAC1B,aAAK;AACL,aAAK,OAAO,KAAK,IAAI,cAAU;AAC/B,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAa,QAAQ;AAC1B,aAAK,OAAO,KAAK,IAAI,cAAU;AAC/B,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,eAAe;AACpB,aAAK,OAAO;AACZ,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAO,KAAK,YAAY;AAAA;AAAA,OAQzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,KAAK,YAAY;AAAA;AAAA,OAUzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAkB,QAAQ;AAC/B,eAAO,KAAK,OAAO,KAAK,SAAU,WAAW;AAC3C,iBAAO,UAAU,SAAS;AAAA;AAAA;AAAA,OAS7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,OAAO,SAAS;AACrB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,eAAO,KAAK,OAAO;AAAA;AAAA,OASpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,UAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,YAAI,aAAa,KAAK,SAAS,UAAS;AACxC,YAAI;AAEJ,YAAI,cAAc,GAAG;AACnB,sBAAY,KAAK,OAAO;AAAA;AAG1B,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,eAAO,KAAK,OAAO,OAAO;AAAA;AAAA;AAI9B,WAAO;AAAA,IACP,OAAO;AAET,MAAO,iBAAQ;;;AClLf,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAe/Q,MAAI,iBAA8B,2BAAY;AAC5C,6BAAwB,OAAO,SAAS;AACtC,wBAAgB,MAAM;AAOtB,WAAK,QAAQ;AAQb,WAAK,UAAU;AAAA;AAajB,mBAAa,iBAAgB,CAAC;AAAA,MAC5B,KAAK;AAAA,MACL,OAAO,wBAAwB,UAAU,UAAU;AACjD,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,YAAI,QAAQ,IAAI,eAAW,UAAU;AACrC,YAAI,kBAAkB,KAAK,MAAM,UAAU;AAE3C,YAAI,wBAAwB,KAAK,QAAQ,yBAAyB,kBAC9D,gBAAgB,sBAAsB,KACtC,mBAAmB,sBAAsB;AAE7C,YAAI,eAAe;AACnB,YAAI,kBAAkB;AACtB,YAAI,kBAAkB;AACtB,aAAK,cAAc,wBAAwB;AAE3C,YAAI,kBAAkB,QAAQ,qBAAqB,MAAM;AACvD,cAAI,YAAY,KAAK,QAAQ;AAC7B,cAAI,YAAY,KAAK,QAAQ;AAC7B,cAAI,kBAAkB,KAAK,QAAQ;AACnC,cAAI,eAAe,KAAK,QAAQ;AAChC,cAAI,eAAe,KAAK,QAAQ;AAChC,cAAI,cAAc,KAAK,QAAQ;AAC/B,cAAI,cAAc,KAAK,QAAQ;AAE/B,cAAI,gBAAgB,WAAW,YAAY,GAAG;AAC5C,gBAAI,SAAS,eAAe,KAAK,CAAE,oBAAmB,iBAAiB,YAAY,kBAAkB,IAAI;AACvG,mBAAK,cAAc,oBAAoB;AACvC,0BAAY,KAAK,QAAQ;AAAA,uBAChB,aAAa;AACtB,oBAAM,MAAM,IAAI;AAChB,oBAAM,MAAM,mBAAmB,MAAM,QAAQ,YAAY,IAAI,IAAI,YAAY;AAAA;AAAA,qBAEtE,eAAe,gBAAgB,MAAM,MAAM,KAAK,mBAAmB,MAAM,OAAO,GAAG;AAC5F,kBAAM,MAAM,YAAY;AACxB,kBAAM,MAAM,mBAAmB,MAAM,QAAQ,IAAI,YAAY,IAAI;AAAA;AAGnE,cAAI,mBAAmB,MAAM,MAAM,YAAY,GAAG;AAChD,gBAAI,SAAS,eAAe,GAAG;AAC7B,mBAAK,cAAc,oBAAoB;AACvC,0BAAY,KAAK,QAAQ;AAAA,uBAChB,aAAa;AACtB,oBAAM,MAAM,gBAAgB,MAAM,QAAQ,YAAY,IAAI,IAAI,YAAY;AAC1E,oBAAM,MAAM,IAAI;AAAA;AAAA,qBAET,eAAe,mBAAmB,MAAM,MAAM,KAAK,gBAAgB,MAAM,OAAO,GAAG;AAC5F,kBAAM,MAAM,gBAAgB,MAAM,QAAQ,IAAI,YAAY,IAAI;AAC9D,kBAAM,MAAM,YAAY;AAAA;AAG1B,cAAI,SAAS,IAAI,eAAW,gBAAgB,MAAM,KAAK,mBAAmB,MAAM;AAChF,4BAAkB;AAClB,4BAAkB;AAElB,cAAI,OAAO,MAAM,GAAG;AAClB,8BAAkB;AAClB,mBAAO,MAAM;AAAA,qBACJ,OAAO,MAAM,KAAK,OAAO,OAAO,WAAW;AACpD,8BAAkB;AAClB,mBAAO,MAAM,YAAY;AAAA;AAG3B,cAAI,OAAO,MAAM,GAAG;AAClB,8BAAkB;AAClB,mBAAO,MAAM;AAAA,qBACJ,OAAO,MAAM,KAAK,OAAO,OAAO,WAAW;AACpD,8BAAkB;AAClB,mBAAO,MAAM,YAAY;AAAA;AAG3B,yBAAe,KAAK,QAAQ,yBAAyB;AAAA;AAGvD,aAAK,cAAc,uBAAuB,cAAc,iBAAiB;AACzE,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,UAAU,UAAU;AAC/C,YAAI,QAAQ,IAAI,eAAW,UAAU;AACrC,YAAI,YAAY,KAAK,MAAM;AAC3B,YAAI,eAAe,UAAU;AAC7B,YAAI,kBAAkB;AACtB,YAAI,kBAAkB;AACtB,aAAK,cAAc,sBAAsB;AAEzC,YAAI,yBAAyB,KAAK,QAAQ,yBAAyB,UAAU,YACzE,eAAe,uBAAuB,KACtC,eAAe,uBAAuB;AAG1C,YAAI,iBAAiB,QAAQ,iBAAiB,MAAM;AAClD,cAAI,YAAY,KAAK,QAAQ;AAC7B,cAAI,YAAY,KAAK,QAAQ;AAE7B,cAAI,yBAAyB,KAAK,QAAQ,yBAAyB,UAAU,KACzE,QAAQ,uBAAuB,KAC/B,QAAQ,uBAAuB;AAEnC,cAAI,SAAS,IAAI,eAAW,QAAQ,MAAM,KAAK,QAAQ,MAAM;AAC7D,4BAAkB;AAClB,4BAAkB;AAElB,cAAI,OAAO,MAAM,GAAG;AAClB,8BAAkB;AAClB,mBAAO,MAAM;AAAA,qBACJ,OAAO,MAAM,KAAK,OAAO,OAAO,WAAW;AACpD,8BAAkB;AAClB,mBAAO,MAAM,YAAY;AAAA;AAG3B,cAAI,OAAO,MAAM,GAAG;AAClB,8BAAkB;AAClB,mBAAO,MAAM;AAAA,qBACJ,OAAO,MAAM,KAAK,OAAO,OAAO,WAAW;AACpD,8BAAkB;AAClB,mBAAO,MAAM,YAAY;AAAA;AAG3B,yBAAe,KAAK,QAAQ,yBAAyB;AAAA;AAGvD,aAAK,cAAc,qBAAqB,cAAc,iBAAiB;AACvE,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;AAGT,QAAM,gBAAgB;AACtB,MAAO,yBAAQ;;;AC1Kf,mCAAO;AASP,gCAAO;AA5BP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAE/D,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAoBlU,MAAI,8BAA8B;AAClC,MAAI,uBAAuB;AAC3B,MAAI,uBAAuB;AAC3B,MAAI,wBAAwB;AAC5B,MAAI,kBAAkB,CAAC,uBAAuB;AACrD,MAAI,qBAAqB,CAAC,CAAC,WAAW,CAAC,UAAU,WAAW,CAAC,UAAU,cAAc,CAAC,UAAU,UAAU;AAC1G,MAAI,WAAW,OAAO;AACtB,MAAI,YAAY,OAAO;AAYhB,+BAA6B,iBAAiB;AACnD,QAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEtF,QAAI,gBAAgB,YAAY,gBAAgB,WAAW;AACzD,YAAM,IAAI,MAAM;AAAA;AAGlB,QAAI,WAAU,MAAM,QAAQ;AAC5B,QAAI,aAAa,gBAAgB;AACjC,QAAI,SAAS;AAEb,QAAI,UAAS;AACX,UAAI,YAAY,gBAAgB;AAEhC,UAAI,gBAAgB,WAAW,GAAG;AAChC,iBAAS;AAAA,iBACA,cAAc,qBAAqB,eAAW;AACvD,iBAAS;AAAA,iBACA,cAAc,MAAM,QAAQ,YAAY;AACjD,iBAAS,oBAAoB,WAAW;AAAA,iBAC/B,gBAAgB,UAAU,KAAK,gBAAgB,UAAU,GAAG;AACrE,YAAI,cAAc,CAAC,gBAAgB,KAAK,SAAU,OAAO,QAAO;AAC9D,iBAAO,CAAC,mBAAmB,QAAO,SAAS,UAAQ;AAAA;AAGrD,YAAI,aAAa;AACf,mBAAS;AAAA;AAAA;AAAA;AAKf,WAAO;AAAA;AAeF,qCAAmC,MAAM;AAC9C,QAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,IAC3E,qBAAqB,KAAK,eAC1B,gBAAgB,uBAAuB,SAAS,QAAQ,oBACxD,YAAY,KAAK;AAErB,QAAI,CAAC,gBAAgB,SAAS,OAAO;AACnC,YAAM,IAAI,MAAM;AAAA;AAGlB,WAAO,SAAU,WAAW;AAC1B,UAAI,eAAe,SAAS;AAC5B,UAAI,WAAW,eAAe,UAAU,KAAK,MAAM,UAAU;AAC7D,UAAI,cAAc,eAAe,UAAU,KAAK,MAAM,UAAU;AAChE,UAAI,SAAS,eAAe,UAAU,GAAG,MAAM,UAAU;AACzD,UAAI,YAAY,eAAe,UAAU,GAAG,MAAM,UAAU;AAE5D,UAAI,OAAO,cAAc,YAAY;AACnC,YAAI,OAAO,gBAAgB,UAAU;AACnC,wBAAc,UAAU;AAAA;AAG1B,YAAI,OAAO,cAAc,UAAU;AACjC,sBAAY,UAAU;AAAA;AAAA;AAI1B,UAAI,YAAY,SAAS;AACvB,iBAAS;AAAA;AAGX,UAAI,YAAY,YAAY;AAC1B,oBAAY;AAAA;AAGd,UAAI,CAAC,eAAe;AAClB,YAAI,eAAe;AACnB,YAAI,kBAAkB;AACtB,YAAI,aAAa;AACjB,YAAI,gBAAgB;AACpB,mBAAW,KAAK,IAAI,cAAc;AAClC,sBAAc,KAAK,IAAI,iBAAiB;AACxC,iBAAS,KAAK,IAAI,cAAc;AAChC,oBAAY,KAAK,IAAI,iBAAiB;AAAA;AAGxC,aAAO,CAAC,UAAU,aAAa,QAAQ;AAAA;AAAA;AAgBpC,8CAA4C,iBAAiB;AAClE,QAAI,gBAAgB,oBAAoB;AAExC,QAAI,kBAAkB,+BAA+B,kBAAkB,sBAAsB;AAC3F,aAAO;AAAA;AAGT,QAAI,4BAA4B,0BAA0B;AAC1D,QAAI,mBAAmB,oBAAI;AAE3B,cAAU,iBAAiB,SAAU,WAAW;AAC9C,UAAI,wBAAwB,0BAA0B,YAClD,yBAAyB,iBAAe,uBAAuB,IAC/D,cAAc,uBAAuB,IACrC,YAAY,uBAAuB;AAEvC,UAAI,uBAAuB,KAAK,IAAI,aAAa;AACjD,UAAI,SAAS,YAAY,uBAAuB;AAChD,gBAAU,MAAM,KAAK,IAAI,MAAM,SAAS,SAAU,GAAG,GAAG;AACtD,eAAO,uBAAuB;AAAA,UAC5B,SAAU,QAAO;AACnB,YAAI,CAAC,iBAAiB,IAAI,SAAQ;AAChC,2BAAiB,IAAI;AAAA;AAAA;AAAA;AAK3B,QAAI,iBAAiB,MAAM,KAAK,kBAAkB,KAAK,SAAU,GAAG,GAAG;AACrE,aAAO,IAAI;AAAA;AAEb,QAAI,yBAAyB,YAAY,gBAAgB,SAAU,KAAK,mBAAmB,QAAO,OAAO;AACvG,UAAI,WAAU,KAAK,sBAAsB,MAAM,SAAQ,KAAK,GAAG;AAC7D,YAAI,IAAI,SAAS,GAAG,MAAM;AAAA,aACrB;AACL,YAAI,KAAK,CAAC,mBAAmB;AAAA;AAG/B,aAAO;AAAA,OACN;AACH,WAAO;AAAA;AAeF,2CAAyC,iBAAiB;AAC/D,QAAI,gBAAgB,oBAAoB;AAExC,QAAI,kBAAkB,+BAA+B,kBAAkB,sBAAsB;AAC3F,aAAO;AAAA;AAGT,QAAI,4BAA4B,0BAA0B;AAC1D,QAAI,mBAAmB,oBAAI;AAE3B,cAAU,iBAAiB,SAAU,WAAW;AAC9C,UAAI,yBAAyB,0BAA0B,YACnD,yBAAyB,iBAAe,wBAAwB,IAChE,WAAW,uBAAuB,IAClC,SAAS,uBAAuB;AAEpC,UAAI,oBAAoB,KAAK,IAAI,UAAU;AAC3C,UAAI,SAAS,SAAS,oBAAoB;AAC1C,gBAAU,MAAM,KAAK,IAAI,MAAM,SAAS,SAAU,GAAG,GAAG;AACtD,eAAO,oBAAoB;AAAA,UACzB,SAAU,QAAO;AACnB,YAAI,CAAC,iBAAiB,IAAI,SAAQ;AAChC,2BAAiB,IAAI;AAAA;AAAA;AAAA;AAK3B,QAAI,iBAAiB,MAAM,KAAK,kBAAkB,KAAK,SAAU,GAAG,GAAG;AACrE,aAAO,IAAI;AAAA;AAEb,QAAI,sBAAsB,YAAY,gBAAgB,SAAU,KAAK,UAAU,QAAO,OAAO;AAC3F,UAAI,WAAU,KAAK,aAAa,MAAM,SAAQ,KAAK,GAAG;AACpD,YAAI,IAAI,SAAS,GAAG,MAAM;AAAA,aACrB;AACL,YAAI,KAAK,CAAC,UAAU;AAAA;AAGtB,aAAO;AAAA,OACN;AACH,WAAO;AAAA;AAWF,wBAAsB,OAAO;AAClC,QAAI,qBAAqB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC7F,WAAO,OAAO,UAAU,YAAY,SAAS,KAAK,QAAQ;AAAA;;;AHjQ5D,MAAI;AAEJ,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAE/D,mCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAe1K,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAmB/Q,MAAI,aAAyB,2BAAY;AACvC,wBAAmB,UAAU,YAAY;AACvC,UAAI,QAAQ;AAEZ,wBAAgB,MAAM;AAOtB,WAAK,WAAW;AAOhB,WAAK,aAAa;AAOlB,WAAK,aAAa;AAOlB,WAAK,mBAAmB;AAQxB,WAAK,sBAAsB,oBAAI;AAQ/B,WAAK,yBAAyB,oBAAI;AAOlC,WAAK,gBAAgB,IAAI;AAOzB,WAAK,YAAY,IAAI,kBAAU;AAAA,QAC7B,iBAAiB,SAAS;AAAA,QAC1B,uBAAuB,SAAS;AAAA,QAChC,cAAc,SAAS;AAAA,QACvB,iBAAiB,SAAS;AAAA,QAC1B,uBAAuB,+BAA+B,KAAK,QAAQ;AACjE,iBAAO,MAAM,WAAW,wBAAwB,KAAK;AAAA;AAAA,QAEvD,mBAAmB,6BAA6B;AAC9C,iBAAO,MAAM,oBAAoB,MAAM,OAAO;AAAA;AAAA,QAEhD,mBAAmB,6BAA6B;AAC9C,iBAAO,MAAM,oBAAoB,MAAM,OAAO;AAAA;AAAA,QAEhD,0BAA0B,kCAAkC,QAAQ;AAClE,iBAAO,MAAM,WAAW,yBAAyB;AAAA;AAAA,QAEnD,0BAA0B,kCAAkC,QAAQ;AAClE,iBAAO,MAAM,WAAW,yBAAyB;AAAA;AAAA;AASrD,WAAK,iBAAiB,IAAI,uBAAe,KAAK,eAAe;AAAA,QAC3D,WAAW,qBAAqB;AAC9B,iBAAO,MAAM,WAAW;AAAA;AAAA,QAE1B,WAAW,qBAAqB;AAC9B,iBAAO,MAAM,WAAW;AAAA;AAAA,QAE1B,0BAA0B,kCAAkC,QAAQ;AAClE,iBAAO,MAAM,WAAW,yBAAyB;AAAA;AAAA,QAEnD,0BAA0B,kCAAkC,QAAQ;AAClE,iBAAO,MAAM,WAAW,yBAAyB;AAAA;AAAA,QAEnD,iBAAiB,2BAA2B;AAC1C,iBAAO,SAAS;AAAA;AAAA,QAElB,cAAc,wBAAwB;AACpC,iBAAO,SAAS;AAAA;AAAA,QAElB,cAAc,wBAAwB;AACpC,iBAAO,SAAS;AAAA;AAAA,QAElB,aAAa,uBAAuB;AAClC,iBAAO,SAAS;AAAA;AAAA,QAElB,aAAa,uBAAuB;AAClC,iBAAO,SAAS;AAAA;AAAA;AAGpB,WAAK,eAAe,aAAa,wBAAwB,WAAY;AACnE,iBAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,eAAK,QAAQ,UAAU;AAAA;AAGzB,eAAO,MAAM,cAAc,MAAM,OAAO,CAAC,8BAA8B,OAAO;AAAA;AAEhF,WAAK,eAAe,aAAa,uBAAuB,WAAY;AAClE,iBAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC7F,eAAK,SAAS,UAAU;AAAA;AAG1B,eAAO,MAAM,cAAc,MAAM,OAAO,CAAC,6BAA6B,OAAO;AAAA;AAE/E,WAAK,eAAe,aAAa,sBAAsB,WAAY;AACjE,iBAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC7F,eAAK,SAAS,UAAU;AAAA;AAG1B,eAAO,MAAM,cAAc,MAAM,OAAO,CAAC,4BAA4B,OAAO;AAAA;AAE9E,WAAK,eAAe,aAAa,qBAAqB,WAAY;AAChE,iBAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC7F,eAAK,SAAS,UAAU;AAAA;AAG1B,eAAO,MAAM,cAAc,MAAM,OAAO,CAAC,2BAA2B,OAAO;AAAA;AAE7E,WAAK,eAAe,aAAa,oBAAoB,WAAY;AAC/D,iBAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC7F,eAAK,SAAS,UAAU;AAAA;AAG1B,eAAO,MAAM,cAAc,MAAM,OAAO,CAAC,oBAAoB,OAAO;AAAA;AAEtE,WAAK,eAAe,aAAa,oBAAoB,WAAY;AAC/D,iBAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC7F,eAAK,SAAS,UAAU;AAAA;AAG1B,eAAO,MAAM,cAAc,MAAM,OAAO,CAAC,oBAAoB,OAAO;AAAA;AAAA;AAUxE,mBAAa,YAAW,CAAC;AAAA,MACvB,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,eAAO,KAAK;AAAA;AAAA,OAMb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,aAAa;AAAA;AAAA,OAMnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,aAAK,cAAc,0BAA0B,MAAM,KAAK,KAAK;AAC7D,aAAK,aAAa;AAAA;AAAA,OAQnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,eAAO,KAAK;AAAA;AAAA,OAab;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ,mBAAmB;AACvD,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACnF,YAAI,iBAAiB,KAAK,SAAS,kBAAkB;AACrD,YAAI,sBAAsB,YAAY,qBAAqB,qBAAqB;AAChF,YAAI,gBAAgB,OAAO,MAAM;AACjC,YAAI,mBAAmB,OAAO,MAAM;AACpC,YAAI,mBAAmB,iBAAiB;AAGxC,YAAI,cAAc,OAAO;AACzB,aAAK,mBAAmB;AACxB,aAAK,cAAc,sBAAsB,OAAO,WAAW,SAAS,KAAK;AAEzE,YAAI,CAAC,kBAAkB,kBAAkB,CAAC,uBAAuB,YAAY,oBAAoB;AAC/F,eAAK,cAAc;AAAA;AAGrB,aAAK,cAAc,IAAI;AAEvB,YAAI,KAAK,oBAAoB,GAAG;AAC9B,eAAK,oBAAoB;AACzB,eAAK,uBAAuB;AAAA;AAG9B,YAAI,CAAC,oBAAoB,kBAAkB;AACzC,eAAK,oBAAoB,IAAI,KAAK;AAAA;AAGpC,YAAI,CAAC,oBAAoB,eAAe;AACtC,eAAK,uBAAuB,IAAI,KAAK;AAAA;AAGvC,YAAI,CAAC,UAAU;AACb,eAAK,YAAY;AAAA;AAAA;AAAA,OAYpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,QAAQ,mBAAmB;AAC3D,aAAK,cAAc,QAAQ,mBAAmB;AAAA;AAAA,OAQ/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAQ;AAClC,YAAI,KAAK,cAAc,WAAW;AAChC;AAAA;AAKF,YAAI,cAAc,OAAO;AACzB,aAAK,cAAc,qBAAqB;AACxC,aAAK;AACL,YAAI,YAAY,KAAK,cAAc;AAEnC,YAAI,KAAK,SAAS,kBAAkB,UAAU;AAC5C,oBAAU,MAAM,IAAI,eAAW,YAAY,KAAK,YAAY;AAAA;AAI9D,aAAK,UAAU,UAAU;AAEzB,YAAI,KAAK,UAAU,aAAa,WAAW,UAAU,YAAY;AAC/D,eAAK,UAAU,UAAU,IAAI,KAAK,cAAc,UAAU,WAAW,SAAS,kBAAkB;AAAA;AAGlG,YAAI,aAAa,KAAK;AAGtB,YAAI,aAAa,KAAK,UAAU,YAAY;AAC1C,oBAAU,KAAK,UAAU,YAAY,SAAU,WAAW;AACxD,mBAAO,KAAK,UAAU;AAAA;AAExB,oBAAU,KAAK,UAAU,cAAc,SAAU,WAAW;AAC1D,mBAAO,KAAK,UAAU;AAAA;AAExB,oBAAU,KAAK,UAAU,oBAAoB,SAAU,WAAW;AAChE,mBAAO,KAAK,UAAU;AAAA;AAAA;AAI1B,aAAK,UAAU,cAAc;AAC7B,YAAI,gBAAgB,KAAK,UAAU;AACnC,YAAI,kBAAkB,KAAK,UAAU;AACrC,YAAI,wBAAwB,KAAK,UAAU;AAC3C,sBAAc;AACd,wBAAgB;AAChB,8BAAsB;AAEtB,YAAI,KAAK,UAAU,aAAa,WAAW,UAAU,cAAe,MAAK,gBAAgB,cAAc,IAAI;AACzG,wBAAc,IAAI,UAAU,MAAM,IAAI,UAAU,IAAI;AAEpD,cAAI,eAAe,GAAG;AAIpB,gBAAI,gBAAgB,KAAK,cAAc;AACvC,iBAAK,UAAU,cAAc,aAAa,GAAG,kBAAkB,IAAI,cAAc,MAAM,SACtF,kBAAkB;AACnB,iBAAK,UAAU,cAAc;AAAA;AAAA;AAIjC,YAAI,KAAK,UAAU,aAAa,aAAa,UAAU,YAAY;AAKjE,cAAI,qBAAqB,KAAK,WAAW,0BAA0B;AACnE,cAAI,wBAAwB,KAAK,WAAW,0BAA0B;AACtE,cAAI,kBAAkB;AAEtB,cAAI,sBAAsB,uBAAuB;AAC/C,8BAAkB,UAAU;AAAA;AAG9B,cAAI,oBAAoB;AACtB,4BAAgB,KAAK,MAAM;AAAA;AAG7B,cAAI,uBAAuB;AACzB,4BAAgB,KAAK,MAAM;AAAA;AAG7B,cAAI,KAAK,SAAS,kBAAkB,UAAU;AAC5C,gBAAI,KAAK,yBAAyB;AAChC,8BAAgB,KAAK;AAAA;AAGvB,4BAAgB,IAAI,gBAAgB,MAAM;AAAA,iBACrC;AACL,4BAAgB,IAAI,gBAAgB,MAAM,IAAI,gBAAgB,IAAI;AAAA;AAGpE,cAAI,KAAK,uBAAuB;AAC9B,gBAAI,gBAAgB,KAAK,WAAW,gBAAgB,UAAU;AAE9D,gBAAI,eAAe;AACjB,oCAAsB,IAAI,IAAI,eAAW,UAAU,KAAK,KAAK,KAAK,IAAI,IAAI,eAAW,UAAU,GAAG,KAAK,KAAK;AAAA;AAAA;AAIhH,cAAI,KAAK,0BAA0B;AACjC,gBAAI,mBAAmB,KAAK,WAAW,gBAAgB,UAAU;AAEjE,gBAAI,kBAAkB;AACpB,oCAAsB,IAAI,IAAI,eAAW,IAAI,UAAU,KAAK,MAAM,IAAI,IAAI,eAAW,IAAI,UAAU,GAAG,MAAM;AAAA;AAAA;AAAA;AAKlH,aAAK,cAAc,oBAAoB;AAAA;AAAA,OASxC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,qBAAqB,yBAAyB,CAAC,KAAK,cAAc,UAAU;AAChF,aAAK,cAAc,4BAA4B;AAC/C,eAAO,mBAAmB;AAAA;AAAA,OAW3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,UAAU,UAAU;AACjD,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,aAAK,cAAc,KAAK,eAAe,eAAe,UAAU,UAAU;AAAA;AAAA,OAS3E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,UAAU,UAAU;AAC/C,aAAK,YAAY,KAAK,eAAe,aAAa,UAAU;AAAA;AAAA,OAQ7D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,eAAO,KAAK,cAAc,SAAS;AAAA;AAAA,OAQpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,eAAO,CAAC,KAAK,cAAc;AAAA;AAAA,OAW5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK;AAC1F,eAAO,CAAC,KAAK,mBAAmB,eAAe,KAAK,oBAAoB;AAAA;AAAA,OAUzE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK;AAC1F,eAAO,eAAe,KAAK,KAAK,oBAAoB,OAAO,IAAI,KAAK,oBAAoB,IAAI;AAAA;AAAA,OAW7F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK;AAC1F,eAAO,CAAC,KAAK,wBAAwB,KAAK,uBAAuB;AAAA;AAAA,OAUlE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK;AAC1F,eAAO,eAAe,KAAK,KAAK,uBAAuB,OAAO,IAAI,KAAK,uBAAuB,IAAI;AAAA;AAAA,OAQnG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,eAAO,KAAK,sBAAsB,OAAO,KAAK,yBAAyB,OAAO,KAAK;AAAA;AAAA,OAQpF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,eAAO,KAAK;AAAA;AAAA,OAUb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ;AACpC,eAAO,KAAK,cAAc,SAAS;AAAA;AAAA,OASpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,eAAO,KAAK,SAAS,cAAc,CAAC,KAAK,WAAW,oBAAoB,CAAC,KAAK;AAAA;AAAA,OAS/E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,YAAY;AAC9C,YAAI,OAAO,UAAU,eAAe,eAAe,KAAK,iBAAiB;AACvE,iBAAO;AAAA;AAGT,eAAO,KAAK,SAAS,cAAc,CAAC,KAAK,WAAW,oBAAoB,KAAK;AAAA;AAAA,OAM9E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AAEtB,aAAK,cAAc;AACnB,aAAK,UAAU;AAAA;AAAA,OAMhB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,YAAI,CAAC,KAAK,cAAc;AACtB;AAAA;AAGF,aAAK,aAAa;AAClB,aAAK;AACL,aAAK,cAAc;AAAA;AAAA,OAWpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,oBAAoB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC5F,YAAI,uBAAuB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/F,YAAI,WAAW,KAAK,WAAW;AAC/B,YAAI,cAAc,KAAK,WAAW;AAElC,YAAI,CAAC,qBAAqB,CAAC,wBAAyB,cAAa,KAAK,gBAAgB,IAAI;AACxF;AAAA;AAGF,YAAI,cAAc,IAAI,eAAW,uBAAuB,KAAK,GAAG,oBAAoB,KAAK;AACzF,aAAK;AACL,aAAK,kBAAkB;AACvB,aAAK,oBAAoB,IAAI,KAAK;AAClC,aAAK,uBAAuB,IAAI,KAAK;AACrC,aAAK,YAAY,IAAI,eAAW,WAAW,GAAG,cAAc;AAC5D,aAAK;AAAA;AAAA,OAYN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,iBAAiB;AAC3C,YAAI,SAAS;AAEb,YAAI,gBAAgB,oBAAoB;AAExC,YAAI,kBAAkB,sBAAsB;AAC1C,iBAAO;AAAA,mBACE,kBAAkB,6BAA6B;AACxD,gBAAM,IAAI,MAAM,aAAa,qBAAoB,qBAAkB,wBAAuB,CAAC,4PAA4P,CAAC;AAAA;AAG1V,YAAI,4BAA4B,0BAA0B,eAAe;AAAA,UACvE,WAAW,mBAAmB,MAAM;AAClC,mBAAO,OAAO,WAAW,UAAU;AAAA;AAAA,UAErC,eAAe;AAAA;AAEjB,YAAI,WAAW,KAAK,WAAW;AAC/B,YAAI,cAAc,KAAK,WAAW;AAElC,YAAI,UAAU,CAAC,gBAAgB,KAAK,SAAU,WAAW;AACvD,cAAI,wBAAwB,0BAA0B,YAClD,yBAAyB,iBAAe,uBAAuB,IAC/D,WAAW,uBAAuB,IAClC,cAAc,uBAAuB,IACrC,SAAS,uBAAuB,IAChC,YAAY,uBAAuB;AAEvC,cAAI,WAAW,aAAa,UAAU,aAAa,aAAa,aAAa,gBAAgB,aAAa,QAAQ,aAAa,aAAa,WAAW;AAEvJ,iBAAO,CAAC;AAAA;AAGV,YAAI,SAAS;AACX,eAAK;AACL,oBAAU,iBAAiB,SAAU,WAAW;AAC9C,gBAAI,yBAAyB,0BAA0B,YACnD,yBAAyB,iBAAe,wBAAwB,IAChE,WAAW,uBAAuB,IAClC,cAAc,uBAAuB,IACrC,SAAS,uBAAuB,IAChC,YAAY,uBAAuB;AAEvC,mBAAO,kBAAkB,IAAI,eAAW,UAAU,cAAc;AAEhE,mBAAO,YAAY,IAAI,eAAW,QAAQ;AAE1C,mBAAO;AAAA;AAAA;AAIX,eAAO;AAAA;AAAA,OAcR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,aAAa;AACzC,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACtF,YAAI,SAAQ,OAAO,gBAAgB,WAAW,KAAK,WAAW,UAAU,eAAe;AACvF,YAAI,OAAM,OAAO,cAAc,WAAW,KAAK,WAAW,UAAU,aAAa;AACjF,YAAI,cAAc,KAAK,WAAW;AAClC,YAAI,WAAW,KAAK,WAAW;AAC/B,YAAI,UAAU,aAAa,QAAO,gBAAgB,aAAa,MAAK;AAEpE,YAAI,SAAS;AACX,eAAK,kBAAkB,IAAI,eAAW,aAAa;AACnD,eAAK,YAAY,IAAI,eAAW,WAAW,GAAG;AAC9C,eAAK;AAAA;AAGP,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,UAAU;AACnC,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACtF,YAAI,WAAW,KAAK,WAAW;AAC/B,YAAI,cAAc,KAAK,WAAW;AAClC,YAAI,UAAU,aAAa,UAAU,aAAa,aAAa,QAAQ;AAEvE,YAAI,SAAS;AACX,eAAK,kBAAkB,IAAI,eAAW,UAAU;AAChD,eAAK,YAAY,IAAI,eAAW,QAAQ,cAAc;AACtD,eAAK;AAAA;AAGP,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,mBAAmB,KAAK,UAAU;AACtC,yBAAiB,QAAQ,SAAU,iBAAiB;AAClD,0BAAgB;AAAA;AAGlB,YAAI,CAAC,KAAK,cAAc;AACtB;AAAA;AAGF,YAAI,gBAAgB,KAAK,UAAU;AACnC,YAAI,eAAe,KAAK;AACxB,sBAAc,SAAS,kBAAkB,KAAK,cAAc;AAE5D,iBAAS,aAAa,GAAG,aAAa,KAAK,cAAc,QAAQ,cAAc,GAAG;AAChF,eAAK,UAAU,cAAc;AAC7B,cAAI,gBAAgB,KAAK,UAAU;AACnC,cAAI,kBAAkB,KAAK,UAAU;AACrC,cAAI,wBAAwB,KAAK,UAAU;AAC3C,wBAAc;AACd,0BAAgB;AAChB,gCAAsB;AAAA;AAIxB,aAAK,UAAU,cAAc;AAAA;AAAA;AAIjC,WAAO;AAAA;AAGT,QAAM,YAAW;AACjB,MAAO,qBAAQ;;;AI50Bf,mCAAO;AAaP,gCAAO;;;ACfP,gCAAO;;;ACCP,MAAI,MAAI;AACR,MAAI,gBAAc;AAClB,MAAI,4BAA2B,6CAA2D;AAC1F,MAAI,YAAW;AACf,MAAI,aAAW;AACf,MAAI,cAAa;AACjB,MAAI,0BAAyB;AAC7B,MAAI,wBAAuB;AAC3B,MAAI,WAAU;AAGd,MAAI,gBAAgB,cAAY,GAAG;AACnC,MAAI,eAAc,cAAY,GAAG;AACjC,MAAI,OAAM,KAAK;AAEf,MAAI,0BAA0B,sBAAqB;AAEnD,MAAI,mBAAmB,CAAC,YAAW,CAAC,2BAA2B,CAAC,CAAC,WAAY;AAC3E,QAAI,aAAa,0BAAyB,OAAO,WAAW;AAC5D,WAAO,cAAc,CAAC,WAAW;AAAA;AAKnC,MAAE,EAAE,QAAQ,UAAU,OAAO,MAAM,QAAQ,CAAC,oBAAoB,CAAC,2BAA2B;AAAA,IAC1F,YAAY,oBAAoB,cAAmC;AACjE,UAAI,OAAO,WAAS,wBAAuB;AAC3C,kBAAW;AACX,UAAI,SAAQ,UAAS,KAAI,UAAU,SAAS,IAAI,UAAU,KAAK,QAAW,KAAK;AAC/E,UAAI,SAAS,WAAS;AACtB,aAAO,gBACH,cAAc,MAAM,QAAQ,UAC5B,aAAY,MAAM,QAAO,SAAQ,OAAO,YAAY;AAAA;AAAA;;;ADX5D,MAAI,sBAAsB;AAC1B,MAAI,sBAAsB;AAC1B,MAAI,mBAAmB;AAQhB,iBAAe,KAAK;AACzB,QAAI,MAAM,CAAC,CAAC;AAEZ,QAAI,IAAI,WAAW,GAAG;AACpB,aAAO;AAAA;AAGT,QAAI,SAAS;AACb,QAAI,MAAM;AACV,QAAI;AAEJ,WAAO,IAAI,SAAS,GAAG;AACrB,UAAI,eAAe,IAAI,QAAQ;AAE7B;AAAA;AAGF,mBAAa,IAAI;AAEjB,UAAI,IAAI,MAAM,mBAAmB;AAC/B,cAAM,IAAI,QAAQ,kBAAkB;AACpC,kBAAU;AACV,YAAI,KAAK,UAAU;AAAA,iBACV,IAAI,MAAM,sBAAsB;AACzC,cAAM,IAAI,QAAQ,qBAAqB;AACvC,iBAAS;AACT,eAAO;AACP,YAAI,OAAO,CAAC;AAAA,aACP;AACL,YAAI,WAAW;AAEf,YAAI,IAAI,WAAW,MAAM;AACvB,cAAI,UAAU;AACd,cAAI,cAAc;AAElB,iBAAO,aAAa;AAClB,gBAAI,WAAW,IAAI,MAAM,GAAG;AAE5B,gBAAI,aAAa,KAAK;AACpB,yBAAW;AAAA;AAGb,wBAAY;AACZ,kBAAM,IAAI,MAAM;AAEhB,gBAAI,IAAI,WAAW,KAAK,IAAI,MAAM,gBAAgB,UAAU,MAAM,GAAG;AACnE,4BAAc;AAAA;AAAA;AAIlB,qBAAW,SAAS,QAAQ,MAAM,IAAI,QAAQ,MAAM,IAAI,QAAQ,SAAS,SAAU,OAAO;AACxF,mBAAO,IAAI,MAAM,KAAK,MAAM,MAAM,SAAS,IAAI,KAAK,KAAK,KAAK;AAAA;AAAA,eAE3D;AACL,cAAI,cAAc,IAAI,MAAM;AAC5B,qBAAW,cAAc,YAAY,KAAK;AAC1C,gBAAM,IAAI,MAAM,SAAS;AAAA;AAG3B,YAAI,KAAK,UAAU;AAAA;AAAA;AAIvB,WAAO;AAAA;AASF,sBAAmB,KAAK;AAC7B,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI,MAAM;AACV,QAAI;AAEJ,SAAK,IAAI,GAAG,OAAO,IAAI,QAAQ,IAAI,MAAM,KAAK,GAAG;AAC/C,aAAO,IAAI,GAAG;AAEd,WAAK,IAAI,GAAG,IAAI,MAAM,KAAK,GAAG;AAC5B,YAAI,IAAI,GAAG;AACT,iBAAO;AAAA;AAGT,cAAM,IAAI,GAAG;AAEb,YAAI,OAAO,QAAQ,UAAU;AAC3B,cAAI,IAAI,QAAQ,QAAQ,IAAI;AAC1B,mBAAO,IAAK,OAAO,IAAI,QAAQ,MAAM,OAAO;AAAA,iBACvC;AACL,mBAAO;AAAA;AAAA,mBAEA,QAAQ,QAAQ,QAAQ,QAAQ;AAEzC,iBAAO;AAAA,eACF;AACL,iBAAO;AAAA;AAAA;AAIX,UAAI,MAAM,OAAO,GAAG;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;;;AD7IT,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAqBzU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAQ/Q,MAAI,iBAAiB,wBAAwB,YAAY;AAiCzD,MAAI,WAAuB,2BAAY;AAMrC,sBAAiB,UAAU,MAAM,WAAW;AAC1C,wBAAgB,MAAM;AAQtB,WAAK,WAAW;AAQhB,WAAK,YAAY;AAOjB,WAAK,aAAa;AAOlB,WAAK,aAAa,KAAK,cAAc,KAAK,WAAW,KAAK,WAAW,KAAK,WAAW,MAAM;AAO3F,WAAK,iBAAiB;AAOtB,WAAK,iBAAiB;AACtB,WAAK;AAAA;AAOP,mBAAa,UAAS,CAAC;AAAA,MACrB,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,SAAS,KAAK;AAElB,YAAI,OAAO,WAAW,aAAa;AACjC,gBAAM,IAAI,MAAM;AAAA;AAGlB,YAAI,UAAU,KAAK,UAAU;AAC7B,YAAI;AACJ,aAAK,iBAAiB;AACtB,aAAK,iBAAiB,oBAAI;AAE1B,YAAI,SAAS;AACX,cAAI,aAAa;AACjB,cAAI,gBAAgB;AACpB,cAAI,gBAAgB;AAEpB,cAAI,OAAO,YAAY,YAAY;AACjC,gBAAI,YAAY,eAAe;AAC/B,yBAAa,YAAY,IAAI,YAAY,KAAK;AAC9C,4BAAgB;AAAA,iBACX;AACL,gBAAI,UAAU,KAAK,UAAU;AAC7B,yBAAa,KAAK,IAAI,SAAS,QAAQ;AAAA;AAGzC,eAAK,IAAI,GAAG,IAAI,YAAY,KAAK;AAC/B,gBAAI,SAAS,gBAAgB,QAAQ,KAAK,QAAQ;AAElD,gBAAI,UAAS,SAAS;AACpB,kBAAI,OAAO,OAAO,SAAS,aAAa;AACtC,oBAAI,SAAQ,gBAAgB,gBAAgB;AAC5C,qBAAK,eAAe,UAAS,OAAO;AACpC,qBAAK,eAAe,IAAI,OAAO,MAAM;AAAA;AAGvC,+BAAiB;AAAA;AAAA;AAAA,eAGhB;AACL,eAAK,qBAAqB;AAAA;AAAA;AAAA,OAS7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA6B;AAClC,eAAO,kBAAmB,KAAK;AAAA;AAAA,OAWhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,QAAQ,SAAS,QAAQ;AAC5D,YAAI,QAAQ;AAEZ,YAAI,aAAa;AACjB,YAAI,iBAAiB;AACrB,YAAI;AAEJ,YAAI,OAAO,eAAe,aAAa;AACrC,uBAAa;AACb,2BAAiB;AAAA;AAGnB,YAAI,UAAQ,YAAY,YAAY,CAAC,MAAM,QAAQ,SAAS;AAC1D,qBAAW,QAAQ,SAAU,OAAO,KAAK;AACvC,gBAAI,UAAU,MAAM;AAClB,qBAAO,iBAAiB;AAExB,oBAAM,eAAe,KAAK;AAE1B,oBAAM,eAAe,IAAI,MAAM;AAE/B,4BAAc;AAAA,mBACT;AACL,2BAAa,MAAM,qBAAqB,OAAO,YAAY,GAAG,OAAO,KAAK;AAAA;AAAA;AAAA;AAKhF,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,QAAQ;AAGhC,YAAI,OAAO,UAAU,YAAY,OAAO;AACtC,iBAAO;AAAA;AAGT,YAAI,iBAAiB,KAAK,SAAS,iBAAiB;AAEpD,YAAI,mBAAmB,MAAM;AAC3B,iBAAO;AAAA;AAIT,YAAI,KAAK,kBAAkB,UAAU,KAAK,eAAe,kBAAkB;AACzE,iBAAO,KAAK,eAAe;AAAA;AAG7B,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,MAAM;AAC9B,YAAI,sBAAsB,KAAK,eAAe,IAAI;AAElD,YAAI,UAAU,sBAAsB;AAClC,iBAAO,KAAK,SAAS,eAAe;AAAA;AAItC,YAAI,eAAe,KAAK,SAAS,eAAe;AAEhD,YAAI,iBAAiB,MAAM;AACzB,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,SAAS,KAAK,UAAU;AAE5B,YAAI,QAAQ;AACV,cAAI,OAAO,WAAW,YAAY;AAChC,mBAAO;AAAA;AAGT,iBAAO;AAAA;AAGT,eAAO,KAAK;AAAA;AAAA,OAYb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,QAAO;AAC/B,YAAI,SAAS;AAEb,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,YAAI,SAAS,UAAU,SAAS,IAAI,UAAU,KAAK;AACnD,YAAI,kBAAkB,KAAK,SAAS;AACpC,YAAI,mBAAmB;AACvB,YAAI,sBAAsB;AAC1B,YAAI,WAAW;AAEf,YAAI,OAAO,aAAa,YAAY,YAAY,iBAAiB;AAC/D,qBAAW;AAAA;AAGb,YAAI,WAAW,KAAK,SAAS,aAAa;AACxC,6BAAmB,KAAK,SAAS,cAAc;AAAA;AAGjD,YAAI,kBAAkB,KAAK,SAAS,SAAS,mBAAmB,UAAU,QAAQ;AAElF,YAAI,oBAAoB,SAAS,qBAAqB,MAAM;AAC1D,iBAAO;AAAA;AAGT,YAAI,UAAU,KAAK,UAAU;AAC7B,YAAI,cAAc,KAAK,SAAS;AAChC,YAAI,YAAY;AAEhB,YAAI,QAAQ,kBAAiB;AAC3B,cAAI,MAAM;AAEV,cAAI,OAAO,SAAS,aAAa,SAAS;AACxC,gBAAI,OAAO,UAAU,YAAY;AAE/B,oBAAM,UAAU,OAAO;AAAA,mBAClB;AACL,oBAAM;AAGN,wBAAU,cAAc,GAAG,WAAY;AACrC,uBAAO,IAAI,KAAK;AAAA;AAAA;AAAA,qBAGX,OAAO,SAAS,aAAa,YAAY;AAClD,kBAAM,OAAO,UAAU,WAAW,WAAW;AAAA,iBACxC;AACL,kBAAM;AACN,uBAAW,KAAK,OAAO;AAAA;AAGzB,oBAAU,KAAK;AACf,iCAAuB;AAAA;AAGzB,eAAO,sBAAsB,UAAU,kBAAkB,sBAAsB,SAAS;AACtF;AAAA;AAGF,aAAK,SAAS,eAAe,cAAc,UAAU;AACrD,aAAK,WAAW,MAAM,MAAM,CAAC,kBAAkB,GAAG,OAAO;AACzD,aAAK,SAAS,SAAS,kBAAkB,UAAU,qBAAqB;AACxE,aAAK,SAAS,kBAAkB;AAEhC,eAAO;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,QAAO;AAC/B,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,YAAI,SAAS,UAAU,SAAS,IAAI,UAAU,KAAK;AAEnD,YAAI,CAAC,KAAK,SAAS,+BAA+B;AAChD,gBAAM,IAAI,MAAM;AAAA;AAGlB,YAAI,aAAa,KAAK;AACtB,YAAI,UAAU,KAAK,UAAU;AAC7B,YAAI,cAAc;AAElB,YAAI,OAAO,gBAAgB,YAAY,eAAe,KAAK,SAAS,mBAAmB;AACrF,wBAAc,KAAK,SAAS;AAAA;AAG9B,YAAI,kBAAkB,KAAK,SAAS,SAAS,mBAAmB,aAAa,QAAQ;AAErF,YAAI,oBAAoB,OAAO;AAC7B,iBAAO;AAAA;AAGT,YAAI,sBAAsB,KAAK,SAAS;AAExC,YAAI,cAAc,KAAK,SAAS,aAAa;AAC3C,gCAAsB,KAAK,SAAS,iBAAiB;AAAA;AAGvD,YAAI,qBAAqB,KAAK,SAAS;AACvC,YAAI,cAAc,KAAK,SAAS;AAChC,YAAI,sBAAsB;AAC1B,YAAI,eAAe;AAEnB,eAAO,sBAAsB,UAAU,cAAc,SAAS;AAC5D,cAAI,OAAO,gBAAgB,YAAY,eAAe,aAAa;AACjE,gBAAI,qBAAqB,GAAG;AAC1B,uBAAS,MAAM,GAAG,MAAM,oBAAoB,OAAO,GAAG;AACpD,oBAAI,OAAO,WAAW,SAAS,aAAa;AAC1C,6BAAW,OAAO;AAAA;AAGpB,2BAAW,KAAK,KAAK;AAAA;AAAA,mBAElB;AACL,yBAAW,KAAK,CAAC;AAAA;AAAA,iBAEd;AACL,qBAAS,OAAO,GAAG,OAAO,oBAAoB,QAAQ;AACpD,yBAAW,MAAM,OAAO,cAAc,GAAG;AAAA;AAAA;AAI7C,iCAAuB;AACvB,0BAAgB;AAChB,yBAAe;AAAA;AAGjB,aAAK,SAAS,kBAAkB,cAAc,aAAa;AAC3D,aAAK,SAAS,SAAS,kBAAkB,aAAa,qBAAqB;AAC3E,aAAK,SAAS,kBAAkB;AAEhC,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,QAAO;AAC/B,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,YAAI,SAAS,UAAU,SAAS,IAAI,UAAU,KAAK;AACnD,YAAI,WAAW,OAAO,UAAU,UAAS,SAAQ,CAAC;AAElD,YAAI,yBAAyB,KAAK,qBAAqB,UAAU;AACjE,YAAI,mBAAmB,KAAK,SAAS;AACrC,mBAAY,oBAAmB,YAAY;AAE3C,YAAI,wBAAwB,KAAK,SAAS,SAAS,mBAAmB,UAAU,uBAAuB,QAAQ,wBAAwB;AAEvI,YAAI,0BAA0B,OAAO;AACnC,iBAAO;AAAA;AAIT,YAAI,yBAAyB,uBAAuB;AACpD,aAAK,WAAW,UAAU,wBAAwB;AAElD,YAAI,WAAW,KAAK,SAAS,aAAa;AACxC,eAAK,SAAS,eAAe,cAAc;AAC3C,cAAI,uBAAuB,UAAU,KAAK,UAAU,YAAY,UAAU,KAAK,UAAU;AAEzF,cAAI,KAAK,SAAS,eAAe,iCAAiC,KAAK,yBAAyB,OAAO;AACrG,iBAAK,SAAS,kBAAkB,mBAAmB;AAAA;AAAA;AAIvD,aAAK,SAAS,SAAS,kBAAkB,UAAU,wBAAwB,wBAAwB;AACnG,aAAK,SAAS,kBAAkB;AAEhC,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,QAAO;AAC/B,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,YAAI,SAAS,UAAU,SAAS,IAAI,UAAU,KAAK;AAEnD,YAAI,KAAK,SAAS,aAAa,YAAY,KAAK,UAAU,SAAS;AACjE,gBAAM,IAAI,MAAM;AAAA;AAGlB,YAAI,cAAc,OAAO,WAAU,WAAW,CAAC,SAAS;AACxD,sBAAe,MAAK,SAAS,cAAc,eAAe,KAAK,SAAS;AACxE,YAAI,eAAe,KAAK,wBAAwB,aAAa;AAC7D,YAAI,yBAAyB,aAAa,MAAM,GAAG,KAAK,SAAU,GAAG,GAAG;AACtE,iBAAO,IAAI;AAAA;AAEb,YAAI,wBAAwB,KAAK,SAAS,SAAS,mBAAmB,aAAa,QAAQ,cAAc;AAEzG,YAAI,0BAA0B,OAAO;AACnC,iBAAO;AAAA;AAGT,YAAI,iBAAiB;AACrB,YAAI,sBAAsB,uBAAuB;AACjD,YAAI,OAAO,KAAK;AAEhB,iBAAS,IAAI,GAAG,IAAI,qBAAqB,KAAK;AAC5C,cAAI,kBAAkB,aAAa,OAAO,aAAa,KAAK,GAAG;AAC7D,6BAAiB;AAAA;AAAA;AAIrB,YAAI,gBAAgB;AAClB,mBAAS,IAAI,GAAG,OAAO,KAAK,SAAS,mBAAmB,IAAI,MAAM,KAAK;AACrE,iBAAK,GAAG,OAAO,aAAa,IAAI;AAAA;AAAA,eAE7B;AACL,mBAAS,KAAK,GAAG,QAAQ,KAAK,SAAS,mBAAmB,KAAK,OAAO,MAAM;AAC1E,qBAAS,KAAK,GAAG,KAAK,qBAAqB,MAAM;AAC/C,mBAAK,IAAI,OAAO,uBAAuB,KAAK;AAAA;AAAA;AAAA;AAMlD,YAAI,cAAc,KAAK,SAAS,aAAa;AAC3C,eAAK,SAAS,kBAAkB,cAAc;AAE9C,cAAI,KAAK,SAAS,kBAAkB,iCAAiC,GAAG;AACtE,iBAAK,SAAS,eAAe,mBAAmB;AAAA;AAAA;AAIpD,aAAK,SAAS,SAAS,kBAAkB,aAAa,QAAQ,cAAc;AAC5E,aAAK,SAAS,kBAAkB;AAEhC,eAAO;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,KAAK,QAAO,QAAQ;AAC5C,YAAI,UAAU,KAAK,SAAS,aAAa;AACzC,YAAI,UAAU,QAAQ,MAAM,QAAO,SAAQ;AAC3C,YAAI,QAAQ,QAAQ,MAAM,SAAQ;AAElC,iBAAS,OAAO,UAAU,QAAQ,WAAW,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,IAAI,OAAO,GAAG,OAAO,MAAM,QAAQ;AAC9G,mBAAS,OAAO,KAAK,UAAU;AAAA;AAGjC,oBAAY,UAAU;AACtB,YAAI,IAAI;AAER,eAAO,IAAI,QAAQ;AACjB,mBAAS,KAAK;AAEd,eAAK;AAAA;AAGP,kBAAU;AACV,aAAK,SAAS,kBAAkB,QAAO,KAAK,UAAU,MAAM,MAAM;AAClE,eAAO;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,KAAK,QAAO,QAAQ;AAC5C,YAAI,UAAU,KAAK,SAAS,mBAAmB;AAC/C,YAAI,UAAU,QAAQ,MAAM,QAAO,SAAQ;AAC3C,YAAI,QAAQ,QAAQ,MAAM,SAAQ;AAElC,iBAAS,QAAQ,UAAU,QAAQ,WAAW,IAAI,MAAM,QAAQ,IAAI,QAAQ,IAAI,IAAI,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACrH,mBAAS,QAAQ,KAAK,UAAU;AAAA;AAGlC,oBAAY,UAAU;AACtB,YAAI,IAAI;AAER,eAAO,IAAI,QAAQ;AACjB,mBAAS,KAAK;AAEd,eAAK;AAAA;AAGP,aAAK,SAAS,kBAAkB,KAAK,QAAO,CAAC,WAAW,MAAM,MAAM;AACpE,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,QAAO,QAAQ;AACxC,iBAAS,QAAQ,UAAU,QAAQ,WAAW,IAAI,MAAM,QAAQ,IAAI,QAAQ,IAAI,IAAI,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACrH,mBAAS,QAAQ,KAAK,UAAU;AAAA;AAGlC,YAAI,mBAAmB,KAAK,SAAS,SAAS,oBAAoB,QAAO,QAAQ;AAEjF,YAAI,qBAAqB,OAAO;AAC9B,cAAI;AAEJ,UAAC,oBAAmB,KAAK,YAAY,OAAO,MAAM,kBAAkB,CAAC,QAAO,QAAQ,OAAO;AAAA;AAAA;AAAA,OAW9F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,QAAO,QAAQ,cAAc;AAEtD,YAAI,OAAO,KAAK,SAAS,SAAS,cAAc,QAAO,QAAQ;AAE/D,YAAI,MAAM,QAAQ,UAAU,OAAO;AACjC,iBAAO,KAAK,WAAW,OAAO,SAAU,KAAK,UAAU;AACrD,mBAAO,aAAa,QAAQ,cAAc;AAAA;AAAA;AAI9C,aAAK,WAAW,SAAS;AACzB,cAAM,UAAU,KAAK,MAAM,KAAK,YAAY;AAAA;AAAA,OAU7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAa,KAAK,MAAM;AAC7B,YAAI,cAAc,KAAK,SAAS,cAAc;AAC9C,YAAI,UAAU,KAAK,WAAW;AAE9B,YAAI,kBAAkB,KAAK,SAAS,SAAS,iBAAiB;AAC9D,kBAAU,MAAM,mBAAmB,kBAAkB;AAErD,YAAI,QAAQ;AAEZ,YAAI,WAAW,QAAQ,kBAAkB,eAAe,SAAS,OAAO;AACtE,kBAAQ,QAAQ;AAAA,mBACP,OAAO,SAAS,YAAY,KAAK,QAAQ,OAAO,IAAI;AAC7D,cAAI,SAAS,KAAK,MAAM;AACxB,cAAI,MAAM;AAEV,cAAI,CAAC,KAAK;AACR,mBAAO;AAAA;AAGT,mBAAS,IAAI,GAAG,OAAO,OAAO,QAAQ,IAAI,MAAM,KAAK;AACnD,kBAAM,IAAI,OAAO;AAEjB,gBAAI,OAAO,QAAQ,aAAa;AAC9B,qBAAO;AAAA;AAAA;AAIX,kBAAQ;AAAA,mBACC,OAAO,SAAS,YAAY;AACrC,kBAAQ,KAAK,KAAK,WAAW,MAAM,aAAa,cAAc,GAAG;AAAA;AAGnE,YAAI,KAAK,SAAS,QAAQ,eAAe;AACvC,cAAI,cAAc,yBAAyB;AAC3C,eAAK,SAAS,SAAS,cAAc,aAAa,KAAK,UAAU,OAAO,aAAa;AAErF,cAAI,YAAY,aAAa;AAC3B,oBAAQ,YAAY;AAAA;AAAA;AAIxB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,KAAK,MAAM;AACrC,YAAI,eAAe,KAAK,KAAK,UAAU,KAAK,KAAK,UAAU,QAAQ;AACjE,iBAAO,KAAK,IAAI,KAAK;AAAA;AAGvB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,aAAa,KAAK,MAAM,OAAO;AACpC,YAAI,cAAc,KAAK,SAAS,cAAc;AAC9C,YAAI,WAAW;AACf,YAAI,UAAU,KAAK,WAAW;AAE9B,YAAI,kBAAkB,KAAK,SAAS,SAAS,iBAAiB;AAC9D,kBAAU,MAAM,mBAAmB,kBAAkB;AAErD,YAAI,KAAK,SAAS,QAAQ,eAAe;AACvC,cAAI,cAAc,yBAAyB;AAC3C,eAAK,SAAS,SAAS,cAAc,aAAa,KAAK,UAAU,OAAO,aAAa;AAErF,cAAI,YAAY,aAAa;AAC3B,uBAAW,YAAY;AAAA;AAAA;AAK3B,YAAI,WAAW,QAAQ,kBAAkB,eAAe,SAAS,OAAO;AACtE,kBAAQ,QAAQ;AAAA,mBACP,OAAO,SAAS,YAAY,KAAK,QAAQ,OAAO,IAAI;AAC7D,cAAI,SAAS,KAAK,MAAM;AACxB,cAAI,MAAM;AACV,cAAI,IAAI;AACR,cAAI;AAEJ,eAAK,IAAI,GAAG,OAAO,OAAO,SAAS,GAAG,IAAI,MAAM,KAAK;AACnD,gBAAI,OAAO,IAAI,OAAO,QAAQ,aAAa;AACzC,kBAAI,OAAO,MAAM;AAAA;AAGnB,kBAAM,IAAI,OAAO;AAAA;AAGnB,cAAI,OAAO,MAAM;AAAA,mBACR,OAAO,SAAS,YAAY;AACrC,eAAK,KAAK,WAAW,MAAM,aAAa,cAAc,GAAG,IAAI;AAAA,eACxD;AACL,kBAAQ,QAAQ;AAAA;AAAA;AAAA,OAanB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,QAAO,QAAQ;AAClD,YAAI,YAAY,KAAK,SAAS;AAC9B,YAAI,YAAY;AAChB,YAAI,YAAa,aAAY,UAAS;AACtC,YAAI,eAAe;AACnB,YAAI;AAEJ,eAAO,YAAY,aAAa,cAAc;AAC5C,gBAAM,KAAK,SAAS,cAAc;AAClC,oBAAU,KAAK;AACf,0BAAgB;AAChB,uBAAa;AAAA;AAGf,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAO,QAAQ;AACrD,YAAI,YAAY,KAAK,SAAS;AAC9B,YAAI,aAAa;AACjB,YAAI,cAAe,aAAY,UAAS;AACxC,YAAI,eAAe;AAEnB,eAAO,cAAc,aAAa,cAAc;AAC9C,cAAI,MAAM,KAAK,SAAS,iBAAiB;AACzC,qBAAW,KAAK;AAChB,0BAAgB;AAChB,yBAAe;AAAA;AAGjB,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,mBAAmB,KAAK;AACxD,mBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,aAAa,KAAK;AAClD,iBAAK,IAAI,GAAG,KAAK,UAAU,IAAI;AAAA;AAAA;AAAA;AAAA,OAUpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,sBAAsB,KAAK,UAAU;AACzC,YAAI;AAEJ,YAAI,sBAAsB,KAAK,wBAAwB,GAAG;AACxD,oBAAU;AAAA,eACL;AACL,oBAAU,uBAAuB;AAAA;AAGnC,YAAI,SAAS,KAAK,SAAS,eAAe;AAC1C,eAAO,KAAK,IAAI,QAAQ;AAAA;AAAA,OAQzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAkB;AACvB,YAAI,SAAQ;AAAA,UACV,KAAK;AAAA,UACL,KAAK;AAAA;AAEP,YAAI,OAAM;AAAA,UACR,KAAK,KAAK,IAAI,KAAK,SAAS,cAAc,GAAG;AAAA,UAC7C,KAAK,KAAK,IAAI,KAAK,SAAS,cAAc,GAAG;AAAA;AAG/C,YAAI,OAAM,MAAM,KAAI,QAAQ,KAAK,CAAC,KAAK,SAAS,mBAAmB;AACjE,iBAAO;AAAA;AAGT,eAAO,KAAK,SAAS,QAAO,MAAK,SAAQ;AAAA;AAAA,OAQ1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,eAAO,KAAK,eAAe;AAAA;AAAA,OAW5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,QAAO,MAAK,aAAa;AAChD,YAAI,SAAS;AACb,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI,UAAU,KAAK,UAAU;AAC7B,YAAI,UAAU,KAAK,UAAU;AAE7B,YAAI,YAAY,KAAK,YAAY,GAAG;AAClC,iBAAO;AAAA;AAGT,YAAI,QAAQ,gBAAgB,SAAQ,kCAAkC,KAAK,cAAc,KAAK;AAC9F,YAAI,OAAO,KAAK,IAAI,KAAK,IAAI,UAAU,GAAG,IAAI,KAAK,IAAI,OAAM,KAAK,KAAI;AACtE,YAAI,OAAO,KAAK,IAAI,KAAK,IAAI,UAAU,GAAG,IAAI,KAAK,IAAI,OAAM,KAAK,KAAI;AAEtE,aAAK,IAAI,KAAK,IAAI,OAAM,KAAK,KAAI,MAAM,KAAK,MAAM,KAAK;AACrD,gBAAM;AAEN,cAAI,cAAc,KAAK,IAAI,KAAK,SAAS,cAAc,KAAK;AAE5D,eAAK,IAAI,KAAK,IAAI,OAAM,KAAK,KAAI,MAAM,KAAK,MAAM,KAAK;AACrD,gBAAI,gBAAgB,MAAM;AACxB;AAAA;AAGF,gBAAI,KAAK,MAAM,KAAK,MAAM,GAAG,KAAK,UAAU;AAAA;AAG9C,cAAI,gBAAgB,MAAM;AACxB,mBAAO,KAAK;AAAA;AAAA;AAIhB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,QAAO,MAAK;AAClC,eAAO,WAAU,KAAK,SAAS,QAAO,MAAK,SAAQ;AAAA;AAAA,OAUpD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAO,MAAK;AAC1C,eAAO,WAAU,KAAK,SAAS,QAAO,MAAK,SAAQ;AAAA;AAAA,OAMpD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,WAAW;AAChB,aAAK,YAAY;AACjB,aAAK,aAAa;AAClB,aAAK,aAAa;AAClB,aAAK,eAAe,SAAS;AAC7B,aAAK,eAAe;AACpB,aAAK,iBAAiB;AAAA;AAAA,QAEtB,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAIA,gBAAe;AACb,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;AAGT,MAAO,kBAAQ;;;AGv/BR,0BAAwB,MAAM,YAAY;AAC/C,QAAI,YAAY,OAAO,SAAS,WAAW,UAAY,QAAQ;AAE/D,QAAI,CAAC,UAAS,YAAY;AACxB;AAAA;AAGF,QAAI,yBAAyB,UAAS;AACtC,QAAI,eAAe;AACnB,eAAW,WAAW,SAAU,OAAO,UAAU;AAC/C,UAAI,aAAa,eAAgB,EAAC,0BAA0B,0BAA0B,CAAC,eAAe,YAAY,YAAY;AAC5H,qBAAa,YAAY;AAAA;AAAA;AAG7B,WAAO;AAAA;AAYF,yBAAuB,YAAW;AACvC,QAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAQvF,2BAAsB;AAAA;AAEtB,YAAQ,aAAY;AAEpB,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,kBAAW,UAAU,aAAa,MAAM;AAAA;AAG1C,WAAO;AAAA;AASF,4BAA0B,OAAO;AACtC,WAAO,OAAO,UAAU,UAAU,SAAS;AAAA;AAStC,kBAAgB,aAAW,cAAc;AAC9C,QAAI,CAAC,eAAa;AAChB,YAAM,IAAI,MAAM,qBAAqB,OAAO;AAAA;AAAA;AAUzC,qBAAmB,UAAU;AAClC,WAAO,aAAa,QAAQ,aAAa;AAAA;;;ACtF3C,mCAAO;AAIP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAqDzU,MAAO,qBAAS,WAAY;AAC1B,WAAO;AAAA,MA+BL,uBAAuB;AAAA,MAoCvB,YAAY;AAAA,MAwCZ,WAAW;AAAA,MAkBX,mBAAmB;AAAA,MAkBnB,gBAAgB;AAAA,MAiChB,cAAc;AAAA,MAoBd,mBAAmB;AAAA,MAoBnB,gBAAgB;AAAA,MAmDhB,gBAAgB;AAAA,MAwChB,aAAa;AAAA,MAuBb,aAAa;AAAA,MAuBb,aAAa;AAAA,MA2Bb,qBAAqB;AAAA,MA8BrB,MAAM;AAAA,MA2CN,OAAO;AAAA,MA2CP,iBAAiB;AAAA,MA2CjB,WAAW;AAAA,MAoCX,YAAY;AAAA,MAkCZ,oBAAoB;AAAA,MA2BpB,oBAAoB;AAAA,MAqDpB,SAAS;AAAA,MAgFT,eAAe;AAAA,MAuDf,eAAe;AAAA,MAgDf,WAAW;AAAA,MAgCX,wBAAwB;AAAA,MAuDxB,UAAU;AAAA,MA+DV,aAAa;AAAA,MAmDb,UAAU;AAAA,MAiDV,WAAW;AAAA,MAmCX,eAAe;AAAA,MA8Bf,qBAAqB;AAAA,MA6BrB,wBAAwB;AAAA,MA8BxB,qBAAqB;AAAA,MA+GrB,eAAe;AAAA,MAwCf,MAAM;AAAA,MAgCN,YAAY;AAAA,MAgCZ,YAAY;AAAA,MA8BZ,kBAAkB;AAAA,MA6BlB,aAAa;AAAA,MA4Cb,wBAAwB;AAAA,MA2BxB,cAAc;AAAA,MA2Dd,cAAc;AAAA,MA2Dd,QAAQ;AAAA,MA8BR,oBAAoB;AAAA,MAyCpB,YAAY;AAAA,QACV,KAAK;AAAA,QACL,KAAK;AAAA;AAAA,MA2DP,YAAY;AAAA,QACV,eAAe;AAAA;AAAA,MAsCjB,QAAQ;AAAA,MAmCR,wBAAwB;AAAA,MA4BxB,SAAS;AAAA,MAoBT,kBAAkB;AAAA,MAoBlB,iBAAiB;AAAA,MAmBjB,cAAc;AAAA,MAgFd,UAAU;AAAA,MA2BV,mBAAmB;AAAA,MAmCnB,QAAQ;AAAA,MA8CR,eAAe;AAAA,MA8Cf,YAAY;AAAA,MA8BZ,sBAAsB;AAAA,MAuBtB,YAAY,oBAAoB,KAAK;AACnC,YAAI;AACJ,YAAI;AACJ,YAAI;AAEJ,aAAK,MAAM,GAAG,SAAS,KAAK,aAAa,MAAM,QAAQ,OAAO;AAC5D,kBAAQ,KAAK,cAAc,KAAK;AAEhC,cAAI,QAAQ,WAAW,OAAO;AAC5B,mBAAO;AAAA;AAAA;AAIX,eAAO;AAAA;AAAA,MAwBT,YAAY,oBAAoB,KAAK;AACnC,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AAEJ,aAAK,MAAM,GAAG,SAAS,KAAK,aAAa,MAAM,QAAQ,OAAO;AAC5D,kBAAQ,KAAK,cAAc,KAAK;AAEhC,cAAI,QAAQ,WAAW,OAAO;AAC5B,gBAAI,UAAQ,WAAW,UAAU;AAC/B,qBAAO,KAAK,YAAY,KAAK;AAC7B,qBAAO,cAAc,KAAK,YAAY,KAAK,OAAO;AAAA;AAGpD,mBAAO;AAAA;AAAA;AAIX,eAAO;AAAA;AAAA,MAiCT,OAAO;AAAA,MAwCP,UAAU;AAAA,MA6BV,YAAY;AAAA,MAmCZ,QAAQ;AAAA,MA0BR,oBAAoB;AAAA,MAiCpB,kBAAkB;AAAA,MAkClB,oBAAoB;AAAA,MAkCpB,eAAe;AAAA,MAkCf,iBAAiB;AAAA,MAqBjB,SAAS;AAAA,MAqBT,SAAS;AAAA,MAiDT,YAAY;AAAA,MA4BZ,SAAS;AAAA,MAqBT,SAAS;AAAA,MA6BT,cAAc;AAAA,MAsBd,cAAc;AAAA,MA+Ed,oBAAoB;AAAA,MAiCpB,eAAe;AAAA,MA2Bf,YAAY;AAAA,MA8BZ,qBAAqB;AAAA,MA+CrB,eAAe;AAAA,MAiBf,sBAAsB;AAAA,MAsCtB,uBAAuB;AAAA,MA4BvB,iBAAiB;AAAA,MAsCjB,aAAa;AAAA,MA+Bb,0BAA0B;AAAA,MAyB1B,iBAAiB;AAAA,MAyBjB,cAAc;AAAA,MA2Bd,UAAU;AAAA,MA6BV,uBAAuB;AAAA,MA0BvB,eAAe;AAAA,MA8Df,UAAU;AAAA,MAoCV,YAAY;AAAA,MA2BZ,gBAAgB;AAAA,MA+ChB,YAAY;AAAA,MAoDZ,QAAQ;AAAA,MAkCR,eAAe;AAAA,MA0Df,eAAe;AAAA,MAiCf,mBAAmB;AAAA,MAsCnB,gBAAgB;AAAA,MAkChB,iBAAiB;AAAA,MA+CjB,QAAQ;AAAA,MAmBR,WAAW;AAAA,MAmBX,WAAW;AAAA,MA8BX,UAAU;AAAA,MAoCV,QAAQ;AAAA,MAyCR,gBAAgB;AAAA,MAgChB,UAAU;AAAA,QACR,KAAK;AAAA,QACL,KAAK;AAAA;AAAA,MAkCP,OAAO;AAAA,MAwCP,cAAc;AAAA,MAiCd,UAAU;AAAA,MA4BV,gBAAgB;AAAA,MAuDhB,MAAM;AAAA,MA2CN,mBAAmB;AAAA,MA+BnB,MAAM;AAAA,MA4DN,WAAW;AAAA,MA4BX,+BAA+B;AAAA,MA6B/B,4BAA4B;AAAA,MAmC5B,aAAa;AAAA,MAmCb,OAAO;AAAA,MAuCP,UAAU;AAAA;AAAA;;;ACr7Id,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAShH,uCAAqC;AACnC,WAAoB,+BAAa,sBAAqB;AACpD,wBAAgB,MAAM;AAAA;AAAA;AA6B1B,MAAI,aAA0B,2BAAY;AACxC,yBAAoB,KAAK;AACvB,wBAAgB,MAAM;AAOtB,WAAK,WAAW;AAOhB,WAAK,OAAO,KAAK,SAAS;AAC1B,cAAO,KAAK,MAAM;AAClB,WAAK,KAAK,WAAW;AAAA;AASvB,mBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,UAAU;AACnC,gBAAO,KAAK,MAAM;AAClB,gBAAO,KAAK,MAAM,eAAe,SAAS,MAAM;AAAA;AAAA;AAIpD,WAAO;AAAA;;;ACrGT,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AA8B/Q,MAAI,YAAyB,2BAAY;AACvC,wBAAmB,YAAY;AAC7B,wBAAgB,MAAM;AAEtB,UAAI,WAAW,WAAW;AAO1B,WAAK,OAAO,IAAI;AAAA;AASlB,mBAAa,YAAW,CAAC;AAAA,MACvB,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,UAAU;AACnC,gBAAO,KAAK,MAAM;AAClB,gBAAO,KAAK,MAAM,eAAe,SAAS,MAAM;AAAA;AAAA;AAIpD,WAAO;AAAA;;;ACzET,mCAAO;AAYP,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAiI/Q,MAAI,iBAA8B,yBAAU,kBAAkB;AAC5D,6BAAwB,cAAc;AACpC,wBAAgB,MAAM;AAEtB,WAAK,eAAe;AAOpB,WAAK,OAAO;AAQZ,WAAK,QAAQ;AAWb,WAAK,QAAQ,oBAAI;AAAA;AAUnB,mBAAa,iBAAgB,CAAC;AAAA,MAC5B,KAAK;AAAA,MACL,OAAO,gBAAgB,KAAK;AAC1B,eAAO,WAAY;AACjB,iBAAO,iBAAiB;AAAA,WACvB;AAEH,YAAI,YAAY,KAAK,sBAAsB;AAE3C,YAAI;AAEJ,YAAI,aAAa,GAAG;AAClB,mBAAS,KAAK,KAAK;AAEnB,cAAI,WAAW,QAAQ;AACrB,qBAAS,KAAK,aAAa;AAC3B,iBAAK,KAAK,aAAa;AAAA;AAAA,eAEpB;AACL,mBAAS,KAAK,aAAa;AAE3B,cAAI,KAAK,MAAM,OAAO,GAAG;AACvB,gBAAI,aAAa,KAAK,MAAM,SAAS,OAAO;AAE5C,iBAAK,MAAM,OAAO;AAClB,iBAAK,KAAK,cAAc;AACxB,iBAAK,MAAM,OAAO;AAAA,iBACb;AACL,iBAAK,KAAK,KAAK;AACf,iBAAK,MAAM,OAAO,KAAK,KAAK,SAAS;AAAA;AAAA;AAIzC,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,KAAK;AAC1B,YAAI;AAEJ,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,eAAO,WAAY;AACjB,iBAAO,iBAAiB,QAAQ,UAAU;AAAA,WACzC;AACH,YAAI,aAAa;AACjB,YAAI,aAAa,KAAK,KAAK;AAE3B,iBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,qBAAW,KAAK,aAAa;AAC7B,eAAK,KAAK,KAAK;AAAA;AAGjB,QAAC,eAAc,KAAK,OAAO,OAAO,MAAM,aAAa,CAAC,UAAU,OAAO,KAAK,MAAM,SAAS,KAAK,GAAG,OAAO;AAAA;AAAA,OAS3G;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,KAAK;AAC1B,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,eAAO,WAAY;AACjB,iBAAO,iBAAiB,QAAQ,UAAU;AAAA,WACzC;AACH,YAAI,UAAU,KAAK,MAAM,OAAO,UAAU,OAAO,KAAK,MAAM,SAAS,SAAS,KAAK;AAEnF,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,cAAI,eAAe,QAAQ;AAE3B,cAAI,OAAO,iBAAiB,UAAU;AACpC,iBAAK,MAAM,IAAI;AAAA;AAAA;AAAA;AAAA,OAUpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,eAAO,KAAK,KAAK,SAAS,KAAK,MAAM;AAAA;AAAA,OAQtC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAkB;AACvB,YAAI,QAAQ;AAEZ,eAAO,YAAY,KAAK,MAAM,SAAU,GAAG,QAAO;AAChD,iBAAO,CAAC,MAAM,MAAM,IAAI;AAAA,WACvB,OAAO;AAAA;AAAA,OAQX;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,eAAe;AAEnB,iBAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AACzC,cAAI,WAAW,KAAK,sBAAsB;AAE1C,cAAI,aAAa,IAAI;AACnB,yBAAa,KAAK,CAAC,UAAU,KAAK,KAAK;AAAA;AAAA;AAI3C,YAAI,YAAY;AAChB,eAAO;AAAA,UACL,MAAM,iBAAgB;AACpB,gBAAI,YAAY,aAAa,QAAQ;AACnC,kBAAI,QAAQ,aAAa;AACzB,2BAAa;AACb,qBAAO;AAAA,gBACL;AAAA,gBACA,MAAM;AAAA;AAAA;AAIV,mBAAO;AAAA,cACL,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,OASb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,OAAO;AACZ,aAAK,QAAQ;AACb,aAAK,MAAM;AAAA;AAAA,OASZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,KAAK;AACzC,eAAO,KAAK,MAAM,SAAS,MAAM,KAAK,MAAM,OAAO;AAAA;AAAA,OASpD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,WAAW;AAC/C,eAAO,KAAK,MAAM,QAAQ;AAAA;AAAA,OAQ3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,eAAO,KAAK;AAAA;AAAA;AAIhB,WAAO;AAAA,IACP,OAAO;;;AC/XT,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAY/Q,MAAI,0BAA0B,CAAC,QAAQ;AA4BvC,MAAI,aAA0B,2BAAY;AACxC,yBAAoB,YAAY;AAC9B,UAAI,QAAQ;AAEZ,wBAAgB,MAAM;AAQtB,WAAK,aAAa;AAQlB,WAAK,QAAQ,IAAI,eAAe,WAAY;AAC1C,eAAO,MAAM;AAAA;AAAA;AAWjB,mBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,oBAAoB,gBAAgB,UAAU;AACnD,YAAI,OAAO,KAAK,QAAQ;AACxB,gBAAO,MAAM;AACb,gBAAO,MAAM,eAAe,SAAS,MAAM;AAAA;AAAA,OAS5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,gBAAgB,QAAQ;AACnD,aAAK,MAAM,OAAO,gBAAgB;AAAA;AAAA,OASnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,gBAAgB,QAAQ;AACnD,aAAK,MAAM,OAAO,gBAAgB;AAAA;AAAA,OASnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,gBAAgB;AACtC,eAAO,KAAK,MAAM,OAAO;AAAA;AAAA,OAS1B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,gBAAgB;AACjD,eAAO,KAAK,MAAM,OAAO,gBAAgB;AAAA;AAAA,OAM1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAsB;AAC3B,aAAK,MAAM;AAAA;AAAA,OASZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,eAAO,cAAc,KAAK,WAAW,sBAAsB,yBAAyB;AAAA;AAAA;AAIxF,WAAO;AAAA;;;AC5IT,mCAAO;AASP,gCAAO;AAvBP,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAehL,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAsC/Q,MAAI,WAAwB,2BAAY;AACtC,uBAAkB,YAAY;AAC5B,UAAI,QAAQ;AAEZ,wBAAgB,MAAM;AAQtB,WAAK,aAAa;AASlB,WAAK,QAAQ,IAAI,eAAe,WAAY;AAC1C,eAAO,MAAM;AAAA;AAAA;AAYjB,mBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,oBAAoB,aAAa,gBAAgB,UAAU;AAChE,YAAI,OAAO,KAAK,QAAQ,aAAa;AACrC,gBAAO,MAAM;AACb,gBAAO,MAAM,eAAe,SAAS,MAAM;AAAA;AAAA,OAS5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,aAAa,QAAQ;AAC7C,aAAK,MAAM,OAAO,aAAa;AAAA;AAAA,OAShC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,gBAAgB,QAAQ;AACnD,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC1C,eAAK,MAAM,OAAO,GAAG,OAAO,gBAAgB;AAAA;AAAA;AAAA,OAU/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,aAAa,QAAQ;AAC7C,aAAK,MAAM,OAAO,aAAa;AAAA;AAAA,OAShC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,gBAAgB,QAAQ;AACnD,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC1C,eAAK,MAAM,OAAO,GAAG,OAAO,gBAAgB;AAAA;AAAA;AAAA,OAY/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,aAAa,gBAAgB,KAAK;AACxD,YAAI,WAAW,KAAK,MAAM,OAAO,aAAa,OAAO;AAErD,YAAI,QAAQ,QAAQ;AAClB,iBAAO;AAAA;AAGT,eAAO,SAAS;AAAA;AAAA,OAWjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,aAAa,gBAAgB,KAAK,OAAO;AAC/D,YAAI,WAAW,KAAK,MAAM,OAAO,aAAa,OAAO;AACrD,iBAAS,OAAO;AAAA;AAAA,OAUjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,aAAa,gBAAgB,KAAK;AAC3D,YAAI,WAAW,KAAK,MAAM,OAAO,aAAa,OAAO;AACrD,eAAO,SAAS;AAAA;AAAA,OAUjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,YAAI,QAAQ;AACZ,YAAI,OAAO,MAAM,KAAK,KAAK,MAAM;AAEjC,iBAAS,MAAM,GAAG,MAAM,KAAK,QAAQ,OAAO;AAC1C,gBAAM,KAAK,MAAM,OAAO,qBAAmB,KAAK,KAAK;AAAA;AAGvD,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,aAAa;AACzC,eAAO,WAAY;AACjB,iBAAO,iBAAiB;AAAA,WACvB;AACH,YAAI,WAAW,IAAI,IAAI,KAAK;AAC5B,eAAO,SAAS,IAAI,eAAe,MAAM,KAAK,SAAS,IAAI,aAAa,YAAY;AAAA;AAAA,OAMrF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAsB;AAC3B,aAAK,MAAM;AAAA;AAAA,OASZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,SAAS;AAEb,eAAO,IAAI,eAAe,SAAU,gBAAgB;AAClD,iBAAO,OAAO,YAAY;AAAA;AAAA;AAAA,OAW7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,gBAAgB;AAC1C,YAAI,cAAa,KAAK,WAAW,mBAAmB;AACpD,eAAO,IAAI;AAAA;AAAA;AAIf,WAAO;AAAA;;;AC5RT,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAoC/Q,MAAI,cAA2B,2BAAY;AACzC,0BAAqB,KAAK;AACxB,UAAI,QAAQ;AAEZ,UAAI,iBAAiB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACzF,UAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEnF,wBAAgB,MAAM;AAKtB,WAAK,MAAM;AAKX,WAAK,aAAa,IAAI,WAAW;AACjC,WAAK,WAAW,WAAW;AAK3B,WAAK,YAAY,IAAI,UAAU,KAAK;AAKpC,WAAK,aAAa,IAAI,WAAW,KAAK;AAKtC,WAAK,WAAW,IAAI,SAAS,KAAK;AAClC,eAAS,QAAQ,SAAU,eAAe;AACxC,eAAO,IAAI,cAAc;AAAA;AAAA;AAY7B,mBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,eAAO,KAAK,WAAW;AAAA;AAAA,OAQxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,UAAU;AACzC,aAAK,WAAW,WAAW;AAAA;AAAA,OAU5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,eAAO,KAAK,UAAU;AAAA;AAAA,OAQvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,UAAU;AACxC,aAAK,UAAU,WAAW;AAAA;AAAA,OAa3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,gBAAgB;AAC5C,eAAO,KAAK,WAAW,QAAQ;AAAA;AAAA,OAShC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,gBAAgB,UAAU;AACzD,aAAK,WAAW,WAAW,gBAAgB;AAAA;AAAA,OAiB5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,aAAa,gBAAgB,MAAM;AAC7D,YAAI,YAAY,KAAK,WACjB,eAAe,KAAK;AACxB,YAAI,WAAW,KAAK,SAAS,QAAQ,aAAa;AAClD,iBAAS,YAAY;AACrB,iBAAS,YAAY;AACrB,iBAAS,MAAM;AACf,iBAAS,MAAM;AACf,aAAK,cAAc,oBAAoB;AACvC,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,aAAa,gBAAgB,KAAK;AACpE,YAAI,OAAO,QAAQ,UAAU;AAC3B,gBAAM,IAAI,MAAM;AAAA;AAGlB,eAAO,KAAK,SAAS,QAAQ,aAAa,gBAAgB;AAAA;AAAA,OAW3D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,aAAa,gBAAgB,KAAK,OAAO;AACnE,aAAK,SAAS,QAAQ,aAAa,gBAAgB,KAAK;AAAA;AAAA,OAUzD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,aAAa,gBAAgB,UAAU;AACpE,aAAK,SAAS,WAAW,aAAa,gBAAgB;AAAA;AAAA,OAUvD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,aAAa,gBAAgB,KAAK;AAC/D,aAAK,SAAS,WAAW,aAAa,gBAAgB;AAAA;AAAA,OAUvD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,eAAO,KAAK,SAAS;AAAA;AAAA,OAUtB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,aAAa;AAC7C,eAAO,KAAK,SAAS,cAAc;AAAA;AAAA,OASpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,aAAa;AACrC,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,aAAK,SAAS,UAAU,aAAa;AAAA;AAAA,OAStC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,aAAa;AACrC,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,aAAK,SAAS,UAAU,aAAa;AAAA;AAAA,OAStC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,gBAAgB;AAC3C,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,aAAK,SAAS,aAAa,gBAAgB;AAC3C,aAAK,WAAW,aAAa,gBAAgB;AAAA;AAAA,OAS9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,gBAAgB;AAC3C,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,aAAK,SAAS,aAAa,gBAAgB;AAC3C,aAAK,WAAW,aAAa,gBAAgB;AAAA;AAAA,OAM9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,aAAK,SAAS;AAAA;AAAA,OAMf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAsB;AAC3B,aAAK,SAAS;AACd,aAAK,WAAW;AAAA;AAAA;AAIpB,WAAO;AAAA;AAIT,QAAM,aAAa;;;ACvVnB,mCAAO;AAIP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AA4BzU,uBAAqB,MAAM,oBAAoB,kBAAkB,QAAQ;AACvE,QAAI,cAAc,OAAO,aACrB,UAAU,OAAO,SACjB,aAAa,OAAO,YACpB,iBAAiB,OAAO,gBACxB,SAAS,OAAO,QAChB,WAAW,OAAO;AACtB,QAAI,4BAA4B,iBAAiB;AACjD,QAAI,YAAY,YAAY;AAE5B,QAAI,MAAM,QAAQ,UAAU,aAAa;AACvC,kBAAY,WAAW;AAAA,eACd,WAAW,UAAU,aAAa;AAC3C,kBAAY,WAAW;AAAA,WAClB;AACL,kBAAY,WAAW;AAAA;AAGzB,QAAI,SAAS;AACX,cAAQ;AAAA;AAGV,WAAO,YAAY,SAAS,SAAS,OAAO,4BAA4B,MAAM,UAAU;AAGxF,QAAI,mBAAmB,cAAc,WAAW,kBAAkB;AAChE,aAAO,YAAY,SAAS,kBAAkB,MAAM,UAAU;AAAA;AAGhE,QAAI,aAAa,IAAI,gBAAQ,aAAa,MAAM;AAGhD,uBAAmB;AAEnB,QAAI,UAAQ,UAAU,YAAY,SAAS,MAAM;AAC/C,UAAI,CAAE,MAAK,QAAQ,KAAK,SAAS;AAI/B,eAAO,CAAC;AAAA;AAAA,eAED,SAAS,MAAM;AACxB,UAAI,aAAa,WAAW;AAE5B,aAAO;AACP,UAAI;AACJ,UAAI,IAAI;AACR,UAAI,OAAO;AAEX,WAAK,IAAI,GAAG,OAAO,UAAU,WAAW,IAAI,MAAM,KAAK;AACrD,YAAK,aAAY,aAAa,YAAY,YAAY,aAAa,eAAe,UAAU,YAAY;AACtG,gBAAM,UAAU;AAChB,eAAK,KAAK;AAAA,mBACD,YAAY,aAAa,SAAS;AAC3C,gBAAM,UAAU,WAAW;AAC3B,eAAK,KAAK;AAAA,eACL;AACL,gBAAM;AAEN,mBAAS,IAAI,GAAG,OAAO,UAAU,WAAW,IAAI,MAAM,KAAK;AACzD,gBAAI,KAAK;AAAA;AAGX,eAAK,KAAK;AAAA;AAAA;AAAA,WAGT;AACL,YAAM,IAAI,MAAM,GAAG,OAAO,gBAAgB,uDAAuD,OAAO,UAAQ,OAAO;AAAA;AAGzH,QAAI,MAAM,QAAQ,KAAK,KAAK;AAC1B,kBAAY,WAAW;AAAA;AAGzB,cAAU,OAAO;AACjB,eAAW,aAAa;AACxB,eAAW,OAAO;AAClB,eAAW,WAAW,YAAY;AAClC,eAAW,YAAY,WAAW,UAAU,KAAK;AACjD,eAAW,YAAY,WAAW,UAAU,KAAK;AACjD,eAAW,qBAAqB,WAAW,mBAAmB,KAAK;AAEnE,qBAAiB;AACjB,gBAAY,SAAS,QAAQ,OAAO,4BAA4B,MAAM,UAAU;AAGhF,QAAI,mBAAmB,cAAc,WAAW,kBAAkB;AAChE,kBAAY,SAAS,iBAAiB,MAAM,UAAU;AAAA;AAIxD,QAAI,CAAC,UAAU;AAGb,kBAAY,SAAS,eAAe,MAAM,WAAW,mBAAmB,aAAa;AACrF,kBAAY;AAAA;AAAA;;;ACrIhB,mCAAO;AAOP,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAqBxQ,MAAI,qBAAkC,2BAAY;AACvD,iCAA4B,aAAa;AACvC,UAAI,QAAQ;AAEZ,wBAAgB,MAAM;AAKtB,WAAK,cAAc;AAKnB,WAAK,eAAe,oBAAI;AACxB,kBAAY,aAAa,oBAAoB,SAAU,UAAU;AAC/D,eAAO,MAAM,eAAe;AAAA;AAE9B,0BAAM,eAAe,IAAI,gBAAgB,SAAU,iBAAiB;AAClE,YAAI,iBAAiB;AACnB,gBAAM,aAAa;AAAA;AAAA,SAEpB,KAAK,YAAY;AAAA;AAetB,mBAAa,qBAAoB,CAAC;AAAA,MAChC,KAAK;AAAA,MACL,OAAO,wBAAwB,UAAU;AACvC,YAAI;AAEJ,YAAI,cAAc,SAAS,KACvB,iBAAiB,SAAS;AAE9B,YAAK,yBAAwB,KAAK,aAAa,IAAI,kBAAkB,QAAQ,0BAA0B,UAAU,sBAAsB,IAAI,iBAAiB;AAC1J;AAAA;AAGF,YAAI,YAAY,SAAS,WACrB,YAAY,SAAS;AACzB,YAAI,MAAM,KAAK,YAAY;AAC3B,YAAI,OAAO,IAAI,UAAU;AACzB,iBAAS,OAAO;AAChB,YAAI,SAAS,qBAAqB,WAAW,WAAW;AAExD,YAAI,WAAW,eAAe,UAAU,UAAU,SAAS,OAAO;AAClE,YAAI,eAAe,WAAW,SAAS,SAAS,SAAS,MAAM,aAAa,gBAAgB,QAAQ;AAEpG,YAAI,UAAU;AACZ,cAAI,cAAc;AAChB,gBAAI;AAEJ,yBAAa,OAAQ,sBAAqB,aAAa,UAAU,QAAQ,uBAAuB,SAAS,qBAAqB;AAAA,iBACzH;AACL,2BAAe;AAAA,cACb,MAAM;AAAA;AAAA;AAAA;AAKZ,YAAI,cAAc;AAChB,eAAK,YAAY,eAAe,aAAa,gBAAgB;AAAA;AAG/D,YAAI,SAAS,oBAAoB,WAAW,WAAW;AAEvD,YAAI,CAAC,KAAK,aAAa,IAAI,cAAc;AACvC,eAAK,aAAa,IAAI,aAAa,oBAAI;AAAA;AAGzC,aAAK,aAAa,IAAI,aAAa,IAAI;AAAA;AAAA;AAI3C,WAAO;AAAA;;;AlLrHT,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AA2B/D,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AA6BhL,MAAI,aAAa;AA2BF,gBAAc,aAAa,cAAc;AACtD,QAAI,QAAQ;AAEZ,QAAI,sBAAqB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC7F,QAAI,yBAAyB;AAC7B,QAAI,WAAW;AACf,QAAI,gBAAe,IAAI,qBAAa;AACpC,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI,WAAW;AACf,iBAAa,WAAW,qBAAqB,aAAa;AAC1D,QAAI,cAAc,IAAI,YAAY,UAAU,cAAc,CAAC;AAC3D,QAAI,YAAY,YAAY;AAC5B,QAAI,aAAa,YAAY;AAC7B,QAAI,kBAAkB;AAEtB,QAAI,kBAAkB,sBAAqB;AACzC,6BAAuB;AAAA;AAWzB,SAAK,cAAc;AAQnB,SAAK,eAAe,YAAY;AAQhC,SAAK,aAAa,KAAK,aAAa;AAUpC,SAAK,cAAc;AAWnB,SAAK,yBAAyB;AAW9B,SAAK,4BAA4B;AACjC,mBAAuB,KAAK;AAC5B,SAAK,YAAY,KAAK,aAAa,cAAc;AACjD,SAAK,aAAa;AAClB,gBAAY,aAAa,KAAK,WAAW,YAAY;AAErD,QAAI,eAAe,OAAO;AACxB,yBAAmB,aAAa,YAAY;AAAA;AAG9C,SAAK,OAAO,MAAM,OAAO;AAUzB,SAAK,oBAAoB,IAAI;AAS7B,SAAK,iBAAiB,IAAI;AAC1B,iBAAa,IAAI,mBAAW;AAE5B,QAAI,CAAC,KAAK,YAAY,MAAM,KAAK,YAAY,GAAG,UAAU,GAAG,OAAO,OAAO;AACzE,WAAK,YAAY,KAAK,KAAK;AAAA;AAG7B,QAAI,2BAA2B,mCAAkC,QAAQ;AACvE,UAAI,YAAY,OAAO,KACnB,eAAe,OAAO;AAC1B,aAAO,IAAI,eACX,aAAa,IAAI,SAAS,eAAe,6BAA6B,aAAa,WAAW,gBAAgB,IAAI,SAAS,kBAAkB,6BAA6B,gBAAgB;AAAA;AAG5L,QAAI,2BAA2B,mCAAkC,QAAQ;AACvE,UAAI,gBAAgB,OAAO,KACvB,mBAAmB,OAAO;AAC9B,aAAO,IAAI,eACX,iBAAiB,IAAI,SAAS,eAAe,6BAA6B,iBAAiB,eAAe,oBAAoB,IAAI,SAAS,kBAAkB,6BAA6B,oBAAoB;AAAA;AAIhN,QAAI,YAAY,IAAI,mBAAU,WAAW;AAAA,MACvC,WAAW,qBAAqB;AAC9B,eAAO,SAAS;AAAA;AAAA,MAElB,WAAW,qBAAqB;AAC9B,eAAO,SAAS;AAAA;AAAA,MAElB,WAAW,mBAAmB,MAAM;AAClC,eAAO,QAAQ,UAAU;AAAA;AAAA,MAE3B,gBAAgB,0BAA0B;AACxC,eAAO,SAAS,oBAAoB,SAAS,kBAAkB,aAAa;AAAA;AAAA,MAE9E,qBAAqB,+BAA+B;AAClD,eAAO,MAAM,KAAK;AAAA;AAAA,MAEpB,qBAAqB,+BAA+B;AAClD,eAAO,MAAM,KAAK;AAAA;AAAA,MAEpB;AAAA,MACA;AAAA,MACA,yBAAyB,iCAAiC,WAAW,cAAc;AACjF,eAAO,SAAS,YAAY,WAAW,cAAc;AAAA;AAAA;AAGzD,SAAK,YAAY;AAEjB,QAAI,2BAA2B,mCAAkC,MAAM;AACrE,UAAI,uBAAuB,KAAK;AAEhC,UAAI,sBAAsB;AACxB,cAAM,UAAU;AAAA;AAAA;AAIpB,SAAK,kBAAkB,aAAa,gBAAgB;AACpD,SAAK,eAAe,aAAa,gBAAgB;AACjD,SAAK,UAAU,aAAa,uBAAuB,SAAU,YAAY;AACvE,YAAM,SAAS,uBAAuB;AAAA;AAExC,SAAK,UAAU,aAAa,2BAA2B,SAAU,YAAY;AAC3E,YAAM,SAAS,2BAA2B;AAAA;AAE5C,SAAK,UAAU,aAAa,qBAAqB,SAAU,YAAY;AACrE,YAAM,SAAS,qBAAqB;AAEpC,UAAI,WAAW,MAAM,GAAG;AACtB,mBAAW,MAAM,MAAM,KAAK,GAAG,QAAQ;AAAA;AAGzC,UAAI,WAAW,MAAM,GAAG;AACtB,mBAAW,MAAM,MAAM,KAAK,GAAG,QAAQ;AAAA;AAAA;AAG3C,SAAK,UAAU,aAAa,oBAAoB,SAAU,YAAY;AACpE,UAAI,mBAAmB,yBAAyB;AAEhD,UAAI,iBAAiB,MAAM,UAAU;AAErC,UAAI,wBAAwB,eAAe,WACvC,QAAO,sBAAsB,MAC7B,KAAK,sBAAsB;AAE/B,UAAI,sBAAsB,eAAe,SAAS;AAElD,YAAM,SAAS,kBAAkB,MAAK,KAAK,MAAK,KAAK,GAAG,KAAK,GAAG,KAAK,kBAAkB;AAEvF,YAAM,SAAS,wBAAwB,MAAK,KAAK,SAAS,UAAU,MAAK,MAAM,GAAG,KAAK,SAAS,UAAU,GAAG,MAAM,kBAAkB;AAGrI,UAAI,wBAAwB,MAAM,UAAU;AAE5C,UAAI,uBAAuB,MAAM,UAAU,cAAc;AAEzD,UAAI,eAAe;AAEnB,UAAI,wBAAwB;AAC1B,uBAAe;AAAA;AAGjB,UAAI,iBAAiB,aAAa;AAChC,uBAAe,CAAC,iBAAiB;AAAA;AAGnC,UAAI,wBAAwB,MAAM,UAAU;AAE5C,UAAI,2BAA2B,MAAM,UAAU;AAE/C,UAAI,iBAAiB,OAAO;AAC1B,YAAI,CAAC,uBAAuB;AAC1B,cAAI,wBAAwB,CAAC,MAAM,UAAU,cAAc;AACzD,kBAAM,KAAK,eAAe,yBAAyB,qBAAqB;AAAA,iBACnE;AACL,kBAAM,KAAK,eAAe,yBAAyB;AAAA;AAAA,mBAE5C,uBAAuB;AAChC,gBAAM,KAAK,yBAAyB,SAAS,eAAe,6BAA6B,WAAW;AAAA,mBAC3F,0BAA0B;AACnC,gBAAM,KAAK,2BAA2B,SAAS,kBAAkB,6BAA6B,WAAW;AAAA;AAAA;AAO7G,UAAI,yBAAyB,0BAA0B;AACrD,iBAAS,MAAM,aAAa,CAAC,uBAAuB;AAAA,iBAC3C,uBAAuB;AAChC,oBAAY,MAAM,aAAa;AAC/B,iBAAS,MAAM,aAAa;AAAA,iBACnB,0BAA0B;AACnC,oBAAY,MAAM,aAAa;AAC/B,iBAAS,MAAM,aAAa;AAAA,aACvB;AACL,oBAAY,MAAM,aAAa,CAAC,uBAAuB;AAAA;AAGzD,YAAM,gBAAgB;AAAA;AAExB,SAAK,UAAU,aAAa,0BAA0B,SAAU,YAAY;AAC1E,UAAI,sBAAsB,WAAW,SAAS;AAC9C,UAAI,wBAAwB,WAAW,sBACnC,QAAO,sBAAsB,MAC7B,KAAK,sBAAsB;AAE/B,YAAM,SAAS,qBAAqB,MAAK,KAAK,MAAK,KAAK,GAAG,KAAK,GAAG,KAAK;AAExE,YAAM,SAAS,2BAA2B,MAAK,KAAK,SAAS,UAAU,MAAK,MAAM,GAAG,KAAK,SAAS,UAAU,GAAG,MAAM;AAAA;AAExH,SAAK,UAAU,aAAa,4BAA4B,SAAU,YAAY;AAC5E,UAAI,oBAAoB,MAAM,SAAS,4BAA4B,WAAW;AAE9E,UAAI,WAAW,OAAO;AACpB,mBAAW,QAAQ;AAAA;AAAA;AAGvB,SAAK,UAAU,aAAa,8BAA8B,SAAU,iBAAiB;AACnF,YAAM,SAAS,wBAAwB;AAAA;AAEzC,SAAK,UAAU,aAAa,6BAA6B,SAAU,QAAQ,iBAAiB,iBAAiB;AAC3G,YAAM,SAAS,6BAA6B,QAAQ,iBAAiB;AAAA;AAEvE,SAAK,UAAU,aAAa,4BAA4B,SAAU,iBAAiB;AACjF,YAAM,SAAS,sBAAsB;AAAA;AAEvC,SAAK,UAAU,aAAa,2BAA2B,SAAU,QAAQ,iBAAiB,iBAAiB;AACzG,YAAM,SAAS,2BAA2B,QAAQ,iBAAiB;AAAA;AAErE,SAAK,UAAU,aAAa,iBAAiB,WAAY;AACvD,oBAAc;AAEd,YAAM;AAEN,kBAAY,MAAM,aAAa,CAAC,uBAAuB;AAEvD,YAAM,SAAS;AAAA;AAEjB,SAAK,UAAU,aAAa,oBAAoB,SAAU,WAAW;AACnE,YAAM,MAAM,cAAc,WAAW,GAAG;AAAA;AAE1C,SAAK,UAAU,aAAa,oBAAoB,SAAU,WAAW;AACnE,YAAM,MAAM,cAAc,WAAW,GAAG;AAAA;AAE1C,WAAO;AAAA,MAcL,OAAO,eAAe,QAAQ,QAAO;AACnC,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,YAAI,SAAS,UAAU,SAAS,IAAI,UAAU,KAAK;AACnD,YAAI,gBAAgB,UAAU,SAAS,IAAI,UAAU,KAAK;AAC1D,YAAI;AAEJ,YAAI,wBAAwB,gCAA+B,SAAS;AAClE,cAAI,QAAQ,WAAW,GAAG;AACxB,mBAAO;AAAA;AAGT,cAAI,gBAAgB,qBAAmB;AAGvC,wBAAc,KAAK,SAAU,OAAO,OAAO;AACzC,gBAAI,QAAQ,iBAAe,OAAO,IAC9B,SAAS,MAAM;AAEnB,gBAAI,QAAQ,iBAAe,OAAO,IAC9B,SAAS,MAAM;AAEnB,gBAAI,WAAW,QAAQ;AACrB,qBAAO;AAAA;AAGT,mBAAO,SAAS,SAAS,IAAI;AAAA;AAG/B,cAAI,oBAAoB,YAAY,eAAe,SAAU,KAAK,OAAO;AACvE,gBAAI,QAAQ,iBAAe,OAAO,IAC9B,aAAa,MAAM,IACnB,cAAc,MAAM;AAExB,gBAAI,eAAe,IAAI,IAAI,SAAS;AAEpC,gBAAI,gBAAgB,iBAAe,cAAc,IAC7C,YAAY,cAAc,IAC1B,aAAa,cAAc;AAE/B,gBAAI,gBAAgB,YAAY;AAEhC,gBAAI,cAAc,eAAe;AAC/B,kBAAI,cAAc,KAAK,IAAI,cAAe,iBAAgB,aAAa;AACvE,2BAAa,MAAM;AAAA,mBACd;AACL,kBAAI,KAAK,CAAC,YAAY;AAAA;AAGxB,mBAAO;AAAA,aACN,CAAC,cAAc;AAClB,iBAAO;AAAA;AAKT,gBAAQ;AAAA,eACD;AACH,gBAAI,qBAAqB,SAAS;AAElC,gBAAI,UAAU,YAAY,oBAAoB;AAC5C;AAAA;AAIF,qBAAQ,UAAU,UAAS,SAAQ;AACnC,oBAAQ,QAAQ,UAAU,QAAO,QAAQ;AAEzC,gBAAI,OAAO;AACT,0BAAY,UAAU,SAAS,cAAc,SAAQ;AACrD,kBAAI,uBAAuB,UAAU,cAAc;AACnD,kBAAI,mBAAmB,yBAAyB,QAAQ,yBAAyB,SAAS,SAAS,qBAAqB;AACxH,kBAAI,iBAAiB,qBAAqB,QAAQ,qBAAqB,SAAS,SAAS,iBAAiB;AAG1G,kBAAI,UAAU,mBAAmB,kBAAkB,QAAO;AACxD,oBAAI,wBAAwB,qBAAqB,IAC7C,eAAe,sBAAsB,KACrC,kBAAkB,sBAAsB;AAC5C,oBAAI,oBAAoB,iBAAiB;AAEzC,oBAAI,UAAU,yBAAyB;AACrC,sCAAoB;AAAA;AAKtB,0BAAU,mBAAmB;AAE7B,0BAAU,kBAAkB,IAAI,eAAW,iBAAiB,OAAO,oBAAoB;AACvF,0BAAU,YAAY,IAAI,eAAW,eAAe,OAAO;AAAA,qBACtD;AACL,yBAAS;AAAA;AAAA;AAKb;AAAA,eAEG;AACH,oBAAQ,QAAQ,UAAU,QAAO,QAAQ;AAEzC,gBAAI,OAAO;AACT,0BAAY,aAAa,SAAS,iBAAiB,SAAQ;AAE3D,kBAAI,MAAM,QAAQ,UAAU,aAAa;AACvC,oBAAI,cAAc,CAAC,QAAO;AAC1B,4BAAY,UAAU;AAEtB,sBAAM,UAAU,OAAO,MAAM,UAAU,YAAY;AAAA;AAGrD,kBAAI,yBAAyB,UAAU,cAAc;AAErD,kBAAI,oBAAoB,2BAA2B,QAAQ,2BAA2B,SAAS,SAAS,uBAAuB;AAE/H,kBAAI,qBAAqB,sBAAsB,QAAQ,sBAAsB,SAAS,SAAS,kBAAkB;AAIjH,kBAAI,UAAU,uBAAuB,sBAAsB,QAAO;AAChE,oBAAI,yBAAyB,uBAAuB,IAChD,gBAAgB,uBAAuB,KACvC,mBAAmB,uBAAuB;AAC9C,oBAAI,kBAAkB,kBAAkB;AAExC,oBAAI,UAAU,4BAA4B;AACxC,oCAAkB;AAAA;AAKpB,0BAAU,mBAAmB;AAE7B,0BAAU,kBAAkB,IAAI,eAAW,iBAAiB,qBAAqB,QAAQ;AACzF,0BAAU,YAAY,IAAI,eAAW,eAAe,mBAAmB;AAAA,qBAClE;AACL,yBAAS;AAAA;AAAA;AAKb;AAAA,eAEG;AACH,gBAAI,YAAY,oBAAmB,SAAS;AAC1C,kBAAI,UAAS;AAEb,wBAAU,SAAS,SAAU,OAAO;AAClC,oBAAI,QAAQ,iBAAe,OAAO,IAC9B,aAAa,MAAM,IACnB,cAAc,MAAM;AAExB,oBAAI,YAAY,QAAQ,cAAc,SAAS,cAAc,IAAI,KAAK,IAAI,aAAa,SAAQ;AAG/F,oBAAI,OAAO,UAAU,aAAa;AAEhC,+BAAa,KAAK,IAAI,aAAa,SAAQ;AAAA;AAK7C,oBAAI,aAAa,QAAQ,UAAU,YAAY,aAAa;AAE5D,oBAAI,CAAC,YAAY;AACf;AAAA;AAGF,4BAAY,UAAU,SAAS,cAAc,YAAY;AACzD,oBAAI,YAAY,SAAS;AACzB,oBAAI,eAAe,UAAU;AAE7B,oBAAI,gBAAgB,YAAY,GAAG;AACjC,4BAAU,gBAAgB,KAAK,IAAI,aAAa,eAAe;AAAA;AAGjE,oBAAI,kBAAkB,UAAU;AAEhC,oBAAI,mBAAmB,aAAa,YAAY,iBAAiB;AAC/D,4BAAU,mBAAmB,KAAK,IAAI,aAAa;AAAA;AAGrD,2BAAU;AAAA;AAAA;AAId,gBAAI,MAAM,QAAQ,SAAQ;AACxB,wBAAU,sBAAsB;AAAA,mBAC3B;AACL,wBAAU,CAAC,CAAC,QAAO;AAAA;AAGrB,iBAAK;AAEL,qBAAS;AAGT;AAAA,eAEG;AACH,gBAAI,YAAY,oBAAmB,SAAS;AAC1C,kBAAI,UAAS;AAEb,wBAAU,SAAS,SAAU,QAAQ;AACnC,oBAAI,SAAS,iBAAe,QAAQ,IAChC,aAAa,OAAO,IACpB,cAAc,OAAO;AAEzB,oBAAI,YAAY,QAAQ,cAAc,SAAS,cAAc,IAAI,KAAK,IAAI,aAAa,SAAQ;AAC/F,oBAAI,sBAAsB,SAAS,iBAAiB;AAGpD,oBAAI,OAAO,UAAU,aAAa;AAEhC,+BAAa,KAAK,IAAI,aAAa,SAAQ;AAAA;AAK7C,oBAAI,aAAa,QAAQ,UAAU,YAAY,aAAa;AAE5D,oBAAI,CAAC,YAAY;AACf;AAAA;AAGF,4BAAY,aAAa,qBAAqB;AAC9C,oBAAI,mBAAmB,UAAU;AAEjC,oBAAI,oBAAoB,YAAY,GAAG;AACrC,4BAAU,oBAAoB,KAAK,IAAI,aAAa,mBAAmB;AAAA;AAGzE,oBAAI,MAAM,QAAQ,UAAU,aAAa;AACvC,sBAAI,OAAO,wBAAwB,aAAa;AAC9C,0CAAsB;AAAA;AAGxB,4BAAU,WAAW,OAAO,qBAAqB;AAAA;AAGnD,2BAAU;AAAA;AAAA;AAId,gBAAI,MAAM,QAAQ,SAAQ;AACxB,wBAAU,sBAAsB;AAAA,mBAC3B;AACL,wBAAU,CAAC,CAAC,QAAO;AAAA;AAGrB,iBAAK;AAEL,qBAAS;AAGT;AAAA;AAGA,kBAAM,IAAI,MAAM,4BAA6B,OAAO,QAAQ;AAAA;AAGhE,YAAI,CAAC,eAAe;AAClB,eAAK;AAAA;AAAA;AAAA,MAST,mBAAmB,6BAA6B;AAC9C,YAAI,UAAU,UAAU;AACxB,YAAI,eAAe,UAAU;AAC7B,YAAI,UAAU,UAAU;AACxB,YAAI,eAAe,UAAU;AAE7B,YAAI,SAAS;AAEX,cAAI,WAAW,SAAS;AAExB,cAAI,WAAW,SAAS;AAGtB,oBAAQ,UAAU,UAAU,UAAU,UAAU;AAAA;AAAA;AAIpD,YAAI,cAAc;AAChB,cAAI,YAAY,SAAS,eAAe;AAExC,cAAI,YAAY,cAAc;AAC5B,gBAAI,mBAAmB,eAAe;AACtC,gBAAI,eAAe,KAAK,IAAI,kBAAkB,UAAU,UAAU,SAAS;AAG3E,oBAAQ,UAAU,SAAS,aAAa,cAAc;AAAA;AAAA;AAI1D;AACE,cAAI;AAEJ,cAAI,WAAW,cAAc;AAC3B,wBAAY,SAAS,eAAe;AAAA;AAGtC,cAAI,cAAc,SAAS;AAE3B,cAAI,WAAW,CAAC,UAAU,WAAW,cAAc,SAAS;AAG1D,gBAAI,eAAe,UAAU;AAC7B,yBAAa;AACb,oBAAQ,UAAU,aAAa,cAAc;AAAA;AAI/C,cAAI,gBAAgB,CAAC,UAAU,WAAW,SAAS,aAAa,WAAW,YAAY,cAAc;AACnG,0BAAc,SAAS;AACvB,gBAAI,mBAAmB,eAAe;AAEtC,gBAAI,gBAAgB,KAAK,IAAI,kBAAkB,UAAU,UAAU;AAInE,oBAAQ,UAAU,aAAa,eAAe;AAAA;AAAA;AAGlD,YAAI,WAAW,SAAS;AACxB,YAAI,WAAW,SAAS;AAExB,YAAI,aAAa,KAAK,aAAa,GAAG;AACpC,oBAAU;AAAA;AAGZ,YAAI,UAAU,cAAc;AAC1B,oBAAU,UAAU,eAAe,SAAU,OAAO;AAClD,gBAAI,mBAAmB;AACvB,gBAAI,UAAU,MAAM,KAAK;AACzB,gBAAI,UAAU,MAAM,KAAK;AACzB,gBAAI,QAAQ,MAAM,GAAG;AACrB,gBAAI,QAAQ,MAAM,GAAG;AAErB,gBAAI,UAAU,WAAW,GAAG;AAC1B,wBAAU,WAAW;AACrB,iCAAmB;AAEnB,kBAAI,QAAQ,SAAS;AACnB,wBAAQ;AAAA;AAAA,uBAED,QAAQ,WAAW,GAAG;AAC/B,sBAAQ,WAAW;AACnB,iCAAmB;AAEnB,kBAAI,UAAU,OAAO;AACnB,0BAAU;AAAA;AAAA;AAKd,gBAAI,UAAU,WAAW,GAAG;AAC1B,wBAAU,WAAW;AACrB,iCAAmB;AAEnB,kBAAI,QAAQ,SAAS;AACnB,wBAAQ;AAAA;AAAA,uBAED,QAAQ,WAAW,GAAG;AAC/B,sBAAQ,WAAW;AACnB,iCAAmB;AAEnB,kBAAI,UAAU,OAAO;AACnB,0BAAU;AAAA;AAAA;AAId,gBAAI,kBAAkB;AACpB,uBAAS,WAAW,SAAS,SAAS,OAAO;AAAA;AAAA;AAAA;AAKnD,YAAI,SAAS,MAAM;AACjB,mBAAS,KAAK;AAAA;AAAA;AAAA,MAkBlB,mBAAmB,2BAA2B,QAAO,OAAO,MAAK,QAAQ,QAAQ,WAAW,QAAQ;AAElG,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI,UAAU;AACd,YAAI,UAAU;AACd,YAAI,mBAAmB;AACvB,YAAI,WAAW,OAAM;AACrB,YAAI,cAAc,OAAM;AACxB,eAAO,MAAM;AAEb,YAAI,SAAS,GAAG;AACd,iBAAO;AAAA;AAGT,YAAI,uBAAuB;AAC3B,YAAI,oBAAoB;AAExB,YAAI,UAAS,OAAM;AACjB,iCAAuB,KAAI,MAAM,cAAc;AAC/C,8BAAoB,KAAI,MAAM,WAAW;AAAA;AAI3C,gBAAQ;AAAA,eACD;AAEH,gBAAI,yBAAyB,MAAM;AACnC,gBAAI,sBAAsB,uBAAuB;AAEjD,gBAAI,4BAA4B,KAAK,IAAI,qBAAqB;AAC9D,gBAAI,uBAAuB,SAAS,UAAU,MAAM;AAEpD,gBAAI,0BAA0B,MAAM,sBAAsB,MAAM,aAAa,cAAc;AAE3F,iBAAK,IAAI,GAAG,IAAI,2BAA2B,KAAK,GAAG;AACjD,kBAAI,IAAI,qBAAqB;AAC3B,qBAAK,IAAI,GAAG,OAAO,uBAAuB,GAAG,QAAQ,IAAI,oBAAoB,MAAM,KAAK,GAAG;AAEzF,yCAAuB,GAAG,KAAK,uBAAuB,GAAG,IAAI;AAAA;AAG/D,oBAAI,IAAI,wBAAwB,QAAQ;AACtC,mCAAiB,KAAK,uBAAuB,GAAG,OAAO,wBAAwB;AAAA,uBAC1E;AAGL,mCAAiB,KAAK,uBAAuB,GAAG,OAAO,IAAI,MAAM,qBAAqB,QAAQ,KAAK;AAAA;AAAA,qBAEhG;AAEL,iCAAiB,KAAK,uBAAuB,IAAI,qBAAqB,OAAO,wBAAwB;AAAA;AAAA;AAIzG,qBAAS,kBAAkB,UAAU,aAAa,MAAM;AACxD;AAAA,eAEG;AACH,gBAAI,mBAAmB,MAAM;AAE7B,gBAAI,yBAAyB,KAAK,IAAI,kBAAkB;AACxD,gBAAI,wBAAwB,SAAS,UAAU,MAAM,UAAU,IAAI,SAAU,SAAS;AACpF,qBAAO,QAAQ,MAAM;AAAA;AAGvB,iBAAK,IAAI,GAAG,IAAI,wBAAwB,KAAK,GAAG;AAC9C,kBAAI,IAAI,kBAAkB;AACxB,qBAAK,IAAI,GAAG,OAAO,MAAM,GAAG,QAAQ,IAAI,uBAAuB,MAAM,KAAK,GAAG;AAE3E,wBAAM,GAAG,KAAK,MAAM,GAAG,IAAI;AAAA;AAG7B,oBAAI,IAAI,sBAAsB,QAAQ;AACpC,2BAAS,IAAI,GAAG,IAAI,sBAAsB,GAAG,QAAQ,KAAK,GAAG;AAC3D,0BAAM,GAAG,KAAK,sBAAsB,GAAG;AAAA;AAAA,uBAEpC;AACL,sBAAI;AAIJ,kBAAC,YAAW,MAAM,IAAI,KAAK,MAAM,UAAU,qBAAmB,IAAI,MAAM,sBAAsB,GAAG,QAAQ,KAAK;AAAA;AAAA,qBAE3G;AAEL,sBAAM,KAAK,MAAM,IAAI,MAAM,MAAM,GAAG,wBAAwB,OAAO,sBAAsB;AAAA;AAAA;AAI7F,qBAAS,kBAAkB,UAAU,aAAa;AAClD;AAAA,eAEG;AAAA;AAGH,oBAAQ,MAAM,OAAM;AACpB,oBAAQ,MAAM,OAAM;AACpB,gBAAI,WAAW;AAAA,cAEb,KAAK,QAAO,SAAQ,KAAI,MAAM,OAAM,MAAM,IAAI;AAAA,cAC9C,KAAK,QAAO,SAAQ,KAAI,MAAM,OAAM,MAAM,IAAI;AAAA;AAEhD,gBAAI,aAAa;AACjB,gBAAI,gBAAgB;AACpB,gBAAI,WAAW;AACf,gBAAI;AAEJ,gBAAI,gBAAgB,wBAAuB,KAAK;AAC9C,kBAAI,MAAM,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC9E,kBAAI,WAAW,MAAM,MAAM,MAAM;AAEjC,kBAAI,QAAQ,MAAM;AAChB,uBAAO,SAAS,MAAM,SAAS;AAAA;AAGjC,qBAAO;AAAA;AAGT,gBAAI,iBAAiB,MAAM;AAC3B,gBAAI,qBAAqB,OAAM,KAAI,MAAM,OAAM,MAAM,IAAI;AAEzD,gBAAI,MAAK;AACP,qBAAO;AAAA,mBACF;AACL,qBAAO,KAAK,IAAI,gBAAgB;AAAA;AAGlC,iBAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACzB,kBAAI,QAAO,QAAQ,MAAM,KAAI,OAAO,qBAAqB,kBAAkB,CAAC,UAAU,kBAAkB,QAAQ,MAAM,SAAS,cAAc,KAAK,QAAQ,OAAO,UAAU,SAAS;AAClL;AAAA;AAGF,kBAAI,YAAY,IAAI;AACpB,kBAAI,iBAAiB,cAAc,WAAW;AAC9C,kBAAI,qBAAqB,OAAM,KAAI,MAAM,OAAM,MAAM,IAAI;AAEzD,kBAAI,MAAK;AACP,uBAAO;AAAA,qBACF;AACL,uBAAO,KAAK,IAAI,gBAAgB;AAAA;AAGlC,sBAAQ,MAAM,OAAM;AACpB,yBAAW,SAAS,YAAY,QAAQ,KAAK,QAAQ;AAErD,kBAAK,YAAW,qBAAqB,WAAW,oBAAoB,SAAS,gBAAgB;AAC3F,8BAAc;AACd,wBAAQ,OAAO;AACf,wBAAQ;AAGR;AAAA;AAGF,8BAAgB;AAEhB,mBAAK,IAAI,GAAG,IAAI,MAAM,KAAK;AACzB,oBAAI,QAAO,QAAQ,MAAM,KAAI,OAAO,qBAAqB,kBAAkB,CAAC,UAAU,qBAAqB,QAAQ,MAAM,SAAS,cAAc,KAAK,QAAQ,OAAO,UAAU,SAAS;AACrL;AAAA;AAGF,2BAAW,SAAS,YAAY,QAAQ,KAAK,QAAQ;AAErD,oBAAK,YAAW,qBAAqB,WAAW,oBAAoB,SAAS,mBAAmB;AAC9F,mCAAiB;AACjB,0BAAQ,OAAO;AACf,0BAAQ;AACR;AAAA;AAGF,oBAAI,SAAS,YAAY,WAAW,iBAAiB;AACnD,0BAAQ,OAAO;AAGf;AAAA;AAGF,oBAAI,eAAe,IAAI;AACvB,oBAAI,QAAQ,cAAc,WAAW;AACrC,oBAAI,WAAW,SAAS,cAAc,QAAQ,KAAK,QAAQ;AAC3D,oBAAI,SAAQ;AAAA,kBACV,KAAK;AAAA,kBACL,KAAK;AAAA;AAGP,oBAAI,WAAW,iBAAiB;AAC9B,sBAAI,SAAS,SAAS,SAAS,gCAAgC,QAAO,WAAW,OAAO,QAAQ,IAAI;AAEpG,sBAAI,QAAQ;AACV,4BAAQ,YAAY,OAAO,SAAS,QAAQ,OAAO;AAAA;AAAA;AAIvD,oBAAI,UAAU,QAAQ,UAAQ,WAAW,UAAU;AAIjD,sBAAI,MAAM,QAAQ,UAAU,aAAa;AAAM,+BAAW;AAE1D,sBAAI,aAAa,QAAQ,UAAQ,cAAc,UAAU;AACvD,+BAAW;AAAA,yBACN;AACL,wBAAI,iBAAiB,WAAW,MAAM,QAAQ,YAAY,WAAW,SAAS,MAAM;AACpF,wBAAI,cAAc,WAAW,MAAM,QAAQ,SAAS,QAAQ,MAAM,MAAM;AAGxE,wBAAI,cAAc,gBAAgB,cAAc;AAC9C,8BAAQ,UAAU;AAAA,2BACb;AACL,iCAAW;AAAA;AAAA;AAAA,2BAGN,aAAa,QAAQ,UAAQ,cAAc,UAAU;AAC9D,6BAAW;AAAA;AAGb,oBAAI,UAAU;AACZ,0BAAQ,KAAK,CAAC,QAAQ,KAAK,QAAQ,KAAK;AAAA;AAG1C,2BAAW;AACX,wBAAQ,OAAO;AAAA;AAGjB,sBAAQ,OAAO;AAAA;AAGjB,qBAAS,cAAc,SAAS,MAAM,MAAM,UAAU;AACtD;AAAA;AAAA;AAAA;AAYR,yBAAqB,cAAc;AACjC,UAAI,yBAAyB,sBAAsB;AAEnD,UAAI,sBAAsB,yBAAyB;AACjD,iBAAS,SAAS,wBAAwB;AAC1C,mBAAW,WAAW;AACtB,iBAAS,SAAS,uBAAuB;AAAA,aACpC;AACL,0CAAkC;AAAA;AAAA;AAYtC,0BAAsB,WAAW,eAAe;AAC9C,UAAI,UAAU,cAAc,cAAc,SAAS,cAAc,SAAS;AAE1E,UAAI,UAAU;AACZ,iBAAS,SAAS;AAAA,aACb;AACL,YAAI,0BAA0B;AAC9B,YAAI,gBAAgB;AAEpB,YAAI,WAAW,YAAY;AACzB,oCAA0B,MAAM,QAAQ,WAAW,cAAc,WAAW,aAAa,cAAc,WAAW;AAAA;AAGpH,YAAI,eAAe;AACjB,0BAAgB,MAAM,QAAQ,iBAAiB,gBAAgB,cAAc;AAAA;AAG/E,YAAI,oBAAoB,sBAAsB,yBAAyB;AACvE,YAAI,iBAAiB,sBAAsB,eAAe;AAE1D,YAAI,kBAAkB,QAAQ;AAC5B,sBAAY,SAAS;AAAA;AAGvB,YAAI,eAAe,QAAQ;AACzB,mBAAS,SAAS;AAAA;AAAA;AAItB,iBAAW,aAAa;AAAA;AAG1B,SAAK,OAAO,WAAY;AACtB,iBAAW,QAAQ,UAAU;AAC7B,eAAS,SAAS;AAElB,UAAI,qBAAqB,YAAY;AACnC,iBAAS,SAAS,aAAa;AAAA;AAGjC,WAAK,eAAe,WAAW;AAC/B,WAAK,OAAO,IAAI,kBAAU;AAC1B,sBAAgB,sBAAc,YAAY,UAAU,WAAW;AAC/D,eAAS,SAAS;AAClB,WAAK,kBAAkB;AAEvB,WAAK,KAAK;AAEV,UAAI,UAAQ,cAAc,UAAU;AAClC,iBAAS,SAAS,eAAe,SAAS,IAAI,SAAS;AACvD,mBAAW;AAAA;AAGb,eAAS,SAAS;AAAA;AAQpB,+BAA2B;AAEzB,UAAI,WAAW;AACf,aAAO;AAAA,QACL,mBAAmB;AAAA,QACnB,OAAO;AAAA,QACP,qBAAqB,+BAA+B;AAClD,eAAK,qBAAqB;AAC1B,qBAAW;AAAA;AAAA,QAEb,0BAA0B,oCAAoC;AAC5D,eAAK,oBAAoB,KAAK,oBAAoB,IAAI,IAAI,IAAI,KAAK,oBAAoB;AACvF,eAAK;AAAA;AAAA,QAEP,cAAc,wBAAwB;AAAA;AAAA,QACtC,qBAAqB,+BAA+B;AAClD,cAAI,KAAK,sBAAsB,KAAK,aAAa,OAAO;AACtD,uBAAW;AACX,iBAAK,aAAa,KAAK;AAAA;AAAA;AAAA;AAAA;AAc/B,6BAAyB,aAAa;AAGpC,UAAI,qBAAqB,YAAY,QAAQ,KAAK;AAElD,UAAI,MAAM,WAAW,yBAAyB,OAAO;AACnD,eAAO,WAAW;AAAA;AAGpB,aAAO;AAAA;AAUT,6BAAyB,SAAS,QAAQ,UAAU;AAClD,UAAI,CAAC,QAAQ,QAAQ;AACnB;AAAA;AAGF,UAAI,eAAe,SAAS;AAC5B,UAAI,qBAAqB,SAAS,SAAS,gBAAgB,SAAS,UAAU;AAC9E,UAAI,mBAAmB;AAEvB,UAAI,uBAAuB,OAAO;AAChC,YAAI,cAAc;AAChB,uBAAa;AAAA;AAGf;AAAA;AAGF,UAAI,sBAAsB,IAAI;AAE9B,0BAAoB,eAAe,SAAU,SAAS;AACpD,YAAI,gBAAgB,kBAAkB;AACpC,uBAAa;AAAA;AAGf,iBAAS;AAAA;AAGX,eAAS,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;AAC5C,YAAI,QAAQ,OAAO,MAAM;AACvB,kBAAQ,OAAO,GAAG;AAAA,eACb;AACL,cAAI,aAAa,iBAAe,QAAQ,IAAI,IACxC,MAAM,WAAW,IACjB,OAAO,WAAW,IAClB,WAAW,WAAW;AAE1B,cAAI,MAAM,QAAQ,UAAU;AAC5B,cAAI,iBAAiB,SAAS,YAAY,KAAK;AAE/C,cAAI,eAAe,SAAS,aAAa,OAAO,aAAa,YAAY,cAAc,WAAW;AAChG,oBAAQ,GAAG,KAAK,gBAAgB;AAAA;AAKlC,cAAI,SAAS,iBAAiB,iBAAiB;AAC7C,gCAAoB;AACpB,qBAAS,aAAa,QAAQ,GAAG,IAAI,gBAAgB,SAAU,QAAO,yBAAyB;AAC7F,qBAAO,SAAU,QAAQ;AACvB,oBAAI,OAAO,WAAW,WAAW;AAC/B,wBAAM,IAAI,MAAM;AAAA;AAGlB,oBAAI,WAAW,SAAS,wBAAwB,iBAAiB,OAAO;AACtE,qCAAmB;AACnB,0BAAQ,OAAO,QAAO;AAEtB,0CAAwB,QAAQ;AAEhC,sBAAI,OAAO,SAAS,QAAQ,wBAAwB,WAAW,wBAAwB;AAEvF,sBAAI,SAAS,MAAM;AACjB,gCAAY,MAAM,UAAU;AAAA;AAAA;AAKhC,oCAAoB;AAAA;AAAA,cAEtB,GAAG,iBAAiB;AAAA;AAAA;AAAA;AAK5B,0BAAoB;AAAA;AAatB,0BAAsB,SAAS,QAAQ;AACrC,UAAI,IAAI,QAAQ,SAAS;AAEzB,UAAI,IAAI,GAAG;AACT;AAAA;AAGF,aAAO,KAAK,GAAG,KAAK;AAClB,YAAI,iBAAiB;AAErB,YAAI,QAAQ,OAAO,MAAM;AACvB,kBAAQ,OAAO,GAAG;AAGlB;AAAA;AAGF,YAAK,SAAQ,GAAG,OAAO,QAAQ,QAAQ,GAAG,OAAO,WAAY,SAAQ,GAAG,OAAO,QAAQ,QAAQ,GAAG,OAAO,SAAS;AAEhH;AAAA;AAGF,YAAI,UAAU,gBAAgB;AAC5B,iBAAO,QAAQ,GAAG,KAAK,SAAS,cAAc,GAAG;AAC/C,gBAAI,sBAAsB,QAAQ,UAAU,QAAQ,QAAQ;AAE5D,gBAAI,uBAAuB,GAAG;AAC5B,0BAAY,UAAU,MAAM;AAAA,mBACvB;AACL,+BAAiB;AACjB;AAAA;AAAA;AAAA;AAKN,YAAI,SAAS,aAAa,WAAY,EAAC,UAAU,WAAW,UAAU,QAAQ,WAAW,MAAM,UAAU,mBAAmB;AAC1H,iBAAO,QAAQ,UAAU,QAAQ,GAAG,MAAM,SAAS,cAAc,GAAG;AAClE,gBAAI,yBAAyB,QAAQ,UAAU,QAAQ,QAAQ;AAE/D,gBAAI,0BAA0B,GAAG;AAC/B,0BAAY,aAAa,MAAM;AAAA,mBAC1B;AACL,+BAAiB;AACjB;AAAA;AAAA;AAAA;AAKN,YAAI,gBAAgB;AAElB;AAAA;AAGF,gBAAQ,IAAI,QAAQ,GAAG,IAAI,QAAQ,GAAG,IAAI,QAAQ,GAAG;AAAA;AAGvD,eAAS,kBAAkB;AAE3B,WAAK;AACL,eAAS,SAAS,sBAAsB,SAAS;AACjD,oBAAc;AAEd,eAAS,gBAAgB;AAEzB,oBAAc;AACd,eAAS,KAAK;AACd,eAAS,SAAS,eAAe,SAAS,UAAU;AACpD,UAAI,eAAe,SAAS;AAE5B,UAAI,gBAAgB,UAAU,aAAa,eAAe;AACxD,qBAAa;AAAA;AAAA;AAejB,SAAK,eAAe,SAAU,OAAO,gBAAgB,UAAU,QAAQ;AACrE,UAAI,YAAY,SAAS,iBAAiB;AAS1C,oBAAc,OAAO;AACnB,YAAI,iBAAiB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAGzF,YAAI,CAAC,kBAAkB,eAAe,WAAW,MAAM;AACrD,mBAAS;AACT;AAAA;AAGF,YAAI,MAAM,eAAe;AACzB,YAAI,MAAM,eAAe;AACzB,YAAI,KAAK,SAAS,QAAQ,KAAK,KAAK;AAEpC,YAAI,MAAM,GAAG,aAAa,MAAM;AAC9B,cAAI,gBAAgB,SAAS,eAAe,6BAA6B;AACzE,cAAI,mBAAmB,SAAS,kBAAkB,6BAA6B;AAC/E,mBAAS,KAAK,GAAG,WAAW,SAAS,aAAa,eAAe,kBAAkB;AAAA;AAGrF,iBAAS;AAAA;AAGX,UAAI,UAAS,YAAY;AACvB,oBAAY,SAAU,YAAY;AAChC,iBAAO,SAAU,WAAW,mBAAmB;AAC7C,8BAAkB,WAAW,KAAK;AAAA;AAAA,UAEpC;AAAA;AAGJ,UAAI,WAAW,YAAY;AAEzB,gBAAQ,SAAS,SAAS,kBAAkB,OAAO,eAAe,WAAW,eAAe,MAAM;AAElG,iBAAS,mBAAmB,WAAY;AACtC,oBAAU,KAAK,gBAAgB,OAAO,SAAU,OAAO;AACrD,gBAAI,CAAC,UAAU;AACb;AAAA;AAIF,oBAAQ,SAAS,SAAS,iBAAiB,OAAO,OAAO,eAAe,WAAW,eAAe,MAAM;AACxG,2BAAe,QAAQ;AACvB,iBAAK;AACL,qBAAS,SAAS,qBAAqB,OAAO,OAAO,eAAe,WAAW,eAAe,MAAM;AAAA;AAAA;AAAA,aAGnG;AAEL,iBAAS,mBAAmB,WAAY;AACtC,yBAAe,QAAQ;AACvB,eAAK,eAAe,OAAO;AAAA;AAAA;AAAA;AAajC,iCAA6B,KAAK,WAAW,OAAO;AAClD,UAAI,MAAM,QAAQ,MAAM;AAEtB,eAAO;AAAA;AAGT,aAAO,CAAC,CAAC,KAAK,WAAW;AAAA;AAgB3B,SAAK,gBAAgB,SAAU,KAAK,QAAQ,OAAO,QAAQ;AACzD,UAAI,QAAQ,oBAAoB,KAAK,QAAQ;AAC7C,UAAI,UAAU;AACd,UAAI,eAAe;AACnB,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,WAAK,IAAI,GAAG,OAAO,MAAM,QAAQ,IAAI,MAAM,KAAK;AAC9C,YAAI,UAAQ,MAAM,QAAQ,UAAU;AAClC,gBAAM,IAAI,MAAM;AAAA;AAGlB,YAAI,OAAO,MAAM,GAAG,OAAO,UAAU;AACnC,gBAAM,IAAI,MAAM;AAAA;AAGlB,YAAI,MAAM,GAAG,MAAM,KAAK,aAAa;AACnC,iBAAO,MAAM,GAAG;AAAA,eACX;AACL,iBAAO,QAAQ,UAAU,MAAM,GAAG;AAAA;AAGpC,gBAAQ,KAAK,CAAC,MAAM,GAAG,IAAI,MAAM,WAAW,UAAU,KAAK,cAAc,MAAM,GAAG,KAAK,MAAM,GAAG,KAAK,MAAM,GAAG;AAAA;AAGhH,UAAI,CAAC,gBAAgB,UAAQ,SAAS,UAAU;AAC9C,uBAAe;AAAA;AAGjB,eAAS,SAAS,sBAAsB,SAAS;AACjD,sBAAgB,SAAS,cAAc,WAAY;AACjD,qBAAa,SAAS;AAAA;AAAA;AAiB1B,SAAK,mBAAmB,SAAU,KAAK,MAAM,OAAO,QAAQ;AAC1D,UAAI,QAAQ,oBAAoB,KAAK,MAAM;AAC3C,UAAI,UAAU;AACd,UAAI,eAAe;AACnB,UAAI;AACJ,UAAI;AAEJ,WAAK,IAAI,GAAG,OAAO,MAAM,QAAQ,IAAI,MAAM,KAAK;AAC9C,gBAAQ,KAAK,CAAC,MAAM,GAAG,IAAI,MAAM,GAAG,IAAI,WAAW,UAAU,KAAK,cAAc,MAAM,GAAG,KAAK,MAAM,GAAG,KAAK,MAAM,GAAG;AAAA;AAGvH,UAAI,CAAC,gBAAgB,UAAQ,SAAS,UAAU;AAC9C,uBAAe;AAAA;AAGjB,eAAS,SAAS,yBAAyB,SAAS;AACpD,sBAAgB,SAAS,cAAc,WAAY;AACjD,qBAAa,SAAS;AAAA;AAAA;AAa1B,SAAK,SAAS,WAAY;AACxB,UAAI,YAAY,CAAC,SAAS,eAAe;AACvC,qBAAa,SAAS;AACtB,iBAAS,SAAS;AAAA;AAAA;AAYtB,SAAK,WAAW,WAAY;AAC1B,UAAI,KAAK,eAAe;AACtB,qBAAa;AACb,iBAAS,SAAS;AAAA;AAAA;AAYtB,SAAK,cAAc,WAAY;AAC7B,aAAO,eAAe,SAAS;AAAA;AAYjC,SAAK,gBAAgB,WAAY;AAC/B,UAAI,iBAAiB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACzF,UAAI,wBAAwB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEhG,eAAS,gBAAgB,gBAAgB;AAAA;AAwB3C,SAAK,oBAAoB,SAAU,KAAK,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,QAAQ;AACxG,UAAI,CAAE,WAAQ,WAAW,YAAY,UAAQ,MAAM,QAAQ,WAAW;AACpE,cAAM,IAAI,MAAM;AAAA;AAGlB,UAAI,IAAI,OAAO,WAAW,WAAW,IAAI,eAAW,QAAQ,UAAU;AACtE,aAAO,KAAK,kBAAkB,IAAI,eAAW,KAAK,SAAS,OAAO,GAAG,QAAQ,QAAQ,WAAW;AAAA;AAelG,SAAK,YAAY,SAAU,QAAQ,QAAO,QAAQ;AAChD,UAAI;AAEJ,eAAS,OAAO,UAAU,QAAQ,WAAW,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,IAAI,OAAO,GAAG,OAAO,MAAM,QAAQ;AAC9G,iBAAS,OAAO,KAAK,UAAU;AAAA;AAGjC,aAAQ,YAAW,SAAS,UAAU,MAAM,UAAU,CAAC,QAAQ,QAAO,QAAQ,OAAO;AAAA;AAevF,SAAK,YAAY,SAAU,KAAK,QAAO,QAAQ;AAC7C,UAAI;AAEJ,eAAS,QAAQ,UAAU,QAAQ,WAAW,IAAI,MAAM,QAAQ,IAAI,QAAQ,IAAI,IAAI,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACrH,iBAAS,QAAQ,KAAK,UAAU;AAAA;AAGlC,aAAQ,aAAY,SAAS,UAAU,MAAM,WAAW,CAAC,KAAK,QAAO,QAAQ,OAAO;AAAA;AAiBtF,SAAK,cAAc,WAAY;AAE7B,UAAI,UAAU,cAAc;AAC1B,eAAO,SAAS,UAAU,oBAAoB,SAAU,QAAQ;AAC9D,cAAI,QAAO,OAAO,MACd,KAAK,OAAO;AAChB,iBAAO,CAAC,MAAK,KAAK,MAAK,KAAK,GAAG,KAAK,GAAG;AAAA;AAAA;AAAA;AAc7C,SAAK,kBAAkB,WAAY;AACjC,UAAI,WAAW,KAAK;AACpB,UAAI;AAEJ,UAAI,YAAY,SAAS,SAAS,GAAG;AACnC,iBAAS,SAAS,SAAS,SAAS;AAAA;AAGtC,aAAO;AAAA;AAeT,SAAK,mBAAmB,WAAY;AAElC,UAAI,UAAU,cAAc;AAC1B,eAAO,MAAM,KAAK,UAAU;AAAA;AAAA;AAahC,SAAK,uBAAuB,WAAY;AACtC,UAAI,gBAAgB,KAAK;AACzB,UAAI;AAEJ,UAAI,iBAAiB,cAAc,SAAS,GAAG;AAC7C,iBAAS,cAAc,cAAc,SAAS;AAAA;AAGhD,aAAO;AAAA;AAYT,SAAK,qBAAqB,SAAU,QAAQ;AAC1C,UAAI,SAAS;AAEb,UAAI,CAAC,UAAU,gBAAgB,KAAK,gBAAgB,KAAK,KAAK,gBAAgB,GAAG;AAC/E;AAAA;AAGF,UAAI,UAAU;AACd,gBAAU,UAAU,oBAAoB,SAAU,WAAW;AAC3D,YAAI,UAAU,UAAU;AACxB,YAAI,cAAc,UAAU;AAC5B,kBAAU,QAAQ,KAAK,YAAY,KAAK,SAAU,KAAK;AACrD,oBAAU,QAAQ,KAAK,YAAY,KAAK,SAAU,QAAQ;AACxD,gBAAI,CAAC,OAAO,YAAY,KAAK,QAAQ,UAAU;AAC7C,sBAAQ,KAAK,CAAC,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAMnC,UAAI,QAAQ,SAAS,GAAG;AACtB,aAAK,cAAc,SAAS;AAAA;AAAA;AAahC,SAAK,oBAAoB,WAAY;AACnC,aAAO,KAAK,yBAAyB;AAAA;AAmCvC,SAAK,gBAAgB,WAAY;AAC/B,WAAK,0BAA0B;AAAA;AA+BjC,SAAK,eAAe,WAAY;AAC9B,UAAI,YAAY,KAAK,yBAAyB;AAC9C,WAAK,yBAAyB,KAAK,IAAI,WAAW;AAElD,UAAI,CAAC,KAAK,uBAAuB,cAAc,KAAK,wBAAwB;AAC1E,YAAI,KAAK,YAAY;AACnB,eAAK;AAAA,eACA;AACL,eAAK,gBAAgB;AAAA;AAAA;AAAA;AAgB3B,SAAK,SAAS,WAAY;AACxB,UAAI,KAAK,MAAM;AACb,aAAK,aAAa;AAClB,aAAK,kBAAkB;AAEvB,YAAI,CAAC,KAAK,qBAAqB;AAC7B,wBAAc;AAEd,eAAK,gBAAgB;AAErB,wBAAc;AAAA;AAAA;AAAA;AAgCpB,SAAK,cAAc,SAAU,mBAAmB;AAC9C,WAAK;AACL,UAAI,SAAS;AACb,WAAK;AACL,aAAO;AAAA;AAaT,SAAK,uBAAuB,WAAY;AACtC,aAAO,KAAK,4BAA4B;AAAA;AA0B1C,SAAK,mBAAmB,WAAY;AAClC,WAAK,6BAA6B;AAClC,WAAK,kBAAkB;AACvB,WAAK,eAAe;AAAA;AA8BtB,SAAK,kBAAkB,WAAY;AACjC,UAAI,oBAAoB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC5F,UAAI,YAAY,KAAK,4BAA4B;AACjD,WAAK,4BAA4B,KAAK,IAAI,WAAW;AAErD,UAAI,CAAC,KAAK,0BAA0B,cAAc,KAAK,6BAA6B,mBAAmB;AACrG,aAAK,kBAAkB;AACvB,aAAK,eAAe;AAAA;AAAA;AA+BxB,SAAK,iBAAiB,SAAU,mBAAmB;AACjD,UAAI,oBAAoB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC5F,WAAK;AACL,UAAI,SAAS;AACb,WAAK,gBAAgB;AACrB,aAAO;AAAA;AAsCT,SAAK,QAAQ,SAAU,mBAAmB;AACxC,WAAK;AACL,WAAK;AACL,UAAI,SAAS;AACb,WAAK;AACL,WAAK;AACL,aAAO;AAAA;AAYT,SAAK,oBAAoB,WAAY;AACnC,UAAI,CAAC,SAAS,MAAM;AAClB;AAAA;AAGF,UAAI,wBAAwB,SAAS,KAAK,eACtC,YAAY,sBAAsB,OAClC,aAAa,sBAAsB;AAEvC,UAAI,wBAAwB,SAAS,YAAY,yBAC7C,QAAQ,sBAAsB,OAC9B,SAAS,sBAAsB;AAEnC,UAAI,gBAAgB,UAAU,aAAa,WAAW;AACtD,UAAI,kBAAkB,SAAS,SAAS,2BAA2B;AAAA,QACjE,OAAO;AAAA,QACP,QAAQ;AAAA,SACP;AAAA,QACD;AAAA,QACA;AAAA,SACC,mBAAmB;AAEtB,UAAI,iBAAiB;AACnB;AAAA;AAGF,UAAI,iBAAiB,SAAS,KAAK,GAAG,WAAW,sBAAsB,SAAS,YAAY;AAC1F,iBAAS,KAAK,YAAY,OAAO;AACjC,iBAAS;AAAA;AAGX,eAAS,SAAS,0BAA0B;AAAA,QAC1C,OAAO;AAAA,QACP,QAAQ;AAAA,SACP;AAAA,QACD;AAAA,QACA;AAAA,SACC;AAAA;AA2BL,SAAK,aAAa,SAAU,MAAM,QAAQ;AACxC,UAAI,SAAS;AAEb,kBAAY,MAAM,SAAU,YAAY;AACtC,kBAAU;AAAA,SACT,SAAU,YAAY;AACvB,kBAAU;AACV,iBAAS,kBAAkB,YAAY,OAAO;AAC9C,iBAAS,eAAe,YAAY,OAAO;AAC3C,aAAK;AAAA,SACJ;AAAA,QACD,aAAa;AAAA,QACb,SAAS;AAAA,QACT;AAAA,QACA,gBAAgB;AAAA,QAChB;AAAA,QACA;AAAA;AAAA;AA2BJ,SAAK,WAAW,SAAU,MAAM,QAAQ;AACtC,kBAAY,MAAM,SAAU,YAAY;AACtC,kBAAU;AAAA,SACT,WAAY;AACb,oBAAY;AACZ,iBAAS;AACT,aAAK;AAEL,YAAI,UAAU;AACZ,qBAAW,CAAC,MAAM;AAAA;AAAA,SAEnB;AAAA,QACD,aAAa;AAAA,QACb,SAAS;AAAA,QACT;AAAA,QACA,gBAAgB;AAAA,QAChB;AAAA,QACA;AAAA;AAAA;AAWJ,SAAK,wBAAwB,WAAY;AACvC,UAAI,kBAAkB,UAAU;AAChC,UAAI,mBAAmB;AAGvB,UAAI,MAAM,QAAQ,kBAAkB;AAClC,2BAAmB,gBAAgB;AAAA,iBAC1B,WAAW,kBAAkB;AACtC,YAAI,SAAS,aAAa,SAAS;AACjC,cAAI,oBAAoB,KAAK;AAE7B,mBAAS,cAAc,GAAG,cAAc,mBAAmB,eAAe,GAAG;AAC3E,gBAAI,gBAAgB,cAAc;AAChC,kCAAoB;AAAA;AAAA;AAAA,mBAIf,SAAS,aAAa,YAAY,SAAS,aAAa,YAAY;AAC7E,6BAAmB,QAAQ,eAAe;AAAA;AAAA,iBAGnC,UAAU,UAAU,aAAa;AAC1C,YAAI,SAAS,QAAQ;AAErB,2BAAmB,MAAM,QAAQ,UAAU,OAAO,SAAS,eAAe;AAAA,aACrE;AAEL,2BAAmB,KAAK;AAAA;AAG1B,aAAO;AAAA;AAST,SAAK,mBAAmB,WAAY;AAClC,WAAK,kBAAkB,aAAa,KAAK;AACzC,WAAK,eAAe,aAAa,KAAK;AAAA;AA4BxC,SAAK,UAAU,SAAU,KAAK,QAAQ,MAAM,SAAS;AACnD,UAAI,YAAY,MAAM;AACpB,eAAO,QAAQ;AAAA;AAGjB,aAAO,QAAQ,SAAS,IAAI,eAAW,KAAK,SAAS,IAAI,eAAW,MAAM,UAAU,QAAQ;AAAA;AAgB9F,SAAK,kBAAkB,SAAU,UAAU,UAAU,QAAQ,QAAQ;AACnE,aAAO,QAAQ,gBAAgB,IAAI,eAAW,UAAU,WAAW,IAAI,eAAW,QAAQ;AAAA;AAa5F,SAAK,kBAAkB,SAAU,KAAK,QAAQ;AAC5C,aAAO,QAAQ,YAAY,KAAK,QAAQ,UAAU;AAAA;AAYpD,SAAK,YAAY,WAAY;AAC3B,aAAO,QAAQ;AAAA;AA6BjB,SAAK,iBAAiB,SAAU,UAAU;AACxC,UAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAM/E,UAAI,qBAAqB,SAAS,SAAS,KAAK;AAChD,UAAI,gBAAgB;AACpB,UAAI;AACJ,UAAI;AAEJ,UAAI,UAAU,SAAS,OAAO;AAC5B,cAAM,IAAI,MAAM;AAAA;AAGlB,UAAI,UAAU,SAAS,OAAO;AAC5B,cAAM,IAAI,MAAM;AAAA;AAGlB,UAAI,UAAU,SAAS,aAAa;AAClC,cAAM,IAAI,MAAM;AAAA;AAIlB,WAAK,KAAK,UAAU;AAClB,YAAI,MAAM,QAAQ;AAEhB;AAAA,mBACS,MAAM,YAAY;AAC3B,sBAAY,SAAS;AAGrB;AAAA,mBACS,MAAM,aAAa;AAC5B,uBAAa,aAAa,SAAS;AAAA,mBAC1B,MAAM,oBAAoB,SAAS,OAAO;AACnD,uBAAa,kBAAkB,SAAS;AACxC,mBAAS,KAAK,GAAG,WAAW;AAAA,mBACnB,oBAAM,eAAe,aAAa,MAAM,oBAAM,eAAe,aAAa,IAAI;AACvF,cAAI,WAAW,SAAS,OAAO,MAAM,QAAQ,SAAS,KAAK;AACzD,qBAAS,GAAG,cAAc;AAC1B,qBAAS,QAAQ,GAAG,SAAS;AAAA;AAAA,mBAEtB,CAAC,QAAQ,eAAe,UAAU,IAAI;AAE/C,qBAAW,KAAK,SAAS;AAAA;AAAA;AAK7B,UAAI,SAAS,SAAS,UAAU,UAAU,SAAS,QAAQ;AACzD,2BAAmB,MAAM;AAAA,iBAChB,SAAS,SAAS,QAAQ;AACnC,2BAAmB,SAAS,MAAM;AAAA,iBACzB,SAAS,YAAY,QAAQ;AACtC,gBAAQ;AAER,iBAAS;AAAA;AAGX,UAAI,OAAO,SAAS;AACpB,UAAI,gBAAgB,UAAU;AAE9B,UAAI,iBAAiB,WAAW,gBAAgB;AAC9C,wBAAgB;AAAA;AAIlB,UAAI,SAAS,SAAS,UAAU,SAAS,UAAU,UAAU,SAAS,YAAY,QAAQ;AACxF,oBAAY;AAAA;AAGd,UAAI,OAAO,GAAG;AACZ,aAAK,IAAI,GAAG,IAAI,GAAG,IAAI,MAAM,KAAK;AAEhC,cAAI,eAAe;AACjB,gBAAI,SAAS,gBAAgB,cAAc,KAAK,cAAc;AAE9D,gBAAI,QAAQ;AACV,0BAAY,iBAAiB,GAAG;AAAA;AAAA;AAIpC,eAAK;AAAA;AAAA;AAIT,UAAI,UAAU,SAAS,OAAO;AAC5B,mBAAW,SAAS,MAAM,SAAU,MAAM;AACxC,mBAAS,kBAAkB,KAAK,KAAK,KAAK,KAAK;AAAA;AAAA;AAInD,eAAS,SAAS;AAClB,UAAI,gBAAgB,SAAS,YAAY,MAAM;AAE/C,UAAI,kBAAkB,IAAI;AACxB,wBAAgB,SAAS,SAAS,YAAY,MAAM,QAAQ;AAAA;AAG9D,UAAI,SAAS,SAAS;AAEtB,UAAI,WAAW,SAAS;AACtB,iBAAS;AAAA;AAGX,UAAI,MAAM;AACR,YAAI,eAAe,SAAS,YAAY,aAAa;AAErD,YAAI,cAAc;AAChB,mBAAS,YAAY,aAAa,qBAAqB,SAAS,YAAY,aAAa;AAAA;AAAA;AAI7F,UAAI,WAAW,MAAM;AACnB,YAAI,gBAAgB,SAAS,YAAY,aAAa;AAEtD,YAAI,iBAAkB,eAAc,QAAQ,YAAY,MAAM,cAAc,QAAQ,cAAc,KAAK;AACrG,mBAAS,YAAY,aAAa,SAAS;AAAA,eACtC;AACL,mBAAS,YAAY,MAAM,SAAS;AACpC,mBAAS,YAAY,MAAM,WAAW;AAAA;AAAA,iBAE/B,WAAW,QAAQ;AAC5B,iBAAS,YAAY,MAAM,SAAS,MAAM,UAAU,GAAG,OAAO,UAAU,GAAG,OAAO,QAAQ;AAC1F,iBAAS,YAAY,MAAM,WAAW;AAAA;AAGxC,UAAI,OAAO,SAAS,UAAU,aAAa;AACzC,YAAI,QAAQ,SAAS;AAErB,YAAI,WAAW,QAAQ;AACrB,kBAAQ;AAAA;AAGV,iBAAS,YAAY,MAAM,QAAQ,MAAM,SAAS,GAAG,OAAO,SAAS,GAAG,OAAO,OAAO;AAAA;AAGxF,UAAI,CAAC,MAAM;AACT,YAAI,SAAS,MAAM;AACjB,mBAAS,KAAK,GAAG,WAAW;AAC5B,mBAAS,KAAK,GAAG;AAAA;AAGnB,iBAAS,SAAS,uBAAuB;AAAA;AAG3C,WAAK;AAEL,UAAI,SAAS,QAAQ,CAAC,UAAU;AAC9B,iBAAS,kBAAkB;AAE3B,sBAAc;AAEd,iBAAS,gBAAgB;AAEzB,iBAAS,KAAK,GAAG,WAAW;AAC5B,sBAAc;AAAA;AAGhB,UAAI,CAAC,QAAQ,SAAS,QAAS,mBAAkB,MAAM,WAAW,MAAM,WAAW,WAAW,kBAAkB,QAAQ;AACtH,iBAAS,KAAK,GAAG,WAAW;AAAA;AAAA;AAYhC,SAAK,WAAW,WAAY;AAC1B,UAAI,MAAM,SAAS;AAEnB,UAAI,UAAU,UAAU;AACtB,YAAI,WAAW,UAAU,WAAW;AAClC,iBAAO,UAAU,SAAS,KAAK;AAAA,mBACtB,KAAK;AACd,iBAAO,SAAS,UAAU,IAAI,GAAG,IAAI,UAAU;AAAA;AAAA,iBAExC,KAAK;AACd,eAAO,SAAS,cAAc,IAAI,IAAI,IAAI;AAAA;AAAA;AAY9C,SAAK,cAAc,WAAY;AAC7B,aAAO;AAAA;AAUT,SAAK,QAAQ,WAAY;AACvB,WAAK;AACL,WAAK;AAAA;AAkCP,SAAK,QAAQ,SAAU,QAAQ,QAAO,QAAQ,QAAQ,eAAe;AACnE,WAAK,MAAM,QAAQ,QAAO,QAAQ,QAAQ;AAAA;AAgB5C,SAAK,UAAU,SAAU,KAAK,QAAQ;AACpC,UAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAClF,UAAI,wBAAwB;AAE5B,UAAI,qBAAqB;AAEzB,UAAI,UAAU,GAAG;AACf,YAAI,KAAK,kBAAkB,SAAS,KAAK,iBAAiB,UAAU;AAClE,iBAAO;AAAA;AAGT,gCAAwB,KAAK,kBAAkB,6BAA6B;AAAA;AAG9E,UAAI,OAAO,GAAG;AACZ,YAAI,KAAK,eAAe,SAAS,KAAK,cAAc,OAAO;AACzD,iBAAO;AAAA;AAGT,6BAAqB,KAAK,eAAe,6BAA6B;AAAA;AAGxE,UAAI,uBAAuB,QAAQ,0BAA0B,MAAM;AACjE,eAAO;AAAA;AAGT,aAAO,SAAS,KAAK,gBAAgB,IAAI,eAAW,oBAAoB,wBAAwB;AAAA;AAiBlG,SAAK,YAAY,SAAU,SAAS;AAClC,UAAI,mBAAmB,KAAK,KAAK,GAAG,QAAQ,UAAU;AAEtD,UAAI,qBAAqB,MAAM;AAC7B,eAAO;AAAA;AAGT,UAAI,gBAAgB,iBAAiB,KACjC,mBAAmB,iBAAiB;AACxC,UAAI,YAAY;AAChB,UAAI,eAAe;AAEnB,UAAI,iBAAiB,GAAG;AACtB,oBAAY,KAAK,eAAe,6BAA6B;AAAA;AAG/D,UAAI,oBAAoB,GAAG;AACzB,uBAAe,KAAK,kBAAkB,6BAA6B;AAAA;AAGrE,aAAO,IAAI,eAAW,WAAW;AAAA;AAanC,SAAK,YAAY,SAAU,QAAQ;AACjC,aAAO,QAAQ,UAAU;AAAA;AAY3B,SAAK,YAAY,SAAU,MAAM;AAC/B,aAAO,QAAQ,UAAU;AAAA;AAe3B,SAAK,cAAc,SAAU,KAAK;AAChC,aAAO,MAAM,eAAe,2BAA2B;AAAA;AAezD,SAAK,iBAAiB,SAAU,QAAQ;AACtC,aAAO,MAAM,kBAAkB,2BAA2B;AAAA;AAe5D,SAAK,gBAAgB,SAAU,KAAK;AAClC,aAAO,MAAM,eAAe,2BAA2B;AAAA;AAezD,SAAK,mBAAmB,SAAU,QAAQ;AACxC,aAAO,MAAM,kBAAkB,2BAA2B;AAAA;AAgB5D,SAAK,gBAAgB,SAAU,KAAK,QAAQ;AAC1C,aAAO,QAAQ,IAAI,KAAK,QAAQ,UAAU;AAAA;AAe5C,SAAK,mBAAmB,SAAU,KAAK,MAAM;AAC3C,aAAO,QAAQ,IAAI,KAAK;AAAA;AAe1B,SAAK,eAAe,SAAU,QAAQ;AACpC,UAAI;AAEJ,aAAQ,UAAS,IAAI,OAAO,MAAM,QAAQ,qBAAmB,QAAQ,SAAS,IAAI,eAAW,GAAG,SAAS,IAAI,eAAW,UAAU,KAAK,SAAS,GAAG,SAAS,QAAQ;AAAA;AActK,SAAK,gBAAgB,SAAU,MAAM;AACnC,UAAI;AAEJ,UAAI,QAAQ,QAAQ,SAAS,IAAI,eAAW,GAAG,QAAQ,UAAU,QAAQ,IAAI,eAAW,UAAU,KAAK,SAAS,GAAG,QAAQ,UAAU,QAAQ,QAAQ;AACrJ,aAAQ,UAAS,IAAI,OAAO,MAAM,QAAQ,qBAAmB;AAAA;AAoB/D,SAAK,gBAAgB,SAAU,KAAK,QAAQ,MAAM,SAAS;AACzD,UAAI;AAEJ,UAAI,QAAQ,QAAQ;AAClB,eAAO,WAAW;AAAA,aACb;AACL,eAAO,WAAW,WAAW,IAAI,eAAW,KAAK,SAAS,IAAI,eAAW,MAAM;AAAA;AAGjF,aAAO;AAAA;AAoBT,SAAK,qBAAqB,SAAU,KAAK,QAAQ,MAAM,SAAS;AAC9D,UAAI;AAEJ,UAAI,QAAQ,QAAQ;AAClB,eAAO,WAAW,QAAQ;AAAA,aACrB;AACL,eAAO,WAAW,WAAW,IAAI,eAAW,KAAK,SAAS,IAAI,eAAW,MAAM,UAAU;AAAA;AAG3F,aAAO;AAAA;AAaT,SAAK,qBAAqB,SAAU,QAAQ;AAC1C,aAAO,WAAW,YAAY;AAAA;AAkBhC,SAAK,sBAAsB,SAAU,KAAK,QAAQ,OAAO,QAAQ;AAC/D,UAAI,QAAQ,oBAAoB,KAAK,QAAQ;AAC7C,UAAI,8BAA8B,KAAK,QAAQ;AAC/C,UAAI,iBAAiB;AAErB,UAAI,6BAA6B;AAC/B,kBAAU,OAAO,SAAU,QAAQ;AACjC,cAAI,SAAS,iBAAe,QAAQ,IAChC,YAAY,OAAO,IACnB,aAAa,OAAO,IACpB,cAAc,OAAO;AAEzB,yBAAe,KAAK;AAAA,YAAC;AAAA,YAAW;AAAA,YAAY,WAAW,UAAU,WAAW;AAAA,YAC5E;AAAA;AAAA;AAAA;AAIJ,gBAAU,OAAO,SAAU,QAAQ;AACjC,YAAI,SAAS,iBAAe,QAAQ,IAChC,YAAY,OAAO,IACnB,aAAa,OAAO,IACpB,cAAc,OAAO;AAEzB,mBAAW,UAAU,WAAW,YAAY;AAAA;AAG9C,UAAI,6BAA6B;AAC/B,aAAK,SAAS,4BAA4B,gBAAgB;AAAA;AAG5D,WAAK;AACL,UAAI,eAAe,SAAS;AAE5B,UAAI,gBAAgB,UAAU,aAAa,eAAe;AACxD,qBAAa;AAAA;AAAA;AAgBjB,SAAK,qBAAqB,SAAU,KAAK;AACvC,aAAO,WAAW,SAAS;AAAA;AAc7B,SAAK,sBAAsB,SAAU,KAAK,QAAQ;AAChD,aAAO,WAAW,UAAU,KAAK;AAAA;AAenC,SAAK,eAAe,SAAU,KAAK;AACjC,UAAI,OAAO,QAAQ,SAAS,IAAI,eAAW,KAAK,IAAI,IAAI,eAAW,KAAK,KAAK,cAAc,IAAI,QAAQ;AACvG,aAAO,KAAK,MAAM;AAAA;AAmBpB,SAAK,cAAc,SAAU,SAAS,YAAY,OAAO,UAAU;AACjE,UAAI,SAAS;AAEb,UAAI,SAAS,YAAY,SAAS,CAAC,GAAG,GAAG,KAAK,aAAa,KAAK,eAAe,CAAC,SAAS,YAAY,OAAO;AAC5G,UAAI,WAAW,OAAO,IAClB,cAAc,OAAO;AACzB,UAAI,SAAS,OAAO,IAChB,YAAY,OAAO;AACvB,UAAI,eAAe;AACnB,UAAI,cAAc;AAElB,UAAI,WAAW,QAAQ;AACrB,iBAAS;AAAA;AAGX,UAAI,cAAc,QAAQ;AACxB,oBAAY;AAAA;AAGd,UAAI,OAAO;AACX,gBAAU,KAAK,IAAI,KAAK,IAAI,UAAU,SAAS,IAAI,KAAK,IAAI,UAAU,SAAS,SAAU,KAAK;AAC5F,YAAI,cAAc;AAClB,kBAAU,KAAK,IAAI,KAAK,IAAI,aAAa,YAAY,IAAI,KAAK,IAAI,aAAa,YAAY,SAAU,QAAQ;AAC3G,cAAI,WAAW,OAAO,YAAY,KAAK;AAEvC,wBAAc,SAAS;AAEvB,cAAI,cAAc;AAChB,0BAAc,iBAAiB;AAAA,iBAC1B;AACL,2BAAe;AAAA;AAGjB,iBAAO;AAAA;AAET,eAAO,cAAc,cAAc;AACnC,eAAO;AAAA;AAET,aAAO;AAAA;AAeT,SAAK,iBAAiB,SAAU,KAAK,QAAQ,KAAK;AAChD,UAAI,SAAS,CAAC,KAAK,cAAc,MAAM,KAAK,iBAAiB,UACzD,cAAc,OAAO,IACrB,iBAAiB,OAAO;AAC5B,UAAI,cAAc,YAAY,oBAAoB,aAAa,gBAAgB;AAC/E,UAAI,aAAa,SAAS,SAAS,wBAAwB,KAAK,QAAQ,KAAK;AAE7E,UAAI,eAAe,OAAO;AACxB,oBAAY,eAAe,aAAa,gBAAgB;AACxD,iBAAS,SAAS,uBAAuB,KAAK,QAAQ,KAAK;AAAA;AAG7D,oBAAc;AAAA;AAchB,SAAK,kBAAkB,SAAU,aAAa;AAC5C,UAAI,SAAS;AAEb,UAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEvF,eAAS,QAAQ,UAAU,QAAQ,eAAe,IAAI,MAAM,QAAQ,IAAI,QAAQ,IAAI,IAAI,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACzH,qBAAa,QAAQ,KAAK,UAAU;AAAA;AAGtC,UAAI,aAAa,SAAS,KAAK,CAAC,MAAM,QAAQ,aAAa,KAAK;AAC9D,cAAM,IAAI,MAAM;AAAA;AAGlB,UAAI,eAAe,GAAG;AACpB,oBAAY,UAAU,KAAK,cAAc,cAAc;AAAA;AAGzD,UAAI,aAAa,SAAS,GAAG;AAC3B,kBAAU,aAAa,WAAW,SAAU,aAAa;AACvD,sBAAY,UAAU,OAAO,cAAc;AAC3C,oBAAU,aAAa,SAAU,UAAU,aAAa;AACtD,mBAAO,OAAO,kBAAkB,aAAa,aAAa;AAAA;AAAA;AAAA;AAKhE,eAAS;AAAA;AAaX,SAAK,oBAAoB,SAAU,KAAK,QAAQ,MAAM;AACpD,UAAI,SAAS;AAEb,UAAI,UAAQ,UAAU,UAAU;AAC9B,mBAAW,MAAM,SAAU,OAAO,KAAK;AACrC,iBAAO,YAAY,KAAK,QAAQ,KAAK;AAAA;AAAA;AAAA;AAkB3C,SAAK,cAAc,SAAU,KAAK,QAAQ,KAAK,OAAO;AACpD,UAAI,mBAAmB,SAAS,SAAS,qBAAqB,KAAK,QAAQ,KAAK;AAEhF,UAAI,qBAAqB,OAAO;AAC9B;AAAA;AAGF,UAAI,cAAc;AAClB,UAAI,iBAAiB;AAErB,UAAI,MAAM,KAAK,aAAa;AAC1B,sBAAc,KAAK,cAAc;AAAA;AAGnC,UAAI,SAAS,KAAK,aAAa;AAC7B,yBAAiB,KAAK,iBAAiB;AAAA;AAGzC,kBAAY,YAAY,aAAa,gBAAgB,KAAK;AAC1D,eAAS,SAAS,oBAAoB,KAAK,QAAQ,KAAK;AAAA;AAW1D,SAAK,eAAe,WAAY;AAC9B,aAAO,YAAY;AAAA;AAerB,SAAK,cAAc,SAAU,KAAK,QAAQ;AACxC,UAAI,cAAc,KAAK,cAAc;AACrC,UAAI,iBAAiB,KAAK,iBAAiB;AAE3C,UAAI,gBAAgB,MAAM;AACxB,sBAAc;AAAA;AAGhB,UAAI,mBAAmB,MAAM;AAC3B,yBAAiB;AAAA;AAGnB,aAAO,YAAY,YAAY,aAAa,gBAAgB;AAAA,QAC1D,WAAW;AAAA,QACX,cAAc;AAAA;AAAA;AAalB,SAAK,mBAAmB,SAAU,KAAK;AACrC,aAAO,YAAY,kBAAkB;AAAA;AAWvC,SAAK,8BAA8B,WAAY;AAC7C,aAAO,CAAE,UAAS,aAAa,YAAY,UAAU;AAAA;AAGvD,QAAI,iBAAiB,wBAAwB;AAkB7C,SAAK,kBAAkB,SAAU,KAAK,QAAQ;AAC5C,aAAO,UAAY,eAAe,KAAK,MAAM,KAAK;AAAA;AAoBpD,SAAK,gBAAgB,wBAAwB;AAC7C,QAAI,kBAAkB,wBAAwB;AAkB9C,SAAK,mBAAmB,SAAU,KAAK,QAAQ;AAC7C,UAAI,YAAY,gBAAgB,KAAK,MAAM,KAAK;AAEhD,UAAI,OAAO,cAAc,UAAU;AACjC,oBAAY,UAAa;AAAA;AAG3B,aAAO;AAAA;AAsBT,SAAK,gBAAgB,SAAU,UAAU;AACvC,WAAK,eAAe;AAAA;AAuBtB,SAAK,eAAe,SAAU,MAAM,UAAU;AAC5C,UAAI,CAAC,MAAM,QAAQ,OAAO;AACxB,cAAM,IAAI,MAAM;AAAA;AAGlB,WAAK,eAAe,UAAU;AAAA;AAuBhC,SAAK,kBAAkB,SAAU,SAAS,UAAU;AAClD,UAAI,CAAC,MAAM,QAAQ,UAAU;AAC3B,cAAM,IAAI,MAAM;AAAA;AAGlB,WAAK,eAAe,UAAU,QAAW;AAAA;AAkB3C,SAAK,iBAAiB,SAAU,UAAU,MAAM,SAAS;AACvD,UAAI,sBAAsB,IAAI;AAE9B,UAAI,UAAU;AACZ,4BAAoB,eAAe;AAAA;AAGrC,UAAI,IAAI,SAAS,cAAc;AAE/B,aAAO,KAAK,GAAG;AACb,YAAI,SAAS,UAAa,KAAK,QAAQ,OAAO,IAAI;AAChD,eAAK;AACL;AAAA;AAGF,YAAI,IAAI,SAAS,cAAc;AAE/B,eAAO,KAAK,GAAG;AACb,cAAI,YAAY,UAAa,QAAQ,QAAQ,OAAO,IAAI;AACtD,iBAAK;AACL;AAAA;AAGF,8BAAoB;AACpB,mBAAS,aAAa,SAAS,cAAc,GAAG,IAAI,SAAS,YAAY,GAAG,IAAI,SAAU,QAAQ;AAChG,gBAAI,OAAO,WAAW,WAAW;AAC/B,oBAAM,IAAI,MAAM;AAAA;AAGlB,gBAAI,WAAW,OAAO;AACpB,kCAAoB,QAAQ;AAAA;AAG9B,gCAAoB;AAAA,aACnB;AACH,eAAK;AAAA;AAGP,aAAK;AAAA;AAGP,0BAAoB;AAAA;AAatB,SAAK,eAAe,SAAU,KAAK;AACjC,UAAI,YAAY,UAAU;AAC1B,UAAI,cAAc;AAElB,UAAI,gBAAgB,QAAQ;AAC1B,sBAAc,SAAS,SAAS,mBAAmB;AAAA;AAGrD,UAAI,gBAAgB,QAAQ;AAC1B,oBAAY;AACZ,kBAAU,SAAS,cAAc,GAAG,SAAU,GAAG;AAC/C,oBAAU,KAAK,SAAS,aAAa;AAAA;AAAA,iBAE9B,MAAM,QAAQ,cAAc,UAAU,iBAAiB,QAAQ;AACxE,oBAAY,UAAU;AAAA,iBACb,WAAW,YAAY;AAChC,oBAAY,UAAU;AAAA,iBACb,aAAa,OAAO,cAAc,YAAY,OAAO,cAAc,UAAU;AACtF,oBAAY,cAAc;AAAA;AAG5B,aAAO;AAAA;AAWT,SAAK,gBAAgB,WAAY;AAC/B,aAAO,CAAC,CAAC,UAAU;AAAA;AAWrB,SAAK,gBAAgB,WAAY;AAC/B,UAAI,UAAU,eAAe,UAAU,UAAU,eAAe,MAAM;AAEpE,eAAO,CAAC,CAAC,UAAU;AAAA;AAGrB,eAAS,IAAI,GAAG,OAAO,SAAS,aAAa,IAAI,MAAM,KAAK;AAC1D,YAAI,SAAS,aAAa,IAAI;AAC5B,iBAAO;AAAA;AAAA;AAIX,aAAO;AAAA;AAcT,SAAK,eAAe,SAAU,QAAQ;AACpC,UAAI,cAAc,SAAS,SAAS,mBAAmB;AACvD,UAAI,SAAS,UAAU;AAEvB,UAAI,gBAAgB,QAAQ;AAC1B,YAAI,MAAM;AACV,YAAI,OAAO,SAAS;AAEpB,iBAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,cAAI,KAAK,SAAS,aAAa;AAAA;AAGjC,iBAAS;AAAA,aACJ;AACL,YAAI,gCAAgC,wCAAuC,mBAAmB;AAC5F,cAAI,MAAM;AACV,cAAI,aAAa,SAAS;AAC1B,cAAI,SAAQ;AAEZ,iBAAO,SAAQ,YAAY,UAAS;AAClC,gBAAI,WAAW,UAAU,YAAY,UAAU,QAAQ,SAAQ;AAC7D,kBAAI,KAAK;AAAA;AAAA;AAIb,iBAAO,IAAI;AAAA;AAGb,YAAI,iBAAiB,SAAS,iBAAiB;AAC/C,YAAI,OAAO,8BAA8B;AAEzC,YAAI,UAAU,eAAe,OAAO;AAClC,mBAAS;AAAA,mBACA,UAAU,WAAW,WAAW,UAAU,YAAY,UAAU,QAAQ,SAAS,UAAU,QAAQ,MAAM,OAAO;AACzH,mBAAS,UAAU,QAAQ,MAAM;AAAA,mBACxB,UAAU,WAAW,UAAU,QAAQ,mBAAmB,UAAU,QAAQ,gBAAgB,OAAO;AAC5G,mBAAS,UAAU,QAAQ,gBAAgB;AAAA,mBAClC,MAAM,QAAQ,UAAU,eAAe,UAAU,WAAW,oBAAoB,QAAQ;AACjG,mBAAS,UAAU,WAAW;AAAA,mBACrB,WAAW,UAAU,aAAa;AAC3C,mBAAS,UAAU,WAAW;AAAA,mBACrB,UAAU,cAAc,OAAO,UAAU,eAAe,YAAY,OAAO,UAAU,eAAe,UAAU;AACvH,mBAAS,uBAAuB;AAAA;AAAA;AAIpC,aAAO;AAAA;AAaT,SAAK,2BAA2B,SAAU,KAAK;AAC7C,UAAI;AAEJ,UAAI,OAAO,GAAG;AACZ,YAAI,iBAAiB,SAAS,YAAY,GAAG;AAC7C,gBAAQ,eAAe;AAAA;AAGzB,UAAI,UAAU,UAAU,UAAU,UAAU,OAAO;AACjD,gBAAQ,UAAU;AAAA;AAGpB,UAAI,UAAU,UAAU,UAAU,MAAM;AACtC,gBAAQ,UAAQ;AAAA,eACT;AAEH,oBAAQ,MAAM;AACd;AAAA,eAEG;AACH,oBAAQ,MAAM;AACd;AAAA;AAGA;AAAA;AAGJ,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,SAAS,OAAO;AAAA;AAAA;AAI5B,aAAO;AAAA;AAaT,SAAK,cAAc,SAAU,QAAQ;AACnC,UAAI,QAAQ,SAAS,yBAAyB;AAE9C,cAAQ,SAAS,SAAS,kBAAkB,OAAO;AAEnD,UAAI,UAAU,QAAQ;AACpB,gBAAQ,wBAA0B;AAAA;AAGpC,aAAO;AAAA;AAaT,SAAK,4BAA4B,SAAU,KAAK;AAO9C,UAAI,SAAS,UAAU;AAEvB,UAAI,WAAW,UAAU,WAAW,MAAM;AACxC,gBAAQ,UAAQ;AAAA,eACT;AAEH,qBAAS,OAAO;AAChB;AAAA,eAEG;AACH,qBAAS,OAAO;AAChB;AAAA;AAGA;AAAA;AAGJ,YAAI,OAAO,WAAW,UAAU;AAC9B,mBAAS,SAAS,QAAQ;AAAA;AAAA;AAI9B,aAAO;AAAA;AAeT,SAAK,eAAe,SAAU,KAAK;AACjC,UAAI,SAAS,SAAS,0BAA0B;AAEhD,eAAS,SAAS,SAAS,mBAAmB,QAAQ;AACtD,aAAO;AAAA;AAWT,SAAK,kBAAkB,WAAY;AACjC,aAAO,WAAW;AAAA;AAWpB,SAAK,kBAAkB,WAAY;AACjC,aAAO,WAAW;AAAA;AAWpB,SAAK,YAAY,WAAY;AAC3B,aAAO,QAAQ;AAAA;AAWjB,SAAK,YAAY,WAAY;AAC3B,UAAI,UAAU,UAAU;AACxB,UAAI,UAAU,KAAK,kBAAkB;AACrC,aAAO,KAAK,IAAI,SAAS;AAAA;AAW3B,SAAK,oBAAoB,WAAY;AACnC,aAAO,SAAS,KAAK,GAAG,QAAQ,SAAS,KAAK,GAAG,QAAQ,yBAAyB;AAAA;AAWpF,SAAK,mBAAmB,WAAY;AAClC,aAAO,SAAS,KAAK,GAAG,QAAQ,SAAS,KAAK,GAAG,QAAQ,wBAAwB;AAAA;AAWnF,SAAK,oBAAoB,WAAY;AACnC,aAAO,SAAS,KAAK,GAAG,QAAQ,SAAS,KAAK,GAAG,QAAQ,4BAA4B;AAAA;AAWvF,SAAK,mBAAmB,WAAY;AAClC,aAAO,SAAS,KAAK,GAAG,QAAQ,SAAS,KAAK,GAAG,QAAQ,2BAA2B;AAAA;AAatF,SAAK,iBAAiB,WAAY;AAChC,UAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,UAAI,YAAY;AAChB,uBAAiB,SAAS,cAAc,GAAG,SAAU,aAAa;AAChE,YAAI,SAAS,WAAW,cAAc;AACpC,uBAAa;AAAA,mBACJ,WAAW,MAAM;AAC1B,iBAAO;AAAA;AAAA;AAGX,aAAO;AAAA;AAaT,SAAK,iBAAiB,WAAY;AAChC,UAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEjF,UAAI,SAAS,cAAc,GAAG;AAC5B,eAAO;AAAA;AAGT,UAAI,eAAe;AACnB,uBAAiB,SAAS,cAAc,GAAG,SAAU,aAAa;AAChE,YAAI,SAAS,WAAW,cAAc;AACpC,0BAAgB;AAAA,mBACP,WAAW,MAAM;AAC1B,iBAAO;AAAA;AAAA;AAGX,aAAO;AAAA;AAYT,SAAK,aAAa,SAAU,KAAK;AAC/B,aAAO,UAAU,WAAW,KAAK,UAAU;AAAA;AAY7C,SAAK,aAAa,SAAU,QAAQ;AAClC,aAAO,UAAU,WAAW,KAAK,UAAU;AAAA;AAmC7C,SAAK,aAAa,SAAU,KAAK,QAAQ,QAAQ,WAAW;AAC1D,UAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACvF,UAAI,iBAAiB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEzF,UAAI,YAAY,QAAQ,YAAY,SAAS;AAC3C,eAAO;AAAA;AAGT,aAAO,KAAK,YAAY,CAAC,CAAC,KAAK,QAAQ,QAAQ,aAAa,cAAc;AAAA;AAqC5E,SAAK,cAAc,WAAY;AAC7B,UAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,CAAC;AAClF,UAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACvF,UAAI,iBAAiB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEzF,UAAI,iBAAiB,OAAO;AAC1B,iCAAyB;AAAA;AAG3B,UAAI,cAAc,UAAU,YAAY;AAExC,UAAI,eAAe,gBAAgB;AACjC,iBAAS;AAAA;AAGX,+BAAyB;AACzB,aAAO;AAAA;AA2BT,SAAK,gBAAgB,SAAU,aAAa;AAC1C,UAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,aAAO,UAAU,cAAc,aAAa;AAAA;AAuB9C,SAAK,aAAa,SAAU,UAAU;AACpC,UAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,aAAO,UAAU,WAAW,UAAU;AAAA;AAUxC,SAAK,eAAe,WAAY;AAC9B,gBAAU;AAAA;AAaZ,SAAK,YAAY,WAAY;AAC3B,UAAI,iBAAiB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACzF,UAAI,oBAAoB,kBAAkB,KAAK;AAC/C,UAAI,uBAAuB,kBAAkB,KAAK;AAClD,+BAAyB;AACzB,gBAAU,UAAU,mBAAmB;AACvC,+BAAyB;AAAA;AAG3B,QAAI,mBAAmB,2BAA0B,aAAa,aAAa;AAEzE,aAAO,YAAY,uBAAuB,aAAa,GAAG;AAAA;AAmB5D,SAAK,mBAAmB,SAAU,KAAK,QAAQ;AAC7C,UAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACvF,UAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACtF,UAAI,wBAAwB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChG,UAAI,YAAY,CAAC;AACjB,UAAI,aAAa,CAAC;AAClB,UAAI,gBAAgB;AACpB,UAAI,mBAAmB;AAEvB,UAAI,uBAAuB;AACzB,YAAI,gBAAgB,OAAO,UAAU;AAErC,YAAI,mBAAmB,OAAO,UAAU;AAExC,YAAI,oBAAoB,gBAAgB,iBAAiB,KAAK,gBAAgB,OAAO;AACrF,YAAI,uBAAuB,mBAAmB,iBAAiB,KAAK,mBAAmB,UAAU;AAEjG,YAAI,sBAAsB,QAAQ,yBAAyB,MAAM;AAC/D,iBAAO;AAAA;AAGT,wBAAgB,gBAAgB,SAAS,eAAe,6BAA6B,qBAAqB;AAC1G,2BAAmB,mBAAmB,SAAS,kBAAkB,6BAA6B,wBAAwB;AAAA;AAGxH,UAAI,eAAe,OAAO,UAAU;AACpC,UAAI,kBAAkB,OAAO,UAAU;AAEvC,UAAI,gBAAgB,iBAAiB;AACnC,eAAO,SAAS,KAAK,eAAe,IAAI,eAAW,eAAe,mBAAmB,WAAW,aAAa,cAAc;AAAA;AAG7H,UAAI,gBAAgB,oBAAoB,OAAO;AAC7C,eAAO,SAAS,KAAK,yBAAyB,eAAe,WAAW;AAAA;AAG1E,UAAI,mBAAmB,iBAAiB,OAAO;AAC7C,eAAO,SAAS,KAAK,2BAA2B,kBAAkB,aAAa;AAAA;AAGjF,aAAO;AAAA;AAWT,SAAK,UAAU,WAAY;AACzB,eAAS;AAET,eAAS;AAET,UAAI,SAAS,MAAM;AAEjB,iBAAS,KAAK;AAAA;AAGhB,UAAI,YAAY;AACd,mBAAW;AAAA;AAGb,mBAAa;AACb,kBAAY;AACZ;AAEA,UAAI,eAAe,WAAW;AAC5B,YAAI,cAAc,KAAK,aAAa,cAAc;AAElD,YAAI,aAAa;AACf,sBAAY,WAAW,YAAY;AAAA;AAAA;AAIvC,YAAM,SAAS;AACf,oBAAa;AAEb,UAAI,eAAe;AACjB,sBAAc;AAAA;AAKhB,eAAS,eAAe,WAAY;AAClC,iBAAS,eAAe;AACxB,iBAAS,kBAAkB;AAC3B,wBAAgB,WAAW,QAAQ,SAAU,QAAQ;AACnD,cAAI,SAAS,iBAAe,QAAQ,IAChC,SAAS,OAAO;AAEpB,iBAAO;AAAA;AAET,wBAAgB;AAChB,iBAAS,SAAS;AAAA,SACjB;AACH,0BAAM,eAAe,QAAQ;AAC7B,iBAAW,UAAU,SAAU,UAAU,KAAK,KAAK;AAEjD,YAAI,WAAW,WAAW;AACxB,cAAI,OAAO,WAAW;AAAA,mBACb,QAAQ,QAAQ;AAGzB,cAAI,OAAO;AAAA;AAAA;AAGf,eAAS,cAAc;AAGvB,UAAI,SAAS;AACX,gBAAQ;AAAA;AAGV,eAAS,iBAAiB;AAC1B,eAAS,oBAAoB;AAC7B,gBAAU;AACV,aAAO;AACP,kBAAY;AACZ,sBAAgB;AAChB,iBAAW;AAAA;AAWb,wBAAoB,QAAQ;AAC1B,aAAO,WAAY;AACjB,cAAM,IAAI,MAAM,QAAS,OAAO,QAAQ;AAAA;AAAA;AAY5C,SAAK,kBAAkB,WAAY;AACjC,aAAO,cAAc;AAAA;AAYvB,SAAK,YAAY,SAAU,YAAY;AACrC,UAAI,oBAAoB,iBAAiB;AAEzC,UAAI,sBAAsB,YAAY;AACpC,eAAO,KAAK;AAAA;AAGd,aAAO,gBAAgB,QAAQ;AAAA;AAYjC,SAAK,gBAAgB,SAAU,QAAQ;AAErC,UAAI,WAAW,KAAK,UAAU;AAC5B,eAAO,KAAK,SAAS,YAAY;AAAA;AAGnC,aAAO,gBAAgB,MAAM;AAAA;AAW/B,SAAK,cAAc,WAAY;AAC7B,aAAO;AAAA;AAiBT,SAAK,UAAU,SAAU,KAAK,UAAU;AACtC,0BAAM,eAAe,IAAI,KAAK,UAAU;AAAA;AAmB1C,SAAK,UAAU,SAAU,KAAK;AAC5B,aAAO,oBAAM,eAAe,IAAI,KAAK;AAAA;AAkBvC,SAAK,cAAc,SAAU,KAAK,UAAU;AAC1C,0BAAM,eAAe,KAAK,KAAK,UAAU;AAAA;AAkB3C,SAAK,aAAa,SAAU,KAAK,UAAU;AACzC,0BAAM,eAAe,OAAO,KAAK,UAAU;AAAA;AA2B7C,SAAK,WAAW,SAAU,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AACrD,aAAO,oBAAM,eAAe,IAAI,UAAU,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA;AAcrE,SAAK,sBAAsB,SAAU,eAAe,gBAAgB;AAClE,aAAO,oBAAoB,UAAU,UAAU,eAAe;AAAA;AAYhE,SAAK,SAAS,WAAY;AACxB,aAAO,eAAe;AAAA;AAYxB,SAAK,iBAAiB,WAAY;AAChC,UAAI,cAAc,MAAM,aAAa,cAAc;AAEnD,kBAAY,mBAAmB,cAAc,eAAe;AAC5D,aAAO,YAAY;AAAA;AAGrB,SAAK,WAAW;AAUhB,SAAK,mBAAmB,SAAU,QAAQ;AACxC,UAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,UAAI,aAAa;AAEjB,UAAI,OAAO,eAAe,YAAY;AACpC,qBAAa,WAAW,YAAY;AAAA;AAGtC,WAAK,SAAS,KAAK;AAAA;AASrB,SAAK,iBAAiB,WAAY;AAChC,gBAAU,KAAK,UAAU,SAAU,SAAS;AAC1C,qBAAa;AAAA;AAAA;AAIjB,SAAK,aAAa;AAQlB,SAAK,qBAAqB,SAAU,UAAU;AAC5C,WAAK,WAAW,KAAK,aAAa;AAAA;AASpC,SAAK,mBAAmB,WAAY;AAClC,gBAAU,KAAK,YAAY,SAAU,SAAS;AAC5C,uBAAe;AAAA;AAAA;AAYnB,SAAK,kBAAkB,WAAY;AACjC,UAAI,iBAAiB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACzF,UAAI,wBAAwB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChG,oBAAc,cAAc;AAC5B,eAAS,KAAK;AAEd,UAAI,yBAAyB,UAAU,cAAc;AACnD,sBAAc;AAAA;AAAA;AAalB,SAAK,QAAQ,WAAY;AACvB,aAAO,SAAS,WAAW,iBAAiB,SAAS,aAAa,cAAc;AAAA;AAYlF,SAAK,QAAQ,WAAY;AACvB,aAAO,CAAC,SAAS;AAAA;AAYnB,SAAK,qBAAqB,WAAY;AACpC,aAAO,SAAS,UAAU,IAAI;AAAA;AAGhC,sBAAkB,QAAQ,SAAU,YAAY;AAC9C,UAAI,cAAc,UAAU;AAC5B,sBAAgB,QAAQ,YAAY,IAAI,YAAY;AAAA;AAEtD,wBAAM,eAAe,IAAI,UAAU;AAAA;;;AmL19IrC,mCAAO;;;ACfP,gCAAO;AASA,wBAAsB;AAC3B,QAAI,WAAW;AAAA,MACb,WAAW;AAAA,MACX,WAAW;AAAA,MACX,UAAU;AAAA,MACV,UAAU;AAAA,OAER,IACA,OAAO,SAAS,MAChB,OAAO,SAAS,eAAe,KAC/B,OAAO,SAAS,cAAc,SAC9B,UAAU,kBAAiB,SAAS,QAAO,SAAS;AACtD,cAAQ,iBAAiB,QAAO,SAAS;AAAA,OAEvC,aAAa,mBAAmB,SAAS,QAAO,SAAS;AAC3D,cAAQ,oBAAoB,QAAO,SAAS;AAAA,OAE1C,SAAS,iBAAgB,SAAS;AACpC,UAAI,OAAO;AAEX,UAAI,CAAC,SAAS;AACZ,kBAAU;AAAA,iBACD,CAAC,0BAA0B,KAAK,UAAU;AACnD,kBAAU;AAAA;AAGZ,UAAI,KAAK,gBAAgB,QAAQ;AAC/B,aAAK,cAAc,GAAG,QAAQ;AAAA,aACzB;AACL,aAAK,OAAO,GAAG,QAAQ;AAAA;AAGzB,WAAK,MAAM,WAAW,kBAAiB,IAAI;AAC3C,WAAK,MAAM,aAAa,kBAAiB,IAAI;AAC7C,WAAK,MAAM,aAAa;AACxB,WAAK,YAAY;AACjB,cAAQ,KAAK,cAAc;AAC3B,WAAK,YAAY;AACjB,SAAG,MAAM,SAAS,SAAS,YAAY;AAEvC,UAAI,SAAS,WAAW,OAAO;AAC7B,WAAG,MAAM,QAAQ,SAAS,WAAW;AAAA,iBAC5B,QAAQ,SAAS,UAAU;AACpC,WAAG,MAAM,QAAQ,SAAS,WAAW;AAAA,aAChC;AACL,WAAG,MAAM,QAAQ,QAAQ;AAAA;AAG3B,qBAAe,GAAG,eAAe,GAAG,eAAe,IAAI;AAEvD,UAAI,SAAS,YAAY,cAAc;AACrC,WAAG,MAAM,SAAS,SAAS,YAAY;AAAA,iBAC9B,SAAS,YAAY,cAAc;AAC5C,WAAG,MAAM,SAAS,SAAS,YAAY;AACvC,WAAG,MAAM,YAAY;AAAA,aAChB;AACL,WAAG,MAAM,SAAS,eAAe;AAAA;AAAA,OAGjC,gBAAgB,0BAAyB;AAC3C,aAAO,WAAW,QAAQ;AAAA,OAExB,iBAAiB,yBAAwB,QAAQ;AACnD,UAAI,UAAU,OAAO,WAAW;AAC9B,YAAI,OAAO,aAAa,WAAW;AACjC,mBAAS,YAAY,GAAG;AAAA,eACnB;AACL,cAAI,YAAY,SAAS,OAAO;AAEhC,cAAI,CAAC,MAAM,YAAY;AACrB,qBAAS,YAAY;AAAA;AAAA;AAAA;AAK3B,UAAI,UAAU,OAAO,WAAW;AAC9B,YAAI,OAAO,aAAa,WAAW;AACjC,mBAAS,YAAY,GAAG;AAAA,eACnB;AACL,cAAI,YAAY,SAAS,OAAO;AAEhC,cAAI,CAAC,MAAM,YAAY;AACrB,qBAAS,YAAY;AAAA;AAAA;AAAA;AAK3B,UAAI,UAAU,OAAO,UAAU;AAC7B,YAAI,OAAO,YAAY,WAAW;AAChC,mBAAS,WAAW,GAAG;AAAA,eAClB;AACL,cAAI,WAAW,SAAS,OAAO;AAE/B,cAAI,CAAC,MAAM,WAAW;AACpB,qBAAS,WAAW;AAAA;AAAA;AAAA;AAK1B,UAAI,UAAU,OAAO,UAAU;AAC7B,YAAI,OAAO,YAAY,WAAW;AAChC,mBAAS,WAAW,GAAG;AAAA,eAClB;AACL,cAAI,WAAW,SAAS,OAAO;AAE/B,cAAI,CAAC,MAAM,WAAW;AACpB,qBAAS,WAAW;AAAA;AAAA;AAAA;AAK1B,UAAI,CAAC,KAAK,YAAY;AACpB,aAAK,YAAY;AACjB,aAAK,MAAM,UAAU;AACrB,aAAK,YAAY;AAAA;AAAA,OAGjB,QAAQ,cAAc,KAAK,QAAQ,WAAW;AAChD,WAAK;AACL,qBAAe;AAEf,UAAI,GAAG,YAAY,YAAY;AAC7B,WAAG,MAAM,SAAS;AAClB,WAAG,MAAM,YAAY;AACrB,WAAG,MAAM,SAAS,SAAS,YAAY;AACvC,WAAG,MAAM,WAAW,SAAS,WAAW;AACxC,WAAG,MAAM,WAAW,SAAS,WAAW;AACxC,WAAG,MAAM,YAAY;AAAA;AAGvB,UAAI,WAAW;AACb,gBAAQ,IAAI,UAAU;AACtB,gBAAQ,IAAI,OAAO;AACnB,gBAAQ,IAAI,SAAS;AACrB,gBAAQ,IAAI,QAAQ;AACpB,gBAAQ,IAAI,WAAW;AACvB,gBAAQ,IAAI,SAAS;AACrB,gBAAQ,IAAI,oBAAoB;AAChC,gBAAQ,IAAI,qBAAqB;AACjC,gBAAQ,IAAI,kBAAkB;AAAA;AAGhC;AAAA;AAGF,+BAA0B,SAAS;AACjC,aAAO,QAAQ,gBAAgB,SAAS,YAAY,iBAAiB;AAAA;AAGvE,WAAO;AAAA,MACL,MAAM,cAAc,KAAK,QAAQ,WAAW;AAC1C,cAAM,KAAK,QAAQ;AAAA;AAAA,MAErB,WAAW,qBAAqB;AAC9B,mBAAW,IAAI,UAAU;AAEzB,mBAAW,IAAI,OAAO;AAEtB,mBAAW,IAAI,SAAS;AAExB,mBAAW,IAAI,QAAQ;AAEvB,mBAAW,IAAI,WAAW;AAE1B,mBAAW,IAAI,SAAS;AAExB,mBAAW,IAAI,oBAAoB;AAEnC,mBAAW,IAAI,qBAAqB;AAEpC,mBAAW,IAAI,kBAAkB;AAAA;AAAA,MAEnC;AAAA;AAAA;;;ADrLJ,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAmBzU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,mBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,cAAO,QAAQ;AAAA,WAAY;AAAE,cAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,gBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,MAAK,MAAM,MAAM;AAAA;AAErZ,2BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAUxM,MAAI,4BAA4B;AAChC,MAAI,2BAA2B;AACxB,MAAI,eAAc;AAMlB,MAAI,aAA0B,yBAAU,aAAa;AAC1D,gBAAU,aAAY;AAEtB,QAAI,SAAS,eAAa;AAK1B,yBAAoB,UAAU;AAC5B,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,eAAe,IAAI,qBAAa,yBAAuB;AAQ7D,YAAM,aAAa;AAQnB,YAAM,WAAW;AAQjB,YAAM,gBAAgB;AAQtB,YAAM,kBAAkB;AAQxB,YAAM,sBAAsB;AAQ5B,YAAM,aAAa;AAEnB,YAAM;AAEN,YAAM;AAEN,YAAM,IAAI,YAAY,gBAAgB,WAAY;AAChD,eAAO,MAAM;AAAA;AAGf,aAAO;AAAA;AAST,mBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,KAAK,SAAS;AAAA;AAAA,OAQtB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,UAAU;AACjC,aAAK,SAAS,QAAQ;AAAA;AAAA,OAMvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,YAAI,SAAS;AAEb,aAAK;AAEL,aAAK;AACL,aAAK,QAAQ,iBAAiB,SAAU,QAAO;AAC7C,iBAAO,OAAO,gBAAgB;AAAA;AAAA;AAAA,OAOjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,WAAW;AAEhB,YAAI,KAAK,IAAI,aAAa,kBAAkB,KAAK,UAAU;AACzD,eAAK,IAAI;AAAA;AAGX,aAAK;AACL,aAAK,iBAAiB;AAAA;AAAA,OAavB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,KAAK,KAAK,MAAM,IAAI,OAAO,gBAAgB;AACjE,YAAI,gBAAgB,KAAK;AAEzB,cAAK,kBAAgB,YAAW,YAAY,WAAW,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,IAAI,OAAO;AAEnG,YAAI,CAAC,eAAe,UAAU;AAC5B,eAAK,kBAAkB;AACvB,cAAI,eAAe,eAAe,cAC9B,oBAAoB,eAAe;AAEvC,cAAI,cAAc;AAGhB,iBAAK,SAAS,QAAQ;AAAA;AAGxB,cAAI,kBAAkB,aAAa,UAAU;AAC3C,iBAAK;AAAA;AAKP,cAAI,eAAe,CAAC;AAEpB,cAAI,gBAAgB,CAAC,mBAAmB;AACtC,iBAAK;AAAA;AAAA;AAAA;AAAA,OAWV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,iBAAiB,QAAO;AACnD,YAAI,KAAK,UAAU,aAAa,QAAQ;AACtC;AAAA;AAGF,aAAK,SAAS,QAAQ;AAEtB,cAAK,kBAAgB,YAAW,YAAY,gBAAgB,MAAM,KAAK,MAAM,iBAAiB;AAAA;AAAA,OAM/F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AAItB,aAAK,SAAS;AACd,yBAAiB,KAAK,UAAU,KAAK,SAAS,MAAM;AAAA;AAAA,OAMrD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,YAAI,eAAe,KAAK,IAAI;AAC5B,aAAK,WAAW,aAAa,cAAc;AAC3C,aAAK,SAAS,aAAa,kBAAkB;AAE7C,aAAK,SAAS,WAAW;AACzB,iBAAS,KAAK,UAAU;AACxB,aAAK,gBAAgB,KAAK,SAAS;AACnC,aAAK,cAAc,QAAQ;AAC3B,aAAK,cAAc,SAAS;AAC5B,aAAK,cAAc,YAAY;AAC/B,aAAK,kBAAkB,aAAa,cAAc;AAClD,iBAAS,KAAK,iBAAiB;AAE/B,YAAI,SAAS,KAAK,iBAAiB,KAAK,aAAa;AACnD,sBAAY,KAAK,iBAAiB,KAAK;AAAA;AAGzC,iBAAS,KAAK,iBAAiB;AAC/B,aAAK,sBAAsB,KAAK,gBAAgB;AAChD,aAAK,gBAAgB,YAAY,KAAK;AACtC,aAAK,IAAI,YAAY,YAAY,KAAK;AAAA;AAAA,OAQvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,YAAI,UAAU,UAAU;AACtB,eAAK,cAAc,aAAa;AAAA;AAGlC,aAAK,cAAc,YAAY;AAC/B,aAAK,oBAAoB,UAAU;AACnC,aAAK,oBAAoB,SAAS;AAElC,YAAI,SAAS,KAAK,iBAAiB,KAAK,aAAa;AACnD,sBAAY,KAAK,iBAAiB,KAAK;AAAA;AAGzC,iBAAS,KAAK,iBAAiB;AAAA;AAAA,OAQhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,aAAK,oBAAoB,SAAS;AAClC,aAAK,oBAAoB,WAAW;AACpC,aAAK,oBAAoB,WAAW;AACpC,aAAK,oBAAoB,QAAQ;AACjC,aAAK,oBAAoB,UAAU;AACnC,aAAK,cAAc,aAAa;AAChC,aAAK,cAAc,YAAY;AAC/B,YAAI,aAAa,KAAK,gBAAgB;AACtC,YAAI,6BAA6B;AACjC,kBAAU,WAAW,SAAS,GAAG,SAAU,QAAO;AAChD,cAAI,YAAY,WAAW;AAE3B,cAAI,SAAS,WAAW,uBAAuB;AAC7C,yCAA6B;AAC7B,mBAAO;AAAA;AAAA;AAIX,YAAI,SAAS,KAAK,iBAAiB,2BAA2B;AAC5D,sBAAY,KAAK,iBAAiB;AAAA;AAGpC,YAAI,4BAA4B;AAC9B,eAAK,aAAa;AAClB,mBAAS,KAAK,iBAAiB,KAAK;AAAA,eAC/B;AACL,eAAK,aAAa,KAAK;AACvB,mBAAS,KAAK,iBAAiB,KAAK;AAAA;AAAA;AAAA,OASvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,cAAc,KAAK,IAAI,cAAc,KAAK;AAC9C,YAAI,aAAa,KAAK,IAAI,oBAAoB,aAAa,KAAK;AAChE,aAAK,gBAAgB;AACrB,aAAK,SAAS;AACd,aAAK;AAAA;AAAA,OASN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEhF,YAAI,KAAK,UAAU,aAAa,WAAW,CAAC,OAAO;AACjD;AAAA;AAGF,aAAK,KAAK,KAAK;AAEf,YAAI,CAAC,KAAK,IAAI;AACZ,cAAI,CAAC,OAAO;AACV,iBAAK;AAAA;AAGP;AAAA;AAGF,YAAI,oBAAoB,KAAK,IAAI,KAAK,IAClC,aAAa,kBAAkB,YAC/B,aAAa,kBAAkB;AACnC,YAAI,gBAAgB,OAAO,KAAK;AAChC,YAAI,kBAAkB,OAAO,KAAK,IAAI;AACtC,YAAI,yBAAyB,WAAW,WAAW;AACnD,YAAI,0BAA0B,WAAW,YAAY;AACrD,YAAI,qBAAqB,2BAA2B,KAAK,IAAI,aAAa,uBAAuB,YAAY;AAC7G,YAAI,sBAAsB,4BAA4B,KAAK,IAAI,aAAa,wBAAwB,aAAa;AACjH,YAAI,gBAAgB,KAAK;AACzB,YAAI,YAAY,CAAC,IAAI,QAAQ,SAAS,iBAAiB,qBAAqB;AAC5E,YAAI,aAAa,CAAC,IAAI,OAAO,UAAU,SAAS,iBAAiB,sBAAsB;AAEvF,YAAI,kBAAkB,cAAc,QAAQ,gBAAgB,MAAM,IAAI;AACtE,YAAI,kBAAkB,KAAK,GAAG,MAAM;AACpC,YAAI,UAAU,cAAc,MAAM,gBAAgB,MAAM,kBAAkB;AAC1E,YAAI,WAAW,cAAc,OAAO,gBAAgB,OAAO,IAAI;AAC/D,YAAI;AAEJ,gBAAQ;AAAA,eACD;AACH,iCAAqB,gBAAgB,WAAW,WAAW,MAAM,QAAQ,OAAO;AAChF;AAAA,eAEG;AACH,iCAAqB,gBAAgB,WAAW,YAAY,MAAM,QAAQ,OAAO;AACjF;AAAA,eAEG;AACH,iCAAqB,gBAAgB,WAAW,qBAAqB,MAAM,QAAQ,OAAO;AAC1F;AAAA,eAEG;AACH,iCAAqB,gBAAgB,WAAW,wBAAwB,MAAM,QAAQ,OAAO;AAC7F;AAAA,eAEG;AACH,iCAAqB,gBAAgB,WAAW,cAAc,MAAM,QAAQ,OAAO;AACnF;AAAA;AAGA;AAAA;AAGJ,YAAI,mBAAmB,KAAK,IAAI;AAChC,YAAI,gBAAgB,KAAK,IAAI,eAAe,6BAA6B,KAAK;AAC9E,YAAI,mBAAmB,KAAK,IAAI,kBAAkB,6BAA6B,KAAK;AACpF,YAAI,2BAA2B,KAAK,IAAI,eAAe;AACvD,YAAI,kCAAkC,2BAA2B,KAAK,IAAI,KAAK,GAAG,WAAW;AAE7F,YAAI,oBAAoB,iBAAiB,KAAK,kBAAkB,iCAAiC;AAC/F,qBAAW;AAAA;AAGb,YAAI,oBAAoB,GAAG;AACzB,sBAAY;AAAA;AAGd,YAAI,sBAAsB,uBAAuB,IAAI;AACnD,eAAK,oBAAoB,mBAAmB,MAAM,mBAAmB;AAAA,eAChE;AACL,4BAAkB,KAAK;AAAA;AAGzB,aAAK,oBAAoB,MAAM,GAAG,OAAO,SAAS;AAClD,aAAK,oBAAoB,OAAO,GAAG,OAAO,UAAU;AACpD,aAAK;AACL,YAAI,iBAAiB,WAAW,qBAAqB;AACrD,YAAI,oBAAoB,WAAW,wBAAwB;AAC3D,YAAI,2BAA2B,WAAW,YAAY;AACtD,YAAI,yBAAyB,WAAW,WAAW;AACnD,YAAI,iBAAiB,kBAAkB,KAAK,IAAI;AAChD,YAAI,gBAAgB,KAAK,GAAG,YAAY,iBAAiB;AACzD,YAAI,iBAAiB,KAAK,GAAG,aAAa,oBAAoB;AAC9D,YAAI,QAAQ,WAAW,KAAK,MAAM;AAClC,YAAI,+BAA+B,qBAAqB,0BAA0B,iBAAiB;AACnG,YAAI,iCAAiC,uBAAuB,2BAA2B,iBAAiB;AACxG,YAAI,WAAW,KAAK,IAAI,KAAK,2BAA2B,kBAAkB,IAAI;AAC9E,YAAI,SAAS,KAAK,GAAG,eAAe;AACpC,YAAI,YAAY,KAAK,IAAI,KAAK,IAAI,KAAK,4BAA4B,iBAAiB,gCAAgC;AAEpH,YAAI,oBAAoB,kBAAiB,KAAK,IAAI,KAAK,IAAI;AAC3D,aAAK,SAAS,MAAM,WAAW,kBAAkB;AACjD,aAAK,SAAS,MAAM,aAAa,kBAAkB;AACnD,aAAK,SAAS,MAAM,kBAAkB;AACtC,aAAK,WAAW,KAAK,KAAK,UAAU;AAAA,UAClC,WAAW,KAAK,IAAI,QAAQ;AAAA,UAC5B;AAAA,UAEA,UAAU,KAAK,IAAI,OAAO;AAAA,UAC1B;AAAA,WAEC;AAAA;AAAA,OAQJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,SAAS;AAEb,aAAK,aAAa,iBAAiB,KAAK,UAAU,OAAO,SAAU,QAAO;AACxE,iBAAO,OAAM;AAAA;AAEf,aAAK,aAAa,iBAAiB,KAAK,UAAU,SAAS,SAAU,QAAO;AAC1E,iBAAO,OAAM;AAAA;AAGf,YAAI,SAAS;AAEX,eAAK,aAAa,iBAAiB,KAAK,UAAU,YAAY,WAAY;AACxE,mBAAO,OAAO,cAAc;AAAA;AAAA;AAIhC,aAAK,QAAQ,2BAA2B,WAAY;AAClD,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,qBAAqB,WAAY;AAC5C,iBAAO;AAEP,iBAAO;AAAA;AAET,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO;AAEP,iBAAO;AAAA;AAAA;AAAA,OASV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AAAA;AAAA,OAO1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,aAAa;AAClB,aAAK;AAAA;AAAA,OAQN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAAyB,QAAO;AAErC,YAAI,WAAY,QAAM,WAAW,OAAM,YAAY,CAAC,OAAM;AAE1D,YAAI,OAAM,WAAW,KAAK,YAAY,8BAA8B,SAAQ;AAC1E;AAAA;AAGF,gBAAQ,OAAM;AAAA,eACP,UAAU;AACb,gBAAI,KAAK,oBAAoB;AAC3B,kBAAI,CAAC,KAAK,eAAe,CAAC,KAAK,yBAAyB,OAAM,UAAU;AACtE,yCAAyB;AAAA;AAAA;AAI7B;AAAA,eAEG,UAAU;AACb,gBAAI,KAAK,oBAAoB;AAC3B,kBAAI,CAAC,KAAK,eAAe,CAAC,KAAK,yBAAyB,OAAM,UAAU;AACtE,yCAAyB;AAAA;AAAA;AAI7B;AAAA,eAEG,UAAU;AAAA,eACV,UAAU;AACb,gBAAI,KAAK,oBAAoB;AAC3B,kBAAI,CAAC,KAAK,eAAe,CAAC,KAAK,yBAAyB,OAAM,UAAU;AACtE,yCAAyB;AAAA;AAAA;AAI7B;AAAA,eAEG,UAAU,OACb;AACE,gBAAI,sBAAsB,KAAK,IAAI,UAAU;AAE7C,gBAAI,YAAY,CAAC,uBAAuB,OAAM,QAAQ;AAEpD,kBAAI,KAAK,YAAY;AACnB,oBAAI,gBAAgB,iBAAiB,KAAK;AAC1C,oBAAI,QAAQ,KAAK;AACjB,oBAAI,WAAW,GAAG,OAAO,MAAM,MAAM,GAAG,gBAAgB,MAAM,OAAO,MAAM,MAAM;AACjF,qBAAK,SAAS;AACd,iCAAiB,KAAK,UAAU,gBAAgB;AAAA,qBAC3C;AACL,qBAAK,aAAa,GAAG,OAAO,KAAK,eAAe;AAAA;AAGlD,uCAAyB;AAAA;AAG3B,mBAAM;AAEN;AAAA;AAAA,eAGC,UAAU;AAAA,eACV,UAAU;AAAA,eACV,UAAU;AAAA,eACV,UAAU;AACb,qCAAyB;AAEzB;AAAA;AAGA;AAAA;AAGJ,YAAI,gBAAgB,CAAC,UAAU,UAAU,UAAU,aAAa,UAAU,YAAY,UAAU;AAEhG,YAAI,cAAc,QAAQ,OAAM,aAAa,IAAI;AAC/C,eAAK,WAAW,OAAO,OAAO,aAAa,OAAM;AAAA;AAAA;AAAA,QAGnD,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AExoBK,MAAI,gBAAgB;AAWpB,wBAAsB,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AAChF,QAAI,eAAe;AACnB,QAAI,kBAAkB;AAEtB,QAAI,eAAe,WAAW;AAC5B,eAAS,IAAI,eAAe;AAAA;AAG9B,QAAI,eAAe,UAAU;AAC3B,mBAAa,KAAK,eAAe;AAAA;AAGnC,QAAI,eAAe,UAAU,SAAS,eAAe,sBAAsB;AACzE,mBAAa,KAAK,eAAe;AAAA,WAC5B;AACL,sBAAgB,KAAK,eAAe;AAAA;AAGtC,QAAI,eAAe,aAAa,SAAS,eAAe,qBAAqB;AAC3E,mBAAa,KAAK,eAAe;AAAA;AAGnC,QAAI,CAAC,SAAS,eAAe,aAAa;AACxC,mBAAa,KAAK,eAAe;AAAA;AAGnC,gBAAY,IAAI;AAChB,aAAS,IAAI;AAAA;AAEf,eAAa,gBAAgB;;;ACxCtB,MAAI,iBAAgB;AAcpB,wBAAsB,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AAChF,iBAAa,MAAM,MAAM,CAAC,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO;AAC/D,QAAI,UAAU;AAEd,QAAI,CAAC,WAAW,eAAe,aAAa;AAC1C,gBAAU,eAAe;AAAA;AAG3B,cAAU,UAAU;AAEpB,QAAI,SAAS,cAAc,gBAAgB;AACzC,gBAAU,QAAQ;AAAA;AAGpB,QAAI,eAAe,kBAAkB;AACnC,YAAM;AACN,UAAI,WAAW,SAAS,aAAa,cAAc;AACnD,eAAS,aAAa,QAAQ;AAC9B,eAAS,YAAY,eAAe;AACpC,0BAAoB,SAAS;AAC7B,eAAS,QAAQ,SAAS,mBAAmB;AAC7C,SAAG,YAAY;AAAA,WACV;AAEL,oBAAc,IAAI;AAAA;AAAA;AAGtB,eAAa,gBAAgB;;;AC3CtB,MAAI,aAAY;AAChB,MAAI,eAAe;AAAA,IACxB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,UAAU;AAAA;;;ACQZ,aAAiB;AAEjB,eAAa,UAAU;AAAA,IACrB;AAAA;AAQF,wBAAsB,aAAa,cAAc;AAC/C,QAAI,WAAW,IAAI,KAAK,aAAa,gBAAgB,IAAI;AACzD,aAAS;AACT,WAAO;AAAA;AAGT,eAAa,OAAO,SAAU,aAAa;AACzC,QAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACvF,WAAO,IAAI,KAAK,aAAa,cAAc;AAAA;AAG7C,eAAa,kBAAkB;AAC/B,eAAa,QAAQ,oBAAM;AAC3B,eAAa,cAAc;AAC3B,eAAa,YAAY;AACzB,eAAa,UAAU;AACvB,eAAa,YAAY;AAAA,IACvB,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAEF,MAAO,eAAQ;;;ACpBf,mCAAO;AAQP,gCAAO;;;ACzBP,mCAAO;AAXP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,mBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,cAAO,QAAQ;AAAA,WAAY;AAAE,cAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,gBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,MAAK,MAAM,MAAM;AAAA;AAErZ,2BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAOjM,MAAI,eAAc;AAMlB,MAAI,qBAAkC,yBAAU,aAAa;AAClE,gBAAU,qBAAoB;AAE9B,QAAI,SAAS,eAAa;AAE1B,mCAA8B;AAC5B,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,mBAAa,qBAAoB,CAAC;AAAA,MAChC,KAAK;AAAA,MACL,OAIA,gBAAgB;AAEd,cAAK,kBAAgB,oBAAmB,YAAY,QAAQ,MAAM,KAAK;AAEvE,YAAI,KAAK,UAAU;AACjB,eAAK,SAAS;AAAA;AAGhB,YAAI,KAAK,YAAY,MAAM,YAAY,QAAQ;AAC7C,eAAK,YAAY,MAAM,UAAU;AAAA;AAInC,aAAK,WAAW,IAAI,KAAK,IAAI,YAAY,KAAK,aAAa,KAAK;AAChE,aAAK,SAAS;AACd,aAAK,SAAS,YAAY,MAAM,UAAU;AAE1C,YAAI,KAAK,eAAe,QAAQ;AAC9B,eAAK,SAAS,WAAW,GAAG;AAAA,eACvB;AACL,eAAK,SAAS;AAAA;AAGhB,yBAAiB,KAAK,UAAU,GAAG,KAAK,SAAS,MAAM;AAAA;AAAA,OAMxD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,KAAK,UAAU;AACjB,eAAK,SAAS,YAAY,MAAM,UAAU;AAAA;AAG5C,aAAK,iBAAiB;AAEtB,cAAK,kBAAgB,oBAAmB,YAAY,SAAS,MAAM,KAAK;AAAA;AAAA,OAazE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,KAAK,KAAK,MAAM,IAAI,OAAO,gBAAgB;AACjE,cAAK,kBAAgB,oBAAmB,YAAY,WAAW,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,IAAI,OAAO;AAE3G,YAAI,SAAS;AACb,YAAI,UAAU;AAAA,UACZ,WAAW;AAAA,UACX,WAAW;AAAA,UACX,SAAS;AAAA,UACT,SAAS;AAAA,UACT,WAAW;AAAA,UACX,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,sBAAsB,8BAA8B,GAAG,QAAQ;AAC7D,gBAAI,cAAc,KAAK,cAAc,OAAO,KAAK,OAAO;AAExD,gBAAI,gBAAgB,QAAQ;AAC1B,qBAAO,SAAS;AAAA;AAGlB,mBAAO,SAAS;AAAA;AAAA,UAElB,cAAc;AAAA;AAGhB,YAAI,KAAK,eAAe,cAAc;AACpC,kBAAO,SAAS,eAAe;AAAA;AAGjC,aAAK,YAAY;AAAA;AAAA,OASlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,iBAAiB,QAAO;AACnD,YAAI,iBAAiB,KAAK,IAAI,cAAc;AAE5C,YAAI,kBAAkB,qBAAqB,OAAO;AAChD;AAAA;AAGF,cAAK,kBAAgB,oBAAmB,YAAY,gBAAgB,MAAM,KAAK,MAAM,iBAAiB;AAAA;AAAA,OAMvG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,cAAK,kBAAgB,oBAAmB,YAAY,kBAAkB,MAAM,KAAK;AAEjF,YAAI,MAAM,KAAK,IAAI,aAAa,cAAc;AAC9C,YAAI,YAAY;AAChB,aAAK,gBAAgB,YAAY;AACjC,aAAK,cAAc;AACnB,aAAK;AAAA;AAAA,OAUN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,sBAAsB,UAAU,UAAU;AACtE,YAAI,KAAK,YAAY,KAAK,SAAS,eAAe;AAEhD,eAAK,IAAI;AAAA;AAGX,YAAI,KAAK,YAAY,KAAK,SAAS,mBAAmB;AACpD,cAAI,QAAQ,KAAK,SAAS,cAAc;AAExC,cAAI,UAAU,QAAQ;AAEpB,iBAAK,SAAS;AAAA;AAAA;AAIlB,cAAK,kBAAgB,oBAAmB,YAAY,iBAAiB,MAAM,KAAK,MAAM,sBAAsB,UAAU;AAAA;AAAA,OAQvH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,QAAQ;AAEZ,aAAK,IAAI,QAAQ,gBAAgB,WAAY;AAC3C,cAAI,MAAM,UAAU;AAClB,kBAAM,SAAS;AAAA;AAAA;AAAA;AAAA,OAWpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAAyB,QAAO;AACrC,YAAI,8BAA8B,SAAQ;AACxC;AAAA;AAGF,YAAI,WAAW,KAAK,SAAS;AAC7B,YAAI;AACJ,YAAI;AAEJ,YAAI,OAAM,YAAY,UAAU,YAAY;AAC1C,cAAI,CAAC,SAAS,qBAAqB,CAAC,SAAS,SAAS;AACpD,0BAAc;AAAA,qBACL,SAAS,mBAAmB;AACrC,gBAAI,SAAS,SAAS;AACpB,4BAAc,SAAS,kBAAkB,KAAK;AAAA,uBACrC,CAAC,SAAS,SAAS;AAC5B,kBAAI,UAAU,SAAS,cAAc;AACrC,4BAAc,SAAS,kBAAkB;AACzC,4BAAc,KAAK,IAAI,SAAS,cAAc;AAAA;AAAA;AAAA,mBAGzC,OAAM,YAAY,UAAU,UAAU;AAC/C,cAAI,CAAC,SAAS,qBAAqB,SAAS,SAAS;AACnD,0BAAc,SAAS,cAAc;AAAA,qBAC5B,SAAS,mBAAmB;AACrC,gBAAI,SAAS,SAAS;AACpB,4BAAc,SAAS,kBAAkB;AACzC,4BAAc,KAAK,IAAI,GAAG,cAAc;AAAA,mBACnC;AACL,4BAAc,SAAS,kBAAkB;AACzC,4BAAc,cAAc;AAAA;AAAA;AAAA;AAKlC,YAAI,gBAAgB,QAAQ;AAC1B,cAAI,cAAc,KAAK,SAAS,WAAW,cAAc,SAAS,cAAc,GAAG;AACjF,qBAAS;AAAA,iBACJ;AACL,qBAAS,WAAW,aAAa;AAAA;AAGnC,cAAI,SAAS,UAAU,QAAQ;AAC7B,mBAAM;AACN,qCAAyB;AACzB,iBAAK,IAAI;AACT,iBAAK,SAAS;AAAA;AAAA;AAIlB,cAAK,kBAAgB,oBAAmB,YAAY,mBAAmB,MAAM,KAAK,MAAM;AAAA;AAAA,QAExF,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AD7SF,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,mBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,cAAO,QAAQ;AAAA,WAAY;AAAE,cAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,gBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,MAAK,MAAM,MAAM;AAAA;AAErZ,2BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAExM,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AA4B3M,MAAI,eAAc,oBAAI;AACf,MAAI,eAAc;AAMlB,MAAI,qBAAkC,yBAAU,qBAAqB;AAC1E,gBAAU,qBAAoB;AAE9B,QAAI,SAAS,eAAa;AAE1B,iCAA4B,UAAU;AACpC,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAO1B,wBAAgB,yBAAuB,QAAQ,mBAAmB,SAAU,OAAO,SAAS,eAAe;AACzG,YAAI,mBAAmB;AACvB,YAAI,SAAS;AACb,YAAI,cAAc,MAAM;AACxB,YAAI,eAAe,QAAQ;AAC3B,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AAEJ,YAAI,gBAAgB,GAAG;AACrB,eAAK,IAAI,GAAG,IAAI,cAAc,KAAK;AACjC,mBAAO,KAAK;AAAA;AAGd,iBAAO;AAAA;AAGT,aAAK,IAAI,GAAG,IAAI,cAAc,KAAK;AACjC,wBAAc,UAAU,UAAU,QAAQ;AAE1C,cAAI,eAAe;AACjB,yBAAa,YAAY,QAAQ;AAAA,iBAC5B;AACL,gBAAI,SAAS,KAAK,eAAe;AACjC,yBAAa,YAAY,kBAAkB,QAAQ,QAAQ,MAAM,kBAAkB;AAAA;AAGrF,cAAI,eAAe,IAAI;AACrB,wBAAY,YAAY,SAAS,aAAa;AAC9C,6BAAiB,KAAK;AAAA,cACpB,WAAW;AAAA,cACX,OAAO;AAAA,cACP;AAAA,cACA,OAAO;AAAA;AAAA;AAAA;AAKb,yBAAiB,KAAK,SAAU,GAAG,GAAG;AACpC,cAAI,EAAE,UAAU,IAAI;AAClB,mBAAO;AAAA;AAGT,cAAI,EAAE,UAAU,IAAI;AAClB,mBAAO;AAAA;AAGT,cAAI,EAAE,QAAQ,EAAE,OAAO;AACrB,mBAAO;AAAA,qBACE,EAAE,QAAQ,EAAE,OAAO;AAC5B,mBAAO;AAAA,qBACE,EAAE,UAAU,EAAE,OAAO;AAC9B,gBAAI,EAAE,YAAY,EAAE,WAAW;AAC7B,qBAAO;AAAA,uBACE,EAAE,YAAY,EAAE,WAAW;AACpC,qBAAO;AAAA;AAAA;AAIX,iBAAO;AAAA;AAGT,aAAK,IAAI,GAAG,eAAe,iBAAiB,QAAQ,IAAI,cAAc,KAAK;AACzE,iBAAO,KAAK,iBAAiB,GAAG;AAAA;AAGlC,eAAO;AAAA;AAGT,YAAM,QAAQ;AAOd,YAAM,kBAAkB;AAOxB,YAAM,aAAa;AACnB,mBAAY,IAAI,yBAAuB,QAAQ;AAAA,QAC7C,SAAS;AAAA,QACT,SAAS,MAAM,IAAI,WAAW,UAAU,SAAS,QAAQ,SAAS;AAAA;AAEpE,aAAO;AAAA;AAST,mBAAa,qBAAoB,CAAC;AAAA,MAChC,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,YAAI,SAAS;AAEb,YAAI,gBAAgB,KAAK,WAAW,KAAK,SAAU,OAAO;AACxD,cAAI,gBAAgB,OAAO,mBAAmB;AAE9C,iBAAO,kBAAkB,OAAO,SAAS;AAAA;AAG3C,YAAI,UAAU,gBAAgB;AAC5B,iBAAO;AAAA;AAGT,eAAO,KAAK,SAAS;AAAA;AAAA,OAMtB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,cAAK,kBAAgB,oBAAmB,YAAY,kBAAkB,MAAM,KAAK;AAEjF,iBAAS,KAAK,aAAa;AAC3B,iBAAS,KAAK,aAAa,KAAK,IAAI,WAAW,UAAU,SAAS,QAAQ,WAAW,KAAK,KAAK;AAAA;AAAA,OAMhG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,YAAI,SAAS;AAEb,YAAI,OAAO,aAAY,IAAI;AAE3B,cAAK,kBAAgB,oBAAmB,YAAY,QAAQ,MAAM,KAAK;AAEvE,YAAI,iBAAiB,KAAK,SAAS;AACnC,YAAI,eAAe,KAAK,eAAe,iBAAiB,SAAS,OAAO,KAAK,eAAe;AAC5F,aAAK;AACL,aAAK;AACL,YAAI,iBAAiB;AAErB,YAAI,mBAAmB,KAAK,KAAK,SAAS;AACxC,4BAAkB;AAAA;AAGpB,uBAAe,eAAe;AAAA,UAC5B,WAAW,eAAe,CAAC,WAAW,KAAK,YAAY,KAAK;AAAA,UAC5D,OAAO,eAAe,WAAW,KAAK,YAAY,iBAAiB;AAAA,UACnE,UAAU,kBAAkB,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AAC/E,yBAAa,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO;AAClD,gBAAI,wBAAwB,OAAO,gBAC/B,yBAAyB,sBAAsB,wBAC/C,YAAY,sBAAsB,WAClC,SAAS,sBAAsB;AACnC,gBAAI,QAAQ,OAAO;AACnB,gBAAI,YAAY,UAAU;AAC1B,gBAAI;AACJ,gBAAI;AAEJ,gBAAI,aAAa,CAAC,WAAW;AAC3B,6BAAe,2BAA2B,OAAO,UAAU,QAAQ,SAAS,UAAU,kBAAkB,QAAQ,QAAQ,MAAM,kBAAkB;AAEhJ,kBAAI,iBAAiB,IAAI;AACvB,wBAAQ,UAAU,OAAO,cAAc,MAAM;AAC7C,4BAAY,UAAU,QAAQ,OAAO,WAAW,OAAO,OAAO;AAAA;AAAA;AAIlE,eAAG,YAAY;AAAA;AAAA,UAEjB,gBAAgB;AAAA;AAGlB,YAAI,KAAK,SAAS;AAChB,eAAK,UAAU;AAAA;AAGjB,aAAK,IAAI,iBAAiB,WAAY;AACpC,iBAAO,aAAa,OAAO,SAAS;AAAA;AAAA;AAAA,OAOvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,iBAAiB;AAEtB,cAAK,kBAAgB,oBAAmB,YAAY,SAAS,MAAM,KAAK;AAAA;AAAA,OASzE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ;AACpC,cAAK,kBAAgB,oBAAmB,YAAY,iBAAiB,MAAM,KAAK,MAAM;AAEtF,aAAK,IAAI,KAAK;AAAA;AAAA,OASf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,OAAO;AAClC,YAAI,SAAS;AAEb,YAAI,SAAS,KAAK,eAAe;AACjC,aAAK,QAAQ;AAEb,YAAI,OAAO,WAAW,YAAY;AAChC,iBAAO,KAAK,KAAK,gBAAgB,OAAO,SAAU,SAAS;AACzD,mBAAO,aAAa;AAEpB,mBAAO,kBAAkB,OAAO,oBAAoB;AAAA;AAAA,mBAE7C,MAAM,QAAQ,SAAS;AAChC,eAAK,aAAa;AAClB,eAAK,kBAAkB,KAAK,oBAAoB;AAAA,eAC3C;AACL,eAAK,kBAAkB;AAAA;AAAA;AAAA,OAU1B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,aAAa;AAC7C,YAAI,MAAM,iBAAiB,KAAK;AAChC,YAAI,SAAS,wBAAwB,KAAK;AAC1C,YAAI,yBAAyB,KAAK,eAAe;AACjD,YAAI,gBAAgB,KAAK,eAAe;AACxC,YAAI,mBAAmB;AACvB,YAAI,iBAAiB;AACrB,YAAI,UAAU;AAEd,YAAI,wBAAwB;AAC1B,6BAAmB,KAAK,gBAAgB,KAAK,mBAAmB,KAAK,aAAa,SAAS,KAAK,eAAe;AAAA;AAGjH,YAAI,yBAAyB,MAAM,QAAQ,oBAAoB,iBAAiB,SAAS;AAEzF,YAAI,kBAAkB,OAAO;AAC3B,cAAI,wBAAwB;AAC1B,6BAAiB,iBAAiB;AAAA;AAAA,eAE/B;AACL,cAAI,SAAS;AAEb,mBAAS,IAAI,GAAG,eAAe,QAAQ,QAAQ,IAAI,cAAc,KAAK;AACpE,gBAAI,0BAA0B,0BAA0B,GAAG;AACzD;AAAA;AAGF,gBAAI,wBAAwB;AAC1B,qBAAO,KAAK,QAAQ,iBAAiB;AAAA,mBAChC;AACL,qBAAO,KAAK,QAAQ;AAAA;AAAA;AAIxB,2BAAiB;AACjB,oBAAU;AAAA;AAGZ,aAAK,kBAAkB;AACvB,aAAK,SAAS,SAAS,MAAM,CAAC;AAC9B,aAAK;AACL,aAAK;AAEL,YAAI,KAAK,eAAe,WAAW,MAAM;AACvC,eAAK,4BAA4B;AAAA;AAGnC,aAAK,IAAI;AACT,yBAAiB,KAAK,UAAU,KAAK,QAAQ,SAAS,SAAS;AAAA;AAAA,OAShE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,iBAAiB,OAAO,KAAK;AACjC,YAAI,iBAAiB,YAAY,KAAK;AACtC,YAAI,iBAAiB,KAAK;AAC1B,YAAI,oBAAoB,qBAAqB,KAAK,IAAI,KAAK,GAAG,QAAQ;AACtE,YAAI,6BAA6B,kBAAkB;AACnD,YAAI,gBAAgB,YAAY,KAAK,IAAI,KAAK,GAAG,QAAQ;AACzD,YAAI,kBAAkB;AAAA,UACpB,KAAK;AAAA,UACL,KAAK;AAAA;AAGP,YAAI,sBAAsB,KAAK,IAAI,YAAY;AAC7C,4BAAkB,OAAO;AAAA;AAG3B,YAAI,aAAa,eAAe,MAAM,gBAAgB,MAAM,gBAAgB;AAC5E,YAAI,aAAa,kBAAkB,eAAe,aAAa,gBAAgB;AAC/E,YAAI,aAAa,iBAAiB,cAAc,aAAa;AAE7D,YAAI,YAAY;AACd,eAAK,aAAa;AAAA,eACb;AACL,eAAK;AAAA;AAGP,aAAK,sBAAsB,aAAa,aAAa,YAAY;AACjE,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,gBAAgB,gBAAgB;AACpE,YAAI,iBAAiB,gBAAgB;AACnC,cAAI,aAAa;AACjB,cAAI,IAAI;AACR,cAAI,gBAAgB;AACpB,cAAI,SAAS;AAEb,aAAG;AACD,4BAAgB,KAAK,SAAS,aAAa,MAAM,KAAK,SAAS,KAAK,GAAG,WAAW,SAAS;AAC3F,0BAAc;AACd,iBAAK;AAAA,mBACE,aAAa;AAEtB,mBAAS,aAAa;AAEtB,cAAI,KAAK,SAAS,SAAS;AACzB,iBAAK,SAAS,YAAY,MAAM,MAAM,GAAG,OAAO,SAAS,KAAK,SAAS,YAAY,MAAM,KAAK,MAAM,iBAAiB,QAAQ;AAAA;AAG/H,eAAK,kBAAkB,aAAa;AAAA;AAAA;AAAA,OAUvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,gBAAgB;AAC3C,YAAI,gBAAgB,KAAK,SAAS,YAAY;AAC9C,sBAAc,WAAW;AACzB,sBAAc,MAAM,GAAG,OAAO,CAAC,gBAAgB;AAC/C,aAAK,SAAS,UAAU;AAAA;AAAA,OAQzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,YAAI,gBAAgB,KAAK,SAAS,YAAY;AAE9C,YAAI,cAAc,aAAa,YAAY;AACzC,wBAAc,WAAW;AACzB,wBAAc,MAAM;AAAA;AAGtB,aAAK,SAAS,UAAU;AAAA;AAAA,OAQzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,uBAAuB,KAAK,SAAS,YAAY,KAAK,kBAAkB,KAAK,IAAI,gBAAgB;AACrG,YAAI,eAAe,KAAK,eAAe;AACvC,aAAK,SAAS,eAAe;AAAA,UAC3B,QAAQ,KAAK;AAAA,UACb,OAAO,eAAe,SAAS;AAAA;AAEjC,aAAK,SAAS,KAAK,GAAG,QAAQ;AAAA;AAAA,OAS/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,QAAQ;AACxC,aAAK,SAAS,eAAe;AAAA,UAC3B;AAAA;AAAA;AAAA,OAUH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,QAAO;AACjD,YAAI,OAAO,WAAU,UAAU;AAC7B,eAAK,SAAS,WAAW,QAAO,GAAG,QAAQ,QAAQ,QAAQ;AAAA,eACtD;AACL,eAAK,SAAS;AAAA;AAAA;AAAA,OAUjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,iBAAiB,KAAK,SAAS,cAAc,aAAa,MAAM;AACpE,YAAI,cAAc,KAAK,eAAe;AACtC,eAAO,KAAK,gBAAgB,UAAU,cAAc,cAAc,iBAAiB,KAAK,gBAAgB,SAAS,iBAAiB;AAAA;AAAA,OAUnI;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,OAAO;AACxC,eAAO,KAAK,oBAAoB,CAAC,QAAQ;AAAA;AAAA,OAU1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,SAAQ;AAC1C,YAAI,YAAY,KAAK,eAAe;AACpC,YAAI,oBAAoB,SAAS,SAAQ,SAAU,OAAO;AACxD,iBAAO,UAAU;AAAA;AAEnB,YAAI,iBAAiB,SAAS,mBAAmB,SAAU,OAAO;AAChE,iBAAO,YAAY,QAAQ,UAAU;AAAA;AAEvC,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,SAAS;AAChD,YAAI,gBAAgB,KAAK,SAAS;AAClC,YAAI,WAAW;AAAA,UACb,KAAK,gBAAgB,cAAc,KAAK,MAAM;AAAA;AAEhD,YAAI,UAAU;AAEd,YAAI,YAAY,UAAU,cAAc,SAAS,MAAM,KAAK,SAAS,MAAM,KAAK,SAAS,cAAc,GAAG;AACxG,oBAAU;AAAA;AAGZ,YAAI,YAAY,UAAU,YAAY,SAAS,MAAM,IAAI;AACvD,oBAAU;AAAA;AAGZ,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAAyB,QAAO;AACrC,YAAI,SAAS;AAEb,YAAI,OAAO,aAAY,IAAI;AAC3B,aAAK,UAAU;AAEf,YAAI,gBAAgB,OAAM,YAAY,OAAM,YAAY,UAAU,aAAa,OAAM,YAAY,UAAU,UAAU,OAAM,YAAY,UAAU,QAAQ;AAKvJ,cAAI,aAAa;AAEjB,cAAI,OAAM,YAAY,UAAU,KAAM,QAAM,WAAW,OAAM,UAAU;AACrE;AAAA;AAGF,cAAI,CAAC,KAAK,YAAY;AACpB,0BAAc;AAAA;AAGhB,cAAI,KAAK,UAAU;AACjB,iBAAK,IAAI,iBAAiB,WAAY;AACpC,qBAAO,aAAa,OAAO,SAAS;AAEpC,mBAAK,UAAU;AAAA,eACd;AAAA;AAAA;AAIP,cAAK,kBAAgB,oBAAmB,YAAY,mBAAmB,MAAM,KAAK,MAAM;AAAA;AAAA,QAWxF,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AEzoBF,mCAAO;AATP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAIjM,MAAI,eAAc;AAMlB,MAAI,iBAA8B,yBAAU,aAAa;AAC9D,gBAAU,iBAAgB;AAE1B,QAAI,SAAS,eAAa;AAE1B,+BAA0B;AACxB,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,mBAAa,iBAAgB,CAAC;AAAA,MAC5B,KAAK;AAAA,MACL,OAAO,sBAAsB,cAAc,QAAO;AAIhD,YAAI,UAAS,OAAM,SAAS,WAAW;AACrC,cAAI,WAAW,KAAK,GAAG,cAAc;AAErC,cAAI,CAAC,SAAS,UAAU,eAAe;AACrC,qBAAS;AAAA;AAAA;AAAA;AAAA,OAId;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAAA;AAAA,OAC/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AAAA;AAAA,OACtB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AAAA;AAAA,OACtB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AAAA;AAAA,OACvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AAAA;AAAA,OAC1B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AAAA;AAAA,OAC1B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AAAA;AAAA,QACtB,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;ACpFF,mCAAO;AA4BP,uBAAmB;AACnB,uBAAoB;AAxCpB,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,mBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,cAAO,QAAQ;AAAA,WAAY;AAAE,cAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,gBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,MAAK,MAAM,MAAM;AAAA;AAErZ,2BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AASjM,MAAI,eAAc;AAMlB,MAAI,aAA0B,yBAAU,aAAa;AAC1D,gBAAU,aAAY;AAEtB,QAAI,SAAS,eAAa;AAM1B,yBAAoB,aAAa;AAC/B,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAE1B,YAAM,oBAAoB;AAC1B,YAAM,eAAe;AACrB,YAAM,kBAAkB;AACxB,YAAM,cAAc;AACpB,aAAO;AAAA;AAGT,mBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,YAAI,SAAS;AAEb,YAAI,OAAO,2BAAW,YAAY;AAChC,gBAAM,IAAI,MAAM;AAAA;AAGlB,YAAI,OAAO,2BAAY,YAAY;AACjC,gBAAM,IAAI,MAAM;AAAA;AAGlB,cAAK,kBAAgB,YAAW,YAAY,QAAQ,MAAM,KAAK;AAE/D,aAAK,SAAS,QAAQ,gBAAgB,WAAY;AAChD,iBAAO,kBAAkB;AAEzB,iBAAO;AAAA;AAAA;AAAA,OAOV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,cAAK,kBAAgB,YAAW,YAAY,kBAAkB,MAAM,KAAK;AAEzE,aAAK,aAAa,KAAK,IAAI,aAAa,cAAc;AACtD,aAAK,kBAAkB,KAAK,WAAW;AACvC,aAAK,gBAAgB,WAAW;AAChC,aAAK,gBAAgB,MAAM;AAC3B,aAAK,gBAAgB,OAAO;AAC5B,aAAK,gBAAgB,SAAS;AAC9B,iBAAS,KAAK,YAAY;AAC1B,aAAK,IAAI,aAAa,KAAK,YAAY,KAAK;AAC5C,YAAI,gBAAe,IAAI,qBAAa;AAKpC,sBAAa,iBAAiB,KAAK,YAAY,aAAa,SAAU,QAAO;AAC3E,iBAAO,OAAM;AAAA;AAAA;AAAA,OAOhB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,0BAA0B,KAAK,WAAW;AAE9C,YAAI,KAAK,aAAa;AACpB,eAAK,YAAY;AAAA;AAGnB,YAAI,yBAAyB;AAC3B,kCAAwB,YAAY,KAAK;AAAA;AAAA;AAAA,OAc5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,KAAK,KAAK,MAAM,IAAI,OAAO,gBAAgB;AACjE,cAAK,kBAAgB,YAAW,YAAY,WAAW,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,IAAI,OAAO;AAAA;AAAA,OAQpG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,YAAI,SAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEhF,cAAK,kBAAgB,YAAW,YAAY,QAAQ,MAAM,KAAK;AAE/D,aAAK,eAAe;AAAA;AAAA,OAMrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,mBACA,SAAS;AAEb,aAAK,UAAU;AAEf,YAAK,qBAAoB,KAAK,iBAAiB,QAAQ,sBAAsB,UAAU,kBAAkB,SAAS;AAChH,eAAK,YAAY;AAAA;AAGnB,aAAK,SAAS,iBAAiB,WAAY;AACzC,iBAAO,SAAS;AAAA;AAGlB,cAAK,kBAAgB,YAAW,YAAY,SAAS,MAAM,KAAK;AAAA;AAAA,OASjE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,uBAAuB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/F,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEnF,YAAI,sBAAsB;AAGxB,cAAI,QAAQ,KAAK;AAEjB,cAAI,UAAU,QAAQ;AACpB,iBAAK,SAAS;AAAA;AAAA;AAIlB,cAAK,kBAAgB,YAAW,YAAY,iBAAiB,MAAM,KAAK,MAAM,sBAAsB;AAAA;AAAA,OAQrG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAO;AACpC,YAAI,UAAS,KAAK,GAAG;AACrB,YAAI,aAAa,KAAK,eAAe,cAAc,KAAK;AACxD,YAAI,cAAc,KAAK,SAAS,KAAK;AACrC,YAAI,SAAS,SAAQ,cAAc,OAAM,WAAW;AACpD,YAAI;AACJ,aAAK,gBAAgB,MAAM,GAAG,OAAO,KAAK,IAAI,WAAW,cAAc,QAAO,MAAM,YAAY,KAAK,KAAK;AAC1G,aAAK,gBAAgB,OAAO,GAAG,OAAO,KAAK,IAAI,WAAW,cAAc,QAAO,MAAM;AACrF,aAAK,cAAc,IAAI,uBAAQ,KAAK;AAEpC,aAAK,YAAY,gBAAgB,WAAY;AAAA;AAE7C,YAAI,KAAK,eAAe;AACtB,oBAAU,KAAK;AAEf,cAAI,4BAAO,SAAS,YAAY,MAAM,WAAW;AAC/C,iBAAK,YAAY,UAAU,4BAAO,SAAS,aAAa;AAAA;AAI1D,cAAI,KAAK,eAAe,KAAK,eAAe;AAC1C,iBAAK,SAAS,KAAK;AAAA;AAGrB,cAAI,CAAC,UAAU,CAAC,aAAa;AAC3B,iBAAK,SAAS;AAAA;AAAA,mBAEP,KAAK,eAAe,aAAa;AAC1C,oBAAU,KAAK,eAAe;AAE9B,cAAI,4BAAO,SAAS,YAAY,MAAM,WAAW;AAC/C,iBAAK,YAAY,UAAU,4BAAO,SAAS,aAAa;AAAA;AAG1D,cAAI,CAAC,UAAU,CAAC,aAAa;AAC3B,iBAAK,SAAS;AAAA;AAAA,eAEX;AAGL,eAAK,YAAY;AAAA;AAGnB,aAAK,gBAAgB,UAAU;AAAA;AAAA,OAMhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,aAAK,gBAAgB,UAAU;AAC/B,aAAK,YAAY;AAAA;AAAA,OAQlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,YAAI,SAAS;AAEb,YAAI,UAAU,KAAK;AACnB,YAAI,UAAU;AAEd,YAAI,KAAK,kBAAkB,KAAK,eAAe,kBAAkB;AAC/D,qBAAW,SAAS,KAAK,eAAe;AAAA;AAG1C,YAAI,eAAe,QAAQ;AAC3B,YAAI,cAAc,QAAQ;AAC1B,gBAAQ,QAAQ;AAChB,gBAAQ,UAAU;AAClB,gBAAQ,YAAY,KAAK;AACzB,gBAAQ,QAAQ;AAChB,gBAAQ,SAAS,QAAQ,UAAU,KAAK;AACxC,gBAAQ,aAAa,QAAQ,cAAc;AAE3C,gBAAQ,WAAW,SAAU,OAAO;AAClC,cAAI,UAAU;AAEd,cAAI,CAAC,MAAM,QAAQ,YAAY;AAC7B,sBAAU,4BAAO,SAAS,OAAO,OAAO,eAAe,cAAc,OAAO;AAAA;AAG9E,iBAAO,SAAS;AAEhB,iBAAO;AAEP,cAAI,cAAc;AAChB;AAAA;AAAA;AAIJ,gBAAQ,UAAU,WAAY;AAC5B,cAAI,CAAC,OAAO,iBAAiB;AAC3B,mBAAO,cAAc;AAAA;AAGvB,cAAI,aAAa;AACf;AAAA;AAAA;AAIJ,eAAO;AAAA;AAAA,QAEP,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AC3UF,mCAAO;AAZP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAgBzU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,mBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,cAAO,QAAQ;AAAA,WAAY;AAAE,cAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,gBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,MAAK,MAAM,MAAM;AAAA;AAErZ,2BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAIjM,MAAI,eAAc;AAMlB,MAAI,iBAA8B,yBAAU,qBAAqB;AACtE,gBAAU,iBAAgB;AAE1B,QAAI,SAAS,eAAa;AAE1B,+BAA0B;AACxB,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,mBAAa,iBAAgB,CAAC;AAAA,MAC5B,KAAK;AAAA,MACL,OASA,iBAAiB,KAAK,KAAK,MAAM,IAAI,OAAO,gBAAgB;AAC1D,cAAK,kBAAgB,gBAAe,YAAY,WAAW,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,IAAI,OAAO;AAEvG,aAAK,eAAe,SAAS;AAC7B,aAAK,eAAe,SAAS;AAAA;AAAA,QAE7B,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;AACF,sBAAM,eAAe,IAAI,kBAAkB,SAAU,OAAO,KAAK,KAAK;AACpE,QAAI,WAAW,KAAK,YAAY,KAAK,KAAK,UAAU;AAEpD,QAAI,SAAS,WAAW,gBAAgB;AACtC,UAAI,SAAS,WAAW,QAAQ;AAC9B,iBAAS,SAAS;AAClB,iBAAS,SAAS;AAAA;AAAA;AAAA;;;AClFxB,mCAAO;AATP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAGjM,MAAI,eAAc;AAMlB,MAAI,gBAA6B,yBAAU,aAAa;AAC7D,gBAAU,gBAAe;AAEzB,QAAI,SAAS,eAAa;AAE1B,8BAAyB;AACvB,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,mBAAa,gBAAe,MAAM,CAAC;AAAA,MACjC,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AChDF,mCAAO;AAXP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAIjM,MAAI,eAAc;AAMlB,MAAI,iBAA8B,yBAAU,aAAa;AAC9D,gBAAU,iBAAgB;AAE1B,QAAI,SAAS,eAAa;AAE1B,+BAA0B;AACxB,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,mBAAa,iBAAgB,CAAC;AAAA,MAC5B,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,eAAK,kBAAgB,gBAAe,YAAY,kBAAkB,MAAM,KAAK;AAE7E,aAAK,WAAW,KAAK,IAAI,aAAa,cAAc;AACpD,aAAK,SAAS,aAAa,QAAQ;AACnC,aAAK,SAAS,aAAa,kBAAkB;AAE7C,aAAK,SAAS,YAAY;AAC1B,aAAK,gBAAgB,KAAK,SAAS;AACnC,aAAK,cAAc,QAAQ;AAC3B,aAAK,cAAc,SAAS;AAC5B,cAAM,KAAK;AACX,aAAK,gBAAgB,YAAY,KAAK;AAAA;AAAA,QAEtC,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;ACzEF,mCAAO;AAIP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAOxM,MAAI,6BAA4B;AACzB,MAAI,gBAAc;AAMlB,MAAI,eAA4B,yBAAU,aAAa;AAC5D,gBAAU,eAAc;AAExB,QAAI,SAAS,eAAa;AAE1B,6BAAwB;AACtB,wBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,mBAAa,eAAc,CAAC;AAAA,MAC1B,KAAK;AAAA,MACL,OAIA,gBAAgB;AACd,aAAK,SAAS,KAAK,IAAI,aAAa,cAAc;AAClD,iBAAS,KAAK,QAAQ;AACtB,aAAK,OAAO,MAAM,UAAU;AAC5B,aAAK,IAAI,YAAY,YAAY,KAAK;AACtC,aAAK;AAAA;AAAA,OAQN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,KAAK,OAAO;AAAA;AAAA,OAQpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,OAAO;AAC9B,aAAK,OAAO,QAAQ;AAAA;AAAA,OAMrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,YAAI,QAAQ;AAEZ,aAAK,UAAU;AACf,aAAK;AACL,aAAK,OAAO,MAAM,UAAU;AAC5B,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,MAAM;AAAA;AAAA;AAAA,OAOhB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,UAAU;AACf,aAAK,OAAO,MAAM,UAAU;AAE5B,YAAI,SAAS,KAAK,QAAQ,6BAA4B;AACpD,sBAAY,KAAK,QAAQ;AAAA;AAG3B,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,OAAO;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,aAAK,QAAQ,2BAA2B,WAAY;AAClD,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,qBAAqB,WAAY;AAC5C,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO;AAAA;AAAA;AAAA,OAcjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,KAAK,KAAK,MAAM,IAAI,OAAO,gBAAgB;AACjE,YAAI,SAAS;AAEb,eAAK,kBAAgB,cAAa,YAAY,WAAW,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,IAAI,OAAO;AAErG,YAAI,gBAAgB,KAAK,eAAe;AACxC,YAAI;AAEJ,YAAI,OAAO,kBAAkB,YAAY;AACvC,oBAAU,KAAK,eAAe,cAAc,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,eAChE;AACL,oBAAU,KAAK,eAAe;AAAA;AAGhC,cAAM,KAAK;AACX,mBAAW,SAAS,SAAU,aAAa,KAAK;AAC9C,cAAI,gBAAgB,OAAO,IAAI,aAAa,cAAc;AAE1D,wBAAc,QAAQ;AACtB,wBAAc,eAAe;AAE7B,iBAAO,OAAO,YAAY;AAAA;AAAA;AAAA,OAW7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,kBAAkB;AAC/C,YAAI,kBAAkB;AAEtB,YAAI,MAAM,QAAQ,mBAAmB;AACnC,mBAAS,IAAI,GAAG,MAAM,iBAAiB,QAAQ,IAAI,KAAK,KAAK;AAC3D,4BAAgB,iBAAiB,MAAM,iBAAiB;AAAA;AAAA,mBAEjD,UAAQ,sBAAsB,UAAU;AACjD,4BAAkB;AAAA;AAGpB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,aAAa,KAAK,IAAI,oBAAoB,KAAK,KAAK,KAAK;AAC7D,aAAK,gBAAgB;AACrB,aAAK,SAAS;AACd,aAAK;AAAA;AAAA,OAQN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,KAAK,UAAU,aAAa,SAAS;AACvC;AAAA;AAGF,aAAK,KAAK,KAAK;AAEf,YAAI,CAAC,KAAK,IAAI;AACZ,eAAK;AACL;AAAA;AAGF,YAAI,aAAa,KAAK,IAAI,KAAK,GAAG;AAClC,YAAI,gBAAgB,OAAO,KAAK;AAChC,YAAI,kBAAkB,OAAO,KAAK,IAAI;AACtC,YAAI,sBAAsB,WAAW;AACrC,YAAI,gBAAgB,KAAK;AACzB,YAAI,QAAQ,WAAW,KAAK,MAAM;AAClC,YAAI,SAAS,YAAY,KAAK,MAAM;AACpC,YAAI,UAAU,cAAc,MAAM,gBAAgB,MAAM,IAAK,qBAAoB,aAAa;AAC9F,YAAI,WAAW,cAAc,OAAO,gBAAgB,OAAO,IAAK,qBAAoB,cAAc;AAClG,YAAI;AAEJ,gBAAQ;AAAA,eACD;AACH,iCAAqB,gBAAgB,WAAW,WAAW,MAAM,QAAQ,OAAO;AAChF;AAAA,eAEG;AACH,iCAAqB,gBAAgB,WAAW,YAAY,MAAM,QAAQ,OAAO;AACjF;AAAA,eAEG;AACH,iCAAqB,gBAAgB,WAAW,qBAAqB,MAAM,QAAQ,OAAO;AAC1F;AAAA,eAEG;AACH,iCAAqB,gBAAgB,WAAW,wBAAwB,MAAM,QAAQ,OAAO;AAC7F;AAAA,eAEG;AACH,iCAAqB,gBAAgB,WAAW,cAAc,MAAM,QAAQ,OAAO;AACnF;AAAA;AAGA;AAAA;AAGJ,YAAI,gBAAgB,KAAK,IAAI,eAAe,6BAA6B,KAAK;AAC9E,YAAI,mBAAmB,KAAK,IAAI,kBAAkB,6BAA6B,KAAK;AACpF,YAAI,2BAA2B,KAAK,IAAI,eAAe;AACvD,YAAI,kCAAkC,2BAA2B,KAAK,IAAI,KAAK,GAAG,WAAW;AAE7F,YAAI,iBAAiB,KAAK,kBAAkB,iCAAiC;AAC3E,qBAAW;AAAA;AAGb,YAAI,oBAAoB,GAAG;AACzB,sBAAY;AAAA;AAGd,YAAI,cAAc,KAAK,OAAO;AAE9B,YAAI,sBAAsB,uBAAuB,IAAI;AACnD,sBAAY,mBAAmB,MAAM,mBAAmB;AAAA,eACnD;AACL,4BAAkB,KAAK;AAAA;AAGzB,YAAI,oBAAoB,kBAAiB,KAAK,IAAI,KAAK,IAAI;AAE3D,YAAI,SAAS,kBAAkB,gBAAgB,MAAM,GAAG;AACtD,oBAAU;AAAA;AAGZ,YAAI,SAAS,kBAAkB,iBAAiB,MAAM,GAAG;AACvD,mBAAS;AAAA;AAGX,oBAAY,SAAS,GAAG,OAAO,QAAQ;AACvC,oBAAY,WAAW,GAAG,OAAO,OAAO;AACxC,oBAAY,MAAM,GAAG,OAAO,SAAS;AACrC,oBAAY,OAAO,GAAG,OAAO,UAAU;AACvC,oBAAY,SAAS;AACrB,iBAAS,KAAK,QAAQ;AAAA;AAAA,OAQvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA2B;AAChC,YAAI,sBAAsB,KAAK,OAAO,gBAAgB;AACtD,YAAI,kBAAkB,KAAK,OAAO,gBAAgB;AAElD,gBAAQ,MAAM;AAAA,eACP,UAAU;AACb,gBAAI,uBAAuB,GAAG;AAC5B,mBAAK,OAAO,qBAAqB,WAAW;AAAA;AAG9C,qCAAyB;AACzB,kBAAM;AACN;AAAA,eAEG,UAAU;AACb,gBAAI,mBAAmB,KAAK,OAAO,SAAS,GAAG;AAC7C,mBAAK,OAAO,iBAAiB,WAAW;AAAA;AAG1C,qCAAyB;AACzB,kBAAM;AACN;AAAA;AAGA;AAAA;AAAA;AAAA,QAGJ,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;ACtWK,gCAA8B;AACnC,cAAe;AACf,cAAe;AACf,cAAe;AACf,cAAe;AACf,cAAe;AACf,cAAe;AACf,cAAe;AACf,cAAe;AACf,cAAe;AACf,cAAe;AAAA;;;ACvBV,MAAI,iBAAgB;AAYpB,wBAAsB,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AAChF,iBAAa,MAAM,MAAM,CAAC,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO;AAC/D,kBAAc,IAAI,UAAU,QAAQ,UAAU,SAAS,KAAK,OAAO;AAAA;AAErE,eAAa,gBAAgB;;;ACbtB,MAAI,iBAAgB;AAcpB,gCAA8B,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AACxF,QAAI,eAAe,SAAS;AAC5B,QAAI,eAAe,eAAe,YAAY,eAAe;AAC7D,QAAI,QAAQ,aAAa,cAAc;AACvC,UAAM,YAAY;AAClB,UAAM,YAAY,aAAa,eAAe,OAAO,aAAa;AAClE,iBAAa,MAAM,MAAM,CAAC,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO;AAE/D,QAAI,CAAC,GAAG,YAAY;AAGlB,SAAG,YAAY,aAAa,eAAe,OAAO,aAAa;AAAA;AAIjE,OAAG,aAAa,OAAO,GAAG;AAC1B,aAAS,IAAI;AAEb,QAAI,CAAC,SAAS,iBAAiB;AAC7B,UAAI,gBAAe,IAAI,qBAAa;AAEpC,eAAS,kBAAkB,SAAU,QAAO;AAC1C,YAAI,SAAS,OAAM,QAAQ,wBAAwB;AACjD,mBAAS,KAAK,GAAG,WAAW,kBAAkB,MAAM,IAAI,eAAW,KAAK,MAAM;AAAA;AAAA;AAIlF,oBAAa,iBAAiB,SAAS,aAAa,aAAa,SAAS;AAE1E,eAAS,YAAY,gBAAgB,WAAY;AAC/C,sBAAa;AAAA;AAAA;AAAA;AAInB,uBAAqB,gBAAgB;;;ACrDrC,mCAAO;AAiBP,MAAI,0BAA0B,oBAAI;AAClC,MAAI,0BAA0B,oBAAI;AAClC,MAAI,kBAAkB;AACtB,MAAI,WAAW;AACf,MAAI,cAAc;AACX,MAAI,iBAAgB;AAC3B,sBAAM,eAAe,IAAI,4BAA4B,SAAU,YAAY,UAAU,WAAW;AAC9F,QAAI,QAAQ,SAAS,OACjB,OAAO,SAAS,MAChB,MAAM,SAAS,KACf,SAAS,SAAS,QAClB,OAAO,SAAS;AAEpB,QAAI,SAAS,gBAAe;AAC1B;AAAA;AAGF,QAAI,OAAO;AACT,UAAI,aAAa,MAAM,OACnB,gBAAgB,MAAM;AAC1B,UAAI,YAAY;AAEhB,UAAI,YAAY;AACd,oBAAY,OAAO,eAAe,aAAa,WAAW,KAAK,QAAQ,MAAM,aAAa;AAAA,iBACjF,eAAe;AACxB,YAAI,YAAY,KAAK,iBAAiB,KAAK;AAC3C,oBAAY,cAAc,OAAO,YAAY;AAAA;AAG/C,mBAAa;AAAA;AAGf,WAAO;AAAA;AAeF,4BAA0B,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AACpF,QAAI,eAAe,SAAS;AAC5B,iBAAa,MAAM,MAAM,CAAC,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO;AAC/D,mBAAe;AACf,QAAI,QAAQ,YAAY;AACxB,QAAI,eAAe,eAAe;AAClC,QAAI,WAAW;AAEf,QAAI,OAAO,eAAe,oBAAoB,aAAa;AACzD,qBAAe,kBAAkB;AAAA;AAGnC,QAAI,OAAO,eAAe,sBAAsB,aAAa;AAC3D,qBAAe,oBAAoB;AAAA;AAGrC,UAAM;AAEN,QAAI,UAAU,eAAe,mBAAmB,UAAU,OAAO,kBAAkB,eAAe,YAAY,UAAU,eAAe,iBAAiB,kBAAkB,eAAe,SAAS;AAChM,YAAM,UAAU;AAAA,eACP,UAAU,eAAe,qBAAqB,UAAU,OAAO,kBAAkB,eAAe,YAAY,UAAU,eAAe,mBAAmB,kBAAkB,eAAe,SAAS;AAC3M,YAAM,UAAU;AAAA,eACP,QAAQ,QAAQ;AAEzB,eAAS,OAAO;AAAA,WACX;AACL,YAAM,MAAM,UAAU;AACtB,eAAS,OAAO;AAChB,iBAAW;AAAA;AAGb,UAAM,aAAa,UAAU;AAC7B,UAAM,aAAa,aAAa;AAEhC,QAAI,CAAC,YAAY,cAAc;AAC7B,UAAI,YAAY;AAEhB,UAAI,aAAa,OAAO;AACtB,oBAAY,OAAO,aAAa,UAAU,aAAa,aAAa,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,SAAS,aAAa;AAAA,iBAClH,aAAa,UAAU;AAChC,YAAI,aAAa,SAAS,iBAAiB,KAAK,aAAa;AAC7D,oBAAY,eAAe,OAAO,aAAa;AAAA;AAGjD,UAAI,QAAQ,YAAY,cAAc,WAAW,aAAa,cAAc;AAE5E,UAAI,aAAa,aAAa,UAAU;AACtC,YAAI,aAAa,WAAW;AAC1B,aAAG,YAAY;AACf,aAAG,YAAY;AAAA,eACV;AACL,gBAAM,YAAY;AAClB,kBAAQ;AAAA;AAAA,iBAED,CAAC,aAAa,YAAY,aAAa,aAAa,SAAS;AACtE,YAAI,aAAa,WAAW;AAC1B,aAAG,YAAY;AACf,aAAG,YAAY;AAAA,eACV;AACL,gBAAM,aAAa,OAAO,MAAM;AAChC,kBAAQ;AAAA;AAAA;AAAA;AAKd,QAAI,CAAC,gBAAgB,gBAAgB,CAAC,aAAa,WAAW;AAC5D,SAAG,YAAY;AAAA;AAGjB,QAAI,UAAU;AACZ,SAAG,YAAY,aAAa,eAAe;AAAA;AAG7C,QAAI,CAAC,wBAAwB,IAAI,WAAW;AAC1C,8BAAwB,IAAI,UAAU;AACtC,eAAS,QAAQ,iBAAiB;AAAA;AAUpC,8BAAyB,QAAO;AAC9B,UAAI,aAAa;AACjB,UAAI,gBAAgB;AACpB,UAAI,YAAY,QAAQ,OAAO,OAAM;AAErC,UAAI,CAAC,SAAS,cAAc,sBAAsB,UAAU,UAAU;AACpE;AAAA;AAGF,UAAI,UAAU,GAAG,OAAO,YAAY,KAAK,OAAO,mBAAmB,CAAC,8BAA8B,SAAQ;AACxG,iCAAyB,WAAY;AACnC,mCAAyB;AACzB,iBAAM;AAAA;AAAA;AAIV,UAAI,UAAU,aAAa;AACzB;AAAA;AAGF,UAAI,UAAU,gBAAgB;AAC5B,sCAA8B;AAAA;AAAA;AAWlC,6CAAyC;AACvC,UAAI,kBAAkB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC1F,UAAI,WAAW,SAAS;AAExB,UAAI,CAAC,UAAU;AACb;AAAA;AAGF,eAAS,MAAM,GAAG,MAAM,SAAS,QAAQ,OAAO;AAC9C,YAAI,wBAAwB,SAAS,KAAK,oBACtC,WAAW,sBAAsB,KACjC,cAAc,sBAAsB;AAExC,YAAI,wBAAwB,SAAS,KAAK,wBACtC,SAAS,sBAAsB,KAC/B,YAAY,sBAAsB;AAEtC,YAAI,UAAU;AAEd,iBAAS,YAAY,UAAU,aAAa,QAAQ,aAAa,GAAG;AAClE,mBAAS,eAAe,aAAa,gBAAgB,WAAW,gBAAgB,GAAG;AACjF,gBAAI,uBAAuB,SAAS,YAAY,WAAW;AAE3D,gBAAI,qBAAqB,SAAS,YAAY;AAC5C;AAAA;AAKF,gBAAI,qBAAqB,aAAa,MAAM;AAC1C;AAAA;AAGF,gBAAI,OAAO,qBAAqB,oBAAoB,aAAa;AAC/D,mCAAqB,kBAAkB;AAAA;AAGzC,gBAAI,OAAO,qBAAqB,sBAAsB,aAAa;AACjE,mCAAqB,oBAAoB;AAAA;AAG3C,gBAAI,aAAa,SAAS,cAAc,WAAW;AAEnD,gBAAI,oBAAoB,OAAO;AAC7B,kBAAI,CAAC,qBAAqB,iBAAiB,qBAAqB,gBAAgB,YAAY,SAAS,aAAa;AAEhH,wBAAQ,KAAK,CAAC,WAAW,cAAc,qBAAqB;AAAA,yBACnD,CAAC,qBAAqB,mBAAmB,qBAAqB,kBAAkB,YAAY,MAAM,QAAQ,SAAS,aAAa;AAEzI,wBAAQ,KAAK,CAAC,WAAW,cAAc,qBAAqB;AAAA;AAAA,mBAEzD;AACL,sBAAQ,KAAK,CAAC,WAAW,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAKlE,YAAI,QAAQ,SAAS,GAAG;AACtB,mBAAS,cAAc;AAAA;AAAA;AAAA;AAY7B,sCAAkC,UAAU;AAC1C,UAAI,WAAW,SAAS;AAExB,UAAI,CAAC,UAAU;AACb;AAAA;AAGF,eAAS,MAAM,GAAG,MAAM,SAAS,QAAQ,OAAO;AAC9C,YAAI,UAAU,SAAS,KAAK;AAC5B,YAAI,cAAc,SAAS,KAAK;AAEhC,iBAAS,YAAY,QAAQ,KAAK,aAAa,YAAY,KAAK,aAAa;AAC3E,mBAAS,eAAe,QAAQ,KAAK,gBAAgB,YAAY,KAAK,gBAAgB;AACpF,gBAAI,uBAAuB,SAAS,YAAY,WAAW;AAE3D,gBAAI,qBAAqB,SAAS,YAAY;AAC5C;AAAA;AAGF,gBAAI,OAAO,SAAS,QAAQ,WAAW;AAEvC,gBAAI,SAAS,QAAQ,SAAS,QAAQ;AACpC,uBAAS,WAAW,cAAc;AAAA,mBAC7B;AACL,kBAAI,aAAa,KAAK,iBAAiB;AAEvC,kBAAI,WAAW,SAAS,KAAK,CAAC,qBAAqB,UAAU;AAC3D,yBAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQvB,mBAAiB,gBAAgB;AAQjC,0BAAwB,UAAU;AAChC,QAAI,gBAAe,wBAAwB,IAAI;AAE/C,QAAI,CAAC,eAAc;AACjB,UAAI,cAAc,SAAS;AAC3B,sBAAe,IAAI,qBAAa;AAChC,oBAAa,iBAAiB,aAAa,SAAS,SAAU,QAAO;AACnE,eAAO,QAAQ,QAAO;AAAA;AAExB,oBAAa,iBAAiB,aAAa,WAAW,SAAU,QAAO;AACrE,eAAO,UAAU,QAAO;AAAA;AAE1B,oBAAa,iBAAiB,aAAa,UAAU,SAAU,QAAO;AACpE,eAAO,SAAS,QAAO;AAAA;AAEzB,8BAAwB,IAAI,UAAU;AAAA;AAGxC,WAAO;AAAA;AAUT,uBAAqB,cAAc;AACjC,QAAI,QAAQ,aAAa,cAAc;AACvC,UAAM,YAAY;AAClB,UAAM,OAAO;AACb,UAAM,aAAa,gBAAgB;AACnC,UAAM,aAAa,YAAY;AAC/B,WAAO,MAAM,UAAU;AAAA;AAYzB,uBAAqB,cAAc,MAAM,WAAW;AAClD,QAAI,QAAQ,aAAa,cAAc;AACvC,UAAM,YAAY,2BAA2B,OAAO,YAAY,cAAc;AAC9E,UAAM,YAAY,aAAa,eAAe;AAC9C,WAAO,MAAM,UAAU;AAAA;AAWzB,qBAAmB,QAAO,UAAU;AAClC,QAAI,SAAS,OAAM;AAEnB,QAAI,CAAC,gBAAgB,SAAS;AAC5B;AAAA;AAGF,QAAI,CAAC,OAAO,aAAa,aAAa,CAAC,OAAO,aAAa,cAAc;AACvE;AAAA;AAGF,eAAW,SAAS,QAAQ;AAAA;AAW9B,mBAAiB,QAAO,UAAU;AAChC,QAAI,SAAS,OAAM;AAEnB,QAAI,CAAC,gBAAgB,SAAS;AAC5B;AAAA;AAGF,QAAI,CAAC,OAAO,aAAa,aAAa,CAAC,OAAO,aAAa,cAAc;AACvE;AAAA;AAGF,QAAI,MAAM,SAAS,OAAO,aAAa,WAAW;AAClD,QAAI,MAAM,SAAS,OAAO,aAAa,cAAc;AACrD,QAAI,iBAAiB,SAAS,YAAY,KAAK;AAE/C,QAAI,eAAe,UAAU;AAC3B,aAAM;AAAA;AAAA;AAWV,oBAAkB,QAAO,UAAU;AACjC,QAAI,SAAS,OAAM;AAEnB,QAAI,CAAC,gBAAgB,SAAS;AAC5B;AAAA;AAGF,QAAI,CAAC,OAAO,aAAa,aAAa,CAAC,OAAO,aAAa,cAAc;AACvE;AAAA;AAGF,QAAI,MAAM,SAAS,OAAO,aAAa,WAAW;AAClD,QAAI,MAAM,SAAS,OAAO,aAAa,cAAc;AACrD,QAAI,iBAAiB,SAAS,YAAY,KAAK;AAE/C,QAAI,CAAC,eAAe,UAAU;AAC5B,UAAI,mBAAmB;AAEvB,UAAI,OAAM,OAAO,SAAS;AACxB,2BAAmB,eAAe,sBAAsB,SAAS,OAAO,eAAe;AAAA,aAClF;AACL,2BAAmB,eAAe,sBAAsB,SAAS,QAAQ,eAAe;AAAA;AAG1F,eAAS,cAAc,KAAK,KAAK;AAAA;AAAA;AAYrC,2BAAyB,SAAS;AAChC,WAAO,QAAQ,YAAY,WAAW,QAAQ,aAAa,YAAY;AAAA;;;ACzbzE,gCAAO;AAKP,sBAAmB;AAGZ,MAAI,iBAAgB;AAcpB,2BAAyB,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AACnF,QAAI,WAAW;AAEf,QAAI,UAAU,WAAW;AACvB,UAAI,gBAAgB,eAAe;AACnC,UAAI,cAAc,iBAAiB,cAAc,WAAW;AAC5D,UAAI,oBAAoB,iBAAiB,cAAc;AACvD,UAAI,YAAY,eAAe,aAAa;AAC5C,UAAI,WAAW,UAAU,SAAS,UAAU,MAAM,OAAO;AAEzD,UAAI,OAAO,gBAAgB,eAAe,CAAC,sBAAO,YAAY,cAAc;AAC1E,YAAI,WAAW,YAAY,QAAQ,KAAK;AACxC,YAAI,WAAW,sBAAO,eAAe,sBAAO,aAAa,eAAe,sBAAO;AAE/E,YAAI,UAAU;AACZ,gCAAO,iBAAiB;AAAA;AAAA;AAI5B,4BAAO,YAAY;AACnB,iBAAW,2BAAO,UAAU,OAAO,qBAAqB;AAExD,UAAI,SAAS,QAAQ,YAAY,KAAK,SAAS,QAAQ,cAAc,KAAK,SAAS,QAAQ,aAAa,KAAK,SAAS,QAAQ,eAAe,GAAG;AAC9I,iBAAS,KAAK;AAAA;AAGhB,UAAI,SAAS,QAAQ,eAAe,GAAG;AACrC,iBAAS,KAAK;AAAA;AAGhB,qBAAe,YAAY,SAAS,KAAK;AAAA;AAG3C,iBAAa,UAAU,IAAI,KAAK,KAAK,MAAM,UAAU;AAAA;AAEvD,kBAAgB,gBAAgB;;;ACtDzB,MAAI,iBAAgB;AAYpB,4BAA0B,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AACpF,iBAAa,MAAM,MAAM,CAAC,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO;AAC/D,QAAI,aAAa,eAAe,cAAc,GAAG,UAAU;AAC3D,QAAI,aAAa,eAAe,cAAc;AAC9C,QAAI,QAAO;AACX,cAAU,aAAa,GAAG,WAAY;AACpC,eAAQ;AAAA;AAEV,kBAAc,IAAI;AAAA;AAEpB,mBAAiB,gBAAgB;;;ACb1B,kCAAgC;AACrC,eAAiB;AACjB,eAAiB;AACjB,eAAiB;AACjB,eAAiB;AACjB,eAAiB;AACjB,eAAiB;AACjB,eAAiB;AAAA;;;ACnBZ,MAAI,iBAAiB;AASrB,iCAA+B,OAAO,UAAU;AACrD,QAAI,kBAAkB;AAEtB,QAAI,oBAAoB,QAAQ,oBAAoB,QAAQ;AAC1D,wBAAkB;AAAA;AAGpB,QAAI,KAAK,cAAc,oBAAoB,IAAI;AAC7C,eAAS;AACT;AAAA;AAGF,QAAI,KAAK,UAAU,KAAK,QAAQ;AAC9B,UAAI,OAAO,KAAK,WAAW,YAAY;AACrC,aAAK,OAAO,iBAAiB,SAAQ,iBAAiB;AAAA,aACjD;AACL,iBAAQ,iBAAiB,UAAU,KAAK;AAAA;AAAA,WAErC;AACL,eAAS;AAAA;AAAA;AAGb,wBAAsB,iBAAiB;AASvC,oBAAiB,OAAO,UAAU;AAChC,QAAI,cAAc;AAClB,WAAO,SAAU,QAAQ;AACvB,UAAI,QAAQ;AAEZ,eAAS,IAAI,GAAG,OAAO,OAAO,QAAQ,IAAI,MAAM,KAAK;AACnD,YAAI,gBAAgB,OAAO,IAAI;AAC7B,kBAAQ;AAER;AAAA;AAAA;AAIJ,eAAS;AAAA;AAAA;;;ACrDb,gCAAO;;;ACCP,MAAI,QAAO;AACX,MAAI,iCAAgC;AACpC,MAAI,YAAW;AACf,MAAI,0BAAyB;AAC7B,MAAI,YAAY;AAChB,MAAI,aAAW;AACf,MAAI,aAAY;AAChB,MAAI,cAAa;AAGjB,iCAA8B,UAAU,SAAU,QAAQ,cAAc,iBAAiB;AACvF,WAAO;AAAA,MAGL,gBAAgB,QAAQ;AACtB,YAAI,IAAI,wBAAuB;AAC/B,YAAI,WAAW,UAAU,SAAY,SAAY,WAAU,QAAQ;AACnE,eAAO,WAAW,MAAK,UAAU,QAAQ,KAAK,IAAI,OAAO,QAAQ,QAAQ,WAAS;AAAA;AAAA,MAIpF,SAAU,QAAQ;AAChB,YAAI,KAAK,UAAS;AAClB,YAAI,IAAI,WAAS;AACjB,YAAI,MAAM,gBAAgB,cAAc,IAAI;AAE5C,YAAI,IAAI;AAAM,iBAAO,IAAI;AAEzB,YAAI,oBAAoB,GAAG;AAC3B,YAAI,CAAC,UAAU,mBAAmB;AAAI,aAAG,YAAY;AACrD,YAAI,SAAS,YAAW,IAAI;AAC5B,YAAI,CAAC,UAAU,GAAG,WAAW;AAAoB,aAAG,YAAY;AAChE,eAAO,WAAW,OAAO,KAAK,OAAO;AAAA;AAAA;AAAA;;;AD/B3C,uBAAmB;;;AEFnB;AAAA;AAAA;AAAA;AAQO,6BAA2B,YAAY;AAC5C,QAAI,aAAa,IAAI,KAAK;AAE1B,QAAI,CAAC,MAAM,IAAI,KAAK,GAAG,OAAO,YAAY,WAAW,YAAY;AAE/D,aAAO,IAAI,KAAK,WAAW,YAAY,WAAW,sBAAsB;AAAA;AAG1E,WAAO;AAAA;;;AFVF,MAAI,kBAAiB;AASrB,yBAAuB,OAAO,UAAU;AAC7C,QAAI,aAAa,mBAAkB,cAAkB,KAAK;AAC1D,QAAI,kBAAkB;AACtB,QAAI,QAAQ;AAEZ,QAAI,oBAAoB,QAAQ,oBAAoB,QAAQ;AAC1D,wBAAkB;AAAA;AAGpB,QAAI,gBAAgB,4BAAO,iBAAiB,KAAK,cAAc,WAAW,mBAAmB,MAAM;AACnG,QAAI,cAAc,4BAAO,IAAI,KAAK,kBAAkB,aAAa;AAEjE,QAAI,KAAK,cAAc,oBAAoB,IAAI;AAC7C,oBAAc;AACd,sBAAgB;AAAA;AAGlB,QAAI,CAAC,aAAa;AAChB,cAAQ;AAAA;AAGV,QAAI,CAAC,eAAe,eAAe;AACjC,cAAQ;AAAA;AAGV,QAAI,eAAe,CAAC,eAAe;AACjC,UAAI,KAAK,kBAAkB,MAAM;AAE/B,YAAI,iBAAiB,cAAc,iBAAiB,KAAK;AACzD,YAAI,MAAM,KAAK,SAAS,YAAY,KAAK;AACzC,YAAI,SAAS,KAAK,SAAS,eAAe,KAAK;AAC/C,aAAK,SAAS,cAAc,KAAK,QAAQ,gBAAgB;AACzD,gBAAQ;AAAA,aACH;AACL,gBAAQ;AAAA;AAAA;AAIZ,aAAS;AAAA;AAEX,gBAAc,iBAAiB;AASxB,yBAAuB,OAAO,YAAY;AAC/C,QAAI,eAAe,4BAAO,kBAAkB;AAC5C,QAAI,iBAAiB,4BAAO,OAAO;AACnC,QAAI,iBAAiB,MAAM,OAAO,YAAY;AAC9C,QAAI;AAEJ,QAAI,aAAa,aAAa,aAAa,OAAO,SAAS,eAAe,OAAO,QAAQ,CAAC,eAAe,aAAa,gBAAgB;AACpI,aAAO;AAAA,WACF;AACL,aAAO;AAAA;AAGT,WAAO,KAAK,OAAO;AAAA;;;AG3Ed,MAAI,kBAAiB;AASrB,4BAA0B,OAAO,UAAU;AAChD,QAAI,kBAAkB;AAEtB,QAAI,oBAAoB,QAAQ,oBAAoB,QAAQ;AAC1D,wBAAkB;AAAA;AAGpB,QAAI,KAAK,cAAc,oBAAoB,IAAI;AAC7C,eAAS;AAAA,eACA,oBAAoB,IAAI;AACjC,eAAS;AAAA,WACJ;AACL,eAAS,UAAU;AAAA;AAAA;AAGvB,mBAAiB,iBAAiB;;;ACzBlC,gCAAO;AACP,uBAAmB;AAEnB,MAAI,iBAAiB;AAAA,IAAC;AAAA,IAA4B;AAAA,IAClD;AAAA;AAEO,MAAI,kBAAiB;AASrB,yBAAuB,OAAO,UAAU;AAC7C,QAAI,aAAa,KAAK,cAAc;AACpC,QAAI,QAAQ;AACZ,QAAI,kBAAkB;AAEtB,QAAI,oBAAoB,MAAM;AAC5B,wBAAkB;AAAA;AAGpB,sBAAkB,WAAW,KAAK,mBAAmB,SAAS,iBAAiB,MAAM;AACrF,QAAI,gBAAgB,YAAY,KAAK;AAErC,QAAI,eAAe;AACjB,yBAAmB;AAAA;AAGrB,QAAI,OAAO,4BAAO,iBAAiB,gBAAgB,MAAM,YAAY,4BAAO,mBAAmB,4BAAO,iBAAiB;AACvH,QAAI,cAAc,KAAK;AAEvB,QAAI,gBAAgB,4BAAO,iBAAiB,YAAY,MAAM,aAAa,CAAC;AAE5E,QAAI,KAAK,cAAc,oBAAoB,IAAI;AAC7C,oBAAc;AACd,sBAAgB;AAAA;AAGlB,QAAI,CAAC,aAAa;AAChB,cAAQ;AAAA;AAGV,QAAI,CAAC,eAAe,eAAe;AACjC,cAAQ;AAAA;AAGV,QAAI,eAAe,CAAC,eAAe;AACjC,UAAI,KAAK,kBAAkB,MAAM;AAE/B,YAAI,iBAAiB,KAAK,OAAO;AACjC,YAAI,MAAM,KAAK,SAAS,YAAY,KAAK;AACzC,YAAI,SAAS,KAAK,SAAS,eAAe,KAAK;AAC/C,aAAK,SAAS,cAAc,KAAK,QAAQ,gBAAgB;AACzD,gBAAQ;AAAA,aACH;AACL,gBAAQ;AAAA;AAAA;AAIZ,aAAS;AAAA;AAEX,gBAAc,iBAAiB;;;ACvDxB,mCAAiC;AACtC,eAAkB;AAClB,eAAkB;AAClB,eAAkB;AAClB,eAAkB;AAAA;;;ACVb,MAAI,aAAY;AAChB,MAAI,uBAAuB;AAAA,IAChC,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,WAAW;AAAA;;;ACNN,MAAI,aAAY;AAChB,MAAI,mBAAmB;AAAA,IAC5B,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,UAAU;AAAA;;;ACHL,MAAI,aAAY;AAChB,MAAI,eAAe;AAAA,IACxB,WAAW;AAAA,IACX,QAAQ;AAAA,IAER,UAAU;AAAA,IACV,WAAW;AAAA;;;ACNN,MAAI,aAAY;AAChB,MAAI,mBAAmB;AAAA,IAC5B,WAAW;AAAA,IACX,QAAQ;AAAA,IAER,UAAU;AAAA,IACV,WAAW;AAAA;;;ACPN,MAAI,aAAY;AAChB,MAAI,uBAAuB;AAAA,IAChC,WAAW;AAAA,IACX,QAAQ;AAAA,IAER,UAAU;AAAA;;;ACJL,MAAI,aAAY;AAChB,MAAI,kBAAkB;AAAA,IAC3B,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA;;;ACPL,MAAI,aAAY;AAChB,MAAI,mBAAmB;AAAA,IAC5B,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,UAAU;AAAA;;;ACJL,MAAI,cAAY;AAChB,MAAI,eAAe;AAAA,IACxB,WAAW;AAAA,IACX,QAAQ;AAAA,IAER,UAAU;AAAA,IACV,WAAW;AAAA;;;ACKN,kCAAgC;AACrC,eAAiB;AACjB,eAAiB;AACjB,eAAiB;AACjB,eAAiB;AACjB,eAAiB;AACjB,eAAiB;AACjB,eAAiB;AACjB,eAAiB;AACjB,eAAiB;AAAA;;;ACenB,mCAAO;AAkBP,gCAAO;;;ACtCP,mCAAO;AAOP,gCAAO;AAzBP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAE/D,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AA4B/Q,MAAI,qBAAqB,oBAAI,IAAI,CAAC,CAAC,UAAU,YAAY,CAAC,aAAa,WAAc,CAAC,UAAU,UAAY,CAAC,YAAY,WAAc,CAAC,aAAa;AAC9I,MAAI,aAAa;AACxB,MAAI,eAAc,oBAAI;AACtB,MAAI,yBAAyB;AAC7B,MAAI,qBAAqB;AAKlB,MAAI,aAA0B,2BAAY;AAI/C,yBAAoB,aAAa;AAC/B,UAAI,QAAQ;AAEZ,wBAAgB,MAAM;AAOtB,mBAAa,MAAM,OAAO,aAAa;AAAA,QACrC,UAAU;AAAA;AAEZ,mBAAY,IAAI,MAAM;AAAA,QACpB,OAAO;AAAA;AAET,2BAAqB;AACrB,WAAK,aAAa;AAClB,WAAK,8BAA8B;AACnC,WAAK,iBAAiB;AACtB,WAAK,UAAU;AACf,WAAK,cAAc;AACnB,WAAK,IAAI,QAAQ,2BAA2B,WAAY;AACtD,eAAO,MAAM;AAAA;AAEf,WAAK,IAAI,QAAQ,uBAAuB,SAAU,aAAa;AAC7D,eAAO,MAAM,iBAAiB;AAAA;AAEhC,WAAK,IAAI,QAAQ,cAAc,WAAY;AACzC,eAAO,MAAM;AAAA;AAAA;AAIjB,mBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,YAAI,SAAS;AAEb,aAAK,aAAa,KAAK,IAAI,cAAc;AACzC,YAAI,aAAa,KAAK,YAAY;AAClC,YAAI,cAAc,MAAM,QAAQ,cAAc,aAAa;AAE3D,YAAI,YAAY,SAAS,GAAG;AAC1B,cAAI,sBAAsB;AAC1B,sBAAY,QAAQ,SAAU,YAAY;AACxC,gBAAI,oBAAoB,WAAW,MAAM,MACrC,qBAAqB,iBAAe,mBAAmB,IACvD,OAAO,mBAAmB,IAC1B,aAAa,mBAAmB;AAEpC,gBAAI,CAAC,mBAAmB,IAAI,OAAO;AACjC,oBAAM,IAAI,MAAM,mCAAoC,OAAO,MAAM;AAAA;AAGnE,gBAAI,CAAC,mBAAmB,IAAI,MAAM,aAAa;AAC7C,kCAAoB,KAAK,MAAM,OAAO,YAAY,MAAM,OAAO,MAAM;AAAA;AAAA;AAIzE,cAAI,oBAAoB,SAAS,GAAG;AAClC,gBAAI,WAAW,CAAC,OAAO,OAAO,KAAK,YAAY,8CAA8C,GAAG,OAAO,oBAAoB,KAAK,OAAO,OAAO,KAAK;AACnJ,mCAAuB,KAAK;AAAA;AAAA;AAIhC,YAAI,CAAC,oBAAoB;AACvB,+BAAqB;AAAA;AAMvB,YAAI,mBAAmB,QAAQ,eAAe,GAAG;AAC/C,6BAAmB,OAAO,mBAAmB,QAAQ,aAAa;AAAA;AAGpE,YAAI,mBAAmB,QAAQ,KAAK,eAAe,GAAG;AACpD,6BAAmB,OAAO,mBAAmB,QAAQ,KAAK,aAAa;AAAA;AAGzE,aAAK,IAAI,YAAY,2BAA2B,WAAY;AAC1D,cAAI,OAAO,aAAa,OAAO,aAAa;AAC1C,mBAAO;AAAA;AAAA;AAGX,YAAI,6BAA6B,mBAAmB,WAAW;AAE/D,YAAI,4BAA4B;AAC9B,cAAI,uBAAuB,SAAS,GAAG;AACrC,gBAAI,YAAY,CAAC,GAAG,OAAO,uBAAuB,KAAK,OAAO,OAAO,kDAAkD,KAAK;AAE5H,kBAAM,IAAI,MAAM;AAAA;AAGlB,eAAK,IAAI,SAAS;AAAA;AAGpB,aAAK,cAAc;AAAA;AAAA,OAMpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK,UAAU;AAAA;AAAA,OAMhB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,KAAK,cAAc;AACrB,eAAK,aAAa;AAAA;AAGpB,aAAK;AACL,aAAK,UAAU;AAAA;AAAA,OAShB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAiB,MAAM,UAAU;AACtC,qBAAY,IAAI,MAAM,MAAM,QAAQ,aAAY,IAAI,MAAM,MAAM,SAAS;AACzE,YAAI,QAAQ,aAAY,IAAI,MAAM,MAAM;AACxC,aAAK,IAAI,QAAQ,MAAM;AACvB,cAAM,KAAK;AACX,qBAAY,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,OAQrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,MAAM;AAChC,YAAI,SAAS;AAEb,kBAAU,aAAY,IAAI,MAAM,MAAM,SAAS,IAAI,SAAU,UAAU;AACrE,iBAAO,IAAI,WAAW,MAAM;AAAA;AAAA;AAAA,OAO/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAsB;AAC3B,YAAI,SAAS;AAEb,YAAI,QAAQ,aAAY,IAAI,MAAM;AAClC,mBAAW,OAAO,SAAU,WAAW,MAAM;AAC3C,iBAAO,OAAO,YAAY;AAAA;AAE5B,cAAM,SAAS;AAAA;AAAA,OAQhB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,UAAU;AAC3C,YAAI,KAAK,gBAAgB;AACvB;AAAA,eACK;AACL,eAAK,4BAA4B,KAAK;AAAA;AAAA;AAAA,OASzC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC;AAC1C,kBAAU,KAAK,6BAA6B,SAAU,UAAU;AAC9D,iBAAO;AAAA;AAET,aAAK,4BAA4B,SAAS;AAC1C,aAAK,iBAAiB;AAAA;AAAA,OASvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,aAAa;AAC5C,YAAI,KAAK,WAAW;AAClB,cAAI,KAAK,WAAW,CAAC,KAAK,aAAa;AACrC,iBAAK;AAAA;AAGP,cAAI,CAAC,KAAK,WAAW,KAAK,aAAa;AACrC,iBAAK;AAAA;AAGP,cAAI,KAAK,WAAW,KAAK,aAAa;AACpC,iBAAK,aAAa;AAAA;AAAA;AAAA;AAAA,OAUvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAAA;AAAA,OAK9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,SAAS;AAEb,YAAI,KAAK,cAAc;AACrB,eAAK,aAAa;AAAA;AAGpB,aAAK;AACL,mBAAW,MAAM,SAAU,OAAO,UAAU;AAC1C,cAAI,aAAa,OAAO;AACtB,mBAAO,YAAY;AAAA;AAAA;AAGvB,eAAO,KAAK;AACZ,eAAO,KAAK;AAAA;AAAA,QAEZ,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;;;AC3ST,mCAAO;AAMP,gCAAO;AAxBP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAgB/D,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAQ/Q,MAAI,aAA0B,2BAAY;AACxC,yBAAoB,aAAa;AAC/B,wBAAgB,MAAM;AAOtB,WAAK,MAAM;AAOX,WAAK,YAAY;AAOjB,WAAK,WAAW;AAOhB,WAAK,OAAO;AAOZ,WAAK,UAAU;AAQf,WAAK,UAAU;AAQf,WAAK,WAAW;AAAA,QACd,YAAY;AAAA;AAAA;AAWhB,mBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,gBAAgB,KAAK,SAAS;AACnC,YAAI,KAAK,QAAQ,QAAQ;AACvB,gBAAM,IAAI,MAAM;AAAA;AAGlB,YAAI,CAAC,KAAK,KAAK,QAAQ;AACrB,eAAK,YAAY,KAAK,gBAAgB,KAAK,IAAI,YAAY;AAAA;AAG7D,YAAI,YAAY;AAAA,UACd;AAAA;AAEF,aAAK,KAAK,KAAK;AACf,aAAK,UAAU;AACf,aAAK,QAAQ,KAAK,YAAY,KAAK,IAAI,MAAM;AAC7C,aAAK,MAAM,SAAS,YAAY,KAAK;AACrC,aAAK,MAAM,GAAG,YAAY,KAAK,UAAU;AACzC,aAAK,UAAU,UAAU,YAAY,KAAK,MAAM;AAChD,kBAAU,QAAQ,KAAK,MAAM;AAAA;AAAA,OAQ9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,SAAS;AAC3C,YAAI,YAAY,KAAK,IAAI,aAAa;AAEtC,YAAI,cAAc,QAAQ,cAAc,QAAQ;AAC9C,cAAI,YAAY;AAAA,YACd,KAAK;AAAA;AAEP,eAAK,KAAK,KAAK;AACf,eAAK,YAAY,KAAK,gBAAgB,KAAK,IAAI,YAAY;AAC3D,eAAK,UAAU;AACf,eAAK,QAAQ,KAAK,YAAY,KAAK,IAAI,MAAM;AAC7C,eAAK,MAAM,SAAS,YAAY,KAAK;AACrC,eAAK;AACL,eAAK,UAAU,UAAU,YAAY,KAAK,MAAM;AAChD,oBAAU,QAAQ,KAAK,MAAM;AAAA;AAAA;AAAA,OAUhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,QAAQ,SAAS;AACzC,YAAI,KAAK,KAAK,QAAQ;AACpB,gBAAM,IAAI,MAAM;AAAA;AAGlB,YAAI,CAAC,KAAK,QAAQ,QAAQ;AACxB,eAAK,YAAY,KAAK,gBAAgB,KAAK,IAAI,YAAY;AAAA;AAG7D,YAAI,eAAe;AAAA,UACjB,KAAK;AAAA;AAEP,aAAK,QAAQ,KAAK;AAClB,aAAK,UAAU;AACf,aAAK,QAAQ,KAAK,YAAY,KAAK,IAAI,MAAM;AAE7C,YAAI,KAAK,WAAW,iBAAiB,KAAK,IAAI,aAAa,YAAY,MAAM;AAG3E,eAAK,IAAI,KAAK,gBAAgB,QAAQ,KAAK,MAAM;AAAA;AAGnD,aAAK,MAAM,MAAM,YAAY,KAAK,UAAU;AAC5C,aAAK,UAAU,UAAU,YAAY,KAAK,MAAM;AAChD,qBAAa,QAAQ,KAAK,MAAM;AAAA;AAAA,OAQjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,UAAU;AACnC,YAAI,CAAC,KAAK,UAAU;AAClB,eAAK;AAAA;AAGP,kBAAU,KAAK,MAAM,SAAU,KAAK;AAElC,mBAAS,IAAI,KAAK,YAAY,IAAI,SAAS;AAAA;AAAA;AAAA,OAS9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,UAAU;AAClC,YAAI,CAAC,KAAK,UAAU;AAClB,eAAK;AAAA;AAGP,kBAAU,KAAK,SAAS,SAAU,QAAQ;AASxC,cAAI,wBAAwB,OAAO,MAAM,yBACrC,QAAQ,sBAAsB;AAElC,mBAAS,OAAO,KAAK,KAAK,KAAK;AAAA;AAAA;AAAA,OASlC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,UAAU;AACpC,aAAK,WAAW;AAAA;AAAA,OASjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,MAAM,OAAO;AACtC,YAAI,CAAC,KAAK,UAAU;AAClB,eAAK,WAAW;AAAA;AAGlB,aAAK,SAAS,QAAQ;AAAA;AAAA,OAQvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,eAAO,KAAK;AAAA;AAAA,OASb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,MAAM;AAC/B,YAAI,KAAK,UAAU;AACjB,iBAAO,KAAK,SAAS;AAAA;AAGvB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,QAAQ;AAEZ,YAAI,WAAW,KAAK,IAAI,aAAa;AAErC,YAAI,KAAK,IAAI,iBAAiB;AAC5B,mBAAS,YAAY,KAAK,iBAAiB;AAAA;AAG7C,aAAK,QAAQ,QAAQ,SAAU,QAAQ;AACrC,oBAAU,OAAO,SAAS,SAAU,QAAQ;AAC1C,qBAAS,YAAY,MAAM,iBAAiB,OAAO;AAAA;AAAA;AAGvD,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,KAAK;AAC7B,YAAI,SAAS;AAEb,YAAI,eAAe,KAAK,IAAI;AAC5B,YAAI,WAAW,aAAa;AAC5B,YAAI,KAAK,aAAa,cAAc;AAEpC,YAAI,KAAK,IAAI,iBAAiB;AAC5B,eAAK,IAAI,KAAK,gBAAgB,KAAK;AACnC,mBAAS,YAAY;AAAA;AAGvB,aAAK,QAAQ,QAAQ,SAAU,QAAQ;AACrC,oBAAU,OAAO,SAAS,SAAU,QAAQ;AAC1C,gBAAI,SAAS,OAAO;AAEpB,gBAAI,iBAAiB,OAAO,IAAI,YAAY,KAAK;AAEjD,2BAAe,MAAM;AACrB,2BAAe,MAAM;AAErB,gBAAI,WAAW,OAAO,IAAI,gBAAgB;AAE1C,gBAAI,KAAK,aAAa,cAAc;AAGpC,eAAG,aAAa,eAAe;AAC/B,qBAAS,OAAO,KAAK,IAAI,KAAK,QAAQ,OAAO,IAAI,UAAU,SAAS,OAAO,OAAO;AAClF,qBAAS,YAAY;AAAA;AAAA;AAGzB,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,YAAI,SAAS;AAEb,YAAI,eAAe,KAAK,IAAI;AAC5B,YAAI,cAAc,aAAa;AAC/B,YAAI,gBAAgB;AAEpB,YAAI,KAAK,IAAI,iBAAiB;AAC5B,cAAI,KAAK,aAAa,cAAc;AACpC,wBAAc,KAAK,CAAC,IAAI;AACxB,sBAAY,YAAY;AAAA;AAG1B,aAAK,QAAQ,QAAQ,SAAU,QAAQ;AACrC,oBAAU,OAAO,SAAS,SAAU,QAAQ;AAC1C,gBAAI,SAAS,OAAO;AACpB,gBAAI,MAAK,aAAa,cAAc;AACpC,0BAAc,KAAK,CAAC,QAAQ;AAC5B,wBAAY,YAAY;AAAA;AAAA;AAI5B,aAAK,MAAM,MAAM,YAAY;AAC7B,kBAAU,eAAe,SAAU,cAAc;AAC/C,cAAI,gBAAgB,iBAAe,cAAc,IAC7C,SAAS,cAAc,IACvB,MAAK,cAAc;AAGvB,iBAAO,IAAI,KAAK,gBAAgB,QAAQ;AAAA;AAAA;AAAA,OAU3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,QAAQ;AAChC,YAAI,SAAS;AAEb,YAAI,eAAe,KAAK,IAAI;AAC5B,YAAI,WAAW,aAAa;AAC5B,aAAK,QAAQ,QAAQ,SAAU,QAAQ;AACrC,oBAAU,OAAO,SAAS,SAAU,QAAQ;AAC1C,gBAAI,MAAM,OAAO;AAEjB,gBAAI,iBAAiB,OAAO,IAAI,YAAY,KAAK;AAEjD,2BAAe,MAAM;AACrB,2BAAe,MAAM;AAErB,gBAAI,WAAW,OAAO,IAAI,gBAAgB;AAE1C,gBAAI,KAAK,aAAa,cAAc;AACpC,gBAAI,KAAK,aAAa,cAAc;AAGpC,eAAG,aAAa,eAAe;AAC/B,qBAAS,OAAO,KAAK,IAAI,KAAK,QAAQ,OAAO,IAAI,UAAU,SAAS,OAAO,OAAO;AAClF,eAAG,YAAY;AACf,qBAAS,YAAY;AAAA;AAAA;AAGzB,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,KAAK,SAAS;AACnB,aAAK,KAAK,MAAM;AAChB,aAAK,QAAQ,SAAS;AAEtB,YAAI,KAAK,SAAS;AAChB,eAAK,QAAQ;AAAA;AAGf,aAAK,UAAU;AACf,aAAK;AAAA;AAAA,OAQN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEjF,YAAI,CAAC,KAAK,UAAU;AAClB,UAAC,WAAU,KAAK,IAAI,aAAa,YAAY,KAAK,UAAU;AAC5D,eAAK,WAAW;AAAA;AAAA;AAAA,OAOnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,KAAK,YAAY,KAAK,UAAU,UAAU,YAAY;AACxD,eAAK,UAAU,UAAU,WAAW,YAAY,KAAK,UAAU;AAC/D,eAAK,YAAY;AACjB,eAAK,WAAW;AAAA;AAAA;AAAA,OAUnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,QAAQ;AACvC,YAAI,MAAM,KAAK,IAAI,aAAa,cAAc;AAC9C,YAAI,MAAM,QAAQ,GAAG,OAAO,KAAK,IAAI,KAAK,GAAG,QAAQ,wBAAwB,SAAS;AACtF,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,YAAI,eAAe,KAAK,IAAI;AAC5B,YAAI,WAAW,aAAa;AAC5B,YAAI,QAAQ,aAAa,cAAc;AACvC,YAAI,QAAQ,aAAa,cAAc;AACvC,YAAI,QAAQ,aAAa,cAAc;AACvC,YAAI,WAAW,aAAa,cAAc;AAC1C,YAAI,KAAK,aAAa,cAAc;AACpC,YAAI,KAAK,aAAa,cAAc;AAEpC,YAAI,KAAK,cAAc;AACrB,gBAAM,YAAY;AAAA;AAGpB,YAAI,KAAK,gBAAgB;AACvB,aAAG,YAAY;AACf,gBAAM,YAAY;AAClB,gBAAM,MAAM,cAAc;AAC1B,gBAAM,MAAM,QAAQ;AAAA;AAGtB,cAAM,YAAY;AAElB,YAAI,KAAK,cAAc;AACrB,gBAAM,YAAY;AAAA;AAGpB,cAAM,YAAY;AAClB,iBAAS,OAAO;AAChB,iBAAS,YAAY;AACrB,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA;AAAA,OAUH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,YAAI,eAAe,KAAK,IAAI;AAC5B,YAAI,WAAW,aAAa;AAC5B,YAAI,YAAY,aAAa,cAAc;AAC3C,YAAI,qBAAqB,2BAA2B,OAAO,UAAU;AACrE,iBAAS,WAAW;AACpB,iBAAS,YAAY;AACrB,eAAO;AAAA,UACL;AAAA,UACA;AAAA;AAAA;AAAA,OASH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,eAAO,CAAC,CAAE,MAAK,KAAK,UAAU,CAAC,KAAK,QAAQ;AAAA;AAAA,OAQ7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,eAAO,CAAC,CAAE,MAAK,QAAQ,UAAU,CAAC,KAAK,KAAK;AAAA;AAAA;AAIhD,WAAO;AAAA;AAGT,MAAO,qBAAQ;;;ACxkBf,mCAAO;AAFP,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAU3M,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAS/Q,MAAI,mBAAgC,2BAAY;AAC9C,+BAA0B,aAAa;AACrC,wBAAgB,MAAM;AAQtB,WAAK,UAAU;AAOf,WAAK,cAAc;AAQnB,WAAK,oBAAoB;AAQzB,WAAK,kBAAkB;AAAA;AASzB,mBAAa,mBAAkB,CAAC;AAAA,MAC9B,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,YAAI,KAAK,mBAAmB;AAC1B,iBAAO,KAAK;AAAA;AAGd,eAAO,kBAAiB;AAAA;AAAA,OAQzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,aAAa;AAC1C,aAAK,oBAAoB;AAAA;AAAA,OAQ1B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,iBAAiB;AAClD,aAAK,kBAAkB;AAAA;AAAA,OAUxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,UAAU,UAAU;AACrD,eAAO,KAAK,gBAAgB,OAAO,UAAU;AAAA;AAAA,OAU9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,UAAU,UAAU;AACxD,eAAO,KAAK,gBAAgB,OAAO,UAAU;AAAA;AAAA,OAW9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,MAAM,OAAO,gBAAgB;AAC3D,YAAI,QAAQ;AAEZ,YAAI,UAAU,oBAAI;AAElB,YAAI,OAAO,OAAO,mBAAmB,WAAW;AAAA,UAC9C,MAAM;AAAA,UACN,IAAI;AAAA,YACF,gBACA,QAAO,KAAK,MACZ,KAAK,KAAK;AAEd,kBAAU,OAAM,IAAI,SAAU,QAAO;AACnC,cAAI,SAAS,MAAM,eAAe,MAAM,OAAO;AAE/C,kBAAQ,IAAI,QAAO;AAAA;AAErB,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,MAAM,OAAO,gBAAgB;AAC1D,YAAI,SAAS;AAEb,YAAI,SAAS,SAAS,SAAS,OAAO;AACpC,gBAAM,IAAI,MAAM;AAAA;AAGlB,YAAI,UAAU,oBAAI;AAClB,YAAI,cAAc,SAAS,QAAQ,QAAQ;AAC3C,YAAI,gBAAgB;AACpB,kBAAU,MAAM,MAAM,MAAM,IAAI,SAAU,QAAO;AAC/C,cAAI,QAAQ,SAAS,QAAQ,OAAO,YAAY,gBAAgB,UAAS,OAAO,YAAY,QAAO,iBAC/F,QAAQ,MAAM,OACd,aAAa,MAAM;AAEvB,cAAI,sBAAsB,OAAO,eAAe,YAAY,WAAW,SAAS;AAChF,cAAI;AAEJ,cAAI,qBAAqB;AACvB,mBAAO;AAAA,qBACE,UAAS,QAAQ;AAC1B,mBAAO,GAAG,OAAO,OAAO,KAAK,OAAO;AAAA,qBAC3B,MAAM,QAAQ,QAAQ;AAC/B,mBAAO,GAAG,OAAO,MAAM;AAAA,iBAClB;AACL,mBAAO,GAAG,OAAO,UAAU,OAAO;AAAA;AAGpC,cAAI,CAAC,QAAQ,IAAI,OAAO;AACtB,oBAAQ,IAAI,MAAM;AAAA,cAChB,QAAQ,OAAO;AAAA,cACf,SAAS;AAAA;AAAA;AAIb,cAAI,SAAS,QAAQ,IAAI;AAEzB,cAAI,OAAO,QAAQ;AACjB,gBAAI,YAAY,cAAc,QAAQ,SAAS;AAE/C,gBAAI,CAAC,aAAa,OAAO,mBAAmB,qBAAqB;AAC/D,qBAAO,QAAQ,KAAK,kBAAgB;AAAA,gBAClC;AAAA,iBACC,aAAa;AAChB,4BAAc,KAAK;AACnB,qBAAO,UAAU;AAAA;AAAA;AAAA;AAIvB,eAAO;AAAA;AAAA,QAEP,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAMA,gBAAe;AACb,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;AAGT,MAAO,2BAAQ;;;AHtOf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAE/D,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAiCxM,sBAAM,eAAe,SAAS;AACvB,MAAI,cAAa;AACjB,MAAI,kBAAkB;AAC7B,MAAI,eAAc,oBAAI;AACtB,MAAI,uBAAuB;AAwEpB,MAAI,iBAA8B,yBAAU,aAAa;AAC9D,gBAAU,iBAAgB;AAE1B,QAAI,SAAS,eAAa;AAE1B,6BAAwB,aAAa;AACnC,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAC1B,mBAAY,IAAI,yBAAuB,QAAQ;AAAA,QAQ7C,qBAAqB;AAAA;AASvB,YAAM,aAAa,IAAI,mBAAW,MAAM;AASxC,YAAM,mBAAmB,IAAI,yBAAiB,SAAU,KAAK,QAAQ;AACnE,YAAI,WAAW,MAAM,IAAI,YAAY,KAAK;AAE1C,YAAI,YAAY;AAEhB,YAAI,CAAC,SAAS,SAAS;AACrB,sBAAY,MAAM,IAAI,cAAc,KAAK;AAAA;AAG3C,YAAI,aAAa;AAEjB,YAAI,MAAM,IAAI,QAAQ,6BAA6B;AACjD,uBAAa,MAAM,IAAI,SAAS,4BAA4B,YAAY,UAAU;AAAA;AAGpF,eAAO;AAAA,UACL,OAAO;AAAA,UACP;AAAA;AAAA;AAUJ,YAAM,mBAAmB;AAOzB,YAAM,aAAa;AAOnB,YAAM,kBAAkB;AAQxB,YAAM,kBAAkB,IAAI;AAE5B,YAAM,IAAI,kBAAkB,YAAY,sBAAsB,MAAM;AAIpE,YAAM,QAAQ,sBAAsB,SAAU,MAAM,QAAQ,YAAY;AACtE,eAAO,MAAM,qBAAqB,MAAM,QAAQ;AAAA;AAGlD,aAAO;AAAA;AAUT,mBAAa,iBAAgB,CAAC;AAAA,MAC5B,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,IAAI,cAAc,iBAAgB,SAAS,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMhF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,YAAI,UAAU,KAAK,IAAI,cAAc;AAErC,YAAI,WAAW,QAAQ,eAAe,QAAQ,QAAQ,eAAe,QAAQ;AAC3E,eAAK,WAAW,WAAW,cAAc,QAAQ;AAAA;AAGnD,aAAK;AACL,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO,gBAAgB,MAAM,QAAQ;AAAA;AAE9C,aAAK,QAAQ,gBAAgB,SAAU,SAAS;AAC9C,iBAAO,OAAO,eAAe;AAAA;AAE/B,aAAK,QAAQ,6BAA6B,SAAU,SAAS;AAC3D,iBAAO,OAAO,4BAA4B;AAAA;AAE5C,aAAK,QAAQ,oBAAoB,SAAU,OAAO;AAChD,iBAAO,OAAO,mBAAmB;AAAA;AAEnC,aAAK,QAAQ,kBAAkB,SAAU,OAAO,KAAK;AACnD,iBAAO,OAAO,eAAe,KAAK;AAAA;AAEpC,aAAK,QAAQ,aAAa,WAAY;AACpC,iBAAO,OAAO;AAAA;AAGhB,eAAK,kBAAgB,gBAAe,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM5E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,iBAAiB,KAAK;AAE1B,YAAI,eAAe,QAAQ;AACzB,eAAK,WAAW;AAChB,eAAK;AAAA;AAGP,eAAK,kBAAgB,gBAAe,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM5E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,eAAK,kBAAgB,gBAAe,YAAY,iBAAiB,MAAM,KAAK;AAI5E,aAAK,QAAQ,sBAAsB,SAAU,MAAM,QAAQ,YAAY;AACrE,iBAAO,OAAO,qBAAqB,MAAM,QAAQ;AAAA;AAAA;AAAA,OAOpD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wCAAwC;AAC7C,YAAI,YAAY,KAAK,IAAI;AAEzB,YAAI,CAAC,WAAW;AACd;AAAA;AAGF,YAAI,QAAQ,KAAK,IAAI;AACrB,YAAI,qBAAqB,KAAK;AAC9B,YAAI,oBAAoB,KAAK;AAE7B,YAAI,uBAAuB,MAAM,sBAAsB,IAAI;AACzD;AAAA;AAGF,aAAK,sBAAsB;AAAA,UACzB,MAAM;AAAA,UACN,IAAI;AAAA,WACH,QAAQ;AAAA;AAAA,OAUZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,SAAS;AAEb,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAAA,UACjF,MAAM;AAAA,UACN,IAAI,KAAK,IAAI,cAAc;AAAA;AAE7B,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAAA,UACjF,MAAM;AAAA,UACN,IAAI,KAAK,IAAI,cAAc;AAAA;AAE7B,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEhF,YAAI,eAAe,OAAO,aAAa,WAAW;AAAA,UAChD,MAAM;AAAA,UACN,IAAI;AAAA,YACF;AACJ,YAAI,YAAY,OAAO,aAAa,WAAW;AAAA,UAC7C,MAAM;AAAA,UACN,IAAI;AAAA,YACF;AACJ,kBAAU,aAAa,MAAM,aAAa,IAAI,SAAU,cAAc;AACpE,cAAI,iBAAiB,OAAO,IAAI,iBAAiB;AAEjD,cAAI,mBAAmB,MAAM;AAC3B,6BAAiB;AAAA;AAGnB,cAAI,SAAS,OAAO,gBAAgB,gBAAgB,oBAAoB,QAAQ,CAAC,OAAO,IAAI,yBAAyB,iBAAiB;AACpI,gBAAI,UAAU,OAAO,iBAAiB,sBAAsB,cAAc;AAE1E,sBAAU,SAAS,SAAU,MAAM;AACjC,kBAAI,QAAQ,iBAAe,MAAM,IAC7B,SAAS,MAAM,IACf,SAAS,MAAM;AAEnB,qBAAO,OAAO,WAAW,UAAU,QAAQ;AAAA;AAAA;AAAA;AAKjD,YAAI,KAAK,WAAW,QAAQ,QAAQ;AAClC,eAAK,IAAI,eAAe,WAAY;AAClC,mBAAO,WAAW,UAAU,SAAU,cAAc,OAAO;AACzD,kBAAI,iBAAiB,OAAO,IAAI,iBAAiB;AAEjD,qBAAO,gBAAgB,gBAAgB,gBAAgB;AAAA;AAAA,aAExD;AACH,eAAK,kBAAkB,aAAa,KAAK;AACzC,eAAK,WAAW;AAAA;AAAA;AAAA,OAUnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,YAAI,SAAS;AAEb,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAAA,UACjF,MAAM;AAAA,UACN,IAAI,KAAK,IAAI,cAAc;AAAA;AAE7B,YAAI,UAAU;AACd,YAAI,SAAS,KAAK,IAAI,cAAc;AACpC,YAAI,QAAQ;AACZ,aAAK,aAAa;AAElB,YAAI,OAAO,iBAAgB;AAEzB,cAAI,CAAC,OAAO,KAAK;AACf,kCAAqB;AACrB,mBAAO,aAAa;AACpB;AAAA;AAGF,iBAAO,sBAAsB;AAAA,YAC3B,MAAM;AAAA,YACN,IAAI,KAAK,IAAI,UAAU,gBAAe,kBAAkB;AAAA,aACvD;AAEH,oBAAU,UAAU,gBAAe,mBAAmB;AAEtD,cAAI,UAAU,QAAQ;AACpB,oBAAQ,uBAAsB;AAAA,iBACzB;AACL,kCAAqB;AACrB,mBAAO,aAAa;AAEpB,mBAAO,IAAI,KAAK;AAAA;AAAA;AAIpB,YAAI,YAAY,KAAK;AAErB,YAAI,KAAK,oBAAoB,aAAa,GAAG;AAC3C,eAAK,sBAAsB;AAAA,YACzB,MAAM;AAAA,YACN,IAAI;AAAA,aACH;AACH,eAAK,mBAAmB;AACxB,oBAAU,YAAY;AAAA;AAIxB,YAAI,UAAU,QAAQ;AACpB;AAAA,eACK;AACL,eAAK,aAAa;AAAA;AAAA;AAAA,OASrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,UAAU,KAAK,IAAI,cAAc;AACrC,YAAI,gBAAgB,WAAW,eAAe,SAAS,mBAAmB,QAAQ,gBAAgB;AAClG,YAAI,wBAAwB,WAAW,eAAe,SAAS,2BAA2B,QAAQ,wBAAwB;AAE1H,YAAI,iBAAiB,CAAC,MAAM,gBAAgB;AAC1C,eAAK,iBAAiB,eAAe,SAAS,eAAe;AAAA;AAG/D,YAAI,uBAAuB;AACzB,eAAK,iBAAiB,mBAAmB;AAAA;AAAA;AAAA,OAO5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC;AAC3C,YAAI,KAAK,IAAI,QAAQ,KAAK,IAAI,KAAK,GAAG,QAAQ,aAAa;AACzD,eAAK;AACL,eAAK;AAAA;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,YAAI,WAAW,KAAK,IAAI,cAAc;AAGtC,YAAI,QAAQ,gBAAe;AAC3B,YAAI,YAAY,KAAK,IAAI,cAAc;AAEvC,YAAI,UAAS,WAAW;AACtB,kBAAQ,SAAS;AAEjB,cAAI,eAAe,QAAQ;AACzB,oBAAQ,sBAAsB,WAAW;AAAA,iBACpC;AAEL,sBAAU;AAAA;AAAA;AAId,eAAO,KAAK,IAAI,OAAO;AAAA;AAAA,OAWxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAQ;AACrC,YAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACvF,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACtF,YAAI,QAAQ;AAEZ,YAAI,UAAU,QAAQ;AACpB,kBAAQ,KAAK,gBAAgB,gBAAgB,KAAK,IAAI,iBAAiB;AAEvE,cAAI,eAAe,OAAO,UAAU,UAAU;AAC5C,oBAAQ,KAAK,IAAI,OAAO,wBAA0B;AAAA;AAAA;AAItD,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAiC;AACtC,YAAI,MAAM,KAAK,IAAI,KAAK;AAExB,YAAI,IAAI,WAAW,0BAA0B;AAE3C,cAAI,0BAA0B,IAAI,QAAQ;AAE1C,cAAI,4BAA4B,IAAI;AAClC,mBAAO,KAAK,IAAI,kBAAkB,6BAA6B;AAAA;AAAA;AAInE,YAAI,IAAI,WAAW,yBAAyB;AAC1C,cAAI,sBAAsB,IAAI,QAAQ;AAEtC,cAAI,wBAAwB,IAAI;AAC9B,mBAAO,KAAK,IAAI,kBAAkB,6BAA6B;AAAA;AAAA;AAInE,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAgC;AACrC,YAAI,MAAM,KAAK,IAAI,KAAK;AAExB,YAAI,IAAI,WAAW,0BAA0B;AAE3C,cAAI,yBAAyB,IAAI,QAAQ;AAEzC,cAAI,2BAA2B,IAAI;AACjC,mBAAO,KAAK,IAAI,kBAAkB,6BAA6B;AAAA;AAAA;AAInE,YAAI,IAAI,WAAW,yBAAyB;AAE1C,cAAI,qBAAqB,IAAI,QAAQ;AAErC,cAAI,uBAAuB,IAAI;AAC7B,mBAAO,KAAK,IAAI,kBAAkB,6BAA6B;AAAA;AAAA;AAInE,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4CAA4C;AACjD,YAAI,gBAAgB,KAAK,IAAI;AAE7B,YAAI,mBAAmB,aAAY,IAAI,OACnC,sBAAsB,iBAAiB;AAE3C,YAAI,iBAAiB,YAAY,eAAe,SAAU,KAAK,aAAa,gBAAgB;AAC1F,cAAI,sBAAsB,oBAAoB;AAE9C,cAAI,sBAAsB,IAAI,kBAAkB,oBAAoB,oBAAoB,aAAa;AACnG,gBAAI,KAAK;AAAA;AAGX,cAAI,sBAAsB,IAAI,gBAAgB;AAC5C,gCAAoB,KAAK;AAAA,iBACpB;AACL,gCAAoB,kBAAkB;AAAA;AAGxC,iBAAO;AAAA,WACN;AACH,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAsB;AAC3B,YAAI,SAAS;AAEb,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAElF,YAAI,QAAQ,QAAQ;AAClB,eAAK,IAAI,eAAe,WAAY;AAClC,sBAAU,SAAS,SAAU,eAAe;AAC1C,qBAAO,gBAAgB,gBAAgB,eAAe;AAAA;AAAA,aAEvD;AAAA,eACE;AACL,eAAK,gBAAgB;AAAA;AAAA;AAAA,OASxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,eAAO,CAAC,CAAC,YAAY,KAAK,gBAAgB,YAAY,MAAM,GAAG,KAAK,kBAAkB,SAAU,MAAM;AACpG,iBAAO,SAAS;AAAA,WACf;AAAA;AAAA,OAQJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,aAAK;AAEL,YAAI,KAAK,uBAAuB,CAAC,KAAK,YAAY;AAChD,eAAK;AAAA;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,SAAS;AAEb,YAAI,KAAK,IAAI,MAAM;AACjB,eAAK;AAAA,eACA;AAEL,qBAAW,WAAY;AACrB,gBAAI,OAAO,KAAK;AACd,qBAAO;AAAA;AAAA,aAER;AAAA;AAAA;AAAA,OAUN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,SAAS;AACtC,YAAI,SAAS;AAEb,YAAI,iBAAiB,SAAS,SAAS,SAAU,OAAO;AACtD,cAAI,QAAQ,iBAAe,OAAO,IAC9B,iBAAiB,MAAM;AAE3B,iBAAO,OAAO,IAAI,iBAAiB,OAAO,IAAI,UAAU;AAAA;AAE1D,aAAK,WAAW,MAAM,KAAK,IAAI,IAAI;AAAA;AAAA,OAYpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,MAAM,QAAQ,YAAY;AAC7D,YAAI,UAAU;AAEd,YAAI,YAAY;AACd,eAAK,sBAAsB,QAAQ,QAAQ;AAC3C,oBAAU,KAAK,eAAe,QAAQ,QAAQ;AAAA;AAGhD,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,qBAAY,IAAI,MAAM,sBAAsB,KAAK,IAAI;AAAA;AAAA,OAStD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,SAAS;AACnD,YAAI,kBAAkB,YAAY,SAAS,SAAU,QAAQ;AAC3D,cAAI;AAEJ,iBAAO,UAAW,mBAAkB,OAAO,aAAa,QAAQ,oBAAoB,SAAS,SAAS,gBAAgB;AAAA;AAExH,YAAI,iBAAiB,SAAS,iBAAiB,SAAU,QAAQ;AAC/D,iBAAO,OAAO,QAAQ;AAAA;AAExB,aAAK,WAAW,MAAM,KAAK,IAAI,IAAI;AAAA;AAAA,OAMpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,WAAW;AAEhB,eAAK,kBAAgB,gBAAe,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAEtE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AI1yBF,mCAAO;AAMP,gCAAO;;;ACpCA,MAAI,aAAa;AAAA,IACtB,YAAY;AAAA,IACZ,UAAU;AAAA;AAYL,qBAAmB,QAAO,MAAK,MAAM,WAAW;AACrD,QAAI,aAAa,KAAK;AACtB,QAAI,gBAAgB,OAAO,KAAK,GAAG,SAAS;AAC5C,QAAI,SAAS;AACb,QAAI,UAAU,KAAI,MAAM,OAAM;AAC9B,QAAI,UAAU,KAAI,MAAM,OAAM;AAE9B,QAAI,CAAC,QAAQ,MAAM,QAAQ,eAAe,IAAI;AAC5C,UAAI,MAAM;AAEV,eAAS,MAAM,GAAG,MAAM,SAAS,OAAO;AACtC,YAAI,aAAa,SAAS,KAAK,GAAG,MAAM;AACxC,YAAI,WAAW,SAAS,KAAK,aAAa,GAAG,MAAM;AACnD,YAAI,QAAS,eAAc,SAAS,WAAW,aAAa,aAAa,YAAa,cAAa,MAAM;AACzG,YAAI,KAAK;AAAA;AAGX,aAAO,KAAK;AAAA;AAGd,QAAI,CAAC,SAAS,QAAQ,QAAQ,eAAe,IAAI;AAC/C,eAAS,MAAM,GAAG,MAAM,SAAS,OAAO;AACtC,YAAI,cAAc,SAAS,KAAK,KAAK,IAAI;AAEzC,YAAI,YAAY,SAAS,KAAK,KAAK,gBAAgB,IAAI;AAEvD,YAAI,SAAU,eAAc,UAAU,YAAY,cAAc,cAAc,aAAc,iBAAgB,MAAM;AAElH,eAAO,KAAK,CAAC;AAAA;AAAA;AAIjB,WAAO;AAAA;AAUF,oCAAkC,gBAAgB,cAAc;AACrE,QAAI;AACJ,QAAI;AACJ,QAAI;AAEJ,QAAI,aAAa,OAAO,eAAe,MAAM,aAAa,KAAK,eAAe,IAAI;AAChF,wBAAkB;AAClB,0BAAoB,IAAI,eAAW,aAAa,IAAI,aAAa;AACjE,wBAAkB,IAAI,eAAW,aAAa,IAAI,eAAe,KAAK;AAAA,eAC7D,aAAa,OAAO,eAAe,MAAM,aAAa,OAAO,eAAe,MAAM,aAAa,KAAK,eAAe,IAAI;AAChI,wBAAkB;AAClB,0BAAoB,IAAI,eAAW,aAAa,IAAI,eAAe,KAAK;AACxE,wBAAkB,IAAI,eAAW,aAAa,IAAI,aAAa;AAAA,eACtD,aAAa,KAAK,eAAe,MAAM,aAAa,OAAO,eAAe,IAAI;AACvF,wBAAkB;AAClB,0BAAoB,IAAI,eAAW,aAAa,IAAI,aAAa;AACjE,wBAAkB,IAAI,eAAW,eAAe,KAAK,GAAG,aAAa;AAAA,eAC5D,aAAa,KAAK,eAAe,MAAM,aAAa,OAAO,eAAe,IAAI;AACvF,wBAAkB;AAClB,0BAAoB,IAAI,eAAW,eAAe,KAAK,GAAG,aAAa;AACvE,wBAAkB,IAAI,eAAW,aAAa,IAAI,aAAa;AAAA;AAGjE,QAAI,mBAAmB;AACrB,wBAAkB;AAAA;AAGpB,QAAI,iBAAiB;AACnB,sBAAgB;AAAA;AAGlB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAYG,sCAAoC,YAAY;AACrD,QAAI,iBAAiB;AAErB,QAAI,eAAe,MAAM;AACvB,qBAAe,aAAa,OAAO,KAAK;AACxC,qBAAe,gBAAgB;AAAA,eACtB,UAAS,aAAa;AAC/B,UAAI,UAAU,WAAW,gBAAgB;AAEvC,YAAI,WAAW,cAAc,WAAW,YAAY;AAClD,yBAAe,gBAAgB;AAAA,eAC1B;AACL,yBAAe,gBAAgB,WAAW;AAAA;AAAA,aAEvC;AACL,uBAAe,gBAAgB;AAAA;AAGjC,UAAI,UAAU,WAAW,YAAY;AACnC,uBAAe,aAAa,CAAC,WAAW;AAAA,aACnC;AACL,uBAAe,aAAa,OAAO,KAAK;AAAA;AAAA,eAEjC,OAAO,eAAe,UAAU;AACzC,qBAAe,aAAa,CAAC;AAC7B,qBAAe,gBAAgB;AAAA,WAC1B;AACL,qBAAe,aAAa;AAC5B,qBAAe,gBAAgB;AAAA;AAGjC,WAAO;AAAA;;;AD1IT,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAuB/D,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AASxM,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AACvB,MAAI,cAAa;AACjB,MAAI,mBAAkB;AAC7B,MAAI,+BAA+B;AACnC,MAAI,0BAA0B;AAcvB,MAAI,WAAwB,yBAAU,aAAa;AACxD,gBAAU,WAAU;AAEpB,QAAI,SAAS,eAAa;AAE1B,uBAAkB,aAAa;AAC7B,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,eAAe,IAAI,qBAAa,yBAAuB;AAQ7D,YAAM,gBAAgB;AAQtB,YAAM,wBAAwB;AAQ9B,YAAM,mBAAmB;AAQzB,YAAM,qBAAqB;AAQ3B,YAAM,aAAa;AAOnB,YAAM,gBAAgB;AACtB,aAAO;AAAA;AAST,mBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,IAAI,cAAc;AAAA;AAAA,OAM/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK;AACL,aAAK;AACL,aAAK,QAAQ,8BAA8B,SAAU,QAAO;AAC1D,iBAAO,OAAO,2BAA2B;AAAA;AAE3C,aAAK,QAAQ,6BAA6B,SAAU,QAAO;AACzD,iBAAO,OAAO,qBAAqB;AAAA;AAErC,aAAK,QAAQ,yBAAyB,SAAU,GAAG,QAAQ;AACzD,iBAAO,OAAO,sBAAsB;AAAA;AAGtC,eAAK,kBAAgB,UAAS,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMtE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,UAAS,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMtE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK;AAEL,eAAK,kBAAgB,UAAS,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OASvE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,SAAS;AAEb,YAAI,YAAY,KAAK,IAAI;AAEzB,YAAI,wBAAwB,UAAU,oBAClC,WAAW,sBAAsB,KACjC,WAAW,sBAAsB;AAErC,YAAI,wBAAwB,UAAU,wBAClC,SAAS,sBAAsB,KAC/B,SAAS,sBAAsB;AAEnC,YAAI,iBAAiB,KAAK,IAAI,SAAS,uBAAuB,CAAC;AAAA,UAC7D;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAEF,YAAI,eAAe;AACnB,YAAI,kBAAkB;AACtB,YAAI,OAAO;AACX,kBAAU,gBAAgB,SAAU,OAAO;AACzC,mBAAS,YAAY,MAAM,UAAU,aAAa,MAAM,QAAQ,aAAa,GAAG;AAC9E,gBAAI,aAAa,QAAQ,eAAe,IAAI;AAC1C,2BAAa,KAAK;AAAA;AAAA;AAItB,mBAAS,eAAe,MAAM,UAAU,gBAAgB,MAAM,QAAQ,gBAAgB,GAAG;AACvF,gBAAI,gBAAgB,QAAQ,kBAAkB,IAAI;AAChD,8BAAgB,KAAK;AAAA;AAAA;AAAA;AAI3B,kBAAU,cAAc,SAAU,KAAK;AACrC,cAAI,SAAS;AACb,oBAAU,iBAAiB,SAAU,QAAQ;AAC3C,mBAAO,KAAK,OAAO,IAAI,gBAAgB,KAAK;AAAA;AAE9C,eAAK,KAAK;AAAA;AAEZ,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,KAAK,IAAI,UAAU,UAAU,UAAU,WAAW;AACpD,iBAAO;AAAA;AAMT,YAAI,wBAAwB,KAAK,IAAI,UAAU,UAAU,UAAU,oBAC/D,yBAAyB,iBAAe,uBAAuB,IAC/D,eAAe,uBAAuB,IACtC,kBAAkB,uBAAuB,IACzC,aAAa,uBAAuB,IACpC,gBAAgB,uBAAuB;AAE3C,YAAI,qBAAqB,KAAK,IAAI;AAClC,YAAI,gBAAgB,mBAAmB;AACvC,YAAI,oBAAoB,mBAAmB;AAC3C,aAAK;AACL,YAAI,yBAAyB,CAAC,cAAc,KAAK,cAAc,KAAK,kBAAkB,KAAK,kBAAkB;AAC7G,YAAI,iCAAiC,KAAK,IAAI,SAAS,uBAAuB,CAAC,KAAK,IAAI,cAAc,KAAK,eAAe,KAAK,IAAI,cAAc,KAAK,kBAAkB,KAAK,IAAI,kBAAkB,KAAK,aAAa,KAAK,IAAI,kBAAkB,KAAK,iBAAiB;AAEtQ,YAAI,wBAAwB,yBAAyB,wBAAwB,iCACzE,kBAAkB,sBAAsB,iBACxC,oBAAoB,sBAAsB,mBAC1C,kBAAkB,sBAAsB;AAE5C,YAAI,qBAAqB,kBAAkB,MAAM,MAAM,kBAAkB,MAAM,IAAI;AACjF,cAAI,gBAAgB,KAAK;AACzB,cAAI,cAAc,mBAAmB;AACrC,cAAI,cAAc,IAAI,cAAU,mBAAmB,mBAAmB;AACtE,cAAI,2BAA2B,KAAK,IAAI,SAAS,kBAAkB,eAAe,aAAa,aAAa;AAE5G,cAAI,6BAA6B,OAAO;AACtC,iBAAK,IAAI,UAAU,UAAU,UAAU;AACvC,iBAAK,IAAI;AACT,mBAAO;AAAA;AAGT,cAAI,SAAS,UAAU,mBAAmB,iBAAiB,eAAe;AAC1E,cAAI,WAAW;AACf,cAAI,MAAM;AAEV,cAAI,CAAC,MAAM,QAAQ,QAAQ,mBAAmB,MAAM,CAAE,KAAI,WAAW,KAAK,IAAI,GAAG,WAAW,IAAI;AAC9F,uBAAW;AAEX,gBAAI,oBAAoB,MAAM;AAC5B,kBAAI,aAAa,gBAAgB,MAAM,kBAAkB,MAAM;AAC/D,kBAAI,aAAa,aAAa,IAAI;AAElC,uBAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,yBAAS,KAAK,IAAK,KAAK,KAAI,SAAS,eAAe,IAAI;AAAA;AAAA,mBAErD;AACL,kBAAI,cAAc,gBAAgB,MAAM,kBAAkB,MAAM;AAEhE,kBAAI,cAAc,cAAc,IAAI,GAAG;AAEvC,uBAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,OAAO;AACzC,yBAAS,KAAK;AAEd,yBAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,2BAAS,KAAK,KAAK,IAAI,KAAM,KAAK,KAAI,KAAK,SAAS,gBAAgB,IAAI,KAAK;AAAA;AAAA;AAAA;AAAA;AAMrF,eAAK,IAAI,kBAAkB,kBAAkB,KAAK,kBAAkB,KAAK,UAAU,gBAAgB,KAAK,gBAAgB,KAAK,GAAG,OAAO,KAAK,YAAY,UAAU,MAAM,iBAAiB;AACzL,eAAK,aAAa;AAClB,eAAK,IAAI,SAAS,iBAAiB,UAAU,aAAa,aAAa;AACvE,eAAK,IAAI;AAAA,eACJ;AAEL,eAAK,IAAI;AAAA;AAGX,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,QAAQ;AAClD,YAAI,OAAO,MAAM,GAAG;AAClB,iBAAO,MAAM;AAAA;AAGf,YAAI,OAAO,MAAM,GAAG;AAClB,iBAAO,MAAM;AAAA;AAGf,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uCAAuC,mBAAmB;AAC/D,YAAI,mBAAmB,KAAK,IAAI;AAChC,YAAI,oBAAoB,iBAAiB;AACzC,YAAI,SAAS;AAEb,YAAI,KAAK,WAAW,SAAS,WAAW,aAAa,KAAK,WAAW,SAAS,WAAW,aAAa;AACpG,cAAI,gBAAgB,iBAAiB;AAErC,cAAI,kBAAkB,OAAO,kBAAkB,OAAO,cAAc,OAAO,kBAAkB,KAAK;AAChG,qBAAS,IAAI,eAAW,kBAAkB,KAAK,kBAAkB;AAAA;AAGnE,cAAI,kBAAkB,MAAM,kBAAkB,OAAO,cAAc,MAAM,kBAAkB,KAAK;AAC9F,qBAAS,IAAI,eAAW,kBAAkB,KAAK,kBAAkB;AAAA;AAAA,mBAE1D,KAAK,WAAW,SAAS,WAAW,WAAW;AACxD,mBAAS,IAAI,eAAW,kBAAkB,KAAK,kBAAkB;AAAA,mBACxD,KAAK,WAAW,SAAS,WAAW,aAAa;AAC1D,mBAAS,IAAI,eAAW,kBAAkB,KAAK,kBAAkB;AAAA,eAC5D;AAEL;AAAA;AAGF,eAAO,KAAK,4BAA4B;AAAA;AAAA,OASzC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,mBAAmB;AAC5C,YAAI,6BAA6B,KAAK,8BAA8B;AAEpE,YAAI,4BAA4B;AAC9B,eAAK,cAAc;AAAA;AAAA;AAAA,OAStB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,SAAS;AAEb,aAAK,IAAI,iBAAiB,WAAY;AACpC,iBAAO,IAAI,MAAM,8BAA8B,QAAQ,GAAG,GAAG,OAAO,OAAO,YAAY;AAEvF,iBAAO,gBAAgB;AAAA,WACtB;AAAA;AAAA,OAQJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,CAAC,KAAK,IAAI,UAAU,UAAU,UAAU,aAAa,KAAK,kBAAkB,SAAS,KAAK,eAAe;AAC3G,cAAI,yBAAyB,KAAK,IAAI;AACtC,cAAI,4BAA4B,KAAK,IAAI,UAAU,UAAU,UAAU;AACvE,cAAI,gBAAgB,KAAK,IAAI;AAE7B,cAAI,uBAAuB,KAAK,gBAAgB,KAAK,0BAA0B,OAAO,gBAAgB,GAAG;AACvG,iBAAK,gBAAgB;AACrB,iBAAK;AAAA;AAAA;AAAA;AAAA,OAaV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2CAA2C,wBAAwB;AACxE,YAAI,OAAO,KAAK,IAAI;AACpB,YAAI,gBAAgB,KAAK,IAAI;AAC7B,YAAI;AAEJ,iBAAS,WAAW,uBAAuB,KAAK,GAAG,WAAW,eAAe,YAAY;AACvF,mBAAS,cAAc,uBAAuB,IAAI,eAAe,uBAAuB,IAAI,eAAe;AACzG,gBAAI,aAAa,KAAK,UAAU;AAEhC,gBAAI,YAAY;AACd,qBAAO;AAAA;AAAA;AAIX,cAAI,qBAAqB,KAAK,UAAU,uBAAuB,KAAK;AACpE,cAAI,sBAAsB,KAAK,UAAU,uBAAuB,KAAK;AAErE,cAAI,CAAC,CAAC,sBAAsB,CAAC,CAAC,qBAAqB;AACjD,mCAAuB;AAAA;AAAA;AAI3B,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qDAAqD,iBAAiB,UAAU;AACrF,aAAK,IAAI,UAAU,UAAU,UAAU,QAAQ,IAAI,IAAI,eAAW,gBAAgB,IAAI,gBAAgB,KAAK,IAAI,IAAI,eAAW,UAAU,gBAAgB,KAAK;AAAA;AAAA,OAS9J;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,eAAe;AAC1C,YAAI;AAEJ,QAAC,aAAY,KAAK,KAAK,WAAW,MAAM,WAAW,qBAAmB,SAAS,eAAe,SAAU,QAAO;AAC7G,iBAAO,KAAK,IAAI,QAAO;AAAA,YACrB,OAAO,CAAC,OAAO;AAAA;AAAA,OASpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,YAAI,yBAAyB,KAAK,IAAI;AACtC,YAAI,uBAAuB,KAAK,kCAAkC;AAElE,YAAI,yBAAyB,MAAM,yBAAyB,QAAQ;AAClE,iBAAO;AAAA;AAGT,aAAK,4CAA4C,wBAAwB;AACzE,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uCAAuC;AAC5C,aAAK,qBAAqB;AAC1B,aAAK,IAAI,UAAU,UAAU,UAAU;AAAA;AAAA,OASxC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ;AACpC,aAAK,IAAI,UAAU,UAAU,UAAU,QAAQ,IAAI,KAAK,IAAI,uBAAuB,MAAM,IAAI,KAAK,IAAI,uBAAuB,IAAI,IAAI,QAAQ;AAC7I,aAAK,IAAI,KAAK;AAAA;AAAA,OAUf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,QAAO;AACjD,YAAI,kBAAkB,KAAK,IAAI,aAAa;AAC5C,YAAI,cAAc,OAAO,KAAK,IAAI,OAAO,MAAO,MAAK,IAAI,WAAW,eAAe,gBAAgB,aAAa,YAAY,KAAK,IAAI;AACrI,YAAI,aAAa,OAAO,KAAK,IAAI,OAAO,OAAQ,MAAK,IAAI,WAAW,eAAe,gBAAgB,cAAc,WAAW,KAAK,IAAI;AACrI,eAAO,OAAM,UAAU,eAAe,OAAM,WAAW;AAAA;AAAA,OAQxD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA0B;AAC/B,YAAI,SAAS;AAEb,YAAI,kBAAkB,KAAK,IAAI,aAAa;AAC5C,aAAK,aAAa,iBAAiB,iBAAiB,WAAW,WAAY;AACzE,iBAAO,OAAO;AAAA;AAEhB,aAAK,aAAa,iBAAiB,iBAAiB,aAAa,SAAU,QAAO;AAChF,iBAAO,OAAO,YAAY;AAAA;AAAA;AAAA,OAS7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,mBAAmB,KAAK;AAE5B,YAAI,kBAAkB;AACpB,eAAK;AAAA;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC;AAC3C,aAAK,qBAAqB;AAC1B,aAAK,wBAAwB;AAAA;AAAA,OAS9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,QAAQ;AAC5C,YAAI,KAAK,yBAAyB,CAAC,KAAK,IAAI,KAAK,iBAAiB,KAAK,oBAAoB;AACzF,eAAK,sBAAsB;AAC3B,eAAK,WAAW;AAChB,eAAK;AAAA;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAqB;AAC1B,YAAI,KAAK,oBAAoB;AAC3B,cAAI,KAAK,qBAAqB,GAAG;AAC/B,iBAAK;AAAA;AAGP,eAAK,qBAAqB;AAC1B,eAAK,wBAAwB;AAAA;AAAA;AAAA,OAUhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,YAAI,yBAAyB,KAAK,4BAA4B;AAE9D,YAAI,KAAK,kBAAkB,SAAS,KAAK,qBAAqB,KAAK,wBAAwB;AACzF,eAAK,mBAAmB;AACxB,eAAK,gBAAgB;AAAA,eAChB;AACL,eAAK,mBAAmB;AAAA;AAG1B,YAAI,KAAK,oBAAoB,KAAK,eAAe;AAC/C,eAAK;AAAA;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,aAAK,WAAW,SAAS;AACzB,aAAK,gBAAgB;AAAA;AAAA,OAQtB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,iBAAiB,2BAA2B,KAAK,IAAI,cAAc;AACvE,aAAK,aAAa,eAAe;AACjC,aAAK,gBAAgB,eAAe;AAAA;AAAA,OAMrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAK,kBAAgB,UAAS,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAEhE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AEruBF,mCAAO;AAKP,gCAAO;AAlBP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAoBzU,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAE/D,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAYjM,MAAI,cAAa;AACjB,MAAI,mBAAkB;AAC7B,MAAI,sBAAsB;AA2DnB,MAAI,cAA2B,yBAAU,aAAa;AAC3D,gBAAU,cAAa;AAEvB,QAAI,SAAS,eAAa;AAE1B,0BAAqB,aAAa;AAChC,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,gBAAgB;AAQtB,YAAM,eAAe;AAQrB,YAAM,aAAa,IAAI,mBAAW,MAAM;AAQxC,YAAM,mBAAmB,IAAI,yBAAiB,SAAU,KAAK,KAAK;AAChE,YAAI;AAEJ,YAAI,OAAO,GAAG;AACZ,sBAAY,MAAM,IAAI,cAAc,KAAK;AAAA,mBAChC,QAAQ,IAAI;AACrB,sBAAY,MAAM,IAAI,aAAa;AAAA;AAGrC,eAAO;AAAA,UACL,OAAO;AAAA;AAAA;AAUX,YAAM,mBAAmB;AAOzB,YAAM,aAAa;AAOnB,YAAM,eAAe;AAQrB,YAAM,gBAAgB,IAAI;AAE1B,YAAM,IAAI,eAAe,YAAY,qBAAqB,MAAM;AAIhE,YAAM,QAAQ,mBAAmB,SAAU,MAAM,KAAK,YAAY;AAChE,eAAO,MAAM,kBAAkB,MAAM,KAAK;AAAA;AAG5C,aAAO;AAAA;AAUT,mBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,WAAW,KAAK,IAAI,cAAc;AACtC,eAAO,aAAa,QAAQ,UAAS;AAAA;AAAA,OAMtC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK;AACL,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO,gBAAgB,MAAM,QAAQ;AAAA;AAE9C,aAAK,QAAQ,gBAAgB,SAAU,SAAS;AAC9C,iBAAO,OAAO,eAAe;AAAA;AAE/B,aAAK,QAAQ,sBAAsB,WAAY;AAC7C,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,oBAAoB,SAAU,OAAO;AAChD,iBAAO,OAAO,mBAAmB;AAAA;AAEnC,aAAK,QAAQ,mBAAmB,SAAU,QAAQ,KAAK;AACrD,iBAAO,OAAO,aAAa,KAAK;AAAA;AAElC,aAAK,QAAQ,4BAA4B,WAAY;AACnD,iBAAO,OAAO;AAAA;AAGhB,eAAK,kBAAgB,aAAY,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMzE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,aAAK,eAAe;AAEpB,eAAK,kBAAgB,aAAY,YAAY,iBAAiB,MAAM,KAAK;AAIzE,aAAK,QAAQ,mBAAmB,SAAU,MAAM,KAAK,YAAY;AAC/D,iBAAO,OAAO,kBAAkB,MAAM,KAAK;AAAA;AAAA;AAAA,OAW9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,YAAI,SAAS;AAEb,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAAA,UACjF,MAAM;AAAA,UACN,IAAI,KAAK,IAAI,cAAc;AAAA;AAE7B,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAAA,UACjF,MAAM;AAAA,UACN,IAAI,KAAK,IAAI,cAAc;AAAA;AAE7B,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEhF,YAAI,YAAY,OAAO,aAAa,WAAW;AAAA,UAC7C,MAAM;AAAA,UACN,IAAI;AAAA,YACF;AACJ,YAAI,eAAe,OAAO,aAAa,WAAW;AAAA,UAChD,MAAM;AAAA,UACN,IAAI;AAAA,YACF;AAEJ,YAAI,KAAK,IAAI,aAAa,OAAO,MAAM;AACrC,cAAI,UAAU,KAAK,iBAAiB,mBAAmB,IAAI;AAC3D,eAAK,WAAW,oBAAoB,QAAQ,IAAI;AAAA;AAGlD,kBAAU,UAAU,MAAM,UAAU,IAAI,SAAU,KAAK;AAGrD,cAAI,SAAS,OAAO,cAAc,gBAAgB,SAAS,MAAM;AAC/D,gBAAI,WAAW,OAAO,iBAAiB,mBAAmB,KAAK;AAE/D,sBAAU,UAAU,SAAU,MAAM;AAClC,kBAAI,QAAQ,iBAAe,MAAM,IAC7B,WAAW,MAAM,IACjB,SAAS,MAAM;AAEnB,qBAAO,OAAO,WAAW,OAAO,UAAU;AAAA;AAAA;AAAA;AAKhD,YAAI,KAAK,WAAW,KAAK,QAAQ;AAC/B,eAAK,IAAI,eAAe,WAAY;AAClC,mBAAO,WAAW,WAAW,SAAU,KAAK,QAAQ;AAClD,kBAAI,MAAM,GAAG;AACX,uBAAO,eAAe;AAAA,qBACjB;AACL,uBAAO,cAAc,gBAAgB,OAAO,IAAI,cAAc,MAAM;AAAA;AAAA;AAAA,aAGvE;AACH,eAAK,eAAe,UAAU,KAAK;AACnC,eAAK,WAAW;AAAA;AAAA;AAAA,OAUnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,YAAI,SAAS;AAEb,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAAA,UACjF,MAAM;AAAA,UACN,IAAI,KAAK,IAAI,cAAc;AAAA;AAE7B,YAAI,UAAU;AACd,YAAI,SAAS,KAAK,IAAI,cAAc;AACpC,YAAI,QAAQ;AACZ,aAAK,aAAa;AAElB,YAAI,OAAO,iBAAgB;AAEzB,cAAI,CAAC,OAAO,KAAK;AACf,kCAAqB;AACrB,mBAAO,aAAa;AACpB;AAAA;AAGF,iBAAO,oBAAoB;AAAA,YACzB,MAAM;AAAA,YACN,IAAI,KAAK,IAAI,UAAU,aAAY,kBAAkB;AAAA,aACpD;AAEH,oBAAU,UAAU,aAAY,mBAAmB;AAEnD,cAAI,UAAU,QAAQ;AACpB,oBAAQ,uBAAsB;AAAA,iBACzB;AACL,kCAAqB;AACrB,mBAAO,aAAa;AAEpB,mBAAO,IAAI,KAAK,mBAAmB;AAGnC,gBAAI,OAAO,IAAI,KAAK,GAAG,WAAW,YAAY,gBAAgB;AAC5D,qBAAO,IAAI,KAAK,GAAG,WAAW,YAAY,MAAM;AAAA;AAAA;AAAA;AAKtD,YAAI,YAAY,KAAK;AAErB,YAAI,KAAK,oBAAoB,aAAa,GAAG;AAC3C,eAAK,oBAAoB;AAAA,YACvB,MAAM;AAAA,YACN,IAAI;AAAA,aACH;AACH,eAAK,mBAAmB;AACxB,oBAAU,YAAY;AAAA;AAIxB,YAAI,UAAU,QAAQ;AACpB;AAAA,eACK;AACL,eAAK,aAAa;AAClB,eAAK,IAAI,KAAK,mBAAmB;AAAA;AAAA;AAAA,OASpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,UAAU,KAAK,IAAI,cAAc;AACrC,YAAI,gBAAgB,WAAW,eAAe,SAAS,mBAAmB,QAAQ,gBAAgB;AAClG,YAAI,wBAAwB,WAAW,eAAe,SAAS,2BAA2B,QAAQ,wBAAwB;AAE1H,YAAI,iBAAiB,CAAC,MAAM,gBAAgB;AAC1C,eAAK,iBAAiB,eAAe,SAAS,eAAe;AAAA;AAG/D,YAAI,uBAAuB;AACzB,eAAK,iBAAiB,mBAAmB;AAAA;AAAA;AAAA,OAO5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,YAAI,UAAU,KAAK,IAAI,KAAK,GAAG,QAAQ,QAAQ;AAC7C,eAAK;AACL,eAAK;AAAA;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,YAAI,WAAW,KAAK,IAAI,cAAc;AAGtC,YAAI,QAAQ,aAAY;AACxB,YAAI,YAAY,KAAK,IAAI,cAAc;AAEvC,YAAI,UAAS,WAAW;AACtB,kBAAQ,SAAS;AAEjB,cAAI,eAAe,QAAQ;AACzB,oBAAQ,sBAAsB,WAAW;AAAA,iBACpC;AAEL,sBAAU;AAAA;AAAA;AAId,eAAO,KAAK,IAAI,OAAO;AAAA;AAAA,OAYxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,KAAK;AAChC,YAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACxF,YAAI,eAAe,MAAM,IAAI,KAAK,eAAe,KAAK,cAAc,gBAAgB,KAAK,IAAI,cAAc;AAC3G,YAAI,SAAS;AAEb,YAAI,iBAAiB,QAAQ,eAAgB,kBAAiB,IAAI;AAChE,mBAAS;AAAA;AAGX,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA8B;AACnC,YAAI,MAAM,KAAK,IAAI,KAAK;AAExB,YAAI,IAAI,WAAW,uBAAuB;AACxC,iBAAO,IAAI,QAAQ;AAAA;AAGrB,YAAI,IAAI,WAAW,sBAAsB;AACvC,iBAAO,IAAI,QAAQ;AAAA;AAGrB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA6B;AAClC,YAAI,MAAM,KAAK,IAAI,KAAK;AAExB,YAAI,IAAI,WAAW,uBAAuB;AACxC,iBAAO,IAAI,QAAQ;AAAA;AAGrB,YAAI,IAAI,WAAW,sBAAsB;AACvC,iBAAO,IAAI,QAAQ;AAAA;AAGrB,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAsB;AAC3B,aAAK,eAAe;AACpB,aAAK,cAAc;AAAA;AAAA,OAQpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,OAAO;AACvC,YAAI,SAAS;AAEb,YAAI,QAAQ,OAAO,UAAU,WAAW;AAAA,UACtC,MAAM;AAAA,UACN,IAAI;AAAA,YACF,OACA,QAAO,MAAM,MACb,KAAK,MAAM;AAEf,aAAK,IAAI,eAAe,WAAY;AAClC,oBAAU,KAAK,IAAI,OAAM,KAAK,KAAK,IAAI,OAAM,KAAK,SAAU,KAAK;AAC/D,mBAAO,cAAc,gBAAgB,KAAK;AAAA;AAAA,WAE3C;AAAA;AAAA,OAQJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,eAAO,CAAC,CAAC,YAAY,KAAK,cAAc,YAAY,MAAM,GAAG,KAAK,eAAe,SAAU,MAAM;AAC/F,iBAAO,SAAS;AAAA,WACf;AAAA;AAAA,OAQJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,QAAQ,KAAK,IAAI;AACrB,YAAI,kBAAkB,KAAK,IAAI,cAAc;AAC7C,YAAI,kBAAkB,KAAK;AAC3B,YAAI,iBAAiB,KAAK;AAE1B,YAAI,oBAAoB,MAAM,mBAAmB,IAAI;AACnD;AAAA;AAGF,aAAK,oBAAoB;AAAA,UACvB,MAAM;AAAA,UACN,IAAI;AAAA,WACH,QAAQ;AAEX,YAAI,iBAAiB;AACnB,cAAI,YAAY,KAAK,IAAI,cAAc;AACvC,eAAK,oBAAoB;AAAA,YACvB,MAAM,YAAY;AAAA,YAClB,IAAI;AAAA;AAAA;AAIR,YAAI,KAAK,uBAAuB,CAAC,KAAK,YAAY;AAChD,eAAK;AAAA;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,OAAM,IAAI;AACxC,aAAK,kBAAkB;AAAA,UACrB,MAAM;AAAA,UACN;AAAA;AAEF,aAAK;AAAA;AAAA,OAYN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,MAAM,KAAK,YAAY;AACvD,YAAI,UAAU;AAEd,YAAI,YAAY;AACd,eAAK,oBAAoB,KAAK,QAAQ;AACtC,oBAAU,KAAK,aAAa;AAAA;AAG9B,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,SAAS;AAEb,YAAI,KAAK,IAAI,MAAM;AACjB,eAAK;AAAA,eACA;AAEL,qBAAW,WAAY;AACrB,gBAAI,OAAO,KAAK;AACd,qBAAO;AAAA;AAAA,aAER;AAAA;AAAA;AAAA,OAUN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,SAAS;AACtC,YAAI,QAAQ;AAEZ,YAAI,QAAQ,WAAW,GAAG;AACxB,kBAAQ,QAAQ,GAAG;AAAA,mBACV,QAAQ,SAAS,GAAG;AAC7B,kBAAQ;AAAA,YACN,MAAM,QAAQ,GAAG;AAAA,YACjB,IAAI,QAAQ,QAAQ,SAAS,GAAG;AAAA;AAAA;AAIpC,YAAI,UAAU,MAAM;AAClB,eAAK,kBAAkB;AAAA;AAAA;AAAA,OAO1B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,WAAW;AAEhB,eAAK,kBAAgB,aAAY,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAEnE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;ACtuBF,mCAAO;;;ACfP,mCAAO;AAXP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAIxM,MAAI,qBAAqB,kBAAkB;AAA3C,MACI,4BAA2B,mBAAmB;AADlD,MAEI,2BAA0B,mBAAmB;AAMjD,MAAI,gBAA6B,yBAAU,WAAW;AACpD,gBAAU,gBAAe;AAEzB,QAAI,SAAS,eAAa;AAE1B,8BAAyB;AACvB,wBAAgB,MAAM;AAEtB,aAAO,OAAO,KAAK,MAAM,SAAU,QAAO;AACxC,eAAO;AAAA;AAAA;AAYX,mBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,gBAAgB,gBAAgB,iBAAiB;AACtD,YAAI,kBAAkB,oBAAoB,KAAK,eAAe;AAC9D,aAAK,gBAAgB,0BAAyB,iBAAiB,gBAAgB,iBAAiB,KAAK;AAErG,eAAK,kBAAgB,eAAc,YAAY,UAAU,MAAM,KAAK,MAAM,gBAAgB;AAAA;AAAA,OAS3F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,gBAAgB;AACrC,YAAI,kBAAkB,yBAAwB,KAAK,eAAe;AAClE,aAAK,gBAAgB,oBAAoB,iBAAiB;AAE1D,eAAK,kBAAgB,eAAc,YAAY,UAAU,MAAM,KAAK,MAAM;AAAA;AAAA;AAI9E,WAAO;AAAA,IACP;AAEF,MAAO,wBAAQ;;;ACvFf,mCAAO;AAMP,gCAAO;AAjBP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAmBzU,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAIxM,MAAI,sBAAqB,kBAAkB;AAA3C,MACI,4BAA2B,oBAAmB;AADlD,MAEI,2BAA0B,oBAAmB;AAMjD,MAAI,iBAA8B,yBAAU,WAAW;AACrD,gBAAU,iBAAgB;AAE1B,QAAI,SAAS,eAAa;AAE1B,+BAA0B;AACxB,wBAAgB,MAAM;AAEtB,aAAO,OAAO,KAAK,MAAM,SAAU,QAAO;AACxC,eAAO;AAAA;AAAA;AAYX,mBAAa,iBAAgB,CAAC;AAAA,MAC5B,KAAK;AAAA,MACL,OAAO,gBAAgB,gBAAgB,iBAAiB;AACtD,YAAI,QAAQ;AAEZ,aAAK,gBAAgB,0BAAyB,KAAK,eAAe,gBAAgB,iBAAiB,SAAU,GAAG,eAAe;AAC7H,iBAAO,MAAM,aAAa;AAAA;AAG5B,eAAK,kBAAgB,gBAAe,YAAY,UAAU,MAAM,KAAK,MAAM,gBAAgB;AAAA;AAAA,OAS5F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,gBAAgB;AACrC,aAAK,gBAAgB,yBAAwB,KAAK,eAAe;AAEjE,eAAK,kBAAgB,gBAAe,YAAY,UAAU,MAAM,KAAK,MAAM;AAAA;AAAA,OAS5E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,eAAe;AAC1C,eAAO,KAAK,IAAI,MAAM,MAAM,qBAAmB,KAAK,gBAAgB,IAAI;AAAA;AAAA;AAI5E,WAAO;AAAA,IACP;AAEF,MAAO,yBAAQ;;;AFhIf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAkBjM,MAAI,cAAa;AACjB,MAAI,mBAAkB;AAC7B,MAAI,eAAe;AACnB,MAAI,wBAAwB,oBAAI,IAAI,CAAC,CAAC,SAAS,wBAAgB,CAAC,UAAU;AAsBnE,MAAI,sBAAmC,yBAAU,aAAa;AACnE,gBAAU,sBAAqB;AAE/B,QAAI,SAAS,eAAa;AAE1B,kCAA6B,aAAa;AACxC,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,gBAAgB;AACtB,aAAO;AAAA;AAUT,mBAAa,sBAAqB,CAAC;AAAA,MACjC,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,YAAI,WAAW,KAAK,IAAI,cAAc;AAEtC,YAAI,OAAO,aAAa,UAAU;AAChC,qBAAW;AAAA;AAGb,YAAI,cAAc,sBAAsB,IAAI;AAC5C,aAAK,gBAAgB,KAAK,IAAI,eAAe,YAAY,uBAAuB,IAAI;AACpF,aAAK,QAAQ,mBAAmB,SAAU,KAAK;AAC7C,iBAAO,OAAO,kBAAkB;AAAA;AAGlC,eAAK,kBAAgB,qBAAoB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMjF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK,IAAI,eAAe,cAAc;AAEtC,eAAK,kBAAgB,qBAAoB,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAUlF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,KAAK;AACrC,eAAO,KAAK,cAAc,gBAAgB,KAAK,IAAI,cAAc;AAAA;AAAA,OAMlE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAK,kBAAgB,qBAAoB,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAE3E,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AGxHF,mCAAO;AAoBP,gCAAO;AA1EP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAExM,uCAAoC,KAAK,YAAY,OAAO;AAAE,gCAA2B,KAAK;AAAa,eAAW,IAAI,KAAK;AAAA;AAE/H,uCAAoC,KAAK,mBAAmB;AAAE,QAAI,kBAAkB,IAAI,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEpH,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,kCAA+B,UAAU,YAAY;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,WAAO,0BAAyB,UAAU;AAAA;AAE7K,qCAAkC,UAAU,YAAY;AAAE,QAAI,WAAW,KAAK;AAAE,aAAO,WAAW,IAAI,KAAK;AAAA;AAAa,WAAO,WAAW;AAAA;AAE1I,kCAA+B,UAAU,YAAY,OAAO;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,8BAAyB,UAAU,YAAY;AAAQ,WAAO;AAAA;AAExM,yCAAsC,UAAU,YAAY,QAAQ;AAAE,QAAI,CAAC,WAAW,IAAI,WAAW;AAAE,YAAM,IAAI,UAAU,kBAAkB,SAAS;AAAA;AAAqC,WAAO,WAAW,IAAI;AAAA;AAEjN,qCAAkC,UAAU,YAAY,OAAO;AAAE,QAAI,WAAW,KAAK;AAAE,iBAAW,IAAI,KAAK,UAAU;AAAA,WAAe;AAAE,UAAI,CAAC,WAAW,UAAU;AAAE,cAAM,IAAI,UAAU;AAAA;AAA+C,iBAAW,QAAQ;AAAA;AAAA;AA8BjP,MAAI,cAAa;AACjB,MAAI,mBAAkB;AAC7B,MAAI,mBAAmB,oBAAI,IAAI,CAAC,CAAC,YAAY;AAAA,IAC3C,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,MACT,CAAC,UAAU;AAAA,IACb,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA;AA4Cb,MAAI,uBAAoC,oBAAI;AAErC,MAAI,qBAAkC,yBAAU,aAAa;AAClE,gBAAU,qBAAoB;AAE9B,QAAI,SAAS,eAAa;AAE1B,mCAA8B;AAC5B,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,eAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,aAAK,QAAQ,UAAU;AAAA;AAGzB,cAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,MAAM,OAAO;AAEhD,wBAAgB,yBAAuB,QAAQ,uBAAuB;AAEtE,wBAAgB,yBAAuB,QAAQ,gBAAgB,IAAI,qBAAa,yBAAuB;AAEvG,wBAAgB,yBAAuB,QAAQ,sBAAsB;AAErE,kCAA2B,yBAAuB,QAAQ,sBAAsB;AAAA,QAC9E,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,aAAO;AAAA;AAGT,mBAAa,qBAAoB,CAAC;AAAA,MAChC,KAAK;AAAA,MACL,OAOA,qBAAqB;AACnB,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,YAAI,wBAAwB,KAAK,IAAI,eACjC,gBAAgB,sBAAsB;AAE1C,YAAI,CAAC,eAAe;AAClB,eAAK;AAAA;AAGP,+BAAsB,MAAM,sBAAsB,KAAK,IAAI,kBAAkB,0BAA0B,KAAK,YAAY;AAExH,aAAK,sBAAsB,KAAK,IAAI,UAAU;AAC9C,aAAK,qBAAqB,KAAK,oBAAoB;AACnD,aAAK,QAAQ,QAAQ,WAAY;AAC/B,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO,gBAAgB,MAAM,QAAQ;AAAA;AAE9C,aAAK,QAAQ,qBAAqB,SAAU,KAAK,IAAI;AACnD,iBAAO,OAAO,oBAAoB,KAAK;AAAA;AAEzC,aAAK,QAAQ,yBAAyB,SAAU,QAAO,QAAQ,IAAI;AACjE,iBAAO,OAAO,wBAAwB,QAAO,QAAQ;AAAA;AAGvD,eAAK,kBAAgB,oBAAmB,YAAY,gBAAgB,MAAM,KAAK;AAG/E,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAE7B,YAAI,CAAC,KAAK,IAAI,MAAM;AAClB;AAAA;AAGF,YAAI,CAAC,KAAK,oBAAoB,2BAA2B;AACvD,cAAI,yBAAyB,KAAK,IAAI,eAClC,qBAAqB,uBAAuB;AAEhD,cAAI,OAAO,uBAAuB,WAAW;AAE3C,iBAAK,mBAAmB,SAAS,SAAU,gBAAgB;AACzD,qBAAO;AAAA,gBACL,aAAa,eAAe,cAAc;AAAA;AAAA;AAAA,qBAGrC,MAAM,QAAQ,qBAAqB;AAC5C,iBAAK,mBAAmB,eAAe;AAAA;AAAA;AAI3C,eAAK,kBAAgB,oBAAmB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMhF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK,IAAI,kBAAkB,cAAc,KAAK;AAE9C,+BAAsB,MAAM,sBAAsB;AAElD,aAAK,sBAAsB;AAC3B,aAAK;AAEL,eAAK,kBAAgB,oBAAmB,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAQjF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,CAAC,KAAK,IAAI,MAAM;AAClB;AAAA;AAGF,YAAI,eAAe,KAAK,IAAI,KAAK,GAAG,WAAW,iBAAiB;AAChE,YAAI,cAAc,KAAK,IAAI,KAAK,GAAG,QAAQ;AAC3C,YAAI,aAAa,KAAK,IAAI,KAAK,GAAG,WAAW,WAAW,MAAM,QAAQ;AACtE,YAAI,uBAAuB,KAAK,IAAI,KAAK,GAAG,WAAW,uBAAuB,KAAK,IAAI,KAAK,GAAG,WAAW,qBAAqB,MAAM,QAAQ,QAAQ;AAErJ,YAAI,eAAe,uBAAsB,QAAQ;AAC/C,cAAI,QAAQ;AACV,mBAAO,WAAW,YAAY;AAAA;AAAA;AAIlC,kBAAU,GAAG,eAAe,GAAG,SAAU,GAAG;AAC1C,cAAI,cAAc,YAAY,WAAW;AACzC,cAAI,WAAW,WAAW,WAAW;AACrC,cAAI,qBAAqB,uBAAuB,qBAAqB,WAAW,KAAK;AACrF,oBAAU,GAAG,YAAY,WAAW,SAAS,GAAG,SAAU,GAAG;AAC3D,gBAAI,SAAS,YAAY,WAAW,GAAG,cAAc;AACrD,yBAAa;AAEb,gBAAI,YAAY,SAAS,WAAW,IAAI;AACtC,uBAAS,SAAS,WAAW,GAAG,cAAc;AAC9C,2BAAa;AAAA;AAGf,gBAAI,wBAAwB,sBAAsB,mBAAmB,WAAW,IAAI;AAClF,uBAAS,mBAAmB,WAAW,GAAG,cAAc;AACxD,2BAAa;AAAA;AAAA;AAAA,WAGhB;AAAA;AAAA,OAQJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ;AACpC,aAAK,yBAAyB,CAAC,SAAS;AAAA;AAAA,OAQzC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAQ;AACtC,aAAK,yBAAyB,CAAC,SAAS;AAAA;AAAA,OAQzC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC,QAAQ;AACnD,YAAI,SAAS;AAEb,YAAI,SAAS,KAAK,mBAAmB,SAAS,SAAU,gBAAgB;AACtE,cAAI,cAAc,eAAe,aAC7B,cAAc,eAAe,aAC7B,cAAc,eAAe,aAC7B,cAAc,eAAe,aAC7B,cAAc,eAAe;AAEjC,cAAI,gBAAgB,QAAQ,cAAc,KAAM,gBAAe,WAAW,YAAY,CAAC,eAAe,WAAW,aAAa;AAC5H,mBAAO;AAAA,cACL,KAAK,OAAO,mBAAmB,iBAAiB;AAAA,cAChD,KAAK;AAAA;AAAA;AAAA;AAIX,aAAK,yBAAyB,QAAQ;AAAA;AAAA,OAMvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,aAAK,6BAA6B;AAAA;AAAA,OAMnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,aAAK,6BAA6B;AAAA;AAAA,OAanC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,QAAQ,QAAQ;AACvD,YAAI,SAAS;AAEb,YAAI,CAAC,iBAAiB,IAAI,SAAS;AACjC,gBAAM,IAAI,MAAM,iCAAiC,OAAO,QAAQ;AAAA;AAGlE,YAAI,CAAC,MAAM,QAAQ,SAAS;AAC1B;AAAA;AAIF,YAAI,iBAAiB,YAAY,QAAQ,SAAU,MAAM;AACvD,cAAI,MAAM,KAAK;AACf,iBAAO,MAAM;AAAA;AAEf,YAAI,mBAAmB,eAAe,SAAS;AAC/C,kBAAU,gBAAgB,SAAU,OAAO;AACzC,cAAI;AAEJ,cAAI,MAAM,MAAM,KACZ,SAAS,MAAM;AAEnB,cAAI,QAAS,yBAAwB,OAAO,mBAAmB,kBAAkB,KAAK,aAAa,QAAQ,0BAA0B,SAAS,wBAAwB,IAClK,cAAc,MAAM,aACpB,cAAc,MAAM;AAExB,cAAI,CAAC,eAAe,eAAe,WAAW,cAAc,CAAC,eAAe,WAAW,UAAU;AAC/F,+BAAmB;AACnB,mBAAO;AAAA;AAAA;AAGX,YAAI,mBAAmB;AACvB,YAAI,yBAAyB;AAE7B,YAAI,kBAAkB;AACpB,oBAAU,gBAAgB,SAAU,OAAO;AACzC,gBAAI,MAAM,MAAM,KACZ,SAAS,MAAM;AAEnB,gBAAI,yBAAyB,OAAO,mBAAmB,wBAAwB,QAAQ,KAAK,SACxF,sBAAsB,uBAAuB,qBAC7C,kBAAkB,uBAAuB,iBACzC,uBAAuB,uBAAuB;AAElD,gBAAI,sBAAsB,GAAG;AAC3B,qCAAuB,KAAK,MAAM,wBAAwB,qBAAmB;AAC7E,+BAAiB,KAAK;AAAA;AAAA;AAAA;AAK5B,YAAI,0BAA0B,KAAK;AACnC,YAAI,8BAA8B;AAElC,YAAI,WAAW,YAAY;AACzB,wCAA8B,YAAY,GAAG,OAAO,qBAAmB,0BAA0B;AAAA,mBACxF,WAAW,UAAU;AAC9B,wCAA8B,YAAY,yBAAyB,SAAU,QAAO;AAClF,mBAAO,CAAC,uBAAuB,SAAS;AAAA;AAAA;AAI5C,YAAI,mBAAmB,iBAAiB,IAAI;AAC5C,YAAI,kBAAkB,KAAK,IAAI,SAAS,iBAAiB,YAAY,yBAAyB,6BAA6B;AAE3H,YAAI,oBAAoB,OAAO;AAE7B,oBAAU,kBAAkB,SAAU,iBAAiB;AACrD;AAAA;AAEF;AAAA;AAGF,aAAK,IAAI,eAAe,WAAY;AAClC,oBAAU,wBAAwB,SAAU,cAAc;AACxD,mCAAsB,QAAQ,sBAAsB,gBAAgB,OAAO,IAAI,iBAAiB,eAAe,iBAAiB;AAAA;AAAA,WAEjI;AACH,YAAI,oBAAoB,KAAK,sBAAsB,WAAW,wBAAwB;AACtF,aAAK,IAAI,SAAS,iBAAiB,WAAW,yBAAyB,6BAA6B,kBAAkB;AACtH,aAAK,IAAI;AACT,aAAK,IAAI,KAAK,mBAAmB;AAAA;AAAA,OASlC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,eAAO,uBAAsB,MAAM,sBAAsB;AAAA;AAAA,OAW1D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,KAAK,QAAQ;AAC7C,YAAI,QAAQ,KAAK,IAAI,aAAa,cAAc;AAChD,YAAI,iBAAiB,KAAK,mBAAmB,kBAAkB,KAAK;AACpE,iBAAS,OAAO;AAEhB,YAAI,eAAe,aAAa;AAC9B,mBAAS,OAAO;AAChB,wBAAc,OAAO;AAAA,eAChB;AACL,mBAAS,OAAO;AAChB,wBAAc,OAAO;AAAA;AAGvB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,QAAQ,IAAI;AAC9C,YAAI;AAEJ,YAAI,KAAK,GAAG;AACZ,YAAI,QAAQ,GAAG;AACf,YAAI,MAAM,KAAK,MAAM,WAAW,SAAS,MAAM,UAAU,QAAQ,KAAK,MAAM,YAAY;AAExF,YAAI,QAAS,yBAAwB,KAAK,mBAAmB,kBAAkB,KAAK,aAAa,QAAQ,0BAA0B,SAAS,wBAAwB,IAChK,cAAc,MAAM,aACpB,cAAc,MAAM;AAExB,YAAI,eAAe,cAAc,KAAK,UAAU,KAAK,IAAI,cAAc,kBAAkB;AACvF,cAAI,SAAS,KAAK,kBAAkB,KAAK;AACzC,aAAG,cAAc,mBAAmB,YAAY;AAAA;AAAA;AAAA,OAWnD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAO,QAAQ;AACrD,YAAI,SAAS,OAAM,QAAQ,yBAAyB;AAClD,cAAI,SAAS,OAAM,QAAQ,aAAa;AACtC,iBAAK,aAAa,UAAU,OAAM,QAAQ;AAC1C,iBAAK,yBAAyB,CAAC,SAAS;AAAA,qBAC/B,SAAS,OAAM,QAAQ,cAAc;AAC9C,iBAAK,aAAa,UAAU,OAAM,QAAQ;AAC1C,iBAAK,yBAAyB,CAAC,SAAS;AAAA;AAG1C,mCAAyB;AAAA;AAAA;AAAA,OAS5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AAEvB,aAAK;AAAA;AAAA,OAWN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,YAAY,aAAa;AACvD,YAAI,CAAC,aAAa;AAChB,eAAK;AAAA;AAAA;AAAA,OAOR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,+BAAsB,MAAM,sBAAsB;AAElD,eAAK,kBAAgB,oBAAmB,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAE1E,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO,CAAC;AAAA;AAAA;AAWZ,WAAO;AAAA,IACP;;;AClmBF,gCAAO;AAkCP,mCAAO;;;ACzBP,mCAAO;AAMP,gCAAO;AA/BP,qBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,0BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,UAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,0BAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,UAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAsB/D,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAK/Q,MAAI,4BAA4B,CAAC,kBAAkB,aAAa,gBAAgB;AAChF,MAAI,2BAA2B;AAC/B,MAAI,8BAA8B;AAClC,MAAI,wBAAwB;AAQrB,MAAI,sBAAmC,2BAAY;AACxD,kCAA6B,KAAK,SAAS;AACzC,wBAAgB,MAAM;AAOtB,WAAK,MAAM;AAOX,WAAK,gBAAgB,IAAI;AAOzB,WAAK,iBAAiB;AAOtB,WAAK,YAAY;AAOjB,WAAK,eAAe;AAKpB,WAAK,yBAAyB;AAO9B,WAAK,UAAU;AACf,WAAK,IAAI,kBAAkB,YAAY,SAAS,KAAK;AAAA;AAWvD,mBAAa,sBAAqB,CAAC;AAAA,MACjC,KAAK;AAAA,MACL,OAAO,oCAAoC,iBAAiB;AAC1D,YAAI,QAAQ;AAEZ,YAAI,CAAC,UAAS,kBAAkB;AAC9B;AAAA;AAGF,mBAAW,iBAAiB,SAAU,UAAU,cAAc;AAC5D,cAAI,0BAA0B,SAAS,eAAe;AACpD,kBAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA,OAU3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,YAAI,mBAAmB;AAAA,UACrB,gBAAgB,KAAK;AAAA,UACrB,WAAW,KAAK;AAAA,UAChB,cAAc,KAAK;AAAA;AAGrB,YAAI,OAAO,KAAK,2BAA2B,YAAY;AACrD,2BAAiB,yBAAyB,KAAK;AAAA;AAGjD,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,gBAAgB;AACnD,YAAI;AAEJ,eAAQ,yBAAwB,KAAK,cAAc,gBAAgB,KAAK,IAAI,iBAAiB,sBAAsB,QAAQ,0BAA0B,SAAS,SAAS,sBAAsB;AAAA;AAAA,OAS9L;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,QAAQ;AAClD,iBAAS,KAAK,IAAI,iBAAiB;AACnC,eAAO,KAAK,cAAc,aAAa,UAAU,SAAU,MAAM;AAC/D,cAAI,QAAQ,iBAAe,MAAM,IAC7B,iBAAiB,MAAM;AAE3B,iBAAO,mBAAmB;AAAA;AAAA;AAAA,OAS7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,eAAO,KAAK,cAAc;AAAA;AAAA,OAQ3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC;AAC3C,eAAO,KAAK,+BAA+B;AAAA;AAAA,OAS5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAQ;AACrC,eAAO,UAAS,KAAK,cAAc,gBAAgB,KAAK,IAAI,iBAAiB;AAAA;AAAA,OAU9E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,YAAI,KAAK,kBAAkB,MAAM;AAC/B,iBAAO;AAAA;AAGT,YAAI,qBAAqB,KAAK,cAAc;AAC5C,eAAO,mBAAmB,IAAI,SAAU,OAAO;AAC7C,cAAI,QAAQ,iBAAe,OAAO,IAC9B,iBAAiB,MAAM,IACvB,QAAQ,MAAM;AAElB,iBAAO,eAAc;AAAA,YACnB,QAAQ,OAAO,IAAI,eAAe;AAAA,aACjC;AAAA;AAAA;AAAA,OAYN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,QAAQ;AACzC,YAAI,YAAY,KAAK,qBAAqB;AAE1C,YAAI,UAAU,YAAY;AACxB,iBAAO;AAAA,YACL;AAAA,YACA;AAAA;AAAA;AAAA;AAAA,OAUL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,YAAY;AACxC,aAAK,cAAc;AAEnB,iBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,GAAG;AAC7C,eAAK,cAAc,gBAAgB,KAAK,IAAI,iBAAiB,WAAW,GAAG,SAAS;AAAA,YAClF,WAAW,WAAW,GAAG;AAAA;AAAA;AAAA;AAAA,OAQ9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,IAAI,kBAAkB,cAAc,KAAK;AAC9C,aAAK,gBAAgB;AAAA;AAAA;AAIzB,WAAO;AAAA;;;ACtST,mCAAO;AAQA,MAAI,iBAAiB;AACrB,MAAI,kBAAkB;AACtB,MAAI,oBAAoB;AAQ/B,8BAA4B,aAAa;AACvC,QAAI,UAAS,iBAAiB,OAAO;AACnC,aAAO;AAAA;AAGT,QAAI,SAAS,YAAY,QACrB,YAAY,YAAY;AAC5B,WAAO,OAAO,UAAU,WAAW,CAAC,gBAAgB,iBAAiB,SAAS;AAAA;AAUzE,8BAA4B,YAAY;AAC7C,QAAI,WAAW,KAAK,SAAU,aAAa;AACzC,aAAO,mBAAmB,iBAAiB;AAAA,QACzC;AACF,aAAO;AAAA;AAGT,QAAI,gBAAgB,WAAW,IAAI,SAAU,MAAM;AACjD,UAAI,SAAS,KAAK;AAClB,aAAO;AAAA;AAGT,WAAO,IAAI,IAAI,eAAe,SAAS,cAAc;AAAA;AAShD,4BAA0B,WAAW;AAC1C,QAAI,cAAc,iBAAiB;AACjC;AAAA,eACS,cAAc,gBAAgB;AACvC,aAAO;AAAA;AAGT,WAAO;AAAA;AASF,gCAA8B,IAAI;AACvC,QAAI,oBAAoB,GAAG,cAAc,IAAI,OAAO;AACpD,WAAO;AAAA;AAWF,oCAAkC,QAAQ,IAAI;AACnD,QAAI,SAAS,KAAK,CAAC,GAAG,YAAY;AAChC,aAAO;AAAA;AAGT,QAAI,MAAM,GAAG,WAAW,WAAW;AACnC,QAAI,cAAc,MAAM,KAAK,KAAK,QAAQ,GAAG,cAAc,IAAI;AAE/D,QAAI,gBAAgB,IAAI;AACtB,aAAO;AAAA;AAGT,WAAO;AAAA;AAWF,oCAAkC,KAAK,QAAQ,YAAY;AAChE,WAAO,QAAQ,MAAM,UAAU,KAAK,aAAa,gBAAgB;AAAA;;;AClHnE,mCAAO;AASP,MAAI,wBAAwB;AAC5B,MAAI,yBAAyB;AAC7B,MAAI,kCAAkC;AACtC,MAAI,oBAAoB;AACxB,MAAI,sBAAsB;AAC1B,MAAI,kBAAkB,oBAAI,IAAI,CAAC,CAAC,gBAAgB,wBAAwB,CAAC,iBAAiB;AAWnF,2BAAyB,qBAAqB,QAAQ,mBAAmB,cAAc;AAC5F,QAAI,aAAa,CAAC;AAElB,QAAI,cAAc;AAChB,iBAAW,KAAK;AAAA;AAGlB,QAAI,sBAAsB,OAAO;AAC/B,iBAAW,KAAK;AAChB,aAAO;AAAA;AAGT,QAAI,cAAc,oBAAoB,qBAAqB;AAE3D,QAAI,UAAU,cAAc;AAC1B,iBAAW,KAAK,gBAAgB,IAAI;AAAA;AAGtC,WAAO;AAAA;AAQF,gCAA8B;AACnC,WAAO,MAAM,KAAK,gBAAgB,UAAU,OAAO,qBAAqB,iCAAiC;AAAA;;;AC/C3G,mCAAO;AAKP,gCAAO;;;ACCA,kCAAgC,WAAW,YAAY,sBAAsB;AAClF,QAAI,SAAS,WAAW;AACxB,WAAO,SAAU,OAAO,WAAW;AACjC,UAAI,iBAAiB,qBAAqB;AAE1C,UAAI,OAAO,UAAU,UAAU;AAC7B,gBAAQ,MAAM,kBAAkB;AAAA;AAGlC,UAAI,OAAO,cAAc,UAAU;AACjC,oBAAY,UAAU,kBAAkB;AAAA;AAG1C,UAAI,UAAU,WAAW;AACvB,eAAO;AAAA;AAGT,UAAI,QAAQ,QAAQ;AAClB,YAAI,QAAQ,YAAY;AACtB,iBAAO;AAAA;AAIT,YAAI,gBAAgB;AAClB,iBAAO,cAAc,QAAQ,sBAAsB;AAAA;AAGrD,eAAO;AAAA;AAGT,UAAI,QAAQ,YAAY;AAEtB,YAAI,gBAAgB;AAClB,iBAAO,cAAc,QAAQ,qBAAqB;AAAA;AAGpD,eAAO;AAAA;AAGT,UAAI,MAAM,UAAU,CAAC,MAAM,YAAY;AACrC,eAAO,cAAc,QAAQ,qBAAqB;AAAA,iBACzC,CAAC,MAAM,UAAU,MAAM,YAAY;AAC5C,eAAO,cAAc,QAAQ,sBAAsB;AAAA,iBAC1C,CAAE,OAAM,UAAU,MAAM,aAAa;AAC9C,gBAAQ,WAAW;AACnB,oBAAY,WAAW;AAAA;AAGzB,UAAI,QAAQ,WAAW;AACrB,eAAO,cAAc,QAAQ,sBAAsB;AAAA;AAGrD,UAAI,QAAQ,WAAW;AACrB,eAAO,cAAc,QAAQ,qBAAqB;AAAA;AAGpD,aAAO;AAAA;AAAA;AAGJ,MAAI,mBAAmB;;;AC3DvB,mCAAgC,WAAW,YAAY,sBAAsB;AAClF,WAAO,SAAU,OAAO,WAAW;AACjC,UAAI,mBAAmB,WAAW;AAClC,UAAI,oBAAoB,WAAW;AACnC,UAAI,iBAAiB,qBAAqB;AAE1C,UAAI,qBAAqB,qBAAqB,MAAM,qBAAqB,MAAM,oBAAoB;AACjG,eAAO;AAAA;AAGT,UAAI,gBAAgB;AAClB,YAAI,QAAQ,QAAQ;AAClB,iBAAO,cAAc,QAAQ,sBAAsB;AAAA;AAGrD,YAAI,QAAQ,YAAY;AACtB,iBAAO,cAAc,QAAQ,qBAAqB;AAAA;AAAA;AAItD,UAAI,MAAM,mBAAmB;AAC3B,eAAO;AAAA;AAGT,UAAI,MAAM,oBAAoB;AAC5B,eAAO;AAAA;AAGT,UAAI,mBAAmB,mBAAmB;AACxC,eAAO,cAAc,QAAQ,sBAAsB;AAAA,iBAC1C,mBAAmB,mBAAmB;AAC/C,eAAO,cAAc,QAAQ,qBAAqB;AAAA;AAGpD,aAAO;AAAA;AAAA;AAGJ,MAAI,oBAAmB;;;ACpCvB,mCAAgC,WAAW,YAAY,sBAAsB;AAClF,QAAI,kBAAkB,WAAW;AACjC,QAAI,oBAAoB,WAAW;AACnC,QAAI,iBAAiB,qBAAqB;AAC1C,WAAO,SAAU,OAAO,WAAW;AACjC,UAAI,eAAe,QAAQ;AAC3B,UAAI,mBAAmB,QAAQ;AAC/B,UAAI,eAAe,eAAe,oBAAoB;AACtD,UAAI,mBAAmB,mBAAmB,oBAAoB;AAC9D,UAAI,sBAAsB,iBAAiB,qBAAqB,iBAAiB;AACjF,UAAI,0BAA0B,qBAAqB,qBAAqB,qBAAqB;AAE7F,UAAI,mBAAmB,OAAO;AAC5B,YAAI,gBAAgB,qBAAqB,OAAO;AAC9C,iBAAO;AAAA;AAGT,YAAI,iBAAiB,SAAS,kBAAkB;AAC9C,iBAAO;AAAA;AAAA;AAKX,UAAI,wBAAwB,SAAS,yBAAyB;AAC5D,eAAO,cAAc,QAAQ,sBAAsB;AAAA;AAIrD,UAAI,uBAAuB,4BAA4B,OAAO;AAC5D,eAAO,cAAc,QAAQ,qBAAqB;AAAA;AAIpD,UAAI,wBAAwB,SAAS,4BAA4B,OAAO;AAEtE,eAAO,uBAA8B,WAAW,YAAY,sBAAsB,OAAO;AAAA;AAG3F,UAAI,iBAAiB,qBAAqB,qBAAqB,iBAAiB;AAC9E,eAAO,cAAc,QAAQ,sBAAsB;AAAA;AAGrD,UAAI,iBAAiB,mBAAmB,qBAAqB,mBAAmB;AAC9E,eAAO,cAAc,QAAQ,qBAAqB;AAAA;AAGpD,aAAO;AAAA;AAAA;AAGJ,MAAI,oBAAmB;;;AC7D9B,uBAAmB;AAYZ,mCAAgC,WAAW,YAAY,sBAAsB;AAClF,WAAO,SAAU,OAAO,WAAW;AACjC,UAAI,iBAAiB,qBAAqB;AAE1C,UAAI,UAAU,WAAW;AACvB,eAAO;AAAA;AAGT,UAAI,QAAQ,QAAQ;AAClB,YAAI,QAAQ,YAAY;AACtB,iBAAO;AAAA;AAIT,YAAI,gBAAgB;AAClB,iBAAO,cAAc,QAAQ,sBAAsB;AAAA;AAGrD,eAAO;AAAA;AAGT,UAAI,QAAQ,YAAY;AAEtB,YAAI,gBAAgB;AAClB,iBAAO,cAAc,QAAQ,qBAAqB;AAAA;AAGpD,eAAO;AAAA;AAGT,UAAI,aAAa,WAAW;AAC5B,UAAI,YAAY,4BAAO,OAAO;AAC9B,UAAI,WAAW,4BAAO,WAAW;AAEjC,UAAI,CAAC,UAAU,WAAW;AACxB,eAAO;AAAA;AAGT,UAAI,CAAC,SAAS,WAAW;AACvB,eAAO;AAAA;AAGT,UAAI,SAAS,QAAQ,YAAY;AAC/B,eAAO,cAAc,QAAQ,sBAAsB;AAAA;AAGrD,UAAI,SAAS,SAAS,YAAY;AAChC,eAAO,cAAc,QAAQ,qBAAqB;AAAA;AAGpD,aAAO;AAAA;AAAA;AAGJ,MAAI,oBAAmB;;;AC3D9B,MAAI,mBAAkB,eAAe;AAArC,MACI,iCAAiC,iBAAgB;AADrD,MAEI,oCAAoC,iBAAgB;AAFxD,MAGI,oCAAoC,iBAAgB;AAExD,MAAI,oBAAmB,eAAe;AAAtC,MACI,yBAAyB,kBAAiB;AAD9C,MAEI,oBAAoB,kBAAiB;AASlC,qCAAmC,MAAM;AAC9C,QAAI,kCAAkC,OAAO;AAC3C,aAAO,kCAAkC;AAAA;AAG3C,WAAO,kCAAkC;AAAA;AAE3C,iCAA+B,mBAAmB;AAClD,iCAA+B,mBAAoB;AACnD,iCAA+B,mBAAgB;AAC/C,iCAA+B,kBAAmB;;;AChClD,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAgBhH,MAAI,gBAA6B,+BAAa,wBAAuB,MAAM;AACzE,sBAAgB,MAAM;AAOtB,SAAK,OAAO;AAOZ,SAAK,OAAO;AAOZ,SAAK,OAAO;AAAA;AAUd,MAAI,aAA0B,2BAAY;AACxC,2BAAsB;AACpB,wBAAgB,MAAM;AAEtB,WAAK,QAAQ;AACb,WAAK,OAAO;AAAA;AASd,mBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,eAAc,MAAM;AACzB,YAAI,OAAO,IAAI,cAAc;AAE7B,YAAI,KAAK,UAAU,MAAM;AACvB,eAAK,QAAQ;AACb,eAAK,OAAO;AAAA,eACP;AACL,cAAI,OAAO,KAAK;AAChB,eAAK,OAAO;AACZ,eAAK,OAAO;AACZ,eAAK,OAAO;AAAA;AAAA;AAAA,OASf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,MAAM;AAC5B,YAAI,OAAO,IAAI,cAAc;AAE7B,YAAI,KAAK,UAAU,MAAM;AACvB,eAAK,QAAQ;AACb,eAAK,OAAO;AAAA,eACP;AACL,cAAI,OAAO,KAAK;AAChB,eAAK,QAAQ;AACb,eAAK,OAAO;AACZ,eAAK,OAAO;AAAA;AAAA;AAAA,OASf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,UAAU;AAChC,YAAI,OAAO,KAAK;AAEhB,eAAO,MAAM;AACX,mBAAS;AACT,iBAAO,KAAK;AAAA;AAAA;AAAA,OAUf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,MAAM;AAC3B,YAAI,KAAK,UAAU,MAAM;AACvB,iBAAO;AAAA;AAGT,YAAI,OAAO,KAAK;AAChB,YAAI;AACJ,YAAI;AAEJ,eAAO,MAAM;AACX,cAAI,KAAK,SAAS,MAAM;AACtB,oBAAO,KAAK;AACZ,mBAAO,KAAK;AAEZ,gBAAI,OAAM;AACR,oBAAK,OAAO;AAAA;AAGd,gBAAI,MAAM;AACR,mBAAK,OAAO;AAAA;AAGd,gBAAI,SAAS,KAAK,OAAO;AACvB,mBAAK,QAAQ;AAAA;AAGf,gBAAI,SAAS,KAAK,MAAM;AACtB,mBAAK,OAAO;AAAA;AAGd,mBAAO;AAAA;AAGT,iBAAO,KAAK;AAAA;AAGd,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,YAAI,OAAO,KAAK;AAChB,YAAI,OAAO,KAAK;AAEhB,eAAO,MAAM;AACX,cAAI,SAAS,MAAM;AACjB,mBAAO;AAAA;AAGT,iBAAO,KAAK;AAEZ,cAAI,SAAS,MAAM;AACjB,mBAAO;AAAA;AAGT,iBAAO,KAAK;AACZ,iBAAO,KAAK;AAEZ,cAAI,SAAS,MAAM;AACjB,mBAAO;AAAA;AAAA;AAAA;AAAA,OAUZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,eAAe;AACpB,YAAI,KAAK,SAAS,MAAM;AACtB,iBAAO;AAAA;AAGT,YAAI,OAAO,KAAK;AAChB,aAAK,OAAO,KAAK,KAAK;AACtB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,KAAK,UAAU,MAAM;AACvB,iBAAO;AAAA;AAGT,YAAI,OAAO,KAAK;AAChB,aAAK,QAAQ,KAAK,MAAM;AACxB,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AAKjC,yBAAiB,SAAS,OAAM;AAC9B,cAAI,CAAC,OAAM;AACT;AAAA;AAGF,kBAAQ,OAAM,MAAK;AACnB,gBAAK,OAAO;AAAA;AAGd,YAAI,CAAC,KAAK,OAAO;AACf;AAAA;AAGF,gBAAQ,KAAK,OAAO,KAAK,MAAM;AAC/B,aAAK,MAAM,OAAO;AAClB,YAAI,OAAO,KAAK;AAChB,aAAK,QAAQ,KAAK;AAClB,aAAK,OAAO;AAAA;AAAA,OAMb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAmB;AACxB,YAAI,CAAC,KAAK,SAAS,CAAC,KAAK,MAAM,MAAM;AACnC;AAAA;AAGF,YAAI,UAAU,KAAK,MAAM;AACzB,YAAI,OAAO,KAAK;AAChB,YAAI;AAEJ,eAAO,SAAS;AACd,iBAAO,QAAQ;AACf,kBAAQ,OAAO;AACf,eAAK,OAAO;AACZ,iBAAO;AACP,oBAAU;AAAA;AAGZ,aAAK,MAAM,OAAO;AAClB,aAAK,KAAK,OAAO;AACjB,eAAO,KAAK;AACZ,aAAK,QAAQ;AACb,aAAK,OAAO;AAAA;AAAA;AAIhB,WAAO;AAAA;AAIT,MAAO,qBAAQ;;;ACnRf,MAAI,yBAAyB,iCAAgC,GAAG,GAAG;AAEjE,QAAI,aAAa,EAAE;AACnB,QAAI,cAAc,EAAE;AAEpB,QAAI,eAAe,aAAa;AAC9B,aAAO;AAAA,eACE,aAAa,aAAa;AACnC,aAAO;AAAA;AAGT,WAAO;AAAA;AAcM,qBAAmB,OAAO;AACvC,QAAI,kBAAkB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC1F,QAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,QAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,MAAM;AAGzF,QAAI,KAAK,IAAI,WAAW,eAAe,GAAG;AACxC,aAAO;AAAA;AAGT,QAAI,cAAc,KAAK,KAAM,cAAa,YAAY;AACtD,cAAU,OAAO,iBAAiB,YAAY;AAC9C,cAAU,OAAO,iBAAiB,aAAa;AAC/C,WAAO,MAAM,OAAO,iBAAiB,YAAY,aAAa;AAAA;AAchE,iBAAe,OAAO,iBAAiB,YAAY,aAAa,UAAU;AACxE,QAAI,eAAe,IAAI;AACvB,QAAI,gBAAgB,IAAI;AACxB,QAAI,WAAW,cAAc;AAC7B,QAAI,YAAY,WAAW;AAC3B,QAAI,UAAU,KAAK,IAAI,UAAU;AACjC,QAAI,OAAO,WAAW;AAEtB,aAAS,KAAK,GAAG,KAAK,SAAS,MAAM,GAAG;AACtC,UAAI,KAAK,UAAU;AACjB,qBAAa,KAAK,MAAM,aAAa;AAAA;AAGvC,UAAI,KAAK,WAAW;AAClB,sBAAc,KAAK,MAAM,cAAc;AAAA;AAAA;AAI3C,QAAI,IAAI;AAER,WAAO,IAAI,MAAM;AACf,UAAI,aAAa,SAAS,cAAc,OAAO;AAC7C,YAAI,gBAAgB,aAAa,MAAM,MAAM,cAAc,MAAM,QAAQ,GAAG;AAC1E,gBAAM,aAAa,KAAK,cAAc,QAAQ;AAAA,eACzC;AACL,gBAAM,aAAa,KAAK,aAAa,QAAQ;AAAA;AAAA,iBAEtC,aAAa,OAAO;AAC7B,cAAM,aAAa,KAAK,aAAa,QAAQ;AAAA,aACxC;AACL,cAAM,aAAa,KAAK,cAAc,QAAQ;AAAA;AAGhD,WAAK;AAAA;AAGP,WAAO;AAAA;;;AC1GF,MAAI,cAAc;AAClB,MAAI,sBAAsB;AAC1B,MAAI,qBAAqB;AAOzB,iBAAc,iBAAiB,kBAAkB;AACtD,QAAI,kBAAiB,kBAAkB;AAEvC,aAAS,OAAO,UAAU,QAAQ,wBAAwB,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,IAAI,OAAO,GAAG,OAAO,MAAM,QAAQ;AAC3H,4BAAsB,OAAO,KAAK,UAAU;AAAA;AAG9C,cAAU,iBAAiB,gBAAe,MAAM,QAAQ;AAAA;;;ARN1D,oBAAkB,KAAK;AAAE,WAAO,kBAAgB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAErH,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAWxD,0BAAwB,eAAe,aAAa;AACzD,WAAO,SAAU,oBAAoB,wBAAwB;AAG3D,UAAI,sBAAsB,SAAS,qBAC/B,UAAS,oBAAoB,MAAM;AAEvC,UAAI,wBAAwB,SAAS,yBACjC,aAAa,sBAAsB,MAAM;AAE7C,aAAO,0BAA0B,QAAQ;AACvC,YAAI,eAAe,cAAc;AACjC,YAAI,aAAa,YAAY;AAC7B,YAAI,QAAQ,QAAO;AACnB,YAAI,YAAY,WAAW;AAC3B,YAAI,iBAAiB,WAAW;AAChC,YAAI,0BAAyB,eAAe,yBAAyB,eAAe,yBAAyB,0BAA0B,WAAW;AAClJ,YAAI,gBAAgB,wBAAuB,cAAc,YAAY,gBAAgB,OAAO;AAE5F,eAAO;AAAA,QACP;AAAA;AAAA;;;AJrDN,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAiBzU,MAAI,aAAY,CAAC;AAAjB,MACI,cAAa,CAAC;AAElB,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,qBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,2BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,UAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,0BAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,UAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,qCAAkC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS,+BAA8B,QAAQ;AAAW,QAAI,KAAK;AAAG,QAAI,OAAO,uBAAuB;AAAE,UAAI,mBAAmB,OAAO,sBAAsB;AAAS,WAAK,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAAE,cAAM,iBAAiB;AAAI,YAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,YAAI,CAAC,OAAO,UAAU,qBAAqB,KAAK,QAAQ;AAAM;AAAU,eAAO,OAAO,OAAO;AAAA;AAAA;AAAU,WAAO;AAAA;AAEne,0CAAuC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS;AAAI,QAAI,aAAa,OAAO,KAAK;AAAS,QAAI,KAAK;AAAG,SAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAAE,YAAM,WAAW;AAAI,UAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,aAAO,OAAO,OAAO;AAAA;AAAQ,WAAO;AAAA;AAe1S,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAgBjM,MAAI,cAAa;AACjB,MAAI,mBAAkB;AAC7B,MAAI,gCAAgC;AACpC,MAAI,iCAAiC;AACrC,yBAAuB,aAAY;AACnC,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAoDvB,MAAI,gBAA6B,yBAAU,aAAa;AAC7D,gBAAU,gBAAe;AAEzB,QAAI,SAAS,eAAa;AAE1B,4BAAuB,aAAa;AAClC,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,sBAAsB;AAQ5B,YAAM,kBAAkB;AAQxB,YAAM,YAAY;AAQlB,YAAM,uBAAuB;AAC7B,aAAO;AAAA;AAUT,mBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc,KAAK;AAAA;AAAA,OAMtC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,sBAAsB,IAAI,oBAAoB,KAAK,KAAK,GAAG,OAAO,KAAK,WAAW;AACvF,aAAK,kBAAkB,IAAI,wBAAgB,SAAU,eAAe;AAClE,cAAI,cAAc,OAAO,IAAI,eAAe;AAE5C,cAAI,gBAAgB,MAAM;AACxB,0BAAc;AAAA;AAGhB,iBAAO,OAAO,wBAAwB;AAAA;AAExC,aAAK,IAAI,kBAAkB,YAAY,GAAG,OAAO,KAAK,WAAW,gBAAgB,KAAK;AACtF,aAAK,QAAQ,qBAAqB,SAAU,QAAQ,IAAI;AACtD,iBAAO,OAAO,oBAAoB,QAAQ;AAAA;AAE5C,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO,wBAAwB,MAAM,QAAQ;AAAA;AAEtD,aAAK,QAAQ,wBAAwB,SAAU,QAAO,QAAQ;AAC5D,iBAAO,OAAO,uBAAuB,QAAO;AAAA;AAE9C,aAAK,QAAQ,aAAa,WAAY;AACpC,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO,gBAAgB,MAAM,QAAQ;AAAA;AAG9C,YAAI,KAAK,IAAI,MAAM;AACjB,eAAK;AAAA;AAGP,eAAK,kBAAgB,eAAc,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM3E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,YAAI,iBAAiB,yBAAwB,QAAQ,IAAI;AACvD,cAAI,oBAAoB,qBAAqB;AAE7C,cAAI,yBAAyB,QAAQ,QAAQ,SAAS,sBAAsB,MAAM;AAChF;AAAA;AAGF,iBAAO,oBAAoB;AAAA;AAI7B,aAAK,IAAI,QAAQ,qBAAqB;AACtC,aAAK,IAAI,YAAY,mBAAmB,WAAY;AAClD,iBAAO,IAAI,WAAW,qBAAqB;AAAA;AAE7C,aAAK,IAAI,eAAe,WAAY;AAClC,cAAI,OAAO,yBAAyB,MAAM;AACxC,mBAAO,IAAI,eAAe,mBAAmB,OAAO,qBAAqB;AAEzE,mBAAO,IAAI,eAAe,cAAc,OAAO;AAAA;AAAA,WAEhD;AACH,aAAK,IAAI,kBAAkB,cAAc,GAAG,OAAO,KAAK,WAAW;AACnE,aAAK,oBAAoB;AACzB,aAAK,kBAAkB;AACvB,aAAK,sBAAsB;AAE3B,eAAK,kBAAgB,eAAc,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAqB5E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,eAAc,YAAY;AAC/B,YAAI,oBAAoB,KAAK;AAE7B,YAAI,yBAAyB,KAAK,yBAAyB;AAC3D,YAAI,eAAe,KAAK,oBAAoB;AAC5C,YAAI,YAAY,KAAK,IAAI,SAAS,oBAAoB,mBAAmB,wBAAwB;AAEjG,YAAI,cAAc,OAAO;AACvB;AAAA;AAGF,YAAI,kBAAkB,WAAW,KAAK,KAAK,yBAAyB,MAAM;AACxE,eAAK,uBAAuB,KAAK,IAAI,eAAe,YAAY,KAAK,WAAW,IAAI;AACpF,eAAK,qBAAqB,UAAU,KAAK,IAAI,eAAe;AAAA;AAG9D,YAAI,cAAc;AAChB,eAAK,oBAAoB,cAAc;AACvC,eAAK,uBAAuB;AAC5B,eAAK,oBAAoB;AAAA;AAG3B,aAAK,IAAI,SAAS,mBAAmB,mBAAmB,eAAe,yBAAyB,mBAAmB;AAEnH,YAAI,cAAc;AAChB,eAAK,IAAI;AAGT,eAAK,IAAI,kBAAkB;AAC3B,eAAK,IAAI,KAAK;AAAA;AAAA;AAAA,OAOjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,aAAK,KAAK;AAAA;AAAA,OAQX;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,KAAK,WAAW,CAAC,KAAK,oBAAoB;AAAA;AAAA,OAWlD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ;AACpC,YAAI,UAAU,SAAS;AACrB,iBAAO,KAAK,oBAAoB,mBAAmB;AAAA;AAGrD,eAAO,KAAK,oBAAoB;AAAA;AAAA,OA2BjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,YAAY;AAExC,YAAI,yBAAyB,KAAK,yBAAyB;AAE3D,YAAI,KAAK,oBAAoB,yBAAyB;AACpD,eAAK,oBAAoB,cAAc;AAAA;AAAA;AAAA,OAa1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAErF,YAAI,MAAM,QAAQ,aAAa;AAC7B,iBAAO,WAAW,MAAM,GAAG;AAAA;AAG7B,eAAO,CAAC;AAAA;AAAA,OAUT;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,aAAa;AAC/C,YAAI,kBAAkB,KAAK,IAAI;AAE/B,eAAO,mBAAmB,gBAAgB,YAAY,MAAM,SAAU,MAAM;AAC1E,cAAI,SAAS,KAAK;AAClB,iBAAO,UAAU,mBAAmB,UAAU;AAAA;AAAA;AAAA,OAYjD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,aAAa;AAC/C,YAAI,SAAS;AAEb,YAAI,kBAAkB,KAAK,oBAAoB;AAE/C,YAAI,4BAA4B,oCAAmC,OAAO;AACxE,cAAI,eAAe,MAAM,QACrB,mBAAmB,0BAAyB,OAAO;AAEvD,iBAAO,gBAAc;AAAA,YACnB,QAAQ,OAAO,IAAI,iBAAiB;AAAA,aACnC;AAAA;AAGL,wBAAgB,gBAAgB,SAAS,aAAa;AACtD,aAAK,IAAI,SAAS,uBAAuB,iBAAiB;AAAA;AAAA,OAW3D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,YAAI,SAAS;AAEb,YAAI,wBAAwB;AAC5B,aAAK,IAAI,SAAS,uBAAuB,iBAAiB;AAC1D,YAAI,kBAAkB,sBAAsB;AAE5C,YAAI,0BAA0B,kCAAiC,OAAO;AACpE,cAAI,iBAAiB,MAAM,QACvB,mBAAmB,0BAAyB,OAAO;AAEvD,iBAAO,gBAAc;AAAA,YACnB,QAAQ,OAAO,IAAI,eAAe;AAAA,aACjC;AAAA;AAGL,YAAI,UAAU,oBAAoB,MAAM,QAAQ,gBAAgB,gBAAgB;AAC9E,0BAAgB,gBAAgB,SAAS,gBAAgB,eAAe;AAAA;AAG1E,eAAO;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,QAAQ;AAC1C,YAAI,YAAY,KAAK,oBAAoB,qBAAqB;AAE9D,YAAI,UAAU,YAAY;AACxB,cAAI,gBAAgB,iBAAiB;AAErC,cAAI,UAAU,gBAAgB;AAC5B,mBAAO;AAAA,cACL;AAAA,cACA,WAAW;AAAA;AAAA;AAIf;AAAA;AAGF,YAAI,cAAc,KAAK,IAAI;AAE3B,YAAI,OAAO,UAAU,WAAW,UAAU,KAAK,SAAS,aAAa;AACnE,iBAAO;AAAA,YACL;AAAA,YACA,WAAW;AAAA;AAAA;AAAA;AAAA,OAkBhB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,gBAAgB;AAChD,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,YAAI,wBAAwB,KAAK,oBAAoB,4BAA4B;AACjF,YAAI,iBAAiB,0BAA0B;AAC/C,YAAI,oBAAoB,KAAK;AAC7B,YAAI,mBAAmB,KAAK,oBAAoB;AAEhD,YAAI,gBAAgB;AAClB,cAAI,YAAY,mBAAmB;AACjC,mBAAO,GAAG,OAAO,qBAAmB,kBAAkB,MAAM,GAAG,yBAAyB,qBAAmB,kBAAkB,MAAM,wBAAwB;AAAA;AAG7J,cAAI,eAAe,+BAA+B;AAChD,mBAAO,GAAG,OAAO,qBAAmB,kBAAkB,MAAM,GAAG,yBAAyB,qBAAmB,kBAAkB,MAAM,wBAAwB,KAAK,CAAC;AAAA,qBACxJ,eAAe,gCAAgC;AACxD,mBAAO,GAAG,OAAO,qBAAmB,kBAAkB,MAAM,GAAG,yBAAyB,CAAC,mBAAmB,qBAAmB,kBAAkB,MAAM,wBAAwB;AAAA;AAAA;AAInL,YAAI,UAAU,mBAAmB;AAC/B,iBAAO,kBAAkB,OAAO;AAAA;AAGlC,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,cAAc;AAClD,YAAI,UAAS,eAAe;AAC1B,cAAI,qBAAqB,aAAa,KAAK;AAE3C,cAAI,UAAS,qBAAqB;AAChC,mBAAO;AAAA;AAAA;AAIX,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAQ;AAC9C,YAAI,qBAAqB,KAAK,IAAI,cAAc,KAAK;AACrD,YAAI,yBAAyB,KAAK,oBAAoB;AACtD,YAAI,WAAW,KAAK,IAAI,YAAY,GAAG;AACvC,YAAI,aAAa,OAAO,eAAe;AAEvC,YAAI,MAAM,QAAQ,WAAW,UAAU;AACrC,iBAAO,OAAO,OAAO,wBAAwB,oBAAoB,KAAK,sBAAsB,WAAW,QAAQ;AAAA,mBACtG,WAAW,WAAW,UAAU;AACzC,iBAAO,OAAO,OAAO,wBAAwB,oBAAoB,KAAK,sBAAsB,WAAW,QAAQ;AAAA;AAGjH,eAAO,OAAO,OAAO,wBAAwB;AAAA;AAAA,OAY9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,QAAQ;AAC3C,YAAI,WAAW,KAAK,IAAI,YAAY,GAAG;AACvC,YAAI,eAAe,OAAO,OAAO;AACjC,qBAAa,KAAK,aAAa,KAAK,gBAAgB,gBAAgB,KAAK,IAAI,iBAAiB;AAC9F,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,cAAc;AAClD,YAAI,WAAW,KAAK,IAAI;AAExB,YAAI,SAAS,WAAW,cAAc;AACpC,iBAAO,SAAS;AAAA;AAGlB,eAAO,eAAe,SAAS;AAAA;AAAA,OAShC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,aAAa;AAClD,YAAI,SAAS;AAEb,YAAI,YAAY,WAAW,GAAG;AAC5B,eAAK,IAAI,eAAe,mBAAmB,KAAK,qBAAqB;AACrE;AAAA;AAGF,YAAI,kBAAkB;AACtB,YAAI,eAAe,KAAK,IAAI;AAE5B,YAAI,0BAA0B,kCAAiC,iBAAgB;AAC7E,iBAAO,SAAS,aAAa,SAAU,YAAY;AACjD,mBAAO,OAAO,IAAI,cAAc,iBAAgB,WAAW;AAAA;AAAA;AAI/D,iBAAS,iBAAiB,GAAG,iBAAiB,KAAK,sBAAsB,eAAe,kBAAkB,GAAG;AAC3G,0BAAgB,KAAK,CAAC,KAAK,IAAI,cAAc,iBAAiB,OAAO,wBAAwB;AAAA;AAG/F,YAAI,gBAAgB,SAAS,iBAAiB,SAAU,eAAe;AACrE,iBAAO,cAAc;AAAA;AAEvB,cAAK,iBAAiB,KAAK,WAAW,SAAS,aAAa,SAAU,YAAY;AAChF,iBAAO,WAAW;AAAA,YAChB,SAAS,aAAa,SAAU,YAAY;AAC9C,iBAAO,OAAO,qBAAqB,WAAW;AAAA;AAGhD,iBAAS,kBAAkB,gBAAgB,QAAQ,kBAAkB,cAAc,mBAAmB,GAAG;AACvG,0BAAgB,KAAK,CAAC,iBAAiB,OAAO,wBAAwB;AAAA;AAGxE,YAAI,eAAe,SAAS,iBAAiB,SAAU,eAAe;AACpE,iBAAO,cAAc;AAAA;AAEvB,YAAI,eAAe,IAAI,IAAI,SAAS,eAAe,SAAU,aAAa,kBAAkB;AAC1F,iBAAO,CAAC,aAAa,aAAa;AAAA;AAEpC,YAAI,qBAAqB,SAAS,KAAK,IAAI,eAAe,sBAAsB,SAAU,eAAe;AACvG,cAAI,aAAa,IAAI,gBAAgB;AACnC,mBAAO,aAAa,IAAI;AAAA;AAG1B,iBAAO;AAAA;AAET,aAAK,IAAI,eAAe,mBAAmB;AAAA;AAAA,OAQ5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,wBAAwB,KAAK;AAEjC,YAAI,UAAS,wBAAwB;AACnC,eAAK,eAAe;AAAA,eACf;AACL,cAAI,kBAAkB,KAAK,IAAI,cAAc,KAAK;AAClD,eAAK,eAAe;AAAA;AAAA;AAAA,OAWvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,iBAAiB;AAC9C,YAAI,UAAS,kBAAkB;AAC7B,eAAK,oBAAoB,2BAA2B;AACpD,cAAI,gBAAgB,gBAAgB;AAEpC,cAAI,MAAM,QAAQ,kBAAkB,UAAS,gBAAgB;AAC3D,iBAAK,KAAK;AAAA;AAAA,eAEP;AAEL,eAAK,IAAI;AAAA;AAAA;AAAA,OAWZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,QAAQ,IAAI;AAC9C,YAAI,oBAAoB,qBAAqB;AAE7C,YAAI,yBAAyB,QAAQ,QAAQ,SAAS,sBAAsB,MAAM;AAChF;AAAA;AAGF,YAAI,0BAA0B,KAAK,qBAAqB,QAAQ,KAAK;AACrE,YAAI,oBAAoB,wBAAwB;AAChD,YAAI,sBAAsB,wBAAwB;AAClD,aAAK,oBAAoB,mBAAmB,KAAK,qBAAqB,QAAQ,mBAAmB;AAAA;AAAA,OAUlG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,mBAAmB;AACrD,oBAAY,mBAAmB,mBAAmB;AAElD,YAAI,KAAK,YAAY,OAAO;AAC1B,mBAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,IAAI,OAAO,GAAG,OAAO,MAAM,QAAQ;AAC1G,iBAAK,OAAO,KAAK,UAAU;AAAA;AAG7B,mBAAS,mBAAmB,gBAAgB,MAAM,QAAQ;AAAA;AAAA;AAAA,OAW7D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,aAAa;AAC5C,eAAK,kBAAgB,eAAc,YAAY,oBAAoB,MAAM,KAAK;AAE9E,YAAI,KAAK,oBAAoB,MAAM;AAEjC,eAAK,gBAAgB,KAAK,KAAK,IAAI,kBAAkB;AAAA;AAGvD,YAAI,UAAU,YAAY,KAAK,aAAa;AAC1C,eAAK,eAAe,YAAY,KAAK;AAAA;AAAA;AAAA,OAUxC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,aAAa;AAC3C,YAAI,gBAAgB,MAAM;AAExB,cAAI,KAAK,IAAI,MAAM;AACjB,iBAAK;AAAA;AAAA;AAAA;AAAA,OAaV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC,QAAO,QAAQ;AACvD,YAAI,0BAA0B,KAAK,qBAAqB,QAAQ,KAAK;AACrE,YAAI,sBAAsB,wBAAwB;AAClD,eAAO,uBAAuB,OAAM,OAAO,aAAa;AAAA;AAAA,OAazD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAO,QAAQ,IAAI,YAAY;AACrE,YAAI,yBAAyB,OAAO,KAAK,OAAO,KAAK,YAAW,OAAO;AACrE;AAAA;AAGF,YAAI,KAAK,0BAA0B,QAAO,OAAO,QAAQ,oBAAoB;AAC3E,qBAAW,SAAS;AAAA;AAAA;AAAA,OAWvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,QAAO,QAAQ;AACpD,YAAI,yBAAyB,OAAO,KAAK,OAAO,KAAK,YAAW,OAAO;AACrE;AAAA;AAGF,YAAI,KAAK,0BAA0B,QAAO,OAAO,MAAM;AACrD,cAAI,oBAAoB;AACtB,iBAAK,IAAI;AACT,iBAAK,IAAI,cAAc,OAAO;AAAA;AAGhC,eAAK,KAAK,KAAK,oBAAoB,OAAO;AAAA;AAAA;AAAA,OAO7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI;AAIJ,QAAC,yBAAwB,KAAK,yBAAyB,QAAQ,0BAA0B,SAAS,SAAS,sBAAsB;AAEjI,eAAK,kBAAgB,eAAc,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAErE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;Aaz6BF,mCAAO;AASP,gCAAO;;;ACrBP,MAAI,MAAI;AACR,MAAI,WAAS;AACb,MAAI,gBAAc;AAClB,MAAI,uBAAsB;AAC1B,MAAI,mBAAkB;AACtB,MAAI,UAAU;AACd,MAAI,UAAQ;AAEZ,MAAI,aAAa,SAAO;AACxB,MAAI,UAAS,SAAO;AACpB,MAAI,QAAQ,KAAK;AACjB,MAAI,SAAS,cAAY;AACzB,MAAI,eAAc,cAAY,GAAG;AACjC,MAAI,aAAa,cAAY,GAAI;AAEjC,MAAI,MAAM,SAAU,GAAG,GAAG,KAAK;AAC7B,WAAO,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG;AAAA;AAGlF,MAAI,MAAM,SAAU,GAAG;AACrB,QAAI,IAAI;AACR,QAAI,KAAK;AACT,WAAO,MAAM,MAAM;AACjB,WAAK;AACL,YAAM;AAAA;AAER,WAAO,MAAM,GAAG;AACd,WAAK;AACL,YAAM;AAAA;AACN,WAAO;AAAA;AAGX,MAAI,WAAW,SAAU,MAAM,GAAG,GAAG;AACnC,QAAI,SAAQ;AACZ,QAAI,KAAK;AACT,WAAO,EAAE,SAAQ,GAAG;AAClB,YAAM,IAAI,KAAK;AACf,WAAK,UAAS,KAAK;AACnB,WAAK,MAAM,KAAK;AAAA;AAAA;AAIpB,MAAI,SAAS,SAAU,MAAM,GAAG;AAC9B,QAAI,SAAQ;AACZ,QAAI,IAAI;AACR,WAAO,EAAE,UAAS,GAAG;AACnB,WAAK,KAAK;AACV,WAAK,UAAS,MAAM,IAAI;AACxB,UAAK,IAAI,IAAK;AAAA;AAAA;AAIlB,MAAI,eAAe,SAAU,MAAM;AACjC,QAAI,SAAQ;AACZ,QAAI,IAAI;AACR,WAAO,EAAE,UAAS,GAAG;AACnB,UAAI,MAAM,MAAM,WAAU,KAAK,KAAK,YAAW,GAAG;AAChD,YAAI,IAAI,QAAO,KAAK;AACpB,YAAI,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,EAAE,UAAU;AAAA;AAAA;AAErD,WAAO;AAAA;AAGX,MAAI,UAAS,QAAM,WAAY;AAC7B,WAAO,WAAW,MAAS,OAAO,WAChC,WAAW,KAAK,OAAO,OACvB,WAAW,OAAO,OAAO,UACzB,WAAW,qBAAuB,OAAO;AAAA,QACvC,CAAC,QAAM,WAAY;AAEvB,eAAW;AAAA;AAKb,MAAE,EAAE,QAAQ,UAAU,OAAO,MAAM,QAAQ,WAAU;AAAA,IACnD,SAAS,iBAAiB,gBAAgB;AACxC,UAAI,SAAS,iBAAgB;AAC7B,UAAI,cAAc,qBAAoB;AACtC,UAAI,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAC3B,UAAI,OAAO;AACX,UAAI,SAAS;AACb,UAAI,GAAG,GAAG,GAAG;AAGb,UAAI,cAAc,KAAK,cAAc;AAAI,cAAM,WAAW;AAE1D,UAAI,UAAU;AAAQ,eAAO;AAC7B,UAAI,UAAU,SAAS,UAAU;AAAM,eAAO,QAAO;AACrD,UAAI,SAAS,GAAG;AACd,eAAO;AACP,iBAAS,CAAC;AAAA;AAEZ,UAAI,SAAS,OAAO;AAClB,YAAI,IAAI,SAAS,IAAI,GAAG,IAAI,MAAM;AAClC,YAAI,IAAI,IAAI,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG;AACxD,aAAK;AACL,YAAI,KAAK;AACT,YAAI,IAAI,GAAG;AACT,mBAAS,MAAM,GAAG;AAClB,cAAI;AACJ,iBAAO,KAAK,GAAG;AACb,qBAAS,MAAM,KAAK;AACpB,iBAAK;AAAA;AAEP,mBAAS,MAAM,IAAI,IAAI,GAAG,IAAI;AAC9B,cAAI,IAAI;AACR,iBAAO,KAAK,IAAI;AACd,mBAAO,MAAM,KAAK;AAClB,iBAAK;AAAA;AAEP,iBAAO,MAAM,KAAK;AAClB,mBAAS,MAAM,GAAG;AAClB,iBAAO,MAAM;AACb,mBAAS,aAAa;AAAA,eACjB;AACL,mBAAS,MAAM,GAAG;AAClB,mBAAS,MAAM,KAAK,CAAC,GAAG;AACxB,mBAAS,aAAa,QAAQ,OAAO,KAAK;AAAA;AAAA;AAG9C,UAAI,cAAc,GAAG;AACnB,YAAI,OAAO;AACX,iBAAS,OAAQ,MAAK,cAClB,OAAO,OAAO,KAAK,cAAc,KAAK,SACtC,aAAY,QAAQ,GAAG,IAAI,eAAe,MAAM,aAAY,QAAQ,IAAI;AAAA,aACvE;AACL,iBAAS,OAAO;AAAA;AAChB,aAAO;AAAA;AAAA;;;AC7Hb,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAW/Q,MAAI,YAAyB,2BAAY;AACvC,wBAAmB,QAAQ,UAAU;AACnC,wBAAgB,MAAM;AAKtB,WAAK,SAAS;AAOd,WAAK,MAAM,KAAK,OAAO;AAQvB,WAAK,YAAY;AAQjB,WAAK,WAAW;AAQhB,WAAK,eAAe;AAQpB,WAAK,kBAAkB;AASvB,WAAK,kBAAkB;AAAA;AAUzB,mBAAa,YAAW,CAAC;AAAA,MACvB,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,YAAI,KAAK,iBAAiB,YAAY;AACpC,iBAAO,KAAK,wBAAwB,KAAK,UAAU;AAAA;AAGrD,eAAO,KAAK,UAAU;AAAA;AAAA,OAQvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,KAAK,iBAAiB,YAAY;AACpC,iBAAO,KAAK,wBAAwB,KAAK;AAAA;AAG3C,eAAO,KAAK;AAAA;AAAA,OAUb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,MAAM;AAC5C,eAAO,KAAK,cAAc,KAAK,KAAK;AAAA;AAAA,OASrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,UAAU;AACtC,YAAI,QAAQ;AAEZ,YAAI,iBAAiB;AACrB,YAAI,gBAAgB;AAEpB,YAAI,CAAC,iBAAiB,OAAO,KAAK,aAAa,YAAY;AACzD,eAAK,eAAe;AACpB;AAAA;AAGF,YAAI,CAAC,eAAe;AAClB,0BAAgB,KAAK;AAAA;AAGvB,kBAAU,eAAe,SAAU,KAAK;AACtC,cAAI,cAAc;AAElB,gBAAM,cAAc,KAAK,aAAa,UAAU,CAAC,CAAC,GAAG,MAAM,IAAI,cAAc;AAE7E,gBAAM,cAAc,KAAK,aAAa,qBAAqB;AAE3D,gBAAM,cAAc,KAAK,aAAa,kBAAkB,IAAI,MAAM;AAElE,gBAAM,cAAc,KAAK,aAAa,qBAAqB,IAAI,MAAM;AAErE,gBAAM,cAAc,KAAK,aAAa,gBAAgB,IAAI;AAE1D,gBAAM,cAAc,KAAK,aAAa,QAAQ;AAE9C,gBAAM,cAAc,KAAK,aAAa,gBAAgB;AAEtD,gBAAM,cAAc,KAAK,aAAa,0BAA0B;AAEhE,gBAAM,cAAc,KAAK,aAAa,0BAA0B;AAEhE,gBAAM,cAAc,KAAK,aAAa,kBAAkB;AAExD,gBAAM,cAAc,KAAK,aAAa,YAAY;AAElD,gBAAM,cAAc,KAAK,aAAa,cAAc;AAEpD,yBAAe,KAAK;AAAA;AAEtB,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,UAAU,UAAU,MAAM,cAAc;AACpE,YAAI,SAAS,YAAY,SAAS,UAAU,QAAQ;AAClD,mBAAS,QAAQ;AACjB;AAAA,mBACS,SAAS,YAAY,SAAS,MAAM,WAAW,GAAG;AAC3D;AAAA;AAGF,YAAI,SAAS,UAAU,QAAQ;AAC7B,cAAI,wBAAwB,OAAO;AACjC,kBAAM;AAAA;AAGR,mBAAS,QAAQ;AAAA,eACZ;AAEL,cAAI,SAAS,oBAAoB,SAAS,mBAAmB;AAC3D,qBAAS,QAAQ,KAAK,IAAI,cAAc,SAAS,QAAQ;AAAA,iBACpD;AACL,qBAAS,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA,OAa/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6CAA6C,QAAQ,QAAO,QAAQ;AACzE,YAAI,KAAK,iBAAiB,YAAY;AACpC;AAAA;AAGF,YAAI,OAAO,OAAO,QAAQ,SAAS,KAAK,QAAQ;AAChD,YAAI,YAAY,KAAK;AACrB,kBAAU,WAAW,SAAU,KAAK;AAClC,cAAI,SAAS,SAAS,IAAI,kBAAkB,QAAO;AACjD,gBAAI,WAAW,cAAc;AAC3B,kBAAI,iBAAiB;AAAA,uBACZ,WAAW,cAAc;AAClC,kBAAI,iBAAiB,KAAK;AAAA;AAAA;AAI9B,cAAI,SAAS,SAAS,IAAI,qBAAqB,QAAO;AACpD,gBAAI,WAAW,cAAc;AAC3B,kBAAI,oBAAoB;AAAA,uBACf,WAAW,cAAc;AAClC,kBAAI,oBAAoB,KAAK;AAAA;AAAA;AAAA;AAInC,aAAK,kBAAkB,WAAW;AAAA;AAAA,OAenC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4CAA4C,QAAQ,QAAO,QAAQ,WAAW,QAAQ;AAC3F,YAAI,SAAS;AAEb,YAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEvF,YAAI,KAAK,iBAAiB,YAAY;AAGpC,cAAI,2BAA2B,qCAAoC;AACjE,mBAAO,IAAI,WAAW,oBAAoB;AAE1C,mBAAO,OAAO;AAAA;AAGhB,eAAK,IAAI,YAAY,oBAAoB;AACzC;AAAA;AAGF,YAAI,OAAO,OAAO,QAAQ,SAAS,KAAK,QAAQ;AAChD,YAAI,aAAa,OAAO,QAAQ,YAAY,KAAK,KAAK;AACtD,YAAI,YAAY,KAAK;AACrB,YAAI,YAAY,OAAO,QAAQ,gBAAgB;AAC/C,YAAI,oBAAoB;AACxB,kBAAU,WAAW,SAAU,KAAK;AAClC,cAAI,SAAS,SAAS,IAAI,kBAAkB,mBAAmB;AAC7D,gBAAI,iBAAiB,aAAa;AAAA;AAGpC,cAAI,SAAS,SAAS,IAAI,qBAAqB,mBAAmB;AAChE,gBAAI,oBAAoB,aAAa;AAAA;AAAA;AAGzC,aAAK,kBAAkB,WAAW,CAAC;AAEnC,YAAI,WAAW;AACb,oBAAU,WAAW,SAAU,UAAU;AACvC,mBAAO,qBAAqB,UAAU,mBAAmB,UAAU,IAAI,UAAU;AAEjF,mBAAO,uBAAuB;AAE9B,mBAAO,uBAAuB;AAAA;AAAA,eAE3B;AACL,oBAAU,WAAW,SAAU,UAAU;AACvC,mBAAO,yBAAyB,UAAU;AAAA;AAAA;AAI9C,YAAI,cAAc;AAChB,eAAK;AAAA;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,UAAU;AAC/C,iBAAS,iBAAiB;AAC1B,iBAAS,oBAAoB;AAAA;AAAA,OAY9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,UAAU,mBAAmB,kBAAkB,SAAQ;AAC1F,kBAAU,SAAS,QAAQ,SAAU,OAAO;AAE1C,cAAI,MAAM,IAAI;AACZ,gBAAI,qBAAqB,MAAM,MAAM,qBAAqB,MAAM,IAAI;AAClE,kBAAI,mBAAmB,MAAM,IAAI;AAC/B,sBAAM,MAAM;AAAA,yBACH,mBAAmB,MAAM,IAAI;AACtC,sBAAM,MAAM;AAAA;AAAA,uBAEL,oBAAoB,MAAM,MAAM,oBAAoB,MAAM,IAAI;AACvE,oBAAM,MAAM;AAEZ,kBAAI,qBAAqB,MAAM,IAAI;AACjC,sBAAM,MAAM;AACZ,sBAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAarB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,UAAU;AAC/C,YAAI,SAAS;AAEb,YAAI,SAAS,SAAS;AACtB,YAAI,YAAY;AAChB,YAAI,aAAa;AACjB,kBAAU,QAAQ,SAAU,OAAO;AACjC,cAAI,WAAW;AAEf,cAAI,MAAM,IAAI;AACZ,qBAAS,IAAI,MAAM,IAAI,KAAK,MAAM,IAAI,KAAK;AACzC,uBAAS,KAAK,OAAO,IAAI,cAAc;AAAA;AAAA,iBAEpC;AACL,qBAAS,KAAK,OAAO,IAAI,cAAc,MAAM;AAAA;AAG/C,qBAAW,KAAK;AAAA;AAElB,kBAAU,YAAY,SAAU,OAAO;AACrC,cAAI,WAAW;AACf,oBAAU,OAAO,SAAU,OAAO,QAAO;AACvC,gBAAI,WAAU,GAAG;AACf,uBAAS,KAAK;AAAA,uBACL,MAAM,YAAW,MAAM,SAAQ,KAAK,GAAG;AAChD,uBAAS,KAAK,MAAM,SAAQ;AAC5B,wBAAU,KAAK;AACf,yBAAW;AACX,uBAAS,KAAK;AAAA;AAGhB,gBAAI,WAAU,MAAM,SAAS,GAAG;AAC9B,uBAAS,KAAK;AACd,wBAAU,KAAK;AAAA;AAAA;AAAA;AAIrB,iBAAS,SAAS;AAAA;AAAA,OAUnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,UAAU,kBAAkB;AACnE,YAAI,SAAS,kBAAkB,SAAS,mBAAmB,GAAG;AAC5D,mBAAS,kBAAkB,SAAS,kBAAkB;AACtD,oBAAU,SAAS,QAAQ,SAAU,SAAS;AAC5C,sBAAU,SAAS,SAAU,YAAY,GAAG;AAC1C,kBAAI,cAAc,kBAAkB;AAClC,wBAAQ,MAAM,SAAS,kBAAkB;AAAA;AAAA;AAAA;AAAA,mBAItC,SAAS,qBAAqB,SAAS,sBAAsB,GAAG;AACzE,mBAAS,qBAAqB,SAAS,qBAAqB;AAC5D,mBAAS,gBAAgB,SAAS,qBAAqB;AAAA;AAAA;AAAA,OAU1D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,SAAS;AAEb,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK;AACzF,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,YAAI,wBAAwB,UAAU,KAAK,SAAU,UAAU;AAC7D,cAAI,iBAAiB,SAAS,kBAAkB;AAChD,cAAI,iBAAiB,SAAS,qBAAqB;AAEnD,cAAI,SAAS,iBAAiB,kBAAkB,OAAO,IAAI,eAAe,SAAS,oBAAoB,kBAAkB,OAAO,IAAI,aAAa;AAC/I,mBAAO;AAAA;AAGT,iBAAO;AAAA;AAGT,YAAI,uBAAuB;AACzB;AAAA;AAGF,aAAK,kBAAkB;AACvB,kBAAU,WAAW,SAAU,UAAU;AACvC,iBAAO,mBAAmB,UAAU;AAAA;AAEtC,aAAK,IAAI,cAAc,KAAK,iBAAiB;AAC7C,aAAK,kBAAkB;AAAA;AAAA,OAMxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,YAAI,SAAS;AAEb,aAAK,kBAAkB;AACvB,kBAAU,KAAK,mBAAmB,SAAU,OAAO;AACjD,iBAAO,kBAAkB;AAEzB,iBAAO,OAAO,UAAU;AAExB,iBAAO,iBAAiB,OAAO;AAAA;AAEjC,aAAK,kBAAkB;AACvB,aAAK,IAAI,cAAc,KAAK,iBAAiB;AAC7C,aAAK,kBAAkB;AAAA;AAAA,OAQxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,SAAS;AAC/C,YAAI,SAAS;AAEb,YAAI,gBAAgB;AACpB,aAAK,kBAAkB;AACvB,kBAAU,SAAS,SAAU,OAAO,KAAK,YAAY;AAEnD,cAAI,GAAG,OAAO,MAAM,MAAM,QAAQ,GAAG,OAAO,MAAM,KAAK;AACrD;AAAA;AAGF,oBAAU,OAAO,mBAAmB,SAAU,UAAU,GAAG;AACzD,gBAAI,OAAO,IAAI,UAAU,WAAW,KAAK,QAAQ,SAAS,gBAAgB,cAAc,QAAQ,OAAO,IAAI;AACzG,4BAAc,KAAK;AAAA;AAAA;AAAA;AAIzB,kBAAU,eAAe,SAAU,OAAO;AACxC,iBAAO,gBAAgB,OAAO,YAAY;AAAA;AAE5C,aAAK,IAAI,cAAc,KAAK,iBAAiB;AAC7C,aAAK,kBAAkB;AAAA;AAAA,OAQxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,UAAU;AACxC,aAAK,kBAAkB;AACvB,aAAK,OAAO,UAAU;AACtB,aAAK,iBAAiB;AACtB,aAAK,kBAAkB;AAAA;AAAA,OASxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,UAAU;AAC3C,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,YAAI,iBAAiB,SAAS,kBAAkB;AAChD,YAAI,iBAAiB,SAAS,qBAAqB;AACnD,YAAI,OAAO,CAAC,KAAK,IAAI,YAAY,SAAS,iBAAiB,KAAK,IAAI,eAAe,SAAS,qBACxF,iBAAiB,KAAK,IACtB,oBAAoB,KAAK;AAE7B,YAAI,sBAAsB,QAAQ,mBAAmB,MAAM;AAEzD,cAAI,WAAW,KAAK,IAAI,YAAY,gBAAgB;AACpD,mBAAS,WAAW;AACpB,mBAAS,YAAY;AAAA;AAGvB,aAAK,gBAAgB,KAAK,CAAC,KAAK,IAAI,YAAY,SAAS,iBAAkB,aAAY,iBAAiB,KAAK,KAAK,IAAI,eAAe,SAAS,oBAAqB,aAAY,iBAAiB,KAAK;AAAA;AAAA,OAUtM;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,UAAU,QAAQ;AACjD,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEjF,YAAI,mBAAmB,KAAK,SAAS,kBAAkB;AACvD,YAAI,mBAAmB,KAAK,SAAS,qBAAqB;AAC1D,YAAI,yBAAyB,KAAK,IAAI,YAAY,SAAS;AAE3D,YAAI,SAAS,kBAAkB,KAAK,IAAI,eAAe,SAAS,qBAAqB,KAAK,IAAI,aAAa;AACzG,eAAK;AACL;AAAA;AAGF,YAAI,uBAAuB,KAAK,IAAI,YAAY,SAAS,iBAAiB;AAE1E,YAAI,yBAAyB,MAAM;AACjC,cAAI,WAAW,KAAK,IAAI,YAAY,sBAAsB,SAAS,oBAAoB;AAEvF,cAAI,WAAW,UAAU,SAAS,aAAa,SAAS,UAAU;AAChE,qBAAS,WAAW,SAAS;AAC7B,qBAAS,YAAY;AAAA;AAAA;AAIzB,YAAI,SAAS,cAAc,CAAC,MAAM,SAAS,SAAS;AAClD,mBAAS,SAAS,SAAS,OAAO,QAAQ,SAAS;AAAA;AAGrD,YAAI,QAAQ;AACV,eAAK,IAAI,cAAc,wBAAwB,SAAS,mBAAmB,SAAS,QAAQ;AAAA,eACvF;AACL,eAAK,gBAAgB,KAAK,CAAC,wBAAwB,SAAS,mBAAmB,SAAS;AAAA;AAG1F,iBAAS,iBAAiB;AAC1B,iBAAS,oBAAoB;AAAA;AAAA,OAQ9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,aAAK;AAAA;AAAA;AAIT,WAAO;AAAA;AAGT,MAAO,oBAAQ;;;AF/mBf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAiBzU,MAAI;AAEJ,mCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAQ1K,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAMjM,MAAI,cAAa;AACjB,MAAI,mBAAkB;AAuDtB,MAAI,gBAA6B,yBAAU,aAAa;AAC7D,gBAAU,gBAAe;AAEzB,QAAI,SAAS,eAAa;AAE1B,4BAAuB,aAAa;AAClC,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,YAAY;AAClB,aAAO;AAAA;AAUT,mBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,WAAW,KAAK,IAAI,cAAc;AACvC,aAAK,YAAY,IAAI,kBAAU,MAAM,KAAK;AAC1C,aAAK,QAAQ,aAAa,WAAY;AACpC,iBAAO,OAAO,YAAY,MAAM,QAAQ;AAAA;AAE1C,aAAK,QAAQ,eAAe,WAAY;AACtC,iBAAO,OAAO,cAAc,MAAM,QAAQ;AAAA;AAE5C,aAAK,QAAQ,mBAAmB,SAAU,QAAO,QAAQ,QAAQ;AAC/D,iBAAO,OAAO,UAAU,oCAAoC,cAAc,QAAO,QAAQ,MAAM;AAAA;AAGjG,aAAK,QAAQ,mBAAmB,SAAU,QAAO,QAAQ,QAAQ;AAC/D,iBAAO,OAAO,UAAU,oCAAoC,cAAc,QAAO,QAAQ,MAAM;AAAA;AAGjG,aAAK,QAAQ,mBAAmB,WAAY;AAC1C,cAAI;AAEJ,mBAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,iBAAK,QAAQ,UAAU;AAAA;AAGzB,iBAAQ,oBAAmB,OAAO,WAAW,oCAAoC,MAAM,kBAAkB,CAAC,cAAc,OAAO;AAAA;AAEjI,aAAK,QAAQ,mBAAmB,WAAY;AAC1C,cAAI;AAEJ,mBAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC7F,iBAAK,SAAS,UAAU;AAAA;AAG1B,iBAAQ,qBAAoB,OAAO,WAAW,oCAAoC,MAAM,mBAAmB,CAAC,cAAc,OAAO;AAAA;AAEnI,aAAK,QAAQ,kBAAkB,SAAU,QAAO,QAAQ,QAAQ;AAC9D,iBAAO,OAAO,UAAU,mCAAmC,cAAc,QAAO,QAAQ,MAAM;AAAA;AAGhG,aAAK,QAAQ,kBAAkB,SAAU,QAAO,QAAQ,QAAQ;AAC9D,iBAAO,OAAO,UAAU,mCAAmC,cAAc,QAAO,QAAQ,MAAM;AAAA;AAGhG,aAAK,QAAQ,kBAAkB,WAAY;AACzC,cAAI;AAEJ,mBAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC7F,iBAAK,SAAS,UAAU;AAAA;AAG1B,iBAAQ,qBAAoB,OAAO,WAAW,mCAAmC,MAAM,mBAAmB,CAAC,cAAc,OAAO;AAAA;AAElI,aAAK,QAAQ,kBAAkB,WAAY;AACzC,cAAI;AAEJ,mBAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC7F,iBAAK,SAAS,UAAU;AAAA;AAG1B,iBAAQ,qBAAoB,OAAO,WAAW,mCAAmC,MAAM,mBAAmB,CAAC,cAAc,OAAO;AAAA;AAElI,aAAK,QAAQ,gBAAgB,WAAY;AACvC,iBAAO,OAAO,eAAe,MAAM,QAAQ;AAAA;AAG7C,eAAK,kBAAgB,eAAc,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM3E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK,YAAY;AACjB,aAAK,WAAW;AAChB,aAAK,kBAAkB;AAAA;AAAA,OASxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,UAAU;AAClC,gBAAQ,SAAS,KAAK;AAAA,eACf;AACH,qBAAS,SAAS,KAAK,aAAa;AACpC;AAAA,eAEG;AACH,qBAAS,SAAS,KAAK,gBAAgB,UAAU,SAAS;AAC1D;AAAA,eAEG;AACH,qBAAS,SAAS,KAAK,gBAAgB,UAAU,SAAS;AAC1D;AAAA,eAEG;AACH,qBAAS,SAAS,KAAK,aAAa;AACpC;AAAA,eAEG;AACH,qBAAS,SAAS,KAAK,iBAAiB;AACxC;AAAA,eAEG;AACH,qBAAS,SAAS,SAAS,eAAe,KAAK,MAAM;AACrD;AAAA;AAGA;AAAA;AAAA;AAAA,OAWL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,UAAU;AACrC,YAAI,SAAS;AAEb,YAAI,MAAM;AACV,mBAAW,SAAS,QAAQ,SAAU,OAAO;AAC3C,iBAAO,OAAO,cAAc,OAAO,SAAS;AAAA;AAE9C,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,UAAU,KAAK;AAC3C,YAAI,MAAM;AACV,YAAI,IAAI,SAAS,MAAM,SAAS;AAChC,YAAI,YAAY;AAChB,YAAI,4BAA4B;AAEhC,WAAG;AACD,sBAAY,KAAK,aAAa,GAAG,QAAQ;AACzC,cAAI,gBAAiB,IAAG,OAAO,WAAW,MAAM,KAAK,MAAM,IAAI,UAAU;AAEzE,cAAI,gBAAgB,2BAA2B;AAC7C,wCAA4B;AAAA;AAG9B,iBAAO,aAAa;AACpB,eAAK;AAAA,iBACE,KAAK,SAAS;AAGvB,eAAO,KAAK,MAAM,MAAM,KAAK,IAAI,IAAI,8BAA8B,KAAK,IAAI,IAAI;AAAA;AAAA,OAWjF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,UAAU,MAAM;AAC9C,YAAI,SAAS;AAEb,YAAI,SAAS;AACb,mBAAW,SAAS,QAAQ,SAAU,OAAO;AAC3C,cAAI,gBAAgB,OAAO,iBAAiB,OAAO,SAAS,cAAc;AAE1E,cAAI,WAAW,QAAQ,kBAAkB,MAAM;AAC7C,qBAAS;AAAA;AAGX,cAAI,kBAAkB,MAAM;AAC1B,oBAAQ;AAAA,mBACD;AACH,yBAAS,KAAK,IAAI,QAAQ;AAC1B;AAAA,mBAEG;AACH,yBAAS,KAAK,IAAI,QAAQ;AAC1B;AAAA;AAGA;AAAA;AAAA;AAAA;AAIR,eAAO,WAAW,OAAO,oBAAoB;AAAA;AAAA,OAY9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,UAAU,KAAK,MAAM;AACpD,YAAI,SAAS;AACb,YAAI,IAAI,SAAS,MAAM,SAAS;AAChC,YAAI;AAEJ,WAAG;AACD,sBAAY,KAAK,aAAa,GAAG,QAAQ;AAEzC,cAAI,WAAW,MAAM;AACnB,qBAAS;AAAA,qBACA,cAAc,MAAM;AAC7B,oBAAQ;AAAA,mBACD;AACH,yBAAS,KAAK,IAAI,QAAQ;AAC1B;AAAA,mBAEG;AACH,yBAAS,KAAK,IAAI,QAAQ;AAC1B;AAAA;AAGA;AAAA;AAAA;AAIN,eAAK;AAAA,iBACE,KAAK,SAAS;AAEvB,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,UAAU,KAAK;AACxC,YAAI;AACJ,YAAI,UAAU;AACd,YAAI,IAAI,SAAS,MAAM,SAAS;AAEhC,WAAG;AACD,sBAAY,KAAK,aAAa,GAAG;AAEjC,cAAI,CAAC,WAAW;AACd,uBAAW;AAAA;AAGb,eAAK;AAAA,iBACE,KAAK,SAAS;AAEvB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,UAAU;AACrC,YAAI,SAAS;AAEb,YAAI,SAAS;AACb,YAAI,SAAS,SAAS;AACtB,mBAAW,QAAQ,SAAU,OAAO;AAClC,cAAI,WAAU,MAAM,OAAO,SAAS,IAAI,MAAM,KAAK,MAAM,KAAK;AAE9D,cAAI,aAAa,OAAO,WAAW,OAAO,SAAS;AAEnD,oBAAU;AACV,oBAAU;AAAA;AAEZ,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,UAAU;AACzC,YAAI,MAAM,KAAK,aAAa;AAC5B,YAAI,eAAe,KAAK,aAAa;AACrC,eAAO,MAAM;AAAA;AAAA,OAWd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,KAAK,KAAK;AACrC,YAAI,iBAAiB,KAAK,IAAI,YAAY;AAC1C,YAAI,oBAAoB,KAAK,IAAI,eAAe;AAChD,YAAI,YAAY,KAAK,IAAI,oBAAoB,KAAK;AAClD,YAAI,gBAAgB;AAEpB,YAAI,mBAAmB,QAAQ,sBAAsB,MAAM;AACzD,0BAAgB,KAAK,IAAI,YAAY,gBAAgB,mBAAmB,aAAa;AAAA;AAGvF,YAAI,cAAc,QAAQ,yBAAyB,IAAI;AACrD,iBAAO;AAAA;AAGT,YAAI,KAAK,UAAU,gBAAgB,cAAc;AAC/C,cAAI,OAAO,cAAc,UAAU;AACjC,wBAAY,UAAU,QAAQ,KAAK;AAAA;AAGrC,sBAAY,WAAW;AAAA;AAGzB,YAAI,MAAM,YAAY;AACpB,cAAI,CAAC,KAAK,UAAU,gBAAgB,wBAAwB;AAC1D,kBAAM,IAAI,MAAM,aAAa,qBAAoB,qBAAkB,wBAAuB,CAAC,mCAAmC,MAAM,yEAAyE,CAAC,mCAAmC,MAAM,+EAA+E,KAAK;AAAA;AAAA;AAI/U,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,aAAK,UAAU,YAAY,KAAK,UAAU;AAC1C,aAAK,UAAU,oBAAoB;AAAA;AAAA,OAUpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAuB,SAAS,QAAQ;AAC7C,YAAI,WAAW,WAAW,yBAAyB,WAAW,uBAAuB,WAAW,YAAY;AAC1G,eAAK,UAAU,wBAAwB;AAAA;AAAA;AAAA,OAY1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,MAAM,YAAY;AAC/C,aAAK,UAAU,oCAAoC,YAAY,KAAK,IAAI,KAAK,QAAQ,MAAM,KAAK;AAChG,aAAK,UAAU,mCAAmC,YAAY,YAAY,KAAK,QAAQ,MAAM,KAAK;AAAA;AAAA,QAElG,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AG9hBF,mCAAO;;;AC5BP,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAU/Q,MAAI,gBAA6B,2BAAY;AAC3C,4BAAuB,cAAc;AACnC,wBAAgB,MAAM;AAEtB,WAAK,YAAY;AACjB,WAAK,eAAe;AACpB,WAAK,SAAS,KAAK;AACnB,WAAK,cAAc,KAAK,OAAO;AAC/B,WAAK,SAAS;AACd,WAAK;AAAA;AAUP,mBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,qBAAqB,GAAG,GAAG;AAChC,aAAK,YAAY,OAAO,GAAG,OAAO,GAAG;AACrC,aAAK,YAAY,MAAM,GAAG,OAAO,GAAG;AAAA;AAAA,OASrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,OAAO,QAAQ;AACrC,YAAI,SAAS,QAAQ;AACnB,cAAI,QAAQ,KAAK;AACjB,gBAAM,MAAM,QAAQ,GAAG,OAAO,OAAO;AACrC,gBAAM,MAAM,SAAS,GAAG,OAAO,QAAQ;AAAA;AAAA;AAAA,OAO1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,QAAQ,KAAK;AACjB,cAAM,MAAM,QAAQ;AACpB,cAAM,MAAM,SAAS;AAAA;AAAA,OAQtB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,OAAO;AACtC,YAAI,QAAQ,KAAK;AACjB,cAAM,WAAW;AAAA;AAAA,OAMlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,aAAK,YAAY,UAAU;AAC3B,aAAK,SAAS;AAAA;AAAA,OAMf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAgB;AACrB,YAAI,CAAC,KAAK,QAAQ;AAChB,eAAK,YAAY,UAAU;AAAA;AAG7B,aAAK,SAAS;AAAA;AAAA,OAQf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAqB;AAC1B,eAAO,KAAK,YAAY,YAAY;AAAA;AAAA,OAQrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,YAAI,UAAU,SAAS;AACvB,aAAK,kBAAkB,QAAQ;AAAA;AAAA,OAQhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,KAAK,kBAAkB;AAAA;AAAA,OAQ/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,aAAa,kBAAkB,KAAK;AAAA;AAAA,OAMjD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,kBAAkB;AAAA;AAAA,OAQxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS,KAAK,aAAa,cAAc;AAC7C,YAAI,WAAW,KAAK,aAAa,cAAc;AAC/C,eAAO,MAAM,UAAU;AACvB,aAAK,YAAY,KAAK,aAAa,cAAc;AACjD,iBAAS,KAAK,WAAW,eAAc;AACvC,aAAK,aAAa,KAAK,YAAY,KAAK;AACxC,iBAAS,QAAQ,eAAc;AAC/B,iBAAS,UAAU,eAAc;AACjC,eAAO,YAAY;AACnB,aAAK,UAAU,YAAY;AAC3B,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,eAAO,KAAK,OAAO,cAAc,IAAI,OAAO,eAAc;AAAA;AAAA,OAM3D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,yBAAyB,KAAK,YAAY,KAAK,UAAU,aAAa;AAC1E,aAAK,OAAO,WAAW,YAAY,KAAK;AACxC,aAAK,SAAS;AACd,aAAK,cAAc;AAEnB,YAAI,wBAAwB;AAC1B,iCAAuB,YAAY,KAAK;AAAA;AAAA;AAAA,QAG1C,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;AAGT,MAAO,wBAAQ;;;ACpOf,gCAAO;;;ACDA,MAAI,MAAM;AAKF,2BAAyB;AACtC,WAAO;AAAA,MACL,MAAM;AAAA;AAAA;;;ADQH,8BAA4B,WAAW;AAC5C,WAAO,SAAS,WAAW,SAAU,OAAO;AAC1C,aAAO;AAAA,QACL,OAAO,MAAM;AAAA,QACb,KAAK,MAAM;AAAA;AAAA;AAAA;AASV,uBAAqB,MAAM;AAChC,WAAO,SAAS,MAAM;AAAA;AAOjB,sBAAoB,MAAM;AAC/B,WAAO,SAAS,MAAM;AAAA;AAOjB,sBAAoB,MAAM;AAC/B,WAAO,SAAS,MAAM;AAAA;AAOjB,+BAA6B,MAAM;AACxC,WAAO,SAAS,MAAM;AAAA;AAOjB,6BAA2B,KAAK;AACrC,QAAI,WAAW,IAAI;AAEnB,QAAI,CAAC,UAAU;AACb,aAAO;AAAA;AAGT,QAAI,SAAS,KAAK,GAAG;AACnB,aAAO;AAAA;AAGT,WAAO;AAAA;AAQF,qCAAmC,WAAW,WAAW;AAC9D,QAAI,UAAU,QAAQ,eAAe,IAAI;AACvC,aAAO;AAAA;AAGT,QAAI,oBAAoB,UAAU,QAAQ,SAAS,IAAI,QAAQ,YAAY,IAAI,QAAQ,YAAY,IAAI,QAAQ,MAAM;AACrH,WAAO,GAAG,OAAO,mBAAmB,KAAK,OAAO;AAAA;AAQ3C,uCAAqC,WAAW,WAAW;AAChE,QAAI,UAAU,QAAQ,eAAe,IAAI;AACvC,aAAO;AAAA;AAGT,QAAI,oBAAoB,UAAU,QAAQ,UAAU,IAAI,QAAQ,YAAY,IAAI,QAAQ,WAAW,IAAI,QAAQ,aAAa,IAAI,QAAQ,MAAM;AAC9I,WAAO,GAAG,OAAO,mBAAmB,KAAK,OAAO;AAAA;AAQ3C,+BAA6B,QAAQ,UAAU;AACpD,QAAI,UAAU;AACd,cAAU,QAAQ,SAAU,OAAO;AACjC,YAAM,OAAO,SAAU,KAAK,KAAK;AAE/B,YAAI,OAAO,KAAK,OAAO,GAAG;AACxB,cAAI,CAAC,QAAQ,MAAM;AACjB,oBAAQ,OAAO;AAAA;AAGjB,kBAAQ,KAAK,OAAO,SAAS,KAAK;AAAA;AAAA;AAAA;AAIxC,WAAO;AAAA;AAUF,iBAAe,QAAQ,MAAM,WAAW,gBAAgB,gBAAgB;AAC7E,cAAU,QAAQ,SAAU,OAAO;AACjC,YAAM,OAAO,SAAU,KAAK,KAAK;AAE/B,YAAI,OAAO,KAAK,OAAO,GAAG;AACxB,8BAAoB,KAAK,KAAK,MAAM,WAAW,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAcvE,+BAA6B,KAAK,KAAK,MAAM,WAAW,gBAAgB,gBAAgB;AACtF,QAAI,WAAW,eAAe,KAAK;AACnC,QAAI,YAAY;AAEhB,QAAI,SAAS,WAAW;AACtB,UAAI,SAAS,YAAY;AACvB,oBAAY,0BAA0B,SAAS,WAAW;AAAA,aACrD;AACL,oBAAY,4BAA4B,SAAS,WAAW;AAAA;AAAA;AAIhE,mBAAe,KAAK,KAAK,aAAa;AAAA;AASjC,qCAAmC,QAAQ,YAAY;AAC5D,QAAI,SAAS;AAEb,QAAI,MAAM,QAAQ,SAAS;AACzB,gBAAU,QAAQ,SAAU,OAAO;AACjC,cAAM,OAAO,SAAU,KAAK,KAAK;AAE/B,cAAI,OAAO,KAAK,OAAO,KAAK,WAAW,KAAK,MAAM;AAChD,qBAAS;AACT,mBAAO;AAAA;AAAA;AAGX,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;AAOF,+BAA6B,OAAO;AAEzC,WAAO,0BAA4B,OAAO,OAAO,aAAa,QAAQ,WAAW,OAAO;AAAA;AAQnF,wBAAsB,MAAM,UAAU;AAC3C,WAAO,CAAC,KAAK,UAAU,CAAE,QAAO,KAAK,WAAW,cAAc,KAAK,OAAO,KAAK;AAAA;AAQjF,2BAAyB,OAAO,WAAW;AACzC,QAAI,SAAS,MAAM,MAAM;AAEzB,aAAS,IAAI,GAAG,IAAI,OAAO,UAAS;AAClC,UAAI,OAAO,GAAG,SAAS,WAAW;AAChC,eAAO;AAAA,aACF;AACL;AAAA;AAAA;AAIJ,WAAO;AAAA;AAST,yBAAuB,OAAO,WAAW;AACvC,QAAI,SAAS,MAAM,MAAM;AACzB,WAAO;AACP,aAAS,gBAAgB,QAAQ;AACjC,WAAO;AACP,WAAO;AAAA;AAUT,sCAAoC,OAAO;AACzC,QAAI,SAAS;AACb,cAAU,OAAO,SAAU,OAAO,QAAO;AACvC,UAAI,SAAQ,GAAG;AACb,YAAI,OAAO,OAAO,SAAS,GAAG,SAAS,MAAM,MAAM;AACjD,iBAAO,KAAK;AAAA;AAAA,aAET;AACL,eAAO,KAAK;AAAA;AAAA;AAGhB,WAAO;AAAA;AAWF,4BAA0B,OAAO;AACtC,QAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,QAAI,SAAS,MAAM,MAAM;AACzB,aAAS,gBAAgB,QAAQ;AACjC,aAAS,cAAc,QAAQ;AAC/B,aAAS,2BAA2B;AACpC,WAAO;AAAA;;;AElRT,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAK/Q,MAAI,wBAAwB;AAC5B,MAAI,qBAAqB;AAQzB,MAAI,gBAA6B,2BAAY;AAC3C,4BAAuB,cAAc;AACnC,wBAAgB,MAAM;AAQtB,WAAK,oBAAoB;AAOzB,WAAK,gBAAgB;AAOrB,WAAK,cAAc;AACnB,WAAK,YAAY;AAAA;AAOnB,mBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,iBAAgB;AACrB,YAAI,QAAQ;AAEZ,aAAK,oBAAoB;AACzB,aAAK,cAAc,WAAW,WAAY;AACxC,cAAI,MAAM,sBAAsB,OAAO;AACrC,kBAAM,cAAc;AAAA;AAAA,WAErB;AAAA;AAAA,OAQJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAc,OAAO;AAC1B,aAAK,oBAAoB;AACzB,aAAK,cAAc;AAAA;AAAA,OAMpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK,oBAAoB;AACzB,qBAAa,KAAK;AAClB,aAAK,cAAc;AAAA;AAAA,OAQpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,SAAS;AAEb,YAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACvF,aAAK,gBAAgB,SAAS,SAAU,OAAO;AAC7C,cAAI,OAAO,mBAAmB;AAC5B,mBAAO,cAAc,QAAQ,MAAM,KAAK,KAAK,MAAM,KAAK;AAAA;AAAA,WAEzD;AAAA;AAAA,OAMJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK;AAAA;AAAA;AAIT,WAAO;AAAA;AAGT,QAAM,eAAe;AACrB,MAAO,wBAAQ;;;AJxHf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,6BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,+BAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,0BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,0BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,0BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAwBjM,MAAI,cAAa;AACjB,MAAI,mBAAkB;AAC7B,MAAI,eAAc,oBAAI;AACtB,MAAI,eAAe;AACnB,MAAI,qBAAqB;AACzB,MAAI,aAAa;AACjB,MAAI,gBAAgB;AA6Db,MAAI,WAAwB,yBAAU,aAAa;AACxD,gBAAU,WAAU;AAEpB,QAAI,SAAS,eAAa;AAE1B,uBAAkB,aAAa;AAC7B,UAAI;AAEJ,wBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,SAAS;AAQf,YAAM,gBAAgB;AAQtB,YAAM,eAAe;AAOrB,YAAM,QAAQ;AAQd,YAAM,0BAA0B;AAChC,mBAAY,IAAI,yBAAuB,QAAQ;AAAA,QAC7C,sBAAsB;AAAA,QACtB,iBAAiB;AAAA;AAEnB,aAAO;AAAA;AAUT,mBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,YAAI,CAAC,KAAK,QAAQ;AAChB,eAAK,SAAS,IAAI,sBAAc,KAAK,IAAI;AAAA;AAG3C,YAAI,CAAC,KAAK,cAAc;AACtB,eAAK,eAAe,IAAI,qBAAa;AAAA;AAGvC,YAAI,CAAC,KAAK,eAAe;AACvB,eAAK,gBAAgB,IAAI,sBAAc,KAAK;AAAA;AAG9C,aAAK,QAAQ,kCAAkC,SAAU,SAAS;AAChE,iBAAO,OAAO,iBAAiB;AAAA;AAEjC,aAAK,QAAQ,iBAAiB,SAAU,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AACjF,iBAAO,OAAO,gBAAgB,IAAI;AAAA;AAEpC,aAAK,QAAQ,2BAA2B,WAAY;AAClD,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,qBAAqB,WAAY;AAC5C,iBAAO,OAAO;AAAA;AAEhB,aAAK,cAAc,aAAa,QAAQ,WAAY;AAClD,iBAAO,OAAO;AAAA;AAEhB,aAAK,cAAc,aAAa,QAAQ,SAAU,KAAK,KAAK;AAC1D,iBAAO,OAAO,WAAW,KAAK;AAAA;AAEhC,aAAK;AAEL,eAAK,kBAAgB,UAAS,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMtE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,UAAS,YAAY,gBAAgB,MAAM,KAAK;AAErE,aAAK,cAAc,YAAY,KAAK;AAAA;AAAA,OAMrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,eAAK,kBAAgB,UAAS,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAQvE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,SAAS;AAEb,YAAI,eAAe,KAAK,IAAI;AAC5B,aAAK,aAAa,iBAAiB,cAAc,aAAa,SAAU,QAAO;AAC7E,iBAAO,OAAO,YAAY;AAAA;AAE5B,aAAK,aAAa,iBAAiB,cAAc,aAAa,SAAU,QAAO;AAC7E,iBAAO,OAAO,YAAY;AAAA;AAE5B,aAAK,aAAa,iBAAiB,cAAc,WAAW,WAAY;AACtE,iBAAO,OAAO;AAAA;AAEhB,aAAK,aAAa,iBAAiB,KAAK,OAAO,mBAAmB,QAAQ,WAAY;AACpF,iBAAO,OAAO;AAAA;AAEhB,aAAK,aAAa,iBAAiB,KAAK,OAAO,mBAAmB,aAAa,SAAU,QAAO;AAC9F,iBAAO,OAAO,kBAAkB;AAAA;AAElC,aAAK,aAAa,iBAAiB,KAAK,OAAO,mBAAmB,WAAW,SAAU,QAAO;AAC5F,iBAAO,OAAO,gBAAgB;AAAA;AAAA;AAAA,OASjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,OAAO;AAC9B,aAAK,QAAQ;AAAA;AAAA,OAMd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,aAAK,QAAQ;AAAA;AAAA,OAUd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAO;AAC7C,YAAI,cAAc,QAAQ,OAAM,QAAQ,MAAM;AAC9C,eAAO,CAAC,CAAE,gBAAe,SAAS,aAAa,oBAAoB,QAAQ,aAAa,CAAC,KAAK,IAAI;AAAA;AAAA,OAUnG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAO;AAC7C,eAAO,KAAK,OAAO,sBAAsB,OAAM;AAAA;AAAA,OAQhD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,OAAO;AAChC,YAAI,CAAC,KAAK,MAAM,MAAM;AACpB,gBAAM,IAAI,MAAM;AAAA;AAGlB,YAAI,cAAc,KAAK,OAAO;AAC9B,YAAI,UAAU;AAEd,YAAI,UAAU,QAAQ,UAAU,QAAQ;AACtC,oBAAU;AAAA,mBACD,gBAAgB,QAAQ,gBAAgB,QAAQ;AACzD,oBAAU;AAAA;AAGZ,YAAI,MAAM,KAAK,MAAM,KAAK;AAC1B,YAAI,MAAM,KAAK,MAAM,KAAK;AAC1B,aAAK,kBAAkB,KAAK,KAAK,kBAAgB,IAAI,oBAAoB;AACzE,aAAK,IAAI;AAAA;AAAA,OAUV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,KAAK,QAAQ,OAAO;AACnD,aAAK,SAAS;AAAA,UACZ,MAAM,IAAI,eAAW,KAAK;AAAA;AAE5B,aAAK,WAAW;AAAA;AAAA,OAQjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEtF,YAAI,CAAC,KAAK,MAAM,MAAM;AACpB,gBAAM,IAAI,MAAM;AAAA;AAGlB,aAAK,IAAI,YAAY,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK;AAE/D,YAAI,aAAa;AACf,eAAK,IAAI;AAAA;AAGX,aAAK;AAAA;AAAA,OAUN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,KAAK,QAAQ;AAC/C,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACtF,aAAK,SAAS;AAAA,UACZ,MAAM,IAAI,eAAW,KAAK;AAAA;AAE5B,aAAK,cAAc;AAAA;AAAA,OAQpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,MAAM,KAAK,MAAM,KAAK;AAC1B,YAAI,SAAS,KAAK,MAAM,KAAK;AAC7B,eAAO,KAAK,eAAe,KAAK,QAAQ;AAAA;AAAA,OAUzC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,KAAK,QAAQ;AAC5C,eAAO,KAAK,eAAe,KAAK,QAAQ;AAAA;AAAA,OAQzC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,YAAI,CAAC,KAAK,MAAM,MAAM;AACpB,gBAAM,IAAI,MAAM;AAAA;AAGlB,YAAI,mBAAmB,KAAK,MAAM,MAC9B,MAAM,iBAAiB,KACvB,MAAM,iBAAiB;AAE3B,YAAI,MAAM,KAAK,MAAM,KAAK,IAAI,oBAAoB,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI,oBAAoB,GAAG;AACtG,iBAAO;AAAA;AAGT,YAAI,OAAO,KAAK,IAAI,YAAY,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK;AACrE,aAAK,cAAc;AACnB,aAAK,OAAO,SAAS,KAAK,gBAAgB,KAAK,cAAc,sBAA8B;AAE3F,YAAI,KAAK,OAAO,QAAQ;AACtB,eAAK,OAAO;AAAA;AAGd,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,KAAK,QAAQ;AACtC,aAAK,SAAS;AAAA,UACZ,MAAM,IAAI,eAAW,KAAK;AAAA;AAE5B,eAAO,KAAK;AAAA;AAAA,OAMb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAgB;AACrB,aAAK,OAAO;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,gBAAgB;AAEpB,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEhF,YAAI,CAAC,SAAU,EAAC,KAAK,MAAM,QAAQ,CAAC,KAAK,OAAO,cAAc;AAC5D;AAAA;AAGF,YAAI,YAAY,KAAK,KACjB,iBAAiB,UAAU,gBAC3B,oBAAoB,UAAU;AAClC,YAAI,oBAAoB,KAAK,MAAM,MAC/B,YAAY,kBAAkB,KAC9B,eAAe,kBAAkB;AACrC,YAAI,gBAAgB,eAAe,6BAA6B;AAChE,YAAI,mBAAmB,kBAAkB,6BAA6B;AAEtE,YAAI,uBAAuB,kBAAkB;AAE7C,YAAI,kBAAkB,MAAM;AAC1B,0BAAgB,eAAe,6BAA6B,eAAe,uBAAuB,WAAW;AAAA;AAG/G,YAAI,qBAAqB,MAAM;AAC7B,6BAAmB,kBAAkB,6BAA6B,kBAAkB,uBAAuB,cAAc;AAAA;AAG3H,YAAI,uBAAuB,kBAAkB;AAC7C,YAAI,0BAA0B,qBAAqB;AACnD,wBAAiB,kBAAiB,mBAAmB,QAAQ,mBAAmB,SAAS,iBAAiB;AAC1G,2BAAoB,qBAAoB,sBAAsB,QAAQ,sBAAsB,SAAS,oBAAoB;AACzH,YAAI,aAAa,KAAK,KAClB,aAAa,WAAW,YACxB,KAAK,WAAW,KAAK;AACzB,YAAI,UAAU,GAAG,SACb,aAAa,GAAG,YAChB,aAAa,GAAG;AACpB,YAAI,oBAAoB,WAAW;AACnC,YAAI,KAAK,QAAQ,QAAQ;AAAA,UACvB,KAAK;AAAA,UACL,KAAK;AAAA;AAEP,YAAI,aAAa,OAAO;AACxB,YAAI,eAAe,0BAA0B,IAAI,QAAQ,wBAAwB;AACjF,YAAI,gBAAgB,wBAAwB,CAAC,uBAAuB,YAAY,MAAM;AACtF,YAAI,gBAAgB,WAAW;AAC/B,YAAI,iBAAiB,WAAW;AAEhC,YAAI,WAAW,uBAAuB,sBAAsB,YAAY;AACtE,2BAAiB,WAAW,WAAW;AAAA;AAGzC,YAAI,WAAW,yBAAyB,sBAAsB,YAAY;AACxE,4BAAkB,WAAW,YAAY;AAAA;AAG3C,YAAI,IAAI,iBAAiB;AACzB,YAAI,IAAI,gBAAgB;AACxB,YAAI,eAAe,KAAK,eAAe,WAAW,cAAc;AAChE,YAAI,WAAW,KAAK,eAAe,WAAW,cAAc;AAE5D,YAAI,cAAc;AAChB,eAAK,OAAO,QAAQ,aAAa,OAAO,aAAa;AAAA,eAChD;AACL,eAAK,OAAO;AAAA;AAGd,aAAK,OAAO,iBAAiB;AAC7B,aAAK,OAAO,YAAY,GAAG;AAAA;AAAA,OAS5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6CAA6C;AAClD,YAAI,WAAW,KAAK,IAAI;AAExB,YAAI,CAAC,UAAU;AACb,iBAAO;AAAA;AAGT,YAAI,aAAa;AACjB,YAAI,OAAO,SAAS;AAEpB,YAAI,KAAK,eAAe,KAAK,KAAK,KAAK,KAAK,qBAAqB;AAC/D,uBAAa;AAAA;AAGf,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,KAAK,QAAQ,YAAY;AACzD,YAAI,aAAa,KAAK,IAAI,YAAY,KAAK,QAAQ;AACnD,YAAI;AAEJ,YAAI,YAAY;AACd,uBAAa,UAAU;AACvB,qBAAW,YAAY;AAAA,eAClB;AACL,uBAAa;AAAA;AAGf,aAAK,IAAI,YAAY,KAAK,QAAQ,cAAc;AAAA;AAAA,OAWjD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,KAAK,QAAQ,UAAU;AACpD,YAAI,WAAW,KAAK,IAAI,YAAY,KAAK;AAEzC,YAAI,CAAC,SAAS,eAAe;AAC3B,iBAAO;AAAA;AAGT,eAAO,SAAS,cAAc;AAAA;AAAA,OAS/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,YAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,IAAI,KAAK,IAAI;AACvC;AAAA;AAGF,YAAI,CAAC,KAAK,2BAA2B,CAAC,KAAK,wBAAwB,SAAQ;AACzE,cAAI,YAAY,QAAQ,OAAM,QAAQ,MAAM;AAC5C,cAAI,cAAc;AAElB,cAAI,WAAW;AACb,0BAAc,KAAK,IAAI,UAAU;AAAA;AAGnC,cAAI,CAAC,aAAa,KAAK,MAAM,QAAQ,eAAgB,MAAK,MAAM,KAAK,QAAQ,YAAY,OAAO,KAAK,MAAM,KAAK,QAAQ,YAAY,MAAM;AACxI,iBAAK;AAAA;AAAA;AAAA;AAAA,OAWV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,YAAI,OAAO,aAAY,IAAI;AAC3B,YAAI,eAAe,KAAK,IAAI;AAE5B,YAAI,KAAK,2BAA2B,KAAK,OAAO,eAAe,SAAS,OAAM,QAAQ,eAAe,KAAK,oBAAoB,OAAM,UAAU,CAAC,KAAK,QAAQ;AAC1J;AAAA;AAGF,aAAK,kBAAkB,aAAa,iBAAiB,OAAM,SAAS,OAAM;AAE1E,YAAI,KAAK,wBAAwB,SAAQ;AACvC,cAAI,QAAQ,IAAI,cAAU,KAAK,IAAI,UAAU,OAAM;AACnD,eAAK,cAAc,KAAK;AAAA,mBACf,UAAU,OAAM,QAAQ,iBAAiB,CAAC,KAAK,wBAAwB,SAAQ;AACxF,eAAK,cAAc;AAAA;AAAA;AAAA,OAStB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAqB;AAC1B,aAAK,0BAA0B;AAAA;AAAA,OAUhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,IAAI,gBAAgB;AAClD,YAAI,eAAe,iBAAiB,eAAe,cAAc,qBAAqB;AACpF,mBAAS,IAAI,eAAe;AAAA;AAAA;AAAA,OAS/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AAAA;AAAA,OASN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,QAAO;AACvC,YAAI,OAAO,aAAY,IAAI;AAC3B,aAAK,uBAAuB;AAAA,UAC1B,OAAO,WAAW,OAAM;AAAA,UACxB,QAAQ,YAAY,OAAM;AAAA;AAAA;AAAA,OAU7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAO;AACrC,YAAI,OAAO,aAAY,IAAI;AAC3B,YAAI,eAAe,WAAW,OAAM;AACpC,YAAI,gBAAgB,YAAY,OAAM;AAEtC,YAAI,iBAAiB,KAAK,qBAAqB,QAAQ,KAAK,kBAAkB,KAAK,qBAAqB,SAAS,GAAG;AAClH,eAAK,kBAAkB,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,kBAAgB,IAAI,YAAY;AAAA,YAC/F,OAAO;AAAA,YACP,QAAQ;AAAA;AAAA;AAAA;AAAA,OAUb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,YAAI,SAAS,KAAK,IAAI;AACtB,aAAK,0BAA0B;AAC/B,aAAK,cAAc;AACnB,aAAK,SAAS;AAAA,UACZ,MAAM,OAAO;AAAA;AAEf,aAAK;AACL,aAAK,IAAI;AACT,aAAK,OAAO;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC;AAC3C,YAAI,SAAS;AAEb,YAAI,SAAS,KAAK,IAAI;AACtB,aAAK,0BAA0B;AAC/B,eAAO,OAAO,SAAU,KAAK,QAAQ;AACnC,cAAI,OAAO,KAAK,UAAU,GAAG;AAC3B,mBAAO,oBAAoB,KAAK,QAAQ;AAAA;AAAA;AAG5C,aAAK,IAAI;AAAA;AAAA,OAQV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC;AAC1C,YAAI,SAAS;AAEb,YAAI,SAAS,KAAK,IAAI;AACtB,aAAK,0BAA0B;AAC/B,eAAO,OAAO,SAAU,KAAK,QAAQ;AACnC,cAAI,OAAO,KAAK,UAAU,GAAG;AAC3B,gBAAI,eAAe,CAAC,CAAC,OAAO,eAAe,KAAK,QAAQ;AAExD,mBAAO,kBAAkB,KAAK,QAAQ,kBAAgB,IAAI,eAAe,CAAC;AAAA;AAAA;AAAA;AAAA,OAW/E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,iBAAgB;AAC/C,YAAI,SAAS;AAEb,YAAI,yBAAyB,mCAAkC;AAC7D,iBAAO,OAAO,IAAI,eAAe,+BAA+B,KAAK,OAAO,IAAI,kBAAkB,+BAA+B;AAAA;AAGnI,wBAAe,MAAM,KAAK;AAAA,UACxB,MAAM;AAAA,WACL;AAAA,UACD,KAAK;AAAA,UACL,MAAM,gBAAgB;AACpB,gBAAI,OAAO,qCAAqC;AAC9C,qBAAO,OAAO,IAAI,oBAAsB;AAAA;AAG1C,mBAAO,OAAO,IAAI,oBAAsB;AAAA;AAAA,UAE1C,UAAU,oBAAoB;AAC5B,mBAAO,OAAO;AAAA;AAAA,UAEhB,UAAU,oBAAoB;AAC5B,gBAAI,CAAC,0BAA0B;AAC7B,qBAAO;AAAA;AAGT,mBAAO,CAAE,QAAO,IAAI,qBAAqB,CAAC,OAAO,IAAI,UAAU;AAAA;AAAA,WAEhE;AAAA,UACD,KAAK;AAAA,UACL,MAAM,gBAAgB;AACpB,mBAAO,KAAK,oBAAsB;AAAA;AAAA,UAEpC,UAAU,oBAAoB;AAC5B,mBAAO,OAAO;AAAA;AAAA,UAEhB,UAAU,oBAAoB;AAC5B,gBAAI,CAAC,0BAA0B;AAC7B,qBAAO;AAAA;AAGT,mBAAO,CAAE,QAAO,IAAI,qBAAqB,CAAC,OAAO,IAAI,UAAU;AAAA;AAAA,WAEhE;AAAA,UACD,KAAK;AAAA,UACL,MAAM,gBAAgB;AACpB,gBAAI,SAAS;AAEb,gBAAI,QAAQ,KAAK,oBAAsB;AACvC,gBAAI,cAAc,0BAA0B,KAAK,wBAAwB,SAAU,KAAK,KAAK;AAC3F,kBAAI,mBAAmB,OAAO,YAAY,KAAK,KAAK;AAEpD,kBAAI,kBAAkB;AACpB,mCAAmB,iBAAiB;AAAA;AAGtC,kBAAI,kBAAkB;AACpB,uBAAO;AAAA;AAAA;AAIX,gBAAI,aAAa;AACf,sBAAQ,oBAAoB;AAAA;AAG9B,mBAAO;AAAA;AAAA,UAET,UAAU,oBAAoB;AAC5B,mBAAO,OAAO;AAAA;AAAA,UAEhB,UAAU,oBAAoB;AAC5B,gBAAI,CAAC,0BAA0B;AAC7B,qBAAO;AAAA;AAGT,mBAAO,CAAE,QAAO,IAAI,qBAAqB,CAAC,OAAO,IAAI,UAAU,yBAAyB,CAAC,OAAO;AAAA;AAAA;AAAA;AAAA,OAWrG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,YAAI,iBAAiB,KAAK,IAAI,cAAc;AAE5C,YAAI,UAAS,iBAAiB;AAC5B,iBAAO,eAAe;AAAA;AAAA;AAAA,OAOzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,KAAK,QAAQ;AACf,eAAK,OAAO;AAAA;AAGd,YAAI,KAAK,eAAe;AACtB,eAAK,cAAc;AAAA;AAGrB,eAAK,kBAAgB,UAAS,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAEhE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AK97BF,oCAAO;;;ACZP,gCAAO;AAIP,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAW/Q,MAAI,kBAA+B,2BAAY;AAC7C,8BAAyB,aAAa;AACpC,yBAAgB,MAAM;AAEtB,WAAK,MAAM;AACX,WAAK,WAAW;AAChB,WAAK,iBAAiB;AAAA;AAWxB,oBAAa,kBAAiB,CAAC;AAAA,MAC7B,KAAK;AAAA,MACL,OAAO,yBAAyB,MAAM,mBAAmB;AACvD,aAAK,SAAS,QAAQ;AAAA;AAAA,OAQvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,UAAU;AAC1C,aAAK,iBAAiB;AAAA;AAAA,OASvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAiB,aAAa;AACnC,YAAI,QAAQ;AAEZ,iBAAS,OAAO,UAAU,QAAQ,SAAS,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,IAAI,OAAO,GAAG,OAAO,MAAM,QAAQ;AAC5G,iBAAO,OAAO,KAAK,UAAU;AAAA;AAG/B,YAAI,eAAe,YAAY,MAAM;AACrC,YAAI,qBAAqB,aAAa;AACtC,YAAI,iBAAiB,aAAa,WAAW,IAAI,aAAa,KAAK;AACnE,YAAI,UAAU,KAAK,SAAS;AAE5B,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,iBAAiB,OAAO,oBAAoB;AAAA;AAG9D,YAAI,kBAAkB,QAAQ,SAAS;AACrC,oBAAU,eAAe,gBAAgB,QAAQ,QAAQ;AAAA;AAG3D,YAAI,QAAQ,aAAa,MAAM;AAC7B;AAAA;AAGF,YAAI,OAAO,QAAQ,aAAa,cAAc,QAAQ,SAAS,KAAK,KAAK,SAAS,MAAM;AACtF;AAAA;AAGF,YAAI,eAAe,SAAS,YAAY;AACtC;AAAA;AAGF,YAAI,YAAY;AAEhB,YAAI,OAAO,QAAQ,aAAa,YAAY;AAC1C,oBAAU,KAAK,QAAQ;AAAA;AAGzB,YAAI,OAAO,KAAK,mBAAmB,YAAY;AAC7C,oBAAU,KAAK,KAAK;AAAA;AAGtB,eAAO,QAAQ,aAAa,KAAK;AACjC,kBAAU,WAAW,SAAU,UAAU;AACvC,iBAAO,SAAS,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA;AAKvC,WAAO;AAAA;AAST,0BAAwB,gBAAgB,aAAa;AACnD,QAAI;AACJ,cAAU,aAAa,SAAU,KAAK;AACpC,UAAI,OAAO,IAAI,MAAM,IAAI,IAAI,MAAM,OAAO;AAE1C,UAAI,MAAM,QAAQ,SAAS,KAAK,OAAO,gBAAgB;AACrD,kBAAU;AACV,eAAO;AAAA;AAAA;AAGX,WAAO;AAAA;AAGT,MAAO,0BAAQ;;;AChIR,MAAI,OAAM;AAKF,2BAAyB;AACtC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,oBAAoB;AAC5B,YAAI,KAAK,gBAAgB,KAAK,KAAK,gBAAgB,GAAG;AACpD,iBAAO;AAAA;AAGT,eAAO,CAAE,MAAK,sBAAsB,CAAC,KAAK,UAAU;AAAA;AAAA,MAEtD,SAAS;AAAA,QACP,OAAO,CAAC;AAAA,UACN,KAAK,GAAG,OAAO,MAAK;AAAA,UACpB,MAAM,gBAAgB;AACpB,gBAAI,QAAQ;AAEZ,gBAAI,QAAQ,KAAK,oBAAsB;AACvC,gBAAI,YAAW,0BAA0B,KAAK,oBAAoB,SAAU,KAAK,KAAK;AACpF,kBAAI,YAAY,MAAM,YAAY,KAAK,KAAK;AAE5C,kBAAI,aAAa,UAAU,QAAQ,cAAc,IAAI;AACnD,uBAAO;AAAA;AAAA;AAIX,gBAAI,WAAU;AACZ,sBAAQ,oBAAoB;AAAA;AAG9B,mBAAO;AAAA;AAAA,UAET,UAAU,oBAAoB;AAC5B,gBAAI,SAAS;AAEb,gBAAI,gBAAgB,KAAK;AACzB,gBAAI,cAAc,oBAAoB,eAAe,SAAU,KAAK,KAAK;AACvE,qBAAO,OAAO,YAAY,KAAK,KAAK;AAAA;AAEtC,gBAAI,OAAO;AACX,gBAAI,YAAY;AAChB,iBAAK,SAAS,uBAAuB,aAAa,eAAe,MAAM;AACvE,kBAAM,eAAe,MAAM,WAAW,SAAU,KAAK,KAAK;AACxD,qBAAO,OAAO,YAAY,KAAK;AAAA,eAC9B,SAAU,KAAK,KAAK,KAAK,OAAO;AACjC,qBAAO,OAAO,YAAY,KAAK,KAAK,KAAK;AAAA;AAE3C,iBAAK;AAAA;AAAA,UAEP,UAAU;AAAA,WACT;AAAA,UACD,KAAK,GAAG,OAAO,MAAK;AAAA,UACpB,MAAM,gBAAgB;AACpB,gBAAI,SAAS;AAEb,gBAAI,QAAQ,KAAK,oBAAsB;AACvC,gBAAI,YAAW,0BAA0B,KAAK,oBAAoB,SAAU,KAAK,KAAK;AACpF,kBAAI,YAAY,OAAO,YAAY,KAAK,KAAK;AAE7C,kBAAI,aAAa,UAAU,QAAQ,gBAAgB,IAAI;AACrD,uBAAO;AAAA;AAAA;AAIX,gBAAI,WAAU;AACZ,sBAAQ,oBAAoB;AAAA;AAG9B,mBAAO;AAAA;AAAA,UAET,UAAU,oBAAoB;AAC5B,gBAAI,SAAS;AAEb,gBAAI,gBAAgB,KAAK;AACzB,gBAAI,cAAc,oBAAoB,eAAe,SAAU,KAAK,KAAK;AACvE,qBAAO,OAAO,YAAY,KAAK,KAAK;AAAA;AAEtC,gBAAI,OAAO;AACX,gBAAI,YAAY;AAChB,iBAAK,SAAS,uBAAuB,aAAa,eAAe,MAAM;AACvE,kBAAM,eAAe,MAAM,WAAW,SAAU,KAAK,KAAK;AACxD,qBAAO,OAAO,YAAY,KAAK;AAAA,eAC9B,SAAU,KAAK,KAAK,KAAK,OAAO;AACjC,qBAAO,OAAO,YAAY,KAAK,KAAK,KAAK;AAAA;AAE3C,iBAAK;AAAA;AAAA,UAEP,UAAU;AAAA,WACT;AAAA,UACD,KAAK,GAAG,OAAO,MAAK;AAAA,UACpB,MAAM,gBAAgB;AACpB,gBAAI,SAAS;AAEb,gBAAI,QAAQ,KAAK,oBAAsB;AACvC,gBAAI,YAAW,0BAA0B,KAAK,oBAAoB,SAAU,KAAK,KAAK;AACpF,kBAAI,YAAY,OAAO,YAAY,KAAK,KAAK;AAE7C,kBAAI,aAAa,UAAU,QAAQ,eAAe,IAAI;AACpD,uBAAO;AAAA;AAAA;AAIX,gBAAI,WAAU;AACZ,sBAAQ,oBAAoB;AAAA;AAG9B,mBAAO;AAAA;AAAA,UAET,UAAU,oBAAoB;AAC5B,gBAAI,SAAS;AAEb,gBAAI,gBAAgB,KAAK;AACzB,gBAAI,cAAc,oBAAoB,eAAe,SAAU,KAAK,KAAK;AACvE,qBAAO,OAAO,YAAY,KAAK,KAAK;AAAA;AAEtC,gBAAI,OAAO;AACX,gBAAI,YAAY;AAChB,iBAAK,SAAS,uBAAuB,aAAa,eAAe,MAAM;AACvE,kBAAM,eAAe,MAAM,WAAW,SAAU,KAAK,KAAK;AACxD,qBAAO,OAAO,YAAY,KAAK;AAAA,eAC9B,SAAU,KAAK,KAAK,KAAK,OAAO;AACjC,qBAAO,OAAO,YAAY,KAAK,KAAK,KAAK;AAAA;AAE3C,iBAAK;AAAA;AAAA,UAEP,UAAU;AAAA,WACT;AAAA,UACD,KAAK,GAAG,OAAO,MAAK;AAAA,UACpB,MAAM,gBAAgB;AACpB,gBAAI,SAAS;AAEb,gBAAI,QAAQ,KAAK,oBAAsB;AACvC,gBAAI,YAAW,0BAA0B,KAAK,oBAAoB,SAAU,KAAK,KAAK;AACpF,kBAAI,YAAY,OAAO,YAAY,KAAK,KAAK;AAE7C,kBAAI,aAAa,UAAU,QAAQ,iBAAiB,IAAI;AACtD,uBAAO;AAAA;AAAA;AAIX,gBAAI,WAAU;AACZ,sBAAQ,oBAAoB;AAAA;AAG9B,mBAAO;AAAA;AAAA,UAET,UAAU,oBAAoB;AAC5B,gBAAI,SAAS;AAEb,gBAAI,gBAAgB,KAAK;AACzB,gBAAI,cAAc,oBAAoB,eAAe,SAAU,KAAK,KAAK;AACvE,qBAAO,OAAO,YAAY,KAAK,KAAK;AAAA;AAEtC,gBAAI,OAAO;AACX,gBAAI,YAAY;AAChB,iBAAK,SAAS,uBAAuB,aAAa,eAAe,MAAM;AACvE,kBAAM,eAAe,MAAM,WAAW,SAAU,KAAK,KAAK;AACxD,qBAAO,OAAO,YAAY,KAAK;AAAA,eAC9B,SAAU,KAAK,KAAK,KAAK,OAAO;AACjC,qBAAO,OAAO,YAAY,KAAK,KAAK,KAAK;AAAA;AAE3C,iBAAK;AAAA;AAAA,UAEP,UAAU;AAAA,WACT;AAAA,UACD,MAAM;AAAA,WACL;AAAA,UACD,KAAK,GAAG,OAAO,MAAK;AAAA,UACpB,MAAM,gBAAgB;AACpB,gBAAI,SAAS;AAEb,gBAAI,QAAQ,KAAK,oBAAsB;AACvC,gBAAI,YAAW,0BAA0B,KAAK,oBAAoB,SAAU,KAAK,KAAK;AACpF,kBAAI,YAAY,OAAO,YAAY,KAAK,KAAK;AAE7C,kBAAI,aAAa,UAAU,QAAQ,aAAa,IAAI;AAClD,uBAAO;AAAA;AAAA;AAIX,gBAAI,WAAU;AACZ,sBAAQ,oBAAoB;AAAA;AAG9B,mBAAO;AAAA;AAAA,UAET,UAAU,oBAAoB;AAC5B,gBAAI,UAAU;AAEd,gBAAI,gBAAgB,KAAK;AACzB,gBAAI,cAAc,oBAAoB,eAAe,SAAU,KAAK,KAAK;AACvE,qBAAO,QAAQ,YAAY,KAAK,KAAK;AAAA;AAEvC,gBAAI,OAAO;AACX,gBAAI,YAAY;AAChB,iBAAK,SAAS,uBAAuB,aAAa,eAAe,MAAM;AACvE,kBAAM,eAAe,MAAM,WAAW,SAAU,KAAK,KAAK;AACxD,qBAAO,QAAQ,YAAY,KAAK;AAAA,eAC/B,SAAU,KAAK,KAAK,KAAK,OAAO;AACjC,qBAAO,QAAQ,YAAY,KAAK,KAAK,KAAK;AAAA;AAE5C,iBAAK;AAAA;AAAA,UAEP,UAAU;AAAA,WACT;AAAA,UACD,KAAK,GAAG,OAAO,MAAK;AAAA,UACpB,MAAM,gBAAgB;AACpB,gBAAI,UAAU;AAEd,gBAAI,QAAQ,KAAK,oBAAsB;AACvC,gBAAI,YAAW,0BAA0B,KAAK,oBAAoB,SAAU,KAAK,KAAK;AACpF,kBAAI,YAAY,QAAQ,YAAY,KAAK,KAAK;AAE9C,kBAAI,aAAa,UAAU,QAAQ,gBAAgB,IAAI;AACrD,uBAAO;AAAA;AAAA;AAIX,gBAAI,WAAU;AACZ,sBAAQ,oBAAoB;AAAA;AAG9B,mBAAO;AAAA;AAAA,UAET,UAAU,oBAAoB;AAC5B,gBAAI,UAAU;AAEd,gBAAI,gBAAgB,KAAK;AACzB,gBAAI,cAAc,oBAAoB,eAAe,SAAU,KAAK,KAAK;AACvE,qBAAO,QAAQ,YAAY,KAAK,KAAK;AAAA;AAEvC,gBAAI,OAAO;AACX,gBAAI,YAAY;AAChB,iBAAK,SAAS,uBAAuB,aAAa,eAAe,MAAM;AACvE,kBAAM,eAAe,MAAM,WAAW,SAAU,KAAK,KAAK;AACxD,qBAAO,QAAQ,YAAY,KAAK;AAAA,eAC/B,SAAU,KAAK,KAAK,KAAK,OAAO;AACjC,qBAAO,QAAQ,YAAY,KAAK,KAAK,KAAK;AAAA;AAE5C,iBAAK;AAAA;AAAA,UAEP,UAAU;AAAA,WACT;AAAA,UACD,KAAK,GAAG,OAAO,MAAK;AAAA,UACpB,MAAM,gBAAgB;AACpB,gBAAI,UAAU;AAEd,gBAAI,QAAQ,KAAK,oBAAsB;AACvC,gBAAI,YAAW,0BAA0B,KAAK,oBAAoB,SAAU,KAAK,KAAK;AACpF,kBAAI,YAAY,QAAQ,YAAY,KAAK,KAAK;AAE9C,kBAAI,aAAa,UAAU,QAAQ,gBAAgB,IAAI;AACrD,uBAAO;AAAA;AAAA;AAIX,gBAAI,WAAU;AACZ,sBAAQ,oBAAoB;AAAA;AAG9B,mBAAO;AAAA;AAAA,UAET,UAAU,oBAAoB;AAC5B,gBAAI,UAAU;AAEd,gBAAI,gBAAgB,KAAK;AACzB,gBAAI,cAAc,oBAAoB,eAAe,SAAU,KAAK,KAAK;AACvE,qBAAO,QAAQ,YAAY,KAAK,KAAK;AAAA;AAEvC,gBAAI,OAAO;AACX,gBAAI,YAAY;AAChB,iBAAK,SAAS,uBAAuB,aAAa,eAAe,MAAM;AACvE,kBAAM,eAAe,MAAM,WAAW,SAAU,KAAK,KAAK;AACxD,qBAAO,QAAQ,YAAY,KAAK;AAAA,eAC/B,SAAU,KAAK,KAAK,KAAK,OAAO;AACjC,qBAAO,QAAQ,YAAY,KAAK,KAAK,KAAK;AAAA;AAE5C,iBAAK;AAAA;AAAA,UAEP,UAAU;AAAA;AAAA;AAAA;AAAA;;;AChSX,MAAI,OAAM;AAKF,6BAA2B;AACxC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,kBAAkB,KAAK,WAAW;AAC1C,YAAI,cAAc,UAAU,GAAG,MAAM;AACrC,YAAI,YAAY,UAAU,GAAG,IAAI;AAEjC,YAAI,KAAK,aAAa;AACpB,eAAK,kBAAkB,GAAG,aAAa,CAAC,CAAC,QAAQ,KAAK,IAAI,UAAU,GAAG,MAAM,KAAK,UAAU,GAAG,IAAI,MAAM,WAAW;AAAA;AAAA;AAAA,MAGxH,UAAU,oBAAoB;AAC5B,YAAI,WAAW,kBAAkB;AAEjC,YAAI,CAAC,UAAU;AACb,iBAAO;AAAA;AAGT,eAAO,CAAC,KAAK,UAAU;AAAA;AAAA;AAAA;;;AC1BtB,MAAI,OAAM;AAKF,4BAA0B;AACvC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,kBAAkB,KAAK,qBAAqB;AACpD,YAAI,qBAAqB,KAAK,UAAU;AACxC,YAAI,aAAa;AAEjB,YAAI,CAAC,oBAAoB;AACvB,cAAI,kBAAkB,oBAAoB,KAAK,IAAI,oBAAoB,SAAS,GAAG;AACnF,uBAAa,gBAAgB,MAAM;AAAA;AAGrC,aAAK,MAAM,cAAc,YAAY,GAAG;AAExC,YAAI,oBAAoB;AACtB,eAAK;AAAA;AAAA;AAAA,MAGT,UAAU,oBAAoB;AAC5B,YAAI,CAAC,KAAK,+BAA+B;AACvC,iBAAO;AAAA;AAGT,YAAI,WAAW,kBAAkB;AAEjC,YAAI,CAAC,UAAU;AACb,iBAAO;AAAA;AAGT,YAAI,KAAK,UAAU,sBAAsB;AACvC,cAAI,eAAe,KAAK;AAExB,iBAAO,iBAAiB;AAAA;AAG1B,eAAO,KAAK,UAAU,2BAA2B,KAAK,eAAe,KAAK,cAAc;AAAA;AAAA,MAE1F,QAAQ,kBAAkB;AACxB,eAAO,CAAC,KAAK,cAAc;AAAA;AAAA;AAAA;;;AC7C1B,MAAI,OAAM;AAKF,6BAA2B;AACxC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,kBAAkB,KAAK,qBAAqB;AACpD,YAAI,qBAAqB,KAAK,UAAU;AACxC,YAAI,cAAc;AAElB,YAAI,oBAAoB;AACtB,wBAAc,KAAK;AAAA,eACd;AACL,cAAI;AAEJ,cAAI,kBAAkB,oBAAoB,KAAK,IAAI,oBAAoB,SAAS,GAAG;AACnF,cAAI,iBAAiB,oBAAoB,QAAQ,oBAAoB,SAAS,SAAU,wBAAuB,gBAAgB,SAAS,QAAQ,yBAAyB,SAAS,SAAS,qBAAqB;AAEhN,wBAAc,UAAU,kBAAkB,iBAAiB,IAAI;AAAA;AAGjE,aAAK,MAAM,cAAc,aAAa,GAAG;AAEzC,YAAI,oBAAoB;AACtB,eAAK;AAAA;AAAA;AAAA,MAGT,UAAU,oBAAoB;AAC5B,YAAI,CAAC,KAAK,+BAA+B;AACvC,iBAAO;AAAA;AAGT,YAAI,WAAW,kBAAkB;AAEjC,YAAI,CAAC,UAAU;AACb,iBAAO;AAAA;AAGT,YAAI,KAAK,UAAU,sBAAsB;AAEvC,iBAAO;AAAA;AAGT,eAAO,KAAK,UAAU,2BAA2B,KAAK,eAAe,KAAK,cAAc;AAAA;AAAA,MAE1F,QAAQ,kBAAkB;AACxB,eAAO,CAAC,KAAK,cAAc;AAAA;AAAA;AAAA;;;ACnD1B,MAAI,OAAM;AAKF,0BAAwB;AACrC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,YAAI,QAAQ;AAEZ,YAAI,QAAQ,KAAK,oBAAsB;AACvC,YAAI,qBAAqB,0BAA0B,KAAK,oBAAoB,SAAU,KAAK,KAAK;AAC9F,iBAAO,MAAM,YAAY,KAAK,KAAK;AAAA;AAGrC,YAAI,oBAAoB;AACtB,kBAAQ,oBAAoB;AAAA;AAG9B,eAAO;AAAA;AAAA,MAET,UAAU,oBAAoB;AAC5B,YAAI,SAAS;AAEb,YAAI,SAAS,KAAK;AAClB,YAAI,qBAAqB,0BAA0B,QAAQ,SAAU,KAAK,KAAK;AAC7E,iBAAO,OAAO,YAAY,KAAK,KAAK;AAAA;AAEtC,kBAAU,QAAQ,SAAU,OAAO;AACjC,gBAAM,OAAO,SAAU,KAAK,KAAK;AAC/B,gBAAI,OAAO,KAAK,OAAO,GAAG;AACxB,qBAAO,YAAY,KAAK,KAAK,YAAY,CAAC;AAAA;AAAA;AAAA;AAIhD,aAAK;AAAA;AAAA,MAEP,UAAU,oBAAoB;AAC5B,YAAI,KAAK,UAAU,sBAAsB;AACvC,iBAAO;AAAA;AAGT,YAAI,KAAK,gBAAgB,KAAK,KAAK,gBAAgB,GAAG;AACpD,iBAAO;AAAA;AAGT,YAAI,CAAC,KAAK,sBAAsB,KAAK,mBAAmB,WAAW,GAAG;AACpE,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA;AAAA;;;ACrDN,MAAI,OAAM;AAKF,sBAAoB;AACjC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,oBAAoB;AAC5B,aAAK;AAAA;AAAA,MAEP,QAAQ,kBAAkB;AACxB,YAAI,WAAW,KAAK,UAAU;AAC9B,eAAO,CAAC,YAAY,CAAC,SAAS;AAAA;AAAA,MAEhC,UAAU,oBAAoB;AAC5B,eAAO,CAAC,KAAK,UAAU,YAAY;AAAA;AAAA;AAAA;;;AChBzC,mCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAKxD,MAAI,OAAM;AAKF,8BAA4B;AACzC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,YAAI,YAAY,KAAK;AACrB,YAAI,aAAa;AAEjB,YAAI,WAAW;AACb,cAAI,UAAU,SAAS,GAAG;AACxB,yBAAa;AAAA,iBACR;AACL,gBAAI,cAAc,iBAAe,UAAU,IAAI,IAC3C,aAAa,YAAY,IACzB,WAAW,YAAY;AAE3B,gBAAI,aAAa,aAAa,GAAG;AAC/B,2BAAa;AAAA;AAAA;AAAA;AAKnB,eAAO,KAAK,oBAAsB,iCAAiC;AAAA;AAAA,MAErE,UAAU,oBAAoB;AAC5B,aAAK,MAAM,cAAc,mCAAmC,KAAK,gBAAgB,MAAM;AAAA;AAAA,MAEzF,UAAU,oBAAoB;AAC5B,YAAI,CAAC,KAAK,+BAA+B;AACvC,iBAAO;AAAA;AAGT,YAAI,WAAW,kBAAkB;AAEjC,YAAI,CAAC,UAAU;AACb,iBAAO;AAAA;AAGT,YAAI,eAAe,KAAK;AAExB,YAAI,KAAK,UAAU,sBAAsB;AAEvC,iBAAO,iBAAiB;AAAA;AAG1B,eAAO,KAAK,UAAU,2BAA2B,iBAAiB;AAAA;AAAA,MAEpE,QAAQ,kBAAkB;AACxB,eAAO,CAAC,KAAK,cAAc;AAAA;AAAA;AAAA;;;AC3EjC,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAKxD,MAAI,OAAM;AAKF,2BAAyB;AACtC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,YAAI,YAAY,KAAK;AACrB,YAAI,aAAa;AAEjB,YAAI,WAAW;AACb,cAAI,UAAU,SAAS,GAAG;AACxB,yBAAa;AAAA,iBACR;AACL,gBAAI,cAAc,iBAAe,UAAU,IAAI,IAC3C,UAAU,YAAY,IACtB,QAAQ,YAAY;AAExB,gBAAI,UAAU,UAAU,GAAG;AACzB,2BAAa;AAAA;AAAA;AAAA;AAKnB,eAAO,KAAK,oBAAsB,8BAA8B;AAAA;AAAA,MAElE,UAAU,oBAAoB;AAG5B,aAAK,MAAM,cAAc,gCAAgC,KAAK,gBAAgB,GAAG;AAAA;AAAA,MAEnF,UAAU,oBAAoB;AAC5B,YAAI,WAAW,kBAAkB;AAEjC,YAAI,CAAC,UAAU;AACb,iBAAO;AAAA;AAGT,YAAI,YAAY,KAAK;AAErB,YAAI,KAAK,UAAU,sBAAsB;AAEvC,iBAAO,cAAc;AAAA;AAGvB,eAAO,KAAK,UAAU,8BAA8B,cAAc;AAAA;AAAA,MAEpE,QAAQ,kBAAkB;AACxB,eAAO,CAAC,KAAK,cAAc;AAAA;AAAA;AAAA;;;AC3E1B,MAAI,QAAM;AAKF,0BAAwB;AACrC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,kBAAkB,KAAK,qBAAqB;AACpD,YAAI,qBAAqB,KAAK,UAAU;AACxC,YAAI,WAAW;AAEf,YAAI,CAAC,oBAAoB;AACvB,cAAI,kBAAkB,oBAAoB,KAAK,IAAI,oBAAoB,SAAS,GAAG;AACnF,qBAAW,gBAAgB,MAAM;AAAA;AAGnC,aAAK,MAAM,cAAc,UAAU,GAAG;AAEtC,YAAI,oBAAoB;AACtB,eAAK;AAAA;AAAA;AAAA,MAGT,UAAU,oBAAoB;AAC5B,YAAI,WAAW,kBAAkB;AAEjC,YAAI,CAAC,UAAU;AACb,iBAAO;AAAA;AAGT,YAAI,KAAK,UAAU,sBAAsB;AACvC,cAAI,YAAY,KAAK;AAErB,iBAAO,cAAc;AAAA;AAGvB,eAAO,KAAK,UAAU,8BAA8B,KAAK,eAAe,KAAK,cAAc;AAAA;AAAA,MAE7F,QAAQ,kBAAkB;AACxB,eAAO,CAAC,KAAK,cAAc;AAAA;AAAA;AAAA;;;ACzC1B,MAAI,QAAM;AAKF,0BAAwB;AACrC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,kBAAkB,KAAK,qBAAqB;AACpD,YAAI,qBAAqB,KAAK,UAAU;AACxC,YAAI,WAAW;AAEf,YAAI,oBAAoB;AACtB,qBAAW,KAAK;AAAA,eACX;AACL,cAAI;AAEJ,cAAI,kBAAkB,oBAAoB,KAAK,IAAI,oBAAoB,SAAS,GAAG;AACnF,cAAI,cAAc,oBAAoB,QAAQ,oBAAoB,SAAS,SAAU,wBAAuB,gBAAgB,SAAS,QAAQ,yBAAyB,SAAS,SAAS,qBAAqB;AAE7M,qBAAW,UAAU,eAAe,cAAc,IAAI;AAAA;AAGxD,aAAK,MAAM,cAAc,UAAU,GAAG;AAEtC,YAAI,oBAAoB;AACtB,eAAK;AAAA;AAAA;AAAA,MAGT,UAAU,oBAAoB;AAC5B,YAAI,WAAW,kBAAkB;AAEjC,YAAI,CAAC,UAAU;AACb,iBAAO;AAAA;AAGT,YAAI,KAAK,UAAU,sBAAsB;AAEvC,iBAAO;AAAA;AAGT,eAAO,KAAK,UAAU,8BAA8B,KAAK,eAAe,KAAK,cAAc;AAAA;AAAA,MAE7F,QAAQ,kBAAkB;AACxB,eAAO,CAAC,KAAK,cAAc;AAAA;AAAA;AAAA;;;ACjD1B,MAAI,QAAM;AAKF,yBAAuB;AACpC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAoB;AAAA;AAAA,MAElC,UAAU;AAAA,MACV,WAAW;AAAA;AAAA;;;ACZR,MAAI,QAAM;AAKF,sBAAoB;AACjC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,oBAAoB;AAC5B,aAAK;AAAA;AAAA,MAEP,QAAQ,kBAAkB;AACxB,YAAI,WAAW,KAAK,UAAU;AAC9B,eAAO,CAAC,YAAY,CAAC,SAAS;AAAA;AAAA,MAEhC,UAAU,oBAAoB;AAC5B,eAAO,CAAC,KAAK,UAAU,YAAY;AAAA;AAAA;AAAA;;;ACpBzC,MAAI;AAIJ,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AA6BpM,MAAI,QAAQ,CAAC,OAAW,OAAW,MAAa,MAAc,MAAc,MAAY,MAAe,OAAM,MAAM,MAAW,MAAW,KAAW;AAE3J,MAAI,mBAAoB,qBAAoB,IAAI,kBAAgB,mBAAmB,KAAW,gBAAgB,kBAAgB,mBAAmB,OAAU,cAAc,kBAAgB,mBAAmB,OAAW,eAAe,kBAAgB,mBAAmB,OAAW,eAAe,kBAAgB,mBAAmB,MAAa,iBAAiB,kBAAgB,mBAAmB,MAAc,kBAAkB,kBAAgB,mBAAmB,MAAc,kBAAkB,kBAAgB,mBAAmB,MAAY,gBAAgB,kBAAgB,mBAAmB,MAAe,mBAAmB,kBAAgB,mBAAmB,OAAM,WAAW,kBAAgB,mBAAmB,MAAM,WAAW,kBAAgB,mBAAmB,MAAW,eAAe,kBAAgB,mBAAmB,MAAW,gBAAgB;AAQ10B,6BAA2B;AAChC,QAAI,QAAQ;AACZ,eAAW,kBAAkB,SAAU,aAAa,KAAK;AACvD,YAAM,OAAO;AAAA;AAEf,WAAO;AAAA;;;AC7CT,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAY/Q,MAAI,eAA4B,2BAAY;AAC1C,2BAAsB,aAAa;AACjC,UAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEvF,yBAAgB,MAAM;AAEtB,WAAK,MAAM;AACX,WAAK,kBAAkB;AACvB,WAAK,sBAAsB;AAAA;AAS7B,oBAAa,eAAc,CAAC;AAAA,MAC1B,KAAK;AAAA,MACL,OAAO,4BAA4B,2BAA2B;AAC5D,YAAI,QAAQ;AAEZ,YAAI,QAAQ;AACZ,aAAK,oBAAoB,SAAS;AAClC,mBAAW,2BAA2B,SAAU,OAAO,KAAK;AAC1D,cAAI,cAAc;AAElB,cAAI,MAAM,SAAS,KAAW;AAC5B,kBAAM,OAAa;AACnB,0BAAc;AAAA,qBACL,MAAM,SAAS,KAAK,MAAM;AACnC,kBAAM,MAAM,MAAM,QAAQ,SAAS,MAAM,MAAM;AAC/C,kBAAM,OAAO;AACb,0BAAc,MAAM;AAAA,iBACf;AACL,kBAAM,MAAM,OAAO;AACnB,0BAAc,MAAM;AAAA;AAGtB,gBAAM,oBAAoB,KAAK;AAAA;AAEjC,aAAK,kBAAkB;AAAA;AAAA,OAUxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAClF,eAAO,UAAU,SAAS,KAAK,qBAAqB,KAAK;AAAA;AAAA;AAI7D,WAAO;AAAA;AAUT,uBAAqB;AACnB,QAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACvF,QAAI,iBAAiB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACzF,QAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,QAAI,SAAS;AACb,QAAI,UAAU;AAEd,QAAI,WAAW,QAAQ,OAAO;AAC5B,gBAAU,QAAQ;AAAA,eACT,CAAC,MAAM,QAAQ,UAAU;AAClC,gBAAU;AAAA;AAGZ,QAAI,UAAS,UAAU;AACrB,iBAAW,SAAS,SAAU,OAAO,KAAK;AACxC,YAAI,OAAO,MAAM,OAAO,UAAU,WAAW,QAAQ;AAErD,YAAI,CAAC,MAAM;AACT,iBAAO;AAAA;AAGT,YAAI,UAAS,QAAQ;AACnB,kBAAO,MAAM;AAAA,mBACJ,OAAO,SAAS,UAAU;AACnC,iBAAO;AAAA,YACL,MAAM;AAAA;AAAA;AAIV,YAAI,KAAK,QAAQ,QAAQ;AACvB,eAAK,MAAM;AAAA;AAGb,eAAO,KAAK;AAAA;AAAA,WAET;AACL,gBAAU,SAAS,SAAU,MAAM,KAAK;AACtC,YAAI,OAAO,MAAM;AAEjB,YAAI,CAAC,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACrC;AAAA;AAGF,YAAI,CAAC,MAAM;AACT,iBAAO;AAAA,YACL;AAAA,YACA,KAAK,GAAG,OAAO;AAAA;AAAA;AAInB,YAAI,UAAS,OAAO;AAClB,kBAAO,MAAM;AAAA;AAGf,YAAI,KAAK,QAAQ,QAAQ;AACvB,eAAK,MAAM;AAAA;AAGb,eAAO,KAAK;AAAA;AAAA;AAIhB,WAAO;AAAA;AAGT,MAAO,uBAAQ;;;ACtJf,gCAAO;;;ACHP,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAU/Q,MAAI,SAAsB,2BAAY;AACpC,qBAAgB,QAAQ,YAAY;AAClC,yBAAgB,MAAM;AAEtB,UAAI,kBAAkB,mBAAmB;AACzC,UAAI,mBAAmB,oBAAoB;AAC3C,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,WAAK,aAAa;AAClB,WAAK,OAAO,KAAK,cAAc;AAE/B,UAAI,KAAK,SAAS,WAAW;AAC3B,eAAM,SAAS,OAAO,KAAK;AAC3B,gBAAO,SAAS,OAAO,MAAM;AAC7B,qBAAa,OAAO,UAAU;AAC9B,oBAAY,OAAO,SAAS;AAC5B,sBAAc;AACd,uBAAe;AACf,gBAAO;AACP,iBAAQ;AAAA,iBACC,KAAK,SAAS,SAAS;AAChC,eAAM,SAAS,OAAO,OAAO;AAC7B,gBAAO,SAAS,OAAO,OAAO;AAC9B,qBAAa,OAAO,OAAO;AAC3B,oBAAY,OAAO,OAAO;AAC1B,sBAAc,OAAM;AACpB,uBAAe,QAAO;AAAA;AAGxB,WAAK,MAAM;AACX,WAAK,cAAc;AACnB,WAAK,OAAO;AACZ,WAAK,eAAe;AACpB,WAAK,YAAY;AACjB,WAAK,aAAa;AAClB,WAAK,aAAa;AAClB,WAAK,YAAY;AAAA;AAUnB,oBAAa,SAAQ,CAAC;AAAA,MACpB,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ;AACpC,YAAI,OAAO;AAEX,YAAI,kBAAkB,OAAO;AAC3B,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,SAAS;AACjC,eAAO,KAAK,eAAe,QAAQ;AAAA;AAAA,OAUpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,SAAS;AACjC,YAAI,iBAAiB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK,WAAW;AACzG,eAAO,KAAK,cAAc,QAAQ,gBAAgB;AAAA;AAAA,OAUnD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,SAAS;AACnC,YAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK,WAAW;AACxG,eAAO,KAAK,eAAe,KAAK,YAAY,QAAQ,eAAe;AAAA;AAAA,OASpE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,SAAS;AAClC,eAAO,KAAK,gBAAgB,QAAQ;AAAA;AAAA;AAIxC,WAAO;AAAA;AAGT,MAAO,iBAAQ;;;AD1Hf,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAgB/Q,MAAI,YAAY;AAMhB,MAAI,OAAoB,2BAAY;AAClC,mBAAc,aAAa,SAAS;AAClC,yBAAgB,MAAM;AAEtB,WAAK,MAAM;AACX,WAAK,UAAU,WAAW;AAAA,QACxB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,WAAW;AAAA,QACX,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,WAAW,KAAK,IAAI,aAAa;AAAA;AAEnC,WAAK,eAAe,IAAI,qBAAa;AACrC,WAAK,YAAY,KAAK,gBAAgB,KAAK,QAAQ;AACnD,WAAK,UAAU;AACf,WAAK,cAAc;AACnB,WAAK,aAAa,KAAK,QAAQ,UAAU;AACzC,WAAK,YAAY;AACjB,WAAK,4BAA4B;AACjC,WAAK,WAAW;AAChB,WAAK,SAAS;AAAA,QACZ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA;AAET,WAAK,uBAAuB;AAC5B,WAAK;AAAA;AASP,oBAAa,OAAM,CAAC;AAAA,MAClB,KAAK;AAAA,MACL,OAAO,2BAA0B;AAC/B,YAAI,QAAQ;AAEZ,YAAI,QAAQ,KAAK,IAAI;AAErB,eAAO,OAAO;AACZ,eAAK,aAAa,iBAAiB,MAAM,UAAU,aAAa,SAAU,QAAO;AAC/E,mBAAO,MAAM,oBAAoB;AAAA;AAEnC,eAAK,aAAa,iBAAiB,MAAM,UAAU,eAAe,SAAU,QAAO;AACjF,mBAAO,MAAM,sBAAsB;AAAA;AAErC,kBAAQ,gBAAgB;AAAA;AAAA;AAAA,OAS3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,WAAW;AACtC,aAAK,YAAY;AAAA;AAAA,OAQlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,eAAO,KAAK,oBAAoB,KAAK,QAAQ,mBAAmB,KAAK,QAAQ,kBAAkB,MAAM;AAAA;AAAA,OAQtG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,eAAO,MAAM,QAAQ,KAAK,QAAQ;AAAA;AAAA,OASnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,MAAM;AAC9B,YAAI,UAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACjF,aAAK,OAAO,QAAQ;AAAA;AAAA,OAQrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,eAAe;AAAA;AAAA,OAS5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,YAAI,SAAS;AAEb,aAAK,cAAc;AACnB,aAAK,UAAU,gBAAgB;AAC/B,aAAK,UAAU,MAAM,UAAU;AAC/B,YAAI,qBAAqB,SAAS,SAAU,KAAK;AAC/C,iBAAO,OAAO,YAAY;AAAA,WACzB;AACH,YAAI,iBAAiB,KAAK,QAAQ,YAAY;AAC9C,YAAI,iBAAiB;AACrB,YAAI,gBAAgB,YAAY,KAAK,WAAW,SAAU,MAAM;AAC9D,cAAI,KAAK,QAAQ,OAAU;AACzB,6BAAiB;AAAA;AAGnB,iBAAO,aAAa,MAAM,OAAO;AAAA;AAGnC,YAAI,cAAc,SAAS,KAAK,CAAC,gBAAgB;AAC/C,wBAAc,KAAK,kBAAkB;AAAA,mBAC5B,cAAc,WAAW,GAAG;AACrC;AAAA;AAGF,wBAAgB,iBAAiB,eAAe;AAChD,YAAI,sBAAsB;AAC1B,YAAI,WAAW;AAAA,UACb,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,aAAa;AAAA,UACb,gBAAgB,wBAAwB,OAAO;AAC7C,gBAAI,UAAU,UAAU,QAAQ,gBAAgB;AAC9C,qBAAO;AAAA;AAGT,mBAAO;AAAA;AAAA,UAET,aAAa;AAAA,UACb,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,SAAS;AAAA,UACT,SAAS,CAAC;AAAA,YACR,MAAM;AAAA,YACN,UAAU,kBAAkB,KAAK,IAAI,KAAK,KAAK,MAAM,OAAO;AAC1D,qBAAO,OAAO,iBAAiB,KAAK,IAAI,KAAK,KAAK,MAAM;AAAA;AAAA;AAAA,UAG5D,eAAe;AAAA,UACf,mBAAmB;AAAA,UACnB,uBAAuB;AAAA,UACvB,wBAAwB;AAAA,UACxB,eAAe,uBAAuB,QAAO;AAC3C,mBAAO,OAAO,gBAAgB;AAAA;AAAA,UAEhC,sBAAsB,8BAA8B,QAAO,QAAQ;AACjE,gBAAI,OAAO,uBAAuB;AAChC,iCAAmB,OAAO;AAAA,mBACrB;AACL,qBAAO,YAAY,OAAO;AAAA;AAAA;AAAA,UAG9B,YAAY,oBAAoB,KAAK;AACnC,mBAAO,cAAc,KAAK,SAAS,MAAY,IAAI;AAAA;AAAA,UAErD,wBAAwB,gCAAgC,QAAO;AAC7D,mBAAM;AAGN,gBAAI,iBAAiB,uBAAuB,OAAO,mBAAmB;AACpE,qBAAO,MAAM;AAAA;AAAA;AAAA,UAGjB,qBAAqB,6BAA6B,QAAO;AACvD,gBAAI,OAAO,mBAAmB;AAC5B,oCAAsB,CAAC,OAAO,iBAAiB,OAAO;AAEtD,qBAAO,eAAe;AAAA;AAAA;AAAA,UAG1B,oBAAoB,4BAA4B,QAAO;AAIrD,gBAAK,EAAC,iBAAiB,CAAC,aAAa,YAAW,uBAAuB,OAAO,mBAAmB;AAM/F,kBAAI,qBAAqB,YAAY;AACnC,2BAAW,WAAY;AACrB,yBAAO,OAAO,MAAM;AAAA,mBACnB;AAAA,qBACE;AACL,uBAAO,MAAM;AAAA;AAAA;AAAA;AAAA,UAInB,eAAe,yBAAyB;AAGtC,gBAAI,CAAC,OAAO,qBAAqB,OAAO,YAAY;AAClD,qBAAO,QAAQ;AAAA;AAAA;AAAA;AAIrB,aAAK,4BAA4B,KAAK,IAAI,cAAc;AACxD,aAAK,IAAI,cAAc,wBAAwB;AAC/C,aAAK,UAAU,IAAI,KAAK,KAAK,WAAW;AACxC,aAAK,QAAQ,QAAQ,aAAa,WAAY;AAC5C,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,QAAQ,kBAAkB,WAAY;AACjD,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK;AACL,aAAK,cAAc;AAAA;AAAA,OAQpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEtF,YAAI,CAAC,KAAK,YAAY;AACpB;AAAA;AAGF,YAAI,eAAe,KAAK,YAAY;AAClC,eAAK,WAAW;AAAA,eACX;AACL,eAAK;AACL,eAAK,UAAU,MAAM,UAAU;AAC/B,eAAK;AACL,eAAK,QAAQ;AACb,eAAK,UAAU;AACf,eAAK,IAAI,cAAc,wBAAwB,KAAK;AACpD,eAAK,cAAc;AAEnB,cAAI,KAAK,YAAY;AACnB,iBAAK,WAAW,QAAQ;AAAA;AAAA;AAAA;AAAA,OAW7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,KAAK;AAC/B,YAAI,CAAC,KAAK,SAAS;AACjB,iBAAO;AAAA;AAGT,YAAI,OAAO,KAAK,QAAQ,QAAQ,KAAK;AACrC,aAAK;AAEL,YAAI,CAAC,QAAQ,CAAC,WAAW,OAAO;AAC9B,iBAAO;AAAA;AAGT,YAAI,WAAW,KAAK,QAAQ,mBAAmB;AAC/C,YAAI,UAAU,IAAI,MAAK,KAAK,KAAK;AAAA,UAC/B,QAAQ;AAAA,UACR,MAAM,SAAS;AAAA,UACf,WAAW,KAAK,QAAQ;AAAA,UACxB,gBAAgB;AAAA,UAChB,WAAW,KAAK,QAAQ;AAAA;AAE1B,gBAAQ,aAAa,SAAS,QAAQ;AACtC,gBAAQ;AACR,gBAAQ,YAAY,KAAK;AACzB,aAAK,YAAY,SAAS,OAAO;AACjC,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,KAAK;AAChC,YAAI,WAAW,KAAK,QAAQ,mBAAmB;AAC/C,YAAI,QAAQ,KAAK,YAAY,SAAS;AAEtC,YAAI,OAAO;AACT,gBAAM;AACN,iBAAO,KAAK,YAAY,SAAS;AAAA;AAAA;AAAA,OAOpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,SAAS;AAEb,kBAAU,KAAK,QAAQ,WAAW,SAAU,OAAO,KAAK;AACtD,iBAAO,OAAO,aAAa;AAAA;AAAA;AAAA,OAS9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,eAAO,OAAO,KAAK,KAAK,aAAa,WAAW;AAAA;AAAA,OAMjD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,6BAA6B,KAAK,UAAU;AAChD,aAAK;AACL,aAAK;AACL,aAAK,aAAa;AAClB,aAAK,aAAa;AAElB,YAAI,4BAA4B;AAC9B,qCAA2B,YAAY,KAAK;AAAA;AAAA;AAAA,OAS/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,KAAK,YAAY;AAAA;AAAA,OAQzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAO;AACpC,YAAI,CAAC,KAAK,cAAc,CAAC,KAAK,mBAAmB;AAC/C;AAAA;AAGF,YAAI,eAAe,KAAK;AACxB,aAAK,cAAc,UAAU,cAAc;AAE3C,YAAI,KAAK,iBAAiB,eAAe;AACvC;AAAA;AAGF,YAAI,YAAY,KAAK,IAAI;AACzB,YAAI,sBAAsB,YAAY,mBAAmB,aAAa;AACtE,aAAK,cAAc,kBAAkB,aAAa,KAAK,qBAAqB;AAE5E,YAAI,KAAK,aAAa;AACpB,eAAK,WAAW,cAAc,kBAAkB,aAAa,KAAK,qBAAqB;AAAA;AAAA;AAAA,OAa1F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,mBAAmB;AAClD,YAAI,YAAY,kBAAkB,WAC9B,cAAc,kBAAkB,MAChC,WAAW,kBAAkB,UAC7B,UAAU,kBAAkB;AAChC,YAAI,iBAAiB,aAAa,QAAQ,OAAO,aAAa,cAAc,SAAS,KAAK,KAAK,SAAS;AACxG,eAAO,cAAc,SAAS,gBAAgB,OAAa,mBAAmB,QAAQ;AAAA;AAAA,OAQvF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAQ;AAClC,YAAI,SAAS,IAAI,eAAO,QAAQ,KAAK,UAAU,cAAc;AAE7D,YAAI,KAAK,QAAQ,gBAAgB;AAC/B,cAAI,OAAO,UAAU,KAAK,YAAY;AACpC,iBAAK,uBAAuB;AAAA,qBACnB,OAAO,UAAU,KAAK,YAAY;AAC3C,iBAAK,uBAAuB;AAAA,iBACvB;AACL,iBAAK,uBAAuB;AAAA;AAG9B,cAAI,OAAO,YAAY,KAAK,YAAY;AACtC,iBAAK,2BAA2B;AAAA,iBAC3B;AACL,iBAAK,0BAA0B;AAAA;AAAA,eAE5B;AACL,eAAK,uBAAuB;AAC5B,eAAK,2BAA2B;AAAA;AAAA;AAAA,OASnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,QAAQ;AAC7C,YAAI,OAAM,KAAK,OAAO,QAAQ,OAAO,MAAM,KAAK,UAAU;AAE1D,YAAI,KAAK,aAAa;AACpB,iBAAM,OAAO,MAAM,OAAO,aAAa,KAAK,UAAU,eAAe;AAAA;AAGvE,aAAK,UAAU,MAAM,MAAM,GAAG,OAAO,MAAK;AAAA;AAAA,OAQ3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,QAAQ;AAC7C,YAAI,OAAM,KAAK,OAAO,QAAQ,OAAO,MAAM;AAE3C,YAAI,KAAK,aAAa;AACpB,iBAAM,OAAO,MAAM;AAAA;AAGrB,aAAK,UAAU,MAAM,MAAM,GAAG,OAAO,MAAK;AAAA;AAAA,OAQ3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC,QAAQ;AACjD,YAAI;AAEJ,YAAI,KAAK,aAAa;AACpB,kBAAO,IAAI,OAAO,OAAO,OAAO;AAAA,eAC3B;AACL,kBAAO,KAAK,OAAO,QAAQ,IAAI,OAAO;AAAA;AAGxC,aAAK,UAAU,MAAM,OAAO,GAAG,OAAO,OAAM;AAAA;AAAA,OAQ7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC,QAAQ;AAChD,YAAI,iBAAiB,kBAAkB,KAAK,IAAI;AAChD,YAAI,QAAO,KAAK,OAAO,OAAO,OAAO,OAAO,KAAK,UAAU,cAAc,iBAAiB;AAC1F,aAAK,UAAU,MAAM,OAAO,GAAG,OAAO,OAAM;AAAA;AAAA,OAM7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,OAAO,KAAK,QAAQ,QAAQ,GAAG;AAEnC,YAAI,YAAY,SAAS,WAAW,SAAS,oBAAoB,OAAO;AACtE,eAAK,eAAe,GAAG;AAAA,eAClB;AACL,eAAK,QAAQ,WAAW,GAAG;AAAA;AAAA;AAAA,OAO9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,YAAI,UAAU,KAAK,QAAQ,cAAc;AACzC,YAAI,OAAO,KAAK,QAAQ,QAAQ,SAAS;AAEzC,YAAI,YAAY,SAAS,WAAW,SAAS,oBAAoB,OAAO;AACtE,eAAK,eAAe,SAAS;AAAA,eACxB;AACL,eAAK,QAAQ,WAAW,SAAS;AAAA;AAAA;AAAA,OAUpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,KAAK,KAAK;AACvC,YAAI,UAAU,MAAM;AACpB,YAAI,OAAO,UAAU,KAAK,QAAQ,cAAc,KAAK,QAAQ,QAAQ,SAAS,OAAO;AAErF,YAAI,CAAC,MAAM;AACT;AAAA;AAGF,YAAI,YAAY,SAAS,WAAW,SAAS,oBAAoB,OAAO;AACtE,eAAK,eAAe,SAAS;AAAA,eACxB;AACL,eAAK,QAAQ,WAAW,SAAS;AAAA;AAAA;AAAA,OAUpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,KAAK,KAAK;AACvC,YAAI,UAAU,MAAM;AACpB,YAAI,OAAO,WAAW,IAAI,KAAK,QAAQ,QAAQ,SAAS,OAAO;AAE/D,YAAI,CAAC,MAAM;AACT;AAAA;AAGF,YAAI,YAAY,SAAS,WAAW,SAAS,oBAAoB,OAAO;AACtE,eAAK,eAAe,SAAS;AAAA,eACxB;AACL,eAAK,QAAQ,WAAW,SAAS;AAAA;AAAA;AAAA,OAepC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,KAAK,IAAI,KAAK,KAAK,MAAM,OAAO;AAC/D,YAAI,SAAS;AAEb,YAAI,OAAO,IAAI,mBAAmB;AAClC,YAAI,WAAU,KAAK,IAAI,aAAa,cAAc;AAElD,YAAI,YAAY,oBAAmB,YAAY;AAC7C,iBAAO,eAAe,YAAY;AAAA;AAGpC,YAAI,kBAAkB,0BAAyB,YAAY;AACzD,iBAAO,IAAI,OAAO,KAAW,KAAK,KAAK,WAAW;AAAA;AAGpD,YAAI,iBAAiB,yBAAwB,YAAY;AACvD,iBAAO,WAAW,aAAa,QAAQ,OAAO,WAAW,aAAa,cAAc,WAAW,SAAS,KAAK,OAAO,SAAS;AAAA;AAG/H,YAAI,0BAA0B,kCAAiC,YAAY;AACzE,iBAAO,WAAW;AAAA;AAGpB,YAAI,YAAY;AAEhB,YAAI,OAAO,cAAc,YAAY;AACnC,sBAAY,UAAU,KAAK,KAAK;AAAA;AAGlC,cAAM;AACN,iBAAS,UAAS;AAClB,WAAG,YAAY;AAEf,YAAI,gBAAgB,OAAO;AACzB,mBAAS,IAAI;AAAA,mBACJ,OAAO,KAAK,aAAa,YAAY;AAC9C,mBAAS,IAAI;AACb,aAAG,YAAY,KAAK,SAAS,KAAK,UAAS,KAAK,KAAK,MAAM;AAAA,eACtD;AACL,wBAAc,UAAS;AAAA;AAGzB,YAAI,eAAe,OAAO;AACxB,mBAAS,IAAI;AACb,eAAK,aAAa,iBAAiB,IAAI,cAAc,WAAY;AAC/D,mBAAO,IAAI;AAAA;AAAA,mBAEJ,wBAAwB,OAAO;AACxC,mBAAS,IAAI;AACb,eAAK,aAAa,iBAAiB,IAAI,cAAc,WAAY;AAC/D,mBAAO,IAAI;AAAA;AAAA,mBAEJ,UAAU,OAAO;AAC1B,mBAAS,IAAI;AAEb,cAAI,wBAAwB,OAAO;AACjC,iBAAK,aAAa,iBAAiB,IAAI,cAAc,WAAY;AAC/D,qBAAO,IAAI;AAAA;AAAA,iBAER;AACL,iBAAK,aAAa,iBAAiB,IAAI,cAAc,WAAY;AAC/D,qBAAO,IAAI,WAAW,KAAK,KAAK,QAAQ,QAAQ,OAAO;AAAA;AAAA;AAAA,eAGtD;AACL,sBAAY,IAAI,CAAC,aAAa;AAE9B,cAAI,wBAAwB,OAAO;AACjC,iBAAK,aAAa,iBAAiB,IAAI,cAAc,WAAY;AAC/D,qBAAO,IAAI;AAAA;AAAA,iBAER;AACL,iBAAK,aAAa,iBAAiB,IAAI,cAAc,WAAY;AAC/D,qBAAO,IAAI,WAAW,KAAK,KAAK,QAAQ,QAAQ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,OAa9D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/E,YAAI,MAAM,KAAK,QAAQ,UAAU;AACjC,YAAI,YAAY;AAChB,YAAI;AAEJ,YAAI,WAAW;AACb,cAAI,WAAW,YAAY;AACzB,wBAAY,UAAU,KAAK,KAAK;AAEhC,gBAAI,cAAc,QAAQ,YAAY,YAAY;AAChD,0BAAY;AAAA,mBACP;AACL,0BAAY,UAAU;AAAA;AAAA;AAI1B,sBAAY,UAAU,QAAQ,cAAc;AAC5C,sBAAY,GAAG,OAAO,KAAK,QAAQ,WAAW,QAAQ,OAAO;AAC7D,sBAAY,IAAI,cAAc,IAAI,OAAO,KAAK,QAAQ,WAAW,KAAK,OAAO;AAAA;AAG/E,YAAI,CAAC,WAAW;AACd,sBAAY,IAAI,cAAc;AAC9B,mBAAS,WAAW,UAAU,OAAO,KAAK,QAAQ;AAElD,cAAI,WAAW;AACb,qBAAS,WAAW;AAAA;AAGtB,eAAK,QAAQ,UAAU,YAAY;AAAA;AAGrC,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,aAAK,uBAAuB,WAAY;AAAA;AAExC,aAAK,IAAI,QAAQ,yBAAyB,KAAK;AAC/C,aAAK,IAAI,QAAQ,2BAA2B,KAAK;AAAA;AAAA,OAMlD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC;AAC1C,YAAI,KAAK,sBAAsB;AAC7B,eAAK,IAAI,WAAW,yBAAyB,KAAK;AAClD,eAAK,IAAI,WAAW,2BAA2B,KAAK;AACpD,eAAK,uBAAuB;AAAA;AAAA;AAAA,OAU/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAAyB,QAAO;AAGrC,YAAI,QAAQ,OAAM,WAAW,KAAK,UAAU,SAAS,OAAM,SAAS;AAClE,mCAAyB;AACzB;AAAA;AAGF,YAAI,YAAY,KAAK,QAAQ;AAC7B,YAAI,YAAY;AAChB,aAAK,WAAW;AAEhB,gBAAQ,OAAM;AAAA,eACP,UAAU;AACb,iBAAK;AACL,wBAAY;AACZ;AAAA,eAEG,UAAU;AACb,gBAAI,WAAW;AACb,kBAAI,KAAK,QAAQ,mBAAmB,UAAU,IAAI,SAAS;AACzD,4BAAY;AAAA,qBACP;AACL,qBAAK,eAAe;AACpB,qBAAK,MAAM;AAAA;AAAA;AAIf;AAAA,eAEG,UAAU;AACb,gBAAI,WAAW;AACb,mBAAK,eAAe,UAAU,IAAI,UAAU;AAAA,mBACvC;AACL,mBAAK;AAAA;AAGP,wBAAY;AACZ;AAAA,eAEG,UAAU;AACb,gBAAI,WAAW;AACb,mBAAK,eAAe,UAAU,IAAI,UAAU;AAAA,mBACvC;AACL,mBAAK;AAAA;AAGP,wBAAY;AACZ;AAAA,eAEG,UAAU;AACb,gBAAI,WAAW;AACb,kBAAI,OAAO,KAAK,YAAY,UAAU;AAEtC,kBAAI,MAAM;AACR,qBAAK;AAAA;AAAA;AAIT,wBAAY;AACZ;AAAA,eAEG,UAAU;AACb,gBAAI,aAAa,KAAK,aAAa;AACjC,mBAAK;AAEL,kBAAI,KAAK,YAAY;AACnB,qBAAK,WAAW,QAAQ;AAAA;AAG1B,0BAAY;AAAA;AAGd;AAAA;AAGA;AAAA;AAGJ,YAAI,WAAW;AACb,iBAAM;AACN,mCAAyB;AAAA;AAG3B,aAAK,WAAW;AAAA;AAAA,OAQjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,UAAU,KAAK,QAAQ,KAAK,GAAG;AACnC,YAAI,OAAO,KAAK,QAAQ,cAAc;AACtC,YAAI,aAAa,QAAQ,MAAM;AAC/B,YAAI,cAAc,QAAQ,OAAO;AACjC,YAAI,oBAAoB,SAAS,WAAW,OAAO;AACnD,YAAI,aAAa,YAAY,MAAM,SAAU,aAAa,OAAO;AAC/D,iBAAO,cAAe,OAAM,SAAS,MAAY,IAAI;AAAA,WACpD;AAEH,oBAAY,QAAQ,GAAG,OAAO,oBAAoB,GAAG;AACrD,oBAAY,SAAS,GAAG,OAAO,aAAa,GAAG;AAC/C,mBAAW,SAAS,YAAY;AAAA;AAAA,OAYjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,GAAG,GAAG,IAAI,IAAI,kBAAkB;AAC/D,YAAI,KAAK,aAAa,OAAO;AAC3B,2BAAiB,QAAQ;AAAA;AAAA;AAAA,OAU5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,QAAO;AACzC,YAAI,CAAC,KAAK,YAAY;AACpB;AAAA;AAIF,YAAI,KAAK,QAAQ,cAAc,KAAK,WAAW,CAAC,UAAU,OAAM,QAAQ,KAAK,QAAQ,cAAc;AACjG,eAAK,MAAM;AAAA,mBACD,MAAK,yBAAyB,KAAK,gBAAgB,CAAC,UAAU,OAAM,QAAQ,YAAY;AAClG,eAAK,MAAM;AAAA;AAAA;AAAA,OAUd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,QAAO;AAC3C,YAAI,CAAC,KAAK,YAAY;AACpB;AAAA;AAGF,YAAI,SAAS,OAAM,QAAQ,aAAa,UAAU,OAAM,QAAQ,KAAK,QAAQ,cAAc;AACzF,iBAAM;AAAA;AAAA;AAAA;AAKZ,WAAO;AAAA;AAGT,QAAM,MAAM;AACZ,MAAO,eAAQ;;;AhBh9Bf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAgBzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAWjM,MAAI,eAAa;AACjB,MAAI,mBAAkB;AAC7B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AA4CvB,MAAI,cAA2B,yBAAU,aAAa;AAC3D,gBAAU,cAAa;AAEvB,QAAI,SAAS,eAAa;AAE1B,0BAAqB,aAAa;AAChC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,eAAe,IAAI,qBAAa,yBAAuB;AAQ7D,YAAM,kBAAkB,IAAI,wBAAgB,MAAM;AAQlD,YAAM,eAAe;AAQrB,YAAM,OAAO;AACb,aAAO;AAAA;AAUT,oBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,YAAI,WAAW,KAAK,IAAI,cAAc;AAEtC,YAAI,OAAO,SAAS,aAAa,YAAY;AAC3C,eAAK,gBAAgB,kBAAkB,SAAS;AAAA;AAGlD,aAAK,OAAO,IAAI,aAAK,KAAK,KAAK;AAAA,UAC7B,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,WAAW,SAAS,eAAe,KAAK,IAAI,aAAa;AAAA;AAE3D,aAAK,KAAK,aAAa,cAAc,WAAY;AAC/C,iBAAO,OAAO;AAAA;AAEhB,aAAK,KAAK,aAAa,aAAa,WAAY;AAC9C,iBAAO,OAAO;AAAA;AAEhB,aAAK,KAAK,aAAa,cAAc,WAAY;AAC/C,iBAAO,OAAO;AAAA;AAEhB,aAAK,KAAK,aAAa,kBAAkB,WAAY;AACnD,cAAI;AAEJ,mBAAS,OAAO,UAAU,QAAQ,SAAS,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACzF,mBAAO,QAAQ,UAAU;AAAA;AAG3B,iBAAQ,yBAAwB,OAAO,gBAAgB,KAAK,MAAM,uBAAuB,CAAC,QAAQ,OAAO;AAAA;AAE3G,aAAK,QAAQ,0BAA0B,SAAU,QAAO;AACtD,iBAAO,OAAO,yBAAyB;AAAA;AAGzC,eAAK,kBAAgB,aAAY,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMzE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,aAAY,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMzE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK;AAEL,YAAI,KAAK,MAAM;AACb,eAAK,KAAK;AACV,eAAK,OAAO;AAAA;AAGd,eAAK,kBAAgB,aAAY,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAQ1E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAc,QAAO;AAC1B,YAAI,CAAC,KAAK,MAAM;AACd;AAAA;AAGF,aAAK;AACL,aAAK,KAAK;AAEV,YAAI,CAAC,KAAK,KAAK,YAAY;AACzB;AAAA;AAGF,YAAI,YAAY;AAChB,YAAI,aAAa;AAEjB,YAAI,KAAK,IAAI,iBAAiB,KAAK,KAAK,UAAU,eAAe;AAC/D,cAAI,eAAe,KAAK,IAAI,WAAW;AAEvC,cAAI,wBAAwB,aAAa,yBACrC,OAAM,sBAAsB,KAC5B,QAAO,sBAAsB;AAEjC,sBAAY,OAAM,mBAAmB,OAAM;AAC3C,uBAAa,QAAO,oBAAoB,OAAM;AAAA,eACzC;AACL,sBAAY,KAAK,mBAAmB,KAAK,KAAK,QAAQ;AACtD,uBAAa,KAAK,oBAAoB,KAAK,KAAK,QAAQ;AAAA;AAG1D,aAAK,KAAK,YAAY;AAAA,UACpB,KAAK,SAAS,OAAM,OAAO,MAAM;AAAA,UACjC,MAAM,SAAS,OAAM,OAAO,MAAM;AAAA;AAAA;AAAA,OAOrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,CAAC,KAAK,MAAM;AACd;AAAA;AAGF,aAAK,KAAK;AACV,aAAK,eAAe;AAAA;AAAA,OA6BrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,aAAa;AAC1C,YAAI;AAEJ,YAAI,KAAK,iBAAiB,MAAM;AAC9B,eAAK;AAAA;AAGP,iBAAS,QAAQ,UAAU,QAAQ,SAAS,IAAI,MAAM,QAAQ,IAAI,QAAQ,IAAI,IAAI,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACnH,iBAAO,QAAQ,KAAK,UAAU;AAAA;AAGhC,QAAC,yBAAwB,KAAK,iBAAiB,QAAQ,MAAM,uBAAuB,CAAC,aAAa,OAAO;AAAA;AAAA,OAU1G;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,SAAS;AAEb,aAAK,eAAe,IAAI,qBAAa,KAAK,KAAK,aAAY;AAC3D,YAAI,WAAW,KAAK,IAAI,cAAc;AACtC,YAAI,mBAAkB;AAAA,UACpB,OAAO,KAAK,aAAa,SAAS;AAAA;AAEpC,aAAK,IAAI,SAAS,kCAAkC;AACpD,aAAK,aAAa,mBAAmB,iBAAgB;AACrD,YAAI,YAAY,KAAK,aAAa,SAAS;AAC3C,aAAK,IAAI,SAAS,6BAA6B;AAC/C,aAAK,KAAK,aAAa;AAEvB,kBAAU,WAAW,SAAU,SAAS;AACtC,iBAAO,OAAO,gBAAgB,gBAAgB,QAAQ,KAAK;AAAA;AAAA;AAAA,OAU9D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,QAAO;AAC9C,YAAI,WAAW,KAAK,IAAI;AACxB,YAAI,iBAAiB,SAAS;AAC9B,YAAI,iBAAiB,SAAS;AAO9B,gCAAwB,UAAS;AAC/B,iBAAO,SAAQ,aAAa,QAAQ,SAAQ,WAAW,aAAa;AAAA;AAGtE,YAAI,UAAU,OAAM;AACpB,aAAK;AAEL,YAAI,SAAS,SAAS,sBAAsB;AAC1C;AAAA;AAGF,eAAM;AACN,eAAM;AAEN,YAAI,CAAE,mBAAkB,iBAAiB;AACvC,cAAI,CAAC,eAAe,YAAY,CAAE,UAAS,SAAS,cAAc,SAAS,SAAS,cAAc;AAChG;AAAA;AAAA;AAIJ,aAAK,KAAK;AAAA;AAAA,OAQX;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,aAAK,IAAI,SAAS,yBAAyB;AAAA;AAAA,OAQ5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,aAAK,IAAI,SAAS,wBAAwB;AAAA;AAAA,OAQ3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,aAAK,IAAI;AACT,aAAK,IAAI,SAAS,wBAAwB;AAAA;AAAA,OAM3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK;AAEL,YAAI,KAAK,MAAM;AACb,eAAK,KAAK;AAAA;AAGZ,eAAK,kBAAgB,aAAY,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAEnE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO,CAAC;AAAA;AAAA,OAQT;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO,CAAC,OAAW,OAAW,KAAW,MAAa,MAAc,KAAW,MAAY,MAAe,KAAW,OAAM,MAAM,KAAW,MAAW,KAAW;AAAA;AAAA;AAItK,WAAO;AAAA,IACP;AACF,cAAY,YAAY;AAAA,IACtB,MAAM;AAAA;;;AkB1bR,oCAAO;AAOP,gCAAO;;;ACvCQ,oBAAkB,iBAAiB;AAChD,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,oBAAoB;AAC5B,wBAAgB;AAAA;AAAA,MAElB,UAAU,oBAAoB;AAC5B,YAAI,KAAK,gBAAgB,KAAK,KAAK,gBAAgB,GAAG;AACpD,iBAAO;AAAA;AAGT,YAAI,WAAW,KAAK;AAEpB,YAAI,CAAC,YAAY,SAAS,SAAS,GAAG;AACpC,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,MAET,QAAQ;AAAA;AAAA;;;ACtBG,mBAAiB,iBAAiB;AAC/C,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,oBAAoB;AAC5B,wBAAgB;AAAA;AAAA,MAElB,UAAU,oBAAoB;AAC5B,YAAI,KAAK,gBAAgB,KAAK,KAAK,gBAAgB,GAAG;AACpD,iBAAO;AAAA;AAGT,YAAI,WAAW,KAAK;AAEpB,YAAI,CAAC,YAAY,SAAS,SAAS,GAAG;AACpC,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,MAET,QAAQ;AAAA;AAAA;;;AC5BZ,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAK/Q,MAAI,gBAA6B,2BAAY;AAC3C,8BAAyB;AACvB,yBAAgB,MAAM;AAEtB,WAAK,OAAO;AAAA;AAGd,oBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,iBAAiB,MAAM,OAAO;AACnC,aAAK,KAAK,QAAQ;AAAA;AAAA,OAEnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,MAAM;AAC5B,eAAO,KAAK,KAAK,SAAS;AAAA;AAAA;AAI9B,WAAO;AAAA;;;AC5BT,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAOhH,MAAI,aAA0B,gCAAa,uBAAsB;AAC/D,uBAAgB,MAAM;AAEtB,SAAK,gBAAgB,IAAI;AAAA;;;ACd3B,oCAAO;;;ACCP,MAAI,cAAa;AACjB,MAAI,kBAAiB;AAIrB,cAAW,WAAW,SAAU,MAAM;AACpC,WAAO,oBAAmB;AAAE,aAAO,KAAK,MAAM,UAAU,SAAS,UAAU,KAAK;AAAA;AAAA,KAC/E;;;ADDH,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAY/Q,MAAI,mBAAgC,2BAAY;AAC9C,+BAA0B,WAAW;AACnC,yBAAgB,MAAM;AAEtB,WAAK,eAAe,UAAU,cAAc,YAAY,UAAU;AAOlE,WAAK,cAAc;AAOnB,WAAK,eAAe,IAAI,qBAAa;AAOrC,WAAK,iBAAiB,oBAAI;AAO1B,WAAK,YAAY;AAAA;AAOnB,oBAAa,mBAAkB,CAAC;AAAA,MAC9B,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,YAAI,KAAK,4BAA4B,KAAK;AAE1C,YAAI,CAAC,KAAK,eAAe,IAAI,KAAK;AAChC,eAAK,eAAe,IAAI;AACxB,oCAA0B,KAAK,cAAc,IAAI;AAAA;AAGnD,aAAK,cAAc;AAAA;AAAA,OAQpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,SAAS;AAC3C,YAAI,CAAC,KAAK,eAAe,IAAI,UAAU;AACrC,eAAK,eAAe,IAAI;AACxB,oCAA0B,KAAK,cAAc,SAAS;AAAA;AAGxD,aAAK,cAAc;AAAA;AAAA,OAQpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,eAAO,KAAK;AAAA;AAAA,OAMb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AAEtB,aAAK,YAAY,QAAQ;AAEzB,YAAI,CAAC,mBAAmB;AACtB,iCAAuB,KAAK;AAAA;AAAA;AAAA;AAKlC,WAAO;AAAA;AAGT,QAAM,kBAAkB;AACxB,MAAI,aAAa,oBAAI;AAQrB,yBAAuB,WAAW;AAChC,QAAI,mBAAmB,IAAI,iBAAiB;AAC5C,QAAI,UAAU,WAAW,IAAI;AAC7B,cAAU,MAAM,WAAW,IAAI;AAC/B,eAAW,IAAI,WAAW,UAAU;AACpC,WAAO;AAAA;AAST,6BAA2B,UAAS;AAClC,aAAQ,aAAa;AAAA;AAGvB,MAAI,iBAAgB,wBAAuB,WAAW,SAAS;AAC7D,WAAO,SAAU,QAAO;AACtB,aAAO,QAAQ,cAAc,WAAW;AAAA;AAAA;AAY5C,qCAAmC,eAAc,SAAS,SAAS;AACjE,kBAAa,iBAAiB,SAAS,QAAQ,eAAc,QAAQ;AACrE,kBAAa,iBAAiB,SAAS,OAAO,eAAc,OAAO;AACnE,kBAAa,iBAAiB,SAAS,SAAS,eAAc,SAAS;AAAA;AAGzE,MAAI,oBAAoB,oBAAI;AAQ5B,uCAAqC,WAAW;AAC9C,QAAI,mBAAmB,kBAAkB,IAAI;AAE7C,QAAI,kBAAkB;AACpB,UAAI,CAAC,iBAAiB,eAAe;AACnC,kBAAU,YAAY;AAAA;AAGxB,aAAO;AAAA;AAGT,QAAI,MAAM,UAAU,cAAc,YAAY,UAAU;AACxD,QAAI,UAAU,IAAI,cAAc;AAChC,sBAAkB,IAAI,WAAW;AACjC,YAAQ,aAAa,kBAAkB;AAEvC,YAAQ,YAAY;AACpB,YAAQ,WAAW;AACnB,YAAQ,eAAe;AACvB,YAAQ,OAAO;AACf,YAAQ,QAAQ;AAChB,cAAU,YAAY;AACtB,WAAO;AAAA;AAST,0BAAwB,UAAS;AAC/B,QAAI,CAAE,qBAAmB,mBAAmB;AAC1C;AAAA;AAGF,QAAI,UAAU,WAAW,IAAI,SAAQ;AACrC,cAAU,MAAM,WAAW,IAAI;AAE/B,QAAI,UAAU,GAAG;AACf,iBAAW;AAAA;AAGb,sBAAkB;AAElB,QAAI,WAAW,GAAG;AAChB,gBAAU;AAEV,UAAI,mBAAmB,kBAAkB,IAAI,SAAQ;AAErD,UAAI,oBAAoB,iBAAiB,YAAY;AACnD,yBAAiB,WAAW,YAAY;AACxC,0BAAkB,OAAO,SAAQ;AAAA;AAGnC,eAAQ,cAAc;AAAA;AAGxB,eAAW,IAAI,SAAQ,WAAW;AAAA;;;ALzOpC,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAE/D,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAiCxM,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AACvB,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAC7B,MAAI,aAAa;AACjB,MAAI,gBAAgB;AACpB,MAAI,eAAc,oBAAI;AACtB,MAAI,YAAY,CAAC,mDAAmD,yFAAyF,KAAK;AAqC3J,MAAI,YAAyB,yBAAU,aAAa;AACzD,gBAAU,YAAW;AAErB,QAAI,SAAS,eAAa;AAE1B,wBAAmB,aAAa;AAC9B,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,eAAe;AAQrB,YAAM,iBAAiB;AAQvB,YAAM,mBAAmB;AAWzB,YAAM,YAAY;AAQlB,YAAM,YAAY;AAOlB,YAAM,cAAc,MAAM,IAAI,aAAa;AAC3C,mBAAY,IAAI,yBAAuB,QAAQ;AAAA,QAC7C,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,QAChB,4BAA4B;AAAA;AAE9B,aAAO;AAAA;AAUT,oBAAa,YAAW,CAAC;AAAA,MACvB,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,YAAI,wBAAwB,KAAK,IAAI,eACjC,WAAW,sBAAsB,eACjC,oBAAoB,sBAAsB;AAE9C,YAAI,OAAO,aAAY,IAAI;AAC3B,aAAK,6BAA6B,CAAC,CAAC;AAEpC,YAAI,UAAQ,cAAc,UAAU;AAClC,eAAK,YAAY,SAAS,aAAa,KAAK;AAC5C,eAAK,YAAY,MAAM,SAAS,aAAa,KAAK,YAAY,SAAS;AACvE,eAAK,eAAe,MAAM,SAAS,gBAAgB,KAAK,eAAe,SAAS;AAChF,eAAK,cAAc,SAAS,eAAe,KAAK;AAAA;AAGlD,aAAK,QAAQ,kCAAkC,SAAU,SAAS;AAChE,iBAAO,OAAO,iCAAiC;AAAA;AAEjD,aAAK,QAAQ,sBAAsB,WAAY;AAC7C,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,qBAAqB,WAAY;AAC5C,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO;AAAA;AAEhB,aAAK,mBAAmB,cAAc,KAAK;AAC3C,aAAK,iBAAiB,aAAa,QAAQ,SAAU,QAAO;AAC1D,iBAAO,OAAO,OAAO;AAAA,WACpB,aAAa,OAAO,SAAU,QAAO;AACtC,iBAAO,OAAO,MAAM;AAAA,WACnB,aAAa,SAAS,SAAU,QAAO;AACxC,iBAAO,OAAO,QAAQ;AAAA;AAGxB,eAAK,kBAAgB,WAAU,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMvE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,WAAU,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMvE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,KAAK,kBAAkB;AACzB,yBAAe,KAAK;AAAA;AAGtB,eAAK,kBAAgB,WAAU,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAMxE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,YAAI,OAAO,aAAY,IAAI;AAC3B,aAAK,oBAAoB;AACzB,aAAK;AACL,aAAK,iBAAiB;AACtB,aAAK,IAAI,aAAa,YAAY;AAAA;AAAA,OAMnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,eAAe;AACpB,YAAI,OAAO,aAAY,IAAI;AAC3B,aAAK,mBAAmB;AACxB,aAAK;AACL,aAAK,iBAAiB;AACtB,aAAK,IAAI,aAAa,YAAY;AAAA;AAAA,OASnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,QAAQ;AAC5C,YAAI,SAAS;AAEb,YAAI,UAAU;AACd,YAAI,eAAe;AACnB,YAAI,kBAAkB;AAEtB,kBAAU,QAAQ,SAAU,OAAO;AACjC,oBAAU,MAAM,UAAU,MAAM,QAAQ,SAAU,KAAK;AACrD,gBAAI,aAAa,QAAQ,SAAS,IAAI;AACpC,2BAAa,KAAK;AAAA;AAAA;AAGtB,oBAAU,MAAM,UAAU,MAAM,QAAQ,SAAU,QAAQ;AACxD,gBAAI,gBAAgB,QAAQ,YAAY,IAAI;AAC1C,8BAAgB,KAAK;AAAA;AAAA;AAAA;AAK3B,kBAAU,cAAc,SAAU,KAAK;AACrC,cAAI,SAAS;AACb,oBAAU,iBAAiB,SAAU,QAAQ;AAC3C,mBAAO,KAAK,OAAO,IAAI,gBAAgB,KAAK;AAAA;AAE9C,kBAAQ,KAAK;AAAA;AAEf,eAAO,WAAU;AAAA;AAAA,OASlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ;AACpC,YAAI,SAAS;AAEb,YAAI,UAAU;AACd,YAAI,eAAe;AACnB,YAAI,kBAAkB;AAEtB,kBAAU,QAAQ,SAAU,OAAO;AACjC,oBAAU,MAAM,UAAU,MAAM,QAAQ,SAAU,KAAK;AACrD,gBAAI,aAAa,QAAQ,SAAS,IAAI;AACpC,2BAAa,KAAK;AAAA;AAAA;AAGtB,oBAAU,MAAM,UAAU,MAAM,QAAQ,SAAU,QAAQ;AACxD,gBAAI,gBAAgB,QAAQ,YAAY,IAAI;AAC1C,8BAAgB,KAAK;AAAA;AAAA;AAAA;AAK3B,kBAAU,cAAc,SAAU,KAAK;AACrC,cAAI,SAAS;AACb,oBAAU,iBAAiB,SAAU,QAAQ;AAC3C,mBAAO,KAAK,OAAO,IAAI,gBAAgB,KAAK;AAAA;AAE9C,kBAAQ,KAAK;AAAA;AAEf,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACvF,YAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEvF,YAAI,CAAC,gBAAgB,CAAC,cAAc;AAClC;AAAA;AAGF,YAAI,YAAY,IAAI;AAEpB,YAAI,cAAc;AAChB,oBAAU,cAAc,QAAQ,cAAc;AAAA;AAGhD,YAAI,cAAc;AAChB,oBAAU,cAAc,QAAQ,aAAa;AAAA;AAG/C,aAAK;AACL,aAAK,QAAQ;AAAA;AAAA,OAMd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,WAAW,KAAK,IAAI;AAExB,YAAI,CAAC,UAAU;AACb;AAAA;AAGF,YAAI,UAAU,SAAS;AACvB,YAAI,cAAc,SAAS;AAC3B,YAAI,WAAW,QAAQ;AACvB,YAAI,WAAW,QAAQ;AACvB,YAAI,SAAS,YAAY;AACzB,YAAI,SAAS,YAAY;AACzB,YAAI,cAAc,KAAK,IAAI,QAAQ,WAAW,KAAK,YAAY;AAC/D,YAAI,cAAc,KAAK,IAAI,QAAQ,WAAW,KAAK,eAAe;AAClE,aAAK,eAAe,SAAS;AAC7B,aAAK,eAAe,KAAK;AAAA,UACvB;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR,QAAQ;AAAA;AAEV,aAAK,iBAAiB,KAAK,IAAI,SAAS,uBAAuB,KAAK;AAEpE,YAAI,WAAW,eAAe,WAAW,aAAa;AACpD,eAAK,IAAI,SAAS,kBAAkB,SAAS,WAAW,GAAG,SAAS,WAAW,GAAG,KAAK,WAAW,KAAK;AAAA;AAAA;AAAA,OAS1G;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uCAAuC;AAC5C,YAAI,SAAS,KAAK,IAAI;AACtB,YAAI,kBAAkB,SAAS,OAAO,WAAW;AAEjD,YAAI,iBAAiB;AACnB,eAAK,iBAAiB,oBAAoB;AAAA,eACrC;AACL,eAAK,iBAAiB;AAAA;AAAA;AAAA,OAUzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,YAAI,SAAS,KAAK,IAAI;AACtB,eAAO,UAAU,OAAO;AAAA;AAAA,OAWzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,YAAY;AACzC,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK,IAAI;AAE7F,YAAI,CAAC,WAAW,QAAQ;AACtB;AAAA;AAGF,YAAI,sBAAsB,WAAW;AACrC,YAAI,yBAAyB,WAAW,GAAG;AAC3C,YAAI,UAAU;AAEd,YAAI,wBAAwB,UAAU,oBAClC,WAAW,sBAAsB,KACjC,cAAc,sBAAsB;AAExC,YAAI,wBAAwB,UAAU,wBAClC,sBAAsB,sBAAsB,KAC5C,yBAAyB,sBAAsB;AAEnD,YAAI,4BAA4B;AAChC,YAAI,+BAA+B;AACnC,YAAI,gBAAgB;AACpB,YAAI,mBAAmB;AAIvB,eAAO,QAAQ,SAAS,uBAAuB,6BAA6B,qBAAqB;AAC/F,cAAI,wBAAwB,KAAK,IAAI,YAAY,2BAA2B,cACxE,iBAAiB,sBAAsB,gBACvC,YAAY,sBAAsB;AAEtC,sCAA4B,YAAY;AAExC,cAAI,mBAAmB,MAAM;AAE3B;AAAA;AAGF,0BAAgB;AAChB,yCAA+B;AAC/B,cAAI,SAAS;AACb,cAAI,cAAc,QAAQ,SAAS;AAEnC,iBAAO,OAAO,SAAS,0BAA0B,gCAAgC,wBAAwB;AACvG,gBAAI,yBAAyB,KAAK,IAAI,YAAY,UAAU,+BACxD,oBAAoB,uBAAuB,mBAC3C,YAAY,uBAAuB;AAEvC,2CAA+B,YAAY;AAE3C,gBAAI,sBAAsB,MAAM;AAE9B;AAAA;AAGF,+BAAmB;AACnB,gBAAI,iBAAiB,OAAO,SAAS;AACrC,mBAAO,KAAK,WAAW,aAAa;AAAA;AAGtC,kBAAQ,KAAK;AAAA;AAGf,aAAK,IAAI,kBAAkB,UAAU,aAAa,SAAS,QAAQ,QAAQ,mBAAmB,KAAK;AACnG,eAAO,CAAC,UAAU,aAAa,eAAe;AAAA;AAAA,OAS/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,QAAO;AAC5B,YAAI,OAAO,aAAY,IAAI;AAE3B,YAAI,CAAC,KAAK,IAAI,iBAAiB,CAAC,KAAK,qBAAqB,KAAK,kBAAkB;AAC/E;AAAA;AAGF,aAAK;AACL,aAAK,oBAAoB;AACzB,YAAI,aAAa,KAAK,cAAc,KAAK;AACzC,YAAI,eAAe,CAAC,CAAC,KAAK,IAAI,SAAS,cAAc,YAAY,KAAK;AAEtE,YAAI,cAAc;AAChB,cAAI,YAAY,WAAU;AAE1B,cAAI,UAAS,OAAM,eAAe;AAChC,gBAAI,WAAW,YAAY,YAAY,KAAK,IAAI;AAEhD,mBAAM,cAAc,QAAQ,cAAc;AAC1C,mBAAM,cAAc,QAAQ,aAAa,CAAC,WAAW,UAAU,KAAK;AAAA,qBAC3D,OAAO,mBAAmB,aAAa;AAChD,iBAAK,IAAI,WAAW,cAAc,QAAQ,QAAQ;AAAA;AAGpD,eAAK,IAAI,SAAS,aAAa,YAAY,KAAK;AAAA;AAGlD,eAAM;AAAA;AAAA,OASP;AAAA,MACD,KAAK;AAAA,MACL,OAAO,eAAe,QAAO;AAC3B,YAAI,OAAO,aAAY,IAAI;AAE3B,YAAI,CAAC,KAAK,IAAI,iBAAiB,CAAC,KAAK,oBAAoB,KAAK,kBAAkB;AAC9E;AAAA;AAGF,aAAK;AACL,aAAK,mBAAmB;AACxB,YAAI,aAAa,KAAK,cAAc,KAAK;AACzC,YAAI,kBAAkB,CAAC,CAAC,KAAK,IAAI,SAAS,aAAa,YAAY,KAAK;AAExE,YAAI,iBAAiB;AACnB,cAAI,YAAY,WAAU;AAE1B,cAAI,UAAS,OAAM,eAAe;AAChC,gBAAI,WAAW,YAAY,YAAY,KAAK,IAAI;AAEhD,mBAAM,cAAc,QAAQ,cAAc;AAC1C,mBAAM,cAAc,QAAQ,aAAa,CAAC,WAAW,UAAU,KAAK;AAAA,qBAC3D,OAAO,mBAAmB,aAAa;AAChD,iBAAK,IAAI,WAAW,cAAc,QAAQ,QAAQ;AAAA;AAGpD,eAAK,IAAI,mBAAmB;AAC5B,eAAK,IAAI,SAAS,YAAY,YAAY,KAAK;AAAA;AAGjD,eAAM;AAAA;AAAA,OASP;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,QAAO;AAC7B,YAAI,CAAC,KAAK,IAAI,iBAAiB,KAAK,kBAAkB;AACpD;AAAA;AAGF,YAAI,UAAS,OAAM,gBAAgB;AACjC,iBAAM;AAAA;AAGR,YAAI;AAEJ,YAAI,UAAS,OAAO,OAAM,kBAAkB,aAAa;AACvD,cAAI,WAAW,SAAS,OAAM,cAAc,QAAQ,cAAc;AAAA,YAChE,UAAU,CAAC;AAAA,YACX,UAAU,CAAC;AAAA,YACX,YAAY;AAAA;AAGd,cAAI,YAAY,qBAAqB,KAAK,WAAW;AACnD,gBAAI,eAAe,mBAAmB,UAAU,KAAK,IAAI;AACzD,yBAAa,aAAa;AAAA,iBACrB;AACL,yBAAa,OAAM,cAAc,QAAQ;AAAA;AAAA,mBAElC,OAAO,mBAAmB,eAAe,OAAO,KAAK,IAAI,WAAW,kBAAkB,aAAa;AAC5G,uBAAa,KAAK,IAAI,WAAW,cAAc,QAAQ;AAAA;AAGzD,YAAI,OAAO,eAAe,UAAU;AAClC,uBAAa,MAAM;AAAA;AAGrB,YAAI,cAAc,WAAW,WAAW,GAAG;AACzC;AAAA;AAGF,YAAI,KAAK,IAAI,SAAS,eAAe,YAAY,KAAK,oBAAoB,OAAO;AAC/E;AAAA;AAGF,YAAI,uBAAuB,KAAK,eAAe,aAC3C,wBAAwB,iBAAe,sBAAsB,IAC7D,WAAW,sBAAsB,IACjC,cAAc,sBAAsB,IACpC,SAAS,sBAAsB,IAC/B,YAAY,sBAAsB;AAEtC,aAAK,IAAI,WAAW,UAAU,aAAa,KAAK,IAAI,KAAK,IAAI,cAAc,GAAG,SAAS,KAAK,IAAI,KAAK,IAAI,cAAc,GAAG;AAC1H,aAAK,IAAI,SAAS,cAAc,YAAY,KAAK;AAAA;AAAA,OASlD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0CAA0C,SAAS;AACxD,gBAAQ,MAAM,KAAK;AAAA,UACjB,MAAM;AAAA,WACL,SAAS,OAAO,QAAQ;AAAA;AAAA,OAQ5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AAGrC,YAAI,CAAC,KAAK,IAAI,iBAAiB,KAAK,oBAAoB,KAAK,IAAI,cAAc,mBAAmB;AAChG;AAAA;AAGF,aAAK;AACL,aAAK,iBAAiB;AAAA;AAAA,OAQvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,YAAI,mBAAmB,aAAY,IAAI,OACnC,6BAA6B,iBAAiB;AAElD,YAAI,KAAK,kBAAkB;AACzB;AAAA;AAGF,aAAK;AAEL,YAAI,8BAA8B,KAAK,iBAAiB,0BAA0B,KAAK,IAAI,aAAa,iBAAiB,oBAAoB;AAC3I;AAAA;AAGF,aAAK;AACL,aAAK,iBAAiB;AAAA;AAAA,OAQvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA2B;AAChC,YAAI,CAAC,KAAK,IAAI,iBAAiB,KAAK,kBAAkB;AACpD;AAAA;AAGF,YAAI,gBAAgB,KAAK,IAAI,aAAa;AAC1C,YAAI,eAAe,KAAK,IAAI;AAE5B,YAAI,CAAC,gBAAgB,kBAAkB,KAAK,iBAAiB,yBAAyB,kBAAkB,aAAa,QAAQ;AAC3H;AAAA;AAGF,aAAK;AACL,aAAK,iBAAiB;AAAA;AAAA,OAMvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,KAAK,kBAAkB;AACzB,yBAAe,KAAK;AACpB,eAAK,mBAAmB;AAAA;AAG1B,eAAK,kBAAgB,WAAU,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAEjE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AO9vBF,oCAAO;AAMP,gCAAO;;;ACvBA,oBAAkB,KAAK,KAAK;AACjC,WAAO,aAAa,OAAO,KAAK,OAAO,OAAO;AAAA;AAQzC,uCAAqC;AAC1C,WAAO;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA;AAAA;AASJ,qCAAmC;AACxC,WAAO;AAAA,MACL,MAAM;AAAA;AAAA;AASH,mCAAiC;AACtC,WAAO;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,MACP,eAAe;AAAA;AAAA;AAYZ,8BAA4B,KAAK,KAAK;AAC3C,WAAO;AAAA,MACL,IAAI,SAAS,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA;AAAA;AASH,+BAA6B,eAAe,cAAc;AAC/D,QAAI,eAAe,cAAc,WAAW;AAC1C,oBAAc,SAAS,aAAa;AAAA;AAGtC,QAAI,eAAe,cAAc,QAAQ;AACvC,UAAI,aAAa,KAAK;AACpB,YAAI,CAAC,UAAS,aAAa,MAAM;AAC/B,uBAAa,MAAM;AAAA;AAGrB,sBAAc,MAAM,aAAa;AAAA,aAC5B;AACL,qBAAa,MAAM;AACnB,sBAAc,MAAM,aAAa;AAAA;AAAA;AAIrC,QAAI,eAAe,cAAc,UAAU;AACzC,UAAI,aAAa,OAAO;AACtB,YAAI,CAAC,UAAS,aAAa,QAAQ;AACjC,uBAAa,QAAQ;AAAA;AAGvB,sBAAc,QAAQ,aAAa;AAAA,aAC9B;AACL,qBAAa,QAAQ;AACrB,sBAAc,QAAQ,aAAa;AAAA;AAAA;AAIvC,QAAI,eAAe,cAAc,WAAW;AAC1C,UAAI,aAAa,QAAQ;AACvB,YAAI,CAAC,UAAS,aAAa,SAAS;AAClC,uBAAa,SAAS;AAAA;AAGxB,sBAAc,SAAS,aAAa;AAAA,aAC/B;AACL,qBAAa,SAAS;AACtB,sBAAc,SAAS,aAAa;AAAA;AAAA;AAIxC,QAAI,eAAe,cAAc,SAAS;AACxC,UAAI,aAAa,MAAM;AACrB,YAAI,CAAC,UAAS,aAAa,OAAO;AAChC,uBAAa,OAAO;AAAA;AAGtB,sBAAc,OAAO,aAAa;AAAA,aAC7B;AACL,qBAAa,OAAO;AACpB,sBAAc,OAAO,aAAa;AAAA;AAAA;AAItC,WAAO;AAAA;AAUF,iCAA+B,KAAK,WAAW;AACpD,QAAI,sBAAsB;AAC1B,cAAU,IAAI,oBAAoB,SAAU,OAAO;AACjD,YAAM,OAAO,SAAU,GAAG,GAAG;AAC3B,YAAI,IAAI,KAAK,IAAI,GAAG;AAClB;AAAA;AAGF,YAAI,cAAc,IAAI,YAAY,GAAG,GAAG;AAExC,YAAI,aAAa;AACf,cAAI,WAAW;AACb,gBAAI,CAAC,eAAe,YAAY,YAAY,WAAW,YAAY,WAAW,SAAS,OAAO;AAC5F,oCAAsB;AACtB,qBAAO;AAAA;AAAA,iBAEJ;AACL,kCAAsB;AACtB,mBAAO;AAAA;AAAA;AAAA;AAAA;AAKf,WAAO;AAAA;AASF,wBAAsB,OAAO;AAClC,WAAO,0BAA4B,OAAO,OAAO,aAAa,QAAQ,WAAW,OAAO;AAAA;;;AC1K3E,kBAAgB,qBAAqB;AAClD,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,YAAI,QAAQ,KAAK,oBAAsB;AACvC,YAAI,YAAY,sBAAsB,MAAM;AAE5C,YAAI,WAAW;AACb,kBAAQ,aAAa;AAAA;AAGvB,eAAO;AAAA;AAAA,MAET,UAAU,kBAAkB,KAAK,UAAU;AACzC,YAAI,YAAY,sBAAsB,MAAM;AAC5C,4BAAoB,cAAc,UAAU,UAAU;AAAA;AAAA;AAAA;;;ACf7C,gBAAc,qBAAqB;AAChD,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,YAAI,QAAQ,KAAK,oBAAsB;AACvC,YAAI,YAAY,sBAAsB,MAAM;AAE5C,YAAI,WAAW;AACb,kBAAQ,aAAa;AAAA;AAGvB,eAAO;AAAA;AAAA,MAET,UAAU,kBAAkB,KAAK,UAAU;AACzC,YAAI,YAAY,sBAAsB,MAAM;AAC5C,4BAAoB,cAAc,UAAU,QAAQ;AAAA;AAAA;AAAA;;;ACf3C,qBAAmB,qBAAqB;AACrD,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,kBAAkB,KAAK,UAAU;AACzC,4BAAoB,cAAc,UAAU;AAAA;AAAA,MAE9C,UAAU,oBAAoB;AAC5B,eAAO,CAAC,sBAAsB;AAAA;AAAA;AAAA;;;ACVrB,iBAAe,qBAAqB;AACjD,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,YAAI,QAAQ,KAAK,oBAAsB;AACvC,YAAI,YAAY,sBAAsB,MAAM;AAE5C,YAAI,WAAW;AACb,kBAAQ,aAAa;AAAA;AAGvB,eAAO;AAAA;AAAA,MAET,UAAU,kBAAkB,KAAK,UAAU;AACzC,YAAI,YAAY,sBAAsB,MAAM;AAC5C,4BAAoB,cAAc,UAAU,SAAS;AAAA;AAAA;AAAA;;;ACf5C,eAAa,qBAAqB;AAC/C,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,YAAI,QAAQ,KAAK,oBAAsB;AACvC,YAAI,YAAY,sBAAsB,MAAM;AAE5C,YAAI,WAAW;AACb,kBAAQ,aAAa;AAAA;AAGvB,eAAO;AAAA;AAAA,MAET,UAAU,kBAAkB,KAAK,UAAU;AACzC,YAAI,YAAY,sBAAsB,MAAM;AAC5C,4BAAoB,cAAc,UAAU,OAAO;AAAA;AAAA;AAAA;;;ANtBzD,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAwB/D,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAWjM,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAsDtB,MAAI,gBAA6B,yBAAU,aAAa;AAC7D,gBAAU,gBAAe;AAEzB,QAAI,SAAS,eAAa;AAE1B,4BAAuB,aAAa;AAClC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,eAAe;AACrB,aAAO;AAAA;AAUT,oBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,QAAQ,kCAAkC,SAAU,SAAS;AAChE,iBAAO,OAAO,iCAAiC;AAAA;AAEjD,aAAK,QAAQ,QAAQ,WAAY;AAC/B,iBAAO,OAAO;AAAA;AAGhB,eAAK,kBAAgB,eAAc,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM3E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK;AAEL,eAAK,kBAAgB,eAAc,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAM5E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,eAAc,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAuB3E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,iBAAiB,cAAc;AACxD,YAAI,SAAS;AAEb,YAAI,oBAAoB,CAAC,OAAO,SAAS,UAAU;AACnD,YAAI,aAAa,eAAe,OAAO,KAAK,gBAAgB;AAC5D,YAAI,gBAAgB,oBAAoB;AACxC,YAAI,4BAA4B,0BAA0B;AAC1D,kBAAU,iBAAiB,SAAU,WAAW;AAC9C,cAAI,wBAAwB,0BAA0B,YAClD,yBAAyB,iBAAe,uBAAuB,IAC/D,WAAW,uBAAuB,IAClC,cAAc,uBAAuB,IACrC,SAAS,uBAAuB,IAChC,YAAY,uBAAuB;AAEvC,cAAI,QAAQ,gBAAe,MAAK;AAC9B,gBAAI,UAAS,iBAAgB,MAAK;AAChC,wBAAU,YAAY,SAAU,WAAW;AACzC,uBAAO,6BAA6B,MAAK,MAAK,cAAc;AAAA;AAAA;AAIhE,qBAAS,MAAM,aAAa,OAAO,WAAW,OAAO,GAAG;AACtD,sBAAO;AAAA;AAAA;AAIX,mBAAS,MAAM,UAAU,OAAO,QAAQ,OAAO,GAAG;AAChD,kBAAM;AAAA;AAAA;AAYV,aAAK,IAAI,KAAK;AAAA;AAAA,OAqBf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,iBAAiB;AAC1C,YAAI,SAAS;AAEb,YAAI,CAAC,MAAM,QAAQ,kBAAkB;AACnC,iBAAO,KAAK;AAAA;AAGd,YAAI,gBAAgB,oBAAoB;AACxC,YAAI,4BAA4B,0BAA0B;AAC1D,YAAI,kBAAkB;AACtB,kBAAU,iBAAiB,SAAU,WAAW;AAC9C,cAAI,yBAAyB,0BAA0B,YACnD,yBAAyB,iBAAe,wBAAwB,IAChE,WAAW,uBAAuB,IAClC,cAAc,uBAAuB,IACrC,SAAS,uBAAuB,IAChC,YAAY,uBAAuB;AAEvC,cAAI,SAAS,iBAAgB,MAAK;AAChC,gBAAI,SAAS,iBAAgB,MAAK;AAChC,wBAAU,OAAO,cAAc,SAAU,QAAQ;AAC/C,oBAAI,OAAO,QAAQ,QAAO,OAAO,QAAQ,MAAK;AAC5C,kCAAgB,KAAK;AAAA;AAAA;AAAA;AAK3B,qBAAS,MAAM,aAAa,OAAO,WAAW,OAAO,GAAG;AACtD,qBAAO;AAAA;AAAA;AAIX,mBAAS,MAAM,UAAU,OAAO,QAAQ,OAAO,GAAG;AAChD,mBAAO;AAAA;AAAA;AAGX,eAAO;AAAA;AAAA,OAoBR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,iBAAiB;AAC5C,YAAI,SAAS;AAEb,YAAI,iBAAiB;AACnB,eAAK,WAAW;AAAA,eACX;AACL,oBAAU,KAAK,cAAc,SAAU,QAAQ;AAC7C,mBAAO,kCAAkC,OAAO;AAEhD,mBAAO;AAEP,mBAAO,IAAI,eAAe,OAAO,KAAK,OAAO,KAAK;AAAA;AAEpD,eAAK,aAAa,SAAS;AAAA;AAAA;AAAA,OAW9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,QAAQ,OAAO;AACtD,YAAI,kBAAkB,KAAK,kBAAkB;AAE7C,YAAI,CAAC,iBAAiB;AACpB,eAAK,aAAa,KAAK;AAAA;AAGzB,YAAI,kBAAkB,IAAI,cAAU,IAAI,eAAW,OAAO,KAAK,OAAO;AACtE,YAAI,sBAAsB,KAAK,sBAAsB,QAAQ,iBAAiB;AAE9E,YAAI,CAAC,qBAAqB;AACxB,eAAK,IAAI,UAAU,UAAU,mBAAmB;AAAA,YAC9C;AAAA,YACA;AAAA;AAAA;AAAA;AAAA,OAcL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC,KAAK,QAAQ,kBAAkB,OAAO;AACjF,YAAI,WAAW,KAAK,IAAI;AACxB,YAAI,cAAc,KAAK,IAAI;AAE3B,YAAI,OAAO,YAAY,UAAU,aAAa;AAC5C;AAAA;AAGF,YAAI,SAAS,mBAAmB,KAAK;AAErC,YAAI,kBAAkB;AACpB,mBAAS,oBAAoB,QAAQ;AACrC,oBAAU,KAAK,IAAI,UAAU,UAAU,kBAAkB,SAAU,iBAAiB;AAClF,gBAAI,OAAO,OAAO,gBAAgB,SAAS,IAAI;AAC7C,qBAAO,OAAO,gBAAgB,UAAU;AACxC,qBAAO,KAAK,gBAAgB,SAAS;AACrC,qBAAO,OAAO,gBAAgB,SAAS;AACvC,qBAAO,QAAQ,gBAAgB,SAAS;AACxC,qBAAO,MAAM,gBAAgB,SAAS;AACtC,qBAAO,SAAS,gBAAgB,SAAS;AACzC,qBAAO;AAAA;AAAA;AAAA;AAKb,aAAK,IAAI,YAAY,KAAK,QAAQ,WAAW;AAC7C,aAAK,yBAAyB,QAAQ;AAAA;AAAA,OASvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2CAA2C,cAAc;AAC9D,YAAI,SAAS;AAEb,YAAI,QAAQ,aAAa;AACzB,YAAI,eAAe,KAAK,IAAI,MAAM,GAAG,KAAK,KAAK,IAAI,cAAc;AACjE,YAAI,kBAAkB,KAAK,IAAI,MAAM,GAAG,KAAK,KAAK,IAAI,cAAc;AACpE,kBAAU,MAAM,KAAK,KAAK,cAAc,SAAU,UAAU;AAC1D,oBAAU,MAAM,KAAK,KAAK,iBAAiB,SAAU,UAAU;AAC7D,gBAAI,SAAS,mBAAmB,UAAU;AAC1C,gBAAI,OAAM;AAEV,gBAAI,aAAa,MAAM,KAAK,KAAK;AAC/B,kBAAI,eAAe,cAAc,QAAQ;AACvC,wBAAO;AACP,uBAAO,MAAM,aAAa;AAAA;AAAA;AAK9B,gBAAI,aAAa,MAAM,GAAG,KAAK;AAC7B,kBAAI,eAAe,cAAc,WAAW;AAC1C,wBAAO;AACP,uBAAO,SAAS,aAAa;AAAA;AAAA;AAIjC,gBAAI,aAAa,MAAM,KAAK,KAAK;AAC/B,kBAAI,eAAe,cAAc,SAAS;AACxC,wBAAO;AACP,uBAAO,OAAO,aAAa;AAAA;AAAA;AAK/B,gBAAI,aAAa,MAAM,GAAG,KAAK;AAC7B,kBAAI,eAAe,cAAc,UAAU;AACzC,wBAAO;AACP,uBAAO,QAAQ,aAAa;AAAA;AAAA;AAIhC,gBAAI,OAAM,GAAG;AACX,qBAAO,IAAI,YAAY,UAAU,UAAU,WAAW;AAEtD,qBAAO,yBAAyB;AAAA,mBAC3B;AAAA;AAAA;AAAA;AAAA;AAAA,OAaZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,KAAK,QAAQ;AAC5C,YAAI,WAAW,SAAS,KAAK;AAC7B,aAAK,aAAa;AAClB,aAAK,kCAAkC;AACvC,aAAK;AACL,aAAK,IAAI,eAAe,KAAK,QAAQ;AAAA;AAAA,OAYtC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,KAAK,QAAQ,OAAO,QAAQ;AACpD,YAAI,cAAc,KAAK,IAAI,YAAY,KAAK,QAAQ;AAEpD,YAAI,CAAC,eAAe,YAAY,WAAW,QAAQ;AACjD,wBAAc,mBAAmB,KAAK;AAAA;AAGxC,YAAI,QAAQ;AACV,sBAAY,SAAS;AACrB,cAAI,YAAY,KAAK,UAAU;AAE/B,cAAI,cAAc,GAAG;AACnB,iBAAK,iBAAiB,KAAK;AAAA,iBACtB;AACL,gBAAI,0BAA0B,KAAK,qCAAqC,aAAa,OAAO;AAE5F,gBAAI,CAAC,yBAAyB;AAC5B,mBAAK,yBAAyB;AAAA;AAGhC,iBAAK,IAAI,YAAY,KAAK,QAAQ,WAAW;AAAA;AAAA,eAE1C;AACL,sBAAY,SAAS;AAErB,cAAI,2BAA2B,KAAK,qCAAqC,aAAa,OAAO;AAE7F,cAAI,CAAC,0BAA0B;AAC7B,iBAAK,yBAAyB;AAAA;AAGhC,eAAK,IAAI,YAAY,KAAK,QAAQ,WAAW;AAAA;AAAA;AAAA,OAYhD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,UAAU,OAAO,QAAQ;AACrD,YAAI,SAAS;AAEb,kBAAU,UAAU,SAAU,MAAM;AAClC,cAAI,SAAQ,KAAK,OACb,OAAM,KAAK;AAEf,cAAI,OAAM,QAAQ,KAAI,OAAO,OAAM,QAAQ,KAAI,KAAK;AAClD,gBAAI,UAAU,aAAa;AACzB,qBAAO,iBAAiB,OAAM,KAAK,OAAM;AAAA,mBACpC;AACL,qBAAO,UAAU,OAAM,KAAK,OAAM,KAAK,OAAO;AAAA;AAAA,iBAE3C;AACL,oBAAQ;AAAA,mBACD;AACH,0BAAU,OAAM,KAAK,KAAI,KAAK,SAAU,UAAU;AAChD,4BAAU,OAAM,KAAK,KAAI,KAAK,SAAU,UAAU;AAChD,2BAAO,iBAAiB,UAAU;AAAA;AAAA;AAGtC;AAAA,mBAEG;AACH,0BAAU,OAAM,KAAK,KAAI,KAAK,SAAU,QAAQ;AAC9C,yBAAO,UAAU,OAAM,KAAK,QAAQ,OAAO;AAAA;AAE7C;AAAA,mBAEG;AACH,0BAAU,OAAM,KAAK,KAAI,KAAK,SAAU,UAAU;AAChD,yBAAO,UAAU,UAAU,KAAI,KAAK,OAAO;AAAA;AAE7C;AAAA,mBAEG;AACH,0BAAU,OAAM,KAAK,KAAI,KAAK,SAAU,WAAW;AACjD,yBAAO,UAAU,KAAI,KAAK,WAAW,OAAO;AAAA;AAE9C;AAAA,mBAEG;AACH,0BAAU,OAAM,KAAK,KAAI,KAAK,SAAU,SAAS;AAC/C,yBAAO,UAAU,SAAS,OAAM,KAAK,OAAO;AAAA;AAE9C;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA,OAYT;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,eAAe;AACjD,YAAI,SAAS;AAEb,kBAAU,eAAe,SAAU,cAAc;AAC/C,cAAI,aAAa,OAAO;AACtB,mBAAO,kCAAkC;AAAA,iBACpC;AACL,mBAAO,6BAA6B,aAAa,KAAK,aAAa,KAAK;AAAA;AAAA;AAAA;AAAA,OAY7E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,QAAQ;AAChC,YAAI,UAAS,OAAO,OAAO;AAC3B,eAAO,YAAY,SAAQ,SAAU,aAAa,OAAO;AACvD,cAAI,SAAS;AAEb,cAAI,MAAM,MAAM;AACd,sBAAU;AAAA;AAGZ,iBAAO;AAAA,WACN;AAAA;AAAA,OASJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2CAA2C,UAAU;AAC1D,YAAI,SAAQ,SAAS,KAAK,IAAI,UAAU,UAAU,kBAAkB,SAAU,iBAAiB;AAC7F,iBAAO,gBAAgB,SAAS;AAAA,WAC/B,QAAQ;AAEX,YAAI,SAAQ,IAAI;AACd,eAAK,IAAI,UAAU,UAAU,iBAAiB,QAAO;AAAA;AAAA;AAAA,OASxD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,SAAS;AAEb,kBAAU,KAAK,IAAI,UAAU,UAAU,kBAAkB,SAAU,iBAAiB,QAAO;AACzF,cAAI,gBAAgB,cAAc,MAAM;AACtC,mBAAO,IAAI,UAAU,UAAU,iBAAiB,QAAO;AAEvD,mBAAO,IAAI,UAAU,UAAU,iBAAiB,OAAO,QAAO;AAE9D,mBAAO;AAAA;AAAA;AAAA;AAAA,OAUZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,UAAU;AAEd,kBAAU,KAAK,cAAc,SAAU,QAAQ;AAC7C,kBAAQ,kCAAkC,OAAO;AAEjD,kBAAQ;AAAA;AAAA;AAAA,OAUX;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,UAAU;AACrC,YAAI,SAAQ,SAAS,KAAK,cAAc,SAAU,QAAQ;AACxD,iBAAO,OAAO;AAAA,WACb,QAAQ;AAEX,YAAI,SAAQ,IAAI;AACd,eAAK,aAAa,OAAO,QAAO;AAAA;AAAA;AAAA,OAYnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,QAAQ;AACxC,YAAI,UAAU;AAEd,YAAI,QAAQ;AACZ,YAAI,YAAY,KAAK,UAAU;AAE/B,YAAI,cAAc,GAAG;AACnB,eAAK,aAAa,OAAO;AACzB,kBAAQ;AAAA,eACH;AACL,oBAAU,KAAK,cAAc,SAAU,aAAa,QAAO;AACzD,gBAAI,OAAO,OAAO,YAAY,IAAI;AAChC,sBAAQ,aAAa,UAAS;AAC9B,sBAAQ;AACR,qBAAO;AAAA;AAAA;AAAA;AAKb,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8CAA8C,QAAQ,OAAO,QAAQ;AAC1E,YAAI,QAAQ;AACZ,kBAAU,KAAK,IAAI,UAAU,UAAU,kBAAkB,SAAU,iBAAiB;AAClF,cAAI,OAAO,OAAO,gBAAgB,SAAS,IAAI;AAC7C,uBAAW,gBAAgB,iBAAiB,SAAU,cAAc;AAClE,2BAAa,kBAAkB,OAAO;AAAA;AAExC,oBAAQ;AACR,mBAAO;AAAA;AAAA;AAGX,eAAO;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,QAAQ,WAAW,OAAO;AAC9D,YAAI,YAAY,KAAK,UAAU;AAC/B,YAAI,QAAQ;AAEZ,YAAI,cAAc,GAAG;AACnB,eAAK,iBAAiB,OAAO,KAAK,OAAO;AACzC,kBAAQ;AAAA,eACH;AACL,oBAAU,KAAK,IAAI,UAAU,UAAU,kBAAkB,SAAU,iBAAiB;AAClF,gBAAI,OAAO,OAAO,gBAAgB,SAAS,IAAI;AAC7C,8BAAgB,kBAAkB;AAClC,8BAAgB;AAEhB,kBAAI,OAAO;AACT,2BAAW,gBAAgB,iBAAiB,SAAU,cAAc;AAClE,+BAAa,kBAAkB,OAAO;AAAA;AAAA;AAI1C,sBAAQ;AACR,qBAAO;AAAA;AAAA;AAAA;AAKb,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,gBAAgB,KAAK,IAAI,cAAc;AAE3C,YAAI,MAAM,QAAQ,gBAAgB;AAChC,cAAI,CAAC,cAAc,QAAQ;AACzB,iBAAK,eAAe;AAAA;AAGtB,eAAK,oBAAoB;AAAA,mBAChB,kBAAkB,QAAQ;AACnC,eAAK,oBAAoB,KAAK;AAAA;AAAA;AAAA,OAUjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0CAA0C,iBAAgB;AAC/D,YAAI,CAAC,KAAK,IAAI,cAAc,eAAa;AACvC;AAAA;AAGF,wBAAe,MAAM,KAAK;AAAA,UACxB,MAAM;AAAA,WACL;AAAA,UACD,KAAK;AAAA,UACL,MAAM,gBAAgB;AACpB,mBAAO,KAAK,oBAAsB;AAAA;AAAA,UAEpC,UAAU,oBAAoB;AAC5B,mBAAO,KAAK,UAAU;AAAA;AAAA,UAExB,SAAS;AAAA,YACP,OAAO,CAAC,IAAI,OAAO,MAAM,OAAO,OAAO,OAAO,KAAK,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA,OAUzE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAK,kBAAgB,eAAc,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAErE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AOt4BF,oCAAO;AAXP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAMjM,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAUtB,MAAI,eAA4B,yBAAU,aAAa;AAC5D,gBAAU,eAAc;AAExB,QAAI,SAAS,eAAa;AAE1B,2BAAsB,aAAa;AACjC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,eAAe,IAAI,qBAAa,yBAAuB;AAQ7D,YAAM,aAAa;AAQnB,YAAM,WAAW;AAQjB,YAAM,YAAY;AAClB,aAAO;AAAA;AAUT,oBAAa,eAAc,CAAC;AAAA,MAC1B,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,QAAQ,wBAAwB,SAAU,QAAO;AACpD,iBAAO,OAAO,eAAe;AAAA;AAE/B,aAAK,QAAQ,8BAA8B,SAAU,QAAO;AAC1D,iBAAO,OAAO,eAAe;AAAA;AAE/B,aAAK;AAEL,eAAK,kBAAgB,cAAa,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM1E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,cAAa,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM1E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK;AAEL,eAAK,kBAAgB,cAAa,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAQ3E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,YAAY;AACxC,aAAK,aAAa;AAAA;AAAA,OAQnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,UAAU;AACpC,aAAK,WAAW;AAAA;AAAA,OAUjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,eAAe,GAAG,GAAG;AAC1B,YAAI,QAAQ;AACZ,YAAI,QAAQ;AAEZ,YAAI,IAAI,KAAK,WAAW,KAAK;AAE3B,kBAAQ,IAAI,KAAK,WAAW;AAAA,mBACnB,IAAI,KAAK,WAAW,QAAQ;AAErC,kBAAQ,IAAI,KAAK,WAAW;AAAA;AAG9B,YAAI,IAAI,KAAK,WAAW,MAAM;AAE5B,kBAAQ,IAAI,KAAK,WAAW;AAAA,mBACnB,IAAI,KAAK,WAAW,OAAO;AAEpC,kBAAQ,IAAI,KAAK,WAAW;AAAA;AAG9B,aAAK,SAAS,OAAO;AAAA;AAAA,OAQtB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,aAAK,YAAY;AAAA;AAAA,OAQlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,aAAK,YAAY;AAAA;AAAA,OASlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA0B;AAC/B,YAAI,SAAS;AAEb,YAAI,aAAa,KAAK,IAAI;AAC1B,YAAI,QAAQ;AAEZ,eAAO,OAAO;AACZ,eAAK,aAAa,iBAAiB,MAAM,UAAU,eAAe,WAAY;AAC5E,mBAAO,OAAO;AAAA;AAEhB,eAAK,aAAa,iBAAiB,MAAM,UAAU,WAAW,WAAY;AACxE,mBAAO,OAAO;AAAA;AAEhB,eAAK,aAAa,iBAAiB,MAAM,UAAU,aAAa,SAAU,QAAO;AAC/E,mBAAO,OAAO,YAAY;AAAA;AAE5B,kBAAQ,gBAAgB;AAAA;AAAA;AAAA,OAS3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,aAAK,aAAa;AAAA;AAAA,OASnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAO;AACpC,YAAI,aAAa,SAAQ;AACvB;AAAA;AAGF,YAAI,gBAAgB,KAAK,IAAI,KAAK,GAAG,QAAQ;AAE7C,YAAI,kBAAkB,KAAK,IAAI,YAAY;AAEzC;AAAA;AAGF,aAAK,cAAc,cAAc;AACjC,aAAK,YAAY,SAAU,SAAS,SAAS;AAC3C,cAAI,UAAU,GAAG;AACf,0BAAc,cAAc;AAAA,qBACnB,UAAU,GAAG;AACtB,0BAAc,cAAc;AAAA;AAG9B,cAAI,UAAU,GAAG;AACf,0BAAc,aAAa;AAAA,qBAClB,UAAU,GAAG;AACtB,0BAAc,aAAa;AAAA;AAAA;AAG/B,aAAK;AAAA;AAAA,OASN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,YAAI,CAAC,KAAK,eAAe;AACvB;AAAA;AAGF,aAAK,MAAM,OAAM,SAAS,OAAM;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAK,kBAAgB,cAAa,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAEpE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AC1VF,oCAAO;AAbP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAiBzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAWxM,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AACvB,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAC7B,MAAI,oBAAoB;AA0CjB,MAAI,eAA4B,yBAAU,aAAa;AAC5D,gBAAU,eAAc;AAExB,QAAI,SAAS,eAAa;AAE1B,2BAAsB,aAAa;AACjC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,eAAe,IAAI,qBAAa,yBAAuB;AAQ7D,YAAM,kBAAkB,IAAI,wBAAgB,MAAM;AAQlD,YAAM,eAAe;AAQrB,YAAM,OAAO;AAEb,YAAM,IAAI,QAAQ,qBAAqB,SAAU,KAAK,IAAI;AACxD,eAAO,MAAM,oBAAoB,KAAK;AAAA;AAGxC,aAAO;AAAA;AAUT,oBAAa,eAAc,CAAC;AAAA,MAC1B,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,IAAI,cAAc;AAAA;AAAA,OAS/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,eAAe,IAAI,qBAAa,KAAK,KAAK,cAAa;AAC5D,YAAI,WAAW,KAAK,IAAI,cAAc;AACtC,YAAI,mBAAkB;AAAA,UACpB,OAAO,KAAK,aAAa,SAAS;AAAA;AAEpC,aAAK;AAEL,YAAI,OAAO,SAAS,aAAa,YAAY;AAC3C,eAAK,gBAAgB,kBAAkB,SAAS;AAAA;AAGlD,eAAK,kBAAgB,cAAa,YAAY,gBAAgB,MAAM,KAAK;AAEzE,aAAK,mBAAmB,WAAY;AAClC,iBAAO,IAAI,SAAS,mCAAmC;AAEvD,iBAAO,aAAa,mBAAmB,iBAAgB;AAEvD,cAAI,YAAY,OAAO,aAAa,SAAS;AAE7C,cAAI,OAAO,MAAM;AACf,mBAAO,KAAK;AAAA;AAGd,iBAAO,OAAO,IAAI,aAAK,OAAO,KAAK;AAAA,YACjC,WAAW;AAAA,YACX,gBAAgB;AAAA,YAChB,WAAW,SAAS,eAAe,OAAO,IAAI,aAAa;AAAA;AAG7D,iBAAO,IAAI,SAAS,8BAA8B;AAElD,iBAAO,KAAK,aAAa;AAEzB,iBAAO,KAAK,aAAa,cAAc,WAAY;AACjD,mBAAO,OAAO;AAAA;AAGhB,iBAAO,KAAK,aAAa,aAAa,WAAY;AAChD,mBAAO,OAAO;AAAA;AAGhB,iBAAO,KAAK,aAAa,cAAc,WAAY;AACjD,mBAAO,OAAO;AAAA;AAGhB,iBAAO,KAAK,aAAa,kBAAkB,WAAY;AACrD,gBAAI;AAEJ,qBAAS,OAAO,UAAU,QAAQ,SAAS,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACzF,qBAAO,QAAQ,UAAU;AAAA;AAG3B,mBAAQ,yBAAwB,OAAO,gBAAgB,KAAK,MAAM,uBAAuB,CAAC,QAAQ,OAAO;AAAA;AAI3G,oBAAU,WAAW,SAAU,SAAS;AACtC,mBAAO,OAAO,gBAAgB,gBAAgB,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA,OAQhE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,cAAa,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM1E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK;AAEL,YAAI,KAAK,MAAM;AACb,eAAK,KAAK;AAAA;AAGZ,eAAK,kBAAgB,cAAa,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAQ3E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA0B;AAC/B,YAAI,SAAS;AAEb,aAAK,aAAa,iBAAiB,KAAK,IAAI,aAAa,SAAS,SAAU,QAAO;AACjF,iBAAO,OAAO,aAAa;AAAA;AAAA;AAAA,OAe9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAc,UAAU;AAC7B,YAAI,CAAC,KAAK,MAAM;AACd;AAAA;AAGF,aAAK,KAAK;AAEV,YAAI,SAAS,OAAO;AAClB,eAAK,KAAK,UAAU,QAAQ,SAAS;AAAA;AAGvC,aAAK,KAAK,YAAY;AAAA;AAAA,OAMvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,CAAC,KAAK,MAAM;AACd;AAAA;AAGF,aAAK,KAAK;AAAA;AAAA,OA6BX;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,aAAa;AAC1C,YAAI;AAEJ,iBAAS,QAAQ,UAAU,QAAQ,SAAS,IAAI,MAAM,QAAQ,IAAI,QAAQ,IAAI,IAAI,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACnH,iBAAO,QAAQ,KAAK,UAAU;AAAA;AAGhC,QAAC,yBAAwB,KAAK,iBAAiB,QAAQ,MAAM,uBAAuB,CAAC,aAAa,OAAO;AAAA;AAAA,OAS1G;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEjF,YAAI,KAAK,KAAK,YAAY;AACxB,cAAI,QAAQ;AACV,iBAAK,KAAK,QAAQ;AAAA,iBACb;AACL,iBAAK,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA,OAWvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,QAAO;AAClC,eAAM;AAEN,YAAI,SAAS,OAAM,QAAQ,sBAAsB,CAAC,KAAK,KAAK,YAAY;AACtE,cAAI,YAAY;AAChB,cAAI,aAAa;AAEjB,cAAI,KAAK,IAAI,iBAAiB,KAAK,KAAK,UAAU,eAAe;AAC/D,gBAAI,eAAe,KAAK,IAAI,WAAW;AAEvC,gBAAI,wBAAwB,aAAa,yBACrC,OAAM,sBAAsB,KAC5B,QAAO,sBAAsB;AAEjC,wBAAY;AACZ,yBAAa;AAAA;AAGf,cAAI,OAAO,OAAM,OAAO;AACxB,eAAK,KAAK;AAAA,YACR,MAAM,KAAK,OAAO;AAAA,YAClB,KAAK,KAAK,MAAM,OAAM,OAAO,eAAe,IAAI;AAAA,YAChD,OAAO,KAAK;AAAA,YACZ,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA,OAYlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,KAAK,IAAI;AAE3C,YAAI,YAAY,GAAG;AAEnB,YAAI,CAAC,WAAW;AACd;AAAA;AAGF,YAAI,gBAAgB,UAAU,WAAW;AACzC,YAAI,QAAQ,MAAM,UAAU,QAAQ,KAAK,eAAe;AAExD,YAAI,MAAM,KAAK,UAAU,cAAc,SAAS,GAAG;AACjD;AAAA;AAGF,YAAI,iBAAiB,GAAG,cAAc,IAAI,OAAO;AAEjD,YAAI,KAAK,WAAW,gBAAgB;AAClC;AAAA;AAIF,YAAI,CAAC,KAAK,SAAS;AACjB,cAAI,gBAAgB;AAClB,2BAAe,WAAW,YAAY;AAAA;AAGxC;AAAA;AAGF,YAAI,SAAS,KAAK,IAAI,aAAa,cAAc;AACjD,eAAO,YAAY;AAEnB,eAAO,UAAU,WAAY;AAC3B,iBAAO;AAAA;AAGT,WAAG,WAAW,aAAa,QAAQ,GAAG,WAAW;AAAA;AAAA,OASlD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,aAAK,IAAI,SAAS,0BAA0B;AAAA;AAAA,OAS7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,aAAK,IAAI,SAAS,yBAAyB;AAAA;AAAA,OAS5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,aAAK,IAAI;AACT,aAAK,IAAI,SAAS,yBAAyB;AAAA;AAAA,OAM5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK;AAEL,YAAI,KAAK,MAAM;AACb,eAAK,KAAK;AAAA;AAGZ,eAAK,kBAAgB,cAAa,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAEpE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO,CAAC;AAAA;AAAA,OAQT;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO,CAAC,MAAa,MAAc,KAAW,MAAe,KAAW,MAAc,KAAW,MAAW,KAAW;AAAA;AAAA;AAI3H,WAAO;AAAA,IACP;AACF,eAAa,YAAY;AAAA,IACvB,MAAM;AAAA;;;ACzhBR,oCAAO;;;ACPP,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAE/D,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAO/Q,MAAI,eAA4B,2BAAY;AAC1C,2BAAsB,aAAa;AACjC,yBAAgB,MAAM;AAOtB,WAAK,MAAM;AAOX,WAAK,UAAU;AAAA;AASjB,oBAAa,eAAc,CAAC;AAAA,MAC1B,KAAK;AAAA,MACL,OAAO,oBAAoB,SAAS;AAClC,aAAK,UAAU;AAAA;AAAA,OAQhB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,QAAQ;AAEZ,YAAI,sBAAsB,KAAK,iBAC3B,WAAW,oBAAoB,UAC/B,WAAW,oBAAoB,UAC/B,SAAS,oBAAoB,QAC7B,SAAS,oBAAoB;AAEjC,YAAI,UAAU,KAAK;AACnB,YAAI,OAAO;AACX,kBAAU,UAAU,QAAQ,SAAU,UAAU;AAC9C,cAAI,MAAM;AAEV,cAAI,CAAC,QAAQ,oBAAoB,MAAM,aAAa,WAAW;AAC7D;AAAA;AAGF,oBAAU,UAAU,QAAQ,SAAU,UAAU;AAC9C,gBAAI,CAAC,QAAQ,uBAAuB,MAAM,gBAAgB,WAAW;AACnE;AAAA;AAGF,gBAAI,KAAK,MAAM,IAAI,cAAc,UAAU;AAAA;AAE7C,eAAK,KAAK;AAAA;AAEZ,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,YAAI,UAAU;AAEd,YAAI,KAAK,QAAQ,YAAY;AAC3B,cAAI,uBAAuB,KAAK,iBAC5B,WAAW,qBAAqB,UAChC,SAAS,qBAAqB;AAElC,cAAI,aAAa,KAAK,IAAI;AAC1B,oBAAU,UAAU,QAAQ,SAAU,KAAK;AACzC,gBAAI,CAAC,OAAO,QAAQ,oBAAoB,OAAO,aAAa,MAAM;AAChE;AAAA;AAGF,oBAAQ,KAAK,WAAW;AAAA;AAAA;AAI5B,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,SAAS;AAEb,YAAI,UAAU;AAEd,YAAI,KAAK,QAAQ,eAAe;AAC9B,cAAI,uBAAuB,KAAK,iBAC5B,WAAW,qBAAqB,UAChC,SAAS,qBAAqB;AAElC,cAAI,aAAa,KAAK,IAAI;AAC1B,oBAAU,UAAU,QAAQ,SAAU,QAAQ;AAC5C,gBAAI,CAAC,OAAO,QAAQ,uBAAuB,OAAO,gBAAgB,SAAS;AACzE;AAAA;AAGF,oBAAQ,KAAK,WAAW;AAAA;AAAA;AAI5B,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,OAAO,KAAK,IAAI,cAAc;AAClC,YAAI,OAAO,KAAK,IAAI,cAAc;AAElC,YAAI,sBAAsB,iBAAe,KAAK,QAAQ,OAAO,IACzD,uBAAuB,oBAAoB,IAC3C,WAAW,yBAAyB,SAAS,IAAI,sBACjD,wBAAwB,oBAAoB,IAC5C,WAAW,0BAA0B,SAAS,IAAI,uBAClD,wBAAwB,oBAAoB,IAC5C,SAAS,0BAA0B,SAAS,OAAO,uBACnD,wBAAwB,oBAAoB,IAC5C,SAAS,0BAA0B,SAAS,OAAO;AAEvD,mBAAW,KAAK,IAAI,UAAU;AAC9B,mBAAW,KAAK,IAAI,UAAU;AAC9B,iBAAS,KAAK,IAAI,QAAQ;AAC1B,iBAAS,KAAK,IAAI,QAAQ;AAC1B,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA;AAAA,OAWH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,KAAK;AAChC,eAAO,KAAK,IAAI,eAAe,SAAS,KAAK,IAAI,cAAc;AAAA;AAAA,OAUhE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAQ;AACtC,eAAO,KAAK,IAAI,kBAAkB,SAAS,KAAK,IAAI,iBAAiB;AAAA;AAAA;AAIzE,WAAO;AAAA;AAGT,MAAO,uBAAQ;;;AC9Nf,gCAAO;AAWP,oCAAO;;;ACdP,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAQ/Q,MAAI,WAAwB,2BAAY;AACtC,uBAAkB,cAAc,SAAS;AACvC,yBAAgB,MAAM;AAOtB,WAAK,eAAe;AAOpB,WAAK,UAAU,KAAK,cAAc;AAClC,WAAK,aAAa,WAAW,KAAK;AAAA;AAUpC,oBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,uBAAuB,SAAS;AACrC,YAAI,WAAW,MAAM,KAAK,YAAY;AAEtC,YAAI,OAAO,IAAI;AACf,mBAAW,QAAO,MAAM,UAAS,kBAAkB;AACnD,mBAAW,QAAO,UAAU;AAC5B,iBAAS,WAAW,WAAW,SAAS,UAAU;AAAA,UAChD,MAAM,KAAK;AAAA,UACX,IAAI,GAAG,OAAO,KAAK,aAAa,GAAG,SAAS,GAAG;AAAA,UAC/C,IAAI,GAAG,OAAO,KAAK,WAAW,SAAS,GAAG;AAAA;AAE5C,eAAO;AAAA;AAAA,QAEP,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAMA,gBAAe;AACb,eAAO;AAAA,UACL,UAAU;AAAA,UACV,eAAe;AAAA,UACf,UAAU;AAAA,UACV,UAAU;AAAA,UACV,KAAK;AAAA,UACL,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,qBAAqB;AAAA,UACrB,kBAAkB;AAAA,UAClB,OAAO;AAAA;AAAA;AAAA;AAKb,WAAO;AAAA;AAGT,MAAO,gBAAQ;;;ADnFf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAoBzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAKxM,MAAI,uBAAuB,OAAO,aAAa;AAC/C,MAAI,qBAAqB,OAAO,aAAa;AAC7C,MAAI,iBAAiB,OAAO,aAAa;AAKzC,MAAI,MAAmB,yBAAU,WAAW;AAC1C,gBAAU,MAAK;AAEf,QAAI,SAAS,eAAa;AAE1B,oBAAe;AACb,yBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,oBAAa,MAAK,CAAC;AAAA,MACjB,KAAK;AAAA,MACL,OAMA,mBAAmB;AACjB,YAAI,QAAQ;AAEZ,YAAI,UAAU,KAAK;AACnB,YAAI,OAAO,KAAK,aAAa;AAC7B,YAAI,gBAAgB,KAAK,aAAa;AACtC,YAAI,mBAAmB,cAAc,SAAS;AAC9C,YAAI,aAAa,KAAK,aAAa;AACnC,YAAI,gBAAgB,WAAW,SAAS;AACxC,YAAI,SAAS,QAAQ,MAAM,OAAO,aAAa,SAAU;AAEzD,YAAI,kBAAkB;AACpB,0BAAgB,SAAS,eAAe,SAAU,OAAO;AACvD,mBAAO,MAAM,YAAY,OAAO;AAAA;AAGlC,cAAI,eAAe;AACjB,sBAAU,QAAQ;AAAA;AAGpB,oBAAU,cAAc,KAAK,QAAQ;AACrC,oBAAU,QAAQ;AAAA;AAGpB,kBAAU,MAAM,SAAU,OAAO,QAAO;AACtC,cAAI,SAAQ,GAAG;AACb,sBAAU,QAAQ;AAAA;AAGpB,cAAI,eAAe;AACjB,sBAAU,MAAM,YAAY,WAAW,WAAU,QAAQ;AAAA;AAG3D,oBAAU,MAAM,IAAI,SAAU,WAAW;AACvC,mBAAO,MAAM,YAAY;AAAA,aACxB,KAAK,QAAQ;AAAA;AAElB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,OAAO;AACjC,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,YAAI,eAAe,UAAU;AAE7B,YAAI,iBAAiB,MAAO,UAAS,aAAa,QAAQ,yBAAyB,KAAK,aAAa,QAAQ,uBAAuB,KAAK,aAAa,QAAQ,mBAAmB,KAAK,aAAa,QAAQ,KAAK,QAAQ,oBAAoB,IAAI;AAC9O,yBAAe,aAAa,QAAQ,IAAI,OAAO,KAAK,MAAM;AAC1D,yBAAe,IAAK,OAAO,cAAc;AAAA;AAG3C,eAAO;AAAA;AAAA,QAEP,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAMA,gBAAe;AACb,eAAO;AAAA,UACL,UAAU;AAAA,UACV,eAAe;AAAA,UACf,KAAK;AAAA,UACL,iBAAiB;AAAA,UACjB,cAAc;AAAA;AAAA;AAAA;AAKpB,WAAO;AAAA,IACP;AAEF,MAAO,cAAQ;;;AEvJf,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAGpM,MAAI,WAAW;AAKf,MAAI,eAAe,kBAAgB,IAAI,UAAU;AASzC,uBAAqB,MAAM,cAAc,SAAS;AAC/D,QAAI,OAAO,aAAa,UAAU,YAAY;AAC5C,aAAO,IAAI,aAAa,MAAM,cAAc;AAAA;AAG9C,WAAO;AAAA;;;AJtBT,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAKjM,MAAI,eAAa;AACjB,MAAI,oBAAkB;AA0CtB,MAAI,aAA0B,yBAAU,aAAa;AAC1D,gBAAU,aAAY;AAEtB,QAAI,SAAS,eAAa;AAE1B,2BAAsB;AACpB,yBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,oBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAOA,qBAAqB;AACnB,eAAO;AAAA;AAAA,OAsBR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,SAAQ;AACrC,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAClF,eAAO,KAAK,qBAAqB,SAAQ,SAAS;AAAA;AAAA,OAUnD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,SAAQ;AACnC,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAClF,eAAO,KAAK,YAAY,KAAK,qBAAqB,SAAQ;AAAA;AAAA,OAS3D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,SAAQ;AACnC,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAClF,YAAI,YAAY,KAAK,KACjB,eAAe,UAAU,cACzB,aAAa,UAAU;AAE3B,YAAI,YAAY,KAAK,qBAAqB,SAAQ;AAElD,YAAI,OAAO,KAAK,YAAY;AAE5B,YAAI,OAAM,WAAW,OAAO,WAAW;AACvC,YAAI,IAAI,aAAa,cAAc;AACnC,YAAI,OAAO,GAAG,OAAO,UAAU,QAAQ,UAAU,KAAK,OAAO,UAAU,QAAQ;AAE/E,YAAI,EAAE,aAAa,QAAQ;AACzB,cAAI,MAAM,KAAI,gBAAgB;AAC9B,YAAE,MAAM,UAAU;AAClB,YAAE,aAAa,QAAQ;AACvB,YAAE,aAAa,YAAY;AAC3B,uBAAa,KAAK,YAAY;AAC9B,YAAE,cAAc,IAAI,WAAW;AAC/B,uBAAa,KAAK,YAAY;AAC9B,qBAAW,WAAY;AACrB,iBAAI,gBAAgB;AAAA,aACnB;AAAA,mBACM,UAAU,kBAAkB;AAErC,oBAAU,iBAAiB,MAAM;AAAA;AAAA;AAAA,OAYpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,SAAQ;AAC3C,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAElF,YAAI,CAAC,aAAa,UAAS;AACzB,gBAAM,IAAI,MAAM,uBAAwB,OAAO,SAAQ;AAAA;AAGzD,eAAO,YAAY,SAAQ,IAAI,qBAAa,KAAK,MAAM;AAAA;AAAA,OAUxD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,eAAe;AACzC,YAAI,YAAY;AAEhB,YAAI,OAAO,SAAS,aAAa;AAC/B,sBAAY,IAAI,KAAK,CAAC,cAAc,WAAW;AAAA,YAC7C,MAAM,GAAG,OAAO,cAAc,QAAQ,UAAU,aAAa,OAAO,cAAc,QAAQ;AAAA;AAAA;AAI9F,eAAO;AAAA;AAAA,QAEP,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AKlOF,gCAAO;AAmBP,oCAAO;;;ACHP,oCAAO;AAKP,gCAAO;;;AChCP,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAW/Q,MAAI,gBAA6B,2BAAY;AAC3C,4BAAuB,aAAa,MAAM;AACxC,UAAI,MAAK,KAAK,IACV,iBAAiB,KAAK,WACtB,YAAY,mBAAmB,SAAS,OAAO;AAEnD,yBAAgB,MAAM;AAOtB,WAAK,MAAM;AAOX,WAAK,KAAK;AAOV,WAAK,WAAW;AAOhB,WAAK,SAAS;AAOd,WAAK,UAAU,qBAAqB,OAAO,KAAK;AAOhD,WAAK,QAAQ,YAAY,OAAO,KAAK,IAAI,kBAAkB,YAAY,KAAK,SAAS,IAAI;AAAA;AAO3F,oBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,kBAAU,KAAK,UAAU,SAAU,IAAI;AACrC,iBAAO,GAAG;AAAA;AAAA;AAAA,OAOb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAgB;AACrB,aAAK,SAAS;AAAA;AAAA,OAMf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,aAAK,SAAS;AAAA;AAAA,OAQf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,KAAK,QAAQ,QAAQ,KAAK;AAAA;AAAA,OAUlC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,gBAAgB;AAC3C,YAAI,KAAK,OAAO;AACd,eAAK,SAAS,KAAK,MAAM,gBAAgB;AAAA;AAAA;AAAA,OAO5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,cAAM,IAAI,MAAM;AAAA;AAAA,OAUjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,gBAAgB;AACxC,YAAI,KAAK,OAAO;AACd,eAAK,MAAM,gBAAgB,gBAAgB,KAAK;AAAA;AAAA;AAAA,OAOnD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,cAAM,IAAI,MAAM;AAAA;AAAA,OAMjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,IAAI,kBAAkB,cAAc,KAAK;AAC9C,aAAK;AACL,kBAAU,KAAK,UAAU,SAAU,IAAI;AACrC,iBAAO,GAAG;AAAA;AAEZ,aAAK,QAAQ;AACb,aAAK,WAAW;AAChB,aAAK,MAAM;AAAA;AAAA;AAIf,WAAO;AAAA;AAGT,QAAM,eAAe;AACrB,MAAO,gBAAQ;;;AC/KR,MAAI,aAAa;AASjB,wBAAsB,MAAM,MAAM;AACvC,QAAI,CAAC,WAAW,OAAO;AACrB,YAAM,MAAM,qBAAsB,OAAO,MAAM;AAAA;AAGjD,QAAI,mBAAmB,WAAW,OAC9B,cAAY,iBAAiB,WAC7B,aAAa,iBAAiB;AAClC,QAAI,qBAAqB;AAEzB,QAAI,WAAW,sBAAsB;AACnC,2BAAqB,WAAW,qBAAqB;AAAA;AAGvD,WAAO,SAAU,SAAS;AACxB,aAAO,YAAU,MAAM,QAAQ,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;AAAA;AAAA;AAUjE,kCAAgC,MAAM;AAC3C,QAAI,CAAC,WAAW,OAAO;AACrB,YAAM,MAAM,qBAAsB,OAAO,MAAM;AAAA;AAGjD,WAAO,WAAW,MAAM;AAAA;AAUnB,6BAA2B,MAAM,aAAW,YAAY;AAC7D,eAAW,MAAM;AACjB,eAAW,QAAQ;AAAA,MACjB,WAAW;AAAA,MACX;AAAA;AAAA;;;ACpDG,MAAI,iBAAiB;AAKrB,uBAAqB;AAC1B,WAAO;AAAA;AAET,oBAAkB,gBAAgB,WAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;ACVV,MAAI,kBAAiB;AAMrB,sBAAmB,SAAS;AACjC,WAAO,QAAQ,QAAQ;AAAA;AAEzB,oBAAkB,iBAAgB,YAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;ACZV,MAAI,kBAAiB;AAOrB,sBAAmB,SAAS,aAAa;AAC9C,WAAO,CAAC,aAAa,iBAAiB,aAAa;AAAA;AAErD,oBAAkB,iBAAgB,YAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;ACZjB,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAKxD,MAAI,kBAAiB;AAQrB,sBAAmB,SAAS,MAAM;AACvC,QAAI,QAAQ,iBAAe,MAAM,IAC7B,QAAQ,MAAM;AAElB,WAAO,UAAU,QAAQ,OAAO,kBAAkB,QAAQ,KAAK,YAAY,UAAU;AAAA;AAEvF,oBAAkB,iBAAgB,YAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;ACzCV,MAAI,kBAAiB;AAOrB,sBAAmB,SAAS,aAAa;AAC9C,WAAO,CAAC,aAAa,iBAAiB,aAAa;AAAA;AAErD,oBAAkB,iBAAgB,YAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;ACZjB,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAIxD,MAAI,kBAAiB;AAQrB,sBAAmB,SAAS,MAAM;AACvC,QAAI,QAAQ,iBAAe,MAAM,IAC7B,QAAQ,MAAM;AAElB,QAAI,iBAAiB;AAErB,QAAI,QAAQ,KAAK,SAAS,WAAW;AACnC,uBAAiB,WAAW,gBAAgB;AAAA;AAG9C,WAAO,QAAQ,QAAQ;AAAA;AAEzB,oBAAkB,iBAAgB,YAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;AC7CjB,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAIxD,MAAI,kBAAiB;AAQrB,sBAAmB,SAAS,MAAM;AACvC,QAAI,QAAQ,iBAAe,MAAM,IAC7B,QAAQ,MAAM;AAElB,QAAI,iBAAiB;AAErB,QAAI,QAAQ,KAAK,SAAS,WAAW;AACnC,uBAAiB,WAAW,gBAAgB;AAAA;AAG9C,WAAO,QAAQ,SAAS;AAAA;AAE1B,oBAAkB,iBAAgB,YAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;AC7CjB,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAIxD,MAAI,kBAAiB;AAQrB,sBAAmB,SAAS,MAAM;AACvC,QAAI,QAAQ,iBAAe,MAAM,IAC7B,QAAQ,MAAM;AAElB,QAAI,iBAAiB;AAErB,QAAI,QAAQ,KAAK,SAAS,WAAW;AACnC,uBAAiB,WAAW,gBAAgB;AAAA;AAG9C,WAAO,QAAQ,QAAQ;AAAA;AAEzB,oBAAkB,iBAAgB,YAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;AC7CjB,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAIxD,MAAI,kBAAiB;AAQrB,sBAAmB,SAAS,MAAM;AACvC,QAAI,QAAQ,iBAAe,MAAM,IAC7B,QAAQ,MAAM;AAElB,QAAI,iBAAiB;AAErB,QAAI,QAAQ,KAAK,SAAS,WAAW;AACnC,uBAAiB,WAAW,gBAAgB;AAAA;AAG9C,WAAO,QAAQ,SAAS;AAAA;AAE1B,oBAAkB,iBAAgB,YAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;AC7CjB,oCAAO;AAMP,gCAAO;;;ACNP,oCAAO;AAMP,gCAAO;AAcP,uBAAmB;AAZnB,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAKxD,MAAI,mBAAiB;AAQrB,uBAAmB,SAAS,MAAM;AACvC,QAAI,QAAQ,iBAAe,MAAM,IAC7B,QAAQ,MAAM;AAElB,QAAI,OAAO,4BAAO,QAAQ,OAAO,QAAQ,KAAK;AAC9C,QAAI,YAAY,4BAAO,OAAO,QAAQ,KAAK;AAE3C,QAAI,CAAC,KAAK,aAAa,CAAC,UAAU,WAAW;AAC3C,aAAO;AAAA;AAGT,WAAO,KAAK,KAAK,cAAc;AAAA;AAEjC,oBAAkB,kBAAgB,aAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;AC/CjB,oCAAO;AAMP,gCAAO;AAcP,uBAAmB;AAZnB,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAKxD,MAAI,mBAAiB;AAQrB,uBAAmB,SAAS,MAAM;AACvC,QAAI,QAAQ,iBAAe,MAAM,IAC7B,QAAQ,MAAM;AAElB,QAAI,OAAO,4BAAO,QAAQ,OAAO,QAAQ,KAAK;AAC9C,QAAI,YAAY,4BAAO,OAAO,QAAQ,KAAK;AAE3C,QAAI,CAAC,KAAK,aAAa,CAAC,UAAU,WAAW;AAC3C,aAAO;AAAA;AAGT,WAAO,KAAK,KAAK,cAAc;AAAA;AAEjC,oBAAkB,kBAAgB,aAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;AFvCjB,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAMxD,MAAI,mBAAiB;AASrB,uBAAmB,SAAS,MAAM;AACvC,QAAI,QAAQ,iBAAe,MAAM,IAC7B,QAAO,MAAM,IACb,KAAK,MAAM;AAEf,QAAI,YAAY;AAChB,QAAI,UAAU;AAEd,QAAI,QAAQ,KAAK,SAAS,WAAW;AACnC,UAAI,QAAQ,WAAW,WAAW;AAElC,UAAI,MAAM,WAAW,SAAS;AAE9B,kBAAY,KAAK,IAAI,OAAO;AAC5B,gBAAU,KAAK,IAAI,OAAO;AAAA,eACjB,QAAQ,KAAK,SAAS,QAAQ;AACvC,UAAI,aAAa,aAAa,kBAAuB,CAAC;AACtD,UAAI,YAAY,aAAa,kBAAsB,CAAC;AACpD,aAAO,WAAW,YAAY,UAAU;AAAA;AAG1C,WAAO,QAAQ,SAAS,aAAa,QAAQ,SAAS;AAAA;AAExD,oBAAkB,kBAAgB,aAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;AG5DV,MAAI,mBAAiB;AAOrB,uBAAmB,SAAS,aAAa;AAC9C,WAAO,CAAC,aAAa,kBAAmB,aAAa;AAAA;AAEvD,oBAAkB,kBAAgB,aAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;ACXjB,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAKxD,MAAI,mBAAiB;AAQrB,uBAAmB,SAAS,MAAM;AACvC,QAAI,QAAQ,iBAAe,MAAM,IAC7B,QAAQ,MAAM;AAElB,WAAO,UAAU,QAAQ,OAAO,kBAAkB,QAAQ,KAAK,QAAQ,WAAW,UAAU;AAAA;AAE9F,oBAAkB,kBAAgB,aAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;AC5CjB,MAAI,MAAI;AACR,MAAI,gBAAc;AAClB,MAAI,4BAA2B,6CAA2D;AAC1F,MAAI,YAAW;AACf,MAAI,aAAW;AACf,MAAI,cAAa;AACjB,MAAI,0BAAyB;AAC7B,MAAI,wBAAuB;AAC3B,MAAI,WAAU;AAGd,MAAI,cAAc,cAAY,GAAG;AACjC,MAAI,SAAQ,cAAY,GAAG;AAC3B,MAAI,OAAM,KAAK;AAEf,MAAI,2BAA0B,sBAAqB;AAEnD,MAAI,oBAAmB,CAAC,YAAW,CAAC,4BAA2B,CAAC,CAAC,WAAY;AAC3E,QAAI,aAAa,0BAAyB,OAAO,WAAW;AAC5D,WAAO,cAAc,CAAC,WAAW;AAAA;AAKnC,MAAE,EAAE,QAAQ,UAAU,OAAO,MAAM,QAAQ,CAAC,qBAAoB,CAAC,4BAA2B;AAAA,IAC1F,UAAU,kBAAkB,cAA4C;AACtE,UAAI,OAAO,WAAS,wBAAuB;AAC3C,kBAAW;AACX,UAAI,cAAc,UAAU,SAAS,IAAI,UAAU,KAAK;AACxD,UAAI,MAAM,KAAK;AACf,UAAI,OAAM,gBAAgB,SAAY,MAAM,KAAI,UAAS,cAAc;AACvE,UAAI,SAAS,WAAS;AACtB,aAAO,cACH,YAAY,MAAM,QAAQ,QAC1B,OAAM,MAAM,OAAM,OAAO,QAAQ,UAAS;AAAA;AAAA;;;AC9BlD,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAKxD,MAAI,mBAAiB;AAQrB,uBAAmB,SAAS,MAAM;AACvC,QAAI,QAAQ,iBAAe,MAAM,IAC7B,QAAQ,MAAM;AAElB,WAAO,UAAU,QAAQ,OAAO,kBAAkB,QAAQ,KAAK,QAAQ,SAAS,UAAU;AAAA;AAE5F,oBAAkB,kBAAgB,aAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;ACxCjB,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAKxD,MAAI,mBAAiB;AAQrB,uBAAmB,SAAS,MAAM;AACvC,QAAI,QAAQ,iBAAe,MAAM,IAC7B,QAAQ,MAAM;AAElB,WAAO,UAAU,QAAQ,OAAO,kBAAkB,QAAQ,KAAK,QAAQ,QAAQ,UAAU,WAAW;AAAA;AAEtG,oBAAkB,kBAAgB,aAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;AC1CV,MAAI,mBAAiB;AAOrB,uBAAmB,SAAS,aAAa;AAC9C,WAAO,CAAC,aAAa,kBAAoB,aAAa;AAAA;AAExD,oBAAkB,kBAAgB,aAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA;;;AChBjB,uBAAmB;AAGZ,MAAI,mBAAiB;AAMrB,uBAAmB,SAAS;AACjC,QAAI,OAAO,4BAAO,QAAQ,OAAO,QAAQ,KAAK;AAE9C,QAAI,CAAC,KAAK,WAAW;AACnB,aAAO;AAAA;AAGT,WAAO,KAAK,OAAO,8BAAS,SAAS,IAAI,QAAQ,QAAQ,QAAQ;AAAA;AAEnE,oBAAkB,kBAAgB,aAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA;;;ACpBf,uBAAmB;AAGZ,MAAI,mBAAiB;AAMrB,uBAAmB,SAAS;AACjC,QAAI,OAAO,4BAAO,QAAQ,OAAO,QAAQ,KAAK;AAE9C,QAAI,CAAC,KAAK,WAAW;AACnB,aAAO;AAAA;AAGT,WAAO,KAAK,OAAO,8BAAS,QAAQ,QAAQ;AAAA;AAE9C,oBAAkB,kBAAgB,aAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA;;;ACpBf,wBAAmB;AAGZ,MAAI,mBAAiB;AAMrB,uBAAmB,SAAS;AACjC,QAAI,OAAO,6BAAO,QAAQ,OAAO,QAAQ,KAAK;AAE9C,QAAI,CAAC,KAAK,WAAW;AACnB,aAAO;AAAA;AAGT,WAAO,KAAK,OAAO,+BAAS,SAAS,GAAG,QAAQ,QAAQ,QAAQ;AAAA;AAElE,oBAAkB,kBAAgB,aAAW;AAAA,IAC3C,MAAQ;AAAA,IACR,aAAa;AAAA;;;AChBf,oCAAO;AAMP,gCAAO;;;ACVP,oCAAO;AAUP,MAAI,cAAc;AAwBX,yBAAuB,OAAO,mBAAmB;AACtD,QAAI,cAAc;AAElB,QAAI,gBAAgB,IAAI;AACtB,oBAAc,IAAI,OAAO,mBAAmB;AAAA;AAG9C,WAAO;AAAA;AAET,MAAI,0BAA0B,qBAAI,IAAI,CAAC,KAAI,IAAI;AAC/C,MAAI,sBAAsB,2BAA2B,OAAO,MAAM,SAAS;AAQpE,gCAA8B,aAAa;AAChD,QAAI,UAAU;AAEd,QAAI,yBAAyB;AAC3B,gBAAU,IAAI,IAAI;AAAA;AAGpB,WAAO,SAAU,OAAO;AACtB,UAAI;AAEJ,UAAI,yBAAyB;AAC3B,iBAAS,QAAQ,IAAI;AAAA,aAChB;AAEL,iBAAS,CAAC,CAAC,CAAC,QAAQ,QAAQ;AAAA;AAG9B,aAAO;AAAA;AAAA;AAUJ,yBAAuB,OAAO;AACnC,WAAO,UAAU,QAAQ,UAAU,SAAS,KAAK;AAAA;AAS5C,6BAA2B,SAAQ;AACxC,QAAI,gBAAgB;AAEpB,QAAI,qBAAqB;AACvB,sBAAgB,MAAM,KAAK,IAAI,IAAI;AAAA,WAC9B;AACL,sBAAgB,YAAY;AAAA;AAG9B,oBAAgB,cAAc,KAAK,SAAU,GAAG,GAAG;AACjD,UAAI,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AAClD,eAAO,IAAI;AAAA;AAGb,UAAI,MAAM,GAAG;AACX,eAAO;AAAA;AAGT,aAAO,IAAI,IAAI,IAAI;AAAA;AAErB,WAAO;AAAA;AAYF,2BAAyB,MAAM,UAAU,mBAAmB,UAAU;AAC3E,QAAI,SAAS;AACb,QAAI,OAAO,SAAS;AACpB,QAAI;AAEJ,QAAI,CAAC,MAAM;AACT,+BAAyB,qBAAqB;AAAA;AAGhD,cAAU,MAAM,SAAU,OAAO;AAC/B,UAAI,UAAU;AAEd,UAAI,QAAQ,uBAAuB,QAAQ;AACzC,kBAAU;AAAA;AAGZ,UAAI,OAAO;AAAA,QACT;AAAA,QACA;AAAA,QACA,aAAa,cAAc,OAAO;AAAA;AAGpC,UAAI,UAAU;AACZ,iBAAS;AAAA;AAGX,aAAO,KAAK;AAAA;AAEd,WAAO;AAAA;;;ADzIT,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAIxD,MAAI,mBAAiB;AAQrB,uBAAmB,SAAS,MAAM;AACvC,QAAI,QAAQ,iBAAe,MAAM,IAC7B,QAAQ,MAAM;AAElB,WAAO,MAAM,QAAQ;AAAA;AAEvB,oBAAkB,kBAAgB,aAAW;AAAA,IAC3C,MAAM;AAAA,IACN,aAAa;AAAA,IACb,sBAAsB,8BAA8B,OAAO;AACzD,UAAI,QAAQ,iBAAe,OAAO,IAC9B,OAAO,MAAM;AAEjB,aAAO,CAAC,qBAAqB;AAAA;AAAA,IAE/B,eAAe;AAAA;;;AEhDV,MAAI,aAAa;AAQjB,4BAA0B,KAAI;AACnC,QAAI,CAAC,WAAW,MAAK;AACnB,YAAM,MAAM,sBAAuB,OAAO,KAAI;AAAA;AAGhD,QAAI,OAAO,WAAW,KAAI;AAC1B,WAAO,SAAU,aAAY,OAAO;AAClC,aAAO,KAAK,aAAY;AAAA;AAAA;AAUrB,4BAA0B,KAAI;AACnC,WAAO,WAAW,KAAI;AAAA;AAUjB,6BAA2B,KAAI,MAAM,MAAM;AAChD,eAAW,OAAM;AAAA,MACf;AAAA,MACA;AAAA;AAAA;;;ACrCG,MAAI,eAAe;AACnB,MAAI,2BAA6B;AAQjC,2BAAyB,aAAY,OAAO;AACjD,WAAO,YAAW,MAAM,SAAU,aAAW;AAC3C,aAAO,YAAU,KAAK;AAAA;AAAA;AAG1B,oBAAkB,cAAc,0BAA0B;;;ACdnD,MAAI,gBAAe;AACnB,MAAI,4BAA6B;AAQjC,4BAAyB,aAAY,OAAO;AACjD,WAAO,YAAW,KAAK,SAAU,aAAW;AAC1C,aAAO,YAAU,KAAK;AAAA;AAAA;AAG1B,oBAAkB,eAAc,2BAA0B;;;ACbnD,MAAI,gBAAe;AACnB,MAAI,4BAA6B;AAQjC,4BAAyB,aAAY,OAAO;AACjD,QAAI,YAAW,SAAS,GAAG;AACzB,YAAM,MAAM;AAAA;AAGd,WAAO,YAAW,MAAM,GAAG,YAAW,SAAS,GAAG,KAAK,SAAU,aAAW;AAC1E,aAAO,YAAU,KAAK;AAAA,UAClB,YAAW,YAAW,SAAS,GAAG,KAAK;AAAA;AAE/C,oBAAkB,eAAc,2BAA0B;;;ACtB1D,MAAI;AAEJ,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAiCpM,MAAI,eAAe;AACnB,MAAI,YAAY;AAChB,MAAI,YAAY;AAOhB,MAAI,QAAS,UAAS,IAAI,kBAAgB,QAAQ,cAAc,CAAC,gBAAgB,KAAW,iBAAiB,iBAAqB,KAAW,iBAAiB,iBAAqB,KAAW,iBAAwB,iBAAiC,iBAAqB,iBAA8B,kBAAmB,oBAAyB,kBAAgB,QAAQ,WAAW,CAAC,gBAAgB,KAAW,iBAAiB,iBAAqB,KAAW,iBAAiB,iBAAqB,KAAW,kBAAuB,kBAAqB,KAAW,kBAAoB,oBAA0B,kBAAgB,QAAQ,WAAW,CAAC,gBAAgB,KAAW,iBAAiB,iBAAqB,KAAW,iBAAiB,iBAAqB,KAAW,kBAAuB,kBAAsB,kBAAmB,KAAW,kBAAoB,kBAAiB,oBAAuB;AAS53B,0BAAwB,MAAM;AAC3C,QAAI,QAAQ;AACZ,QAAI,WAAW;AAEf,QAAI,CAAC,MAAM,WAAW;AACpB,iBAAW;AAAA;AAGb,cAAU,MAAM,WAAW,SAAU,WAAW;AAC9C,UAAI;AAEJ,UAAI,cAAc,KAAW;AAC3B,iBAAS;AAAA,UACP,MAAM;AAAA;AAAA,aAEH;AACL,iBAAS,MAAM,uBAAuB;AAAA;AAGxC,YAAM,KAAK;AAAA;AAEb,WAAO;AAAA;;;AChDT,oCAAO;;;ACxBP,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAQ/Q,MAAI,cAAc;AAClB,MAAI,iBAAiB;AACrB,MAAI,qBAAqB,CAAC,SAAS,SAAS,WAAW,YAAY,SAAS,SAAS,QAAQ;AAK7F,MAAI,SAAsB,2BAAY;AACpC,qBAAgB,aAAa,SAAS;AACpC,yBAAgB,MAAM;AAOtB,WAAK,MAAM;AAOX,WAAK,eAAe,IAAI,qBAAa;AAOrC,WAAK,UAAU,QAAO,QAAO,UAAU;AAQvC,WAAK,WAAW,KAAK,IAAI,aAAa,cAAc,KAAK,QAAQ,SAAS,QAAQ,KAAK,QAAQ;AAO/F,WAAK,aAAa;AAAA;AASpB,oBAAa,SAAQ,CAAC;AAAA,MACpB,KAAK;AAAA,MACL,OAAO,kBAAkB,OAAO;AAC9B,aAAK,QAAQ,QAAQ;AACrB,aAAK;AAAA;AAAA,OAQN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,KAAK,QAAQ;AAAA;AAAA,OAQrB;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,YAAI,KAAK,eAAe,gBAAgB;AACtC,iBAAO,KAAK;AAAA;AAGd,YAAI,KAAK,eAAe,aAAa;AACnC,eAAK;AACL,iBAAO,KAAK;AAAA;AAGd,aAAK,aAAa;AAClB,aAAK;AACL,aAAK,aAAa;AAClB,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAO,KAAK,eAAe;AAAA;AAAA,OAS5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,OAAO;AACzC,YAAI,OAAO,UAAU,YAAY,MAAM,WAAa,oBAAoB;AACtE,iBAAO,KAAK,IAAI,oBAAoB;AAAA;AAGtC,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,QAAQ;AAEZ,YAAI,gBAAgB,wBAAuB,UAAS,WAAW;AAC7D,gBAAM,aAAa,iBAAiB,UAAS,WAAW,SAAU,QAAO;AACvE,mBAAO,MAAM,cAAc,WAAW,QAAO;AAAA;AAAA;AAIjD,YAAI,CAAC,KAAK,YAAY;AACpB,eAAK,aAAa;AAAA;AAGpB,YAAI,KAAK,QAAQ,WAAW;AAC1B,mBAAS,KAAK,UAAU,KAAK,QAAQ;AAAA;AAGvC,YAAI,KAAK,QAAQ,SAAS,QAAQ;AAChC,oBAAU,KAAK,QAAQ,UAAU,SAAU,UAAS;AAClD,mBAAO,MAAM,SAAS,YAAY,SAAQ;AAAA;AAAA,mBAEnC,KAAK,QAAQ,QAAQ;AAC9B,cAAI,UAAU,KAAK,IAAI,aAAa,cAAc,KAAK,QAAQ;AAC/D,qBAAW,KAAK,SAAS,SAAU,OAAO,KAAK;AAC7C,gBAAI,QAAQ,SAAS,UAAU,QAAQ,eAAe,QAAQ,aAAa,QAAQ,YAAY;AAC7F,sBAAQ,OAAO,MAAM,oBAAoB;AAAA;AAAA;AAI7C,eAAK,SAAS,YAAY;AAE1B,oBAAU,oBAAoB,SAAU,WAAW;AACjD,mBAAO,cAAc,SAAS;AAAA;AAAA,eAE3B;AACL,oBAAU,oBAAoB,SAAU,WAAW;AACjD,mBAAO,cAAc,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA,OAQ1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AAAA;AAAA,OAKxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,QAAQ,QAAQ;AACrB,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB;AACrB,aAAK,QAAQ,MAAM,UAAU;AAAA;AAAA,OAM9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAgB;AACrB,aAAK,QAAQ,MAAM,UAAU;AAAA;AAAA,OAM9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AAAA;AAAA,OACvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,aAAa;AAClB,aAAK,eAAe;AACpB,aAAK,MAAM;AAEX,YAAI,KAAK,SAAS,YAAY;AAC5B,eAAK,SAAS,WAAW,YAAY,KAAK;AAAA;AAG5C,aAAK,WAAW;AAAA;AAAA,QAEhB,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO,MAAM;AAAA,UACX,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAU;AAAA,UACV,QAAQ;AAAA;AAAA;AAAA;AAKd,WAAO;AAAA;AAGT,QAAM,QAAQ;AACd,MAAO,gBAAQ;;;AD7Pf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAkBxM,MAAI,gBAAc,oBAAI;AAMtB,MAAI,UAAuB,yBAAU,SAAS;AAC5C,gBAAU,UAAS;AAEnB,QAAI,SAAS,eAAa;AAE1B,sBAAiB,aAAa,SAAS;AACrC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,aAAa,QAAO,SAAQ,UAAU;AAChE,oBAAY,IAAI,yBAAuB,QAAQ;AAE/C,YAAM;AAEN,aAAO;AAAA;AAOT,oBAAa,UAAS,CAAC;AAAA,MACrB,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,aAAK,aAAa,SAAS,WAAY;AACrC,iBAAO,OAAO;AAAA;AAEhB,aAAK,aAAa,SAAS,SAAU,QAAO;AAC1C,iBAAO,OAAO,QAAQ;AAAA;AAAA;AAAA,OAOzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,eAAK,kBAAgB,SAAQ,YAAY,SAAS,MAAM,KAAK;AAE7D,YAAI,OAAO,cAAY,IAAI;AAC3B,YAAI,OAAO,KAAK,IAAI,aAAa,cAAc;AAC/C,aAAK,QAAQ,KAAK,SAAS;AAC3B,iBAAS,KAAK,UAAU;AACxB,iBAAS,MAAM;AAEf,aAAK,SAAS,YAAY;AAE1B,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,CAAC,KAAK,WAAW;AACnB;AAAA;AAGF,YAAI,QAAQ,cAAY,IAAI,MAAM;AAClC,cAAM,OAAO,KAAK,QAAQ;AAC1B,cAAM,cAAc,KAAK,oBAAoB,KAAK,QAAQ;AAC1D,cAAM,QAAQ,KAAK,oBAAoB,KAAK,QAAQ;AAAA;AAAA,OAMrD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,KAAK,WAAW;AAClB,wBAAY,IAAI,MAAM,MAAM;AAAA;AAAA;AAAA,OAO/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAmB;AAAA;AAAA,OAOzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,QAAO;AAC7B,aAAK,QAAQ,QAAQ,OAAM,OAAO;AAAA;AAAA,QAElC,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO,MAAM;AAAA,UACX,aAAa;AAAA,UACb,MAAM;AAAA,UACN,SAAS;AAAA;AAAA;AAAA;AAKf,WAAO;AAAA,IACP;AAEF,MAAO,gBAAQ;;;AEtIf,oCAAO;AA1BP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAsBxM,MAAI,gBAAc,oBAAI;AAMtB,MAAI,WAAwB,yBAAU,SAAS;AAC7C,gBAAU,WAAU;AAEpB,QAAI,SAAS,eAAa;AAE1B,uBAAkB,aAAa,SAAS;AACtC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,aAAa,QAAO,UAAS,UAAU;AACjE,oBAAY,IAAI,yBAAuB,QAAQ;AAO/C,YAAM,OAAO;AAOb,YAAM,QAAQ;AAEd,YAAM;AAEN,aAAO;AAAA;AAOT,oBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,aAAK,aAAa,SAAS,WAAY;AACrC,iBAAO,OAAO;AAAA;AAAA;AAAA,OASjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,OAAO;AAC9B,aAAK,QAAQ,KAAK,eAAe;AAEjC,YAAI,KAAK,MAAM;AACb,eAAK,KAAK,aAAa,KAAK;AAAA;AAAA;AAAA,OAU/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,OAAO;AACpC,YAAI,SAAS;AAEb,kBAAU,OAAO,SAAU,MAAM;AAC/B,eAAK,OAAO,OAAO,oBAAoB,KAAK;AAAA;AAE9C,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,SAAS;AAEb,eAAK,kBAAgB,UAAS,YAAY,SAAS,MAAM,KAAK;AAE9D,aAAK,OAAO,IAAI,aAAK,KAAK,KAAK;AAAA,UAC7B,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,YAAY;AAAA,UACZ,WAAW,KAAK,QAAQ;AAAA;AAE1B,aAAK,KAAK,aAAa,KAAK;AAC5B,YAAI,UAAU,IAAI,cAAO,KAAK,KAAK;AAAA,UACjC,WAAW;AAAA;AAEb,YAAI,WAAW,IAAI,cAAO,KAAK,KAAK;AAAA,UAClC,WAAW;AAAA;AAEb,YAAI,OAAO,cAAY,IAAI;AAC3B,aAAK,UAAU;AACf,aAAK,iBAAiB,QAAQ;AAC9B,aAAK,WAAW;AAChB,kBAAU,CAAC,SAAS,WAAW,SAAU,SAAS;AAChD,iBAAO,OAAO,SAAS,YAAY,QAAQ;AAAA;AAE7C,aAAK,KAAK,aAAa,UAAU,SAAU,SAAS;AAClD,iBAAO,OAAO,aAAa;AAAA;AAE7B,aAAK,KAAK,aAAa,cAAc,WAAY;AAC/C,iBAAO,OAAO;AAAA;AAEhB,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,CAAC,KAAK,WAAW;AACnB;AAAA;AAGF,YAAI;AAEJ,YAAI,KAAK,QAAQ,OAAO;AACtB,0BAAgB,KAAK,QAAQ,MAAM;AAAA,eAC9B;AACL,0BAAgB,KAAK,KAAK,IAAI,oBAAsB;AAAA;AAGtD,sBAAY,IAAI,MAAM,eAAe,cAAc;AAEnD,eAAK,kBAAgB,UAAS,YAAY,UAAU,MAAM,KAAK;AAAA;AAAA,OAMhE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,OAAO,KAAK,QAAQ;AAExB,YAAI,KAAK,MAAM;AACb,eAAK,KAAK;AACV,eAAK,KAAK,YAAY;AAAA,YACpB,MAAM,KAAK,OAAO;AAAA,YAClB,KAAK,KAAK,MAAM;AAAA,YAChB,OAAO,KAAK;AAAA,YACZ,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA,OAQlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,KAAK,MAAM;AACb,eAAK,KAAK;AAAA;AAAA;AAAA,OAUb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,SAAS;AACpC,YAAI,QAAQ,SAAS,KAAW;AAC9B,eAAK,QAAQ,QAAQ;AACrB,eAAK;AACL,eAAK,cAAc,UAAU,KAAK,QAAQ;AAAA;AAAA;AAAA,OAS7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK,cAAc;AAAA;AAAA,OAQpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAmB;AACxB,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,KAAK,MAAM;AACb,eAAK,KAAK;AACV,eAAK,OAAO;AAAA;AAGd,YAAI,mBAAmB,cAAY,IAAI,OACnC,UAAU,iBAAiB,SAC3B,WAAW,iBAAiB;AAEhC,YAAI,SAAS;AACX,kBAAQ;AAAA;AAGV,YAAI,UAAU;AACZ,mBAAS;AAAA;AAGX,eAAK,kBAAgB,UAAS,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAEhE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO,MAAM;AAAA,UACX,WAAW;AAAA,UACX,QAAQ;AAAA;AAAA;AAAA;AAKd,WAAO;AAAA,IACP;AAEF,MAAO,iBAAQ;;;AjC1Sf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAsBhL,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAkBxM,MAAI,qBAAkC,yBAAU,gBAAgB;AAC9D,gBAAU,qBAAoB;AAE9B,QAAI,SAAS,eAAa;AAE1B,iCAA4B,aAAa,SAAS;AAChD,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,aAAa;AAAA,QACrC,IAAI,QAAQ;AAAA,QACZ,WAAW;AAAA;AAEb,YAAM,OAAO,QAAQ;AACrB,YAAM,eAAe,QAAQ;AAE7B,YAAM,SAAS,KAAK,IAAI,eAAS,MAAM,KAAK;AAAA,QAC1C,eAAe,QAAQ;AAAA;AAGzB,YAAM,SAAS,KAAK,IAAI,cAAQ,MAAM,KAAK;AAAA,QACzC,aAAe;AAAA;AAGjB,YAAM,SAAS,KAAK,IAAI,cAAQ,MAAM,KAAK;AAAA,QACzC,aAAe;AAAA;AAGjB,YAAM;AAEN,aAAO;AAAA;AAST,oBAAa,qBAAoB,CAAC;AAAA,MAChC,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,aAAK,mBAAmB,aAAa,UAAU,SAAU,SAAS;AAChE,iBAAO,OAAO,kBAAkB;AAAA;AAElC,aAAK,mBAAmB,aAAa,cAAc,WAAY;AAC7D,iBAAO,OAAO;AAAA;AAEhB,kBAAU,KAAK,oBAAoB,SAAU,OAAO;AAClD,gBAAM,aAAa,WAAW,SAAU,QAAO;AAC7C,mBAAO,OAAO,eAAe;AAAA;AAAA;AAAA;AAAA,OAUlC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,OAAO;AAC9B,YAAI,SAAS;AAEb,aAAK;AAEL,YAAI,CAAC,OAAO;AACV;AAAA;AAGF,YAAI,gBAAgB,MAAM,MAAM;AAEhC,YAAI,cAAc,KAAK,WAAa,+BAA+B;AACjE,wBAAc,OAAO,KAAK,IAAI,oBAAoB,cAAc;AAAA;AAGlE,aAAK,mBAAmB,SAAS;AACjC,kBAAU,MAAM,MAAM,SAAU,KAAK,QAAO;AAC1C,cAAI,SAAQ,cAAc,cAAc,GAAG;AACzC,mBAAO;AAAA;AAGT,cAAI,UAAU,OAAO,gBAAgB;AAErC,kBAAQ,SAAS;AACjB,kBAAQ,cAAc,cAAc,SAAQ,SAAS;AAErD,cAAI,CAAC,QAAO;AACV,uBAAW,WAAY;AACrB,qBAAO,QAAQ;AAAA,eACd;AAAA;AAAA;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,YAAI,UAAU,KAAK,mBAAmB,cAAc,uBAAuB;AAC3E,YAAI,OAAO;AACX,kBAAU,KAAK,oBAAoB,SAAU,SAAS,QAAO;AAC3D,cAAI,QAAQ,cAAc,QAAO;AAC/B,iBAAK,KAAK,QAAQ;AAAA;AAAA;AAGtB,eAAO;AAAA,UACL;AAAA,UACA;AAAA;AAAA;AAAA,OAYH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,aAAW,QAAQ;AAC7C,YAAI,UAAU,cAAY,uBAAuB,YAAU,QAAQ,uBAAuB;AAC1F,aAAK,MAAM,gBAAgB,QAAQ;AAAA,UACjC;AAAA,UACA,MAAM,cAAY,YAAU,OAAO;AAAA;AAGrC,YAAI,CAAC,aAAW;AACd,oBAAU,KAAK,oBAAoB,SAAU,SAAS;AACpD,mBAAO,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA,OAU7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,eAAO,KAAK,SAAS,OAAO,SAAU,SAAS;AAC7C,iBAAO,mBAAmB;AAAA,WACzB;AAAA;AAAA,OASJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,YAAI,SAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,eAAO,KAAK,mBAAmB;AAAA;AAAA,OAQhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,eAAO,KAAK,SAAS,OAAO,SAAU,SAAS;AAC7C,iBAAO,mBAAmB;AAAA;AAAA;AAAA,OAS7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,SAAS;AAEb,eAAO;AAAA,UACL,KAAK,KAAK;AAAA,UACV,MAAM,KAAK;AAAA,UACX,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,QAAQ,kBAAkB;AACxB,mBAAO,OAAO;AAAA;AAAA,UAEhB,UAAU,kBAAkB,KAAK,UAAS,KAAK,KAAK,MAAM,OAAO;AAC/D,qBAAS,SAAQ,YAAY;AAE7B,gBAAI,OAAO,cAAc;AACvB,uBAAS,SAAQ,YAAY;AAAA;AAG/B,gBAAI,QAAQ,OAAO,IAAI,aAAa,cAAc;AAElD,qBAAS,OAAO;AAChB,kBAAM,cAAc;AACpB,qBAAQ,YAAY;AAEpB,gBAAI,CAAC,SAAQ,WAAW,aAAa,gBAAgB;AACnD,wBAAU,OAAO,UAAU,SAAU,IAAI;AACvC,uBAAO,SAAQ,YAAY,GAAG;AAAA;AAAA;AAIlC,mBAAO;AAAA;AAAA;AAAA;AAAA,OAQZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI;AAEJ,YAAI,qBAAqB,KAAK,IAAI,UAAU,WAAW;AACvD,YAAI,cAAc,sBAAsB,mBAAmB;AAE3D,YAAI,aAAc,aAAY,KAAK,KAAK,YAAY,MAAM,WAAW,qBAAmB,KAAK,IAAI,qBAAqB,CAAC,GAAG;AAE1H,YAAI,QAAQ,eAAe;AAC3B,kBAAU,KAAK,oBAAoB,SAAU,SAAS;AACpD,iBAAO,QAAQ;AAAA;AAEjB,aAAK,mBAAmB,SAAS;AAEjC,eAAK,kBAAgB,oBAAmB,YAAY,SAAS,MAAM,KAAK;AAGxE,aAAK,mBAAmB,SAAS,MAAM;AAAA;AAAA,OASxC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,SAAS;AACzC,kBAAU,KAAK,oBAAoB,SAAU,SAAS,QAAO;AAC3D,kBAAQ,QAAQ,cAAc,SAAQ,SAAS;AAE/C,cAAI,WAAU,GAAG;AACf,uBAAW,WAAY;AACrB,qBAAO,QAAQ;AAAA,eACd;AAAA;AAAA;AAGP,aAAK,cAAc,UAAU;AAAA;AAAA,OAQ9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,aAAK,cAAc;AAAA;AAAA,OASpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAO;AACpC,YAAI,MAAM,OAAM,SAAS,UAAU;AACjC,eAAK,cAAc;AACnB,mCAAyB;AAAA,mBAChB,MAAM,OAAM,SAAS,WAAW;AACzC,eAAK,cAAc;AACnB,mCAAyB;AAAA;AAAA;AAAA;AAK/B,WAAO;AAAA,IACP;AAEF,MAAO,oBAAQ;;;AkChXf,oCAAO;;;ACgBP,oCAAO;AA1BP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAiBxM,MAAI,gBAAc,oBAAI;AAMtB,MAAI,eAA4B,yBAAU,SAAS;AACjD,gBAAU,eAAc;AAExB,QAAI,SAAS,eAAa;AAE1B,2BAAsB,aAAa,SAAS;AAC1C,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,aAAa,QAAO,cAAa,UAAU;AACrE,oBAAY,IAAI,yBAAuB,QAAQ;AAC/C,aAAO;AAAA;AAOT,oBAAa,eAAc,CAAC;AAAA,MAC1B,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,eAAK,kBAAgB,cAAa,YAAY,SAAS,MAAM,KAAK;AAElE,YAAI,OAAO,cAAY,IAAI;AAC3B,aAAK,QAAQ,KAAK,SAAS;AAC3B,YAAI,QAAQ,KAAK,IAAI,aAAa,cAAc;AAChD,cAAM,cAAc,KAAK,oBAAoB,KAAK,QAAQ,MAAM;AAChE,cAAM,UAAU,KAAK,oBAAoB,KAAK,QAAQ,MAAM;AAC5D,aAAK,QAAQ;AAEb,aAAK,SAAS,YAAY;AAE1B,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,CAAC,KAAK,WAAW;AACnB;AAAA;AAGF,YAAI,OAAO,cAAY,IAAI;AAC3B,aAAK,MAAM,UAAU,KAAK,QAAQ;AAClC,aAAK,MAAM,cAAc,KAAK,oBAAoB,KAAK,QAAQ,MAAM;AAAA;AAAA,OAQtE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,QAAQ;AAAA;AAAA,OAQrB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,aAAK,QAAQ,UAAU;AACvB,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,KAAK,WAAW;AAClB,wBAAY,IAAI,MAAM,MAAM;AAAA;AAAA;AAAA,QAG9B,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO,MAAM;AAAA,UACX,MAAM;AAAA,UACN,SAAS;AAAA,UACT,WAAW;AAAA,UACX,OAAO;AAAA;AAAA;AAAA;AAKb,WAAO;AAAA,IACP;AAEF,MAAO,qBAAQ;;;ADnJf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAczU,MAAI;AAEJ,mCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAM1K,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAWxM,MAAI,kCAAkC;AAMtC,MAAI,qBAAkC,yBAAU,gBAAgB;AAC9D,gBAAU,qBAAoB;AAE9B,QAAI,SAAS,eAAa;AAE1B,iCAA4B,aAAa,SAAS;AAChD,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,aAAa;AAAA,QACrC,IAAI,QAAQ;AAAA,QACZ,WAAW;AAAA;AAEb,YAAM,OAAO,QAAQ;AAErB,YAAM;AAEN,aAAO;AAAA;AAST,oBAAa,qBAAoB,CAAC;AAAA,MAChC,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,SAAS;AAEb,eAAO;AAAA,UACL,KAAK,KAAK;AAAA,UACV,MAAM,KAAK;AAAA,UACX,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,QAAQ,kBAAkB;AACxB,mBAAO,OAAO;AAAA;AAAA,UAEhB,UAAU,kBAAkB,KAAK,UAAS;AACxC,qBAAS,SAAQ,YAAY;AAE7B,gBAAI,CAAC,SAAQ,WAAW,aAAa,gBAAgB;AACnD,wBAAU,OAAO,UAAU,SAAU,IAAI;AACvC,uBAAO,SAAQ,YAAY,GAAG;AAAA;AAAA;AAIlC,mBAAO;AAAA;AAAA;AAAA;AAAA,OAUZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,SAAS;AAEb,YAAI,gBAAgB,CAAC,cAAe;AACpC,kBAAU,eAAe,SAAU,WAAW;AAC5C,cAAI,aAAa,IAAI,mBAAa,OAAO,KAAK;AAAA,YAC5C,MAAM;AAAA,YACN,OAAO;AAAA,cACL,SAAS;AAAA,cACT,aAAa,iBAAiB;AAAA;AAAA,YAEhC,OAAO;AAAA,YACP,SAAS,cAAc,cAAc;AAAA,YACrC,IAAI;AAAA;AAEN,qBAAW,aAAa,UAAU,SAAU,QAAO;AACjD,mBAAO,OAAO,mBAAmB;AAAA;AAGnC,iBAAO,SAAS,KAAK;AAAA;AAAA;AAAA,OASxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,eAAe;AACxC,YAAI,KAAK,SAAS,SAAS,eAAe;AACxC,gBAAM,MAAM,aAAa,qBAAoB,qBAAkB,wBAAuB,CAAC,4BAA4B,sBAAsB;AAAA;AAG3I,kBAAU,KAAK,UAAU,SAAU,SAAS,QAAO;AACjD,kBAAQ,WAAW,WAAU;AAAA;AAAA;AAAA,OAShC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,mBAAmB,KAAK,SAAS,KAAK,SAAU,SAAS;AAC3D,iBAAO,mBAAmB,sBAAgB,QAAQ;AAAA;AAGpD,YAAI,kBAAkB;AACpB,iBAAO,iBAAiB;AAAA;AAG1B,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,OAAO;AAC9B,aAAK;AAEL,YAAI,SAAS,KAAK,2BAA2B,OAAO;AAClD,oBAAU,KAAK,UAAU,SAAU,SAAS;AAC1C,oBAAQ,WAAW,QAAQ,eAAe;AAAA;AAAA;AAAA;AAAA,OAW/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACtF,YAAI,SAAS,UAAU,SAAS,IAAI,UAAU,KAAK;AACnD,YAAI,sBAAsB;AAE1B,YAAI,wBAAwB,eAA4B;AACtD,gCAAsB;AAAA;AAGxB,aAAK,MAAM,gBAAgB,QAAQ;AAAA;AAAA,OAMpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,WAAW;AAAA;AAAA,OASjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,QAAO;AACxC,aAAK,SAAS,OAAM,OAAO;AAAA;AAAA;AAI/B,WAAO;AAAA,IACP;AAEF,MAAO,oBAAQ;;;AEjOf,oCAAO;AAKP,gCAAO;;;ACQP,oCAAO;AAkBP,gCAAO;;;AC9BP,oCAAO;;;ACzBP,MAAI,MAAI;AACR,MAAI,aAAa;AACjB,MAAI,yBAAyB;AAI7B,MAAE,EAAE,QAAQ,UAAU,OAAO,MAAM,QAAQ,uBAAuB,WAAW;AAAA,IAC3E,MAAM,cAAc,KAAK;AACvB,aAAO,WAAW,MAAM,KAAK,QAAQ;AAAA;AAAA;;;ADTzC,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAkBxM,MAAI,gBAAc,oBAAI;AAMtB,MAAI,SAAsB,yBAAU,SAAS;AAC3C,gBAAU,SAAQ;AAElB,QAAI,SAAS,eAAa;AAE1B,qBAAgB,aAAa,SAAS;AACpC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,aAAa,QAAO,QAAO,UAAU;AAC/D,oBAAY,IAAI,yBAAuB,QAAQ;AAC/C,aAAO;AAAA;AAOT,oBAAa,SAAQ,CAAC;AAAA,MACpB,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,eAAK,kBAAgB,QAAO,YAAY,SAAS,MAAM,KAAK;AAE5D,YAAI,OAAO,cAAY,IAAI;AAC3B,aAAK,OAAO,KAAK,SAAS;AAAA;AAAA,OAM3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,CAAC,KAAK,WAAW;AACnB;AAAA;AAGF,sBAAY,IAAI,MAAM,KAAK,cAAc,KAAK,oBAAoB,KAAK,QAAQ;AAAA;AAAA,QAE/E,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO,MAAM;AAAA,UACX,MAAM;AAAA,UACN,SAAS;AAAA;AAAA;AAAA;AAKf,WAAO;AAAA,IACP;AAEF,MAAO,eAAQ;;;ADrGf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAiCxM,MAAI,gBAAc,oBAAI;AAMtB,MAAI,mBAAgC,yBAAU,SAAS;AACrD,gBAAU,mBAAkB;AAE5B,QAAI,SAAS,eAAa;AAE1B,+BAA0B,aAAa,SAAS;AAC9C,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,aAAa,QAAO,kBAAiB,UAAU;AACzE,oBAAY,IAAI,yBAAuB,QAAQ;AAO/C,YAAM,cAAc,IAAI,cAAQ,MAAM,KAAK;AAAA,QACzC,aAAe;AAAA,QACf,WAAW;AAAA;AAQb,YAAM,cAAc,IAAI,aAAO,MAAM,KAAK;AAAA,QACxC,aAAe;AAAA,QACf,WAAW;AAAA;AAQb,YAAM,aAAa,IAAI,aAAO,MAAM,KAAK;AAAA,QACvC,aAAe;AAAA,QACf,WAAW;AAAA;AAQb,YAAM,QAAQ;AAOd,YAAM,WAAW;AAEjB,YAAM;AAEN,aAAO;AAAA;AAOT,oBAAa,mBAAkB,CAAC;AAAA,MAC9B,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,aAAK,YAAY,aAAa,WAAW,SAAU,QAAO;AACxD,iBAAO,OAAO,eAAe;AAAA;AAE/B,aAAK,YAAY,aAAa,SAAS,SAAU,QAAO;AACtD,iBAAO,OAAO,QAAQ;AAAA;AAExB,aAAK,YAAY,aAAa,SAAS,SAAU,QAAO;AACtD,iBAAO,OAAO,iBAAiB;AAAA;AAEjC,aAAK,WAAW,aAAa,SAAS,SAAU,QAAO;AACrD,iBAAO,OAAO,gBAAgB;AAAA;AAAA;AAAA,OASjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,OAAO;AAC9B,aAAK,QAAQ;AAEb,YAAI,KAAK,UAAU;AACjB,eAAK,SAAS,SAAS,KAAK;AAAA;AAAA;AAAA,OAS/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,QAAQ;AAChC,aAAK,SAAS;AAAA;AAAA,OAQf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,qBAAmB,KAAK;AAAA;AAAA,OAQhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,aAAa,KAAK;AAAA;AAAA,OAQ1B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,eAAO,KAAK,MAAM,WAAW,KAAK,WAAW;AAAA;AAAA,OAM9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,SAAS;AAEb,eAAK,kBAAgB,kBAAiB,YAAY,SAAS,MAAM,KAAK;AAEtE,YAAI,eAAe,KAAK,IAAI;AAC5B,YAAI,kBAAkB,aAAa,cAAc;AACjD,YAAI,mBAAmB,IAAI,cAAO,KAAK,KAAK;AAAA,UAC1C,WAAW;AAAA,UACX,UAAU,CAAC,KAAK,aAAa,KAAK;AAAA;AAGpC,aAAK,SAAS,YAAY,KAAK,YAAY;AAE3C,aAAK,SAAS,YAAY,iBAAiB;AAE3C,aAAK,SAAS,YAAY;AAE1B,YAAI,iBAAiB,yBAAwB,UAAS;AACpD,cAAI,CAAC,OAAO,UAAU;AACpB;AAAA;AAGF,cAAI,OAAO,UAAU;AACnB,mBAAO,SAAS;AAAA;AAGlB,mBAAS,UAAS;AAElB,iBAAO,WAAW,IAAI,OAAO,IAAI,YAAY,UAAS;AAAA,YACpD,MAAM,OAAO;AAAA,YACb,SAAS,CAAC;AAAA,cACR,MAAM;AAAA,cACN,MAAM;AAAA,cACN,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,UAAU;AAAA;AAAA;AAAA,YAGd,gBAAgB,wBAAwB,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AACjF,iBAAG,QAAQ,eAAe,SAAS,iBAAiB,KAAK,eAAe,MAAM;AAAA;AAAA,YAEhF,SAAS;AAAA,YACT,aAAa;AAAA,YACb,QAAQ;AAAA,YAER,WAAW,qBAAqB;AAC9B,qBAAO,OAAO,SAAS,UAAU,cAAc,kBAAkB;AAAA;AAAA,YAEnE,WAAW;AAAA,YACX,wBAAwB;AAAA,YACxB,YAAY;AAAA,YACZ,mBAAmB;AAAA,YACnB,UAAU;AAAA,cACR,KAAK;AAAA,cACL,KAAK;AAAA;AAAA,YAEP,eAAe,uBAAuB,QAAO;AAC3C,qBAAO,OAAO,wBAAwB;AAAA;AAAA;AAI1C,iBAAO,SAAS;AAAA;AAGlB,uBAAe;AACf,mBAAW,WAAY;AACrB,iBAAO,eAAe;AAAA,WACrB;AAAA;AAAA,OAMJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,YAAY;AACjB,aAAK,YAAY;AACjB,aAAK,WAAW;AAAA;AAAA,OAMjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,YAAI,CAAC,KAAK,WAAW;AACnB;AAAA;AAGF,aAAK,SAAS,SAAS,aAAa,KAAK,OAAO,KAAK,QAAQ;AAE7D,eAAK,kBAAgB,kBAAiB,YAAY,UAAU,MAAM,KAAK;AAAA;AAAA,OAMxE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,KAAK,UAAU;AACjB,eAAK,SAAS;AAAA;AAGhB,aAAK,YAAY;AACjB,aAAK,WAAW;AAChB,aAAK,YAAY;AACjB,aAAK,cAAc;AACnB,aAAK,aAAa;AAClB,aAAK,cAAc;AACnB,aAAK,WAAW;AAChB,aAAK,QAAQ;AAEb,eAAK,kBAAgB,kBAAiB,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,OASzE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,QAAO;AAC7B,YAAI,SAAS;AAEb,YAAI,QAAQ,OAAM,OAAO,MAAM,kBAAkB,KAAK;AACtD,YAAI;AAEJ,YAAI,UAAU,IAAI;AAChB,0BAAgB,qBAAmB,KAAK;AAAA,eACnC;AACL,0BAAgB,YAAY,KAAK,OAAO,SAAU,MAAM;AACtD,mBAAO,GAAG,OAAO,KAAK,OAAO,kBAAkB,OAAO,aAAa,QAAQ,UAAU;AAAA;AAAA;AAIzF,aAAK,SAAS,SAAS;AAAA;AAAA,OASxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAO;AACpC,aAAK,cAAc,WAAW,QAAO;AACrC,YAAI,YAAY,QAAQ,OAAO,OAAM;AAErC,YAAI,UAAU,qBAAqB,CAAC,KAAK,SAAS,eAAe;AAC/D,mCAAyB;AACzB,eAAK,SAAS;AACd,eAAK,SAAS,WAAW,GAAG;AAAA;AAAA;AAAA,OAU/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAO;AAC7C,YAAI,YAAY,QAAQ,OAAO,OAAM;AAErC,YAAI,UAAU,WAAW;AACvB,eAAK,cAAc,WAAW,QAAO;AAAA;AAIvC,YAAI,CAAC,UAAU,+DAA+D;AAC5E,mCAAyB;AACzB,eAAK,SAAS;AACd,eAAK,SAAS;AACd,eAAK,YAAY;AAAA;AAAA;AAAA,OAUpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,QAAO;AACtC,YAAI,UAAU;AACd,eAAM;AACN,kBAAU,KAAK,SAAS,iBAAiB,SAAU,KAAK,UAAU;AAChE,cAAI,UAAU;AACd,kBAAQ,KAAK,sBAAsB,KAAK,UAAU;AAAA;AAEpD,aAAK,SAAS,oBAAoB;AAAA;AAAA,OASnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAO;AACrC,YAAI,UAAU;AACd,eAAM;AACN,kBAAU,KAAK,SAAS,iBAAiB,SAAU,KAAK,UAAU;AAChE,cAAI,UAAU;AACd,kBAAQ,KAAK,sBAAsB,KAAK,UAAU;AAAA;AAEpD,aAAK,SAAS,oBAAoB;AAAA;AAAA,QAElC,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO,MAAM;AAAA,UACX,WAAW;AAAA,UACX,OAAO;AAAA;AAAA;AAAA;AAKb,WAAO;AAAA,IACP;AAEF,MAAO,yBAAQ;AASf,wBAAsB,gBAAgB,eAAe;AACnD,QAAI,iBAAiB,qBAAqB;AAC1C,WAAO,SAAS,gBAAgB,SAAU,MAAM;AAC9C,WAAK,UAAU,eAAe,KAAK;AACnC,aAAO;AAAA;AAAA;AAWX,wBAAsB,gBAAgB;AACpC,QAAI,QAAQ;AACZ,cAAU,gBAAgB,SAAU,MAAM;AACxC,UAAI,KAAK,SAAS;AAChB,cAAM,KAAK,KAAK;AAAA;AAAA;AAGpB,WAAO;AAAA;;;ADrfT,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAoB/D,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAiBxM,MAAI,iBAA8B,yBAAU,gBAAgB;AAC1D,gBAAU,iBAAgB;AAE1B,QAAI,SAAS,eAAa;AAE1B,6BAAwB,aAAa,SAAS;AAC5C,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,aAAa;AAAA,QACrC,IAAI,QAAQ;AAAA,QACZ,WAAW;AAAA;AAEb,YAAM,OAAO,QAAQ;AAErB,YAAM,SAAS,KAAK,IAAI,uBAAiB,MAAM;AAE/C,YAAM;AAEN,aAAO;AAAA;AAST,oBAAa,iBAAgB,CAAC;AAAA,MAC5B,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,aAAK,2BAA2B,aAAa,WAAW,SAAU,QAAO;AACvE,iBAAO,OAAO,eAAe;AAAA;AAAA;AAAA,OAShC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,OAAO;AAC9B,aAAK;AAEL,YAAI,SAAS,MAAM,QAAQ,QAAQ,kBAAoB;AACrD,cAAI,SAAS,KAAK;AAClB,iBAAO,SAAS,MAAM;AACtB,iBAAO,SAAS,MAAM,KAAK;AAC3B,iBAAO,UAAU,MAAM;AAAA;AAAA;AAAA,OAS1B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,YAAI,SAAS,KAAK;AAClB,YAAI,iBAAiB,OAAO;AAC5B,eAAO;AAAA,UACL,SAAS;AAAA,YACP,KAAK,OAAO,yBAAyB,CAAC,eAAe,SAAS,iBAAiB;AAAA;AAAA,UAEjF,MAAM,CAAC,OAAO;AAAA,UACd,eAAe;AAAA;AAAA;AAAA,OAWlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,WAAW;AACrC,YAAI,SAAS;AAEb,YAAI,oBAAoB,4BAA2B,gBAAgB,aAAY,qBAAqB,qBAAqB,iBAAiB;AACxI,cAAI,eAAe,YAAY,aAAY,SAAU,aAAW;AAC9D,mBAAO,YAAU,SAAS;AAAA,cAExB,gBAAgB,iBAAe,cAAc,IAC7C,wBAAwB,cAAc;AAE1C,cAAI,QAAQ;AAEZ,cAAI,wBAAwB,OAAO,IAAI,oBAAsB;AAE7D,cAAI,uBAAuB;AACzB,gBAAI,YAAY,kBAAkB,SAAS,oBAAoB,gBAAgB,kBAAkB,SAAU,KAAK;AAC9G,qBAAO,IAAI;AAAA;AAGb,gBAAI,qBAAqB;AACvB,oCAAsB,KAAK,KAAK;AAAA;AAGlC,gBAAI,iBAAiB;AACrB,gBAAI,gBAAgB,gBAAgB,WAAW,sBAAsB,KAAK,IAAI,uBAAuB,SAAU,MAAM;AACnH,kBAAI,KAAK,SAAS;AAChB,+BAAe,KAAK,KAAK;AAAA;AAAA;AAG7B,gBAAI,SAAS,UAAU,qBAAqB;AAC5C,kBAAM,SAAS,OAAO,IAAI,YAAY,GAAG,QAAQ;AACjD,kBAAM,OAAO,CAAC;AACd,kBAAM,UAAU,uBAAuB;AACvC,kBAAM,gBAAgB;AAAA,iBACjB;AACL,kBAAM,OAAO;AACb,kBAAM,UAAU,uBAAuB;AAAA;AAGzC,iBAAO,MAAM,gBAAgB,gBAAgB;AAAA;AAG/C,0BAAkB,UAAU,qBAAqB,QAAQ,UAAU,qBAAqB,YAAY,UAAU,qBAAqB,UAAU;AAI7I,YAAI,UAAU,yBAAyB,QAAQ;AAC7C,4BAAkB,UAAU,yBAAyB,GAAG,QAAQ,UAAU,yBAAyB,GAAG,YAAY,UAAU,qBAAqB,UAAU,qBAAqB,UAAU;AAAA;AAAA;AAAA,OAS7L;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,eAAO,KAAK,SAAS,OAAO,SAAU,SAAS;AAC7C,iBAAO,mBAAmB;AAAA,WACzB;AAAA;AAAA,OAQJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,SAAS;AAEb,eAAO;AAAA,UACL,KAAK,KAAK;AAAA,UACV,MAAM,KAAK;AAAA,UACX,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,QAAQ,kBAAkB;AACxB,mBAAO,OAAO;AAAA;AAAA,UAEhB,UAAU,kBAAkB,KAAK,UAAS,KAAK,KAAK,MAAM,OAAO;AAC/D,qBAAS,SAAQ,YAAY;AAE7B,gBAAI,QAAQ,OAAO,IAAI,aAAa,cAAc;AAElD,qBAAS,OAAO;AAChB,kBAAM,cAAc;AACpB,qBAAQ,YAAY;AAEpB,gBAAI,CAAC,SAAQ,WAAW,aAAa,gBAAgB;AACnD,wBAAU,OAAO,UAAU,SAAU,IAAI;AACvC,uBAAO,SAAQ,YAAY,GAAG;AAAA;AAAA;AAIlC,mBAAO;AAAA;AAAA;AAAA;AAAA,OAQZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,wBAAwB,KAAK,IAAI,oBAAsB;AAC3D,YAAI,UAAS,kBAAkB,KAAK;AACpC,YAAI,QAAQ,gBAAgB,SAAQ,SAAQ;AAC5C,aAAK,2BAA2B,SAAS;AAEzC,eAAK,kBAAgB,gBAAe,YAAY,SAAS,MAAM,KAAK;AAEpE,aAAK,2BAA2B,SAAS;AACzC,YAAI,qBAAqB,KAAK,IAAI,UAAU,WAAW,oBAAoB;AAC3E,aAAK,2BAA2B,UAAU,KAAK,IAAI,YAAY,GAAG,oBAAoB;AAAA;AAAA,OASvF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAO;AACpC,YAAI,MAAM,OAAM,SAAS,WAAW;AAClC,eAAK,cAAc;AACnB,mCAAyB;AAAA;AAAA;AAAA,OAU5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,YAAI,qBAAqB,KAAK,IAAI,UAAU,WAAW;AACvD,YAAI,cAAc,sBAAsB,mBAAmB;AAC3D,eAAO,SAAS,KAAK,IAAI,aAAa,cAAc,SAAU,GAAG;AAC/D,iBAAO,cAAc;AAAA;AAAA;AAAA;AAK3B,WAAO;AAAA,IACP;AAEF,MAAO,gBAAQ;;;AI7Sf,oCAAO;AAVP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAczU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAYxM,MAAI,qBAAkC,yBAAU,gBAAgB;AAC9D,gBAAU,qBAAoB;AAE9B,QAAI,SAAS,eAAa;AAE1B,iCAA4B,aAAa,SAAS;AAChD,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,aAAa;AAAA,QACrC,IAAI,QAAQ;AAAA,QACZ,WAAW;AAAA;AAEb,YAAM,OAAO,QAAQ;AAErB,YAAM,SAAS,KAAK,IAAI,cAAQ,MAAM,KAAK;AAAA,QACzC,MAAM;AAAA,QACN,OAAS;AAAA,QACT,WAAW;AAAA,QACX,YAAY,oBAAmB;AAAA;AAGjC,YAAM,SAAS,KAAK,IAAI,cAAQ,MAAM,KAAK;AAAA,QACzC,MAAM;AAAA,QACN,OAAS;AAAA,QACT,WAAW;AAAA,QACX,YAAY,oBAAmB;AAAA;AAGjC,YAAM;AAEN,aAAO;AAAA;AAST,oBAAa,qBAAoB,CAAC;AAAA,MAChC,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,kBAAU,KAAK,UAAU,SAAU,SAAS;AAC1C,kBAAQ,aAAa,SAAS,SAAU,QAAO,QAAQ;AACrD,mBAAO,OAAO,cAAc,QAAO;AAAA;AAAA;AAAA;AAAA,OAUxC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,SAAS;AAEb,eAAO;AAAA,UACL,KAAK,KAAK;AAAA,UACV,MAAM,KAAK;AAAA,UACX,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,QAAQ,kBAAkB;AACxB,mBAAO,OAAO;AAAA;AAAA,UAEhB,UAAU,kBAAkB,KAAK,UAAS;AACxC,qBAAS,SAAQ,YAAY;AAE7B,gBAAI,CAAC,SAAQ,WAAW,aAAa,gBAAgB;AACnD,wBAAU,OAAO,UAAU,SAAU,IAAI;AACvC,uBAAO,SAAQ,YAAY,GAAG;AAAA;AAAA;AAIlC,mBAAO;AAAA;AAAA;AAAA;AAAA,OAQZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,aAAK,cAAc;AAAA;AAAA,OAMpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AACvB,aAAK,cAAc;AAAA;AAAA,OAUpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAO,QAAQ;AAC3C,YAAI,OAAO,QAAQ,eAAe,oBAAmB,WAAW;AAC9D,eAAK;AAAA,eACA;AACL,eAAK;AAAA;AAAA;AAAA,QAGP,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;AAEF,MAAO,oBAAQ;;;AC7Kf,oCAAO;AAIP,gCAAO;AAEP,MAAI;AAAJ,MAAqB;AAErB,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAE/D,mCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAO1K,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAW/Q,MAAI,WAAW;AAMf,MAAI,sBAAmC,2BAAY;AACjD,kCAA6B,KAAK;AAChC,UAAI,mBAAmB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAE3F,yBAAgB,MAAM;AAOtB,WAAK,MAAM;AASX,WAAK,mBAAmB;AAOxB,WAAK,kBAAkB,IAAI;AAE3B,UAAI,KAAK,qBAAqB,MAAM;AAClC,aAAK,IAAI,kBAAkB,YAAY,UAAU,KAAK;AAAA,aACjD;AACL,aAAK,gBAAgB,KAAK,KAAK,IAAI,kBAAkB;AAAA;AAAA;AAUzD,oBAAa,sBAAqB,CAAC;AAAA,MACjC,KAAK;AAAA,MACL,OAAO,oBAAmB;AACxB,eAAO,KAAK,qBAAqB,WAAW;AAAA;AAAA,OAU7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,OAAO,QAAQ;AACrC,YAAI;AAEJ,YAAI,iBAAiB,KAAK,gBAAgB,gBAAgB;AAC1D,YAAI,cAAc,yBAAwB,mBAAmB,QAAQ,mBAAmB,SAAS,SAAS,eAAe,gBAAgB,QAAQ,0BAA0B,SAAS,wBAAwB;AAC5M,YAAI,YAAY,mBAAmB,QAAQ,mBAAmB,SAAS,SAAS,eAAe;AAC/F,eAAO,KAAK,oBAAoB,aAAY,OAAO;AAAA;AAAA,OAWpD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,aAAY,OAAO;AACrD,YAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAExF,YAAI,YAAW,QAAQ;AACrB,iBAAO,iBAAiB,eAAe,aAAY;AAAA;AAGrD,eAAO;AAAA;AAAA,OAgBR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,QAAQ,qBAAqB;AACxD,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,YAAI,WAAW,UAAU,SAAS,IAAI,UAAU,KAAK;AACrD,YAAI,kBAAkB,KAAK,IAAI,YAAY,GAAG,QAAQ;AACtD,YAAI,OAAO,SAAS,oBAAoB,MAAM,SAAU,GAAG;AACzD,iBAAO,OAAO,MAAM,WAAW,EAAE,kBAAkB,mBAAmB;AAAA;AAExE,YAAI,OAAO,oBAAoB,QAAQ,oBAAoB,QAAQ;AACnE,aAAK,cAAc,aAAa;AAChC,YAAI,aAAa,KAAK,aAAa;AAEnC,YAAI,YAAY;AACd,cAAI,eAAe,WAAW;AAC5B,kBAAM,MAAM,aAAa,qBAAoB,qBAAkB,wBAAuB,CAAC,wBAAwB,sCAAsC,kRAAkR,CAAC,wBAAwB,wCAAwC,0SAA0S,QAAQ;AAAA;AAAA,mBAEnxB,YAAY,WAAW,aAAa;AAC7C,gBAAM,IAAI,MAAM,aAAa,qBAAqB,qBAAmB,wBAAuB,CAAC,gCAAgC,oEAAoE,CAAC,kCAAkC,oFAAoF;AAAA;AAG1T,YAAI,sBAAsB,KAAK,cAAc;AAE7C,YAAI,oBAAoB,WAAW,GAAG;AAEpC,eAAK,gBAAgB,gBAAgB,QAAQ;AAAA,YAC3C;AAAA,YACA,YAAY,CAAC;AAAA,cACX;AAAA,cACA;AAAA,cACA,MAAM,aAAa,MAAM;AAAA;AAAA,aAE1B;AAAA,eACE;AAEL,8BAAoB,KAAK;AAAA,YACvB;AAAA,YACA;AAAA,YACA,MAAM,aAAa,MAAM;AAAA;AAAA;AAI7B,aAAK,cAAc,YAAY;AAAA;AAAA,OAShC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ;AACpC,YAAI,uBAAuB;AAE3B,eAAQ,yBAAyB,0BAAyB,KAAK,gBAAgB,gBAAgB,aAAa,QAAQ,2BAA2B,SAAS,SAAS,uBAAuB,gBAAgB,QAAQ,0BAA0B,SAAS,wBAAwB;AAAA;AAAA,OAS5Q;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,QAAQ;AACnC,YAAI;AAEJ,eAAQ,0BAAyB,KAAK,gBAAgB,gBAAgB,aAAa,QAAQ,2BAA2B,SAAS,SAAS,uBAAuB;AAAA;AAAA,OAQhK;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,eAAO,KAAK,gBAAgB,aAAa,IAAI,SAAU,MAAM;AAC3D,cAAI,QAAQ,iBAAe,MAAM,IAC7B,iBAAiB,MAAM;AAE3B,iBAAO;AAAA;AAAA;AAAA,OAUV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,QAAQ;AAC7C,eAAO,KAAK,qBAAqB,QAAQ;AAAA;AAAA,OAQ1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,eAAO,YAAY,KAAK,gBAAgB,cAAc,SAAU,eAAe,OAAO;AACpF,cAAI,QAAQ,iBAAe,OAAO,IAC9B,SAAS,MAAM,IACf,SAAS,MAAM,IACf,YAAY,OAAO,WACnB,cAAa,OAAO;AAExB,wBAAc,KAAK;AAAA,YACjB;AAAA,YACA;AAAA,YACA,YAAY,SAAS,aAAY,SAAU,OAAO;AAChD,kBAAI,OAAO,MAAM,MACb,OAAO,MAAM;AACjB,qBAAO;AAAA,gBACL;AAAA,gBACA;AAAA;AAAA;AAAA;AAIN,iBAAO;AAAA,WACN;AAAA;AAAA,OAQJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,aAAY;AAC9C,YAAI,QAAQ;AAEZ,aAAK;AACL,kBAAU,aAAY,SAAU,OAAO;AACrC,oBAAU,MAAM,YAAY,SAAU,aAAW;AAC/C,mBAAO,MAAM,aAAa,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA,OAY7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,QAAQ;AACvC,aAAK,cAAc,gBAAgB;AACnC,aAAK,gBAAgB,WAAW;AAChC,aAAK,cAAc,eAAe;AAAA;AAAA,OASnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,cAAc;AACnB,aAAK,gBAAgB;AACrB,aAAK,cAAc;AAAA;AAAA,OAWpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ,MAAM;AAC1C,YAAI,cAAa,KAAK,cAAc;AAEpC,YAAI,MAAM;AACR,iBAAO,YAAW,KAAK,SAAU,aAAW;AAC1C,mBAAO,YAAU,SAAS;AAAA;AAAA;AAI9B,eAAO,YAAW,SAAS;AAAA;AAAA,OAM5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,KAAK,kBAAkB;AACzB,eAAK,IAAI,kBAAkB,cAAc;AAAA;AAG3C,aAAK,kBAAkB;AACvB,aAAK;AAAA;AAAA;AAIT,WAAO;AAAA;AAGT,QAAM,qBAAqB;AAC3B,MAAO,8BAAQ;;;ACpXf,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAQ/Q,MAAI,aAA0B,2BAAY;AACxC,yBAAoB,qBAAqB;AACvC,UAAI,oBAAoB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,WAAY;AACtG,eAAO;AAAA;AAGT,yBAAgB,MAAM;AAOtB,WAAK,sBAAsB;AAO3B,WAAK,oBAAoB;AAAA;AAS3B,oBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,mBAAkB;AACvB,YAAI,QAAQ;AAEZ,YAAI,eAAe;AACnB,kBAAU,KAAK,oBAAoB,sBAAsB,SAAU,gBAAgB,QAAO;AACxF,cAAI,aAAa,MAAM,kBAAkB;AAEzC,cAAI,QAAO;AACT,yBAAa,MAAM,kBAAkB,YAAY;AAAA;AAGnD,yBAAe,MAAM,eAAe,gBAAgB;AAAA;AAEtD,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAQ;AACrC,YAAI,SAAS;AAEb,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,YAAI,eAAe;AACnB,kBAAU,YAAY,SAAU,SAAS;AACvC,cAAI,YAAY,UAAU,OAAO,oBAAoB,QAAQ,SAAS,SAAS;AAC7E,yBAAa,KAAK;AAAA;AAAA;AAGtB,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,MAAM,SAAS;AAC/C,YAAI,SAAS;AACb,kBAAU,SAAS,SAAU,WAAW;AACtC,cAAI,MAAM,UAAU,KAAK;AAEzB,cAAI,KAAK,SAAS,QAAQ;AACxB,mBAAO,OAAO,KAAK;AAAA;AAAA;AAGvB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;AAGT,MAAO,qBAAQ;;;ACrGf,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAmB/Q,MAAI,0BAAuC,2BAAY;AACrD,sCAAiC,KAAK,qBAAqB;AACzD,UAAI,QAAQ;AAEZ,UAAI,oBAAoB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,WAAY;AACtG,eAAO;AAAA;AAGT,yBAAgB,MAAM;AAOtB,WAAK,MAAM;AAOX,WAAK,sBAAsB;AAO3B,WAAK,oBAAoB;AAQzB,WAAK,UAAU;AAOf,WAAK,WAAW;AAQhB,WAAK,6BAA6B;AAOlC,WAAK,mBAAmB;AACxB,WAAK,oBAAoB,aAAa,gBAAgB,SAAU,QAAQ;AACtE,eAAO,MAAM,yBAAyB;AAAA;AAExC,WAAK,oBAAoB,aAAa,eAAe,SAAU,QAAQ;AACrE,eAAO,MAAM,qBAAqB;AAAA;AAEpC,WAAK,oBAAoB,aAAa,YAAY,SAAU,QAAQ;AAClE,eAAO,MAAM,qBAAqB;AAAA;AAEpC,WAAK,oBAAoB,aAAa,eAAe,WAAY;AAC/D,eAAO,MAAM;AAAA;AAEf,WAAK,oBAAoB,aAAa,cAAc,WAAY;AAC9D,eAAO,MAAM;AAAA;AAAA;AAUjB,oBAAa,0BAAyB,CAAC;AAAA,MACrC,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK,WAAW;AAAA;AAAA,OAMjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,SAAS;AAEb,aAAK,WAAW;AAChB,kBAAU,KAAK,SAAS,SAAU,QAAQ;AACxC,iBAAO,qBAAqB;AAAA;AAE9B,aAAK,QAAQ,SAAS;AAAA;AAAA,OASvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,QAAQ;AAC/C,aAAK,6BAA6B,KAAK,oBAAoB,uBAAuB;AAAA;AAAA,OAWnF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,QAAQ,qBAAqB;AAChE,YAAI,SAAS;AAEb,YAAI,KAAK,UAAU;AACjB,cAAI,KAAK,QAAQ,QAAQ,YAAY,IAAI;AACvC,iBAAK,QAAQ,KAAK;AAAA;AAGpB;AAAA;AAGF,YAAI,gBAAgB,KAAK,oBAAoB;AAC7C,YAAI,uBAAuB,KAAK,oBAAoB,uBAAuB;AAE3E,YAAI,yBAAyB,IAAI;AAC/B,iCAAuB,KAAK;AAAA;AAI9B,YAAI,mBAAmB,cAAc,MAAM,GAAG;AAE9C,YAAI,kBAAkB,cAAc,MAAM;AAE1C,YAAI,gBAAgB,UAAU,gBAAgB,GAAG,WAAW,QAAQ;AAClE,0BAAgB;AAAA;AAGlB,YAAI,qBAAqB,MAAM,SAAU,yBAAyB,eAAe;AAC/E,cAAI,kBAAkB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC1F,cAAI,2BAA2B,IAAI,4BAAoB,OAAO,KAAK;AACnE,cAAI,+BAA+B,GAAG,OAAO,yBAAyB;AAGtE,mCAAyB,oBAAoB;AAE7C,cAAI,UAAU,OAAO,kBAAkB;AAEvC,cAAI;AAEJ,cAAI,yBAAyB,WAAW;AACtC,0BAAc;AAAA,iBACT;AACL,0BAAc,IAAI,mBAAW,0BAA0B,SAAU,YAAY;AAC3E,qBAAO,OAAO,kBAAkB;AAAA,eAC/B;AAAA;AAGL,wBAAc,SAAS,aAAa,SAAU,SAAS;AACrD,mBAAO,QAAQ,KAAK;AAAA;AAEtB,cAAI,uBAAuB,qBAAqB;AAChD,mCAAyB;AACzB,iBAAO,YAAY,SAAS,SAAU,SAAS;AAC7C,mBAAO,qBAAqB,QAAQ,KAAK;AAAA;AAAA,WAE1C;AACH,YAAI,mBAAmB,GAAG,OAAO,KAAK,oBAAoB,cAAc;AACxE,aAAK,cAAc,UAAU;AAAA,UAC3B,sBAAsB;AAAA,YACpB;AAAA,YACA,YAAY;AAAA;AAAA,UAEd,0BAA0B;AAAA,UAC1B,qBAAqB;AAAA,UACrB;AAAA;AAAA;AAAA,OASH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,aAAK,mBAAmB,KAAK,oBAAoB;AAAA;AAAA,OAQlD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,YAAI,SAAS;AAEb,kBAAU,KAAK,kBAAkB,SAAU,QAAQ;AACjD,iBAAO,qBAAqB;AAAA;AAAA;AAAA,OAO/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,SAAS;AAEb,aAAK;AACL,mBAAW,MAAM,SAAU,OAAO,UAAU;AAC1C,iBAAO,YAAY;AAAA;AAAA;AAAA;AAKzB,WAAO;AAAA;AAGT,QAAM,yBAAyB;AAC/B,MAAO,kCAAQ;;;A5C5Qf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAczU,MAAI;AAEJ,mCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAE1K,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAa/D,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAqBjM,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAuBtB,MAAI,UAAuB,yBAAU,aAAa;AACvD,gBAAU,UAAS;AAEnB,QAAI,SAAS,eAAa;AAE1B,sBAAiB,aAAa;AAC5B,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,eAAe,IAAI,qBAAa,yBAAuB;AAQ7D,YAAM,qBAAqB;AAQ3B,YAAM,sBAAsB;AAQ5B,YAAM,0BAA0B;AAQhC,YAAM,aAAa,oBAAI,IAAI,CAAC,CAAC,uBAAuB,OAAO,CAAC,oBAAoB,OAAO,CAAC,wBAAwB,OAAO,CAAC,mBAAmB,OAAO,CAAC,qBAAqB;AASxK,YAAM,qBAAqB;AAQ3B,YAAM,iBAAiB;AAEvB,YAAM,IAAI,QAAQ,qBAAqB,SAAU,KAAK,IAAI;AACxD,eAAO,MAAM,oBAAoB,KAAK;AAAA;AAGxC,aAAO;AAAA;AAUT,oBAAa,UAAS,CAAC;AAAA,MACrB,KAAK;AAAA,MACL,OAAO,qBAAqB;AAE1B,eAAO,KAAK,IAAI,cAAc,gBAAc,OAAO;AAAA;AAAA,OAMpD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,iBAAiB,KAAK,IAAI,eAAe,YAAY,KAAK,YAAY,IAAI;AAC/E,aAAK,qBAAqB,KAAK,IAAI,UAAU;AAC7C,YAAI,mBAAmB,KAAK,IAAI,cAAc;AAC9C,YAAI,gBAAgB,oBAAoB,iBAAiB,eAAe,KAAK,IAAI,aAAa;AAE9F,YAAI,uBAAuB,+BAA8B,WAAW;AAClE,oBAAU,aAAa,UAAU,WAAY;AAC3C,mBAAO,OAAO,kBAAkB;AAAA;AAElC,oBAAU,aAAa,UAAU,WAAY;AAC3C,mBAAO,OAAO,kBAAkB;AAAA;AAElC,oBAAU,aAAa,UAAU,SAAU,SAAS;AAClD,mBAAO,OAAO,kBAAkB,WAAW;AAAA;AAE7C,iBAAO;AAAA;AAGT,YAAI,yBAAyB,mCAAkC;AAC7D,iBAAO,GAAG,OAAO,OAAO,IAAI,oBAA8B,mCAAmC;AAAA;AAG/F,YAAI,mBAAmB,6BAA4B;AACjD,iBAAO,GAAG,OAAO,OAAO,IAAI,oBAA8B,+BAA+B;AAAA;AAG3F,YAAI,CAAC,KAAK,WAAW,IAAI,wBAAwB;AAC/C,cAAI,qBAAqB,IAAI,kBAAmB,KAAK,KAAK;AAAA,YACxD,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,cAAc;AAAA,YACd;AAAA;AAEF,6BAAmB,aAAa,cAAc,WAAY;AACxD,mBAAO,OAAO;AAAA;AAEhB,eAAK,WAAW,IAAI,uBAAuB,qBAAqB;AAAA;AAGlE,YAAI,CAAC,KAAK,WAAW,IAAI,qBAAqB;AAC5C,eAAK,WAAW,IAAI,oBAAoB,IAAI,kBAAmB,KAAK,KAAK;AAAA,YACvE,IAAI;AAAA,YACJ,MAAM;AAAA;AAAA;AAIV,YAAI,CAAC,KAAK,WAAW,IAAI,yBAAyB;AAChD,cAAI,sBAAsB,IAAI,kBAAmB,KAAK,KAAK;AAAA,YACzD,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,cAAc;AAAA,YACd;AAAA;AAGF,8BAAoB,aAAa,cAAc,WAAY;AACzD,mBAAO,OAAO;AAAA;AAGhB,eAAK,WAAW,IAAI,wBAAwB,qBAAqB;AAAA;AAGnE,YAAI,CAAC,KAAK,WAAW,IAAI,oBAAoB;AAC3C,eAAK,WAAW,IAAI,mBAAmB,qBAAqB,IAAI,cAAe,KAAK,KAAK;AAAA,YACvF,IAAI;AAAA,YACJ,MAAM;AAAA;AAAA;AAIV,YAAI,CAAC,KAAK,WAAW,IAAI,sBAAsB;AAC7C,eAAK,WAAW,IAAI,qBAAqB,qBAAqB,IAAI,kBAAmB,KAAK,KAAK;AAAA,YAC7F,IAAI;AAAA,YACJ,MAAM;AAAA;AAAA;AAIV,YAAI,CAAC,KAAK,qBAAqB;AAC7B,eAAK,sBAAsB,IAAI,4BAAoB,KAAK;AAAA;AAG1D,YAAI,CAAC,KAAK,yBAAyB;AACjC,eAAK,0BAA0B,IAAI,gCAAwB,KAAK,KAAK,KAAK,qBAAqB,SAAU,gBAAgB;AACvH,mBAAO,OAAO,mBAAmB;AAAA;AAEnC,eAAK,wBAAwB,aAAa,UAAU,SAAU,gBAAgB;AAC5E,mBAAO,OAAO,iBAAiB;AAAA;AAAA;AAInC,aAAK,WAAW,QAAQ,SAAU,WAAW;AAC3C,iBAAO,UAAU;AAAA;AAEnB,aAAK;AACL,aAAK,QAAQ,8BAA8B,SAAU,OAAO;AAC1D,iBAAO,OAAO,6BAA6B;AAAA;AAE7C,aAAK,QAAQ,mCAAmC,SAAU,iBAAgB;AACxE,iBAAO,OAAO,kCAAkC;AAAA;AAElD,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,eAAe,SAAU,SAAS;AAC7C,iBAAO,OAAO,cAAc;AAAA;AAG9B,YAAI,KAAK,IAAI,cAAc,gBAAgB,KAAK,oBAAoB;AAClE,eAAK,mBAAmB;AACxB,eAAK,mBAAmB;AAAA;AAG1B,eAAK,kBAAgB,SAAQ,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAQrE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA0B;AAC/B,YAAI,SAAS;AAEb,aAAK,aAAa,iBAAiB,KAAK,IAAI,aAAa,SAAS,SAAU,QAAO;AACjF,iBAAO,OAAO,aAAa;AAAA;AAAA;AAAA,OAO9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB,cAAI;AAEJ,cAAK,yBAAwB,KAAK,wBAAwB,QAAQ,0BAA0B,UAAU,sBAAsB,SAAS;AACnI,iBAAK,mBAAmB,KAAK;AAAA;AAG/B,eAAK,WAAW,QAAQ,SAAU,WAAW,KAAK;AAChD,sBAAU;AAEV,mBAAO,WAAW,IAAI,KAAK;AAAA;AAE7B,eAAK,oBAAoB;AACzB,eAAK,sBAAsB;AAC3B,eAAK,IAAI,eAAe,cAAc,KAAK;AAAA;AAG7C,eAAK,kBAAgB,SAAQ,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OA2EtE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,QAAQ,MAAM,MAAM;AAC/C,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACtF,YAAI,iBAAiB,KAAK,IAAI,iBAAiB;AAC/C,aAAK,oBAAoB,aAAa,gBAAgB;AAAA,UACpD,SAAS;AAAA,YACP,KAAK;AAAA;AAAA,UAEP;AAAA,WACC;AAAA;AAAA,OAQJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,QAAQ;AACvC,YAAI,iBAAiB,KAAK,IAAI,iBAAiB;AAC/C,aAAK,oBAAoB,iBAAiB;AAAA;AAAA,OAS3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAQ;AACtC,YAAI,WAAW,QAAQ;AACrB,eAAK,oBAAoB;AAAA,eACpB;AACL,cAAI,iBAAiB,KAAK,IAAI,iBAAiB;AAC/C,eAAK,oBAAoB,iBAAiB;AAAA;AAAA;AAAA,OAU7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAkB;AACvB,YAAI,SAAS;AAEb,YAAI,aAAa,KAAK;AAEtB,YAAI,eAAe,CAAC,KAAK,oBAAoB;AAC7C,YAAI,oBAAoB;AACxB,YAAI,cAAa,KAAK,oBAAoB;AAC1C,YAAI,iBAAiB,KAAK,IAAI,SAAS,gBAAgB;AAEvD,YAAI,mBAAmB,OAAO;AAC5B,cAAI,cAAc;AAChB,gBAAI,cAAc;AAClB,iBAAK,IAAI,eAAe,WAAY;AAClC,qBAAO,eAAe;AAEtB,kCAAoB,SAAS,WAAW,UAAU,SAAU,SAAS;AACnE,uBAAO,QAAQ,KAAK;AAAA;AAEtB,kBAAI,6BAA6B,qBAAqB;AACtD,wBAAU,OAAO,IAAI,oBAAoB,GAAG,SAAU,KAAK;AACzD,oBAAI,CAAC,2BAA2B,MAAM;AACpC,8BAAY,KAAK;AAAA;AAAA;AAGrB,wBAAU,aAAa,SAAU,aAAa;AAC5C,uBAAO,eAAe,gBAAgB,aAAa;AAAA;AAAA,eAEpD;AAEH,gBAAI,CAAC,kBAAkB,QAAQ;AAC7B,mBAAK,IAAI;AAAA;AAAA,iBAEN;AACL,iBAAK,eAAe;AAAA;AAAA;AAIxB,aAAK,IAAI,SAAS,eAAe;AACjC,aAAK,IAAI,KAAK,mBAAmB;AACjC,aAAK,IAAI;AACT,aAAK;AAAA;AAAA,OASN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI;AAEJ,YAAI,SAAU,yBAAwB,KAAK,IAAI,4BAA4B,QAAQ,0BAA0B,SAAS,SAAS,sBAAsB;AAErJ,YAAI,WAAW,QAAQ;AACrB,eAAK,IAAI,WAAW,OAAO,KAAK,OAAO;AAAA;AAAA;AAAA,OAU1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,QAAQ;AACzC,YAAI,SAAS;AAEb,YAAI,cAAc,KAAK,IAAI,eAAe;AAC1C,YAAI,OAAO;AACX,kBAAU,KAAK,IAAI,mBAAmB,cAAc,SAAU,OAAO,UAAU;AAC7E,cAAI,wBAAwB,OAAO,IAAI,YAAY,UAAU,cACzD,MAAM,sBAAsB,KAC5B,MAAM,sBAAsB,KAC5B,YAAY,sBAAsB,WAClC,YAAY,sBAAsB,WAClC,OAAO,sBAAsB,MAC7B,WAAW,sBAAsB,UACjC,aAAa,sBAAsB,YACnC,SAAS,sBAAsB;AAEnC,eAAK,KAAK;AAAA,YACR,MAAM;AAAA,cACJ;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA;AAAA,YAEF,OAAO,cAAc;AAAA;AAAA;AAGzB,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAuB,SAAS;AACrC,YAAI,SAAS;AAEb,YAAI,SAAS;AACX,oBAAU,SAAS,SAAU,QAAQ;AACnC,gBAAI,UAAU,iBAAe,QAAQ,IACjC,OAAO,QAAQ;AAEnB,gBAAI,cAAc,OAAO,IAAI,UAAU;AAEvC,gBAAI,OAAO,oBAAoB,cAAc,cAAc;AACzD,qBAAO,8BAA8B;AAAA;AAAA;AAAA;AAAA;AAAA,OAY5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uCAAuC,aAAa;AACzD,YAAI,YAAY,KAAK,IAAI,aAAa;AACtC,YAAI,iBAAiB,kBAAkB;AACvC,aAAK,wBAAwB,qBAAqB,aAAa;AAAA;AAAA,OAShE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,YAAY;AAC5C,YAAI;AAEJ,YAAI,gBAAiB,yBAAwB,KAAK,yBAAyB,QAAQ,0BAA0B,SAAS,SAAS,sBAAsB;AACrJ,mBAAW,QAAQ,SAAU,WAAW;AACtC,cAAI,UAAU,YAAY;AACxB;AAAA;AAGF,oBAAU,aAAa;AAAA;AAEzB,aAAK;AAAA;AAAA,OAQN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,aAAK,kBAAkB,MAAM,KAAK,KAAK,WAAW;AAAA;AAAA,OAQnD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,aAAK,WAAW,IAAI,uBAAuB,mBAAmB;AAC9D,aAAK,WAAW,IAAI,wBAAwB,mBAAmB;AAAA;AAAA,OAQhE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wCAAwC;AAC7C,YAAI,SAAS;AAEb,YAAI,KAAK,oBAAoB;AAC3B,eAAK,mBAAmB,KAAK,aAAa,aAAa,WAAY;AACjE,mBAAO,mBAAmB,KAAK,QAAQ,eAAe;AAAA,cACpD,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,OAYnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2CAA2C,iBAAgB;AAChE,wBAAe,MAAM,KAAK;AAAA,UACxB,MAAM;AAAA;AAER,aAAK,WAAW,QAAQ,SAAU,WAAW;AAC3C,0BAAe,MAAM,KAAK,UAAU;AAAA;AAAA;AAAA,OAcvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC,oBAAoB,mBAAmB,mBAAmB,cAAc;AACnH,YAAI,YAAY;AAEhB,YAAI,cAAc,iBAAgB,kBAAkB,QAAQ,QAAQ,kBAAkB,kBAAkB,QAAQ,QAAQ,kBAAkB,aAAa,QAAQ,QAAQ,gBAAgB;AACrL,sBAAY;AAAA,mBACH,aAAa,QAAQ,QAAQ,gBAAgB;AACtD,cAAI,kBAAkB,QAAQ,QAAQ,kBAAkB,kBAAkB,QAAQ,QAAQ,gBAAgB;AACxG,wBAAY;AAAA;AAAA;AAIhB,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,YAAY;AAC5C,YAAI,eAAe,UAAU;AAC3B,cAAI;AAEJ,cAAI,gBAAiB,0BAAyB,KAAK,yBAAyB,QAAQ,2BAA2B,SAAS,SAAS,uBAAuB;AACxJ,cAAI,oBAAoB,KAAK,WAAW,IAAI,uBAAuB;AACnE,cAAI,oBAAoB,KAAK,WAAW,IAAI,wBAAwB;AACpE,cAAI,eAAe,KAAK,WAAW,IAAI,mBAAmB;AAC1D,cAAI,YAAY,KAAK,6BAA6B,KAAK,WAAW,IAAI,oBAAoB,wBAAwB,mBAAmB,mBAAmB;AACxJ,eAAK,wBAAwB;AAC7B,cAAI,sBAAsB,KAAK,oBAAoB,uBAAuB;AAE1E,cAAI,wBAAwB,IAAI;AAC9B,kCAAsB;AAAA;AAGxB,eAAK,oBAAoB,iBAAiB;AAE1C,cAAI,kBAAkB,QAAQ,QAAQ,gBAAgB;AACpD,iBAAK,oBAAoB,aAAa,eAAe,mBAAmB,WAAW;AAEnF,gBAAI,kBAAkB,QAAQ,QAAQ,gBAAgB;AACpD,mBAAK,oBAAoB,aAAa,eAAe,mBAAmB,WAAW;AAAA;AAAA;AAIvF,cAAI,aAAa,QAAQ,QAAQ,gBAAgB;AAC/C,iBAAK,oBAAoB,aAAa,eAAe,cAAc,WAAW;AAAA;AAGhF,eAAK,wBAAwB;AAC7B,eAAK,WAAW,QAAQ,SAAU,WAAW;AAC3C,mBAAO,UAAU,UAAU;AAAA;AAE7B,eAAK,eAAe;AACpB,eAAK;AAAA;AAGP,YAAI,KAAK,oBAAoB;AAC3B,eAAK,mBAAmB;AAAA;AAAA;AAAA,OAW3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,WAAW,SAAS;AACpD,aAAK;AAEL,YAAI,UAAU,gBAAgB,qBAAsB,CAAC,QAAQ,aAAa;AACxE,eAAK;AAAA;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,aAAK;AAAA;AAAA,OASN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,YAAI,KAAK,oBAAoB;AAC3B,eAAK,mBAAmB;AAAA;AAAA;AAAA,OAS3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+CAA+C;AACpD,YAAI,YAAY,KAAK,WAAW,IAAI;AAEpC,YAAI,sBAAsB,UAAU,YAChC,UAAU,oBAAoB;AAElC,YAAI,mBAAmB,CAAC,KAAK,WAAW,IAAI,yBAAyB,KAAK,WAAW,IAAI;AAEzF,YAAI,QAAQ,eAAe;AACzB,eAAK,eAAe,MAAM,MAAM;AAAA,eAC3B;AACL,eAAK,eAAe,MAAM,MAAM;AAAA;AAAA;AAAA,OAWnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,KAAK,IAAI;AAC3C,YAAI,iBAAiB,KAAK,IAAI,iBAAiB;AAE/C,YAAI,KAAK,WAAW,KAAK,oBAAoB,cAAc,iBAAiB;AAC1E,mBAAS,IAAI;AAAA,eACR;AACL,sBAAY,IAAI;AAAA;AAAA;AAAA,OAUnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,QAAO;AAClC,YAAI,KAAK,QAAQ,OAAM,QAAQ;AAE/B,YAAI,IAAI;AACN,cAAI,cAAc,KAAK,IAAI,UAAU,IAAI;AACzC,cAAI,gBAAgB,KAAK,IAAI,iBAAiB;AAC9C,eAAK,qBAAqB;AAAA,YACxB;AAAA,YACA;AAAA;AAAA;AAAA;AAAA,OAYL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,SAAS;AAEb,YAAI,sBAAsB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK;AACnG,eAAO,IAAI,mBAAW,qBAAqB,SAAU,gBAAgB;AACnE,iBAAO,OAAO,mBAAmB;AAAA;AAAA;AAAA,OAYpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,iBAAiB;AAChD,YAAI;AAEJ,YAAI,CAAG,2BAAyB,KAAK,wBAAwB,QAAQ,2BAA2B,UAAU,uBAAuB,UAAU;AACzI;AAAA;AAGF,YAAI,wBAAwB,gBAAgB,sBACxC,cAAa,sBAAsB,YACnC,SAAS,sBAAsB;AACnC,YAAI,oBAAoB,YAAW,OAAO,SAAU,aAAW;AAC7D,iBAAO,YAAU,SAAS;AAAA;AAE5B,YAAI,2BAA2B,YAAW,OAAO,SAAU,aAAW;AACpE,iBAAO,YAAU,SAAS;AAAA;AAG5B,YAAI,kBAAkB,UAAU,KAAK,yBAAyB,UAAU,GAAG;AACzE,eAAK,aAAa,qBAAoB,qBAAkB,wBAAuB,CAAC,wOAAwO,CAAC;AAAA,eACpT;AACL,cAAI,gBAAgB,KAAK,oBAAoB,aAAa;AAC1D,eAAK,WAAW,IAAI,uBAAuB,YAAY,yBAAyB,IAAI;AACpF,eAAK,WAAW,IAAI,wBAAwB,YAAY,yBAAyB,IAAI;AACrF,eAAK,WAAW,IAAI,oBAAoB,YAAY,eAAe;AACnE,eAAK,WAAW,IAAI,mBAAmB,YAAY;AAAA;AAAA;AAAA,OAWtD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,YAAI,UAAU;AAEd,YAAI,CAAC,KAAK,oBAAoB;AAC5B,iBAAO;AAAA;AAGT,YAAI,OAAO,KAAK,mBAAmB;AAEnC,iBAAS,OAAO,UAAU,QAAQ,aAAa,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AAC7F,qBAAW,QAAQ,UAAU;AAAA;AAG/B,kBAAU,YAAY,SAAU,WAAW;AACzC,oBAAU,KAAK,WAAW,SAAU,MAAM,QAAO;AAC/C,gBAAI,KAAK,QAAQ,UAAU,wBAAwB,KAAK;AACtD,sBAAQ,KAAK;AAAA;AAAA;AAAA;AAInB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC;AAC3C,YAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAElF,YAAI,CAAC,KAAK,oBAAoB;AAC5B;AAAA;AAGF,YAAI,OAAO,KAAK,mBAAmB;AACnC,YAAI,UAAU,KAAK;AACnB,YAAI,aAAa,QAAQ,UAAU;AAEnC,iBAAS,QAAQ,UAAU,QAAQ,aAAa,IAAI,MAAM,QAAQ,IAAI,QAAQ,IAAI,IAAI,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACvH,qBAAW,QAAQ,KAAK,UAAU;AAAA;AAGpC,YAAI,UAAU,KAAK,uBAAuB,MAAM,MAAM;AAEtD,YAAI,SAAS;AACX,qBAAW,SAAS;AAAA,eACf;AACL,qBAAW,SAAS;AAAA;AAGtB,gBAAQ;AAAA;AAAA,OAST;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,iBAAS,QAAQ,UAAU,QAAQ,aAAa,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACnG,qBAAW,SAAS,UAAU;AAAA;AAGhC,aAAK,2BAA2B,MAAM,MAAM,CAAC,OAAO,OAAO;AAAA;AAAA,OAS5D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,iBAAS,QAAQ,UAAU,QAAQ,aAAa,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACnG,qBAAW,SAAS,UAAU;AAAA;AAGhC,aAAK,2BAA2B,MAAM,MAAM,CAAC,MAAM,OAAO;AAAA;AAAA,OAM3D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,UAAU;AAEd,YAAI,KAAK,SAAS;AAChB,eAAK,WAAW,QAAQ,SAAU,WAAW,KAAK;AAChD,gBAAI,cAAc,MAAM;AACtB,wBAAU;AAEV,sBAAQ,WAAW,IAAI,KAAK;AAAA;AAAA;AAGhC,eAAK,oBAAoB;AACzB,eAAK,wBAAwB;AAC7B,eAAK,IAAI,eAAe,cAAc,KAAK;AAAA;AAG7C,eAAK,kBAAgB,SAAQ,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAE/D,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO,CAAC,uBAAuB,qBAAqB;AAAA;AAAA;AAIxD,WAAO;AAAA,IACP;;;A6CjjCF,oCAAO;AAqBP,gCAAO;;;AChDP,oCAAO;;;ACFP,qBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,2BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,UAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,0BAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,UAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAWpM,MAAI,sBAAsB;AACjC,MAAI,mBAAmB;AAAA,IACrB,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,cAAc;AAAA,IACd,UAAU;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA;AAAA,IAEP,UAAU;AAAA,IACV,aAAa,CAAC,cAAc;AAAA,IAC5B,aAAa,CAAC,SAAS;AAAA,IACvB,gBAAgB;AAAA,IAChB,uBAAuB;AAAA,IACvB,cAAc;AAAA,IACd,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,IAClB,UAAU;AAAA;AASL,sCAAoC,cAAa;AACtD,QAAI,uBAAuB;AAE3B,WAAO;AAAA,MACL,YAAY,aAAY;AAAA,MACxB,SAAS,aAAY;AAAA,MACrB,UAAW,yBAAwB,aAAY,mBAAiB,QAAQ,0BAA0B,SAAS,SAAU,0BAAyB,sBAAsB,cAAc,QAAQ,2BAA2B,SAAS,SAAS,uBAAuB;AAAA;AAAA;AAUlQ,+BAA6B,gBAAgB;AAC3C,WAAO,OAAO,KAAK,gBAAgB,OAAO,SAAU,KAAK,KAAK;AAC5D,UAAI,QAAQ,gBAAgB;AAC1B,YAAI,OAAO,eAAe;AAAA;AAG5B,aAAO;AAAA,OACN;AAAA;AAoBE,qDAAmD,cAAa;AACrE,QAAI;AAEJ,QAAI,iBAAiB,aAAY;AACjC,QAAI,eAAe,oBAAoB,mBAAmB,QAAQ,mBAAmB,UAAW,yBAAwB,eAAe,YAAY,QAAQ,0BAA0B,UAAU,sBAAsB,eAAe,eAAe,SAAS;AAC5P,QAAI,YAAY,2BAA2B;AAC3C,WAAO,gBAAc,gBAAc,gBAAc,IAAI,mBAAmB,eAAe;AAAA;AASlF,0CAAwC,cAAa;AAC1D,QAAI;AAEJ,QAAI,iBAAiB,aAAY;AACjC,QAAI,eAAe,oBAAoB,mBAAmB,QAAQ,mBAAmB,UAAW,0BAAyB,eAAe,YAAY,QAAQ,2BAA2B,UAAU,uBAAuB,eAAe,eAAe,SAAS;AAC/P,QAAI,YAAY,2BAA2B;AAC3C,WAAO,gBAAc,gBAAc,IAAI,eAAe;AAAA;;;ADjHxD,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AA6BzU,2CAAyC;AACvC,QAAI,cAAc;AAClB,QAAI,uBAAuB,eAAe;AAE1C,QAAI,CAAC,qBAAqB,QAAQ,cAAc;AAC9C,2BAAqB,SAAS,aAAa,oBAAI;AAAA;AAGjD,WAAO,qBAAqB,QAAQ;AAAA;AAStC,0CAAwC;AACtC,QAAI,cAAc;AAClB,QAAI,uBAAuB,eAAe;AAE1C,QAAI,CAAC,qBAAqB,QAAQ,cAAc;AAC9C,2BAAqB,SAAS,aAAa,oBAAI;AAAA;AAGjD,WAAO,qBAAqB,QAAQ;AAAA;AAW/B,uBAAqB,aAAa;AACvC,QAAI,eAAc,YAAY;AAC9B,QAAI,iBAAiB,aAAY;AACjC,QAAI,mBAAmB,mBAAmB,QAAQ,mBAAmB,SAAS,SAAS,eAAe;AAEtG,QAAI,mBAAmB,MAAM;AAC3B,aAAO;AAAA;AAGT,QAAI,YAAY,mBAAmB;AACjC,aAAO;AAAA;AAIT,QAAI,OAAO,iBAAiB,iBAAiB,cAAc,OAAO,qBAAqB,YAAY;AACjG,UAAI;AAEJ,aAAO,eAAgB,yBAAwB,iBAAiB,kBAAkB,QAAQ,0BAA0B,SAAS,wBAAwB,kBAAkB,cAAa;AAAA,eAC3K,UAAQ,sBAAsB,YAAY,YAAY,iBAAiB,eAAe;AAC/F,UAAI,qBAAqB;AACzB,UAAI,oBAAoB,+BAA+B,IAAI;AAE3D,UAAI,CAAC,mBAAmB,IAAI,mBAAmB;AAC7C,2BAAmB,IAAI,kBAAkB;AAAA;AAG3C,yBAAmB,IAAI,kBAAkB,KAAK;AAE9C,UAAI,mBAAmB;AACrB,0BAAkB,KAAK,YAAY;AAAA;AAGrC,UAAI,CAAC,iBAAiB,YAAY,YAAY;AAC5C,yBAAiB,aAAa;AAAA,UAC5B,YAAY;AAAA;AAAA;AAIhB,aAAO;AAAA;AAGT,WAAO;AAAA;AAWF,0BAAwB,aAAa,cAAa,aAAa;AACpE,QAAI,iBAAiB,aAAY;AACjC,QAAI,iBAAiB,0CAA0C;AAC/D,QAAI,iBAAiB;AACrB,QAAI,uBAAuB;AAC3B,4BAAwB,aAAa,eAAe;AACpD,qBAAiB,aAAa,eAAe;AAE7C,QAAI,iBAAiB,YAAY,WAAW;AAE5C,mBAAe,IAAI,gBAAgB,CAAC;AACpC,yBAAqB,IAAI,gBAAgB,CAAC,YAAY;AACtD,6BAAyB,gBAAgB,eAAe;AAExD,mBAAe,GAAG,cAAc,WAAY;AAC1C,qBAAe;AAAA;AAEjB,mBAAe,GAAG,gBAAgB,WAAY;AAC5C,qBAAe;AAAA;AAEjB,WAAO;AAAA;AASF,qCAAmC,QAAQ;AAChD,QAAI;AAEJ,QAAI,iBAAiB;AACrB,QAAI,eAAe,eAAe,SAAS,IAAI,KAAK,MAAM,KAAM,uBAAsB,eAAe,IAAI,aAAa,QAAQ,wBAAwB,SAAS,sBAAsB;AACrL,WAAO,IAAI,IAAI,aAAa,IAAI,SAAU,KAAK;AAC7C,aAAO,CAAC,IAAI,UAAU,YAAY,SAAS;AAAA;AAAA;AAWxC,4BAA0B,QAAQ,aAAa;AACpD,QAAI,QAAQ;AACV,UAAI,iBAAiB;AACrB,UAAI,wBAAwB,eAAe,IAAI;AAC/C,UAAI,uBAAuB;AAC3B,UAAI,oBAAoB,qBAAqB,IAAI;AAEjD,UAAI,yBAAyB,sBAAsB,SAAS,cAAc;AACxE,8BAAsB,OAAO,sBAAsB,QAAQ,cAAc;AAEzE,YAAI,sBAAsB,WAAW,GAAG;AACtC,yBAAe,OAAO;AAAA;AAAA;AAI1B,UAAI,qBAAqB,kBAAkB,SAAS,YAAY,OAAO;AACrE,0BAAkB,OAAO,kBAAkB,QAAQ,YAAY,OAAO;AAEtE,YAAI,kBAAkB,WAAW,GAAG;AAClC,+BAAqB,OAAO;AAC5B,iBAAO;AAAA;AAAA;AAAA;AAAA;AAYR,mCAAiC,aAAa,iBAAiB;AACpE,QAAI,iBAAiB;AACnB,sBAAgB,QAAQ,SAAU,MAAM;AACtC,YAAI,OAAO,KAAK,MACZ,SAAS,KAAK,QACd,eAAe,KAAK;AAExB,YAAI;AACF,sBAAY,iBAAiB,MAAM,QAAQ;AAAA,iBACpC,GAAP;AACA,eAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAYR,4BAA0B,aAAa,iBAAiB;AAC7D,QAAI,iBAAiB;AACnB,UAAI,WAAW,gBAAgB;AAE/B,UAAI;AACF,oBAAY,iBAAiB,UAAU;AAAA,eAChC,GAAP;AACA,aAAK,EAAE;AAAA;AAAA;AAAA;AAWN,oCAAkC,gBAAgB,kBAAkB;AACzE,QAAI,kBAAkB;AACpB,qBAAe;AACf,uBAAiB,QAAQ,SAAU,UAAU;AAC3C,YAAI,OAAO,SAAS,MAChB,aAAa,SAAS,YACtB,QAAQ,SAAS,OACjB,UAAU,SAAS;AAEvB,YAAI;AACF,yBAAe,mBAAmB,MAAM,YAAY,OAAO;AAAA,iBACpD,GAAP;AACA,eAAK,EAAE;AAAA;AAAA;AAGX,qBAAe;AAAA;AAAA;AAWZ,sBAAoB,gBAAgB,WAAW;AACpD,QAAI,YAAY,cAAc,CAAC,eAAe,eAAe,YAAY;AACvE,kBAAY,eAAe,SAAS;AAAA;AAGtC,WAAO;AAAA;;;AEpQF,sCAAoC,YAAY;AACrD,WAAO,OAAO,eAAe,YAAY,WAAW,OAAO,OAAO,OAAQ,WAAW,OAAO,OAAO;AAAA;AAS9F,qCAAmC,YAAY;AACpD,WAAO,2BAA2B,cAAc,WAAW,OAAO,KAAK;AAAA;;;AHjBzE,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,qBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,2BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,UAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,0BAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,UAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AA+B/D,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAExM,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,uCAAoC,KAAK,YAAY,OAAO;AAAE,gCAA2B,KAAK;AAAa,eAAW,IAAI,KAAK;AAAA;AAE/H,uCAAoC,KAAK,mBAAmB;AAAE,QAAI,kBAAkB,IAAI,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEpH,kCAA+B,UAAU,YAAY,OAAO;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,8BAAyB,UAAU,YAAY;AAAQ,WAAO;AAAA;AAExM,qCAAkC,UAAU,YAAY,OAAO;AAAE,QAAI,WAAW,KAAK;AAAE,iBAAW,IAAI,KAAK,UAAU;AAAA,WAAe;AAAE,UAAI,CAAC,WAAW,UAAU;AAAE,cAAM,IAAI,UAAU;AAAA;AAA+C,iBAAW,QAAQ;AAAA;AAAA;AAExP,kCAA+B,UAAU,YAAY;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,WAAO,0BAAyB,UAAU;AAAA;AAE7K,yCAAsC,UAAU,YAAY,QAAQ;AAAE,QAAI,CAAC,WAAW,IAAI,WAAW;AAAE,YAAM,IAAI,UAAU,kBAAkB,SAAS;AAAA;AAAqC,WAAO,WAAW,IAAI;AAAA;AAEjN,qCAAkC,UAAU,YAAY;AAAE,QAAI,WAAW,KAAK;AAAE,aAAO,WAAW,IAAI,KAAK;AAAA;AAAa,WAAO,WAAW;AAAA;AAanI,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAC7B,MAAI,0BAA0B;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAK9B,MAAI,kBAAkB,0BAAyB,QAAQ;AACrD,WAAO,WAAW,mBAAmB,WAAW,mBAAmB,WAAW;AAAA;AAchF,MAAI,4BAAyC,oBAAI;AAEjD,MAAI,kCAA+C,oBAAI;AAEvD,MAAI,mBAAgC,oBAAI;AAEjC,MAAI,WAAwB,yBAAU,aAAa;AACxD,gBAAU,WAAU;AAEpB,QAAI,SAAS,eAAa;AAE1B,yBAAoB;AAClB,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,eAAS,OAAO,UAAU,QAAQ,QAAQ,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACxF,cAAM,QAAQ,UAAU;AAAA;AAG1B,cAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,MAAM,OAAO;AAEhD,kCAA2B,yBAAuB,QAAQ,2BAA2B;AAAA,QACnF,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,kCAA2B,yBAAuB,QAAQ,iCAAiC;AAAA,QACzF,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,kCAA2B,yBAAuB,QAAQ,kBAAkB;AAAA,QAC1E,UAAU;AAAA,QACV,OAAO,CAAC,CAAC,iBAAiB,WAAY;AACpC,cAAI;AAEJ,iBAAQ,UAAS,OAAO,sBAAsB,MAAM,QAAQ;AAAA,YAC1D,CAAC,wBAAwB,WAAY;AACvC,cAAI;AAEJ,iBAAQ,UAAS,OAAO,8BAA8B,MAAM,QAAQ;AAAA,YAClE,CAAC,0BAA0B,WAAY;AACzC,cAAI;AAEJ,iBAAQ,UAAS,OAAO,gCAAgC,MAAM,QAAQ;AAAA,YACpE,CAAC,cAAc,WAAY;AAC7B,cAAI;AAEJ,iBAAQ,UAAS,OAAO,mBAAmB,MAAM,QAAQ;AAAA,YACvD,CAAC,gBAAgB,WAAY;AAC/B,cAAI;AAEJ,iBAAQ,UAAS,OAAO,qBAAqB,MAAM,QAAQ;AAAA,YACzD,CAAC,gBAAgB,WAAY;AAC/B,cAAI;AAEJ,iBAAQ,UAAS,OAAO,qBAAqB,MAAM,QAAQ;AAAA;AAAA;AAI/D,wBAAgB,yBAAuB,QAAQ,kBAAkB,eAAe;AAEhF,wBAAgB,yBAAuB,QAAQ,UAAU;AAEzD,wBAAgB,yBAAuB,QAAQ,aAAa;AAE5D,aAAO;AAAA;AAGT,oBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,KAMA,gBAAe;AACb,eAAO,KAAK,cAAc,OAAO,OAAO,KAAK,OAAO,WAAW,KAAK;AAAA;AAAA,OASrE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAE1B,eAAO,KAAK,IAAI,cAAc,gBAAc,OAAO;AAAA;AAAA,OAMpD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,cACA,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,SAAU,gBAAe,YAAY,KAAK,UAAU,QAAQ,iBAAiB,SAAS,eAAe,KAAK;AAE/G,YAAI,CAAC,KAAK,QAAQ;AAChB,eAAK;AACL;AAAA;AAIF,YAAI,KAAK,cAAc,QAAQ,CAAC,KAAK,OAAO,eAAe,KAAK,YAAY;AAC1E,cAAI,eAAe,KAAK,SAAS,KAAK,WAAW,KAAK,IAAI;AAE1D,cAAI,iBAAiB,OAAO;AAC1B,iBAAK,YAAY;AAAA;AAAA;AAIrB,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO,gBAAgB,MAAM,QAAQ;AAAA;AAE9C,aAAK,QAAQ,cAAc,WAAY;AACrC,iBAAO,OAAO,aAAa,MAAM,QAAQ;AAAA;AAE3C,aAAK,QAAQ,oBAAoB,WAAY;AAC3C,iBAAO,OAAO,mBAAmB,MAAM,QAAQ;AAAA;AAEjD,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ,4BAA4B,WAAY;AACnD,iBAAO,OAAO,2BAA2B,MAAM,QAAQ;AAAA;AAEzD,aAAK,QAAQ,sBAAsB,WAAY;AAC7C,iBAAO,OAAO,qBAAqB,MAAM,QAAQ;AAAA;AAEnD,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO,qBAAqB,MAAM,QAAQ;AAAA;AAEnD,aAAK,QAAQ,mBAAmB,WAAY;AAC1C,iBAAO,OAAO,kBAAkB,MAAM,QAAQ;AAAA;AAEhD,aAAK,QAAQ,mBAAmB,WAAY;AAC1C,iBAAO,OAAO,kBAAkB,MAAM,QAAQ;AAAA;AAEhD,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ,mBAAmB,WAAY;AAC1C,iBAAO,OAAO,kBAAkB,MAAM,QAAQ;AAAA;AAEhD,aAAK,QAAQ,mBAAmB,WAAY;AAC1C,iBAAO,OAAO,kBAAkB,MAAM,QAAQ;AAAA;AAEhD,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAG/C,aAAK,QAAQ,cAAc,SAAU,QAAQ;AAE3C,cAAK,YAAW,QAAQ,WAAW,SAAS,SAAS,OAAO,gBAAgB,yBAAyB;AACnG;AAAA;AAGF,iBAAO,OAAO;AAAA;AAGhB,aAAK,QAAQ,cAAc,SAAU,QAAQ;AAE3C,cAAK,YAAW,QAAQ,WAAW,SAAS,SAAS,OAAO,gBAAgB,yBAAyB;AACnG;AAAA;AAGF,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,oBAAoB,WAAY;AAC3C,iBAAO,OAAO,mBAAmB,MAAM,QAAQ;AAAA;AAEjD,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAG/C,+BAAsB,MAAM,kBAAkB,QAAQ,SAAU,MAAM;AACpE,cAAI,QAAQ,iBAAe,MAAM,IAC7B,YAAY,MAAM,IAClB,WAAW,MAAM;AAErB,iBAAO,OAAO,OAAO,GAAG,WAAW;AAAA;AAGrC,eAAK,kBAAgB,UAAS,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMtE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,+BAAsB,MAAM,kBAAkB,QAAQ,SAAU,OAAO;AACrE,cAAI,QAAQ,iBAAe,OAAO,IAC9B,YAAY,MAAM,IAClB,WAAW,MAAM;AAErB,iBAAO,OAAO,OAAO,IAAI,WAAW;AAAA;AAGtC,yBAAiB,KAAK,QAAQ,KAAK;AACnC,aAAK,SAAS;AAEd,eAAK,kBAAgB,UAAS,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OASvE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,aAAa;AACxC,aAAK,OAAO,aAAa,+BAA+B,KAAK,IAAI;AACjE,YAAI,iBAAiB,KAAK,IAAI,cAAc;AAE5C,YAAI,UAAU,mBAAmB,UAAU,eAAe,cAAc,eAAe,cAAc,KAAK,WAAW;AACnH,eAAK,YAAY,eAAe;AAAA;AAKlC,YAAI,CAAC,YAAY,QAAQ,KAAK,cAAc,MAAM;AAChD,cAAI,YAAY,KAAK,IAAI,cAAc,cAAY;AAEnD,cAAI,aAAa,KAAK,OAAO,eAAe,YAAY;AACtD,iBAAK,YAAY,KAAK;AAAA,iBACjB;AACL,iBAAK,YAAY,KAAK,SAAS,cAAc,QAAQ,cAAc,SAAS,YAAY,QAAQ,KAAK,IAAI;AAAA;AAAA;AAI7G,eAAK,kBAAgB,UAAS,YAAY,gBAAgB,MAAM,KAAK,MAAM;AAAA;AAAA,OAM5E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,UAAU;AAEd,+BAAsB,MAAM,kBAAkB,QAAQ,SAAU,OAAO;AACrE,cAAI;AAEJ,cAAI,QAAQ,iBAAe,OAAO,IAC9B,YAAY,MAAM,IAClB,WAAW,MAAM;AAErB,iBAAQ,kBAAiB,QAAQ,YAAY,QAAQ,mBAAmB,SAAS,SAAS,eAAe,IAAI,WAAW;AAAA;AAG1H,+BAAsB,MAAM,kBAAkB;AAE9C,yBAAiB,KAAK,QAAQ,KAAK;AACnC,aAAK,SAAS;AAEd,eAAK,kBAAgB,UAAS,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,OAejE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,aAAa,eAAe,cAAc,oBAAoB,WAAW;AAChH,YAAI,CAAC,WAAW;AACd,cAAI,eAAe,cAAc;AAC/B,mBAAO,qBAAsB,eAAc;AAAA;AAAA;AAI/C,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,KAAK;AACzC,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,eAAO,KAAK,yBAAyB,KAAK,KAAK,IAAI,cAAc,MAAM,KAAK,IAAI,aAAa,KAAK,IAAI,mBAAmB;AAAA;AAAA,OAa1H;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,QAAQ;AAC/C,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,eAAO,KAAK,yBAAyB,QAAQ,KAAK,IAAI,iBAAiB,SAAS,KAAK,IAAI,aAAa,KAAK,IAAI,mBAAmB;AAAA;AAAA,OAanI;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,WAAW,WAAW;AAC7C,YAAI,UAAU,cAAc,CAAC,gBAAgB,YAAY;AACvD,eAAK;AACL,iBAAO;AAAA;AAGT,YAAI,cAAc,UAAU,cAAc,QAAQ,KAAK,OAAO,eAAe,YAAY;AACvF,eAAK;AACL,iBAAO;AAAA;AAGT,YAAI;AACF,cAAI,kBAAkB,KAAK,OAAO,SAAS,cAAc,QAAQ,cAAc,SAAS,YAAY;AAEpG,cAAI,WAAW;AACb,iBAAK,OAAO,gBAAgB,KAAK,OAAO,WAAW,kBAAkB;AAAA;AAGvE,iBAAO;AAAA,iBACA,GAAP;AACA,eAAK,EAAE;AACP,iBAAO;AAAA;AAAA;AAAA,OAUV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,WAAW;AACrC,YAAI,CAAC,KAAK,OAAO,eAAe,YAAY;AAC1C,iBAAM,oBAAoB,OAAO,WAAW;AAC5C;AAAA;AAGF,aAAK,YAAY;AACjB,YAAI,aAAa,KAAK,OAAO,mBAAmB,KAAK;AAErD,YAAI,WAAW,SAAS,GAAG;AACzB,eAAK,IAAI,SAAS,YAAY,GAAG,OAAO,iBAAiB,eAAa;AAAA;AAAA;AAAA,OAYzE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,KAAK,QAAQ;AACvC,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK;AACrF,YAAI,cAAc,KAAK,IAAI,cAAc;AACzC,YAAI,iBAAiB,KAAK,IAAI,iBAAiB;AAE/C,YAAI,gBAAgB,QAAQ,mBAAmB,MAAM;AACnD,iBAAO,KAAK,OAAO,YAAY;AAAA,YAC7B;AAAA,YACA,KAAK;AAAA,YACL,KAAK;AAAA;AAAA,eAEF;AAEL,iBAAO;AAAA;AAAA;AAAA,OAYV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,KAAK,QAAQ;AAC7C,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK;AACrF,YAAI,cAAc,KAAK,IAAI,cAAc;AACzC,YAAI,iBAAiB,KAAK,IAAI,iBAAiB;AAE/C,YAAI,gBAAgB,QAAQ,mBAAmB,MAAM;AACnD,iBAAO;AAAA;AAGT,eAAO,KAAK,OAAO,oBAAoB;AAAA,UACrC;AAAA,UACA,KAAK;AAAA,UACL,KAAK;AAAA;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,gBAAgB;AACpD,YAAI,UAAU;AAEd,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,YAAI,mBAAmB,oBAAI;AAC3B,uBAAe,QAAQ,SAAU,QAAQ;AACvC,cAAI;AAGJ,cAAI,UAAU,WAAW,QAAQ,WAAW,SAAS,SAAU,mBAAkB,OAAO,aAAa,QAAQ,oBAAoB,SAAS,SAAS,gBAAgB;AAEnK,cAAI,YAAY,QAAQ;AACtB,gBAAI,CAAC,iBAAiB,IAAI,UAAU;AAClC,+BAAiB,IAAI;AAAA;AAAA;AAAA;AAI3B,kCAA0B,KAAK,QAAQ,QAAQ,SAAU,YAAY,SAAS;AAC5E,cAAK,eAAc,YAAY,QAAQ,YAAY,iBAAiB,IAAI,UAAU;AAChF,gBAAI;AAEJ,uBAAW;AACX,YAAC,oBAAmB,WAAW,UAAU,QAAQ,qBAAqB,SAAS,SAAS,iBAAiB;AAAA;AAAA;AAAA;AAAA,OAY9G;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,gBAAgB;AACrD,YAAI,UAAU;AAEd,YAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEvF,YAAI,mBAAmB,2BAA0B,QAAQ;AACvD,cAAI;AAEJ,cAAI,QAAS,oBAAmB,WAAW,QAAQ,WAAW,SAAS,SAAS,OAAO,aAAa,QAAQ,qBAAqB,SAAS,mBAAmB,IACzJ,MAAM,MAAM,KACZ,MAAM,MAAM,KACZ,QAAQ,MAAM;AAElB,iBAAO,UAAU,SAAS,GAAG,OAAO,OAAO,KAAK,OAAO,KAAK,KAAK,OAAO,OAAO;AAAA;AAGjF,YAAI,kBAAkB,IAAI,IAAI,aAAa,IAAI,SAAU,QAAQ;AAC/D,iBAAO,iBAAiB;AAAA;AAE1B,uBAAe,QAAQ,SAAU,QAAQ;AACvC,cAAI,kBAAkB;AAEtB,cAAI,QAAS,oBAAmB,OAAO,aAAa,QAAQ,qBAAqB,SAAS,mBAAmB,IACzG,MAAM,MAAM,KACZ,MAAM,MAAM;AAEhB,cAAI,YAAY,UAAU,OAAO,QAAQ,IAAI,YAAY,OAAO;AAChE,cAAI,eAAe,UAAU,OAAO,QAAQ,IAAI,eAAe,OAAO;AAEtE,cAAI,cAAc,QAAQ,iBAAiB,MAAM;AAC/C;AAAA;AAIF,cAAI,UAAU,WAAW,QAAQ,WAAW,SAAS,SAAU,oBAAmB,OAAO,aAAa,QAAQ,qBAAqB,SAAS,SAAS,iBAAiB;AACtK,cAAI,YAAY,iBAAiB;AAGjC,cAAI,YAAY,UAAU,CAAC,gBAAgB,IAAI,YAAY;AACzD,gBAAI,MAAM,0BAA0B,QAAQ,QAAQ,IAAI;AAExD,gBAAI,aAAa,IAAI,cAAc,WAAW,eAAe,IAAI,YAAY,WAAW,eAAe,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA,OAcxH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,KAAK,QAAQ,UAAU;AAC1D,YAAI,UAAU;AAAA,UACZ,KAAK,KAAK,sBAAsB;AAAA,UAChC,KAAK,KAAK,yBAAyB;AAAA,UACnC,OAAO,KAAK;AAAA;AAGd,YAAI,CAAC,KAAK,OAAO,8BAA8B,UAAU;AACvD,eAAK,oCAAoC,OAAO,KAAK,UAAU;AAC/D;AAAA;AAGF,eAAO,KAAK,OAAO,gBAAgB,SAAS;AAAA;AAAA,OAa7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,OAAO,WAAW,MAAM;AACvD,YAAI,eAAe,KAAK,IAAI,UAAU;AAEtC,YAAI,KAAK,kBAAkB,WAAW,eAAe;AACnD,cAAI,UAAU;AAAA,YACZ,KAAK,KAAK,IAAI,cAAc;AAAA,YAC5B,KAAK,KAAK,IAAI,iBAAiB;AAAA,YAC/B,OAAO,KAAK;AAAA;AAEd,cAAI,YAAY,KAAK,OAAO,aAAa;AAEzC,iBAAO,UAAQ,eAAe,YAAY,cAAc,OAAO,UAAU,QAAQ;AAAA;AAGnF,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,UAAU,aAAa,aAAa;AACnE,YAAI,UAAU;AAEd,YAAI,cAAc,sBAAqB,OAAO;AAC5C,iBAAO,gBAAc,gBAAc,IAAI,QAAQ,IAAI;AAAA,YACjD,OAAO,QAAQ;AAAA;AAAA;AAInB,YAAI,oBAAoB;AAAA,UACtB,OAAO,YAAY,YAAY;AAAA,UAC/B,KAAK,YAAY,YAAY;AAAA;AAE/B,YAAI,oBAAoB;AAAA,UACtB,OAAO,YAAY,YAAY;AAAA,UAC/B,KAAK,YAAY,YAAY;AAAA;AAI/B,YAAI,KAAK,OAAO,8BAA8B,uBAAuB,OAAO;AAC1E,iBAAO;AAAA;AAGT,eAAO,KAAK,OAAO,iBAAiB,mBAAmB;AAAA;AAAA,OAWxD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,YAAY,aAAa;AACxD,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEjF,YAAI,OAAO,SAAS,iBAAiB,gBAAc;AACjD;AAAA;AAKF,+BAAsB,MAAM,iCAAiC,YAAY,KAAK,IAAI,cAAc;AAAA;AAAA,OAWjG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,YAAY,aAAa;AACvD,YAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEjF,YAAI,OAAO,SAAS,iBAAiB,gBAAc;AACjD;AAAA;AAGF,aAAK,YAAY,WAAW,KAAK,QAAQ,KAAK,IAAI,cAAc,cAAY;AAE5E,YAAI,CAAC,uBAAsB,MAAM,kCAAkC;AACjE,cAAI,kBAAkB,KAAK,IAAI;AAE/B,cAAI,KAAK,OAAO,kCAAkC,KAAK,SAAS,kBAAkB;AAChF,mCAAsB,MAAM,2BAA2B;AAEvD,gBAAI,iBAAiB,KAAK,OAAO,gBAAgB,KAAK,SAAS,KAAK,IAAI;AACxE,iBAAK,sBAAsB;AAE3B,mCAAsB,MAAM,2BAA2B;AAAA;AAAA,eAEpD;AACL,eAAK,YAAY,KAAK;AAAA;AAAA;AAAA,OAczB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,KAAK,QAAQ,aAAa,QAAQ;AAC7D,YAAI,WAAW,SAAS,uBAAsB,MAAM,8BAA8B,KAAK,cAAc,QAAQ,CAAC,KAAK,OAAO,eAAe,KAAK,YAAY;AACxJ;AAAA;AAGF,YAAI,YAAY,KAAK,IAAI,YAAY;AAErC,YAAI,oBAAoB,KAAK,kBAAkB,WAAW;AAE1D,YAAI,CAAC,mBAAmB;AACtB,cAAI,WAAW,KAAK,YAAY,WAAW;AAE3C,cAAI,aAAa,SAAS;AACxB,gBAAI,2BAA2B,YAAY,QAAQ;AACjD,0BAAY,QAAQ,0BAA0B,YAAY;AAAA;AAG5D;AAAA;AAAA;AAKJ,YAAI,UAAU;AAAA,UACZ;AAAA,UACA,KAAK,KAAK,yBAAyB;AAAA,UACnC,OAAO,KAAK;AAAA;AAEd,YAAI,YAAY,KAAK,OAAO,aAAa;AAEzC,YAAI,QAAQ,UAAQ,eAAe,YAAY,cAAc,OAAO,UAAU,QAAQ;AACtF,oBAAY,QAAQ;AAAA;AAAA,OAarB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,KAAK,cAAc,aAAa,QAAQ;AACzE,YAAI,WAAW,SAAS,uBAAsB,MAAM,8BAA8B,KAAK,cAAc,QAAQ,CAAC,KAAK,OAAO,eAAe,KAAK,YAAY;AACxJ;AAAA;AAGF,YAAI,YAAY,KAAK,IAAI,YAAY;AACrC,YAAI,eAAe,KAAK,IAAI,UAAU;AAEtC,YAAI,oBAAoB,KAAK,kBAAkB,WAAW;AAE1D,YAAI,CAAC,mBAAmB;AACtB,cAAI,WAAW,KAAK,YAAY,WAAW;AAE3C,cAAI,aAAa,SAAS;AACxB;AAAA;AAAA;AAIJ,YAAI,aAAa,KAAK,OAAO,mBAAmB,KAAK,OAAO,WAAW,KAAK;AAK5E,YAAI,WAAW,UAAU,KAAK,WAAW,WAAW,GAAG;AACrD;AAAA;AAGF,YAAI,UAAU;AAAA,UACZ;AAAA,UAEA,KAAK,KAAK,yBAAyB;AAAA,UACnC,OAAO,KAAK;AAAA;AAEd,oBAAY,QAAQ,KAAK,OAAO,kBAAkB;AAAA;AAAA,OAWnD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,SAAS,QAAQ;AACpD,YAAI,UAAU;AAEd,YAAI,gBAAgB,SAAS;AAC3B;AAAA;AAGF,YAAI,qBAAqB;AACzB,YAAI,eAAe;AACnB,YAAI,iBAAiB,KAAK,OAAO,MAAM,WAAY;AACjD,kBAAQ,QAAQ,SAAU,OAAO;AAC/B,gBAAI,SAAS,iBAAe,OAAO,IAC/B,MAAM,OAAO,IACb,OAAO,OAAO,IACd,WAAW,OAAO;AAEtB,gBAAI,SAAS,QAAQ,IAAI,UAAU;AAEnC,gBAAI,cAAc,QAAQ,IAAI,cAAc;AAE5C,gBAAI,iBAAiB,QAAQ,IAAI,iBAAiB;AAElD,gBAAI,UAAU;AAAA,cACZ,KAAK;AAAA,cACL,KAAK;AAAA,cACL,OAAO,QAAQ;AAAA;AAGjB,gBAAI,gBAAgB,QAAQ,mBAAmB,MAAM;AACnD,sBAAQ,qBAAqB,KAAK,QAAQ;AAAA,mBACrC;AACL,iCAAmB,KAAK,CAAC,KAAK,QAAQ;AAAA;AAGxC,yBAAa,KAAK;AAAA,cAChB;AAAA;AAAA;AAAA;AAKN,YAAI,mBAAmB,QAAQ;AAG7B,eAAK,IAAI,YAAY,eAAe,WAAY;AAC9C,gBAAI,4BAA4B,QAAQ,OAAO,MAAM,WAAY;AAC/D,iCAAmB,QAAQ,SAAU,QAAQ;AAC3C,oBAAI,SAAS,iBAAe,QAAQ,IAChC,MAAM,OAAO,IACb,SAAS,OAAO,IAChB,WAAW,OAAO;AAEtB,wBAAQ,qBAAqB,KAAK,QAAQ;AAAA;AAAA;AAI9C,oBAAQ,sBAAsB,2BAA2B;AAAA;AAAA;AAI7D,aAAK,sBAAsB;AAC3B,aAAK,uBAAuB,gBAAgB;AAAA;AAAA,OAW7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC,SAAS,QAAQ;AAC1D,YAAI,UAAU;AAEd,YAAI,gBAAgB,SAAS;AAC3B;AAAA;AAGF,YAAI,iBAAiB;AACrB,YAAI,eAAe;AACnB,gBAAQ,QAAQ,SAAU,QAAQ;AAChC,cAAI,SAAS,iBAAe,QAAQ,IAChC,MAAM,OAAO,IACb,OAAO,OAAO,IACd,WAAW,OAAO;AAEtB,cAAI,SAAS,QAAQ,IAAI,UAAU;AAEnC,cAAI,CAAC,UAAU,SAAS;AACtB;AAAA;AAGF,cAAI,UAAU;AAAA,YACZ;AAAA,YACA,KAAK,QAAQ,yBAAyB;AAAA,YACtC,OAAO,QAAQ;AAAA;AAGjB,cAAI,CAAC,QAAQ,OAAO,8BAA8B,UAAU;AAC1D,iBAAK,2CAA2C,OAAO,KAAK,UAAU;AACtE;AAAA;AAGF,uBAAa,KAAK;AAAA,YAChB;AAAA;AAEF,yBAAe,KAAK,MAAM,gBAAgB,qBAAmB,QAAQ,OAAO,gBAAgB,SAAS;AAAA;AAEvG,aAAK,sBAAsB;AAC3B,aAAK,uBAAuB,gBAAgB;AAAA;AAAA,OAW7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,KAAK,QAAQ;AAC7C,YAAI,KAAK,YAAY,QAAQ,CAAC,KAAK,OAAO,eAAe,KAAK,cAAc,CAAC,KAAK,OAAO,sBAAsB,KAAK,SAAS,CAAC,KAAK,sBAAsB,MAAM,UAAU;AACvK,iBAAO;AAAA;AAAA;AAAA,OAYV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,KAAK,QAAQ;AAC7C,YAAI,KAAK,YAAY,QAAQ,CAAC,KAAK,OAAO,eAAe,KAAK,cAAc,CAAC,KAAK,OAAO,yBAAyB,KAAK,SAAS,CAAC,KAAK,yBAAyB,MAAM,UAAU;AAC7K,iBAAO;AAAA;AAAA;AAAA,OAaV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,KAAK,QAAQ,cAAc;AAC3D,YAAI,UAAU;AAEd,YAAI,WAAW,aAAa,MAAM,SAAU,aAAa;AACvD,iBAAO,QAAQ,OAAO,yBAAyB,QAAQ,SAAS,CAAC,aAAa;AAAA;AAEhF,eAAO,aAAa,QAAQ,QAAQ;AAAA;AAAA,OAYrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,KAAK,QAAQ,iBAAiB;AAC9D,YAAI,UAAU;AAEd,YAAI,WAAW,gBAAgB,MAAM,SAAU,gBAAgB;AAC7D,iBAAO,QAAQ,OAAO,4BAA4B,QAAQ,SAAS,CAAC,gBAAgB;AAAA;AAEtF,eAAO,aAAa,QAAQ,QAAQ;AAAA;AAAA,OAYrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,KAAK,QAAQ,QAAQ;AACpD,YAAI,gBAAgB,SAAS;AAC3B;AAAA;AAGF,YAAI,UAAU,KAAK,OAAO,QAAQ,KAAK,SAAS,CAAC,KAAK,sBAAsB,MAAM;AAClF,aAAK,sBAAsB;AAAA;AAAA,OAY5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,KAAK,QAAQ,QAAQ;AACpD,YAAI,gBAAgB,SAAS;AAC3B;AAAA;AAGF,YAAI,UAAU,KAAK,OAAO,WAAW,KAAK,SAAS,CAAC,KAAK,yBAAyB,MAAM;AACxF,aAAK,sBAAsB;AAAA;AAAA,OAa5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,KAAK,QAAQ,cAAc,QAAQ;AAClE,YAAI,UAAU;AAEd,YAAI,gBAAgB,SAAS;AAC3B;AAAA;AAGF,YAAI,yBAAyB,aAAa,OAAO;AACjD,YAAI,UAAU,KAAK,OAAO,MAAM,WAAY;AAC1C,iCAAuB,QAAQ,SAAU,aAAa;AACpD,oBAAQ,OAAO,WAAW,QAAQ,SAAS,CAAC,aAAa;AAAA;AAAA;AAG7D,aAAK,sBAAsB;AAAA;AAAA,OAa5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,KAAK,QAAQ,iBAAiB,QAAQ;AACrE,YAAI,UAAU;AAEd,YAAI,gBAAgB,SAAS;AAC3B;AAAA;AAGF,YAAI,4BAA4B,gBAAgB,OAAO;AACvD,YAAI,UAAU,KAAK,OAAO,MAAM,WAAY;AAC1C,oCAA0B,QAAQ,SAAU,gBAAgB;AAC1D,oBAAQ,OAAO,cAAc,QAAQ,SAAS,CAAC,gBAAgB;AAAA;AAAA;AAGnE,aAAK,sBAAsB;AAAA;AAAA,OAY5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,QAAQ,SAAS,sBAAsB;AACxE,YAAI,qBACA,UAAU;AAEd,+BAAsB,MAAM,2BAA2B;AAEvD,YAAI,WAAW,KAAK,IAAI,mBAAmB,sBAAsB,GAAG,uBAA0B,yBAAsB,QAAQ,gBAAgB,QAAQ,wBAAwB,SAAS,SAAS,oBAAoB,WAAW,IAAI,KAAK,IAAI;AAE1O,+BAAsB,MAAM,2BAA2B;AAEvD,iBAAS,QAAQ,SAAU,KAAK,kBAAkB;AAChD,cAAI,QAAQ,SAAU,OAAO,UAAU;AACrC,oBAAQ,OAAO,gBAAgB;AAAA,cAC7B,KAAK;AAAA,cACL,KAAK,uBAAuB;AAAA,cAC5B,OAAO,QAAQ;AAAA,eACd,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,OAYV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,SAAS;AAC7C,aAAK,IAAI,SAAS,6BAA6B;AAAA;AAAA,OAWhD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uCAAuC,qBAAqB,SAAS;AAC1E,aAAK,IAAI,SAAS,6BAA6B,qBAAqB;AAAA;AAAA,OAWrE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yCAAyC,qBAAqB,SAAS;AAC5E,aAAK,IAAI,SAAS,+BAA+B,qBAAqB;AAAA;AAAA,OAUvE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,uBAAuB;AACxD,aAAK,IAAI,SAAS,mBAAmB;AAAA;AAAA,OAWtC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,gBAAgB,gBAAgB;AACnE,aAAK,IAAI,SAAS,qBAAqB,gBAAgB;AAAA;AAAA,OAWxD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,yBAAyB,SAAS;AACrE,aAAK,IAAI,SAAS,qBAAqB,yBAAyB;AAAA;AAAA,QAEhE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAWX,WAAO;AAAA,IACP;;;AIh0CF,oCAAO;AAOP,gCAAO;;;ACRP,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAQhD,0BAAwB,qBAAqB;AAC1D,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,YAAI,YAAY,KAAK;AACrB,YAAI,aAAa;AAEjB,YAAI,MAAM,QAAQ,YAAY;AAC5B,cAAI,aAAa,iBAAe,WAAW,IACvC,aAAa,WAAW,IACxB,WAAW,WAAW;AAE1B,cAAI,aAAa,aAAa,GAAG;AAC/B,yBAAa;AAAA;AAAA;AAIjB,eAAO,KAAK,oBAAsB,+BAA+B;AAAA;AAAA,MAEnE,UAAU,oBAAoB;AAC5B,YAAI,wBAAwB,KAAK,wBAC7B,QAAO,sBAAsB,MAC7B,KAAK,sBAAsB;AAE/B,YAAI,SAAQ,KAAK,IAAI,KAAK,IAAI,MAAK,KAAK,GAAG,MAAM;AACjD,YAAI,OAAM,KAAK,IAAI,MAAK,KAAK,GAAG;AAChC,YAAI,gBAAgB;AAEpB,iBAAS,eAAe,QAAO,gBAAgB,MAAK,gBAAgB,GAAG;AACrE,wBAAc,KAAK;AAAA;AAGrB,YAAI,oBAAoB,cAAc;AACtC,YAAI,mBAAmB,cAAc,cAAc,SAAS;AAE5D,YAAI,iBAAiB,KAAK,kBAAkB,uBAAuB,mBAAmB,GAAG,GAAG,MAAM,oBAAoB;AACtH,4BAAoB,YAAY;AAEhC,YAAI,OAAO,UAAU,mBAAmB,kBAAkB,GAAG;AAC3D,eAAK,cAAc;AAAA,eACd;AACL,eAAK;AAAA;AAGP,aAAK;AACL,aAAK,KAAK,mBAAmB;AAAA;AAAA,MAE/B,UAAU;AAAA,MACV,QAAQ,kBAAkB;AACxB,eAAO,CAAE,MAAK,UAAU,8BAA8B,KAAK,UAAU;AAAA;AAAA;AAAA;;;AC7D3E,oCAAO;AAKP,gCAAO;AAzBP,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAuBjK,0BAAwB,qBAAqB;AAC1D,QAAI,UAAU;AACd,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,YAAI,aAAa,QAAQ,SAAS,IAAI,IAAI;AAC1C,eAAO,KAAK,oBAAsB,+BAA+B;AAAA;AAAA,MAEnE,UAAU,oBAAoB;AAC5B,YAAI,uBAAuB;AAE3B,YAAI,QAAQ,WAAW,GAAG;AACxB;AAAA;AAGF,YAAI,oBAAoB,QAAQ;AAChC,YAAI,kBAAkB,QAAQ,QAAQ,SAAS;AAE/C,4BAAqB,yBAAwB,KAAK,kBAAkB,uBAAuB,oBAAoB,GAAG,SAAS,QAAQ,0BAA0B,SAAS,wBAAwB;AAE9L,0BAAmB,0BAAyB,KAAK,kBAAkB,uBAAuB,kBAAkB,GAAG,QAAQ,QAAQ,2BAA2B,SAAS,yBAAyB,KAAK,cAAc;AAC/M,4BAAoB,YAAY;AAGhC,aAAK;AACL,aAAK,KAAK,mBAAmB;AAC7B,YAAI,qBAAqB,kBAAkB,oBAAoB,MAAM,KAAK;AAG1E,YAAI,CAAC,oBAAoB;AACvB,eAAK,cAAc,mBAAmB;AAAA;AAAA;AAAA,MAG1C,UAAU;AAAA,MACV,QAAQ,kBAAkB;AACxB,YAAI,QAAQ;AAEZ,YAAI,wBAAwB,SAAS,oBAAoB,oBAAoB,SAAU,mBAAmB;AACxG,iBAAO,MAAM,iBAAiB;AAAA;AAGhC,YAAI,CAAE,MAAK,UAAU,8BAA8B,KAAK,UAAU,yBAAyB,sBAAsB,SAAS,GAAG;AAC3H,iBAAO;AAAA;AAGT,gBAAQ,SAAS;AACjB,YAAI,oBAAoB,KAAK;AAC7B,YAAI,oBAAoB,kBAAkB,mBAAmB;AAC7D,YAAI,kBAAkB,kBAAkB,uBAAuB;AAC/D,YAAI,oBAAoB,KAAK;AAC7B,YAAI,wBAAwB,kBAAkB,6BAA6B;AAC3E,YAAI,sBAAsB,kBAAkB,6BAA6B;AACzE,YAAI,0BAA0B,kBAAkB;AAChD,YAAI,wBAAwB;AAE5B,YAAI,sBAAsB,iBAAiB;AACzC,cAAI,uBAAuB,kBAAkB,oBAAoB;AACjE,cAAI,yBAAyB,sBAAsB,wBAAwB;AAE3E,cAAI,uBAAuB,wBAAwB;AACjD,gBAAI,yBAAyB,wBAAwB,MAAM,mBAAmB,kBAAkB;AAChG,kCAAsB,KAAK,MAAM,uBAAuB,qBAAmB,uBAAuB,OAAO,SAAU,eAAe;AAChI,qBAAO,sBAAsB,SAAS;AAAA;AAAA;AAAA,mBAIjC,0BAA0B,KAAK,wBAAwB,mBAAmB;AAEnF,gCAAsB,KAAK,MAAM,uBAAuB,qBAAmB,wBAAwB,MAAM,GAAG;AAAA,mBAEnG,0BAA0B,MAAM;AAEzC,gCAAsB,KAAK,MAAM,uBAAuB,qBAAmB,wBAAwB,MAAM,GAAG,KAAK;AAAA,eAC5G;AACL,cAAI,kBAAkB,KAAK,cAAc;AACzC,cAAI,sBAAsB,kBAAkB,6BAA6B,kBAAkB,uBAAuB,iBAAiB;AAEnI,cAAI,wBAAwB,uBAAuB,kBAAkB,iBAAiB;AACpF,kCAAsB,KAAK,MAAM,uBAAuB,qBAAmB,wBAAwB,MAAM,kBAAkB;AAAA;AAAA;AAI/H,kBAAU,uBAAuB,SAAU,qBAAqB;AAC9D,kBAAQ,KAAK,MAAM,eAAe;AAAA;AAEpC,eAAO,QAAQ,WAAW;AAAA;AAAA;AAAA;;;AFtHhC,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AA4BzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAExM,uCAAoC,KAAK,YAAY,OAAO;AAAE,gCAA2B,KAAK;AAAa,eAAW,IAAI,KAAK;AAAA;AAE/H,uCAAoC,KAAK,mBAAmB;AAAE,QAAI,kBAAkB,IAAI,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEpH,kCAA+B,UAAU,YAAY;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,WAAO,0BAAyB,UAAU;AAAA;AAE7K,qCAAkC,UAAU,YAAY;AAAE,QAAI,WAAW,KAAK;AAAE,aAAO,WAAW,IAAI,KAAK;AAAA;AAAa,WAAO,WAAW;AAAA;AAE1I,kCAA+B,UAAU,YAAY,OAAO;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,8BAAyB,UAAU,YAAY;AAAQ,WAAO;AAAA;AAExM,yCAAsC,UAAU,YAAY,QAAQ;AAAE,QAAI,CAAC,WAAW,IAAI,WAAW;AAAE,YAAM,IAAI,UAAU,kBAAkB,SAAS;AAAA;AAAqC,WAAO,WAAW,IAAI;AAAA;AAEjN,qCAAkC,UAAU,YAAY,OAAO;AAAE,QAAI,WAAW,KAAK;AAAE,iBAAW,IAAI,KAAK,UAAU;AAAA,WAAe;AAAE,UAAI,CAAC,WAAW,UAAU;AAAE,cAAM,IAAI,UAAU;AAAA;AAA+C,iBAAW,QAAQ;AAAA;AAAA;AAaxP,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AACvB,MAAI,eAAa;AACjB,MAAI,oBAAkB;AA6D7B,MAAI,YAAyB,oBAAI;AAEjC,MAAI,oBAAiC,oBAAI;AAElC,MAAI,gBAA6B,yBAAU,aAAa;AAC7D,gBAAU,gBAAe;AAEzB,QAAI,SAAS,eAAa;AAE1B,8BAAyB;AACvB,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,eAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,aAAK,QAAQ,UAAU;AAAA;AAGzB,cAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,MAAM,OAAO;AAEhD,kCAA2B,yBAAuB,QAAQ,WAAW;AAAA,QACnE,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,kCAA2B,yBAAuB,QAAQ,mBAAmB;AAAA,QAC3E,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,aAAO;AAAA;AAGT,oBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAOA,qBAAqB;AACnB,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,YAAI,iBAAiB,KAAK,IAAI,cAAc;AAE5C,YAAI,UAAS,iBAAiB;AAC5B,iCAAsB,MAAM,WAAW;AAEvC,cAAI,YAAY,eAAe,mBAAmB;AAChD,2BAAe,mBAAmB;AAAA;AAAA;AAItC,+BAAsB,MAAM,mBAAmB,IAAI;AAEnD,+BAAsB,MAAM,mBAAmB,aAAa,QAAQ,WAAY;AAC9E,iBAAO,OAAO;AAAA;AAGhB,aAAK,IAAI,kBAAkB,YAAY,KAAK,YAAY,uBAAsB,MAAM;AACpF,aAAK,QAAQ,kCAAkC,WAAY;AACzD,iBAAO,OAAO,iCAAiC,MAAM,QAAQ;AAAA;AAE/D,aAAK,QAAQ,oBAAoB,SAAU,KAAK,KAAK,gBAAgB;AACnE,iBAAO,OAAO,mBAAmB,KAAK,KAAK;AAAA;AAE7C,aAAK,QAAQ,kBAAkB,SAAU,OAAO,KAAK;AACnD,iBAAO,OAAO,iBAAiB,OAAO;AAAA;AAExC,aAAK,QAAQ,qBAAqB,WAAY;AAC5C,iBAAO,OAAO,oBAAoB,MAAM,QAAQ;AAAA;AAElD,aAAK,QAAQ,uBAAuB,SAAU,QAAQ;AACpD,iBAAO,OAAO,sBAAsB;AAAA;AAGtC,eAAK,kBAAgB,eAAc,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM3E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,eAAc,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM3E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK,IAAI,kBAAkB,cAAc,KAAK;AAE9C,+BAAsB,MAAM,WAAW;AAEvC,eAAK,kBAAgB,eAAc,YAAY,iBAAiB,MAAM,KAAK;AAE3E,aAAK;AAAA;AAAA,OAQN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,SAAS;AACnC,YAAI,SAAS;AAEb,YAAI,oBAAoB,KAAK;AAC7B,YAAI,gBAAgB,KAAK,cAAc;AACvC,YAAI,wBAAwB;AAE5B,YAAI,kBAAkB,uBAAsB,MAAM,mBAAmB,YAAY;AAEjF,YAAI,oBAAoB,QAAQ,SAAS;AAEzC,YAAI,iBAAiB,mBAAmB;AACtC,cAAI,kBAAkB,QAAQ,IAAI,SAAU,cAAc;AACxD,mBAAO,OAAO,IAAI,iBAAiB;AAAA;AAGrC,oBAAU,iBAAiB,SAAU,gBAAgB;AACnD,4BAAgB,kBAAkB;AAAA;AAGpC,kCAAwB,YAAY,iBAAiB,SAAU,eAAe,UAAU,eAAe;AACrG,gBAAI,UAAU;AACZ,4BAAc,KAAK,OAAO,IAAI,eAAe;AAAA;AAG/C,mBAAO;AAAA,aACN;AAAA;AAGL,YAAI,iBAAiB,KAAK,IAAI,SAAS,uBAAuB,mBAAmB,uBAAuB,iBAAiB;AAEzH,YAAI,mBAAmB,OAAO;AAC5B;AAAA;AAGF,YAAI,iBAAiB,mBAAmB;AACtC,iCAAsB,MAAM,mBAAmB,UAAU;AAAA;AAI3D,aAAK,IAAI,KAAK;AACd,aAAK,IAAI,SAAS,sBAAsB,mBAAmB,uBAAuB,iBAAiB,mBAAmB,iBAAiB,sBAAsB,SAAS,kBAAkB;AAAA;AAAA,OAQzL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAsB;AAC3B,iBAAS,QAAQ,UAAU,QAAQ,SAAS,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC/F,iBAAO,SAAS,UAAU;AAAA;AAG5B,aAAK,YAAY;AAAA;AAAA,OAQlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,SAAS;AACnC,YAAI,SAAS;AAEb,YAAI,oBAAoB,KAAK;AAC7B,YAAI,gBAAgB,KAAK,cAAc;AACvC,YAAI,wBAAwB;AAE5B,YAAI,eAAe;AACjB,kCAAwB,MAAM,KAAK,IAAI,IAAI,kBAAkB,OAAO;AAAA;AAGtE,YAAI,iBAAiB,KAAK,IAAI,SAAS,qBAAqB,mBAAmB,uBAAuB;AAEtG,YAAI,mBAAmB,OAAO;AAC5B;AAAA;AAGF,YAAI,eAAe;AACjB,eAAK,IAAI,eAAe,WAAY;AAClC,sBAAU,SAAS,SAAU,cAAc;AACzC,qCAAsB,QAAQ,mBAAmB,gBAAgB,OAAO,IAAI,iBAAiB,eAAe;AAAA;AAAA,aAE7G;AAAA;AAGL,aAAK,IAAI,SAAS,oBAAoB,mBAAmB,uBAAuB,eAAe,iBAAiB,sBAAsB,SAAS,kBAAkB;AAAA;AAAA,OAQlK;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAsB;AAC3B,iBAAS,QAAQ,UAAU,QAAQ,SAAS,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC/F,iBAAO,SAAS,UAAU;AAAA;AAG5B,aAAK,YAAY;AAAA;AAAA,OAQlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,SAAS;AAEb,eAAO,SAAS,uBAAsB,MAAM,mBAAmB,oBAAoB,SAAU,qBAAqB;AAChH,iBAAO,OAAO,IAAI,eAAe;AAAA;AAAA;AAAA,OAUpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,QAAQ;AAC/B,eAAO,uBAAsB,MAAM,mBAAmB,gBAAgB,KAAK,IAAI,iBAAiB,YAAY;AAAA;AAAA,OAS7G;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,eAAe;AAC3C,YAAI,cAAc,KAAK,IAAI;AAE3B,YAAI,MAAM,QAAQ,kBAAkB,cAAc,SAAS,GAAG;AAC5D,iBAAO,cAAc,MAAM,SAAU,cAAc;AACjD,mBAAO,OAAO,UAAU,iBAAiB,gBAAgB,KAAK,eAAe;AAAA;AAAA;AAIjF,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,kBAAU,KAAK,IAAI,gBAAgB,SAAU,MAAM;AACjD,cAAI,MAAM;AACR,iBAAK,oBAAoB;AAAA;AAAA;AAAA;AAAA,OAa9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,OAAO,QAAQ;AAG9C,YAAI,KAAK,SAAS,SAAS;AACzB,iBAAO;AAAA;AAGT,YAAI,uBAAsB,MAAM,WAAW,cAAe,MAAK,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,KAAK;AAEjH,cAAI,OAAO,UAAU,YAAY,KAAK,IAAI,iBAAiB;AACzD,mBAAO,QAAQ;AAAA;AAAA;AAAA;AAAA,OAapB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,KAAK,QAAQ,gBAAgB;AAC9D,YAAI,uBAAsB,MAAM,WAAW,qBAAqB,SAAS,KAAK,SAAS,SAAS;AAE9F,yBAAe,oBAAoB;AAAA;AAGrC,YAAI,KAAK,SAAS,SAAS,IAAI;AAC7B,yBAAe,YAAY,eAAe,aAAa;AAEvD,cAAI,eAAe,UAAU,QAAQ,yBAAyB,IAAI;AAChE,2BAAe,aAAa;AAAA;AAAA,mBAErB,eAAe,WAAW;AACnC,cAAI,WAAW,eAAe,UAAU,MAAM;AAE9C,cAAI,SAAS,SAAS,GAAG;AACvB,gBAAI,2BAA2B,SAAS,QAAQ;AAEhD,gBAAI,2BAA2B,IAAI;AACjC,uBAAS,OAAO,0BAA0B;AAAA;AAG5C,2BAAe,YAAY,SAAS,KAAK;AAAA;AAAA;AAAA;AAAA,OAY9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,QAAQ;AAC5C,YAAI,SAAS;AAGb,YAAI,uBAAsB,MAAM,WAAW,kBAAkB;AAC3D,iBAAO;AAAA;AAGT,YAAI,YAAY;AAEhB,YAAI,YAAY,oBAAmB,UAAU,QAAQ,UAAU,QAAQ;AACrE,oBAAU,KAAK;AAAA,YACb;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA;AAIJ,kBAAU,QAAQ,SAAU,OAAO;AACjC,cAAI,WAAW;AACf,cAAI,aAAa;AACjB,oBAAU,MAAM,UAAU,MAAM,QAAQ,SAAU,cAAc;AAC9D,gBAAI,OAAO,SAAS,eAAe;AACjC,kBAAI,CAAC,UAAU;AACb,0BAAU,MAAM,UAAU,MAAM,QAAQ,YAAY,eAAe;AAAA;AAGrE,yBAAW;AAAA,mBACN;AACL,kBAAI,UAAU;AACZ,6BAAa;AAAA;AAGf,kBAAI,iBAAiB,MAAM,QAAQ;AACjC,0BAAU,MAAM,UAAU,MAAM,QAAQ,YAAY;AAAA;AAGtD,yBAAW;AAAA;AAAA;AAAA;AAIjB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,QAAQ,IAAI;AAC9C,YAAI,CAAC,uBAAsB,MAAM,WAAW,cAAc,SAAS,GAAG;AACpE;AAAA;AAGF,YAAI,YAAY;AAEhB,YAAI,UAAU,KAAK,KAAK,SAAS,SAAS,IAAI;AAC5C,oBAAU,KAAK;AAAA;AAGjB,YAAI,SAAS,KAAK,IAAI,cAAc,KAAK,KAAK,SAAS,SAAS,IAAI;AAClE,oBAAU,KAAK;AAAA;AAGjB,iBAAS,IAAI;AAAA;AAAA,OASd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0CAA0C,SAAS;AACxD,gBAAQ,MAAM,KAAK;AAAA,UACjB,MAAM;AAAA,WACL,eAAe,OAAO,eAAe;AAAA;AAAA,OAQzC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,MAAM,QAAQ,uBAAsB,MAAM,WAAW,UAAU;AACjE,eAAK,YAAY,uBAAsB,MAAM,WAAW;AAAA;AAAA;AAAA,OAO3D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,+BAAsB,MAAM,WAAW;AAEvC,+BAAsB,MAAM,mBAAmB;AAE/C,eAAK,kBAAgB,eAAc,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAErE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAWX,WAAO;AAAA,IACP;;;AG7nBF,oCAAO;AAOP,gCAAO;;;ACRP,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAQhD,uBAAqB,kBAAkB;AACpD,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,YAAI,YAAY,KAAK;AACrB,YAAI,aAAa;AAEjB,YAAI,MAAM,QAAQ,YAAY;AAC5B,cAAI,aAAa,iBAAe,WAAW,IACvC,UAAU,WAAW,IACrB,QAAQ,WAAW;AAEvB,cAAI,UAAU,UAAU,GAAG;AACzB,yBAAa;AAAA;AAAA;AAIjB,eAAO,KAAK,oBAAsB,4BAA4B;AAAA;AAAA,MAEhE,UAAU,oBAAoB;AAC5B,YAAI,wBAAwB,KAAK,wBAC7B,QAAO,sBAAsB,MAC7B,KAAK,sBAAsB;AAE/B,YAAI,SAAQ,KAAK,IAAI,KAAK,IAAI,MAAK,KAAK,GAAG,MAAM;AACjD,YAAI,OAAM,KAAK,IAAI,MAAK,KAAK,GAAG;AAChC,YAAI,aAAa;AAEjB,iBAAS,YAAY,QAAO,aAAa,MAAK,aAAa,GAAG;AAC5D,qBAAW,KAAK;AAAA;AAGlB,YAAI,iBAAiB,WAAW;AAChC,YAAI,gBAAgB,WAAW,WAAW,SAAS;AAEnD,YAAI,cAAc,KAAK,eAAe,uBAAuB,gBAAgB,GAAG,GAAG,MAAM,iBAAiB;AAC1G,yBAAiB,SAAS;AAE1B,YAAI,OAAO,UAAU,gBAAgB,eAAe,GAAG;AACrD,eAAK,WAAW;AAAA,eACX;AACL,eAAK;AAAA;AAGP,aAAK;AACL,aAAK,KAAK,mBAAmB;AAAA;AAAA,MAE/B,UAAU;AAAA,MACV,QAAQ,kBAAkB;AACxB,eAAO,CAAE,MAAK,UAAU,2BAA2B,KAAK,UAAU;AAAA;AAAA;AAAA;;;AC7DxE,oCAAO;AAKP,gCAAO;AAzBP,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAuBjK,uBAAqB,kBAAkB;AACpD,QAAI,OAAO;AACX,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,YAAI,aAAa,KAAK,SAAS,IAAI,IAAI;AACvC,eAAO,KAAK,oBAAsB,4BAA4B;AAAA;AAAA,MAEhE,UAAU,oBAAoB;AAC5B,YAAI,uBAAuB;AAE3B,YAAI,KAAK,WAAW,GAAG;AACrB;AAAA;AAGF,YAAI,iBAAiB,KAAK;AAC1B,YAAI,eAAe,KAAK,KAAK,SAAS;AAEtC,yBAAkB,yBAAwB,KAAK,eAAe,uBAAuB,iBAAiB,GAAG,SAAS,QAAQ,0BAA0B,SAAS,wBAAwB;AAErL,uBAAgB,0BAAyB,KAAK,eAAe,uBAAuB,eAAe,GAAG,QAAQ,QAAQ,2BAA2B,SAAS,yBAAyB,KAAK,cAAc;AACtM,yBAAiB,SAAS;AAG1B,aAAK;AACL,aAAK,KAAK,mBAAmB;AAC7B,YAAI,kBAAkB,eAAe,iBAAiB,MAAM,KAAK;AAGjE,YAAI,CAAC,iBAAiB;AACpB,eAAK,WAAW,gBAAgB;AAAA;AAAA;AAAA,MAGpC,UAAU;AAAA,MACV,QAAQ,kBAAkB;AACxB,YAAI,QAAQ;AAEZ,YAAI,qBAAqB,SAAS,iBAAiB,iBAAiB,SAAU,gBAAgB;AAC5F,iBAAO,MAAM,cAAc;AAAA;AAG7B,YAAI,CAAE,MAAK,UAAU,2BAA2B,KAAK,UAAU,yBAAyB,mBAAmB,SAAS,GAAG;AACrH,iBAAO;AAAA;AAGT,aAAK,SAAS;AACd,YAAI,oBAAoB,KAAK;AAC7B,YAAI,iBAAiB,kBAAkB,mBAAmB;AAC1D,YAAI,eAAe,kBAAkB,uBAAuB;AAC5D,YAAI,iBAAiB,KAAK;AAC1B,YAAI,qBAAqB,eAAe,6BAA6B;AACrE,YAAI,mBAAmB,eAAe,6BAA6B;AACnE,YAAI,uBAAuB,eAAe;AAC1C,YAAI,qBAAqB;AAEzB,YAAI,mBAAmB,cAAc;AACnC,cAAI,oBAAoB,eAAe,iBAAiB;AACxD,cAAI,sBAAsB,mBAAmB,qBAAqB;AAElE,cAAI,oBAAoB,qBAAqB;AAC3C,gBAAI,yBAAyB,qBAAqB,MAAM,gBAAgB,eAAe;AACvF,+BAAmB,KAAK,MAAM,oBAAoB,qBAAmB,uBAAuB,OAAO,SAAU,eAAe;AAC1H,qBAAO,mBAAmB,SAAS;AAAA;AAAA;AAAA,mBAI9B,uBAAuB,KAAK,qBAAqB,gBAAgB;AAE1E,6BAAmB,KAAK,MAAM,oBAAoB,qBAAmB,qBAAqB,MAAM,GAAG;AAAA,mBAE1F,uBAAuB,MAAM;AAEtC,6BAAmB,KAAK,MAAM,oBAAoB,qBAAmB,qBAAqB,MAAM,GAAG,KAAK;AAAA,eACnG;AACL,cAAI,kBAAkB,KAAK,cAAc;AACzC,cAAI,sBAAsB,eAAe,6BAA6B,eAAe,uBAAuB,iBAAiB;AAE7H,cAAI,qBAAqB,uBAAuB,kBAAkB,cAAc;AAC9E,+BAAmB,KAAK,MAAM,oBAAoB,qBAAmB,qBAAqB,MAAM,eAAe;AAAA;AAAA;AAInH,kBAAU,oBAAoB,SAAU,kBAAkB;AACxD,eAAK,KAAK,MAAM,YAAY;AAAA;AAE9B,eAAO,KAAK,WAAW;AAAA;AAAA;AAAA;;;AFtH7B,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AA4BzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAExM,uCAAoC,KAAK,YAAY,OAAO;AAAE,gCAA2B,KAAK;AAAa,eAAW,IAAI,KAAK;AAAA;AAE/H,uCAAoC,KAAK,mBAAmB;AAAE,QAAI,kBAAkB,IAAI,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEpH,kCAA+B,UAAU,YAAY;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,WAAO,0BAAyB,UAAU;AAAA;AAE7K,qCAAkC,UAAU,YAAY;AAAE,QAAI,WAAW,KAAK;AAAE,aAAO,WAAW,IAAI,KAAK;AAAA;AAAa,WAAO,WAAW;AAAA;AAE1I,kCAA+B,UAAU,YAAY,OAAO;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,8BAAyB,UAAU,YAAY;AAAQ,WAAO;AAAA;AAExM,yCAAsC,UAAU,YAAY,QAAQ;AAAE,QAAI,CAAC,WAAW,IAAI,WAAW;AAAE,YAAM,IAAI,UAAU,kBAAkB,SAAS;AAAA;AAAqC,WAAO,WAAW,IAAI;AAAA;AAEjN,qCAAkC,UAAU,YAAY,OAAO;AAAE,QAAI,WAAW,KAAK;AAAE,iBAAW,IAAI,KAAK,UAAU;AAAA,WAAe;AAAE,UAAI,CAAC,WAAW,UAAU;AAAE,cAAM,IAAI,UAAU;AAAA;AAA+C,iBAAW,QAAQ;AAAA;AAAA;AAaxP,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AACvB,MAAI,eAAa;AACjB,MAAI,oBAAkB;AA6D7B,MAAI,aAAyB,oBAAI;AAEjC,MAAI,iBAA8B,oBAAI;AAE/B,MAAI,aAA0B,yBAAU,aAAa;AAC1D,gBAAU,aAAY;AAEtB,QAAI,SAAS,eAAa;AAE1B,2BAAsB;AACpB,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,eAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,aAAK,QAAQ,UAAU;AAAA;AAGzB,cAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,MAAM,OAAO;AAEhD,kCAA2B,yBAAuB,QAAQ,YAAW;AAAA,QACnE,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,kCAA2B,yBAAuB,QAAQ,gBAAgB;AAAA,QACxE,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,aAAO;AAAA;AAGT,oBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAOA,qBAAqB;AACnB,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,YAAI,iBAAiB,KAAK,IAAI,cAAc;AAE5C,YAAI,UAAS,iBAAiB;AAC5B,iCAAsB,MAAM,YAAW;AAEvC,cAAI,YAAY,eAAe,mBAAmB;AAChD,2BAAe,mBAAmB;AAAA;AAAA;AAItC,+BAAsB,MAAM,gBAAgB,IAAI;AAEhD,+BAAsB,MAAM,gBAAgB,aAAa,QAAQ,WAAY;AAC3E,iBAAO,OAAO;AAAA;AAGhB,aAAK,IAAI,eAAe,YAAY,KAAK,YAAY,uBAAsB,MAAM;AACjF,aAAK,QAAQ,kCAAkC,WAAY;AACzD,iBAAO,OAAO,iCAAiC,MAAM,QAAQ;AAAA;AAE/D,aAAK,QAAQ,oBAAoB,SAAU,KAAK,KAAK,gBAAgB;AACnE,iBAAO,OAAO,mBAAmB,KAAK,KAAK;AAAA;AAE7C,aAAK,QAAQ,mBAAmB,SAAU,QAAQ,KAAK;AACrD,iBAAO,OAAO,kBAAkB,QAAQ;AAAA;AAE1C,aAAK,QAAQ,qBAAqB,WAAY;AAC5C,iBAAO,OAAO,oBAAoB,MAAM,QAAQ;AAAA;AAElD,aAAK,QAAQ,uBAAuB,SAAU,QAAQ;AACpD,iBAAO,OAAO,sBAAsB;AAAA;AAGtC,eAAK,kBAAgB,YAAW,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMxE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,YAAW,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMxE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK,IAAI,eAAe,cAAc,KAAK;AAE3C,+BAAsB,MAAM,YAAW;AAEvC,eAAK,kBAAgB,YAAW,YAAY,iBAAiB,MAAM,KAAK;AAExE,aAAK;AAAA;AAAA,OAQN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,MAAM;AAC7B,YAAI,SAAS;AAEb,YAAI,oBAAoB,KAAK;AAC7B,YAAI,gBAAgB,KAAK,cAAc;AACvC,YAAI,wBAAwB;AAE5B,YAAI,kBAAkB,uBAAsB,MAAM,gBAAgB,YAAY;AAE9E,YAAI,iBAAiB,KAAK,SAAS;AAEnC,YAAI,iBAAiB,gBAAgB;AACnC,cAAI,eAAe,KAAK,IAAI,SAAU,WAAW;AAC/C,mBAAO,OAAO,IAAI,cAAc;AAAA;AAGlC,oBAAU,cAAc,SAAU,aAAa;AAC7C,4BAAgB,eAAe;AAAA;AAGjC,kCAAwB,YAAY,iBAAiB,SAAU,eAAe,UAAU,eAAe;AACrG,gBAAI,UAAU;AACZ,4BAAc,KAAK,OAAO,IAAI,YAAY;AAAA;AAG5C,mBAAO;AAAA,aACN;AAAA;AAGL,YAAI,iBAAiB,KAAK,IAAI,SAAS,oBAAoB,mBAAmB,uBAAuB,iBAAiB;AAEtH,YAAI,mBAAmB,OAAO;AAC5B;AAAA;AAGF,YAAI,iBAAiB,gBAAgB;AACnC,iCAAsB,MAAM,gBAAgB,UAAU;AAAA;AAGxD,aAAK,IAAI,SAAS,mBAAmB,mBAAmB,uBAAuB,iBAAiB,gBAAgB,iBAAiB,sBAAsB,SAAS,kBAAkB;AAAA;AAAA,OAQnL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,iBAAS,QAAQ,UAAU,QAAQ,MAAM,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC5F,cAAI,SAAS,UAAU;AAAA;AAGzB,aAAK,SAAS;AAAA;AAAA,OAQf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,MAAM;AAC7B,YAAI,SAAS;AAEb,YAAI,oBAAoB,KAAK;AAC7B,YAAI,gBAAgB,KAAK,cAAc;AACvC,YAAI,wBAAwB;AAE5B,YAAI,eAAe;AACjB,kCAAwB,MAAM,KAAK,IAAI,IAAI,kBAAkB,OAAO;AAAA;AAGtE,YAAI,iBAAiB,KAAK,IAAI,SAAS,kBAAkB,mBAAmB,uBAAuB;AAEnG,YAAI,mBAAmB,OAAO;AAC5B;AAAA;AAGF,YAAI,eAAe;AACjB,eAAK,IAAI,eAAe,WAAY;AAClC,sBAAU,MAAM,SAAU,WAAW;AACnC,qCAAsB,QAAQ,gBAAgB,gBAAgB,OAAO,IAAI,cAAc,YAAY;AAAA;AAAA,aAEpG;AAAA;AAGL,aAAK,IAAI,SAAS,iBAAiB,mBAAmB,uBAAuB,eAAe,iBAAiB,sBAAsB,SAAS,kBAAkB;AAAA;AAAA,OAQ/J;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,iBAAS,QAAQ,UAAU,QAAQ,MAAM,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC5F,cAAI,SAAS,UAAU;AAAA;AAGzB,aAAK,SAAS;AAAA;AAAA,OAQf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,eAAO,SAAS,uBAAsB,MAAM,gBAAgB,oBAAoB,SAAU,kBAAkB;AAC1G,iBAAO,OAAO,IAAI,YAAY;AAAA;AAAA;AAAA,OAUjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,KAAK;AAC5B,eAAO,uBAAsB,MAAM,gBAAgB,gBAAgB,KAAK,IAAI,cAAc,SAAS;AAAA;AAAA,OASpG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,YAAY;AACxC,YAAI,WAAW,KAAK,IAAI;AAExB,YAAI,MAAM,QAAQ,eAAe,WAAW,SAAS,GAAG;AACtD,iBAAO,WAAW,MAAM,SAAU,WAAW;AAC3C,mBAAO,OAAO,UAAU,cAAc,aAAa,KAAK,YAAY;AAAA;AAAA;AAIxE,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,kBAAU,KAAK,IAAI,gBAAgB,SAAU,MAAM;AACjD,cAAI,MAAM;AACR,iBAAK,iBAAiB;AAAA;AAAA;AAAA;AAAA,OAa3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,QAAQ,KAAK;AAG7C,YAAI,KAAK,SAAS,MAAM;AACtB,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,KAAK,QAAQ,gBAAgB;AAC9D,YAAI,uBAAsB,MAAM,YAAW,qBAAqB,SAAS,KAAK,SAAS,MAAM;AAE3F,yBAAe,iBAAiB;AAAA;AAGlC,YAAI,KAAK,SAAS,MAAM,IAAI;AAC1B,yBAAe,YAAY,eAAe,aAAa;AAEvD,cAAI,eAAe,UAAU,QAAQ,sBAAsB,IAAI;AAC7D,2BAAe,aAAa;AAAA;AAAA,mBAErB,eAAe,WAAW;AACnC,cAAI,WAAW,eAAe,UAAU,MAAM;AAE9C,cAAI,SAAS,SAAS,GAAG;AACvB,gBAAI,wBAAwB,SAAS,QAAQ;AAE7C,gBAAI,wBAAwB,IAAI;AAC9B,uBAAS,OAAO,uBAAuB;AAAA;AAGzC,2BAAe,YAAY,SAAS,KAAK;AAAA;AAAA;AAAA;AAAA,OAY9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,QAAQ;AAC5C,YAAI,SAAS;AAGb,YAAI,uBAAsB,MAAM,YAAW,kBAAkB;AAC3D,iBAAO;AAAA;AAGT,YAAI,YAAY;AAEhB,YAAI,YAAY,oBAAmB,UAAU,QAAQ,UAAU,QAAQ;AACrE,oBAAU,KAAK;AAAA,YACb;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA;AAIJ,kBAAU,QAAQ,SAAU,OAAO;AACjC,cAAI,WAAW;AACf,cAAI,aAAa;AACjB,oBAAU,MAAM,UAAU,MAAM,QAAQ,SAAU,WAAW;AAC3D,gBAAI,OAAO,SAAS,YAAY;AAC9B,kBAAI,CAAC,UAAU;AACb,0BAAU,YAAY,YAAY,GAAG,MAAM,UAAU,MAAM;AAAA;AAG7D,yBAAW;AAAA,mBACN;AACL,kBAAI,UAAU;AACZ,6BAAa;AAAA;AAGf,kBAAI,cAAc,MAAM,QAAQ;AAC9B,0BAAU,YAAY,WAAW,MAAM,UAAU,MAAM;AAAA;AAGzD,yBAAW;AAAA;AAAA;AAAA;AAIjB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,KAAK,IAAI;AAC3C,YAAI,CAAC,uBAAsB,MAAM,YAAW,cAAc,MAAM,GAAG;AACjE;AAAA;AAGF,YAAI,YAAY;AAEhB,YAAI,OAAO,KAAK,KAAK,SAAS,MAAM,IAAI;AACtC,oBAAU,KAAK;AAAA;AAGjB,YAAI,MAAM,KAAK,IAAI,cAAc,KAAK,KAAK,SAAS,MAAM,IAAI;AAC5D,oBAAU,KAAK;AAAA;AAGjB,iBAAS,IAAI;AAAA;AAAA,OASd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0CAA0C,SAAS;AACxD,gBAAQ,MAAM,KAAK;AAAA,UACjB,MAAM;AAAA,WACL,YAAY,OAAO,YAAY;AAAA;AAAA,OAQnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,MAAM,QAAQ,uBAAsB,MAAM,YAAW,OAAO;AAC9D,eAAK,SAAS,uBAAsB,MAAM,YAAW;AAAA;AAAA;AAAA,OAOxD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,+BAAsB,MAAM,YAAW;AAEvC,+BAAsB,MAAM,gBAAgB;AAE5C,eAAK,kBAAgB,YAAW,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAElE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAWX,WAAO;AAAA,IACP;;;AGnmBF,oCAAO;;;ACtBP,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAQhD,4BAA0B,0BAA0B;AACjE,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,kBAAkB,KAAK,UAAU;AACzC,YAAI,YAAY,iBAAe,UAAU,IACrC,iBAAiB,UAAU,GAAG,MAAM;AAExC,iCAAyB,aAAa;AACtC,aAAK;AACL,aAAK,KAAK,mBAAmB;AAAA;AAAA,MAE/B,QAAQ,kBAAkB;AACxB,YAAI,YAAY,KAAK;AACrB,YAAI,QAAO;AAEX,YAAI,cAAc,QAAQ;AACxB,kBAAO;AAAA,mBACE,UAAU,SAAS,GAAG;AAC/B,kBAAO;AAAA,mBACE,UAAU,GAAG,KAAK,QAAQ,UAAU,GAAG,GAAG,OAAO,UAAU,GAAG,KAAK,OAAO,KAAK,cAAc,mBAAmB,GAAG;AAC5H,kBAAO;AAAA;AAGT,eAAO;AAAA;AAAA;AAAA;;;ACpDb,oCAAO;AAMP,gCAAO;AAEP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAQhD,8BAA4B,0BAA0B;AACnE,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,kBAAkB,KAAK,UAAU;AACzC,YAAI,YAAY,iBAAe,UAAU,IACrC,iBAAiB,UAAU,GAAG,MAAM;AAExC,iCAAyB,eAAe;AACxC,aAAK;AACL,aAAK,KAAK,mBAAmB;AAAA;AAAA,MAE/B,QAAQ,kBAAkB;AACxB,YAAI,YAAY,KAAK;AACrB,YAAI,QAAO;AAEX,YAAI,cAAc,QAAQ;AACxB,kBAAO;AAAA,mBACE,UAAU,SAAS,GAAG;AAC/B,kBAAO;AAAA,mBACE,UAAU,GAAG,KAAK,QAAQ,UAAU,GAAG,GAAG,OAAO,UAAU,GAAG,KAAK,OAAO,KAAK,cAAc,kBAAkB;AACxH,kBAAO;AAAA;AAGT,eAAO;AAAA;AAAA;AAAA;;;AFxDb,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAkBjM,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAC7B,MAAI,gBAAc,oBAAI;AAgBf,MAAI,qBAAkC,yBAAU,aAAa;AAClE,gBAAU,qBAAoB;AAE9B,QAAI,SAAS,eAAa;AAE1B,iCAA4B,aAAa;AACvC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAC1B,oBAAY,IAAI,yBAAuB,QAAQ;AAAA,QAC7C,eAAe;AAAA;AAEjB,aAAO;AAAA;AAUT,oBAAa,qBAAoB,CAAC;AAAA,MAChC,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,QAAQ,kCAAkC,SAAU,SAAS;AAChE,iBAAO,OAAO,oBAAoB;AAAA;AAEpC,aAAK,QAAQ,oBAAoB,SAAU,SAAS,YAAY;AAC9D,iBAAO,OAAO,mBAAmB,SAAS;AAAA;AAG5C,eAAK,kBAAgB,oBAAmB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMhF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,OAAO,cAAY,IAAI;AAC3B,aAAK,gBAAgB;AAErB,eAAK,kBAAgB,oBAAmB,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAMjF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,oBAAmB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAWhF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,QAAQ;AACnC,YAAI,OAAO,cAAY,IAAI;AAC3B,YAAI,WAAW,KAAK,IAAI;AAExB,YAAI,CAAC,KAAK,eAAe;AACvB,eAAK,gBAAgB;AAAA;AAGvB,YAAI,SAAS,qBAAqB,KAAK,IAAI,eAAe,UAAU,SAAS,mBAAmB,GAAG;AACjG;AAAA;AAGF,aAAK,IAAI,kBAAkB,YAAY,QAAQ,SAAS;AACxD,iBAAS,oBAAoB;AAAA;AAAA,OAQ9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,QAAQ;AACrC,YAAI,OAAO,cAAY,IAAI;AAC3B,YAAI,WAAW,KAAK,IAAI;AAExB,YAAI,CAAC,KAAK,eAAe;AACvB,eAAK,gBAAgB;AAAA;AAGvB,YAAI,SAAS,oBAAoB,KAAK,SAAS,SAAS,mBAAmB,GAAG;AAC5E;AAAA;AAGF,iBAAS,oBAAoB;AAC7B,aAAK,IAAI,kBAAkB,YAAY,QAAQ,SAAS;AAAA;AAAA,OASzD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,SAAS;AAC3C,gBAAQ,MAAM,KAAK;AAAA,UACjB,MAAM;AAAA,WACL,iBAAiB,OAAO,mBAAmB;AAAA;AAAA,OAW/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,SAAS,YAAY;AACtD,YAAI,OAAO,cAAY,IAAI;AAE3B,YAAI,KAAK,eAAe;AACtB,cAAI,aAAa,KAAK,IAAI,cAAc;AAExC,cAAI,aAAa,YAAY;AAC3B,mBAAO;AAAA;AAIT,cAAI,QAAQ,KAAK,SAAU,QAAQ;AACjC,mBAAO,SAAS;AAAA,cACd;AACF,mBAAO;AAAA;AAAA;AAAA;AAAA,QAIX,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AGtNF,oCAAO;;;ACfP,oCAAO;;;ACXP,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAG/Q,MAAI,oBAAoB;AACxB,MAAI,eAAc;AAClB,MAAI,iBAAiB;AACrB,MAAI,OAAO;AAMX,MAAI,UAAsB,2BAAY;AACpC,qBAAgB,aAAa;AAC3B,yBAAgB,MAAM;AAOtB,WAAK,MAAM;AAQX,WAAK,WAAW;AAOhB,WAAK,QAAQ;AAAA;AASf,oBAAa,SAAQ,CAAC;AAAA,MACpB,KAAK;AAAA,MACL,OAAO,kBAAkB,UAAS;AAChC,iBAAQ,YAAY,KAAK;AACzB,aAAK,QAAQ;AAAA;AAAA,OAMd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,KAAK,UAAU,mBAAmB;AACpC;AAAA;AAGF,aAAK,WAAW,KAAK,IAAI,aAAa,cAAc;AACpD,aAAK,QAAQ;AAAA;AAAA,OAMd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,KAAK,cAAc;AACrB,eAAK,SAAS,cAAc,YAAY,KAAK;AAAA;AAG/C,aAAK,WAAW;AAChB,aAAK,QAAQ;AAAA;AAAA,OAQd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,eAAO,KAAK,UAAU;AAAA;AAAA,OAQvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAO,KAAK,SAAS;AAAA;AAAA,OAStB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,MAAK,OAAM;AACrC,YAAI,UAAU,OAAM;AAClB,eAAK,SAAS,MAAM,MAAM,OAAM;AAAA;AAGlC,YAAI,UAAU,QAAO;AACnB,eAAK,SAAS,MAAM,OAAO,QAAO;AAAA;AAAA;AAAA,OASrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,eAAO;AAAA,UACL,KAAK,KAAK,SAAS,MAAM,MAAM,SAAS,KAAK,SAAS,MAAM,KAAK,MAAM;AAAA,UACvE,MAAM,KAAK,SAAS,MAAM,OAAO,SAAS,KAAK,SAAS,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA,OAU7E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,OAAO,QAAQ;AACrC,YAAI,UAAU,QAAQ;AACpB,eAAK,SAAS,MAAM,QAAQ,QAAQ;AAAA;AAGtC,YAAI,UAAU,SAAS;AACrB,eAAK,SAAS,MAAM,SAAS,SAAS;AAAA;AAAA;AAAA,OASzC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAO;AAAA,UACL,OAAO,KAAK,SAAS,MAAM,QAAQ,SAAS,KAAK,SAAS,MAAM,OAAO,MAAM;AAAA,UAC7E,QAAQ,KAAK,SAAS,MAAM,SAAS,SAAS,KAAK,SAAS,MAAM,QAAQ,MAAM;AAAA;AAAA;AAAA,OAUnF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,MAAK,OAAM;AACnC,YAAI,UAAU,OAAM;AAClB,eAAK,SAAS,MAAM,YAAY,OAAM;AAAA;AAGxC,YAAI,UAAU,QAAO;AACnB,eAAK,SAAS,MAAM,aAAa,QAAO;AAAA;AAAA;AAAA,OAS3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO;AAAA,UACL,KAAK,KAAK,SAAS,MAAM,YAAY,SAAS,KAAK,SAAS,MAAM,WAAW,MAAM;AAAA,UACnF,MAAM,KAAK,SAAS,MAAM,aAAa,SAAS,KAAK,SAAS,MAAM,YAAY,MAAM;AAAA;AAAA;AAAA;AAK5F,WAAO;AAAA;AAGT,MAAO,gBAAQ;;;AD9Mf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAIxM,MAAI,gBAAgB;AAMpB,MAAI,cAA2B,yBAAU,SAAS;AAChD,gBAAU,cAAa;AAEvB,QAAI,SAAS,eAAa;AAE1B,4BAAuB;AACrB,yBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,oBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAIA,iBAAiB;AACf,eAAK,kBAAgB,aAAY,YAAY,SAAS,MAAM,KAAK;AAEjE,iBAAS,KAAK,UAAU;AAAA;AAAA;AAI5B,WAAO;AAAA,IACP;AAEF,MAAO,oBAAQ;;;AE/Df,oCAAO;AAXP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAIxM,MAAI,iBAAgB;AAMpB,MAAI,cAA2B,yBAAU,SAAS;AAChD,gBAAU,cAAa;AAEvB,QAAI,SAAS,eAAa;AAE1B,4BAAuB;AACrB,yBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,oBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAIA,iBAAiB;AACf,eAAK,kBAAgB,aAAY,YAAY,SAAS,MAAM,KAAK;AAEjE,iBAAS,KAAK,UAAU;AAAA;AAAA;AAI5B,WAAO;AAAA,IACP;AAEF,MAAO,oBAAQ;;;AH1Ef,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAyBxM,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AACvB,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAC7B,MAAI,gBAAc,oBAAI;AACtB,MAAI,aAAa;AACjB,MAAI,cAAc;AAClB,MAAI,gBAAgB;AACpB,MAAI,sBAAsB;AA2BnB,MAAI,mBAAgC,yBAAU,aAAa;AAChE,gBAAU,mBAAkB;AAE5B,QAAI,SAAS,eAAa;AAE1B,+BAA0B,aAAa;AACrC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAK1B,oBAAY,IAAI,yBAAuB,QAAQ;AAAA,QAC7C,eAAe;AAAA,QACf,WAAW;AAAA,QACX,cAAc;AAAA,QACd,SAAS;AAAA,QACT,QAAQ;AAAA,UACN,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,IAAI;AAAA,UACJ,KAAK;AAAA;AAAA,QAEP,iBAAiB;AAAA;AASnB,YAAM,eAAe,IAAI,qBAAa,yBAAuB;AAQ7D,YAAM,YAAY,IAAI,kBAAY;AAQlC,YAAM,YAAY,IAAI,kBAAY;AAClC,aAAO;AAAA;AAUT,oBAAa,mBAAkB,CAAC;AAAA,MAC9B,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO,wBAAwB,MAAM,QAAQ;AAAA;AAEtD,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO,wBAAwB,MAAM,QAAQ;AAAA;AAEtD,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO,gBAAgB,MAAM,QAAQ;AAAA;AAE9C,aAAK;AACL,aAAK;AAEL,iBAAS,KAAK,IAAI,aAAa;AAE/B,eAAK,kBAAgB,kBAAiB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM9E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,kBAAiB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM9E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,oBAAY,KAAK,IAAI,aAAa;AAClC,aAAK;AACL,aAAK,UAAU;AACf,aAAK,UAAU;AAEf,eAAK,kBAAgB,kBAAiB,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAa/E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,QAAQ,YAAY;AAC7C,eAAO,KAAK,YAAY,CAAC,SAAS;AAAA;AAAA,OAanC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,SAAS,YAAY;AAC/C,YAAI,OAAO,cAAY,IAAI;AAC3B,YAAI,YAAY,KAAK;AACrB,YAAI,eAAe,KAAK,eAAe,SAAS;AAChD,YAAI,iBAAiB,KAAK,IAAI,SAAS,oBAAoB,SAAS,YAAY,WAAW;AAC3F,aAAK,kBAAkB;AAEvB,YAAI,mBAAmB,OAAO;AAC5B;AAAA;AAGF,YAAI,cAAc;AAChB,eAAK,IAAI,kBAAkB,YAAY,SAAS;AAAA;AAGlD,YAAI,gBAAgB,gBAAgB,KAAK,qBAAqB,SAAS;AACvE,aAAK,IAAI,SAAS,mBAAmB,SAAS,YAAY,WAAW,cAAc;AACnF,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,QAAQ,WAAW;AAC5C,eAAO,KAAK,YAAY,CAAC,SAAS;AAAA;AAAA,OAanC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,SAAS,WAAW;AAC9C,YAAI,aAAa,KAAK,gBAAgB,SAAS;AAC/C,YAAI,OAAO,cAAY,IAAI;AAC3B,aAAK,kBAAkB;AACvB,eAAO,KAAK,YAAY,SAAS;AAAA;AAAA,OAYlC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,cAAc,YAAY;AACvD,YAAI,SAAS,KAAK,IAAI,kBAAkB;AAExC,YAAI,0BAA0B,aAAa,SAAS,aAAa;AACjE,YAAI,yBAAyB,aAAa;AAC1C,YAAI,yBAAyB,aAAa,KAAK,SAAU,aAAa;AACpE,iBAAO,cAAc;AAAA;AAEvB,YAAI,0BAA0B,aAAa,KAAK,SAAU,aAAa;AACrE,iBAAO,eAAe;AAAA;AAGxB,YAAI,2BAA2B,0BAA0B,0BAA0B,yBAAyB;AAC1G,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,cAAc,YAAY;AAC7D,eAAO,aAAa,KAAK,SAAU,QAAQ,kBAAkB;AAC3D,iBAAO,SAAS,qBAAqB;AAAA;AAAA;AAAA,OAYxC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,cAAc,WAAW;AACvD,YAAI,oCAAoC,YAAY,cAAc,SAAU,iBAAiB,oBAAoB;AAC/G,cAAI,qBAAqB,WAAW;AAClC,+BAAmB;AAAA;AAGrB,iBAAO;AAAA,WACN;AACH,eAAO,YAAY;AAAA;AAAA,OAWpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,YAAY,UAAU;AACpD,YAAI,eAAe,KAAK,IAAI;AAC5B,YAAI,eAAe;AAEnB,iBAAS,oBAAoB,YAAY,qBAAqB,UAAU,qBAAqB,GAAG;AAG9F,cAAI,kBAAkB,aAAa,6BAA6B;AAEhE,cAAI,oBAAoB,GAAG;AACzB,4BAAgB,KAAK,IAAI,KAAK,GAAG,WAAW,uBAAuB;AAAA,qBAC1D,oBAAoB,MAAM;AACnC,4BAAgB,KAAK,IAAI,KAAK,GAAG,QAAQ,wBAAwB,oBAAoB;AAAA;AAAA;AAIzF,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,iBAAiB,KAAK,IAAI,cAAc;AAE5C,YAAI,MAAM,QAAQ,iBAAiB;AACjC,eAAK,YAAY,gBAAgB;AAAA,mBACxB,mBAAmB,QAAQ;AACpC,cAAI,kBAAkB,KAAK;AAE3B,cAAI,gBAAgB,QAAQ;AAC1B,iBAAK,YAAY,iBAAiB;AAAA;AAAA;AAAA;AAAA,OAYvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,QAAQ;AACzC,eAAO,SAAS,KAAK,IAAI,cAAc;AAAA;AAAA,OASxC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,aAAK,IAAI,SAAS,uBAAuB,oBAAoB,KAAK,IAAI,kBAAkB;AAAA;AAAA,OAUzF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,YAAI,cAAc;AAClB,aAAK,IAAI,SAAS,uBAAuB,oBAAoB;AAC7D,eAAO,YAAY,QAAQ,YAAY,QAAQ;AAAA;AAAA,OAWhD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,QAAO,MAAK;AACjD,YAAI,kBAAkB;AACtB,kBAAU,QAAO,MAAK,SAAU,GAAG;AACjC,0BAAgB,KAAK;AAAA;AAEvB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,OAAO,cAAY,IAAI;AAC3B,YAAI,eAAe,KAAK,IAAI,KAAK,GAAG,QAAQ;AAC5C,YAAI,cAAc,KAAK,IAAI,KAAK,GAAG,QAAQ;AAC3C,YAAI,UAAU,KAAK,IAAI,KAAK,GAAG;AAC/B,YAAI,oBAAoB,KAAK,IAAI,KAAK,GAAG,WAAW;AACpD,YAAI,aAAa,OAAO,kBAAkB,YAAY,WAAW,kBAAkB,UAAU,kBAAkB;AAC/G,YAAI,eAAe,KAAK,IAAI,KAAK,MAAM,aAAa,KAAK,gBAAgB,GAAG,KAAK,SAAS;AAC1F,YAAI,kBAAkB,KAAK,OAAO,aAAc,MAAK,oBAAqB,mBAAkB,YAAY,SAAS,aAAa;AAE9H,YAAI,aAAa,QAAQ,MAAM;AAC/B,YAAI,kBAAkB,QAAQ,MAAM;AACpC,YAAI,0BAA0B,KAAK,UAAU,YAAY;AACzD,YAAI,qBAAqB,KAAK,UAAU,UAAU;AAClD,YAAI,iBAAiB;AAErB,YAAI,KAAK,oBAAoB,QAAQ,OAAO,cAAc,aAAa,KAAK,OAAO,YAAY;AAC7F,cAAI,KAAK,SAAS,KAAK,WAAW;AAChC,iBAAK,UAAU;AAAA;AAAA;AAInB,YAAI,KAAK,eAAe;AACtB,2BAAiB,KAAK,IAAI,KAAK,GAAG,WAAW,YAAY,MAAM,QAAQ,gBAAgB,IAAI;AAAA;AAG7F,YAAI,KAAK,mBAAmB,KAAK,SAAS;AACxC,0BAAgB;AAAA;AAGlB,wBAAgB;AAEhB,YAAI,KAAK,SAAS,GAAG;AAEnB,cAAI,KAAK,eAAe,GAAG;AACzB,iBAAK,OAAO,MAAM;AAAA,iBACb;AACL,iBAAK,OAAO,MAAM,eAAe,IAAI,eAAe,IAAI;AAAA;AAAA,mBAEjD,KAAK,OAAO,GAAG,cAAc,IAAI,gBAAgB,iBAAiB;AAC3E,cAAI,eAAe,KAAK,UAAU,KAAK,YAAY,KAAK,YAAY,IAAI,KAAK;AAE7E,eAAK,OAAO,MAAM,eAAe;AAEjC,0BAAgB,KAAK,OAAO,GAAG;AAE/B,cAAI,KAAK,OAAO,MAAM,eAAe,cAAc,KAAK,WAAW;AACjE,iBAAK,IAAI,iBAAiB,QAAQ,cAAc,GAAG,QAAQ;AAAA;AAAA,eAExD;AAEL,eAAK,OAAO,MAAM,KAAK;AAEvB,cAAI,KAAK,OAAO,OAAO,gBAAgB,KAAK,OAAO,OAAO,KAAK,gBAAgB,eAAe,GAAG;AAC/F,iBAAK,IAAI,iBAAiB,QAAQ,eAAe;AAAA;AAAA;AAIrD,YAAI,KAAK,OAAO,OAAO,gBAAgB,KAAK,OAAO,OAAO,KAAK,gBAAgB,eAAe,GAAG;AAC/F,eAAK,IAAI,iBAAiB,QAAQ,eAAe;AAAA;AAGnD,YAAI,gBAAgB;AACpB,YAAI,gBAAgB;AAEpB,YAAI,kBAAkB,qBAAqB,2BAA2B,YAAY;AAEhF,0BAAgB,aAAa,qBAAqB;AAAA,mBACzC,kBAAkB,0BAA0B,kBAAkB,gBAAgB;AAEvF,0BAAgB,kBAAkB,iBAAiB,KAAK,IAAI;AAAA;AAG9D,YAAI,gBAAgB,aAAa,GAAG;AAElC,0BAAgB,aAAa;AAAA,mBACpB,kBAAkB,GAAG;AAE9B,0BAAgB;AAAA,mBACP,kBAAkB,YAAY,UAAU,KAAK,SAAS,KAAK,cAAc;AAClF,2BAAiB,KAAK,qBAAqB,kBAAkB,UAAU,KAAK,oBAAoB;AAAA;AAGlG,aAAK,UAAU,YAAY,MAAM;AACjC,aAAK,UAAU,YAAY,MAAM;AAAA;AAAA,OAQlC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA0B;AAC/B,YAAI,SAAS;AAEb,YAAI,kBAAkB,KAAK,IAAI,aAAa;AAC5C,aAAK,aAAa,iBAAiB,iBAAiB,aAAa,SAAU,QAAO;AAChF,iBAAO,OAAO,YAAY;AAAA;AAE5B,aAAK,aAAa,iBAAiB,iBAAiB,WAAW,WAAY;AACzE,iBAAO,OAAO;AAAA;AAAA;AAAA,OASjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,aAAK,aAAa;AAAA;AAAA,OAanB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAO,QAAQ,IAAI,YAAY;AACrE,YAAI,UAAU,KAAK,IAAI,KAAK,GAAG;AAC/B,YAAI,oBAAoB,KAAK,IAAI,UAAU;AAC3C,YAAI,YAAY,KAAK,IAAI;AACzB,YAAI,OAAO,cAAY,IAAI;AAE3B,YAAI,mBAAmB,SAAS,OAAM,QAAQ;AAE9C,YAAI,CAAC,aAAa,CAAC,qBAAqB,KAAK,WAAW,OAAM,WAAW,KAAK,kBAAkB;AAC9F,eAAK,UAAU;AACf,eAAK,cAAc,SAAS;AAC5B,sBAAY,KAAK,IAAI,aAAa,CAAC,eAAe;AAClD;AAAA;AAGF,YAAI,sBAAsB,KAAK,UAAU,aAAa,CAAC,KAAK,UAAU;AACtE,YAAI,sBAAsB,KAAK,UAAU,aAAa,CAAC,KAAK,UAAU;AAEtE,YAAI,uBAAuB,qBAAqB;AAC9C,eAAK,UAAU,SAAS,QAAQ;AAChC,eAAK,UAAU,SAAS,QAAQ;AAAA;AAGlC,YAAI,QAAO,UAAU,MACjB,KAAK,UAAU;AACnB,YAAI,SAAQ,KAAK,IAAI,MAAK,KAAK,GAAG;AAClC,YAAI,OAAM,KAAK,IAAI,MAAK,KAAK,GAAG;AAEhC,YAAI,OAAO,MAAM,KAAK,OAAO,OAAO,UAAS,OAAO,OAAO,MAAK;AAC9D,qBAAW,SAAS;AACpB,eAAK,UAAU;AACf,eAAK,OAAO,aAAa,OAAM;AAC/B,eAAK,SAAS,OAAO;AACrB,eAAK,OAAO,KAAK;AACjB,eAAK,OAAO,MAAM,OAAO;AACzB,eAAK,gBAAgB,KAAK,uBAAuB,QAAO;AACxD,eAAK,gBAAgB,CAAC,CAAC,KAAK,IAAI,cAAc;AAC9C,eAAK,YAAY,KAAK,IAAI;AAC1B,eAAK,eAAe,KAAK,IAAI,cAAc;AAC3C,eAAK,oBAAoB,OAAO,KAAK,IAAI,aAAa;AACtD,cAAI,mBAAmB,KAAK,gBAAgB,KAAK;AACjD,cAAI,SAAS,QAAQ,OAAO,YAAY,QAAQ,sBAAsB,KAAK;AAC3E,cAAI,eAAe,OAAO,MAAM,KAAK;AACrC,cAAI,oBAAoB,KAAK,IAAI,KAAK,GAAG,WAAW;AACpD,cAAI,kBAAkB,kBAAkB,UAAU,kBAAkB,UAAU,KAAK,oBAAoB;AACvG,cAAI,cAAc,OAAM,UAAW,gBAAe,kBAAkB;AACpE,cAAI,aAAa,KAAK,IAAI,KAAK,gBAAgB,QAAO,OAAO,MAAM,KAAK;AACxE,eAAK,UAAU,YAAY,QAAQ,KAAK,gBAAgB,kBAAkB,SAAQ,KAAK;AACvF,eAAK,UAAU,QAAQ,KAAK,gBAAgB,QAAO,OAAM,QAAQ,MAAM,eAAe;AACtF,eAAK,UAAU,UAAU,MAAM,aAAa;AAC5C,mBAAS,KAAK,IAAI,aAAa;AAAA,eAC1B;AACL,sBAAY,KAAK,IAAI,aAAa;AAClC,eAAK,UAAU;AACf,eAAK,cAAc,SAAS;AAAA;AAAA;AAAA,OAU/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,YAAI,OAAO,cAAY,IAAI;AAE3B,YAAI,CAAC,KAAK,SAAS;AACjB;AAAA;AAIF,YAAI,OAAM,WAAW,KAAK,UAAU,SAAS;AAC3C,cAAI,QAAQ,KAAK,UAAU,UAAU;AACrC,eAAK,UAAU,QAAQ;AACvB,qBAAW,WAAY;AACrB,iBAAK,UAAU,YAAY;AAAA;AAAA;AAI/B,aAAK,OAAO,aAAa,OAAM;AAC/B,aAAK;AAAA;AAAA,OAaN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAO,QAAQ,IAAI,YAAY;AACrE,YAAI,gBAAgB,KAAK,IAAI;AAC7B,YAAI,OAAO,cAAY,IAAI;AAE3B,YAAI,CAAC,iBAAiB,CAAC,KAAK,SAAS;AACnC;AAAA;AAGF,YAAI,KAAK,cAAc,QAAQ,OAAO,OAAO,IAAI;AAC/C,sBAAY,KAAK,IAAI,aAAa;AAAA,eAC7B;AACL,mBAAS,KAAK,IAAI,aAAa;AAAA;AAGjC,mBAAW,MAAM;AACjB,mBAAW,SAAS;AACpB,mBAAW,OAAO;AAClB,aAAK,SAAS,OAAO;AACrB,aAAK,OAAO,KAAK;AAAA;AAAA,OAQlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAqB;AAC1B,YAAI,OAAO,cAAY,IAAI;AAC3B,YAAI,SAAS,KAAK,OAAO;AACzB,YAAI,aAAa,KAAK,cAAc;AACpC,aAAK,SAAS;AACd,aAAK,UAAU;AACf,aAAK,iBAAiB;AACtB,oBAAY,KAAK,IAAI,aAAa,CAAC,eAAe,aAAa;AAE/D,YAAI,KAAK,IAAI,UAAU,4BAA4B;AACjD,mBAAS,KAAK,IAAI,aAAa;AAAA;AAGjC,YAAI,aAAa,KAAK,WAAW,QAAQ;AACvC;AAAA;AAGF,YAAI,yBAAyB,KAAK,cAAc;AAChD,YAAI,2BAA2B,KAAK,IAAI,iBAAiB;AACzD,YAAI,gBAAgB,KAAK,YAAY,KAAK,eAAe;AACzD,aAAK,cAAc,SAAS;AAE5B,YAAI,kBAAkB,MAAM;AAC1B,eAAK;AACL,eAAK,IAAI;AACT,eAAK,IAAI,KAAK,mBAAmB;AACjC,cAAI,iBAAiB,KAAK,IAAI,eAAe;AAC7C,cAAI,eAAe,iBAAiB,aAAa;AACjD,eAAK,IAAI,cAAc,gBAAgB;AAAA;AAAA;AAAA,OAS1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,YAAI,UAAU,KAAK,IAAI,KAAK,GAAG;AAC/B,YAAI,eAAe,QAAQ,sBAAsB,KAAK;AACtD,YAAI,YAAY,QAAQ,OAAO;AAC/B,YAAI,SAAS,eAAe;AAC5B,aAAK,UAAU,YAAY;AAC3B,aAAK,UAAU,QAAQ,MAAM,QAAQ,MAAM,eAAe;AAAA;AAAA,OAQ3D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK,UAAU;AACf,aAAK,UAAU;AAAA;AAAA,OAQhB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,UAAU;AACf,aAAK,UAAU;AAEf,eAAK,kBAAgB,kBAAiB,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAExE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AIjyBF,oCAAO;AA1BP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AA0BjM,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAC7B,MAAI,uBAAuB;AAC3B,MAAI,gBAAc,oBAAI;AAcf,MAAI,qBAAkC,yBAAU,aAAa;AAClE,gBAAU,qBAAoB;AAE9B,QAAI,SAAS,eAAa;AAE1B,iCAA4B,aAAa;AACvC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAC1B,UAAI,eAAe,MAAM,IAAI;AAC7B,YAAM,YAAY;AAClB,YAAM,aAAa;AACnB,YAAM,eAAe;AACrB,YAAM,eAAe;AACrB,YAAM,UAAU;AAChB,YAAM,SAAS;AACf,YAAM,aAAa;AACnB,YAAM,cAAc;AACpB,YAAM,SAAS,aAAa,cAAc;AAC1C,YAAM,QAAQ,aAAa,cAAc;AACzC,YAAM,eAAe,IAAI,qBAAa,yBAAuB;AAC7D,YAAM,UAAU;AAChB,YAAM,WAAW;AACjB,YAAM,oBAAoB;AAQ1B,YAAM,kBAAkB;AAKxB,oBAAY,IAAI,yBAAuB,QAAQ;AAAA,QAC7C,QAAQ;AAAA;AAEV,eAAS,MAAM,QAAQ;AACvB,eAAS,MAAM,OAAO;AACtB,aAAO;AAAA;AAUT,oBAAa,qBAAoB,CAAC;AAAA,MAChC,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,IAAI,cAAc;AAAA;AAAA,OAM/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,kBAAkB,IAAI;AAC3B,aAAK,gBAAgB,aAAa,QAAQ,WAAY;AACpD,iBAAO,OAAO;AAAA;AAEhB,aAAK,IAAI,kBAAkB,YAAY,KAAK,YAAY,KAAK;AAC7D,aAAK,QAAQ,kBAAkB,SAAU,OAAO,KAAK;AACnD,iBAAO,OAAO,iBAAiB,OAAO;AAAA;AAExC,aAAK,QAAQ,+BAA+B,SAAU,gBAAgB,QAAQ;AAC5E,iBAAO,OAAO,8BAA8B,gBAAgB;AAAA;AAE9D,aAAK,QAAQ,sBAAsB,SAAU,SAAS,QAAQ,eAAe;AAC3E,iBAAO,OAAO,qBAAqB,SAAS,QAAQ;AAAA;AAEtD,aAAK;AAEL,eAAK,kBAAgB,oBAAmB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMhF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,oBAAmB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMhF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,OAAO,cAAY,IAAI;AAC3B,aAAK,SAAS,KAAK,gBAAgB;AACnC,aAAK,IAAI,kBAAkB,cAAc,KAAK;AAE9C,eAAK,kBAAgB,oBAAmB,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAQjF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,aAAK,IAAI,SAAS,uBAAuB,sBAAsB,KAAK,gBAAgB;AAAA;AAAA,OASrF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,YAAI,cAAc;AAClB,aAAK,IAAI,SAAS,uBAAuB,sBAAsB;AAC/D,eAAO,YAAY;AAAA;AAAA,OAUpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ,OAAO;AAC3C,YAAI,WAAW,KAAK,IAAI,OAAO;AAC/B,YAAI,iBAAiB,KAAK,IAAI,iBAAiB;AAC/C,aAAK,gBAAgB,gBAAgB,gBAAgB;AACrD,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAQ;AACtC,YAAI,iBAAiB,KAAK,IAAI,iBAAiB;AAC/C,aAAK,gBAAgB,gBAAgB,gBAAgB;AAAA;AAAA,OAQtD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,SAAS;AAEb,YAAI,OAAO,cAAY,IAAI;AAC3B,YAAI,iBAAiB,KAAK,IAAI,cAAc;AAC5C,YAAI,2BAA2B,KAAK;AAEpC,YAAI,OAAO,6BAA6B,aAAa;AACnD,eAAK,IAAI,eAAe,WAAY;AAClC,qCAAyB,QAAQ,SAAU,OAAO,eAAe;AAC/D,qBAAO,gBAAgB,gBAAgB,eAAe;AAAA;AAAA,aAEvD;AAAA,mBACM,MAAM,QAAQ,iBAAiB;AACxC,eAAK,IAAI,eAAe,WAAY;AAClC,2BAAe,QAAQ,SAAU,OAAO,eAAe;AACrD,qBAAO,gBAAgB,gBAAgB,eAAe;AAAA;AAAA,aAEvD;AACH,eAAK,SAAS;AAAA,mBACL,mBAAmB,QAAQ,MAAM,QAAQ,KAAK,SAAS;AAChE,eAAK,IAAI,eAAe,WAAY;AAClC,iBAAK,OAAO,QAAQ,SAAU,OAAO,eAAe;AAClD,qBAAO,gBAAgB,gBAAgB,eAAe;AAAA;AAAA,aAEvD;AAAA;AAAA;AAAA,OAUN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,IAAI;AACtC,YAAI,SAAS;AAEb,YAAI,CAAC,GAAG,YAAY;AAClB;AAAA;AAGF,aAAK,YAAY;AACjB,YAAI,KAAK,KAAK,IAAI,KAAK;AACvB,YAAI,aAAa,GAAG,QAAQ,UAAU,KAAK;AAC3C,YAAI,MAAM,WAAW;AAErB,YAAI,MAAM,GAAG;AACX;AAAA;AAGF,YAAI,eAAe,YAAY,KAAK;AACpC,YAAI,MAAM,KAAK,UAAU;AAGzB,YAAI,cAAc,MAAM,GAAG,WAAW;AACtC,YAAI;AAEJ,YAAI,aAAa;AACf,mCAAyB,GAAG,WAAW,qBAAqB,wBAAwB,KAAK,WAAW,WAAW,KAAK,WAAW;AAAA;AAKjI,YAAI,CAAC,wBAAwB;AAC3B,mCAAyB,GAAG,WAAW,WAAW,wBAAwB,KAAK,WAAW,WAAW,KAAK,WAAW;AAAA;AAGvH,aAAK,aAAa,KAAK,IAAI,kBAAkB,6BAA6B;AAC1E,aAAK,eAAe;AACpB,YAAI,uBAAuB,KAAK,IAAI,UAAU,wBAAwB,KAAK,IAAI,UAAU;AAEzF,YAAI,KAAK,IAAI,UAAU,gBAAgB,sBAAsB;AAC3D,cAAI,kBAAkB,KAAK,IAAI;AAC/B,oBAAU,iBAAiB,SAAU,gBAAgB;AACnD,gBAAI,aAAa,eAAe,mBAAmB;AACnD,gBAAI,WAAW,eAAe,uBAAuB;AAErD,sBAAU,YAAY,UAAU,SAAU,aAAa;AACrD,kBAAI,CAAC,OAAO,aAAa,SAAS,cAAc;AAC9C,uBAAO,aAAa,KAAK;AAAA;AAAA;AAAA;AAAA;AAOjC,YAAI,CAAC,KAAK,aAAa,SAAS,KAAK,aAAa;AAChD,eAAK,eAAe,CAAC,KAAK;AAAA;AAG5B,aAAK,cAAc,uBAAuB,OAAO;AACjD,aAAK,aAAa,SAAS,IAAI,OAAO;AACtC,aAAK,OAAO,MAAM,MAAM,GAAG,OAAO,uBAAuB,KAAK;AAC9D,aAAK,OAAO,MAAM,OAAO,GAAG,OAAO,KAAK,cAAc,KAAK,YAAY;AACvE,aAAK,OAAO,MAAM,SAAS,GAAG,OAAO,cAAc;AACnD,aAAK,IAAI,YAAY,YAAY,KAAK;AAAA;AAAA,OAQvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,aAAK,OAAO,MAAM,OAAO,GAAG,OAAO,KAAK,cAAc,KAAK,cAAc;AAAA;AAAA,OAQ1E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,eAAe,SAAS,YAAY,KAAK,SAAS;AACtD,YAAI,uBAAuB,SAAS,KAAK,OAAO,MAAM,KAAK,MAAM;AACjE,YAAI,8BAA8B,SAAS,KAAK,IAAI,KAAK,4BAA4B,IAAI;AACzF,iBAAS,KAAK,QAAQ;AACtB,iBAAS,KAAK,OAAO;AACrB,aAAK,MAAM,MAAM,MAAM,GAAG,OAAO,sBAAsB;AACvD,aAAK,MAAM,MAAM,OAAO,KAAK,OAAO,MAAM;AAC1C,aAAK,MAAM,MAAM,SAAS,GAAG,OAAO,8BAA8B,cAAc;AAChF,aAAK,IAAI,YAAY,YAAY,KAAK;AAAA;AAAA,OAQvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,aAAK,MAAM,MAAM,OAAO,KAAK,OAAO,MAAM;AAAA;AAAA,OAQ3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,oBAAY,KAAK,QAAQ;AACzB,oBAAY,KAAK,OAAO;AAAA;AAAA,OAUzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,SAAS;AAC3C,eAAO,CAAC,CAAC,QAAQ,SAAS,CAAC,UAAU,KAAK,IAAI;AAAA;AAAA,OAU/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,SAAS;AAC1C,YAAI,QAAQ,YAAY,SAAS;AAC/B,cAAI,QAAQ,YAAY,MAAM;AAC5B,mBAAO;AAAA;AAGT,iBAAO,KAAK,mBAAmB,QAAQ;AAAA;AAGzC,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AAGjC,YAAI,WAAW,OAAM,SAAS;AAC5B;AAAA;AAGF,YAAI,KAAK,oBAAoB,OAAM,SAAS;AAC1C,cAAI,KAAK,KAAK,mBAAmB,OAAM;AAEvC,cAAI,CAAC,IAAI;AACP;AAAA;AAGF,cAAI,UAAU,GAAG,aAAa;AAE9B,cAAI,MAAO,aAAY,QAAQ,YAAY,MAAM;AAC/C,gBAAI,CAAC,KAAK,SAAS;AACjB,mBAAK,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,OAahC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,SAAS;AAEb,YAAI,SAAS,mBAAkB;AAC7B,iBAAO,IAAI,kBAAkB;AAE7B,iBAAO,IAAI,KAAK;AAGhB,iBAAO,IAAI,KAAK,mBAAmB;AAAA;AAGrC,YAAI,SAAS,iBAAgB,QAAQ,aAAa;AAChD,cAAI,cAAc,OAAO,IAAI,SAAS,sBAAsB,OAAO,SAAS,QAAQ;AAEpF,cAAI,gBAAgB,QAAQ;AAC1B,mBAAO,UAAU;AAAA;AAGnB,cAAI,OAAO,IAAI,cAAc,aAAa,OAAO;AAC/C,mBAAO,gBAAgB;AAAA,iBAClB;AACL,mBAAO,cAAc,QAAQ,OAAO;AAAA;AAItC,iBAAO;AAEP,iBAAO,IAAI,SAAS,qBAAqB,OAAO,SAAS,QAAQ;AAEjE,cAAI,aAAa;AACf;AAAA;AAAA;AAIJ,YAAI,KAAK,YAAY,GAAG;AACtB,cAAI,qBAAqB,KAAK,aAAa;AAE3C,cAAI,qBAAqB,GAAG;AAC1B,sBAAU,KAAK,cAAc,SAAU,aAAa;AAClD,qBAAO;AAAA;AAET;AAAA,iBACK;AACL,sBAAU,KAAK,cAAc,SAAU,aAAa;AAClD,qBAAO,aAAa;AAAA;AAAA;AAAA;AAK1B,aAAK,WAAW;AAChB,aAAK,oBAAoB;AAAA;AAAA,OAS1B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,YAAI,SAAS;AAEb,YAAI,SAAS,OAAM,QAAQ,wBAAwB;AACjD,eAAK,oBAAoB,KAAK;AAC9B,eAAK;AACL,eAAK,UAAU;AAEf,cAAI,KAAK,sBAAsB,MAAM;AACnC,iBAAK,oBAAoB,WAAW,WAAY;AAC9C,qBAAO,OAAO;AAAA,eACb;AAEH,iBAAK,IAAI,iBAAiB,KAAK;AAAA;AAGjC,eAAK,YAAY;AACjB,eAAK,SAAS,OAAM;AACpB,eAAK,UAAU,KAAK;AAAA;AAAA;AAAA,OAUvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB,eAAK,eAAe,KAAK,aAAc,QAAM,QAAQ,KAAK;AAC1D,oBAAU,KAAK,cAAc,SAAU,aAAa;AAClD,mBAAO,UAAU,OAAO,cAAc,aAAa,OAAO;AAAA;AAE5D,eAAK;AACL,eAAK;AAAA;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAqB;AAC1B,YAAI,SAAS;AAEb,YAAI,SAAS,mBAAkB;AAC7B,iBAAO,IAAI,kBAAkB;AAE7B,iBAAO,IAAI,KAAK;AAGhB,iBAAO,IAAI,KAAK,mBAAmB;AAAA;AAGrC,YAAI,SAAS,iBAAgB,QAAQ,aAAa;AAChD,iBAAO,IAAI,SAAS,sBAAsB,OAAO,SAAS,QAAQ;AAElE,cAAI,aAAa;AACf;AAAA;AAGF,iBAAO;AAEP,iBAAO,IAAI,SAAS,qBAAqB,OAAO,SAAS,QAAQ;AAAA;AAGnE,YAAI,KAAK,SAAS;AAChB,eAAK;AACL,eAAK,UAAU;AAEf,cAAI,KAAK,YAAY,KAAK,YAAY;AACpC,gBAAI,qBAAqB,KAAK,aAAa;AAE3C,gBAAI,qBAAqB,GAAG;AAC1B,wBAAU,KAAK,cAAc,SAAU,aAAa;AAClD,uBAAO;AAAA;AAET;AAAA,mBACK;AACL,wBAAU,KAAK,cAAc,SAAU,aAAa;AAClD,uBAAO,aAAa;AAAA;AAAA;AAAA;AAK1B,eAAK,oBAAoB,KAAK;AAAA;AAAA;AAAA,OASjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,SAAS;AAEb,YAAI,YAAY,KAAK,KACjB,aAAa,UAAU,YACvB,cAAc,UAAU;AAC5B,aAAK,aAAa,iBAAiB,aAAa,aAAa,SAAU,GAAG;AACxE,iBAAO,OAAO,YAAY;AAAA;AAE5B,aAAK,aAAa,iBAAiB,aAAa,aAAa,SAAU,GAAG;AACxE,iBAAO,OAAO,YAAY;AAAA;AAE5B,aAAK,aAAa,iBAAiB,YAAY,aAAa,SAAU,GAAG;AACvE,iBAAO,OAAO,YAAY;AAAA;AAE5B,aAAK,aAAa,iBAAiB,YAAY,WAAW,WAAY;AACpE,iBAAO,OAAO;AAAA;AAAA;AAAA,OAYjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,OAAO,QAAQ;AAC9C,YAAI,WAAW;AAEf,YAAI,KAAK,SAAS;AAChB,cAAI,iBAAiB,KAAK,IAAI,iBAAiB;AAC/C,cAAI,cAAc,KAAK,gBAAgB,gBAAgB;AAEvD,cAAI,KAAK,IAAI,cAAc,iBAAe,aAAa;AACrD,uBAAW;AAAA;AAAA;AAIf,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uCAAuC,gBAAgB,QAAQ;AACpE,YAAI,QAAQ,KAAK,gBAAgB,gBAAgB;AAEjD,YAAI,UAAU,MAAM;AAClB,kBAAQ;AAAA;AAGV,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AAErC,aAAK,IAAI,KAAK,GAAG,WAAW;AAAA;AAAA,OAM7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAK,kBAAgB,oBAAmB,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAE1E,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;ACxsBF,oCAAO;;;ACfP,oCAAO;;;ACXP,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,MAAI,qBAAoB;AACxB,MAAI,eAAc;AAClB,MAAI,kBAAiB;AACrB,MAAI,QAAO;AAKX,MAAI,UAAsB,2BAAY;AACpC,qBAAgB,aAAa;AAC3B,yBAAgB,MAAM;AAOtB,WAAK,MAAM;AAQX,WAAK,WAAW;AAOhB,WAAK,QAAQ;AAAA;AASf,oBAAa,SAAQ,CAAC;AAAA,MACpB,KAAK;AAAA,MACL,OAAO,kBAAkB,UAAS;AAChC,iBAAQ,YAAY,KAAK;AACzB,aAAK,QAAQ;AAAA;AAAA,OAMd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,KAAK,UAAU,oBAAmB;AACpC;AAAA;AAGF,aAAK,WAAW,KAAK,IAAI,aAAa,cAAc;AACpD,aAAK,QAAQ;AAAA;AAAA,OAMd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,KAAK,cAAc;AACrB,eAAK,SAAS,cAAc,YAAY,KAAK;AAAA;AAG/C,aAAK,WAAW;AAChB,aAAK,QAAQ;AAAA;AAAA,OAQd;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,eAAO,KAAK,UAAU;AAAA;AAAA,OAQvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAO,KAAK,SAAS;AAAA;AAAA,OAStB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,MAAK,OAAM;AACrC,YAAI,SAAQ,QAAQ;AAClB,eAAK,SAAS,MAAM,MAAM,OAAM;AAAA;AAGlC,YAAI,UAAS,QAAQ;AACnB,eAAK,SAAS,MAAM,OAAO,QAAO;AAAA;AAAA;AAAA,OASrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,eAAO;AAAA,UACL,KAAK,KAAK,SAAS,MAAM,MAAM,SAAS,KAAK,SAAS,MAAM,KAAK,MAAM;AAAA,UACvE,MAAM,KAAK,SAAS,MAAM,OAAO,SAAS,KAAK,SAAS,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA,OAU7E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,OAAO,QAAQ;AACrC,YAAI,OAAO;AACT,eAAK,SAAS,MAAM,QAAQ,QAAQ;AAAA;AAGtC,YAAI,QAAQ;AACV,eAAK,SAAS,MAAM,SAAS,SAAS;AAAA;AAAA;AAAA,OASzC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAO;AAAA,UACL,OAAO,KAAK,SAAS,MAAM,QAAQ,SAAS,KAAK,SAAS,MAAM,OAAO,MAAM;AAAA,UAC7E,QAAQ,KAAK,SAAS,MAAM,SAAS,SAAS,KAAK,SAAS,MAAM,QAAQ,MAAM;AAAA;AAAA;AAAA,OAUnF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,MAAK,OAAM;AACnC,YAAI,MAAK;AACP,eAAK,SAAS,MAAM,YAAY,OAAM;AAAA;AAGxC,YAAI,OAAM;AACR,eAAK,SAAS,MAAM,aAAa,QAAO;AAAA;AAAA;AAAA,OAS3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO;AAAA,UACL,KAAK,KAAK,SAAS,MAAM,YAAY,SAAS,KAAK,SAAS,MAAM,WAAW,MAAM;AAAA,UACnF,MAAM,KAAK,SAAS,MAAM,aAAa,SAAS,KAAK,SAAS,MAAM,YAAY,MAAM;AAAA;AAAA;AAAA;AAK5F,WAAO;AAAA;AAGT,MAAO,gBAAQ;;;AD5Mf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAIxM,MAAI,iBAAgB;AAMpB,MAAI,eAA2B,yBAAU,SAAS;AAChD,gBAAU,cAAa;AAEvB,QAAI,SAAS,eAAa;AAE1B,4BAAuB;AACrB,yBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,oBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAIA,iBAAiB;AACf,eAAK,kBAAgB,aAAY,YAAY,SAAS,MAAM,KAAK;AAEjE,iBAAS,KAAK,UAAU;AAAA;AAAA;AAI5B,WAAO;AAAA,IACP;AAEF,MAAO,qBAAQ;;;AE/Df,oCAAO;AAXP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAIxM,MAAI,iBAAgB;AAMpB,MAAI,eAA2B,yBAAU,SAAS;AAChD,gBAAU,cAAa;AAEvB,QAAI,SAAS,eAAa;AAE1B,4BAAuB;AACrB,yBAAgB,MAAM;AAEtB,aAAO,OAAO,MAAM,MAAM;AAAA;AAG5B,oBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAIA,iBAAiB;AACf,eAAK,kBAAgB,aAAY,YAAY,SAAS,MAAM,KAAK;AAEjE,iBAAS,KAAK,UAAU;AAAA;AAAA;AAI5B,WAAO;AAAA,IACP;AAEF,MAAO,qBAAQ;;;AH1Ef,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAyBxM,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AACvB,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAC7B,MAAI,gBAAc,oBAAI;AACtB,MAAI,cAAa;AACjB,MAAI,eAAc;AAClB,MAAI,iBAAgB;AACpB,MAAI,uBAAsB;AA0BnB,MAAI,gBAA6B,yBAAU,aAAa;AAC7D,gBAAU,gBAAe;AAEzB,QAAI,SAAS,eAAa;AAE1B,4BAAuB,aAAa;AAClC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAK1B,oBAAY,IAAI,yBAAuB,QAAQ;AAAA,QAC7C,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,QAAQ;AAAA,UACN,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,IAAI;AAAA,UACJ,KAAK;AAAA;AAAA,QAEP,iBAAiB;AAAA;AASnB,YAAM,eAAe,IAAI,qBAAa,yBAAuB;AAQ7D,YAAM,YAAY,IAAI,mBAAY;AAQlC,YAAM,YAAY,IAAI,mBAAY;AAClC,aAAO;AAAA;AAUT,oBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO,wBAAwB,MAAM,QAAQ;AAAA;AAEtD,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO,wBAAwB,MAAM,QAAQ;AAAA;AAEtD,aAAK,QAAQ,2BAA2B,WAAY;AAClD,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO,gBAAgB,MAAM,QAAQ;AAAA;AAE9C,aAAK;AACL,aAAK;AAEL,iBAAS,KAAK,IAAI,aAAa;AAE/B,eAAK,kBAAgB,eAAc,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM3E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,eAAc,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM3E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,oBAAY,KAAK,IAAI,aAAa;AAClC,aAAK;AACL,aAAK,UAAU;AACf,aAAK,UAAU;AAEf,eAAK,kBAAgB,eAAc,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAa5E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,KAAK,YAAY;AACvC,eAAO,KAAK,SAAS,CAAC,MAAM;AAAA;AAAA,OAa7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,MAAM,YAAY;AACzC,YAAI,OAAO,cAAY,IAAI;AAC3B,YAAI,YAAY,KAAK;AACrB,YAAI,eAAe,KAAK,eAAe,MAAM;AAC7C,YAAI,iBAAiB,KAAK,IAAI,SAAS,iBAAiB,MAAM,YAAY,WAAW;AACrF,aAAK,kBAAkB;AAEvB,YAAI,mBAAmB,OAAO;AAC5B;AAAA;AAGF,YAAI,cAAc;AAChB,eAAK,IAAI,eAAe,YAAY,MAAM;AAAA;AAG5C,YAAI,gBAAgB,gBAAgB,KAAK,kBAAkB,MAAM;AACjE,aAAK,IAAI,SAAS,gBAAgB,MAAM,YAAY,WAAW,cAAc;AAC7E,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,KAAK,WAAW;AACtC,eAAO,KAAK,SAAS,CAAC,MAAM;AAAA;AAAA,OAa7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,MAAM,WAAW;AACxC,YAAI,aAAa,KAAK,gBAAgB,MAAM;AAC5C,YAAI,OAAO,cAAY,IAAI;AAC3B,aAAK,kBAAkB;AACvB,eAAO,KAAK,SAAS,MAAM;AAAA;AAAA,OAW5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,WAAW,YAAY;AACpD,YAAI,SAAS,KAAK,IAAI,eAAe;AAErC,YAAI,0BAA0B,UAAU,SAAS,aAAa;AAC9D,YAAI,yBAAyB,aAAa;AAC1C,YAAI,sBAAsB,UAAU,KAAK,SAAU,UAAU;AAC3D,iBAAO,WAAW;AAAA;AAEpB,YAAI,uBAAuB,UAAU,KAAK,SAAU,UAAU;AAC5D,iBAAO,YAAY;AAAA;AAGrB,YAAI,2BAA2B,0BAA0B,uBAAuB,sBAAsB;AACpG,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,WAAW,YAAY;AACvD,eAAO,UAAU,KAAK,SAAU,KAAK,kBAAkB;AACrD,iBAAO,MAAM,qBAAqB;AAAA;AAAA;AAAA,OAYrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,WAAW,WAAW;AACpD,YAAI,iCAAiC,YAAY,WAAW,SAAU,cAAc,iBAAiB;AACnG,cAAI,kBAAkB,WAAW;AAC/B,4BAAgB;AAAA;AAGlB,iBAAO;AAAA,WACN;AACH,eAAO,YAAY;AAAA;AAAA,OAWpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,SAAS,OAAO;AAC5C,YAAI,YAAY,KAAK,IAAI;AACzB,YAAI,aAAa;AAEjB,iBAAS,iBAAiB,SAAS,kBAAkB,OAAO,kBAAkB;AAC5E,cAAI,kBAAkB,UAAU,6BAA6B;AAE7D,cAAI,oBAAoB,MAAM;AAC5B,0BAAc,KAAK,IAAI,KAAK,GAAG,QAAQ,aAAa,oBAAoB;AAAA;AAAA;AAI5E,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,iBAAiB,KAAK,IAAI,cAAc;AAE5C,YAAI,MAAM,QAAQ,iBAAiB;AACjC,eAAK,SAAS,gBAAgB;AAAA,mBACrB,mBAAmB,QAAQ;AACpC,cAAI,kBAAkB,KAAK;AAE3B,cAAI,gBAAgB,QAAQ;AAC1B,iBAAK,SAAS,iBAAiB;AAAA;AAAA;AAAA;AAAA,OAYpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,KAAK;AACjC,eAAO,MAAM,KAAK,IAAI,cAAc;AAAA;AAAA,OAUrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,KAAK;AACpC,eAAO,MAAM,KAAK,IAAI,cAAc;AAAA;AAAA,OASrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AAEpC,aAAK,IAAI,SAAS,uBAAuB,iBAAiB,KAAK,IAAI,eAAe;AAAA;AAAA,OAUnF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,YAAI,cAAc;AAClB,aAAK,IAAI,SAAS,uBAAuB,iBAAiB;AAC1D,eAAO,YAAY,QAAQ,YAAY,QAAQ;AAAA;AAAA,OAShD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,YAAI,YAAY,KAAK,IAAI;AACzB,YAAI,eAAe;AAEnB,YAAI,CAAC,WAAW;AACd,iBAAO;AAAA;AAGT,YAAI,QAAO,UAAU,MACjB,KAAK,UAAU;AACnB,YAAI,SAAQ,KAAK,IAAI,MAAK,KAAK,GAAG;AAClC,YAAI,OAAM,KAAK,IAAI,MAAK,KAAK,GAAG;AAChC,kBAAU,QAAO,MAAK,SAAU,GAAG;AACjC,uBAAa,KAAK;AAAA;AAEpB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,OAAO,cAAY,IAAI;AAC3B,YAAI,SAAS,KAAK,OAAO;AACzB,YAAI,eAAe,KAAK,IAAI,KAAK,GAAG,QAAQ;AAC5C,YAAI,cAAc,KAAK,IAAI,KAAK,GAAG,QAAQ;AAC3C,YAAI,YAAY,KAAK,IAAI,cAAc;AACvC,YAAI,YAAY,KAAK,IAAI;AAEzB,YAAI,OAAO,MAAM,aAAa,eAAe,GAAG;AAC9C,eAAK,IAAI,iBAAiB,eAAe;AAAA;AAG3C,YAAI,OAAO,OAAO,eAAe,cAAc,WAAW;AACxD,eAAK,IAAI,iBAAiB,cAAc,GAAG,QAAW;AAAA;AAGxD,YAAI,UAAU,KAAK,IAAI,KAAK,GAAG;AAC/B,YAAI,KAAK,KAAK,OAAO;AACrB,YAAI,oBAAoB,OAAO,KAAK,IAAI;AACxC,YAAI,cAAc,KAAK,IAAI,KAAK,MAAM,eAAe,KAAK,cAAc,GAAG,OAAO,MAAM;AACxF,YAAI,iBAAiB,KAAK,OAAO,aAAa,kBAAkB,MAAM,QAAQ,OAAO;AACrF,YAAI,cAAc,QAAQ,MAAM;AAChC,YAAI,iBAAiB,QAAQ,MAAM;AACnC,YAAI,yBAAyB,KAAK,UAAU,YAAY;AACxD,YAAI,sBAAsB,KAAK,UAAU,UAAU;AAEnD,YAAI,KAAK,cAAc,OAAO,MAAM;AAClC,yBAAe,QAAQ,OAAO;AAAA;AAOhC,YAAI,OAAO,MAAM,GAAG;AAElB,eAAK,OAAO,MAAM,eAAe,IAAI,eAAe,IAAI;AAAA,mBAC/C,GAAG,eAAe,IAAI,eAAe,gBAAgB;AAE9D,eAAK,OAAO,MAAM,OAAO,MAAM;AAE/B,yBAAe,OAAO,QAAQ,IAAI,GAAG,eAAe,IAAI,GAAG;AAAA,eACtD;AAEL,eAAK,OAAO,MAAM,OAAO;AAAA;AAG3B,YAAI,eAAe;AACnB,YAAI,eAAe;AAEnB,YAAI,iBAAiB,sBAAsB,0BAA0B,aAAa;AAEhF,yBAAe,cAAc,sBAAsB;AAAA,mBAC1C,iBAAiB,yBAAyB,gBAAgB;AAEnE,yBAAe,iBAAiB,KAAK,IAAI;AAAA;AAG3C,YAAI,eAAe,cAAc,GAAG;AAElC,yBAAe,cAAc;AAAA;AAG/B,YAAI,mBAAmB;AAEvB,YAAI,KAAK,IAAI,KAAK,GAAG,WAAW,YAAY;AAC1C,6BAAmB,KAAK,IAAI,KAAK,GAAG,WAAW,WAAW,MAAM,QAAQ,MAAM;AAAA;AAGhF,YAAI,OAAO,OAAO,aAAa,eAAe,QAAQ,OAAO,YAAY,kBAAkB;AACzF,eAAK,IAAI,iBAAiB,OAAO;AAAA;AAGnC,aAAK,UAAU,YAAY;AAC3B,aAAK,UAAU,YAAY;AAAA;AAAA,OAQ5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA0B;AAC/B,YAAI,SAAS;AAEb,YAAI,kBAAkB,KAAK,IAAI,aAAa;AAC5C,aAAK,aAAa,iBAAiB,iBAAiB,aAAa,SAAU,QAAO;AAChF,iBAAO,OAAO,YAAY;AAAA;AAE5B,aAAK,aAAa,iBAAiB,iBAAiB,WAAW,WAAY;AACzE,iBAAO,OAAO;AAAA;AAAA;AAAA,OASjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,aAAK,aAAa;AAAA;AAAA,OAanB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAO,QAAQ,IAAI,YAAY;AACrE,YAAI,oBAAoB,KAAK,IAAI,KAAK,IAClC,UAAU,kBAAkB,SAC5B,aAAa,kBAAkB;AACnC,YAAI,oBAAoB,KAAK,IAAI,UAAU;AAC3C,YAAI,YAAY,KAAK,IAAI;AACzB,YAAI,OAAO,cAAY,IAAI;AAE3B,YAAI,CAAC,aAAa,CAAC,qBAAqB,KAAK,WAAW,OAAM,WAAW,GAAG;AAC1E,eAAK,UAAU;AACf,eAAK,WAAW,SAAS;AACzB,sBAAY,KAAK,IAAI,aAAa,CAAC,gBAAe;AAClD;AAAA;AAGF,YAAI,sBAAsB,KAAK,UAAU,aAAa,CAAC,KAAK,UAAU;AACtE,YAAI,sBAAsB,KAAK,UAAU,aAAa,CAAC,KAAK,UAAU;AAEtE,YAAI,uBAAuB,qBAAqB;AAC9C,eAAK,UAAU,SAAS,QAAQ;AAChC,eAAK,UAAU,SAAS,QAAQ;AAAA;AAGlC,YAAI,QAAO,UAAU,MACjB,KAAK,UAAU;AACnB,YAAI,SAAQ,KAAK,IAAI,MAAK,KAAK,GAAG;AAClC,YAAI,OAAM,KAAK,IAAI,MAAK,KAAK,GAAG;AAEhC,YAAI,OAAO,MAAM,KAAK,OAAO,OAAO,UAAS,OAAO,OAAO,MAAK;AAC9D,qBAAW,MAAM;AACjB,eAAK,UAAU;AACf,eAAK,OAAO,aAAa,OAAM;AAC/B,eAAK,OAAO,SAAS;AACrB,eAAK,OAAO,KAAK;AACjB,eAAK,aAAa,KAAK;AACvB,cAAI,UAAU,QAAQ,OAAO,aAAa,WAAW;AACrD,eAAK,UAAU,YAAY,MAAM;AACjC,eAAK,UAAU,QAAQ,QAAQ,MAAM,cAAc,SAAS,KAAK,cAAc,QAAO;AACtF,eAAK,UAAU,UAAW,MAAK,cAAc,QAAO,OAAO,MAAM,KAAK,OAAM,WAAW,IAAI;AAC3F,mBAAS,KAAK,IAAI,aAAa;AAC/B,eAAK;AAAA,eACA;AACL,sBAAY,KAAK,IAAI,aAAa;AAClC,eAAK,UAAU;AACf,eAAK,WAAW,SAAS;AAAA;AAAA;AAAA,OAU5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,YAAI,OAAO,cAAY,IAAI;AAE3B,YAAI,CAAC,KAAK,SAAS;AACjB;AAAA;AAIF,YAAI,OAAM,WAAW,KAAK,UAAU,SAAS;AAC3C,cAAI,SAAS,KAAK,UAAU,UAAU;AACtC,eAAK,UAAU,QAAQ,MAAM;AAC7B,qBAAW,WAAY;AACrB,iBAAK,UAAU,YAAY,MAAM;AAAA;AAAA;AAIrC,aAAK,OAAO,aAAa,OAAM;AAC/B,aAAK;AAAA;AAAA,OAaN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAO,QAAQ,IAAI,YAAY;AACrE,YAAI,gBAAgB,KAAK,IAAI;AAC7B,YAAI,OAAO,cAAY,IAAI;AAE3B,YAAI,CAAC,iBAAiB,CAAC,KAAK,SAAS;AACnC;AAAA;AAGF,YAAI,KAAK,WAAW,QAAQ,OAAO,OAAO,IAAI;AAC5C,sBAAY,KAAK,IAAI,aAAa;AAAA,eAC7B;AACL,mBAAS,KAAK,IAAI,aAAa;AAAA;AAGjC,mBAAW,MAAM;AACjB,mBAAW,SAAS;AACpB,mBAAW,OAAO;AAClB,aAAK,OAAO,SAAS;AACrB,aAAK,OAAO,KAAK;AAAA;AAAA,OAQlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAqB;AAC1B,YAAI,OAAO,cAAY,IAAI;AAC3B,YAAI,SAAS,KAAK,OAAO;AACzB,YAAI,UAAU,KAAK,WAAW;AAC9B,aAAK,UAAU;AACf,aAAK,kBAAkB;AACvB,oBAAY,KAAK,IAAI,aAAa,CAAC,gBAAe,cAAa;AAE/D,YAAI,KAAK,IAAI,UAAU,yBAAyB;AAC9C,mBAAS,KAAK,IAAI,aAAa;AAAA;AAGjC,YAAI,UAAU,KAAK,WAAW,QAAQ;AACpC;AAAA;AAGF,YAAI,sBAAsB,KAAK,WAAW;AAC1C,YAAI,wBAAwB,KAAK,IAAI,cAAc;AACnD,YAAI,gBAAgB,KAAK,SAAS,KAAK,YAAY;AACnD,aAAK,WAAW,SAAS;AAEzB,YAAI,kBAAkB,MAAM;AAC1B,eAAK;AACL,eAAK,IAAI;AACT,eAAK,IAAI,KAAK,mBAAmB;AACjC,cAAI,iBAAiB,KAAK,IAAI,YAAY;AAC1C,cAAI,eAAe,iBAAiB,UAAU;AAC9C,eAAK,IAAI,WAAW,gBAAgB;AAAA;AAAA;AAAA,OASvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC;AAC1C,YAAI,UAAU,KAAK,IAAI,KAAK,GAAG;AAC/B,YAAI,cAAc,KAAK,IAAI,KAAK,GAAG,WAAW;AAC9C,YAAI,aAAa,QAAQ,OAAO;AAChC,YAAI,UAAU,cAAc;AAC5B,aAAK,UAAU,YAAY,MAAM;AACjC,aAAK,UAAU,QAAQ,QAAQ,MAAM,cAAc;AAAA;AAAA,OAQpD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK,UAAU;AACf,aAAK,UAAU;AAAA;AAAA,OAQhB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,aAAK,UAAU;AACf,aAAK,UAAU;AAEf,eAAK,kBAAgB,eAAc,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAErE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AI1xBF,oCAAO;AA1BP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AA2BjM,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAC7B,MAAI,wBAAuB;AAC3B,MAAI,gBAAc,oBAAI;AAcf,MAAI,kBAA+B,yBAAU,aAAa;AAC/D,gBAAU,kBAAiB;AAE3B,QAAI,SAAS,eAAa;AAE1B,8BAAyB,aAAa;AACpC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAC1B,UAAI,eAAe,MAAM,IAAI;AAC7B,YAAM,YAAY;AAClB,YAAM,aAAa;AACnB,YAAM,eAAe;AACrB,YAAM,gBAAgB;AACtB,YAAM,UAAU;AAChB,YAAM,SAAS;AACf,YAAM,cAAc;AACpB,YAAM,cAAc;AACpB,YAAM,SAAS,aAAa,cAAc;AAC1C,YAAM,QAAQ,aAAa,cAAc;AACzC,YAAM,eAAe,IAAI,qBAAa,yBAAuB;AAC7D,YAAM,UAAU;AAChB,YAAM,WAAW;AACjB,YAAM,oBAAoB;AAQ1B,YAAM,gBAAgB;AAKtB,oBAAY,IAAI,yBAAuB,QAAQ;AAAA,QAC7C,QAAQ;AAAA;AAEV,eAAS,MAAM,QAAQ;AACvB,eAAS,MAAM,OAAO;AACtB,aAAO;AAAA;AAUT,oBAAa,kBAAiB,CAAC;AAAA,MAC7B,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,IAAI,cAAc;AAAA;AAAA,OAM/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,gBAAgB,IAAI;AACzB,aAAK,cAAc,aAAa,QAAQ,WAAY;AAClD,iBAAO,OAAO;AAAA;AAEhB,aAAK,IAAI,eAAe,YAAY,KAAK,YAAY,KAAK;AAC1D,aAAK,QAAQ,mBAAmB,SAAU,QAAQ,KAAK;AACrD,iBAAO,OAAO,kBAAkB,QAAQ;AAAA;AAE1C,aAAK;AAEL,eAAK,kBAAgB,iBAAgB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM7E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,iBAAgB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM7E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,OAAO,cAAY,IAAI;AAC3B,aAAK,SAAS,KAAK,cAAc;AACjC,aAAK,IAAI,eAAe,cAAc,KAAK;AAE3C,eAAK,kBAAgB,iBAAgB,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAS9E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,aAAK,IAAI,SAAS,uBAAuB,uBAAsB,KAAK,cAAc;AAAA;AAAA,OAUnF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,cAAc;AAClB,aAAK,IAAI,SAAS,uBAAuB,uBAAsB;AAC/D,eAAO,YAAY;AAAA;AAAA,OAUpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,KAAK,QAAQ;AACzC,YAAI,cAAc,KAAK,IAAI,cAAc;AACzC,YAAI,YAAY,KAAK,IAAI,QAAQ,qBAAuB;AACxD,aAAK,cAAc,gBAAgB,aAAa;AAChD,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,IAAI;AACtC,YAAI,SAAS;AAEb,aAAK,YAAY;AACjB,YAAI,OAAO,KAAK,IAAI;AACpB,YAAI,KAAK,KAAK;AACd,YAAI,aAAa,KAAK,GAAG,QAAQ,UAAU,KAAK;AAChD,YAAI,MAAM,WAAW;AAErB,YAAI,MAAM,GAAG;AACX;AAAA;AAGF,YAAI,cAAc,WAAW,KAAK;AAClC,YAAI,MAAM,KAAK,UAAU;AAGzB,YAAI,cAAc,MAAM,GAAG,WAAW;AACtC,YAAI,iBAAiB,OAAO,KAAK,yBAAyB,GAAG,KAAK,GAAG,WAAW;AAChF,YAAI;AAEJ,YAAI,aAAa;AACf,mCAAyB,GAAG,WAAW,qBAAqB,wBAAwB,KAAK,WAAW,WAAW,KAAK,WAAW;AAAA,mBACtH,gBAAgB;AACzB,mCAAyB,GAAG,WAAW,wBAAwB,wBAAwB,KAAK,WAAW,WAAW,KAAK,WAAW;AAAA;AAKpI,YAAI,CAAC,wBAAwB;AAC3B,mCAAyB,GAAG,WAAW,YAAY,wBAAwB,KAAK,WAAW,WAAW,KAAK,WAAW;AAAA;AAGxH,aAAK,aAAa,KAAK,IAAI,eAAe,6BAA6B;AACvE,aAAK,eAAe;AACpB,YAAI,oBAAoB,KAAK,IAAI,UAAU,wBAAwB,KAAK,IAAI,UAAU;AAEtF,YAAI,KAAK,IAAI,UAAU,gBAAgB,mBAAmB;AACxD,cAAI,kBAAkB,KAAK,IAAI;AAC/B,oBAAU,iBAAiB,SAAU,gBAAgB;AACnD,gBAAI,UAAU,eAAe,mBAAmB;AAChD,gBAAI,QAAQ,eAAe,sBAAsB;AAEjD,sBAAU,SAAS,OAAO,SAAU,UAAU;AAC5C,kBAAI,CAAC,OAAO,aAAa,SAAS,WAAW;AAC3C,uBAAO,aAAa,KAAK;AAAA;AAAA;AAAA;AAAA;AAOjC,YAAI,CAAC,KAAK,aAAa,SAAS,KAAK,aAAa;AAChD,eAAK,eAAe,CAAC,KAAK;AAAA;AAG5B,aAAK,cAAc,uBAAuB,MAAM;AAChD,aAAK,cAAc,SAAS,IAAI,QAAQ;AACxC,aAAK,OAAO,MAAM,MAAM,GAAG,OAAO,KAAK,cAAc,KAAK,aAAa;AACvE,aAAK,OAAO,MAAM,OAAO,GAAG,OAAO,uBAAuB,MAAM;AAChE,aAAK,OAAO,MAAM,QAAQ,GAAG,OAAO,aAAa;AACjD,aAAK,IAAI,YAAY,YAAY,KAAK;AAAA;AAAA,OAQvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,aAAK,OAAO,MAAM,MAAM,GAAG,OAAO,KAAK,cAAc,KAAK,eAAe;AAAA;AAAA,OAQ1E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,YAAI,cAAc,SAAS,WAAW,KAAK,SAAS;AACpD,YAAI,sBAAsB,SAAS,KAAK,OAAO,MAAM,MAAM,MAAM;AACjE,YAAI,6BAA6B,SAAS,KAAK,IAAI,KAAK,2BAA2B,IAAI;AACvF,iBAAS,KAAK,QAAQ;AACtB,iBAAS,KAAK,OAAO;AACrB,aAAK,MAAM,MAAM,MAAM,KAAK,OAAO,MAAM;AACzC,aAAK,MAAM,MAAM,OAAO,GAAG,OAAO,qBAAqB;AACvD,aAAK,MAAM,MAAM,QAAQ,GAAG,OAAO,6BAA6B,aAAa;AAC7E,aAAK,IAAI,YAAY,YAAY,KAAK;AAAA;AAAA,OAQvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,aAAK,MAAM,MAAM,MAAM,KAAK,OAAO,MAAM;AAAA;AAAA,OAQ1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B;AACnC,oBAAY,KAAK,QAAQ;AACzB,oBAAY,KAAK,OAAO;AAAA;AAAA,OAUzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,SAAS;AACxC,YAAI,qBAAqB;AAEzB,YAAI,YAAY,QAAQ,SAAS,CAAC,OAAO,KAAK,IAAI;AAClD,eAAO,aAAe,wBAAsB,QAAQ,gBAAgB,QAAQ,wBAAwB,SAAS,SAAU,yBAAwB,oBAAoB,gBAAgB,QAAQ,0BAA0B,SAAS,SAAS,sBAAsB,aAAa;AAAA;AAAA,OAU3Q;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,SAAS;AAC1C,YAAI,QAAQ,YAAY,SAAS;AAC/B,cAAI,QAAQ,YAAY,MAAM;AAC5B,mBAAO;AAAA;AAGT,iBAAO,KAAK,mBAAmB,QAAQ;AAAA;AAGzC,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,KAAK;AAEtC,YAAI,oBAAoB,KAAK,IAAI,KAAK,GAAG,QAAQ,aAAa;AAE9D,YAAI,sBAAsB,UAAU,KAAK,UAAU,mBAAmB;AACpE,iBAAO;AAAA;AAGT,eAAO,KAAK;AAAA;AAAA,OASb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AAGjC,YAAI,WAAW,OAAM,SAAS;AAC5B;AAAA;AAGF,YAAI,KAAK,iBAAiB,OAAM,SAAS;AACvC,cAAI,KAAK,KAAK,mBAAmB,OAAM;AAEvC,cAAI,IAAI;AACN,gBAAI,CAAC,KAAK,SAAS;AACjB,mBAAK,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,OAahC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,SAAS;AAEb,YAAI,SAAS,mBAAkB;AAC7B,iBAAO,IAAI,kBAAkB;AAE7B,iBAAO,IAAI,KAAK;AAGhB,iBAAO,IAAI,KAAK,mBAAmB;AAAA;AAGrC,YAAI,SAAS,iBAAgB,KAAK,aAAa;AAC7C,cAAI,cAAc,OAAO,IAAI,SAAS,mBAAmB,OAAO,mBAAmB,MAAM,KAAK;AAE9F,cAAI,gBAAgB,QAAQ;AAC1B,mBAAO,UAAU;AAAA;AAGnB,iBAAO,cAAc,KAAK,OAAO;AAGjC,iBAAO,IAAI,SAAS,kBAAkB,OAAO,mBAAmB,MAAM,KAAK;AAE3E,cAAI,aAAa;AACf;AAAA;AAAA;AAIJ,YAAI,KAAK,YAAY,GAAG;AACtB,cAAI,qBAAqB,KAAK,aAAa;AAE3C,cAAI,qBAAqB,GAAG;AAC1B,sBAAU,KAAK,cAAc,SAAU,aAAa;AAClD,qBAAO;AAAA;AAET;AAAA,iBACK;AACL,sBAAU,KAAK,cAAc,SAAU,aAAa;AAClD,qBAAO,aAAa;AAAA;AAAA;AAAA;AAK1B,aAAK,WAAW;AAChB,aAAK,oBAAoB;AAAA;AAAA,OAS1B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,YAAI,SAAS;AAEb,YAAI,SAAS,OAAM,QAAQ,qBAAqB;AAC9C,eAAK,oBAAoB,KAAK;AAC9B,eAAK;AACL,eAAK,UAAU;AAEf,cAAI,KAAK,sBAAsB,MAAM;AACnC,iBAAK,oBAAoB,WAAW,WAAY;AAC9C,qBAAO,OAAO;AAAA,eACb;AAEH,iBAAK,IAAI,iBAAiB,KAAK;AAAA;AAGjC,eAAK,YAAY;AACjB,eAAK,SAAS,OAAM;AACpB,eAAK,UAAU,KAAK;AAAA;AAAA;AAAA,OAUvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO;AACjC,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB,eAAK,gBAAgB,KAAK,cAAe,QAAM,QAAQ,KAAK;AAC5D,oBAAU,KAAK,cAAc,SAAU,aAAa;AAClD,mBAAO,UAAU,OAAO,cAAc,aAAa,OAAO;AAAA;AAE5D,eAAK;AACL,eAAK;AAAA;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAqB;AAC1B,YAAI,SAAS;AAEb,YAAI,SAAS,mBAAkB;AAC7B,iBAAO,IAAI,kBAAkB;AAE7B,iBAAO,IAAI,KAAK;AAGhB,iBAAO,IAAI,KAAK,mBAAmB;AAAA;AAGrC,YAAI,WAAW,mBAAkB,KAAK,aAAa;AACjD,iBAAO,IAAI,SAAS,mBAAmB,OAAO,mBAAmB,MAAM,KAAK;AAE5E,cAAI,aAAa;AACf;AAAA;AAGF,iBAAO;AAEP,iBAAO,IAAI,SAAS,kBAAkB,OAAO,mBAAmB,MAAM,KAAK;AAAA;AAG7E,YAAI,KAAK,SAAS;AAChB,eAAK;AACL,eAAK,UAAU;AAEf,cAAI,KAAK,YAAY,KAAK,aAAa;AACrC,gBAAI,qBAAqB,KAAK,aAAa;AAE3C,gBAAI,qBAAqB,GAAG;AAC1B,wBAAU,KAAK,cAAc,SAAU,aAAa;AAClD,yBAAS;AAAA;AAEX;AAAA,mBACK;AACL,wBAAU,KAAK,cAAc,SAAU,aAAa;AAClD,yBAAS,aAAa;AAAA;AAAA;AAAA;AAK5B,eAAK,oBAAoB,KAAK;AAAA;AAAA;AAAA,OASjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,SAAS;AAEb,YAAI,YAAY,KAAK,KACjB,cAAc,UAAU,aACxB,aAAa,UAAU;AAC3B,aAAK,aAAa,iBAAiB,aAAa,aAAa,SAAU,GAAG;AACxE,iBAAO,OAAO,YAAY;AAAA;AAE5B,aAAK,aAAa,iBAAiB,aAAa,aAAa,SAAU,GAAG;AACxE,iBAAO,OAAO,YAAY;AAAA;AAE5B,aAAK,aAAa,iBAAiB,YAAY,aAAa,SAAU,GAAG;AACvE,iBAAO,OAAO,YAAY;AAAA;AAE5B,aAAK,aAAa,iBAAiB,YAAY,WAAW,WAAY;AACpE,iBAAO,OAAO;AAAA;AAAA;AAAA,OAYjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,QAAQ,KAAK;AAC7C,YAAI,YAAY;AAEhB,YAAI,KAAK,SAAS;AAChB,cAAI,cAAc,KAAK,IAAI,cAAc;AACzC,cAAI,YAAY,KAAK,cAAc,gBAAgB;AAEnD,cAAI,KAAK,IAAI,cAAc,iBAAe,WAAW;AACnD,wBAAY;AAAA;AAAA;AAIhB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,SAAS;AAEb,YAAI,OAAO,cAAY,IAAI;AAC3B,YAAI,iBAAiB,KAAK,IAAI,cAAc;AAC5C,YAAI,yBAAyB,KAAK;AAClC,aAAK,IAAI,eAAe,WAAY;AAClC,cAAI,OAAO,2BAA2B,aAAa;AACjD,mCAAuB,QAAQ,SAAU,QAAQ,QAAO;AACtD,qBAAO,cAAc,gBAAgB,QAAO;AAAA;AAAA,qBAErC,MAAM,QAAQ,iBAAiB;AACxC,2BAAe,QAAQ,SAAU,QAAQ,QAAO;AAC9C,qBAAO,cAAc,gBAAgB,QAAO;AAAA;AAE9C,iBAAK,SAAS;AAAA,qBACL,mBAAmB,QAAQ,MAAM,QAAQ,KAAK,SAAS;AAChE,iBAAK,OAAO,QAAQ,SAAU,QAAQ,QAAO;AAC3C,qBAAO,cAAc,gBAAgB,QAAO;AAAA;AAAA;AAAA,WAG/C;AAAA;AAAA,OAMJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAK,kBAAgB,iBAAgB,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAEvE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AC3oBF,oCAAO;AAqBP,gCAAO;;;AC7CP,oCAAO;AAMP,gCAAO;;;ACzBP,MAAI;AAAJ,MAAqB;AAArB,MAAuC;AAAvC,MAAyD;AAEzD,oCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAE1K,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAW/Q,MAAI,mBAAgC,2BAAY;AAC9C,+BAA0B,KAAK,QAAQ,SAAS,SAAS;AACvD,yBAAgB,MAAM;AAOtB,WAAK,MAAM;AAOX,WAAK,MAAM;AAOX,WAAK,UAAU;AAOf,WAAK,UAAU;AAOf,WAAK,UAAU;AAAA;AAUjB,oBAAa,mBAAkB,CAAC;AAAA,MAC9B,KAAK;AAAA,MACL,OAMA,mBAAmB,aAAa;AAC9B,YAAI,YAAY,YAAY;AAC5B,YAAI,eAAe,YAAY;AAE/B,YAAI,KAAK,MAAM,GAAG;AAChB,eAAK,MAAM;AAAA,mBACF,KAAK,MAAM,YAAY,GAAG;AACnC,eAAK,MAAM,YAAY;AAAA;AAGzB,YAAI,KAAK,MAAM,GAAG;AAChB,eAAK,MAAM;AAAA,mBACF,KAAK,MAAM,eAAe,GAAG;AACtC,eAAK,MAAM,eAAe;AAAA;AAG5B,YAAI,KAAK,MAAM,KAAK,UAAU,YAAY,GAAG;AAC3C,eAAK,UAAU,YAAY,KAAK;AAAA;AAGlC,YAAI,KAAK,MAAM,KAAK,UAAU,eAAe,GAAG;AAC9C,eAAK,UAAU,eAAe,KAAK;AAAA;AAAA;AAAA,OAWtC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAkB,KAAK,QAAQ;AACpC,eAAO,KAAK,OAAO,OAAO,KAAK,OAAO,UAAU,KAAK,MAAM,KAAK,UAAU,KAAK,OAAO,KAAK,MAAM,KAAK,UAAU,KAAK;AAAA;AAAA,OAStH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,QAAQ;AAC3C,eAAO,KAAK,OAAO,UAAU,KAAK,MAAM,KAAK,UAAU,KAAK;AAAA;AAAA,OAS7D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,KAAK;AACtC,eAAO,KAAK,OAAO,OAAO,KAAK,MAAM,KAAK,UAAU,KAAK;AAAA;AAAA,OAU1D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,eAAe,aAAa,eAAe;AAChD,YAAI,aAAa,YAAY,MAAM,YAAY;AAC/C,YAAI,eAAe,gBAAgB,KAAK,IAAI,YAAY,MAAM,YAAY,MAAM;AAChF,YAAI,OAAO,YAAY,KAAK,YAAY;AACxC,YAAI,SAAQ,YAAY,KAAK,QAAQ;AACrC,YAAI,cAAc,KAAK,IAAI,eAAe;AAC1C,YAAI,YAAY,KAAK,IAAI,eAAe;AACxC,YAAI,aAAa,KAAK;AACtB,YAAI,WAAW,KAAK,UAAS,KAAK,QAAQ;AAE1C,YAAI,cAAc,eAAe;AAC/B,eAAK,WAAU;AAAA;AAIjB,YAAI,aAAa,GAAG;AAClB,cAAI,iBAAiB,YAAY,gBAAgB,YAAY;AAC3D,iBAAK,SAAS;AAAA;AAAA,mBAGP,aAAa,GAAG;AAEzB,cAAI,eAAe,cAAc,aAAa,UAAU;AACtD,iBAAK,UAAU;AACf,mBAAO;AAAA,qBACE,cAAc,eAAe,cAAc,WAAW;AAC/D,gBAAI,gBAAgB,YAAY,aAAa;AAC7C,gBAAI,mBAAmB,KAAK,IAAI,cAAc;AAC9C,iBAAK,WAAU,mBAAmB;AAClC,iBAAK,SAAS;AAAA,qBACL,cAAc,eAAe,YAAY,WAAW;AAC7D,iBAAK,SAAS;AAAA,qBACL,cAAc,eAAe,YAAY,eAAe,WAAW,WAAW;AACvF,gBAAI,cAAc,WAAW,cAAc;AAC3C,iBAAK,SAAS;AAAA;AAAA;AAIlB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,YAAY,WAAW;AAC/C,YAAI,CAAC,YAAY;AACf,iBAAO;AAAA;AAGT,YAAI,cAAc,QAAQ;AACxB,iBAAO,WAAW,MAAM,WAAW,UAAU,IAAI,KAAK,MAAM,KAAK,UAAU;AAAA,mBAClE,cAAc,MAAM;AAC7B,iBAAO,WAAW,MAAM,KAAK;AAAA,mBACpB,cAAc,SAAS;AAChC,iBAAO,WAAW,MAAM,WAAW,UAAU,IAAI,KAAK,MAAM,KAAK,UAAU;AAAA,mBAClE,cAAc,QAAQ;AAC/B,iBAAO,WAAW,MAAM,KAAK;AAAA;AAG/B,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,eAAO,KAAK,MAAM,KAAK,UAAU;AAAA;AAAA,OAQlC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,eAAO,KAAK,MAAM,KAAK,UAAU;AAAA;AAAA,OAQlC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,IAAI,cAAU,IAAI,eAAW,KAAK,KAAK,KAAK,MAAM,IAAI,eAAW,KAAK,KAAK,KAAK,MAAM,IAAI,eAAW,KAAK,cAAc,KAAK;AAAA;AAAA,QAEpI,CAAC;AAAA,MACH,KAAK;AAAA,MACL,OAAO,iCAAiC,eAAe;AACrD,eAAO,aAAa,qBAAoB,qBAAkB,yBAAuB,CAAC,wCAAwC,WAAW,uBAAuB,eAAe,wGAAwG,CAAC,wCAAwC,WAAW,2BAA2B,eAAe,8GAA8G,cAAc,KAAK,cAAc,KAAK,cAAc,SAAS,cAAc;AAAA;AAAA,OAS3iB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,eAAe;AACtD,eAAO,aAAa,qBAAqB,qBAAmB,yBAAuB,CAAC,iCAAiC,MAAM,wIAAwI,CAAC,iCAAiC,MAAM,8IAA8I,cAAc,KAAK,cAAc;AAAA;AAAA,OAS3d;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,eAAe;AAC5C,eAAO,aAAa,qBAAqB,qBAAmB,yBAAuB,CAAC,iCAAiC,MAAM,oIAA0I,CAAC,iCAAiC,MAAM,0IAAgJ,cAAc,KAAK,cAAc;AAAA;AAAA,OAS/d;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,eAAe;AAC/C,eAAO,aAAa,qBAAqB,qBAAmB,yBAAuB,CAAC,iCAAiC,MAAM,wHAA8H,CAAC,iCAAiC,MAAM,8HAAoI,cAAc,KAAK,cAAc;AAAA;AAAA,OASvc;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,gBAAgB;AACrD,eAAO,eAAe,MAAM,KAAK,eAAe,MAAM,KAAK,eAAe,UAAU,KAAK,eAAe,UAAU;AAAA;AAAA,OAUnH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,gBAAgB;AAC3C,eAAO,eAAe,YAAY,KAAK,eAAe,YAAY;AAAA;AAAA,OAUnE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,gBAAgB;AAC/C,eAAO,eAAe,YAAY,KAAK,eAAe,YAAY;AAAA;AAAA,OAWnE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,WAAW,UAAU,aAAa;AAC9D,eAAO,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,OAAO,YAAY,UAAU,MAAM,UAAU,UAAU,KAAK,YAAY,UAAU,OAAO,eAAe,UAAU,MAAM,UAAU,UAAU,KAAK;AAAA;AAAA;AAIhN,WAAO;AAAA;AAGT,MAAO,qBAAQ;;;AC/UR,+BAA6B,IAAI,gBAAgB,KAAK,KAAK;AAChE,QAAI,gBAAgB;AAClB,UAAI,eAAe,QAAQ,OAAO,eAAe,QAAQ,KAAK;AAC5D,WAAG,aAAa,WAAW,eAAe,QAAQ;AAClD,WAAG,aAAa,WAAW,eAAe,QAAQ;AAAA,aAC7C;AACL,WAAG,gBAAgB;AACnB,WAAG,gBAAgB;AACnB,WAAG,MAAM,UAAU;AAAA;AAAA,WAEhB;AACL,SAAG,gBAAgB;AACnB,SAAG,gBAAgB;AACnB,SAAG,MAAM,UAAU;AAAA;AAAA;;;AFxBvB,MAAI;AAEJ,oCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAE1K,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAiBhL,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAgB/Q,MAAI,wBAAqC,2BAAY;AACnD,oCAA+B,QAAQ;AACrC,yBAAgB,MAAM;AAOtB,WAAK,SAAS;AAOd,WAAK,cAAc;AAOnB,WAAK,MAAM,OAAO;AAAA;AAUpB,oBAAa,wBAAuB,CAAC;AAAA,MACnC,KAAK;AAAA,MACL,OASA,cAAa,KAAK,QAAQ;AACxB,YAAI,cAAc,KAAK;AACvB,YAAI,SAAS;AACb,kBAAU,aAAa,SAAU,YAAY;AAC3C,cAAI,WAAW,OAAO,OAAO,WAAW,MAAM,WAAW,UAAU,KAAK,OAAO,WAAW,OAAO,UAAU,WAAW,MAAM,WAAW,UAAU,KAAK,QAAQ;AAC5J,qBAAS;AACT,mBAAO;AAAA;AAGT,iBAAO;AAAA;AAET,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,OAAO;AAChC,YAAI,cAAc,KAAK;AACvB,YAAI,SAAS;AACb,kBAAU,aAAa,SAAU,YAAY;AAC3C,cAAI,WAAW,OAAO,MAAM,KAAK,OAAO,WAAW,MAAM,WAAW,UAAU,KAAK,MAAM,GAAG,OAAO,WAAW,OAAO,MAAM,KAAK,OAAO,WAAW,MAAM,WAAW,UAAU,KAAK,MAAM,GAAG,KAAK;AAC9L,qBAAS;AACT,mBAAO;AAAA;AAGT,iBAAO;AAAA;AAET,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,OAAO;AACpC,YAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACxF,YAAI,cAAc,KAAK;AACvB,YAAI,mBAAmB;AACvB,YAAI,cAAc;AAElB,YAAI,CAAC,YAAY,eAAe;AAC9B,cAAI,QAAO,IAAI,eAAW,YAAY,KAAK,KAAK,YAAY,KAAK;AACjE,cAAI,KAAK,IAAI,eAAW,YAAY,GAAG,KAAK,YAAY,GAAG;AAC3D,wBAAc,IAAI,cAAU,OAAM,OAAM;AAAA;AAG1C,kBAAU,aAAa,SAAU,YAAY;AAC3C,cAAI,oBAAoB,IAAI,eAAW,WAAW,KAAK,WAAW;AAClE,cAAI,wBAAwB,IAAI,eAAW,WAAW,MAAM,WAAW,UAAU,GAAG,WAAW,MAAM,WAAW,UAAU;AAC1H,cAAI,kBAAkB,IAAI,cAAU,mBAAmB,mBAAmB;AAE1E,cAAI,eAAe;AACjB,gBAAI,YAAY,SAAS,kBAAkB;AACzC,+BAAiB,KAAK;AAAA;AAAA,qBAEf,YAAY,cAAc,kBAAkB;AACrD,6BAAiB,KAAK;AAAA;AAAA;AAG1B,eAAO,iBAAiB,SAAS,mBAAmB;AAAA;AAAA,OASrD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAa,gBAAgB;AAClC,YAAI,cAAc,KAAK;AACvB,YAAI,MAAM,eAAe;AACzB,YAAI,SAAS,eAAe;AAC5B,YAAI,UAAU,eAAe;AAC7B,YAAI,UAAU,eAAe;AAC7B,YAAI,gBAAgB,IAAI,mBAAiB,KAAK,QAAQ,SAAS;AAC/D,YAAI,gBAAgB,KAAK,IAAI,KAAK;AAClC,YAAI,gBAAgB,KAAK,cAAc;AAEvC,YAAI,CAAC,iBAAiB,CAAC,eAAe;AACpC,cAAI,KAAK,KAAK;AACZ,0BAAc,UAAU,KAAK;AAAA;AAG/B,sBAAY,KAAK;AACjB,iBAAO;AAAA;AAGT,aAAK,uBAAsB,uBAAuB;AAClD,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,KAAK,QAAQ;AAClC,YAAI,cAAc,KAAK;AACvB,YAAI,mBAAmB,KAAK,IAAI,KAAK;AACrC,YAAI,wBAAwB,mBAAmB,KAAK,YAAY,QAAQ,oBAAoB;AAE5F,YAAI,oBAAoB,0BAA0B,IAAI;AACpD,sBAAY,OAAO,uBAAuB;AAC1C,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,YAAI,QAAQ;AAEZ,YAAI,cAAc,KAAK;AACvB,YAAI,2BAA2B;AAC/B,YAAI,2BAA2B;AAC/B,kBAAU,aAAa,SAAU,YAAY;AAC3C,cAAI,KAAK,MAAM,IAAI,QAAQ,WAAW,KAAK,WAAW;AAEtD,cAAI,IAAI;AACN,qCAAyB,KAAK,CAAC,IAAI,MAAM,IAAI,WAAW,KAAK,WAAW,MAAM,WAAW,KAAK,WAAW;AAAA;AAAA;AAG7G,aAAK,YAAY,SAAS;AAC1B,kBAAU,0BAA0B,SAAU,YAAY,GAAG;AAC3D,oBAAU,GAAG,WAAW,UAAU,GAAG,SAAU,GAAG;AAChD,sBAAU,GAAG,WAAW,UAAU,GAAG,SAAU,GAAG;AAChD,kBAAI,MAAM,KAAK,MAAM,GAAG;AACtB,oBAAI,KAAK,MAAM,IAAI,QAAQ,WAAW,MAAM,GAAG,WAAW,MAAM;AAEhE,oBAAI,IAAI;AACN,2CAAyB,KAAK,CAAC,IAAI,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAKvD,mCAAyB,GAAG,KAAK;AAAA;AAEnC,kBAAU,0BAA0B,SAAU,mBAAmB;AAC/D,8BAAoB,MAAM,QAAQ,qBAAmB;AAAA;AAEvD,kBAAU,0BAA0B,SAAU,yBAAyB;AACrE,8BAAoB,MAAM,QAAQ,qBAAmB;AAAA;AAAA;AAAA,OAUxD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,YAAY;AACxC,YAAI,kBAAkB,IAAI,cAAU,IAAI,eAAW,GAAG,IAAI,IAAI,eAAW,WAAW,KAAK,WAAW,MAAM,IAAI,eAAW,WAAW,MAAM,WAAW,UAAU,GAAG,WAAW,MAAM,WAAW,UAAU;AACxM,YAAI,SAAS;AACb,kBAAU,KAAK,aAAa,SAAU,KAAK;AACzC,cAAI,eAAe,IAAI,cAAU,IAAI,eAAW,GAAG,IAAI,IAAI,eAAW,IAAI,KAAK,IAAI,MAAM,IAAI,eAAW,IAAI,MAAM,IAAI,UAAU,GAAG,IAAI,MAAM,IAAI,UAAU;AAE3J,cAAI,aAAa,SAAS,kBAAkB;AAC1C,qBAAS;AACT,mBAAO;AAAA;AAGT,iBAAO;AAAA;AAET,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,KAAK,QAAQ;AACvD,YAAI,cAAc,KAAK,IAAI,KAAK;AAEhC,eAAO,eAAe,KAAK,IAAI,eAAe,uBAAuB,YAAY,KAAK,OAAO,OAAO,KAAK,IAAI,kBAAkB,uBAAuB,YAAY,KAAK,OAAO;AAAA;AAAA,OAW/K;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,KAAK,QAAQ;AACpD,YAAI,cAAc,KAAK,IAAI,KAAK;AAEhC,YAAI,CAAC,eAAe,KAAK,4BAA4B,KAAK,SAAS;AACjE,iBAAO,IAAI,eAAW,KAAK;AAAA;AAG7B,YAAI,qBAAqB,KAAK,IAAI,eAAe,uBAAuB,YAAY,KAAK;AACzF,YAAI,wBAAwB,KAAK,IAAI,kBAAkB,uBAAuB,YAAY,KAAK;AAC/F,eAAO,IAAI,eAAW,oBAAoB;AAAA;AAAA,OAU3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,WAAW,QAAO,OAAO;AACxD,YAAI,SAAS;AAEb,YAAI,cAAc,CAAC,GAAG;AAEtB,gBAAQ;AAAA,eACD;AACH,wBAAY,MAAM;AAClB;AAAA,eAEG;AACH,wBAAY,MAAM;AAClB;AAAA,eAEG;AACH,wBAAY,MAAM;AAClB;AAAA,eAEG;AACH,wBAAY,MAAM;AAClB;AAAA;AAAA;AAKJ,kBAAU,KAAK,aAAa,SAAU,cAAc;AAClD,uBAAa,MAAM,aAAa;AAAA;AAElC,yBAAiB,KAAK,YAAY,SAAS,GAAG,GAAG,SAAU,GAAG;AAC5D,cAAI,eAAe,OAAO,YAAY;AAEtC,cAAI,gBAAgB,aAAa,SAAS;AACxC,mBAAO,YAAY,OAAO,OAAO,YAAY,QAAQ,eAAe;AAAA;AAAA;AAAA;AAAA,QAIxE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,OAAO,gCAAgC,eAAe;AACpD,eAAO,aAAa,qBAAoB,qBAAkB,yBAAuB,CAAC,iCAAiC,MAAM,oJAAoJ,CAAC,iCAAiC,MAAM,8JAA8J,cAAc,KAAK,cAAc;AAAA;AAAA;AAIxf,WAAO;AAAA;AAGT,MAAO,0BAAQ;;;AGzWf,oCAAO;AAKP,gCAAO;AAvBP,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAe/D,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAY/Q,MAAI,uBAAoC,2BAAY;AAClD,mCAA8B,QAAQ;AACpC,yBAAgB,MAAM;AAOtB,WAAK,SAAS;AAOd,WAAK,wBAAwB,KAAK,OAAO;AAQzC,WAAK,kBAAkB;AAAA;AASzB,oBAAa,uBAAsB,CAAC;AAAA,MAClC,KAAK;AAAA,MACL,OAAO,kCAAkC,eAAe;AACtD,YAAI,cAAc,OAAO,cAAc,MAAM,cAAc,OAAO,cAAc,IAAI;AAClF,cAAI,aAAa,KAAK,sBAAsB,IAAI,cAAc,IAAI,cAAc;AAEhF,cAAI,YAAY;AACd,0BAAc,KAAK,cAAc,KAAK,WAAW,UAAU;AAC3D,0BAAc,KAAK,cAAc,KAAK,WAAW,UAAU;AAAA;AAAA;AAAA;AAAA,OAYhE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,eAAe,WAAW;AACrD,YAAI,YAAY;AAEhB,YAAI,UAAU,OAAO,cAAc,MAAM,UAAU,OAAO,cAAc,MAAM,UAAU,OAAO,cAAc,IAAI;AAC/G,sBAAY;AAAA,mBACH,UAAU,OAAO,cAAc,MAAM,UAAU,OAAO,cAAc,MAAM,UAAU,OAAO,cAAc,IAAI;AACtH,sBAAY;AAAA,mBACH,UAAU,OAAO,cAAc,MAAM,UAAU,OAAO,cAAc,IAAI;AACjF,sBAAY;AAAA,eACP;AACL,sBAAY;AAAA;AAGd,eAAO;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,UAAU,UAAU,eAAe,kBAAkB;AAChF,YAAI,cAAc,SAAS,MAAM;AACjC,YAAI,WAAW,KAAK,gBAAgB,UAAU,UAAU;AAExD,YAAI,YAAY,iBAAe,UAAU,IACrC,mBAAmB,UAAU,IAC7B,sBAAsB,UAAU,IAChC,iBAAiB,UAAU,IAC3B,oBAAoB,UAAU;AAElC,YAAI,oBAAoB,CAAC,MAAM,QAAQ,QAAQ,iBAAiB;AAChE,YAAI,YAAY,oBAAoB,iBAAiB,mBAAmB,IAAI,oBAAoB,sBAAsB;AACtH,YAAI,QAAQ,KAAK,MAAM,WAAW,aAAa;AAC/C,YAAI,WAAW,WAAW;AAC1B,YAAI,qBAAqB,KAAK,sBAAsB,UAAU,UAAU,eAAe;AAEvF,YAAI,oBAAoB;AACtB,cAAI,kBAAkB,QAAQ;AAC5B,gBAAI,QAAO,mBAAmB,MAAM,mBAAmB,UAAU,mBAAmB;AACpF,gBAAI,WAAW,YAAY,KAAK;AAEhC,gBAAI,YAAY,KAAK,OAAO,IAAI,aAAa;AAC3C,0BAAY,MAAM;AAAA,mBACb;AACL,0BAAY,MAAM,WAAW,QAAO;AAAA;AAAA,qBAE7B,kBAAkB,SAAS;AACpC,gBAAI,QAAQ,mBAAmB,MAAM,mBAAmB,UAAU,sBAAsB;AAExF,gBAAI,YAAY,YAAY,KAAK;AAEjC,gBAAI,aAAa,KAAK,OAAO,IAAI,aAAa;AAC5C,0BAAY,MAAM;AAAA,mBACb;AACL,0BAAY,MAAM,WAAW,QAAQ;AAAA;AAAA,qBAE9B,kBAAkB,MAAM;AACjC,gBAAI,SAAS,iBAAiB,WAAW,mBAAmB,MAAM;AAElE,gBAAI,aAAa,YAAY,KAAK;AAElC,gBAAI,aAAa,GAAG;AAClB,0BAAY,MAAM;AAAA,mBACb;AACL,0BAAY,MAAM,WAAW,SAAS;AAAA;AAAA,qBAE/B,kBAAkB,QAAQ;AACnC,gBAAI,SAAS,oBAAoB,WAAW,mBAAmB,MAAM;AAErE,gBAAI,aAAa,YAAY,KAAK;AAElC,gBAAI,aAAa,GAAG;AAClB,0BAAY,MAAM;AAAA,mBACb;AACL,0BAAY,MAAM,WAAW,SAAS;AAAA;AAAA;AAAA;AAK5C,aAAK,uBAAuB;AAAA,UAC1B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV,aAAa;AAAA;AAEf,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,cAAc;AACnD,YAAI,CAAC,KAAK,iBAAiB;AACzB,eAAK,kBAAkB;AAAA;AAGzB,gBAAO,KAAK,iBAAiB;AAAA;AAAA,OAY9B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,UAAU,UAAU,WAAW;AAC7D,YAAI,aAAa,iBAAe,UAAU,IACtC,mBAAmB,WAAW,IAC9B,sBAAsB,WAAW,IACjC,iBAAiB,WAAW,IAC5B,oBAAoB,WAAW;AAEnC,YAAI,YAAY,iBAAe,UAAU,IACrC,mBAAmB,UAAU,IAC7B,sBAAsB,UAAU,IAChC,iBAAiB,UAAU,IAC3B,oBAAoB,UAAU;AAElC,gBAAQ;AAAA,eACD;AACH,mBAAO,mBAAmB;AAAA,eAEvB;AACH,mBAAO,iBAAiB;AAAA,eAErB;AACH,mBAAO,sBAAsB;AAAA,eAE1B;AACH,mBAAO,oBAAoB;AAAA;AAG3B,mBAAO;AAAA;AAAA;AAAA,OAaZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,UAAU,UAAU,WAAW;AACzD,YAAI,aAAa,iBAAe,UAAU,IACtC,mBAAmB,WAAW,IAC9B,sBAAsB,WAAW,IACjC,iBAAiB,WAAW,IAC5B,oBAAoB,WAAW;AAEnC,YAAI,aAAa,iBAAe,UAAU,IACtC,mBAAmB,WAAW,IAC9B,sBAAsB,WAAW,IACjC,iBAAiB,WAAW,IAC5B,oBAAoB,WAAW;AAEnC,gBAAQ;AAAA,eACD;AACH,mBAAO,CAAC,kBAAkB,qBAAqB,mBAAmB,GAAG;AAAA,eAElE;AACH,mBAAO,CAAC,iBAAiB,GAAG,qBAAqB,gBAAgB;AAAA,eAE9D;AACH,mBAAO,CAAC,kBAAkB,qBAAqB,gBAAgB,sBAAsB;AAAA,eAElF;AACH,mBAAO,CAAC,kBAAkB,oBAAoB,GAAG,gBAAgB;AAAA;AAGjE,mBAAO;AAAA;AAAA;AAAA,OAcZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,UAAU,UAAU,WAAW,iBAAiB;AACpF,YAAI,aAAa,iBAAe,UAAU,IACtC,mBAAmB,WAAW,IAC9B,sBAAsB,WAAW,IACjC,iBAAiB,WAAW,IAC5B,oBAAoB,WAAW;AAEnC,YAAI,oBAAoB,CAAC,MAAM,QAAQ,QAAQ,aAAa;AAC5D,YAAI,UAAU,oBAAoB,iBAAiB;AACnD,YAAI,YAAY,oBAAoB,mBAAmB;AACvD,YAAI,WAAW,KAAK,gBAAgB,UAAU,UAAU;AACxD,YAAI,YAAY,oBAAoB,iBAAiB,mBAAmB,IAAI,oBAAoB,sBAAsB;AACtH,YAAI,QAAQ,KAAK,MAAM,WAAW,aAAa;AAC/C,YAAI,WAAW,WAAW;AAC1B,YAAI,wBAAwB;AAC5B,YAAI,qBAAqB;AACzB,YAAI,2BAA2B;AAE/B,gBAAQ;AAAA,eACD;AACH,oCAAwB;AACxB,uCAA2B,UAAU,WAAW;AAChD;AAAA,eAEG;AACH,oCAAwB;AACxB,uCAA2B,UAAU,WAAW;AAChD;AAAA,eAEG;AACH,oCAAwB;AACxB,uCAA2B,YAAY,WAAW;AAClD;AAAA,eAEG;AACH,oCAAwB;AACxB,uCAA2B,YAAY,WAAW;AAClD;AAAA;AAAA;AAKJ,kBAAU,iBAAiB,SAAU,mBAAmB;AACtD,cAAI,kBAAkB,uBAAuB,6BAA6B,kBAAkB,UAAU,oBAAoB,YAAY;AACpI,iCAAqB;AAAA;AAAA;AAGzB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,SAAS;AACnD,YAAI,CAAC,KAAK,iBAAiB;AACzB;AAAA;AAGF,YAAI,YAAY,KAAK,oBAAoB;AACzC,YAAI,mBAAmB,KAAK,gBAAgB;AAC5C,YAAI,gBAAgB,KAAK,gBAAgB;AAEzC,YAAI,WAAW,mBAAkB,UAAS,SAAQ;AAChD,kBAAQ;AAAA,iBACD;AACH,qBAAO,SAAQ,MAAM,WAAU,UAAU,KAAK;AAAA,iBAE3C;AACH,qBAAO,SAAQ,MAAM,SAAQ,UAAU,IAAI,WAAU,UAAU,GAAG;AAAA,iBAE/D;AACH,qBAAO,SAAQ,MAAM,WAAU,UAAU,KAAK;AAAA,iBAE3C;AACH,qBAAO,SAAQ,MAAM,SAAQ,UAAU,IAAI,WAAU,UAAU,GAAG;AAAA;AAGlE,qBAAO;AAAA;AAAA;AAIb,YAAI,aAAa;AACjB,YAAI,UAAU;AACd,YAAI,aAAa;AAEjB,WAAG;AACD,mBAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK,GAAG;AACnD,sBAAU,iBAAiB;AAC3B,yBAAa,aAAa,KAAK,gBAAgB;AAE/C,gBAAI,SAAS,SAAS,aAAa;AACjC,sBAAQ;AAAA,qBACD;AACH,uBAAK,OAAO,sBAAsB,IAAI;AAAA,oBACpC,KAAK,QAAQ,MAAM;AAAA,oBACnB,SAAS,QAAQ;AAAA,oBACjB,KAAK,QAAQ;AAAA,oBACb,SAAS,QAAQ;AAAA;AAEnB;AAAA,qBAEG;AACH,uBAAK,OAAO,sBAAsB,IAAI;AAAA,oBACpC,KAAK,QAAQ,MAAM;AAAA,oBACnB,SAAS,QAAQ;AAAA,oBACjB,KAAK,QAAQ;AAAA,oBACb,SAAS,QAAQ;AAAA;AAEnB;AAAA,qBAEG;AACH,uBAAK,OAAO,sBAAsB,IAAI;AAAA,oBACpC,KAAK,QAAQ;AAAA,oBACb,SAAS,QAAQ;AAAA,oBACjB,KAAK,QAAQ,MAAM;AAAA,oBACnB,SAAS,QAAQ;AAAA;AAEnB;AAAA,qBAEG;AACH,uBAAK,OAAO,sBAAsB,IAAI;AAAA,oBACpC,KAAK,QAAQ;AAAA,oBACb,SAAS,QAAQ;AAAA,oBACjB,KAAK,QAAQ,MAAM;AAAA,oBACnB,SAAS,QAAQ;AAAA;AAEnB;AAAA;AAAA;AAAA;AAMN,gBAAI,MAAM,iBAAiB,SAAS,GAAG;AACrC,4BAAc;AAAA;AAAA;AAAA,iBAGX,SAAS,SAAS;AAE3B,aAAK,kBAAkB;AACvB,aAAK,OAAO,IAAI;AAAA;AAAA,OAUjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,SAAS;AAC3C,YAAI,QAAQ;AAEZ,YAAI,OAAO;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AAAA;AAEP,YAAI,UAAU;AAAA,UACZ,KAAK;AAAA,UACL,KAAK;AAAA;AAEP,kBAAU,SAAS,SAAU,QAAQ;AACnC,cAAI,WAAW,OAAO;AAEtB,cAAI,cAAc,MAAM,OAAO,IAAI,UAAU,OAAO;AAEpD,cAAI,KAAK,QAAQ,QAAQ,WAAW,KAAK,KAAK;AAC5C,iBAAK,MAAM;AAAA;AAGb,cAAI,KAAK,QAAQ,QAAQ,WAAW,KAAK,KAAK;AAC5C,iBAAK,MAAM;AAAA;AAGb,cAAI,QAAQ,QAAQ,QAAQ,cAAc,QAAQ,KAAK;AACrD,oBAAQ,MAAM;AAAA;AAGhB,cAAI,QAAQ,QAAQ,QAAQ,cAAc,QAAQ,KAAK;AACrD,oBAAQ,MAAM;AAAA;AAAA;AAGlB,eAAO;AAAA,UACL,MAAM;AAAA,YACJ,KAAK,KAAK;AAAA,YACV,QAAQ,QAAQ;AAAA;AAAA,UAElB,IAAI;AAAA,YACF,KAAK,KAAK;AAAA,YACV,QAAQ,QAAQ;AAAA;AAAA;AAAA;AAAA,OAarB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,UAAU,UAAU,WAAW;AACzE,YAAI,WAAW,KAAK,YAAY,UAAU,UAAU;AAEpD,YAAI,aAAa,iBAAe,UAAU,IACtC,mBAAmB,WAAW,IAC9B,sBAAsB,WAAW,IACjC,iBAAiB,WAAW,IAC5B,oBAAoB,WAAW;AAEnC,YAAI,UAAU,IAAI,eAAW,kBAAkB;AAC/C,YAAI,cAAc,IAAI,eAAW,gBAAgB;AACjD,YAAI,YAAY,IAAI,cAAU,SAAS,SAAS;AAChD,eAAO,CAAC,CAAC,KAAK,sBAAsB,eAAe,WAAW;AAAA;AAAA;AAIlE,WAAO;AAAA;AAGT,MAAO,mBAAQ;;;ACjhBf,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAU/Q,MAAI,wBAAqC,2BAAY;AACnD,oCAA+B,QAAQ;AACrC,yBAAgB,MAAM;AAOtB,WAAK,SAAS;AAOd,WAAK,mCAAmC;AAAA;AAY1C,oBAAa,wBAAuB,CAAC;AAAA,MACnC,KAAK;AAAA,MACL,OAAO,mBAAmB,OAAO,gBAAgB,YAAY;AAC3D,YAAI,aAAa,eAAe;AAChC,YAAI,SAAS,WAAW,MAAM,MAAM;AACpC,YAAI,YAAY,WAAW,MAAM,MAAM;AAEvC,YAAI,MAAM,KAAK;AACb,eAAK,mBAAmB,OAAO,YAAY;AAAA,mBAClC,MAAM,KAAK;AACpB,eAAK,mBAAmB,OAAO,YAAY;AAAA;AAAA;AAAA,OAY9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,OAAO,YAAY,UAAU;AAC9D,YAAI,YAAY,MAAM,OAAO,MAAM;AACnC,YAAI,gBAAgB;AACpB,YAAI,aAAa;AACjB,YAAI,YAAY;AAEhB,YAAI,MAAM,KAAK;AACb,0BAAgB,WAAW,mBAAmB;AAC9C,uBAAa,WAAW;AACxB,sBAAY,WAAW;AAAA,mBACd,MAAM,KAAK;AACpB,0BAAgB,WAAW,qBAAqB;AAChD,uBAAa,WAAW;AACxB,sBAAY,WAAW;AAAA;AAGzB,YAAI,cAAc,GAAG;AACnB;AAAA,mBACS,YAAY,GAAG;AACxB,cAAI,iBAAiB,aAAa,YAAY;AAC5C,yBAAa,YAAY,WAAW;AAAA;AAAA,mBAE7B,iBAAiB,aAAa,WAAW;AAClD,uBAAa,WAAW,aAAa;AAAA;AAGvC,YAAI,MAAM,KAAK;AACb,gBAAM,MAAM;AAAA,mBACH,MAAM,KAAK;AACpB,gBAAM,MAAM;AAAA;AAAA;AAAA,OAWf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,mBAAmB,OAAO;AACjE,eAAO,IAAI,cAAU,kBAAkB,WAAW,kBAAkB,MAAM,IAAI,eAAW,kBAAkB,GAAG,MAAM,MAAM,KAAK,kBAAkB,GAAG,MAAM,MAAM;AAAA;AAAA,OAYjK;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wCAAwC,YAAY,eAAe,oBAAoB,YAAY;AACxG,YAAI,WAAW,KAAK,IAAI,mBAAmB,IAAI,mBAAmB;AAClE,YAAI,cAAc,KAAK,IAAI,mBAAmB,IAAI,mBAAmB;AACrE,YAAI,SAAS,KAAK,IAAI,mBAAmB,IAAI,mBAAmB;AAChE,YAAI,YAAY,KAAK,IAAI,mBAAmB,IAAI,mBAAmB;AAEnE,YAAI,eAAe,QAAQ;AACzB;AAAA;AAGF,YAAI,8BAA8B,KAAK,OAAO,sBAAsB,4BAA4B,YAAY;AAE5G,YAAI,CAAC,6BAA6B;AAChC;AAAA;AAGF,YAAI,aAAa,KAAK,OAAO,sBAAsB,IAAI,YAAY;AAEnE,YAAI,CAAC,YAAY;AACf;AAAA;AAGF,YAAI,cAAc,WAAW;AAC7B,YAAI,iBAAiB,WAAW;AAChC,YAAI,+BAA+B,YAAY,WAAW,OAAO,eAAe,WAAW,OAAO,UAAU,eAAe,aAAa;AAExI,YAAI,8BAA8B;AAChC,iBAAO,GAAG,OAAO,KAAK,kCAAkC,KAAK,OAAO;AAAA,mBAC3D,KAAK,OAAO,sBAAsB,yBAAyB,YAAY,KAAK,OAAO,IAAI,qBAAqB;AAErH,iBAAO,GAAG,OAAO,KAAK,kCAAkC;AAAA;AAAA;AAAA,OAW3D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,YAAY,sBAAsB;AACzE,YAAI,6BAA6B;AAEjC,YAAI,CAAC,wBAAwB,CAAC,YAAY;AACxC,iBAAO;AAAA;AAGT,iBAAS,IAAI,GAAG,IAAI,WAAW,SAAS,KAAK,GAAG;AAC9C,mBAAS,IAAI,GAAG,IAAI,WAAW,SAAS,KAAK,GAAG;AAC9C,uCAA2B,KAAK,IAAI,eAAW,WAAW,MAAM,GAAG,WAAW,MAAM;AAAA;AAAA;AAIxF,iBAAS,IAAI,GAAG,IAAI,2BAA2B,QAAQ,KAAK,GAAG;AAC7D,cAAI,mBAAmB;AAEvB,mBAAS,IAAI,GAAG,IAAI,qBAAqB,QAAQ,KAAK,GAAG;AACvD,6BAAiB,KAAK,qBAAqB,GAAG,SAAS,2BAA2B;AAAA;AAGpF,cAAI,CAAC,iBAAiB,SAAS,OAAO;AACpC,mBAAO;AAAA;AAAA;AAIX,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kDAAkD;AACvD,YAAI,aAAa;AAEjB,iBAAS,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG;AAC9B,qBAAW,KAAK,GAAG,OAAO,KAAK,kCAAkC,KAAK,OAAO;AAAA;AAG/E,mBAAW,KAAK,GAAG,OAAO,KAAK,kCAAkC;AACjE,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;AAGT,MAAO,qBAAQ;;;ACrNA,2BAAyB,QAAQ;AAC9C,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,gBAAgB;AACpB,YAAI,MAAM,KAAK;AAEf,YAAI,KAAK;AACP,cAAI,OAAO,OAAO,sBAAsB,IAAI,IAAI,IAAI,IAAI;AAExD,cAAI,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,KAAK,UAAU,MAAM,IAAI,MAAM,KAAK,MAAM,KAAK,UAAU,MAAM,IAAI,IAAI;AAClI,mBAAO,KAAK,oBAAsB;AAAA;AAAA;AAItC,eAAO,KAAK,oBAAsB;AAAA;AAAA,MAEpC,UAAU,oBAAoB;AAC5B,eAAO;AAAA;AAAA,MAET,UAAU,oBAAoB;AAC5B,YAAI,MAAM,KAAK;AAEf,YAAI,CAAC,KAAK;AACR,iBAAO;AAAA;AAGT,YAAI,eAAe,mBAAiB,aAAa;AAAA,UAC/C,KAAK,IAAI;AAAA,UACT,KAAK,IAAI;AAAA,UACT,SAAS,IAAI,KAAK,IAAI,KAAK;AAAA,UAC3B,SAAS,IAAI,KAAK,IAAI,KAAK;AAAA;AAE7B,eAAO,gBAAgB,KAAK,UAAU;AAAA;AAAA,MAExC,QAAQ;AAAA;AAAA;;;ANzCZ,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAE/D,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAsCxM,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AACvB,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAC7B,MAAI,gBAAc,oBAAI;AAqBf,MAAI,aAA0B,yBAAU,aAAa;AAC1D,gBAAU,aAAY;AAEtB,QAAI,SAAS,eAAa;AAE1B,yBAAoB,aAAa;AAC/B,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAC1B,oBAAY,IAAI,yBAAuB,QAAQ;AAAA,QAC7C,mBAAmB;AAAA;AASrB,YAAM,wBAAwB;AAQ9B,YAAM,uBAAuB;AAQ7B,YAAM,wBAAwB;AAC9B,aAAO;AAAA;AAUT,oBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,wBAAwB,IAAI,wBAAsB;AACvD,aAAK,uBAAuB,IAAI,iBAAqB;AACrD,aAAK,wBAAwB,IAAI,mBAAsB;AACvD,aAAK,QAAQ,aAAa,WAAY;AACpC,iBAAO,OAAO,YAAY,MAAM,QAAQ;AAAA;AAE1C,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO,gBAAgB,MAAM,QAAQ;AAAA;AAE9C,aAAK,QAAQ,wBAAwB,WAAY;AAC/C,iBAAO,OAAO,uBAAuB,MAAM,QAAQ;AAAA;AAErD,aAAK,QAAQ,6BAA6B,WAAY;AACpD,iBAAO,OAAO,4BAA4B,MAAM,QAAQ;AAAA;AAE1D,aAAK,QAAQ,sBAAsB,WAAY;AAC7C,iBAAO,OAAO,qBAAqB,MAAM,QAAQ;AAAA;AAEnD,aAAK,QAAQ,uBAAuB,WAAY;AAC9C,iBAAO,OAAO,sBAAsB,MAAM,QAAQ;AAAA;AAEpD,aAAK,QAAQ,uBAAuB,WAAY;AAC9C,iBAAO,OAAO,sBAAsB,MAAM,QAAQ;AAAA;AAEpD,aAAK,QAAQ,2BAA2B,WAAY;AAClD,iBAAO,OAAO,sBAAsB,MAAM,QAAQ;AAAA;AAEpD,aAAK,QAAQ,qBAAqB,WAAY;AAC5C,iBAAO,OAAO,oBAAoB,MAAM,QAAQ;AAAA;AAElD,aAAK,QAAQ,4BAA4B,WAAY;AACnD,iBAAO,OAAO,2BAA2B,MAAM,QAAQ;AAAA;AAEzD,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO,gBAAgB,MAAM,QAAQ;AAAA;AAE9C,aAAK,QAAQ,kCAAkC,WAAY;AACzD,iBAAO,OAAO,6BAA6B,MAAM,QAAQ;AAAA;AAE3D,aAAK,QAAQ,oBAAoB,WAAY;AAC3C,iBAAO,OAAO,mBAAmB,MAAM,QAAQ;AAAA;AAEjD,aAAK,QAAQ,sCAAsC,WAAY;AAC7D,iBAAO,OAAO,qCAAqC,MAAM,QAAQ;AAAA;AAEnE,aAAK,QAAQ,yCAAyC,WAAY;AAChE,iBAAO,OAAO,wCAAwC,MAAM,QAAQ;AAAA;AAEtE,aAAK,QAAQ,uBAAuB,WAAY;AAC9C,iBAAO,OAAO,sBAAsB,MAAM,QAAQ;AAAA;AAEpD,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ,eAAe,WAAY;AACtC,iBAAO,OAAO,cAAc,MAAM,QAAQ;AAAA;AAE5C,aAAK,QAAQ,qBAAqB,WAAY;AAC5C,iBAAO,OAAO,wBAAwB,MAAM,QAAQ;AAAA;AAEtD,aAAK,QAAQ,sBAAsB,WAAY;AAC7C,iBAAO,OAAO,qBAAqB,MAAM,QAAQ;AAAA;AAEnD,aAAK,QAAQ,8BAA8B,WAAY;AACrD,iBAAO,OAAO,6BAA6B,MAAM,QAAQ;AAAA;AAE3D,aAAK,QAAQ,yBAAyB,SAAU,QAAQ,QAAQ;AAC9D,cAAI,WAAW,cAAc;AAC3B,mBAAO;AAAA;AAAA;AAIX,eAAK,kBAAgB,YAAW,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMxE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK;AACL,aAAK,IAAI;AAET,eAAK,kBAAgB,YAAW,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAMzE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,WAAW,KAAK,IAAI,cAAc;AACtC,aAAK;AACL,aAAK;AACL,aAAK,qBAAqB;AAE1B,eAAK,kBAAgB,YAAW,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAUxE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,SAAS;AACvC,YAAI,QAAQ;AAEZ,YAAI,CAAC,SAAS;AACZ,iBAAO;AAAA;AAGT,YAAI,mBAAiB,uBAAuB,UAAU;AACpD,eAAK,mBAAiB,wBAAwB;AAC9C,kBAAQ;AAAA,mBACC,mBAAiB,cAAc,SAAS,KAAK,IAAI,aAAa,KAAK,IAAI,cAAc;AAC9F,eAAK,mBAAiB,yBAAyB;AAC/C,kBAAQ;AAAA,mBACC,mBAAiB,aAAa,UAAU;AACjD,eAAK,mBAAiB,eAAe;AACrC,kBAAQ;AAAA,mBACC,mBAAiB,iBAAiB,UAAU;AACrD,eAAK,mBAAiB,kBAAkB;AACxC,kBAAQ;AAAA;AAGV,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,UAAU;AAC7C,YAAI,SAAS;AAEb,YAAI,MAAM,QAAQ,WAAW;AAC3B,cAAI;AAEJ,cAAI,0BAA0B;AAC9B,oBAAU,UAAU,SAAU,SAAS;AACrC,gBAAI,CAAC,OAAO,gBAAgB,UAAU;AACpC;AAAA;AAGF,gBAAI,YAAY,IAAI,eAAW,QAAQ,KAAK,QAAQ;AACpD,gBAAI,WAAW,IAAI,eAAW,QAAQ,MAAM,QAAQ,UAAU,GAAG,QAAQ,MAAM,QAAQ,UAAU;AACjG,gBAAI,aAAa,IAAI,cAAU,WAAW,WAAW;AACrD,oCAAwB,KAAK,OAAO,WAAW,YAAY,MAAM;AAAA;AAGnE,oCAA0B,wBAAwB,OAAO,SAAU,OAAO;AACxE,mBAAO,UAAU;AAAA;AAEnB,cAAI,qBAAqB,KAAK,sBAAsB;AAEpD,UAAC,aAAY,KAAK,KAAK,kBAAkB,MAAM,WAAW,qBAAmB;AAAA;AAAA;AAAA,OAWhF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,yBAAyB;AAC7D,YAAI;AAEJ,YAAI,sBAAsB,KAAK,2BAA2B;AAE1D,YAAI,cAAe,cAAa,KAAK,KAAK,QAAQ,MAAM,YAAY,qBAAmB;AAEvF,YAAI,iBAAiB,YAAY,OAAO;AACxC,kBAAU,yBAAyB,SAAU,qBAAqB;AAChE,cAAI,uBAAuB,iBAAe,qBAAqB,IAC3D,qBAAqB,qBAAqB,IAC1C,wBAAwB,qBAAqB,IAC7C,iBAAiB,qBAAqB;AAE1C,oBAAU,gBAAgB,SAAU,eAAe,UAAU;AAC3D,sBAAU,eAAe,SAAU,mBAAmB,aAAa;AACjE,6BAAe,qBAAqB,oBAAoB,KAAK,UAAU,wBAAwB,oBAAoB,KAAK,eAAe;AAAA;AAAA;AAAA;AAI7I,eAAO,CAAC,oBAAoB,IAAI,oBAAoB,IAAI;AAAA;AAAA,OAUzD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC,yBAAyB;AAClE,YAAI,SAAQ,CAAC,GAAG;AAChB,YAAI,OAAM,CAAC,GAAG;AACd,YAAI,gBAAgB;AACpB,YAAI,mBAAmB;AACvB,YAAI,iBAAiB;AACrB,kBAAU,yBAAyB,SAAU,qBAAqB;AAChE,0BAAgB,oBAAoB;AACpC,6BAAmB,oBAAoB;AACvC,2BAAiB,oBAAoB;AACrC,iBAAM,KAAK,KAAK,IAAI,eAAe,OAAM;AACzC,iBAAM,KAAK,KAAK,IAAI,kBAAkB,OAAM;AAC5C,eAAI,KAAK,KAAK,IAAI,gBAAgB,eAAe,SAAS,GAAG,KAAI;AACjE,eAAI,KAAK,KAAK,IAAI,mBAAmB,eAAe,GAAG,SAAS,GAAG,KAAI;AAAA;AAEzE,eAAO,GAAG,OAAO,QAAO;AAAA;AAAA,OAMzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,aAAK,sBAAsB;AAAA;AAAA,OAW5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,mBAAmB;AAC/C,YAAI,QAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/E,eAAO,QAAO,OAAO,KAAK,gBAAgB;AAAA;AAAA,OAQ3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,YAAI,eAAe,KAAK,IAAI;AAE5B,YAAI,CAAC,cAAc;AACjB;AAAA;AAGF,qBAAa,aAAa;AAC1B,YAAI,QAAO,aAAa,MACpB,KAAK,aAAa;AACtB,aAAK,YAAY;AACjB,aAAK,IAAI,WAAW,MAAK,KAAK,MAAK,KAAK,GAAG,KAAK,GAAG,KAAK;AAAA;AAAA,OAQzD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK,IAAI;AAE7F,YAAI,CAAC,WAAW;AACd;AAAA;AAGF,kBAAU,aAAa;AACvB,YAAI,QAAO,UAAU,MACjB,KAAK,UAAU;AACnB,aAAK,aAAa,WAAW;AAC7B,aAAK,WAAW;AAChB,aAAK,IAAI,WAAW,MAAK,KAAK,MAAK,KAAK,GAAG,KAAK,GAAG,KAAK;AAAA;AAAA,OAQzD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK,IAAI;AAE7F,YAAI,CAAC,WAAW;AACd;AAAA;AAGF,YAAI,QAAO,UAAU,MACjB,KAAK,UAAU;AACnB,aAAK,aAAa,WAAW;AAC7B,aAAK,IAAI,WAAW,MAAK,KAAK,MAAK,KAAK,GAAG,KAAK,GAAG,KAAK;AAAA;AAAA,OAczD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,WAAW;AACpC,YAAI,SAAS;AAEb,YAAI,QAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/E,YAAI,oBAAoB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC5F,YAAI,UAAU,UAAU;AACxB,YAAI,cAAc,UAAU;AAC5B,YAAI,cAAc;AAAA,UAChB,KAAK,QAAQ;AAAA,UACb,KAAK,QAAQ;AAAA,UACb,SAAS,YAAY,MAAM,QAAQ,MAAM;AAAA,UACzC,SAAS,YAAY,MAAM,QAAQ,MAAM;AAAA;AAE3C,YAAI,cAAc;AAClB,YAAI,iBAAiB;AAErB,YAAI,CAAC,KAAK,cAAc,aAAa,QAAO;AAC1C,iBAAO;AAAA;AAGT,aAAK,IAAI,SAAS,oBAAoB,WAAW;AACjD,kBAAU,GAAG,YAAY,UAAU,GAAG,SAAU,GAAG;AACjD,oBAAU,GAAG,YAAY,UAAU,GAAG,SAAU,GAAG;AACjD,gBAAI,eAAe;AAEnB,gBAAI,CAAC,YAAY,IAAI;AACnB,0BAAY,KAAK;AAAA;AAGnB,gBAAI,MAAM,KAAK,MAAM,GAAG;AACtB,6BAAe,OAAO,IAAI,cAAc,YAAY,KAAK,YAAY;AAAA,mBAChE;AACL,qBAAO,IAAI,YAAY,YAAY,MAAM,GAAG,YAAY,MAAM,GAAG,UAAU;AAAA;AAG7E,wBAAY,GAAG,KAAK;AAAA;AAAA;AAGxB,aAAK,IAAI,YAAY,YAAY,KAAK,YAAY,KAAK,WAAW;AAClE,YAAI,kBAAkB,KAAK,sBAAsB,IAAI;AAErD,YAAI,iBAAiB;AACnB,cAAI,mBAAmB;AACrB,6BAAiB,CAAC,YAAY,KAAK,YAAY,KAAK;AAAA,iBAC/C;AACL,iBAAK,IAAI,kBAAkB,YAAY,KAAK,YAAY,KAAK,aAAa,QAAQ,QAAQ,KAAK;AAAA;AAGjG,eAAK,IAAI,SAAS,mBAAmB,WAAW,aAAa;AAC7D,iBAAO;AAAA;AAGT,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,WAAW;AACtC,YAAI,SAAS;AAEb,YAAI,QAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/E,YAAI,cAAc,KAAK,sBAAsB,eAAe;AAE5D,YAAI,CAAC,aAAa;AAChB;AAAA;AAGF,aAAK,IAAI,SAAS,sBAAsB,WAAW;AACnD,kBAAU,aAAa,SAAU,mBAAmB;AAClD,iBAAO,sBAAsB,OAAO,kBAAkB,KAAK,kBAAkB;AAE7E,oBAAU,GAAG,kBAAkB,UAAU,GAAG,SAAU,GAAG;AACvD,sBAAU,GAAG,kBAAkB,UAAU,GAAG,SAAU,GAAG;AACvD,qBAAO,IAAI,eAAe,kBAAkB,MAAM,GAAG,kBAAkB,MAAM,GAAG;AAAA;AAAA;AAIpF,iBAAO,IAAI,eAAe,kBAAkB,KAAK,kBAAkB,KAAK;AAAA;AAE1E,aAAK,IAAI,SAAS,qBAAqB,WAAW;AAClD,aAAK,IAAI;AAAA;AAAA,OASV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,WAAW;AACrC,YAAI,aAAa,KAAK,sBAAsB,IAAI,UAAU,KAAK,KAAK,UAAU,KAAK;AACnF,YAAI,6BAA6B,WAAW,QAAQ,UAAU,KAAK,OAAO,WAAW,QAAQ,UAAU,KAAK,OAAO,WAAW,MAAM,WAAW,UAAU,MAAM,UAAU,GAAG,OAAO,WAAW,MAAM,WAAW,UAAU,MAAM,UAAU,GAAG;AAE5O,YAAI,4BAA4B;AAC9B,eAAK,aAAa;AAAA,eACb;AACL,eAAK,eAAe;AAAA;AAAA;AAAA,OAcvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAe,UAAU,aAAa,QAAQ,WAAW;AAC9D,YAAI,SAAQ,IAAI,eAAW,UAAU;AACrC,YAAI,OAAM,IAAI,eAAW,QAAQ;AACjC,aAAK,WAAW,IAAI,cAAU,QAAO,QAAO;AAAA;AAAA,OAa7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,UAAU,aAAa,QAAQ,WAAW;AAChE,YAAI,SAAQ,IAAI,eAAW,UAAU;AACrC,YAAI,OAAM,IAAI,eAAW,QAAQ;AACjC,aAAK,aAAa,IAAI,cAAU,QAAO,QAAO;AAAA;AAAA,OAQ/C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,aAAK,qBAAqB,KAAK,IAAI,cAAc;AACjD,aAAK,IAAI;AAAA;AAAA,OASV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAAyB,QAAO;AACrC,YAAI,WAAY,QAAM,WAAW,OAAM,YAAY,CAAC,OAAM;AAE1D,YAAI,YAAY,OAAM,YAAY,IAAI;AAEpC,eAAK,YAAY,KAAK,IAAI;AAC1B,eAAK,IAAI;AACT,mCAAyB;AAAA;AAAA;AAAA,OAW5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC,YAAY;AACrD,YAAI,YAAY;AACd,cAAI,cAAc,KAAK,sBAAsB;AAC7C,cAAI,iBAAiB,KAAK,IAAI;AAE9B,mBAAS,QAAQ,GAAG,QAAQ,YAAY,QAAQ,SAAS,GAAG;AAC1D,gBAAI,eAAe,KAAK,QAAQ,YAAY,OAAO,OAAO,eAAe,KAAK,QAAQ,YAAY,OAAO,OAAO,eAAe,GAAG,QAAQ,YAAY,OAAO,MAAM,YAAY,OAAO,UAAU,KAAK,eAAe,GAAG,QAAQ,YAAY,OAAO,MAAM,YAAY,OAAO,UAAU,GAAG;AACtR,qBAAO;AAAA;AAAA;AAAA;AAKb,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,OAAO;AAC5C,YAAI,OAAO,cAAY,IAAI;AAC3B,YAAI,yBAAyB,KAAK,IAAI;AACtC,YAAI,WAAW;AAAA,UACb,KAAK,MAAM;AAAA,UACX,KAAK,MAAM;AAAA;AAEb,YAAI,eAAe;AACnB,YAAI,kBAAkB,IAAI,eAAW,uBAAuB,UAAU,KAAK,uBAAuB,UAAU;AAC5G,YAAI,eAAe,KAAK,sBAAsB,IAAI,gBAAgB,KAAK,gBAAgB;AAEvF,YAAI,CAAC,KAAK,mBAAmB;AAC3B,eAAK,oBAAoB,IAAI,eAAW,MAAM;AAAA;AAGhD,YAAI,cAAc;AAEhB,cAAI,eAAe,IAAI,eAAW,aAAa,KAAK,aAAa;AACjE,cAAI,mBAAmB,IAAI,eAAW,aAAa,MAAM,aAAa,UAAU,GAAG,aAAa,MAAM,aAAa,UAAU;AAC7H,cAAI,aAAa,IAAI,cAAU,cAAc,cAAc;AAE3D,cAAI,CAAC,WAAW,SAAS,KAAK,oBAAoB;AAChD,iBAAK,oBAAoB,IAAI,eAAW,MAAM;AAAA;AAGhD,mBAAS,MAAM,KAAK,kBAAkB,MAAM,KAAK,kBAAkB,MAAM,gBAAgB,MAAM,SAAS;AACxG,mBAAS,MAAM,KAAK,kBAAkB,MAAM,KAAK,kBAAkB,MAAM,gBAAgB,MAAM,SAAS;AAExG,cAAI,MAAM,MAAM,GAAG;AAEjB,qBAAS,MAAM,aAAa,MAAM,aAAa,UAAU,IAAI,gBAAgB,MAAM,MAAM;AAAA,qBAChF,MAAM,MAAM,GAAG;AAExB,qBAAS,MAAM,gBAAgB,MAAM,aAAa,MAAM,MAAM;AAAA;AAGhE,cAAI,MAAM,MAAM,GAAG;AAEjB,qBAAS,MAAM,aAAa,MAAM,aAAa,UAAU,IAAI,gBAAgB,MAAM,MAAM;AAAA,qBAChF,MAAM,MAAM,GAAG;AAExB,qBAAS,MAAM,gBAAgB,MAAM,aAAa,MAAM,MAAM;AAAA;AAAA;AAIlE,uBAAe,IAAI,eAAW,uBAAuB,UAAU,MAAM,SAAS,KAAK,uBAAuB,UAAU,MAAM,SAAS;AACnI,YAAI,yBAAyB,KAAK,sBAAsB,IAAI,aAAa,KAAK,aAAa;AAE3F,YAAI,wBAAwB;AAE1B,cAAI,wBAAwB,KAAK,sBAAsB,yBAAyB,uBAAuB,KAAK,uBAAuB;AACnI,eAAK,oBAAoB;AACzB,qBAAW;AAAA,YACT,KAAK,sBAAsB,MAAM,gBAAgB;AAAA,YACjD,KAAK,sBAAsB,MAAM,gBAAgB;AAAA;AAAA;AAIrD,YAAI,SAAS,QAAQ,GAAG;AACtB,gBAAM,MAAM,SAAS;AAAA;AAGvB,YAAI,SAAS,QAAQ,GAAG;AACtB,gBAAM,MAAM,SAAS;AAAA;AAAA;AAAA,OAUxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,OAAO;AAC1C,YAAI,SAAS;AAEb,YAAI,wBAAwB,KAAK,IAAI;AACrC,YAAI,WAAW,MAAM;AACrB,YAAI,oBAAoB,KAAK,sBAAsB,yBAAyB,uBAAuB;AACnG,YAAI,YAAY,MAAM;AACtB,YAAI,yBAAyB,KAAK,sBAAsB,eAAe,mBAAmB;AAE1F,WAAG;AACD,sBAAY,MAAM;AAClB,eAAK,sBAAsB,yBAAyB,uBAAuB;AAC3E,oBAAU,wBAAwB,SAAU,YAAY;AACtD,mBAAO,sBAAsB,UAAU,UAAU,uBAAuB;AAAA;AAAA,iBAEnE,SAAS,QAAQ,UAAU,OAAO,SAAS,QAAQ,UAAU;AAEtE,cAAM,MAAM,SAAS;AACrB,cAAM,MAAM,SAAS;AAAA;AAAA,OAWtB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,KAAK,QAAQ;AACjD,YAAI,MAAM,KAAK,SAAS,GAAG;AACzB;AAAA;AAGF,YAAI,cAAc,KAAK,sBAAsB,IAAI,KAAK;AAEtD,YAAI,CAAC,aAAa;AAChB;AAAA;AAGF,YAAI,WAAW,YAAY,KACvB,cAAc,YAAY,KAC1B,UAAU,YAAY,SACtB,UAAU,YAAY;AAC1B,eAAO;AAAA,UACP;AAAA,UAAU;AAAA,UACV,WAAW,UAAU;AAAA,UAAG,cAAc,UAAU;AAAA;AAAA;AAAA,OASjD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sCAAsC,iBAAgB;AAC3D,wBAAe,MAAM,KAAK;AAAA,UACxB,MAAM;AAAA,WACL,gBAAgB;AAAA;AAAA,OAWpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,IAAI,KAAK,KAAK;AAC5C,YAAI,aAAa,KAAK,sBAAsB,IAAI,KAAK;AAErD,YAAI,iBAAiB,UAAS,cAAc,MAAM,cAAc;AAEhE,YAAI,UAAS,iBAAiB;AAC5B,cAAI,aAAa,KAAK,KAClB,YAAY,WAAW,gBACvB,eAAe,WAAW;AAC9B,cAAI,WAAW,eAAe,KAC1B,cAAc,eAAe,KAC7B,UAAU,eAAe,SACzB,UAAU,eAAe;AAE7B,cAAI,wBAAwB,KAAK,gCAAgC,UAAU,SAAS,aAAa,UAC7F,yBAAyB,iBAAe,uBAAuB,IAC/D,qBAAqB,uBAAuB,IAC5C,wBAAwB,uBAAuB;AAEnD,cAAI,mBAAmB,UAAU,6BAA6B;AAC9D,cAAI,sBAAsB,aAAa,6BAA6B;AACpE,cAAI,aAAa,qBAAqB,mBAAmB;AAEzD,cAAI,aAAa,wBAAwB,sBAAsB;AAG/D,yBAAe,MAAM,UAAU,uBAAuB,eAAe,KAAK;AAE1E,yBAAe,MAAM,aAAa,uBAAuB,eAAe,KAAK;AAE7E,yBAAe,UAAU,KAAK,IAAI,eAAe,SAAS;AAE1D,yBAAe,UAAU,KAAK,IAAI,eAAe,SAAS;AAAA;AAG5D,4BAAoB,IAAI,gBAAgB,KAAK;AAAA;AAAA,OAU9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,QAAQ;AAM5C,YAAI,KAAK,sBAAsB,4BAA4B,OAAO,KAAK,OAAO,MAAM;AAClF,cAAI,cAAc,KAAK,sBAAsB,IAAI,OAAO,KAAK,OAAO;AACpE,cAAI,OAAO,CAAC,YAAY,KAAK,YAAY;AACzC,iBAAO,MAAM,KAAK;AAClB,iBAAO,MAAM,KAAK;AAAA;AAAA;AAAA,OAarB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,QAAQ;AAC1C,YAAI,WAAW,KAAK,IAAI;AACxB,iBAAS,YAAY,IAAI,eAAW,SAAS,UAAU,KAAK,SAAS,UAAU;AAE/E,iBAAS,KAAK;AACd,YAAI,gBAAgB;AAEpB,YAAI,KAAK,IAAI,UAAU,8BAA8B,KAAK,IAAI,UAAU,yBAAyB;AAC/F;AAAA;AAGF,WAAG;AACD,0BAAgB;AAEhB,mBAAS,IAAI,GAAG,IAAI,KAAK,sBAAsB,YAAY,QAAQ,KAAK,GAAG;AACzE,gBAAI,WAAW,KAAK,sBAAsB,YAAY;AACtD,gBAAI,kBAAkB,SAAS;AAE/B,gBAAI,SAAS,cAAc,kBAAkB;AAC3C,qBAAO,MAAM,SAAS,GAAG;AACzB,qBAAO,MAAM,SAAS,GAAG;AACzB,8BAAgB;AAAA;AAAA;AAAA,iBAGb;AAAA;AAAA,OAWV;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,KAAK,KAAK,gBAAgB;AAC3D,YAAI,cAAc,KAAK,sBAAsB,IAAI,KAAK;AAEtD,YAAI,aAAa;AACf,cAAI,YAAY,QAAQ,OAAO,YAAY,QAAQ,KAAK;AACtD,2BAAe,WAAW;AAAA,iBACrB;AACL,2BAAe,UAAU,YAAY;AACrC,2BAAe,UAAU,YAAY;AAAA;AAAA;AAAA;AAAA,OAW1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8CAA8C,MAAM;AACzD,YAAI,cAAc,KAAK,IAAI;AAC3B,aAAK,uBAAuB,MAAM;AAClC,aAAK,qBAAqB,MAAM;AAAA;AAAA,OAUjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,MAAM,aAAa;AACxD,YAAI,YAAY,KAAK,IAAI;AACzB,YAAI,iBAAiB,UAAU,6BAA6B,KAAK;AAEjE,iBAAS,oBAAoB,GAAG,oBAAoB,aAAa,qBAAqB,GAAG;AACvF,cAAI,8BAA8B,KAAK,sBAAsB,IAAI,gBAAgB;AAEjF,cAAI,UAAS,8BAA8B;AACzC,gBAAI,8BAA8B,UAAU,6BAA6B,UAAU,uBAAuB,4BAA4B,KAAK;AAE3I,gBAAI,8BAA8B,KAAK,UAAU;AAE/C,mBAAK,WAAW;AAEhB,mBAAK,uBAAuB,MAAM;AAElC;AAAA;AAAA;AAAA;AAAA;AAAA,OAaP;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,MAAM,aAAa;AACtD,YAAI,YAAY,KAAK,IAAI;AACzB,YAAI,eAAe,UAAU,6BAA6B,KAAK;AAE/D,iBAAS,oBAAoB,GAAG,oBAAoB,aAAa,qBAAqB,GAAG;AACvF,cAAI,4BAA4B,KAAK,sBAAsB,IAAI,cAAc;AAE7E,cAAI,UAAS,4BAA4B;AACvC,gBAAI,WAAW,0BAA0B,MAAM,0BAA0B,UAAU;AACnF,gBAAI,4BAA4B,UAAU,6BAA6B,UAAU,uBAAuB,UAAU;AAElH,gBAAI,4BAA4B,KAAK,QAAQ;AAE3C,mBAAK,SAAS;AAEd,mBAAK,qBAAqB,MAAM;AAEhC;AAAA;AAAA;AAAA;AAAA;AAAA,OAYP;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iDAAiD,MAAM;AAC5D,YAAI,WAAW,KAAK,IAAI;AACxB,aAAK,0BAA0B,MAAM;AACrC,aAAK,wBAAwB,MAAM;AAAA;AAAA,OAUpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC,MAAM,UAAU;AACxD,YAAI,eAAe,KAAK,IAAI;AAC5B,YAAI,iBAAiB,aAAa,6BAA6B,KAAK;AAEpE,iBAAS,iBAAiB,GAAG,iBAAiB,UAAU,kBAAkB,GAAG;AAC3E,cAAI,8BAA8B,KAAK,sBAAsB,IAAI,gBAAgB;AAEjF,cAAI,UAAS,8BAA8B;AACzC,gBAAI,8BAA8B,aAAa,6BAA6B,aAAa,uBAAuB,4BAA4B,KAAK;AAEjJ,gBAAI,8BAA8B,KAAK,aAAa;AAElD,mBAAK,cAAc;AAEnB,mBAAK,0BAA0B,MAAM;AAErC;AAAA;AAAA;AAAA;AAAA;AAAA,OAaP;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,MAAM,UAAU;AACtD,YAAI,eAAe,KAAK,IAAI;AAC5B,YAAI,eAAe,aAAa,6BAA6B,KAAK;AAElE,iBAAS,iBAAiB,GAAG,iBAAiB,UAAU,kBAAkB,GAAG;AAC3E,cAAI,4BAA4B,KAAK,sBAAsB,IAAI,gBAAgB;AAE/E,cAAI,UAAS,4BAA4B;AACvC,gBAAI,WAAW,0BAA0B,MAAM,0BAA0B,UAAU;AACnF,gBAAI,4BAA4B,aAAa,6BAA6B,aAAa,uBAAuB,UAAU;AAExH,gBAAI,4BAA4B,KAAK,WAAW;AAE9C,mBAAK,YAAY;AAEjB,mBAAK,wBAAwB,MAAM;AAEnC;AAAA;AAAA;AAAA;AAAA;AAAA,OAsBP;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yCAAyC,WAAW,SAAS,cAAc,SAAS;AACzF,YAAI,aAAa,KAAK,KAClB,YAAY,WAAW,gBACvB,eAAe,WAAW;AAC9B,YAAI;AACJ,YAAI;AAEJ,YAAI,YAAY,GAAG;AACjB,8BAAoB,UAAU,uBAAuB,WAAW;AAAA,eAC3D;AACL,8BAAoB,UAAU,uBAAuB,YAAY,UAAU,GAAG;AAAA;AAGhF,YAAI,YAAY,GAAG;AACjB,iCAAuB,aAAa,uBAAuB,cAAc;AAAA,eACpE;AACL,iCAAuB,aAAa,uBAAuB,eAAe,UAAU,GAAG;AAAA;AAGzF,YAAI,gBAAgB,aAAa,IAAI,UAAU,6BAA6B,qBAAqB;AACjG,YAAI,mBAAmB,gBAAgB,IAAI,aAAa,6BAA6B,wBAAwB;AAC7G,eAAO,CAAC,eAAe;AAAA;AAAA,OAWxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,MAAM,QAAQ;AAClD,aAAK,qBAAqB,yBAAyB;AACnD,YAAI,gBAAgB,KAAK,qBAAqB,aAAa,QAAQ;AACnE,YAAI,WAAW;AAEf,YAAI,KAAK,qBAAqB,4BAA4B,QAAQ,UAAU,gBAAgB;AAC1F,qBAAW;AACX,iBAAO;AAAA;AAGT,YAAI,iCAAiC,KAAK,sBAAsB,eAAe;AAAA,UAC7E,MAAM;AAAA,YACJ,KAAK,OAAO;AAAA,YACZ,KAAK,OAAO;AAAA;AAAA,UAEd,IAAI;AAAA,YACF,KAAK,OAAO;AAAA,YACZ,KAAK,OAAO;AAAA;AAAA;AAIhB,YAAI,CAAC,gCAAgC;AACnC,iBAAO;AAAA;AAGT,mBAAW,KAAK,qBAAqB,aAAa,QAAQ,UAAU,eAAe;AACnF,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,QAAQ,OAAO;AAC9C,aAAK,sBAAsB,iBAAiB,SAAS,QAAQ;AAAA;AAAA,OAU9D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,QAAQ,OAAO;AAC9C,aAAK,sBAAsB,iBAAiB,QAAQ,QAAQ;AAAA;AAAA,OAW7D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,KAAK,OAAO,QAAQ;AACnD,YAAI,WAAW,QAAQ;AACrB;AAAA;AAGF,aAAK,sBAAsB,iBAAiB,QAAQ,KAAK;AAAA;AAAA,OAU1D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,KAAK,OAAO;AAC3C,aAAK,sBAAsB,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAUxD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAuB,SAAS,QAAQ;AAC7C,YAAI,WAAW,iBAAiB;AAC9B;AAAA;AAGF,aAAK,qBAAqB,4BAA4B;AAAA;AAAA,OAUvD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,SAAS,WAAW;AAC1D,YAAI,aAAa,cAAc,QAAQ;AACrC,cAAI,gBAAgB,KAAK,IAAI;AAC7B,cAAI,yBAAyB,KAAK,sBAAsB,eAAe;AACvE,oBAAU,wBAAwB,SAAU,YAAY;AACtD,gBAAI,cAAc,uBAAuB,QAAQ,WAAW,gBAAgB,cAAc,uBAAuB,QAAQ,WAAW,iBAAiB;AACnJ,sBAAQ,KAAK,WAAW;AACxB,sBAAQ,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,OAe/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qCAAqC,QAAQ,iBAAiB,iBAAiB;AACpF,YAAI,CAAC,KAAK,SAAS;AACjB;AAAA;AAGF,YAAI,qBAAqB,KAAK,sBAAsB,IAAI,OAAO,KAAK,OAAO;AAE3E,YAAI,CAAC,oBAAoB;AACvB;AAAA;AAGF,YAAI,YAAY,kBAAkB;AAClC,YAAI,UAAU,kBAAkB;AAChC,YAAI,YAAY,kBAAkB;AAClC,YAAI,aAAa,kBAAkB;AACnC,YAAI,yBAAyB,mBAAmB,MAAM,mBAAmB,UAAU,MAAM,KAAK,IAAI,cAAc;AAChH,YAAI,sBAAsB,mBAAmB,QAAQ;AACrD,YAAI,wBAAwB,mBAAmB,MAAM,mBAAmB,UAAU,MAAM,KAAK,IAAI,cAAc;AAC/G,YAAI,uBAAuB,mBAAmB,QAAQ;AAEtD,YAAI,aAAa,0BAA0B,WAAW,uBAAuB,cAAc,yBAAyB,aAAa,sBAAsB;AACrJ,iBAAO,MAAM,mBAAmB;AAChC,iBAAO,MAAM,mBAAmB;AAAA;AAAA;AAAA,OAcnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,YAAY,eAAe,oBAAoB,YAAY;AAE9F,YAAI,CAAC,oBAAoB;AACvB;AAAA;AAGF,eAAO,KAAK,sBAAsB,+BAA+B,YAAY,eAAe,oBAAoB;AAAA;AAAA,OASjH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wCAAwC;AAC7C,eAAO,KAAK,sBAAsB;AAAA;AAAA,QAElC,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AOn3CF,oCAAO;;;ACRP,oCAAO;AAKP,gCAAO;AAEP,qBAAkB,KAAK;AAAE,WAAO,kBAAgB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAErH,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAWxD,2BAAwB,eAAe,aAAa;AACzD,WAAO,SAAU,oBAAoB,wBAAwB;AAG3D,UAAI,sBAAsB,UAAS,qBAC/B,UAAS,oBAAoB,MAAM;AAEvC,UAAI,wBAAwB,UAAS,yBACjC,aAAa,sBAAsB,MAAM;AAE7C,aAAO,0BAA0B,QAAQ;AACvC,YAAI,eAAe,cAAc;AACjC,YAAI,aAAa,YAAY;AAC7B,YAAI,QAAQ,QAAO;AACnB,YAAI,YAAY,WAAW;AAC3B,YAAI,iBAAiB,WAAW;AAChC,YAAI,0BAAyB,eAAe,yBAAyB,eAAe,yBAAyB,0BAA0B,WAAW;AAClJ,YAAI,gBAAgB,wBAAuB,cAAc,YAAY,gBAAgB,OAAO;AAE5F,YAAI,kBAAkB,aAAa;AACjC,cAAI,mBAAmB,SAAS;AAEhC,cAAI,OAAO,YAAY,sBAAsB,aAAa;AACxD,mBAAO,iBAAiB;AAAA;AAAA;AAI5B,eAAO;AAAA,QACP;AAAA;AAAA;;;AC1DN,MAAI;AAEJ,oCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAQnK,sCAAoC;AACzC,SAAK,aAAa,qBAAoB,qBAAkB,yBAAuB,CAAC,sIAAsI,CAAC;AAAA;;;ACdzN,gCAAO;AAMP,MAAI,sBAAsB;AAUnB,4BAAyB,qBAAqB,QAAQ,mBAAmB;AAC9E,QAAI,aAAa;AAEjB,QAAI,sBAAsB,OAAO;AAC/B,aAAO;AAAA;AAGT,QAAI,oBAAoB,eAAe,WAAW,oBAAoB,6BAA6B,GAAG;AACpG,iBAAW,KAAK,GAAG,OAAO,qBAAqB,KAAK,OAAO,oBAAoB,4BAA4B,UAAU;AAAA;AAGvH,WAAO;AAAA;AASF,+BAA4B,aAAa;AAC9C,QAAI,aAAa,YAAY,UAAU,MAAM;AAC7C,QAAI,qBAAqB,IAAI,OAAO,IAAI,OAAO,qBAAqB;AACpE,WAAO,WAAW,OAAO,SAAU,UAAU;AAC3C,aAAO,mBAAmB,KAAK;AAAA;AAAA;;;AHxCnC,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAiBzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAUjM,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAC7B,MAAI,iCAAgC;AACpC,MAAI,wBAAwB;AAC5B,yBAAuB,cAAY;AAsD5B,MAAI,qBAAkC,yBAAU,gBAAgB;AACrE,gBAAU,qBAAoB;AAE9B,QAAI,SAAS,eAAa;AAE1B,iCAA4B,aAAa;AACvC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,YAAY;AAClB,aAAO;AAAA;AAUT,oBAAa,qBAAoB,CAAC;AAAA,MAChC,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,OAAK,kBAAgB,oBAAmB,YAAY,aAAa,MAAM,KAAK;AAAA;AAAA,OAMpF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,CAAC,KAAK,WAAW,KAAK,IAAI,cAAc,KAAK,cAAc,KAAK,IAAI,cAAc,wBAAwB;AAC5G;AAAA;AAGF,eAAK,kBAAgB,oBAAmB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMhF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,eAAK,kBAAgB,oBAAmB,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OA4BjF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,eAAc,YAAY;AAC/B,eAAK,kBAAgB,oBAAmB,YAAY,QAAQ,MAAM,KAAK,MAAM;AAAA;AAAA,OAM9E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAK,kBAAgB,oBAAmB,YAAY,aAAa,MAAM,KAAK;AAAA;AAAA,OAQ7E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,OAAK,kBAAgB,oBAAmB,YAAY,YAAY,MAAM,KAAK;AAAA;AAAA,OAWnF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ;AACpC,eAAO,OAAK,kBAAgB,oBAAmB,YAAY,iBAAiB,MAAM,KAAK,MAAM;AAAA;AAAA,OA2B9F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,YAAY;AACxC,eAAK,kBAAgB,oBAAmB,YAAY,iBAAiB,MAAM,KAAK,MAAM;AAAA;AAAA,OAYvF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oCAAoC;AACzC,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAErF,YAAI,MAAM,QAAQ,aAAa;AAC7B,iBAAO;AAAA;AAGT,eAAO,CAAC;AAAA;AAAA,OAUT;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,mBAAmB;AACrD,YAAI;AAEJ,iBAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,IAAI,OAAO,GAAG,OAAO,MAAM,QAAQ;AAC1G,eAAK,OAAO,KAAK,UAAU;AAAA;AAG7B,QAAC,WAAQ,OAAK,kBAAgB,oBAAmB,YAAY,uBAAuB,OAAO,KAAK,MAAM,SAAO,CAAC,MAAM,mBAAmB,OAAO;AAE9I,oBAAY,mBAAmB,oBAAmB;AAElD,YAAI,KAAK,YAAY,OAAO;AAC1B,mBAAS,mBAAmB,iBAAgB,MAAM,QAAQ;AAAA;AAAA;AAAA,OAW7D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,aAAa;AAC5C,YAAI,KAAK,IAAI,cAAc,KAAK,cAAc,KAAK,IAAI,cAAc,wBAAwB;AAC3F;AAAA;AAGF,eAAK,kBAAgB,oBAAmB,YAAY,oBAAoB,MAAM,KAAK,MAAM;AAAA;AAAA,OAU1F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,QAAO,QAAQ;AACpD,YAAI,yBAAyB,OAAO,KAAK,OAAO,KAAK,YAAW,OAAO;AACrE;AAAA;AAGF,YAAI,KAAK,0BAA0B,QAAO,OAAO,MAAM;AACrD,cAAI,oBAAoB;AACtB,iBAAK,IAAI;AACT,iBAAK,IAAI,cAAc,OAAO;AAC9B,iBAAK,KAAK,KAAK,kBAAkB,OAAO,KAAK;AAAA,iBACxC;AACL,iBAAK,KAAK,KAAK,oBAAoB,OAAO;AAAA;AAAA;AAAA;AAAA,QAI9C,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AIzVF,oCAAO;AAdP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAkBzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAOjM,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAOtB,MAAI,2BAAwC,yBAAU,aAAa;AACxE,gBAAU,2BAA0B;AAEpC,QAAI,SAAS,eAAa;AAK1B,uCAAkC,aAAa;AAC7C,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,eAAS,OAAO,KAAK,MAAM;AAK3B,aAAO,UAAU;AAOjB,aAAO,eAAe;AAKtB,aAAO,cAAc;AACrB,aAAO;AAAA;AAST,oBAAa,2BAA0B,CAAC;AAAA,MACtC,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,YAAI,CAAC,KAAK,cAAc;AACtB,eAAK,eAAe,IAAI,qBAAa;AAAA;AAGvC,aAAK;AAEL,eAAK,kBAAgB,0BAAyB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAQtF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,SAAS;AAEb,YAAI,QAAQ;AAEZ,YAAI,cAAc,KAAK,IAAI;AAO3B,mCAA2B,OAAO;AAChC,cAAI,MAAM,QAAQ,WAAW,GAAG;AAE9B,kBAAM,QAAQ,OAAO,GAAG,MAAM,QAAQ;AAEtC,mBAAO;AAAA;AAGT,cAAI,gBAAgB,MAAM,QAAQ,QAAQ;AAE1C,cAAI,kBAAkB,IAAI;AACxB,mBAAO;AAAA,qBACE,kBAAkB,GAAG;AAC9B,kBAAM,UAAU,MAAM,QAAQ,MAAM,GAAG;AAAA,qBAC9B,kBAAkB,GAAG;AAC9B,kBAAM,UAAU,MAAM,QAAQ,MAAM;AAAA;AAAA;AAIxC,aAAK,aAAa,iBAAiB,aAAa,cAAc,SAAU,QAAO;AAC7E,cAAI;AAEJ,cAAI,SAAS,OAAM,QAAQ,mCAAmC;AAC5D,4BAAgB,MAAM,IAAI;AAE1B,kBAAM,QAAQ,KAAK;AAEnB,kBAAM,kBAAkB;AAAA,cACtB,OAAO,cAAc;AAAA,cACrB,QAAQ,cAAc;AAAA,cACtB,WAAW,cAAc;AAAA;AAE3B,mBAAM;AACN,mBAAO;AAAA,qBACE,SAAS,OAAM,QAAQ,uCAAuC;AACvE,4BAAgB,MAAM,IAAI;AAE1B,kBAAM,QAAQ,KAAK;AAEnB,kBAAM,kBAAkB;AAAA,cACtB,OAAO,cAAc;AAAA,cACrB,QAAQ,cAAc;AAAA,cACtB,WAAW,cAAc;AAAA;AAE3B,mBAAM;AACN,mBAAO;AAAA;AAAA;AAGX,aAAK,aAAa,iBAAiB,aAAa,YAAY,SAAU,QAAO;AAC3E,cAAI,SAAS,OAAM,QAAQ,mCAAmC;AAC5D,8BAAkB,KAAK,OAAO;AAC9B,kBAAM,kBAAkB;AACxB,mBAAM;AACN,mBAAO;AAAA,qBACE,SAAS,OAAM,QAAQ,uCAAuC;AACvE,8BAAkB,KAAK,OAAO;AAC9B,kBAAM,kBAAkB;AACxB,mBAAM;AACN,mBAAO;AAAA;AAAA;AAGX,aAAK,aAAa,iBAAiB,aAAa,aAAa,SAAU,QAAO;AAC5E,cAAI,aAAa,OAAO,KACpB,aAAa,WAAW,YACxB,eAAe,WAAW;AAC9B,cAAI,YAAY,mBAAmB;AACnC,cAAI,aAAa,oBAAoB;AACrC,cAAI;AACJ,cAAI;AACJ,cAAI;AACJ,cAAI;AACJ,cAAI;AACJ,cAAI;AAEJ,cAAI,MAAM,QAAQ,WAAW,GAAG;AAC9B;AAAA;AAGF,cAAI,YAAY,aAAa,iBAAiB,OAAM,QAAQ,GAAG,UAAU,YAAY,OAAM,QAAQ,GAAG,UAAU;AAEhH,cAAI,CAAC,aAAa,cAAc,MAAM,aAAa;AACjD;AAAA;AAGF,cAAI,UAAU,aAAa,QAAQ,UAAU,aAAa,MAAM;AAC9D,2BAAe,MAAM,IAAI,UAAU;AAEnC,gBAAI,aAAa,QAAQ,IAAI;AAC3B,2BAAa,MAAM;AAAA;AAGrB,4BAAgB,MAAM,IAAI;AAC1B,yBAAa,cAAc;AAC3B,0BAAc,cAAc;AAC5B,6BAAiB,cAAc;AAE/B,gBAAI,eAAe,KAAK,gBAAgB,GAAG;AACzC,oBAAM,IAAI,UAAU,YAAY;AAAA;AAGlC,6BAAiB,MAAM,sBAAsB,eAAe,cAAc,MAAM,gBAAgB,WAAW,gBAAgB,MAAM,QAAQ;AAEzI,gBAAI,eAAe,UAAU,MAAM;AACjC,oBAAM,IAAI,UAAU,cAAc,eAAe;AAAA;AAGnD,kBAAM,IAAI,UAAU,YAAY,eAAe;AAE/C,kBAAM,cAAc;AAAA;AAGtB,iBAAM;AAAA;AAAA;AAAA,OAGT;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,eAAe,cAAc,qBAAqB,kBAAkB,eAAe;AACvH,YAAI,gBAAgB,cAAc;AAClC,YAAI,oBAAoB,cAAc;AACtC,YAAI,mBAAmB,cAAc;AACrC,YAAI,iBAAiB,cAAc;AACnC,YAAI,YAAY;AAAA,UACd,OAAO;AAAA,UACP,KAAK;AAAA;AAGP,gBAAQ;AAAA,eACD;AACH,oBAAQ;AAAA,mBACD;AAAA,mBACA;AACH,oBAAI,kBAAkB,WAAW;AAC/B,8BAAY;AAAA,oBACV,OAAO,IAAI,eAAW,aAAa,KAAK,cAAc,UAAU;AAAA,oBAChE,KAAK,IAAI,eAAW,iBAAiB,KAAK,aAAa;AAAA;AAAA,uBAEpD;AACL,8BAAY;AAAA,oBACV,OAAO,IAAI,eAAW,cAAc,UAAU,KAAK,aAAa;AAAA,oBAChE,KAAK,IAAI,eAAW,aAAa,KAAK,cAAc;AAAA;AAAA;AAIxD;AAAA,mBAEG;AACH,oBAAI,kBAAkB,eAAe;AACnC,8BAAY;AAAA,oBACV,OAAO,IAAI,eAAW,kBAAkB,KAAK,aAAa;AAAA,oBAC1D,KAAK,IAAI,eAAW,aAAa,KAAK,cAAc;AAAA;AAAA;AAIxD;AAAA;AAGA;AAAA;AAGJ;AAAA,eAEG;AACH,oBAAQ;AAAA,mBACD;AACH,oBAAI,kBAAkB,WAAW;AAC/B,8BAAY;AAAA,oBACV,OAAO;AAAA,oBACP,KAAK;AAAA;AAAA,uBAEF;AACL,4BAAU,MAAM;AAAA;AAGlB;AAAA,mBAEG;AACH,oBAAI,kBAAkB,WAAW;AAC/B,8BAAY;AAAA,oBACV,OAAO;AAAA,oBACP,KAAK;AAAA;AAAA,uBAEF;AACL,4BAAU,MAAM;AAAA;AAGlB;AAAA,mBAEG;AACH,oBAAI,kBAAkB,WAAW;AAC/B,8BAAY;AAAA,oBACV,OAAO;AAAA,oBACP,KAAK;AAAA;AAAA,uBAEF;AACL,4BAAU,MAAM;AAAA;AAGlB;AAAA,mBAEG;AACH,oBAAI,kBAAkB,WAAW;AAC/B,8BAAY;AAAA,oBACV,OAAO;AAAA,oBACP,KAAK;AAAA;AAAA,uBAEF;AACL,4BAAU,MAAM;AAAA;AAGlB;AAAA;AAGA;AAAA;AAGJ;AAAA,eAEG;AACH,oBAAQ;AAAA,mBACD;AACH,oBAAI,kBAAkB,eAAe;AACnC,8BAAY;AAAA,oBACV,OAAO,IAAI,eAAW,aAAa,KAAK,cAAc;AAAA,oBACtD,KAAK,IAAI,eAAW,iBAAiB,KAAK,aAAa;AAAA;AAAA,uBAEpD;AACL,8BAAY;AAAA,oBACV,OAAO,IAAI,eAAW,cAAc,KAAK,aAAa;AAAA,oBACtD,KAAK,IAAI,eAAW,aAAa,KAAK,kBAAkB;AAAA;AAAA;AAI5D;AAAA,mBAKG;AACH,oBAAI,kBAAkB,WAAW;AAC/B,8BAAY;AAAA,oBACV,OAAO,IAAI,eAAW,cAAc,UAAU,KAAK,aAAa;AAAA,oBAChE,KAAK,IAAI,eAAW,aAAa,KAAK,kBAAkB;AAAA;AAAA,uBAErD;AACL,8BAAY;AAAA,oBACV,OAAO,IAAI,eAAW,aAAa,KAAK,cAAc;AAAA,oBACtD,KAAK,IAAI,eAAW,cAAc,KAAK,aAAa;AAAA;AAAA;AAIxD;AAAA,mBAEG;AACH,oBAAI,kBAAkB,eAAe;AACnC,8BAAY;AAAA,oBACV,OAAO,IAAI,eAAW,aAAa,KAAK,eAAe;AAAA,oBACvD,KAAK,IAAI,eAAW,cAAc,KAAK,aAAa;AAAA;AAAA,2BAE7C,kBAAkB,WAAW;AACtC,8BAAY;AAAA,oBACV,OAAO;AAAA,oBACP,KAAK;AAAA;AAAA;AAIT;AAAA;AAGA;AAAA;AAGJ;AAAA,eAEG;AACH,oBAAQ;AAAA,mBACD;AAAA,mBACA;AAAA,mBACA;AACH,oBAAI,kBAAkB,WAAW;AAC/B,4BAAU,MAAM;AAAA;AAGlB;AAAA,mBAEG;AACH,oBAAI,kBAAkB,WAAW;AAC/B,4BAAU,MAAM;AAAA,uBACX;AACL,8BAAY;AAAA,oBACV,OAAO;AAAA,oBACP,KAAK;AAAA;AAAA;AAIT;AAAA;AAGA;AAAA;AAGJ;AAAA;AAGA;AAAA;AAGJ,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,QAAQ,SAAS;AAAA;AAAA,QAE7B,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;ACncF,oCAAO;;;ACXP,oCAAO;;;ACDP,oCAAO;;;ACFP,oCAAO;AAMP,gCAAO;;;ACaA,yCAAuC;AAC5C,QAAI,OAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,IAC3E,aAAa,KAAK,OAClB,QAAQ,eAAe,SAAS,KAAK,YACrC,eAAe,KAAK,SACpB,UAAU,iBAAiB,SAAS,IAAI,cACxC,mBAAmB,KAAK,aACxB,cAAc,qBAAqB,SAAS,IAAI,kBAChD,mBAAmB,KAAK,aACxB,cAAc,qBAAqB,SAAS,QAAQ,kBACpD,wBAAwB,KAAK,oBAC7B,qBAAqB,0BAA0B,SAAS,KAAK,uBAC7D,mBAAmB,KAAK,aACxB,cAAc,qBAAqB,SAAS,QAAQ,kBACpD,gBAAgB,KAAK,UACrB,WAAW,kBAAkB,SAAS,QAAQ,eAC9C,cAAc,KAAK,QACnB,SAAS,gBAAgB,SAAS,QAAQ,aAC1C,qBAAqB,KAAK,eAC1B,gBAAgB,uBAAuB,SAAS,QAAQ;AAE5D,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAWG,6CAA2C;AAChD,WAAO;AAAA,MACL,OAAO;AAAA,MACP,eAAe;AAAA;AAAA;;;ADvDnB,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AA8CzK,6BAA2B,gBAAgB;AAChD,QAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACvF,QAAI,qBAAqB;AAEzB,QAAI,iBAAiB,GAAG;AACtB,aAAO;AAAA;AAIT,cAAU,gBAAgB,SAAU,iBAAiB;AACnD,UAAI,UAAU;AACd,UAAI,cAAc;AAClB,yBAAmB,KAAK;AACxB,gBAAU,iBAAiB,SAAU,sBAAsB;AACzD,YAAI,iBAAiB;AAErB,YAAI,UAAS,uBAAuB;AAClC,cAAI,QAAQ,qBAAqB,OAC7B,UAAU,qBAAqB;AACnC,yBAAe,QAAQ,UAAU;AAEjC,cAAI,OAAO,YAAY,YAAY,UAAU,GAAG;AAC9C,2BAAe,UAAU;AACzB,2BAAe,cAAc;AAAA;AAAA,eAE1B;AACL,yBAAe,QAAQ,UAAU;AAAA;AAGnC,uBAAe,eAAe;AAC9B,YAAI,mBAAmB;AAEvB,YAAI,eAAe,cAAc;AAE/B,yBAAe,UAAU,eAAe,cAAe,eAAc;AACrE,yBAAe,cAAc,eAAe;AAC5C,6BAAmB;AAAA;AAGrB,gBAAQ,KAAK;AAEb,YAAI,eAAe,UAAU,GAAG;AAC9B,mBAAS,IAAI,GAAG,IAAI,eAAe,UAAU,GAAG,KAAK;AACnD,oBAAQ,KAAK;AAAA;AAAA;AAIjB,eAAO,CAAC;AAAA;AAAA;AAGZ,QAAI,gBAAgB,KAAK,IAAI,MAAM,MAAM,qBAAmB,SAAS,oBAAoB,SAAU,iBAAiB;AAClH,aAAO,gBAAgB;AAAA;AAGzB,cAAU,oBAAoB,SAAU,iBAAiB;AACvD,UAAI,gBAAgB,SAAS,eAAe;AAC1C,YAAI,kBAAkB,SAAS,IAAI,MAAM,gBAAgB,gBAAgB,SAAS,WAAY;AAC5F,iBAAO;AAAA;AAET,wBAAgB,OAAO,MAAM,iBAAiB,CAAC,gBAAgB,QAAQ,GAAG,OAAO,qBAAmB;AAAA;AAAA;AAGxG,WAAO;AAAA;;;AD7HT,MAAI,aAAY,CAAC,OAAO;AAOxB,qBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,2BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,UAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,0BAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,UAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,qCAAkC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS,+BAA8B,QAAQ;AAAW,QAAI,KAAK;AAAG,QAAI,OAAO,uBAAuB;AAAE,UAAI,mBAAmB,OAAO,sBAAsB;AAAS,WAAK,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAAE,cAAM,iBAAiB;AAAI,YAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,YAAI,CAAC,OAAO,UAAU,qBAAqB,KAAK,QAAQ;AAAM;AAAU,eAAO,OAAO,OAAO;AAAA;AAAA;AAAU,WAAO;AAAA;AAEne,0CAAuC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS;AAAI,QAAI,aAAa,OAAO,KAAK;AAAS,QAAI,KAAK;AAAG,SAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAAE,YAAM,WAAW;AAAI,UAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,aAAO,OAAO,OAAO;AAAA;AAAQ,WAAO;AAAA;AAE1S,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uCAAoC,KAAK,YAAY,OAAO;AAAE,gCAA2B,KAAK;AAAa,eAAW,IAAI,KAAK;AAAA;AAE/H,uCAAoC,KAAK,mBAAmB;AAAE,QAAI,kBAAkB,IAAI,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEpH,kCAA+B,UAAU,YAAY;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,WAAO,0BAAyB,UAAU;AAAA;AAE7K,qCAAkC,UAAU,YAAY;AAAE,QAAI,WAAW,KAAK;AAAE,aAAO,WAAW,IAAI,KAAK;AAAA;AAAa,WAAO,WAAW;AAAA;AAE1I,kCAA+B,UAAU,YAAY,OAAO;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,8BAAyB,UAAU,YAAY;AAAQ,WAAO;AAAA;AAExM,yCAAsC,UAAU,YAAY,QAAQ;AAAE,QAAI,CAAC,WAAW,IAAI,WAAW;AAAE,YAAM,IAAI,UAAU,kBAAkB,SAAS;AAAA;AAAqC,WAAO,WAAW,IAAI;AAAA;AAEjN,qCAAkC,UAAU,YAAY,OAAO;AAAE,QAAI,WAAW,KAAK;AAAE,iBAAW,IAAI,KAAK,UAAU;AAAA,WAAe;AAAE,UAAI,CAAC,WAAW,UAAU;AAAE,cAAM,IAAI,UAAU;AAAA;AAA+C,iBAAW,QAAQ;AAAA;AAAA;AAWjP,MAAI,4BAA4B,CAAC,SAAS;AAUjD,MAAI,QAAqB,oBAAI;AAE7B,MAAI,cAA2B,oBAAI;AAEnC,MAAI,gBAA6B,oBAAI;AAErC,MAAI,iBAA8B,2BAAY;AAC5C,+BAA0B;AACxB,yBAAgB,MAAM;AAEtB,kCAA2B,MAAM,OAAO;AAAA,QACtC,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,kCAA2B,MAAM,aAAa;AAAA,QAC5C,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,kCAA2B,MAAM,eAAe;AAAA,QAC9C,UAAU;AAAA,QACV,OAAO;AAAA;AAAA;AAIX,oBAAa,iBAAgB,CAAC;AAAA,MAC5B,KAAK;AAAA,MACL,OAOA,yBAAyB,cAAc;AACrC,+BAAsB,MAAM,eAAe;AAAA;AAAA,OAQ5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,YAAI,wBAAwB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEhG,+BAAsB,MAAM,OAAO,kBAAkB,uBAAuB,uBAAsB,MAAM;AAExG,+BAAsB,MAAM,aAAa,uBAAsB,MAAM,OAAO;AAAA;AAAA,OAQ7E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAO,uBAAsB,MAAM;AAAA;AAAA,OASpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,oBAAoB;AAC5C,YAAI,QAAQ;AAEZ,kBAAU,oBAAoB,SAAU,MAAM;AAC5C,cAAI,MAAM,KAAK,KACX,MAAM,KAAK,KACX,OAAO,0BAAyB,MAAM;AAE1C,cAAI,iBAAiB,MAAM,kBAAkB,KAAK;AAElD,cAAI,mBAAmB,MAAM;AAC3B,oBAAO,gBAAgB,MAAM;AAAA;AAAA;AAAA;AAAA,OAalC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAa,UAAU;AAC5B,kBAAU,uBAAsB,MAAM,QAAQ,SAAU,QAAQ;AAC9D,oBAAU,QAAQ,SAAU,gBAAgB;AAC1C,gBAAI,gBAAgB,SAAS,gBAAc,IAAI;AAE/C,gBAAI,UAAS,gBAAgB;AAC3B,sBAAO,gBAAgB,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,OAe7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,aAAa,aAAa;AAC1D,YAAI;AAEJ,YAAI,eAAe,uBAAsB,MAAM,gBAAgB,cAAc,GAAG;AAC9E,iBAAO;AAAA;AAGT,YAAI,kBAAkB,uBAAsB,MAAM,OAAO;AAEzD,YAAI,eAAe,gBAAgB,QAAQ;AACzC,iBAAO;AAAA;AAGT,eAAQ,yBAAwB,gBAAgB,kBAAkB,QAAQ,0BAA0B,SAAS,wBAAwB;AAAA;AAAA,OAatI;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,aAAa,aAAa;AAC3D,YAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACxF,YAAI,wBAAwB;AAE5B,YAAI,eAAe,uBAAsB,MAAM,gBAAgB,cAAc,GAAG;AAC9E,iBAAO;AAAA;AAGT,YAAI,kBAAkB,uBAAsB,MAAM,OAAO;AAEzD,YAAI,gBAAgB;AAEpB,iBAAS,IAAI,aAAa,IAAI,gBAAgB,QAAQ,KAAK;AACzD,cAAI,iBAAiB,gBAAgB;AAErC,cAAI,eAAe,eAAe;AAChC,kBAAM,IAAI,MAAM;AAAA;AAGlB,2BAAiB,eAAe;AAChC,gCAAsB,KAAK;AAE3B,cAAI,eAAe,UAAU,GAAG;AAC9B,iBAAK,eAAe,UAAU;AAAA;AAIhC,cAAI,kBAAkB,eAAe;AACnC;AAAA;AAIF,cAAI,gBAAgB,eAAe;AACjC,kBAAM,IAAI,MAAM;AAAA;AAAA;AAIpB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,eAAO,uBAAsB,MAAM;AAAA;AAAA,OAQpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,eAAO,uBAAsB,MAAM,eAAe,IAAI,uBAAsB,MAAM,OAAO,GAAG,SAAS;AAAA;AAAA,OAMtG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,+BAAsB,MAAM,OAAO;AAEnC,+BAAsB,MAAM,aAAa;AAAA;AAAA;AAI7C,WAAO;AAAA;;;AG7QT,oCAAO;AAYP,gCAAO;;;AClBP,oCAAO;AAWP,gCAAO;AAvBP,qBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,2BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,UAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,0BAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,UAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAoB3M,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAOzK,MAAI,mBAAmB;AAOvB,8BAA4B,UAAU,SAAS;AACpD,QAAI,mBAAmB,SAAS,KAAK,SAAS;AAE9C,aAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AAC3C,UAAI,qBAAqB,OAAO;AAC9B,eAAO;AAAA;AAGT,yBAAmB,mBAAmB,KAAK,KAAK,OAAO,IAAI,UAAU;AAAA;AAGvE,WAAO;AAAA;AAQF,MAAI,oBAAoB;AAO/B,+BAA6B,UAAU,SAAS;AAC9C,aAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AAC3C,UAAI,mBAAmB,oBAAoB,KAAK,KAAK,OAAO,IAAI,UAAU;AAE1E,UAAI,qBAAqB,OAAO;AAC9B,eAAO;AAAA;AAAA;AAIX,WAAO,SAAS,KAAK,SAAS;AAAA;AASzB,MAAI,eAAe;AAM1B,wBAAsB,UAAU,SAAS;AACvC,QAAI,QAAQ,CAAC;AAKb,wBAAmB;AACjB,UAAI,MAAM,WAAW,GAAG;AACtB;AAAA;AAGF,UAAI,OAAO,MAAM;AACjB,YAAM,KAAK,MAAM,OAAO,qBAAmB,KAAK;AAEhD,UAAI,SAAS,KAAK,SAAS,UAAU,OAAO;AAC1C;AAAA;AAAA;AAIJ;AAAA;AASF,MAAI,6BAA6B;AAOjC,MAAI,uBAAuB,oBAAI,IAAI,CAAC,CAAC,kBAAkB,qBAAqB,CAAC,mBAAmB,sBAAsB,CAAC,cAAc;AAKrI,MAAI,WAAwB,2BAAY;AAkBtC,uBAAkB,MAAM;AACtB,yBAAgB,MAAM;AAEtB,wBAAgB,MAAM,QAAQ;AAE9B,wBAAgB,MAAM,UAAU;AAEhC,wBAAgB,MAAM,UAAU;AAEhC,WAAK,OAAO;AAAA;AASd,oBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,kBAAkB,MAAM;AAC7B,aAAK,SAAS;AACd,aAAK,OAAO,KAAK;AAAA;AAAA,OA4BlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACnF,YAAI,aAAa,IAAI,UAAS,gBAAc,IAAI,SAAS;AAEzD,iBAAS,IAAI,GAAG,IAAI,SAAS,OAAO,QAAQ,KAAK;AAC/C,qBAAW,SAAS,KAAK,UAAU,SAAS,OAAO;AAAA;AAGrD,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,UAAU;AACxC,aAAK,OAAO,gBAAc,IAAI,SAAS;AACvC,aAAK,SAAS;AAEd,iBAAS,IAAI,GAAG,IAAI,SAAS,OAAO,QAAQ,KAAK;AAC/C,eAAK,SAAS,SAAS,OAAO;AAAA;AAAA;AAAA,OAcjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,UAAU;AACjC,YAAI,oBAAoB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAE5F,YAAI,CAAC,qBAAqB,IAAI,oBAAoB;AAChD,gBAAM,IAAI,MAAM,uBAAwB,OAAO,mBAAmB;AAAA;AAGpE,6BAAqB,IAAI,mBAAmB,KAAK,MAAM,UAAU;AAAA;AAAA,OAQlE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gBAAgB,UAAU;AAC/B,YAAI,UAAU;AAEd,YAAI,WAAU,kBAAiB,MAAM;AACnC,cAAI,mBAAmB,SAAS,KAAK,SAAS;AAE9C,cAAI,qBAAqB,SAAS,KAAK,WAAW,MAAM;AACtD,qBAAQ,KAAK;AAAA;AAAA;AAIjB,iBAAQ;AAAA;AAAA;AAIZ,WAAO;AAAA;;;AD7RT,qBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,2BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,UAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,0BAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,UAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AAqB/D,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uCAAoC,KAAK,YAAY,OAAO;AAAE,gCAA2B,KAAK;AAAa,eAAW,IAAI,KAAK;AAAA;AAE/H,uCAAoC,KAAK,mBAAmB;AAAE,QAAI,kBAAkB,IAAI,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEpH,kCAA+B,UAAU,YAAY;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,WAAO,0BAAyB,UAAU;AAAA;AAE7K,qCAAkC,UAAU,YAAY;AAAE,QAAI,WAAW,KAAK;AAAE,aAAO,WAAW,IAAI,KAAK;AAAA;AAAa,WAAO,WAAW;AAAA;AAE1I,kCAA+B,UAAU,YAAY,OAAO;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,8BAAyB,UAAU,YAAY;AAAQ,WAAO;AAAA;AAExM,yCAAsC,UAAU,YAAY,QAAQ;AAAE,QAAI,CAAC,WAAW,IAAI,WAAW;AAAE,YAAM,IAAI,UAAU,kBAAkB,SAAS;AAAA;AAAqC,WAAO,WAAW,IAAI;AAAA;AAEjN,qCAAkC,UAAU,YAAY,OAAO;AAAE,QAAI,WAAW,KAAK;AAAE,iBAAW,IAAI,KAAK,UAAU;AAAA,WAAe;AAAE,UAAI,CAAC,WAAW,UAAU;AAAE,cAAM,IAAI,UAAU;AAAA;AAA+C,iBAAW,QAAQ;AAAA;AAAA;AA2CxP,MAAI,aAA0B,oBAAI;AAElC,MAAI,cAA2B,oBAAI;AAEnC,MAAI,kBAA+B,oBAAI;AAEvC,MAAI,cAA2B,2BAAY;AAuBzC,0BAAqB,gBAAgB;AACnC,yBAAgB,MAAM;AAEtB,kCAA2B,MAAM,YAAY;AAAA,QAC3C,UAAU;AAAA,QACV,OAAO,oBAAI;AAAA;AAGb,kCAA2B,MAAM,aAAa;AAAA,QAC5C,UAAU;AAAA,QACV,OAAO,oBAAI;AAAA;AAGb,kCAA2B,MAAM,iBAAiB;AAAA,QAChD,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,6BAAsB,MAAM,iBAAiB;AAAA;AAS/C,oBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,eAAO,MAAM,KAAK,uBAAsB,MAAM,YAAY;AAAA;AAAA,OAS3D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,aAAa;AAC3C,YAAI;AAEJ,YAAI,uBAAsB,MAAM,aAAa,IAAI,cAAc;AAC7D,iBAAO,uBAAsB,MAAM,YAAY,IAAI,uBAAsB,MAAM,aAAa,IAAI;AAAA;AAGlG,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,aAAa,aAAa;AAChD,YAAI,WAAW,KAAK,gBAAgB;AAEpC,YAAI,CAAC,UAAU;AACb;AAAA;AAKF,YAAI,kBAAkB,cAAc,uBAAsB,MAAM,aAAa,IAAI;AAEjF,YAAI,eAAe;AACnB,YAAI;AAEJ,iBAAS,SAAS,SAAU,MAAM;AAChC,cAAI,aAAa,KAAK,MAClB,cAAc,WAAW,aACzB,kBAAkB,WAAW;AAEjC,cAAI,gBAAgB,iBAAiB;AACnC,gBAAI,mBAAmB,gBAAgB,mBAAmB,eAAe,cAAc,GAAG;AACxF,yBAAW;AACX,qBAAO;AAAA;AAGT,4BAAgB;AAAA;AAAA;AAGpB,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,QAAQ;AAEZ,YAAI,cAAc;AAElB,+BAAsB,MAAM,aAAa;AAEzC,kBAAU,uBAAsB,MAAM,aAAa,SAAU,MAAM;AACjE,cAAI,QAAQ,iBAAe,MAAM,IAC7B,UAAU,MAAM,GAAG,KAAK;AAG5B,mBAAS,IAAI,aAAa,IAAI,cAAc,SAAS,KAAK;AACxD,mCAAsB,OAAO,aAAa,IAAI,GAAG;AAAA;AAGnD,yBAAe;AAAA;AAAA;AAAA,OAQlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,aAAK;AAEL,YAAI,eAAe,uBAAsB,MAAM,iBAAiB;AAEhE,YAAI,cAAc;AAElB,eAAO,cAAc,cAAc;AACjC,cAAI,iBAAiB,uBAAsB,MAAM,iBAAiB,kBAAkB,GAAG;AAEvF,cAAI,WAAW,IAAI;AAEnB,iCAAsB,MAAM,YAAY,IAAI,aAAa;AAEzD,eAAK,YAAY,UAAU,aAAa,GAAG,eAAe;AAC1D,yBAAe,eAAe;AAAA;AAGhC,aAAK;AAAA;AAAA,OAWN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,YAAY,aAAa,aAAa;AAChE,YAAI,SAAS;AAEb,YAAI,mBAAmB,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAE3F,YAAI,kBAAkB,uBAAsB,MAAM,iBAAiB,mBAAmB,aAAa,aAAa;AAEhH,uBAAe;AACf,kBAAU,iBAAiB,SAAU,gBAAgB;AACnD,cAAI,WAAW,gBAAc,gBAAc,IAAI,iBAAiB,IAAI;AAAA,YAMlE,aAAa,cAAc;AAAA,YAO3B;AAAA;AAGF,cAAI;AAEJ,cAAI,gBAAgB,GAAG;AAErB,uBAAW,OAAO;AAClB,mBAAO;AAAA,iBACF;AACL,mBAAO,IAAI,SAAS;AACpB,uBAAW,SAAS;AAAA;AAGtB,cAAI,cAAc,uBAAsB,QAAQ,iBAAiB,kBAAkB;AACjF,mBAAO,YAAY,MAAM,aAAa,aAAa,eAAe;AAAA;AAGpE,yBAAe,eAAe;AAAA;AAAA;AAAA,OAOjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,+BAAsB,MAAM,YAAY;AAExC,+BAAsB,MAAM,aAAa;AAAA;AAAA;AAI7C,WAAO;AAAA;;;AEhVT,oCAAO;;;ACCP,oCAAO;;;ACAP,oCAAO;;;ACMA,2CAAyC,MAAM,UAAU;AAC9D,SAAK,SAAS,SAAU,MAAM;AAC5B,UAAI,OAAO,KAAK,MACZ,SAAS,KAAK;AAElB,UAAI,CAAC,KAAK,UAAU;AAClB,iBAAS,KAAK;AAEd,YAAI,OAAO,WAAW,GAAG;AACvB,mBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,KAAK;AACrC,qBAAS,KAAK,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAc/B,iCAA+B,OAAO,cAAc;AACzD,QAAI,SAAS,MAAM;AAEnB,QAAI,OAAO,WAAW,GAAG;AACvB;AAAA;AAGF,WAAO,OAAO,GAAG,KAAK;AAAA;AAkBjB,2CAAyC,MAAM;AACpD,WAAO,sBAAsB,MAAM,mBAAmB,KAAK,KAAK;AAAA;;;AD9B3D,sBAAoB,eAAe;AACxC,QAAI,WAAW,cAAc,MACzB,aAAa,cAAc;AAE/B,QAAI,CAAC,SAAS,eAAe,SAAS,YAAY,SAAS,eAAe,GAAG;AAC3E,aAAO;AAAA,QACL,sBAAsB,gCAAgC;AAAA;AAAA,QACtD,iBAAiB;AAAA,QACjB,qBAAqB;AAAA;AAAA;AAIzB,QAAI,kBAAkB,gCAAgC;AAEtD,QAAI,iBAAiB;AACnB,aAAO,WAAW,WAAW;AAAA;AAG/B,aAAS,cAAc;AACvB,QAAI,0BAA0B,WAAW,MAAM;AAC/C,QAAI,kBAAkB,oBAAI;AAC1B,QAAI,sBAAsB;AAE1B,QAAI,wBAAwB,SAAS,GAAG;AACtC,gBAAU,yBAAyB,SAAU,MAAM;AAEjD,aAAK,gBAAgB,KAAK,KAAK;AAC/B,aAAK,KAAK,aAAa;AACvB,YAAI,WAAW,KAAK;AAGpB,+BAAuB,SAAS;AAChC,wCAAgC,MAAM,SAAU,iBAAiB;AAC/D,0BAAgB,IAAI;AAAA;AAAA;AAAA,WAGnB;AACL,UAAI,UAAU,SAAS,SACnB,cAAc,SAAS,aACvB,cAAc,SAAS;AAG3B,4BAAsB,cAAc;AAGpC,eAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,wBAAgB,IAAI,cAAc;AAAA;AAAA;AAItC,kBAAc,OAAO,SAAU,MAAM;AACnC,UAAI,OAAO,KAAK;AAChB,WAAK,WAAW;AAEhB,UAAI,KAAK,WAAW,KAAK,aAAa;AACpC,aAAK,UAAU,KAAK;AACpB,aAAK,cAAc;AAAA,iBACV,gCAAgC,OAAO;AAChD,aAAK,cAAc,sBAAsB,MAAM;AAAA;AAAA;AAGnD,WAAO;AAAA,MACL,sBAAsB,gCAAgC;AACpD,eAAO,aAAa;AAAA;AAAA,MAEtB,iBAAiB,MAAM,KAAK;AAAA,MAC5B;AAAA;AAAA;;;ADjEG,wBAAsB,eAAe;AAC1C,QAAI;AAEJ,QAAI,WAAW,cAAc,MACzB,aAAa,cAAc;AAE/B,QAAI,SAAS,eAAe,SAAS,YAAY,SAAS,eAAe,GAAG;AAC1E,aAAO;AAAA,QACL,sBAAsB,gCAAgC;AAAA;AAAA,QACtD,iBAAiB;AAAA,QACjB,qBAAqB;AAAA;AAAA;AAIzB,QAAI,kBAAkB,gCAAgC;AAEtD,QAAI,iBAAiB;AACnB,aAAO,aAAa,WAAW;AAAA;AAGjC,aAAS,cAAc;AACvB,QAAI,0BAA0B,WAAW,MAAM;AAC/C,QAAI,kBAAkB,oBAAI;AAE1B,QAAI,wBAAwB,SAAS,GAAG;AACtC,gBAAU,yBAAyB,SAAU,MAAM;AACjD,wCAAgC,MAAM,SAAU,kBAAiB;AAC/D,0BAAgB,IAAI;AAAA;AAGtB,aAAK,KAAK,aAAa,KAAK;AAG5B,aAAK,SAAS,SAAU,MAAM;AAC5B,cAAI,OAAO,KAAK;AAChB,eAAK,WAAW;AAAA;AAAA;AAAA,WAGf;AACL,UAAI,cAAc,SAAS,aACvB,cAAc,SAAS;AAG3B,eAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,YAAI,kBAAkB,cAAc;AACpC,wBAAgB,IAAI;AAAA;AAAA;AAMxB,QAAI,sBAAsB,SAAS,UAAY,0BAAwB,sBAAsB,eAAe,gBAAgB,QAAQ,0BAA0B,SAAS,wBAAwB;AAC/L,kBAAc,OAAO,SAAU,MAAM;AACnC,UAAI,OAAO,KAAK;AAChB,WAAK,WAAW;AAEhB,UAAI,KAAK,WAAW,GAAG;AACrB,aAAK,UAAU;AACf,aAAK,cAAc;AAAA,iBACV,gCAAgC,OAAO;AAChD,aAAK,cAAc,sBAAsB,MAAM;AAAA;AAAA;AAGnD,WAAO;AAAA,MACL,sBAAsB,gCAAgC;AACpD,eAAO,WAAW;AAAA;AAAA,MAEpB,iBAAiB,MAAM,KAAK;AAAA,MAC5B;AAAA;AAAA;;;AG7FJ,MAAI;AAEJ,oCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAcnK,sBAAoB,eAAe,iBAAiB;AACzD,QAAI,CAAC,OAAO,UAAU,kBAAkB;AACtC,YAAM,IAAI,MAAM;AAAA;AAGlB,QAAI,cAAc,OAAO,SAAS,GAAG;AACnC,YAAM,IAAI,MAAM,aAAa,qBAAoB,qBAAkB,yBAAuB,CAAC,6HAA6H,CAAC;AAAA;AAG3N,QAAI,qBAAqB,cAAc,KAAK;AAE5C,QAAI,mBAAmB,SAAS,kBAAkB;AAChD;AAAA;AAGF,QAAI,oBAAoB;AACxB,kBAAc,OAAO,SAAU,MAAM;AACnC,UAAI,cAAc,KAAK,KAAK;AAE5B,UAAI,aAAa;AACf,4BAAoB;AACpB,eAAO;AAAA;AAAA;AAKX,QAAI,mBAAmB;AACrB;AAAA;AAGF,kBAAc,OAAO,SAAU,MAAM;AACnC,UAAI,OAAO,KAAK;AAChB,WAAK,mBAAmB,KAAK;AAE7B,UAAI,KAAK,UAAU,GAAG;AACpB,aAAK,WAAW;AAAA,aACX;AACL,aAAK,WAAW;AAAA;AAAA;AAAA;;;ACrDtB,MAAI;AAEJ,oCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAgBnK,sBAAoB,eAAe,iBAAiB;AACzD,QAAI,CAAC,OAAO,UAAU,kBAAkB;AACtC,YAAM,IAAI,MAAM;AAAA;AAGlB,QAAI,cAAc,OAAO,SAAS,GAAG;AACnC,YAAM,IAAI,MAAM,aAAa,qBAAoB,qBAAkB,yBAAuB,CAAC,6HAA6H,CAAC;AAAA;AAG3N,QAAI,qBAAqB,cAAc,KAAK;AAE5C,QAAI,CAAC,mBAAmB,SAAS,kBAAkB;AACjD;AAAA;AAGF,QAAI,oBAAoB;AACxB,kBAAc,OAAO,SAAU,MAAM;AACnC,UAAI,cAAc,KAAK,KAAK;AAE5B,UAAI,aAAa;AACf,4BAAoB;AACpB,eAAO;AAAA;AAAA;AAKX,QAAI,mBAAmB;AACrB;AAAA;AAGF,kBAAc,OAAO,SAAU,MAAM;AACnC,UAAI,OAAO,KAAK;AAChB,WAAK,mBAAmB,OAAO,KAAK,mBAAmB,QAAQ,kBAAkB;AAEjF,UAAI,CAAC,KAAK,YAAY,KAAK,UAAU,KAAK,aAAa;AACrD,aAAK,WAAW;AAAA;AAGlB,WAAK,WAAW;AAAA;AAAA;;;AL7CpB,MAAI,qBAAqB,oBAAI,IAAI,CAAC,CAAC,YAAY,eAAe,CAAC,UAAU,aAAa,CAAC,eAAe,aAAa,CAAC,eAAe;AAgB5H,mCAAiC,YAAY,eAAe,iBAAiB;AAClF,QAAI,CAAC,mBAAmB,IAAI,aAAa;AACvC,YAAM,IAAI,MAAM,8BAA+B,OAAO,YAAY;AAAA;AAGpE,WAAO,mBAAmB,IAAI,YAAY,eAAe;AAAA;;;AMnC3D,MAAI,aAAY,CAAC;AAEjB,qCAAkC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS,+BAA8B,QAAQ;AAAW,QAAI,KAAK;AAAG,QAAI,OAAO,uBAAuB;AAAE,UAAI,mBAAmB,OAAO,sBAAsB;AAAS,WAAK,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAAE,cAAM,iBAAiB;AAAI,YAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,YAAI,CAAC,OAAO,UAAU,qBAAqB,KAAK,QAAQ;AAAM;AAAU,eAAO,OAAO,OAAO;AAAA;AAAA;AAAU,WAAO;AAAA;AAEne,0CAAuC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS;AAAI,QAAI,aAAa,OAAO,KAAK;AAAS,QAAI,KAAK;AAAG,SAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAAE,YAAM,WAAW;AAAI,UAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,aAAO,OAAO,OAAO;AAAA;AAAQ,WAAO;AAAA;AA0CnS,0BAAwB,aAAa;AAC1C,QAAI,SAAS;AACb,cAAU,aAAa,SAAU,UAAU;AACzC,eAAS,SAAS,SAAU,MAAM;AAChC,YAAI,WAAW,KAAK;AACpB,YAAI,cAAc,SAAS,aACvB,cAAc,SAAS,aACvB,cAAc,SAAS,aACvB,qBAAqB,SAAS;AAClC,YAAI,qBAAqB,6BAA6B,QAAQ;AAC9D,YAAI,sBAAsB;AAE1B,iBAAS,IAAI,aAAa,IAAI,cAAc,aAAa,KAAK;AAC5D,cAAI,iBAAiB,mBAAmB,SAAS;AAEjD,cAAI,kBAAkB,qBAAqB;AACzC,+BAAmB,KAAK,gCAAgC;AAAA,iBACnD;AACL,gBAAI,qBAAqB,qBAAqB;AAC9C,+BAAmB,SAAS;AAC5B,+BAAmB,KAAK;AACxB,kCAAsB;AAAA;AAAA;AAAA;AAAA;AAK9B,WAAO;AAAA;AAST,gCAA8B,UAAU;AAEtC,QAAI,wBAAwB,4BAA4B,WACpD,qBAAqB,sBAAsB,oBAC3C,qBAAqB,0BAAyB,uBAAuB;AAEzE,WAAO;AAAA;AAWT,wCAAsC,OAAO,QAAO;AAClD,QAAI;AAEJ,QAAI,MAAM,QAAQ,MAAM,UAAS;AAC/B,iBAAW,MAAM;AAAA,WACZ;AACL,iBAAW;AACX,YAAM,UAAS;AAAA;AAGjB,WAAO;AAAA;;;AZrGT,MAAI,aAAY,CAAC;AAQjB,qBAAiB,QAAQ,gBAAgB;AAAE,QAAI,QAAO,OAAO,KAAK;AAAS,QAAI,OAAO,uBAAuB;AAAE,UAAI,UAAU,OAAO,sBAAsB;AAAS,wBAAmB,WAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,eAAO,OAAO,yBAAyB,QAAQ,KAAK;AAAA,WAAiB,MAAK,KAAK,MAAM,OAAM;AAAA;AAAY,WAAO;AAAA;AAE9U,2BAAuB,QAAQ;AAAE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAAE,UAAI,SAAS,AAAQ,UAAU,MAAlB,OAAuB,UAAU,KAAK;AAAI,UAAI,IAAI,UAAQ,OAAO,SAAS,MAAI,QAAQ,SAAU,KAAK;AAAE,0BAAgB,QAAQ,KAAK,OAAO;AAAA,WAAY,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,WAAW,UAAQ,OAAO,SAAS,QAAQ,SAAU,KAAK;AAAE,eAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ;AAAA;AAAA;AAAa,WAAO;AAAA;AAEjf,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,qCAAkC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS,+BAA8B,QAAQ;AAAW,QAAI,KAAK;AAAG,QAAI,OAAO,uBAAuB;AAAE,UAAI,mBAAmB,OAAO,sBAAsB;AAAS,WAAK,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAAE,cAAM,iBAAiB;AAAI,YAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,YAAI,CAAC,OAAO,UAAU,qBAAqB,KAAK,QAAQ;AAAM;AAAU,eAAO,OAAO,OAAO;AAAA;AAAA;AAAU,WAAO;AAAA;AAEne,0CAAuC,QAAQ,UAAU;AAAE,QAAI,UAAU;AAAM,aAAO;AAAI,QAAI,SAAS;AAAI,QAAI,aAAa,OAAO,KAAK;AAAS,QAAI,KAAK;AAAG,SAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAAE,YAAM,WAAW;AAAI,UAAI,SAAS,QAAQ,QAAQ;AAAG;AAAU,aAAO,OAAO,OAAO;AAAA;AAAQ,WAAO;AAAA;AAE1S,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uCAAoC,KAAK,YAAY,OAAO;AAAE,gCAA2B,KAAK;AAAa,eAAW,IAAI,KAAK;AAAA;AAE/H,uCAAoC,KAAK,mBAAmB;AAAE,QAAI,kBAAkB,IAAI,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEpH,kCAA+B,UAAU,YAAY,OAAO;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,8BAAyB,UAAU,YAAY;AAAQ,WAAO;AAAA;AAExM,qCAAkC,UAAU,YAAY,OAAO;AAAE,QAAI,WAAW,KAAK;AAAE,iBAAW,IAAI,KAAK,UAAU;AAAA,WAAe;AAAE,UAAI,CAAC,WAAW,UAAU;AAAE,cAAM,IAAI,UAAU;AAAA;AAA+C,iBAAW,QAAQ;AAAA;AAAA;AAExP,kCAA+B,UAAU,YAAY;AAAE,QAAI,aAAa,8BAA6B,UAAU,YAAY;AAAQ,WAAO,0BAAyB,UAAU;AAAA;AAE7K,yCAAsC,UAAU,YAAY,QAAQ;AAAE,QAAI,CAAC,WAAW,IAAI,WAAW;AAAE,YAAM,IAAI,UAAU,kBAAkB,SAAS;AAAA;AAAqC,WAAO,WAAW,IAAI;AAAA;AAEjN,qCAAkC,UAAU,YAAY;AAAE,QAAI,WAAW,KAAK;AAAE,aAAO,WAAW,IAAI,KAAK;AAAA;AAAa,WAAO,WAAW;AAAA;AAoC1I,MAAI,mBAA+B,oBAAI;AAEvC,MAAI,eAA4B,oBAAI;AAEpC,MAAI,eAA4B,oBAAI;AAEpC,MAAI,eAA4B,2BAAY;AAC1C,6BAAwB;AACtB,yBAAgB,MAAM;AAEtB,kCAA2B,MAAM,kBAAiB;AAAA,QAChD,UAAU;AAAA,QACV,OAAO,IAAI;AAAA;AAGb,kCAA2B,MAAM,cAAc;AAAA,QAC7C,UAAU;AAAA,QACV,OAAO,IAAI,YAAY,uBAAsB,MAAM;AAAA;AAGrD,kCAA2B,MAAM,cAAc;AAAA,QAC7C,UAAU;AAAA,QACV,OAAO,CAAC;AAAA;AAAA;AAIZ,oBAAa,eAAc,CAAC;AAAA,MAC1B,KAAK;AAAA,MACL,OAQA,kBAAkB,uBAAuB;AACvC,+BAAsB,MAAM,kBAAiB,QAAQ;AAErD,YAAI,WAAW;AAEf,YAAI;AACF,iCAAsB,MAAM,cAAc;AAAA,iBACnC,IAAP;AACA,iCAAsB,MAAM,cAAc;AAE1C,iCAAsB,MAAM,kBAAiB;AAE7C,qBAAW;AAAA;AAGb,+BAAsB,MAAM,cAAc,eAAe,uBAAsB,MAAM,cAAc;AAEnG,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,cAAc;AAC5C,+BAAsB,MAAM,kBAAiB,gBAAgB;AAAA;AAAA,OAa9D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,UAAU;AACvC,YAAI,QAAQ;AAEZ,YAAI,sBAAsB,SAAS,UAAU,SAAU,MAAM;AAC3D,cAAI,MAAM,KAAK,KACX,OAAO,0BAAyB,MAAM;AAE1C,iBAAO,gBAAc;AAAA,YACnB,KAAK,MAAM,IAAI,MAAM,iBAAiB,OAAO;AAAA,aAC5C;AAAA;AAGL,+BAAsB,MAAM,kBAAiB,UAAU;AAEvD,+BAAsB,MAAM,cAAc;AAE1C,+BAAsB,MAAM,cAAc,eAAe,uBAAsB,MAAM,cAAc;AAAA;AAAA,OAcpG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,UAAU;AACjC,+BAAsB,MAAM,kBAAiB,IAAI;AAEjD,+BAAsB,MAAM,cAAc;AAE1C,+BAAsB,MAAM,cAAc,eAAe,uBAAsB,MAAM,cAAc;AAAA;AAAA,OAYpG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,UAAU;AACjC,eAAO,YAAY,uBAAsB,MAAM,cAAc,YAAY,SAAU,KAAK,UAAU;AAChG,mBAAS,SAAS,SAAU,MAAM;AAChC,gBAAI,SAAS,SAAS,KAAK;AAE3B,gBAAI,WAAW,QAAQ;AACrB,kBAAI,KAAK;AAAA;AAAA;AAGb,iBAAO;AAAA,WACN;AAAA;AAAA,OAaJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAiC,QAAQ,aAAa,aAAa;AACxE,YAAI,cAAc,GAAG;AACnB,wBAAc,KAAK,iBAAiB;AAAA;AAGtC,YAAI,gBAAgB,uBAAsB,MAAM,cAAc,QAAQ,aAAa;AAEnF,YAAI;AAEJ,YAAI,eAAe;AACjB,yBAAe,wBAAyB,QAAQ,eAAe;AAE/D,iCAAsB,MAAM,cAAc,eAAe,uBAAsB,MAAM,cAAc;AAAA;AAGrG,eAAO;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC,QAAQ,aAAa;AAC7D,eAAO,KAAK,wBAAwB,QAAQ,IAAI;AAAA;AAAA,OA+BjD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,UAAU;AACzC,YAAI,cAAc,KAAK,IAAI,KAAK,kBAAkB;AAClD,YAAI,uBAAuB,cAAc;AACzC,YAAI,sBAAsB;AAC1B,eAAO,KAAK,IAAI,KAAK,IAAI,WAAW,aAAa,sBAAsB;AAAA;AAAA,OA+BxE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,aAAa;AAC5C,YAAI,cAAc,KAAK,IAAI,KAAK,kBAAkB;AAClD,YAAI,qBAAqB;AACzB,YAAI,oBAAoB,CAAC;AACzB,eAAO,KAAK,IAAI,KAAK,IAAI,cAAc,aAAa,oBAAoB;AAAA;AAAA,OAYzE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,aAAa,aAAa;AAC1D,YAAI,yBAAwB;AAE5B,YAAI,cAAc,GAAG;AACnB,wBAAc,KAAK,iBAAiB;AAAA;AAGtC,YAAI,eAAe,KAAK,kBAAkB;AACxC,iBAAO;AAAA;AAGT,eAAQ,2BAA0B,2BAAyB,uBAAsB,MAAM,cAAc,kBAAkB,QAAQ,4BAA2B,SAAS,SAAS,wBAAuB,kBAAkB,QAAQ,4BAA2B,SAAS,0BAAyB;AAAA;AAAA,OAY3R;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,aAAa,aAAa;AAC9D,YAAI,cAAc,GAAG;AACnB,wBAAc,KAAK,iBAAiB;AAAA;AAGtC,YAAI,OAAO,uBAAsB,MAAM,cAAc,QAAQ,aAAa;AAE1E,YAAI,CAAC,MAAM;AACT,iBAAO;AAAA;AAGT,eAAO,gBAAc,IAAI,KAAK;AAAA;AAAA,OAY/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,aAAa,aAAa;AAChE,YAAI;AAEJ,YAAI,QAAS,yBAAwB,KAAK,kBAAkB,aAAa,kBAAkB,QAAQ,0BAA0B,SAAS,wBAAwB;AAAA,UAC5J,QAAQ;AAAA,WAEN,SAAS,MAAM;AAEnB,YAAI,QAAQ;AACV,iBAAO;AAAA;AAGT,YAAI,iBAAiB,cAAc;AAEnC,eAAO,kBAAkB,GAAG;AAC1B,cAAI;AAEJ,cAAI,QAAS,0BAAyB,KAAK,kBAAkB,aAAa,qBAAqB,QAAQ,2BAA2B,SAAS,yBAAyB;AAAA,YAClK,QAAQ;AAAA,aAEN,aAAa,MAAM;AAEvB,cAAI,YAAY;AACd;AAAA;AAGF,4BAAkB;AAAA;AAGpB,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,eAAO,uBAAsB,MAAM,kBAAiB;AAAA;AAAA,OAQrD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,eAAO,uBAAsB,MAAM,kBAAiB;AAAA;AAAA,OAMrD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,+BAAsB,MAAM,cAAc;AAE1C,+BAAsB,MAAM,kBAAiB;AAE7C,+BAAsB,MAAM,cAAc;AAAA;AAAA;AAI9C,WAAO;AAAA;;;AavdT,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAQ/Q,MAAI,cAA0B,2BAAY;AACxC,yBAAoB,QAAQ;AAC1B,yBAAgB,MAAM;AAOtB,WAAK,gBAAgB;AAOrB,WAAK,YAAY;AAOjB,WAAK,cAAc;AAAA;AASrB,oBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,aAAK,YAAY,KAAK,cAAc,IAAI,aAAa,cAAc;AACnE,aAAK,gBAAgB,KAAK;AAC1B,aAAK,cAAc,IAAI,YAAY,YAAY,KAAK;AACpD,YAAI,UAAU,KAAK,UAAU,iBAAiB;AAC9C,YAAI,aAAa,QAAQ;AACzB,aAAK,YAAY,SAAS;AAE1B,iBAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,eAAK,YAAY,KAAK,QAAQ,GAAG;AAAA;AAGnC,aAAK,UAAU,WAAW,YAAY,KAAK;AAC3C,aAAK,YAAY;AACjB,aAAK,cAAc,IAAI;AAAA;AAAA,OASxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,WAAW;AACzC,YAAI,eAAe,KAAK,cAAc,IAAI;AAC1C,YAAI,WAAW,aAAa;AAC5B,YAAI,QAAQ,aAAa,cAAc;AACvC,YAAI,iBAAiB;AACrB,YAAI,oBAAoB,CAAC,CAAC,KAAK,cAAc,IAAI,cAAc;AAC/D,YAAI,UAAU,KAAK,cAAc;AACjC,YAAI,UAAU,KAAK,cAAc,IAAI;AACrC,YAAI,eAAe,UAAU;AAE7B,iBAAS,MAAM,GAAG,MAAM,SAAS,OAAO;AACtC,cAAI,KAAK,aAAa,cAAc;AACpC,2BAAiB;AAEjB,mBAAS,MAAM,GAAG,MAAM,SAAS,OAAO;AACtC,gBAAI,KAAK,aAAa,cAAc;AACpC,gBAAI,YAAY,MAAM,KAAK,cAAc,kBAAkB,KAAK;AAEhE,gBAAI,aAAa,CAAC,UAAU,UAAU;AACpC,kBAAI,QAAQ,cAAc;AACxB,oBAAI,UAAU,UAAU,GAAG;AACzB,mCAAiB;AAAA;AAGnB,oBAAI,mBAAmB;AACrB,4BAAU,SAAS;AAAA;AAAA;AAIvB,4BAAc,IAAI,UAAU;AAG5B,kBAAI,UAAU,YAAY,QAAW;AACnC,mBAAG,UAAU,UAAU;AAAA;AAGzB,iBAAG,YAAY;AAAA;AAAA;AAInB,gBAAM,YAAY;AAAA;AAIpB,YAAI,gBAAgB;AAClB;AACE,gBAAI,MAAM,aAAa,cAAc;AAErC,qBAAS,OAAO,GAAG,OAAO,SAAS,QAAQ;AACzC,kBAAI,MAAM,aAAa,cAAc;AAErC,kBAAI,YAAY;AAAA;AAGlB,kBAAM,YAAY;AAAA;AAAA;AAItB,iBAAS,YAAY;AACrB,kBAAU,YAAY;AAAA;AAAA,OAMvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB;AACtB,aAAK,YAAY;AACjB,aAAK,YAAY,SAAS;AAAA;AAAA;AAI9B,WAAO;AAAA;AAGT,MAAO,sBAAQ;;;AdnJf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAazU,MAAI;AAAJ,MAAqB;AAErB,oCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAU1K,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAExM,6BAAyB,KAAK,KAAK,OAAO;AAAE,QAAI,OAAO,KAAK;AAAE,aAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU;AAAA,WAAgB;AAAE,UAAI,OAAO;AAAA;AAAS,WAAO;AAAA;AAE3M,wCAAoC,KAAK,YAAY,OAAO;AAAE,iCAA2B,KAAK;AAAa,eAAW,IAAI,KAAK;AAAA;AAE/H,wCAAoC,KAAK,mBAAmB;AAAE,QAAI,kBAAkB,IAAI,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEpH,mCAA+B,UAAU,YAAY,OAAO;AAAE,QAAI,aAAa,+BAA6B,UAAU,YAAY;AAAQ,+BAAyB,UAAU,YAAY;AAAQ,WAAO;AAAA;AAExM,sCAAkC,UAAU,YAAY,OAAO;AAAE,QAAI,WAAW,KAAK;AAAE,iBAAW,IAAI,KAAK,UAAU;AAAA,WAAe;AAAE,UAAI,CAAC,WAAW,UAAU;AAAE,cAAM,IAAI,UAAU;AAAA;AAA+C,iBAAW,QAAQ;AAAA;AAAA;AAExP,mCAA+B,UAAU,YAAY;AAAE,QAAI,aAAa,+BAA6B,UAAU,YAAY;AAAQ,WAAO,2BAAyB,UAAU;AAAA;AAE7K,0CAAsC,UAAU,YAAY,QAAQ;AAAE,QAAI,CAAC,WAAW,IAAI,WAAW;AAAE,YAAM,IAAI,UAAU,kBAAkB,SAAS;AAAA;AAAqC,WAAO,WAAW,IAAI;AAAA;AAEjN,sCAAkC,UAAU,YAAY;AAAE,QAAI,WAAW,KAAK;AAAE,aAAO,WAAW,IAAI,KAAK;AAAA;AAAa,WAAO,WAAW;AAAA;AAWnI,MAAI,eAAa;AACjB,MAAI,oBAAkB;AA6B7B,MAAI,gBAA6B,oBAAI;AAErC,MAAI,0BAAuC,oBAAI;AAExC,MAAI,gBAA6B,yBAAU,aAAa;AAC7D,gBAAU,gBAAe;AAEzB,QAAI,SAAS,eAAa;AAE1B,8BAAyB;AACvB,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,eAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,aAAK,QAAQ,UAAU;AAAA;AAGzB,cAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,MAAM,OAAO;AAEhD,mCAA2B,yBAAuB,QAAQ,eAAe;AAAA,QACvE,UAAU;AAAA,QACV,OAAO,IAAI;AAAA;AAGb,mCAA2B,yBAAuB,QAAQ,yBAAyB;AAAA,QACjF,UAAU;AAAA,QACV,OAAO;AAAA;AAGT,wBAAgB,yBAAuB,QAAQ,cAAc,IAAI,oBAAW,yBAAuB;AAEnG,wBAAgB,yBAAuB,QAAQ,6BAA6B;AAE5E,aAAO;AAAA;AAGT,oBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAMA,qBAAqB;AACnB,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,YAAI,wBAAwB,KAAK,IAAI,eACjC,gBAAgB,sBAAsB;AAE1C,YAAI,CAAC,MAAM,QAAQ,kBAAkB,CAAC,MAAM,QAAQ,cAAc,KAAK;AACrE,eAAK,aAAa,qBAAoB,qBAAkB,yBAAuB,CAAC,kLAAkL,CAAC;AAAA;AAGrQ,aAAK,QAAQ,QAAQ,WAAY;AAC/B,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO,gBAAgB,MAAM,QAAQ;AAAA;AAE9C,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO,wBAAwB,MAAM,QAAQ;AAAA;AAEtD,aAAK,QAAQ,wBAAwB,WAAY;AAC/C,iBAAO,OAAO,uBAAuB,MAAM,QAAQ;AAAA;AAErD,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO,wBAAwB,MAAM,QAAQ;AAAA;AAEtD,aAAK,QAAQ,iCAAiC,SAAU,OAAO;AAC7D,iBAAO,OAAO,gCAAgC;AAAA;AAEhD,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ,kCAAkC,WAAY;AACzD,iBAAO,OAAO,iCAAiC,MAAM,QAAQ;AAAA;AAE/D,aAAK,QAAQ,yCAAyC,WAAY;AAChE,iBAAO,OAAO,wCAAwC,MAAM,QAAQ;AAAA;AAGtE,eAAK,kBAAgB,eAAc,YAAY,gBAAgB,MAAM,KAAK;AAE1E,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,CAAC,KAAK,IAAI,MAAM;AAElB;AAAA;AAGF,YAAI,yBAAyB,KAAK,IAAI,eAClC,gBAAgB,uBAAuB;AAE3C,gCAAsB,MAAM,eAAe,gBAAgB,KAAK,IAAI;AAEpE,YAAI,MAAM,QAAQ,gBAAgB;AAChC,eAAK,4BAA4B,wBAAsB,MAAM,eAAe,SAAS;AAAA;AAGvF,YAAI,KAAK,2BAA2B;AAClC,eAAK,aAAa,qBAAqB,qBAAmB,yBAAuB,CAAC,oJAAoJ,CAAC;AAAA;AAGzO,YAAI,KAAK,SAAS;AAIhB,eAAK,IAAI,kBAAkB,qBAAqB,kBAAkB,QAAQ,SAAU,gBAAgB,qBAAqB;AACvH,gBAAI,aAAa,mBAAmB,OAAO,gBAAgB;AAE3D,oCAAsB,QAAQ,eAAe,0BAA0B,YAAY;AAAA;AAAA;AAIvF,YAAI,CAAC,wBAAsB,MAAM,4BAA4B,KAAK,SAAS;AACzE,kCAAsB,MAAM,yBAAyB,KAAK,IAAI,kBAAkB,sBAAsB,UAAU,UAAU,SAAU,SAAS;AAC3I,oBAAQ,QAAQ,SAAU,MAAM;AAC9B,kBAAI,KAAK,KAAK,IACV,cAAc,KAAK,OACnB,WAAW,KAAK;AAEpB,kBAAI,OAAO,WAAW;AACpB,oBAAI,aAAa,aAAa,OAAO,gBAAgB;AAErD,wCAAsB,QAAQ,eAAe,0BAA0B,YAAY;AAAA;AAAA;AAAA;AAAA;AAM3F,aAAK,WAAW;AAEhB,eAAK,kBAAgB,eAAc,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM3E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK;AAEL,gCAAsB,MAAM,eAAe;AAE3C,gCAAsB,MAAM,yBAAyB;AAErD,gCAAsB,MAAM,yBAAyB;AAErD,aAAK,WAAW;AAEhB,eAAK,kBAAgB,eAAc,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAS5E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,eAAO,wBAAsB,MAAM;AAAA;AAAA,OASpC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,eAAO,wBAAsB,MAAM,eAAe;AAAA;AAAA,OAanD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,aAAa,aAAa;AAC1D,eAAO,wBAAsB,MAAM,eAAe,kBAAkB,aAAa;AAAA;AAAA,OAQlF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,CAAC,KAAK,IAAI,MAAM;AAClB;AAAA;AAGF,YAAI,KAAK,KAAK,IAAI,KAAK;AACvB,YAAI,eAAe,GAAG,WAAW,iBAAiB;AAClD,YAAI,cAAc,GAAG,QAAQ;AAC7B,YAAI,aAAa,GAAG,WAAW,WAAW,MAAM,QAAQ;AACxD,YAAI,uBAAuB,GAAG,WAAW,uBAAuB,GAAG,WAAW,qBAAqB,MAAM,QAAQ,QAAQ;AAEzH,iBAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACrC,cAAI,cAAc,YAAY,WAAW;AAEzC,cAAI,CAAC,aAAa;AAChB;AAAA;AAGF,cAAI,WAAW,WAAW,WAAW;AACrC,cAAI,qBAAqB,uBAAuB,qBAAqB,WAAW,KAAK;AAErF,mBAAS,IAAI,GAAG,cAAc,YAAY,WAAW,QAAQ,IAAI,aAAa,KAAK;AACjF,wBAAY,WAAW,GAAG,gBAAgB;AAC1C,wBAAY,YAAY,WAAW,IAAI;AAEvC,gBAAI,YAAY,SAAS,WAAW,IAAI;AACtC,uBAAS,WAAW,GAAG,gBAAgB;AACvC,0BAAY,SAAS,WAAW,IAAI;AAAA;AAGtC,gBAAI,wBAAwB,sBAAsB,mBAAmB,WAAW,IAAI;AAClF,iCAAmB,WAAW,GAAG,gBAAgB;AACjD,0BAAY,mBAAmB,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,OAerD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,aAAa;AACjD,YAAI,SAAS;AAEb,YAAI,mBAAmB,KAAK,IAAI,KAAK,GAAG,WAAW;AACnD,eAAO,SAAU,qBAAqB,IAAI;AACxC,cAAI;AAEJ,cAAI,aAAa,OAAO,KACpB,eAAe,WAAW,cAC1B,oBAAoB,WAAW,mBAC/B,OAAO,WAAW;AACtB,cAAI,qBAAqB,kBAAkB,6BAA6B;AAExE,cAAI,uBAAuB,MAAM;AAC/B,iCAAqB;AAAA;AAGvB,aAAG,gBAAgB;AACnB,sBAAY,IAAI;AAEhB,cAAI,QAAS,2BAAyB,wBAAsB,QAAQ,eAAe,kBAAkB,aAAa,yBAAyB,QAAQ,4BAA2B,SAAS,0BAAyB;AAAA,YAC9M,OAAO;AAAA,aAEL,UAAU,MAAM,SAChB,QAAQ,MAAM,OACd,WAAW,MAAM,UACjB,gBAAgB,MAAM;AAE1B,cAAI,iBAAiB,UAAU;AAC7B,qBAAS,IAAI;AAAA,qBACJ,UAAU,GAAG;AACtB,gBAAI,uBAAuB;AAE3B,gBAAI,mBAAoB,yBAAwB,KAAK,GAAG,WAAW,0BAA0B,QAAQ,0BAA0B,SAAS,SAAS,sBAAsB,MAAM,QAAQ,MAAM,SAAS;AACpM,gBAAI,gBAAiB,yBAAwB,KAAK,GAAG,WAAW,iBAAiB,QAAQ,0BAA0B,SAAS,SAAS,sBAAsB,MAAM,QAAQ,MAAM,SAAS;AAExL,gBAAI,mBAAmB,oBAAoB,gBAAgB,KAAK,IAAI,SAAS,mBAAmB,uBAAuB;AAEvH,gBAAI,mBAAmB,GAAG;AACxB,iBAAG,aAAa,WAAW;AAAA;AAAA;AAI/B,cAAI,QAAQ,aAAa,cAAc;AACvC,cAAI,SAAS,aAAa,cAAc;AACxC,mBAAS,OAAO;AAChB,mBAAS,QAAQ;AACjB,wBAAc,QAAQ;AACtB,gBAAM,YAAY;AAClB,gBAAM;AACN,aAAG,YAAY;AAEf,iBAAO,IAAI,SAAS,qBAAqB,oBAAoB;AAAA;AAAA;AAAA,OAahE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0CAA0C,cAAc,aAAa,eAAe;AACzF,YAAI,iBAAiB,wBAAsB,MAAM,eAAe,sBAAsB,aAAa;AAEnG,YAAI,CAAC,gBAAgB;AACnB,iBAAO;AAAA;AAGT,YAAI,aAAa,cAAc,YAC3B,eAAe,cAAc,cAC7B,gBAAgB,cAAc,eAC9B,iBAAiB,cAAc;AAEnC,YAAI,0BAAyB,wBAAsB,MAAM,eAAe,kBAAkB,aAAa,eACnG,SAAS,wBAAuB,QAChC,UAAU,wBAAuB;AAErC,YAAI,kBAAkB,aAAa;AACjC,cAAI,CAAC,QAAQ;AACX,mBAAO,eAAe;AAAA;AAAA,mBAEf,kBAAkB,oBAAoB;AAC/C,cAAI,UAAU,iBAAiB,gBAAgB,CAAC,QAAQ;AAEtD,uBAAW,SAAS;AAAA;AAAA;AAIxB,eAAO;AAAA;AAAA,OAaR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAO,QAAQ,IAAI,YAAY;AACrE,YAAI,iBAAiB,KAAK,+BAA+B;AAEzD,YAAI,gBAAgB;AAGlB,qBAAW,SAAS;AAAA;AAAA;AAAA,OAWvB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,QAAO,QAAQ;AACpD,YAAI,iBAAiB,KAAK,+BAA+B;AAEzD,YAAI,CAAC,gBAAgB;AACnB;AAAA;AAGF,YAAI,YAAY,KAAK,IAAI;AACzB,YAAI,mBAAmB,UAAU,eAAe,UAAU,mBAAmB,YAAY;AACzF,YAAI,kBAAkB;AACtB,YAAI,cAAc,eAAe,aAC7B,cAAc,eAAe;AAKjC,YAAI,2BAA2B,CAAC,UAAU,cAAc;AAExD,YAAI,OAAM,YAAY,kBAAkB;AACtC,cAAI,OAAO,MAAM,iBAAiB,KAAK,KAAK;AAC1C,4BAAgB,KAAK,iBAAiB,oBAAoB,KAAK,aAAa,OAAO;AAAA,qBAC1E,OAAO,MAAM,iBAAiB,KAAK,KAAK;AACjD,4BAAgB,KAAK,iBAAiB,mBAAmB,KAAK,cAAc,cAAc,GAAG,OAAO;AAAA,iBAC/F;AACL,4BAAgB,KAAK,aAAa,cAAc,cAAc,GAAG,OAAO;AAAA;AAAA,mBAEjE,YAAY,WAAU,aAAa,WAAU,0BAA0B;AAChF,0BAAgB,KAAK,aAAa,cAAc,cAAc,GAAG,OAAO;AAAA;AAI1E,kBAAU,cAAc,MAAM,WAAW;AAAA;AAAA,OAa1C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAO,QAAQ,IAAI,YAAY;AACrE,YAAI;AAEJ,YAAI,CAAC,KAAK,IAAI,KAAK,eAAe;AAChC;AAAA;AAGF,YAAI,iBAAiB,KAAK,+BAA+B;AAEzD,YAAI,CAAC,gBAAgB;AACnB;AAAA;AAGF,YAAI,cAAc,eAAe,aAC7B,cAAc,eAAe;AACjC,YAAI,gBAAgB,KAAK,IAAI;AAC7B,YAAI,gBAAgB,cAAc;AAClC,YAAI,oBAAoB,cAAc;AACtC,YAAI,QAAO,cAAc;AAGzB,mBAAW,SAAS;AACpB,mBAAW,OAAO;AAClB,YAAI,kBAAkB;AAEtB,YAAI,OAAO,MAAM,MAAK,KAAK;AACzB,0BAAgB,KAAK,kBAAkB,KAAK;AAAA,mBACnC,OAAO,MAAM,MAAK,KAAK;AAChC,0BAAgB,KAAK,cAAc,KAAK,cAAc,cAAc;AAAA,eAC/D;AACL,0BAAgB,KAAK,aAAa,cAAc,cAAc;AAAA;AAGhE,QAAC,aAAY,KAAK,KAAK,cAAc,MAAM,WAAW;AAAA;AAAA,OASvD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yCAAyC,gBAAgB;AAC9D,YAAI,gBAAgB;AAClB,yBAAe,SAAS;AAExB,mBAAS,cAAc,GAAG,cAAc,wBAAsB,MAAM,eAAe,kBAAkB,eAAe;AAClH,2BAAe,KAAK,KAAK,sBAAsB;AAAA;AAAA;AAAA;AAAA,OAWpD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iDAAiD,MAAM;AAC5D,YAAI,oBAAoB,wBAAsB,MAAM,eAAe;AAEnE,YAAI,iBAAiB,KAAK;AAC1B,YAAI,gBAAgB,CAAC,CAAC;AAEtB,iBAAS,cAAc,GAAG,cAAc,mBAAmB,eAAe;AACxE,cAAI,cAAc,wBAAsB,MAAM,eAAe,wBAAwB,aAAa,KAAK;AAEvG,cAAI,sBAAsB,KAAK,IAAI,kBAAkB,6BAA6B;AAGlF,cAAI,eAAe,GAAG;AACpB,4BAAgB;AAAA;AAKlB,cAAI,UAAU,wBAAwB,sBAAsB,KAAK,aAAa;AAC5E,6BAAiB;AACjB;AAAA;AAAA;AAMJ,aAAK,cAAc,gBAAgB,wBAAsB,MAAM,eAAe,sBAAsB,GAAG,gBAAgB,cAAc;AAAA;AAAA,OAWtI;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,OAAO,QAAQ;AAC9C,YAAI,cAAc,KAAK,WAAW,YAAY;AAC9C,eAAO,QAAQ,cAAc,QAAQ;AAAA;AAAA,OAQtC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB;AAEvB,aAAK;AAAA;AAAA,OAWN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,YAAY,aAAa;AACvD,YAAI,CAAC,aAAa;AAChB,eAAK;AAAA;AAAA;AAAA,OAOR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,gCAAsB,MAAM,eAAe;AAE3C,YAAI,wBAAsB,MAAM,6BAA6B,MAAM;AACjE,kCAAsB,MAAM,yBAAyB;AAErD,kCAAsB,MAAM,yBAAyB;AAAA;AAGvD,eAAK,kBAAgB,eAAc,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,OAUtE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wCAAwC,QAAQ;AACrD,YAAI,OAAO,OAAO,KAAK,OAAO,MAAM,GAAG;AACrC;AAAA;AAGF,eAAO,wBAAsB,MAAM,eAAe,sBAAsB,OAAO,KAAK,OAAO;AAAA;AAAA,QAE3F,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAWX,WAAO;AAAA,IACP;;;Ae7rBF,oCAAO;AAoBP,gCAAO;;;AC5CP,oCAAO;AAcP,gCAAO;AA5BP,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAkBzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAW/Q,MAAI,cAA2B,2BAAY;AACzC,0BAAqB,kBAAkB,aAAa;AAClD,yBAAgB,MAAM;AAOtB,WAAK,MAAM;AAOX,WAAK,OAAO;AAOZ,WAAK,SAAS;AAOd,WAAK,kBAAkB,oBAAI;AAO3B,WAAK,QAAQ;AAAA,QACX,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,UAAU,oBAAI;AAAA;AAAA;AAUlB,oBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAAO,iBAAiB,MAAM;AAC5B,aAAK,OAAO;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,YAAI,gBAAgB;AACpB,aAAK,OAAO;AACZ,wBAAgB,KAAK,IAAI;AACzB,aAAK,OAAO;AACZ,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,MAAM;AACnC,aAAK,QAAQ;AACb,aAAK;AAAA;AAAA,OAQN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,QAAQ;AAEZ,aAAK,QAAQ;AAAA,UACX,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,MAAM;AAAA,UACN,UAAU,oBAAI;AAAA;AAEhB,kBAAU,GAAG,KAAK,KAAK,SAAS,GAAG,SAAU,GAAG;AAC9C,gBAAM,UAAU,MAAM,KAAK,IAAI,GAAG;AAAA;AAAA;AAAA,OAYrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,MAAM,OAAO,QAAQ;AAC7C,YAAI,SAAS;AAEb,YAAI,CAAC,KAAK,MAAM,OAAO,QAAQ;AAC7B,eAAK,MAAM,OAAO,SAAS;AAC3B,eAAK,MAAM,cAAc;AAAA;AAG3B,aAAK,MAAM,OAAO,OAAO,KAAK;AAC9B,aAAK,MAAM,KAAK,KAAK;AACrB,aAAK,MAAM,SAAS,IAAI,MAAM;AAAA,UAC5B;AAAA,UACA,KAAK,KAAK,MAAM,KAAK,SAAS;AAAA,UAC9B;AAAA;AAGF,YAAI,KAAK,YAAY,OAAO;AAC1B,oBAAU,KAAK,YAAY,SAAU,MAAM;AACzC,mBAAO,UAAU,MAAM,QAAQ,GAAG;AAAA;AAAA;AAAA;AAAA,OAWvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,KAAK;AACjC,eAAO,QAAQ,QAAQ,QAAQ,SAAS,OAAO,KAAK,MAAM,KAAK;AAAA;AAAA,OAahE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ,WAAW,aAAa,cAAc;AAC1E,YAAI,SAAS;AAEb,YAAI,YAAY;AAChB,YAAI,iBAAiB;AAErB,YAAI,MAAM,mBAAmB,eAAe,KAAK;AAC/C,iBAAO;AAAA;AAGT,YAAI,YAAY;AAEhB,YAAI,CAAC,WAAW;AACd,sBAAY;AAAA,YACV,YAAY,KAAK;AAAA;AAEnB,sBAAY;AACZ,4BAAkB;AAAA;AAGpB,YAAI,gBAAgB,QAAQ,gBAAgB,UAAU,mBAAmB,aAAa;AACpF,iBAAO;AAAA,YACL,QAAQ;AAAA,YACR,KAAK;AAAA;AAAA;AAIT,YAAI,iBAAiB,QAAQ,iBAAiB,UAAU,cAAc,cAAc;AAClF,iBAAO;AAAA,YACL,QAAQ;AAAA,YACR,KAAK;AAAA;AAAA;AAIT,0BAAkB;AAElB,YAAI,UAAU,YAAY;AACxB,oBAAU,UAAU,YAAY,SAAU,KAAK;AAC7C,mBAAO,gBAAgB,IAAI,KAAK,YAAY,OAAO;AAEnD,6BAAiB,OAAO,cAAc,KAAK,gBAAgB,aAAa;AAExE,gBAAI,MAAM,mBAAmB,eAAe,KAAK;AAC/C,qBAAO;AAAA;AAAA;AAAA;AAKb,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB;AAC3B,YAAI,aAAa,KAAK;AACtB,mBAAW,aAAa,KAAK;AAC7B,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,YAAI,WAAW;AACf,mBAAW,KAAK,KAAK,IAAI,SAAU,KAAK,KAAK;AAC3C,mBAAS,OAAO;AAAA;AAElB,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAQ;AAClC,eAAO,WAAW,QAAQ,WAAW,SAAS,OAAO,KAAK,MAAM,SAAS,IAAI,QAAQ;AAAA;AAAA,OAStF;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,KAAK;AAC3C,YAAI,SAAS;AAEb,YAAI,MAAM,MAAM;AACd,mBAAS;AAAA,eACJ;AACL,mBAAS,KAAK,cAAc;AAAA;AAG9B,YAAI,SAAS,KAAK,aAAa;AAE/B,YAAI,WAAW,QAAQ,WAAW,QAAQ;AACxC,iBAAO,KAAK,KAAK,QAAQ;AAAA;AAG3B,eAAO,OAAO,WAAW,QAAQ;AAAA;AAAA,OAQlC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,eAAe;AAAA,UACjB,YAAY,KAAK;AAAA;AAEnB,eAAO,KAAK,cAAc;AAAA;AAAA,OAS3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,QAAQ;AACpC,YAAI,SAAS;AAEb,YAAI,WAAW;AACf,YAAI,aAAa;AAEjB,YAAI,CAAC,MAAM,aAAa;AACtB,uBAAa,KAAK,cAAc;AAAA;AAGlC,YAAI,CAAC,cAAc,CAAC,WAAW,YAAY;AACzC,iBAAO;AAAA;AAGT,kBAAU,WAAW,YAAY,SAAU,MAAM;AAC/C,sBAAY;AAEZ,cAAI,KAAK,YAAY;AACnB,wBAAY,OAAO,cAAc;AAAA;AAAA;AAGrC,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,KAAK;AAChC,YAAI;AAEJ,YAAI,MAAM,MAAM;AACd,sBAAY;AAAA,eACP;AACL,sBAAY,KAAK,cAAc;AAAA;AAGjC,eAAO,KAAK,mBAAmB;AAAA;AAAA,OAUhC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,WAAW;AAC5C,YAAI,CAAC,aAAa,UAAQ,eAAe,UAAU;AACjD,iBAAO;AAAA;AAGT,eAAO,KAAK,MAAM,SAAS,IAAI,WAAW;AAAA;AAAA,OAS3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,KAAK;AAC/B,YAAI,YAAY;AAEhB,YAAI,MAAM,MAAM;AACd,sBAAY;AAAA,eACP;AACL,sBAAY,KAAK,cAAc;AAAA;AAGjC,eAAO,YAAY,KAAK,kBAAkB,aAAa;AAAA;AAAA,OAUxD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,WAAW;AAC3C,eAAO,cAAc,QAAQ,cAAc,SAAS,OAAO,KAAK,MAAM,SAAS,IAAI,WAAW;AAAA;AAAA,OAS/F;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,KAAK;AAC/B,YAAI,SAAS;AAEb,YAAI,CAAC,MAAM,SAAS;AAClB,mBAAS,KAAK,cAAc;AAAA;AAG9B,eAAO,CAAC,CAAE,QAAO,cAAc,OAAO,WAAW;AAAA;AAAA,OASlD;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,QAAO;AAC7B,eAAO,KAAK,aAAa,YAAW;AAAA;AAAA,OAUrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,QAAQ,QAAO;AACtC,YAAI;AAEJ,eAAS,uBAAqB,OAAO,gBAAgB,QAAQ,uBAAuB,SAAS,SAAS,mBAAmB,YAAW;AAAA;AAAA,OASrI;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,QAAO;AACvC,eAAO,CAAC,KAAK,QAAQ;AAAA;AAAA,OAStB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,KAAK;AAC5B,YAAI;AAEJ,YAAI,SAAS;AAEb,YAAI,CAAC,MAAM,SAAS;AAClB,mBAAS,KAAK,cAAc;AAAA;AAG9B,eAAO,UAAU,CAAC,CAAC,OAAO,cAAgB,uBAAqB,OAAO,gBAAgB,QAAQ,uBAAuB,SAAS,SAAS,mBAAmB,YAAY;AAAA;AAAA,OASvK;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,QAAQ,SAAS;AACxC,YAAI,eAAe;AACnB,aAAK,IAAI,SAAS,kBAAkB,QAAQ;AAC5C,YAAI,cAAc;AAElB,YAAI,QAAQ;AACV,wBAAc,KAAK,YAAY;AAAA;AAGjC,aAAK,IAAI,SAAS,mBAAmB,cAAc,KAAK,cAAc,UAAU,GAAG;AACnF,YAAI,mBAAmB;AAEvB,YAAI,CAAC,QAAQ;AACX,6BAAmB,KAAK;AAAA;AAG1B,YAAI,CAAC,iBAAiB,YAAY;AAChC,2BAAiB,aAAa;AAAA;AAGhC,YAAI,CAAC,cAAc;AACjB,yBAAe,KAAK;AAAA;AAGtB,yBAAiB,WAAW,KAAK;AAEjC,aAAK;AACL,YAAI,cAAc,KAAK,YAAY;AACnC,aAAK,IAAI,eAAe,cAAc,aAAa;AACnD,aAAK,IAAI,SAAS,kBAAkB,aAAa;AACjD,aAAK,IAAI,SAAS,iBAAiB,QAAQ;AAAA;AAAA,OAU5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAQ,QAAO,SAAS;AACtD,YAAI,eAAe;AACnB,YAAI;AAEJ,YAAI,CAAC,cAAc;AACjB,yBAAe,KAAK;AAAA;AAGtB,aAAK,IAAI,SAAS,kBAAkB,QAAQ,cAAc;AAE1D,YAAI,QAAQ;AACV,cAAI,cAAc,KAAK,YAAY;AACnC,cAAI,kBAAkB,cAAc,SAAQ;AAC5C,eAAK,IAAI,SAAS,mBAAmB,iBAAiB;AAEtD,iBAAO,WAAW,OAAO,QAAO,MAAM;AAEtC,eAAK;AACL,eAAK,OAAO;AACZ,eAAK,IAAI,oBAAoB,KAAK,wBAAwB,SAAS,cAAc,OAAO,YAAY;AACpG,eAAK,IAAI,eAAe,cAAc,iBAAiB;AACvD,eAAK,OAAO;AACZ,eAAK,IAAI,SAAS,kBAAkB,iBAAiB;AACrD,2BAAiB;AAAA,eACZ;AACL,eAAK,OAAO;AACZ,eAAK,IAAI,MAAM,cAAc,QAAO,GAAG;AACvC,eAAK,OAAO;AACZ,2BAAiB,KAAK,YAAY,KAAK,KAAK;AAAA;AAI9C,uBAAe,KAAK,cAAc;AAClC,aAAK,IAAI,SAAS,iBAAiB,QAAQ,cAAc;AAAA;AAAA,OAS1D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,QAAO;AAChC,YAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAChF,YAAI,kBAAkB,KAAK,oBAAoB;AAC/C,YAAI,SAAS,KAAK,aAAa;AAC/B,YAAI,oBAAoB,KAAK,wBAAwB;AAErD,gBAAQ;AAAA,eACD;AACH,iBAAK,gBAAgB,QAAQ,oBAAoB,GAAG;AACpD;AAAA,eAEG;AACH,iBAAK,gBAAgB,QAAQ,mBAAmB;AAChD;AAAA;AAGA;AAAA;AAAA;AAAA,OAUL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,UAAU;AACzC,YAAI,SAAS;AAEb,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACtF,YAAI,UAAU;AACd,YAAI,aAAa;AAEjB,YAAI,MAAM,QAAQ,WAAW;AAC3B,oBAAU,SAAS,IAAI,SAAS,IAAI,SAAU,GAAG;AAC/C,gBAAI,kBAAkB,OAAO,oBAAoB;AAEjD,uBAAW,KAAK,OAAO,cAAc;AAAA;AAEvC,oBAAU,GAAG,WAAW,SAAS,GAAG,SAAU,GAAG;AAC/C,mBAAO,iBAAiB,WAAW,IAAI;AAAA;AAEzC,oBAAU,WAAW,WAAW,SAAS;AAAA,eACpC;AACL,oBAAU;AAAA;AAGZ,YAAI,gBAAgB,KAAK,YAAY;AACrC,YAAI,aAAa,KAAK,cAAc;AACpC,YAAI,oBAAoB,KAAK,wBAAwB;AACrD,YAAI,SAAS,KAAK,aAAa;AAC/B,YAAI,cAAc,KAAK,aAAa;AACpC,YAAI,sBAAsB,KAAK,YAAY;AAC3C,YAAI,uBAAuB;AAC3B,aAAK,IAAI,SAAS,qBAAqB,QAAQ;AAE/C,YAAI,sBAAsB,QAAQ,sBAAsB,QAAQ;AAC9D,cAAI,oBAAoB,MAAM,KAAK,IAAI,MAAM,gBAAgB,aAAa,GAAG,QAAQ,OAAO,KAAM,cAAa;AAC/G,eAAK,IAAI,SAAS,mBAAmB,eAAe,aAAa,GAAG,mBAAmB,KAAK,OAAO;AAEnG,iBAAO,WAAW,OAAO,mBAAmB;AAE5C,eAAK;AACL,eAAK,IAAI,SAAS,kBAAkB,eAAe,aAAa,GAAG,mBAAmB,KAAK,OAAO;AAElG,cAAI,aAAa;AACf,mCAAuB,sBAAsB,KAAK,cAAc;AAChE,gBAAI,uBAAuB,KAAK,SAAS,aAAa,KAAK,cAAc,eAAe;AACxF,gBAAI,4BAA4B,KAAK,YAAY;AACjD,iBAAK,IAAI,SAAS,mBAAmB,4BAA4B,GAAG,aAAa,GAAG,KAAK,OAAO;AAEhG,wBAAY,WAAW,KAAK;AAAA,iBACvB;AACL,mCAAuB,KAAK,IAAI,cAAc;AAC9C,iBAAK,IAAI,SAAS,mBAAmB,uBAAuB,GAAG,aAAa,GAAG,KAAK,OAAO;AAC3F,iBAAK,KAAK,KAAK;AAAA;AAAA;AAInB,aAAK;AACL,aAAK,IAAI,SAAS,kBAAkB,uBAAuB,GAAG,aAAa,GAAG,KAAK,OAAO;AAC1F,aAAK,IAAI,SAAS,oBAAoB,QAAQ,SAAS,KAAK,YAAY;AAExE,YAAI,aAAa;AACf,eAAK,IAAI;AAAA;AAAA;AAAA,OAYZ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,QAAO,QAAQ,WAAW;AACnD,YAAI,SAAS;AAGb,YAAI,mBAAmB;AACvB,kBAAU,WAAW,SAAU,MAAM;AACnC,2BAAiB,KAAK,OAAO,cAAc;AAAA;AAE7C,kBAAU,kBAAkB,SAAU,MAAM;AAC1C,cAAI,oBAAoB,OAAO,wBAAwB;AAEvD,cAAI,aAAa,OAAO,aAAa;AAErC,cAAI,eAAe,MAAM;AACvB,mBAAO,KAAK,OAAO,mBAAmB;AAAA,iBACjC;AACL,uBAAW,WAAW,OAAO,mBAAmB;AAAA;AAAA;AAGpD,aAAK;AAAA;AAAA,OAYN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,QAAO,QAAQ,UAAU;AAClD,YAAI,kBAAkB,KAAK,cAAc,SAAQ;AACjD,YAAI,eAAe;AACnB,YAAI,oBAAoB;AAExB,YAAI,mBAAmB,gBAAgB,cAAc,gBAAgB,WAAW,WAAW,GAAG;AAC5F,yBAAe;AACf,8BAAoB;AAAA,mBACX,SAAQ,KAAK,gBAAgB;AACtC,yBAAe,KAAK,aAAa;AACjC,8BAAoB,KAAK,wBAAwB;AAAA;AAGnD,YAAI,cAAc;AAChB,cAAI,UAAU;AACZ,gBAAI;AAEJ,YAAC,yBAAwB,aAAa,YAAY,OAAO,MAAM,uBAAuB,CAAC,mBAAmB,QAAQ,OAAO,qBAAmB;AAAA,iBACvI;AACL,yBAAa,WAAW,OAAO,mBAAmB;AAAA;AAAA,mBAE3C,UAAU;AACnB,cAAI;AAEJ,UAAC,cAAa,KAAK,MAAM,OAAO,MAAM,YAAY,CAAC,mBAAmB,QAAQ,OAAO,qBAAmB;AAAA,eACnG;AACL,eAAK,KAAK,OAAO,mBAAmB;AAAA;AAGtC,aAAK;AAAA;AAAA,OASN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,YAAY;AAC/C,YAAI,eAAe;AACnB,YAAI,aAAa;AAEjB,WAAG;AACD,uBAAa,KAAK,aAAa;AAE/B,cAAI,eAAe,MAAM;AACvB,2BAAe;AAAA;AAAA,iBAEV,eAAe;AAExB,aAAK,OAAO;AACZ,aAAK,IAAI,oBAAoB,KAAK,YAAY,eAAe,cAAc,aAAa,YAAY;AACpG,aAAK,OAAO;AAAA;AAAA,OAeb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iBAAiB,WAAW,SAAS,iBAAiB,iBAAiB;AAC5E,YAAI,gBAAgB,YAAY,KAAK,IAAI;AACzC,YAAI,aAAa,KAAK,aAAa;AACnC,YAAI,oBAAoB,KAAK,wBAAwB;AAErD,YAAI,aAAa,WAAW,WAAW,MAAM,mBAAmB,oBAAoB;AAEpF,YAAI,WAAW,YAAY;AAC3B,YAAI,WAAW,gBAAgB,KAAK,aAAa,UAAU,KAAK,KAAK,aAAa;AAElF,YAAI,aAAa,QAAQ,aAAa,QAAQ;AAC5C,qBAAW,KAAK,aAAa,UAAU;AAAA;AAGzC,YAAI,aAAa,QAAQ,aAAa,QAAQ;AAC5C,qBAAW,KAAK,cAAc,UAAU;AAAA;AAG1C,YAAI,CAAC,UAAU;AACb,qBAAW,KAAK,cAAc;AAC9B,mBAAS,aAAa;AAAA,mBACb,CAAC,SAAS,YAAY;AAC/B,mBAAS,aAAa;AAAA;AAGxB,YAAI,sBAAsB,iBAAiB,mBAAmB,kBAAkB,SAAS,WAAW,SAAS,KAAK,wBAAwB;AAC1I,YAAI,aAAa,eAAe;AAEhC,iBAAS,WAAW,OAAO,qBAAqB,GAAG,WAAW;AAE9D,mBAAW,WAAW,OAAO,oBAAqB,aAAY,aAAa,IAAI,IAAI;AAGnF,aAAK,qBAAqB;AAE1B,YAAI,CAAC,YAAY;AACf,eAAK,qBAAqB;AAAA;AAAA;AAAA,OAW7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,KAAK;AACvC,YAAI,KAAK,OAAO,cAAc;AAC5B,iBAAO,KAAK,OAAO,aAAa,oBAAoB;AAAA;AAGtD,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,KAAK;AACzC,YAAI,KAAK,OAAO,cAAc;AAC5B,iBAAO,KAAK,OAAO,aAAa,sBAAsB;AAAA;AAGxD,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA;AAGT,MAAO,sBAAQ;;;ACl3Bf,oCAAO;AAKP,gCAAO;;;AC7BP,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAQhH,MAAI,UAAsB,gCAAa,iBAAgB,gBAAgB,aAAa;AAClF,uBAAgB,MAAM;AAOtB,SAAK,MAAM;AAKX,SAAK,SAAS;AAAA;AAGhB,MAAO,gBAAQ;;;AClBf,oCAAO;AAVP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAczU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAcxM,MAAI,YAAyB,yBAAU,SAAS;AAC9C,gBAAU,YAAW;AAErB,QAAI,SAAS,eAAa;AAE1B,wBAAmB,kBAAkB,aAAa;AAChD,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,kBAAkB;AAO5C,YAAM,cAAc,MAAM,OAAO;AAajC,YAAM,eAAe,MAAM,OAAO;AAOlC,YAAM,sBAAsB;AAC5B,aAAO;AAAA;AAWT,oBAAa,YAAW,CAAC;AAAA,MACvB,KAAK;AAAA,MACL,OAAO,+BAA+B,KAAK,IAAI;AAC7C,YAAI,WAAW,KAAK,IAAI,cAAc;AACtC,YAAI,WAAW,KAAK,YAAY,YAAY;AAC5C,YAAI,YAAY,KAAK,YAAY,cAAc;AAC/C,YAAI,WAAW,GAAG,qBAAqB,OAAO;AAC9C,YAAI,YAAY,SAAS,cAAc;AACvC,YAAI,qBAAqB,SAAS,iBAAiB;AACnD,kBAAU,oBAAoB,SAAU,MAAM;AAC5C,cAAI,MAAM;AACR,qBAAS,YAAY;AAAA;AAAA;AAGzB,iBAAS,IAAI,WAAU,YAAY;AAEnC,YAAI,UAAU;AACZ,cAAI,eAAe,KAAK,IAAI;AAC5B,cAAI,iBAAiB,UAAU,UAAU;AACzC,mBAAS,YAAY;AACrB,oBAAU,GAAG,WAAW,GAAG,WAAY;AACrC,gBAAI,iBAAiB,aAAa,cAAc;AAChD,qBAAS,gBAAgB,WAAU,YAAY;AAC/C,qBAAS,YAAY;AAAA;AAEvB,mBAAS,YAAY;AAAA;AAGvB,YAAI,KAAK,YAAY,YAAY,YAAY;AAC3C,cAAI,mBAAmB,KAAK,IAAI,aAAa,cAAc;AAC3D,mBAAS,IAAI,WAAU,YAAY;AAEnC,cAAI,KAAK,aAAa,qBAAqB,WAAW;AACpD,qBAAS,kBAAkB,GAAG,OAAO,WAAU,YAAY,QAAQ,KAAK,OAAO,WAAU,YAAY;AAAA,iBAChG;AACL,qBAAS,kBAAkB,GAAG,OAAO,WAAU,YAAY,QAAQ,KAAK,OAAO,WAAU,YAAY;AAAA;AAGvG,mBAAS,YAAY;AAAA;AAAA;AAAA,OAUxB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,cAAc;AACjD,YAAI,oBAAoB;AAExB,YAAI,CAAC,mBAAmB;AACtB,8BAAoB,KAAK,YAAY,MAAM;AAAA;AAG7C,aAAK,sBAAsB,KAAK,IAAI,IAAI,KAAK,KAAK,oBAAoB;AACtE,aAAK,IAAI;AAAA;AAAA,QAET,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAMA,gBAAe;AACb,eAAO;AAAA,UACL,oBAAoB;AAAA,UACpB,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,gBAAgB;AAAA;AAAA;AAAA;AAKtB,WAAO;AAAA,IACP;AAEF,MAAO,kBAAQ;;;AFnLf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAmBhL,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAgBxM,MAAI,eAA4B,yBAAU,SAAS;AACjD,gBAAU,eAAc;AAExB,QAAI,SAAS,eAAa;AAE1B,2BAAsB,kBAAkB,aAAa;AACnD,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,kBAAkB;AAK5C,YAAM,cAAc,MAAM,OAAO;AACjC,YAAM,gBAAgB;AACtB,YAAM,qBAAqB;AAAA,QACzB,OAAO,iBAAiB;AACtB,cAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACtF,gBAAM,oBAAoB,MAAM,cAAc,MAAM;AAEpD,gBAAM,uBAAuB,MAAM,mBAAmB;AAAA;AAAA,QAExD,YAAY,oBAAoB,WAAW,aAAa;AACtD,cAAI,QAAQ,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEhF,cAAI,gBAAgB,QAAQ,gBAAgB,QAAQ;AAClD,0BAAc;AAAA;AAGhB,oBAAU,MAAM,mBAAmB,SAAU,MAAM,GAAG;AACpD,gBAAI,QAAQ,aAAa,OAAO,aAAa;AAC3C,oBAAM,kBAAkB,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA,QAI1C,YAAY,sBAAsB;AAChC,cAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEtF,gBAAM,yBAAyB,MAAM,mBAAmB;AAExD,gBAAM,oBAAoB;AAAA;AAAA,QAE5B,WAAW,mBAAmB,kBAAkB,QAAQ;AACtD,oBAAU,kBAAkB,mBAAmB,SAAS,GAAG,SAAU,GAAG;AACtE,gBAAI,iBAAiB,MAAM,kBAAkB,QAAQ;AAErD,gBAAI,iBAAiB,IAAI;AACvB,oBAAM,kBAAkB,OAAO,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAKvD,aAAO;AAAA;AAYT,oBAAa,eAAc,CAAC;AAAA,MAC1B,KAAK;AAAA,MACL,OAAO,0BAA0B,KAAK;AACpC,YAAI,SAAS;AAEb,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACtF,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,YAAI,iBAAiB;AACrB,YAAI,YAAY;AAChB,YAAI,WAAW;AACf,YAAI,aAAa;AAEjB,YAAI,MAAM,MAAM;AACd,sBAAY;AACZ,qBAAW,KAAK,YAAY,YAAY;AAAA,eACnC;AACL,sBAAY,KAAK,YAAY,cAAc;AAC3C,qBAAW;AAAA;AAGb,YAAI,KAAK,YAAY,YAAY,YAAY;AAC3C,oBAAU,UAAU,YAAY,SAAU,MAAM;AAC9C,2BAAe,KAAK,OAAO,YAAY,YAAY;AAAA;AAAA;AAIvD,qBAAa,KAAK,aAAa,gBAAgB,MAAM;AAErD,YAAI,YAAY;AACd,eAAK,SAAS;AAAA;AAGhB,YAAI,aAAa;AACf,eAAK;AAAA;AAGP,YAAI,KAAK,cAAc,QAAQ,cAAc,IAAI;AAC/C,eAAK,cAAc,KAAK;AAAA;AAG1B,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC,MAAM;AAC7C,YAAI,SAAS;AAEb,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACtF,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,YAAI,aAAa;AACjB,kBAAU,MAAM,SAAU,MAAM;AAC9B,qBAAW,KAAK,MAAM,YAAY,qBAAmB,OAAO,iBAAiB,MAAM,OAAO;AAAA;AAG5F,YAAI,YAAY;AACd,eAAK,SAAS;AAAA;AAGhB,YAAI,aAAa;AACf,eAAK;AAAA;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,UAAU;AACpC,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,aAAK,aAAa,CAAC,WAAW;AAAA;AAAA,OAW/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,YAAY;AACvC,YAAI,SAAS;AAEb,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,YAAI,aAAa;AACjB,kBAAU,YAAY,SAAU,MAAM;AACpC,qBAAW,KAAK;AAEhB,cAAI,WAAW;AACb,mBAAO,kBAAkB,MAAM;AAAA;AAAA;AAInC,YAAI,YAAY;AACd,eAAK,SAAS;AAAA;AAGhB,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,aAAa;AAC7C,YAAI,SAAS;AAEb,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,YAAI,YAAY,UAAU,SAAS,IAAI,UAAU,KAAK;AACtD,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAErF,YAAI,KAAK,YAAY,YAAY,cAAc;AAC7C,cAAI,eAAe,KAAK,YAAY,cAAc;AAClD,oBAAU,aAAa,YAAY,SAAU,MAAM;AACjD,gBAAI,YAAY,OAAO,YAAY,YAAY;AAE/C,uBAAW,KAAK;AAEhB,mBAAO,kBAAkB,WAAW;AAAA;AAAA;AAIxC,YAAI,YAAY;AACd,eAAK,SAAS;AAAA;AAAA;AAAA,OAUjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,UAAU;AAClC,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,aAAK,WAAW,CAAC,WAAW;AAAA;AAAA,OAW7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,YAAY;AACrC,YAAI,SAAS;AAEb,YAAI,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACpF,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,YAAI,eAAe;AACnB,kBAAU,YAAY,SAAU,MAAM;AACpC,uBAAa,KAAK;AAElB,cAAI,WAAW;AACb,mBAAO,gBAAgB,MAAM;AAAA;AAAA;AAIjC,YAAI,YAAY;AACd,eAAK,WAAW;AAAA;AAGlB,eAAO;AAAA;AAAA,OAWR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,aAAa;AAC3C,YAAI,SAAS;AAEb,YAAI,eAAe,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACvF,YAAI,YAAY,UAAU,SAAS,IAAI,UAAU,KAAK;AACtD,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAErF,YAAI,KAAK,YAAY,YAAY,cAAc;AAC7C,cAAI,eAAe,KAAK,YAAY,cAAc;AAClD,oBAAU,aAAa,YAAY,SAAU,MAAM;AACjD,gBAAI,CAAC,OAAO,qBAAqB,OAAO;AACtC,kBAAI,YAAY,OAAO,YAAY,YAAY;AAE/C,2BAAa,KAAK;AAElB,qBAAO,gBAAgB,WAAW;AAAA;AAAA;AAAA;AAKxC,YAAI,YAAY;AACd,eAAK,WAAW;AAAA;AAAA;AAAA,OAYnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,KAAK;AAClC,YAAI,SAAS;AAEb,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACtF,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,YAAI,eAAe;AACnB,YAAI,YAAY;AAChB,YAAI,WAAW;AACf,YAAI,eAAe;AAEnB,YAAI,MAAM,MAAM;AACd,sBAAY;AACZ,qBAAW,KAAK,YAAY,YAAY;AAAA,eACnC;AACL,sBAAY,KAAK,YAAY,cAAc;AAC3C,qBAAW;AAAA;AAGb,aAAK,cAAc,OAAO,KAAK,cAAc,QAAQ,WAAW;AAEhE,YAAI,KAAK,YAAY,YAAY,YAAY;AAC3C,oBAAU,UAAU,YAAY,SAAU,MAAM;AAC9C,gBAAI,aAAa,OAAO,YAAY,YAAY;AAEhD,yBAAa,KAAK;AAAA;AAAA;AAItB,uBAAe,KAAK,WAAW,cAAc,MAAM;AAEnD,YAAI,YAAY;AACd,eAAK,WAAW;AAAA;AAGlB,YAAI,aAAa;AACf,eAAK;AAAA;AAGP,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,MAAM;AAC3C,YAAI,SAAS;AAEb,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACtF,YAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AACrF,YAAI,eAAe;AACnB,kBAAU,MAAM,SAAU,MAAM;AAC9B,uBAAa,KAAK,MAAM,cAAc,qBAAmB,OAAO,eAAe,MAAM,OAAO;AAAA;AAG9F,YAAI,YAAY;AACd,eAAK,WAAW;AAAA;AAGlB,YAAI,aAAa;AACf,eAAK;AAAA;AAAA;AAAA,OAOR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,UAAU;AAEd,YAAI,OAAO,KAAK,YAAY;AAC5B,YAAI,oBAAoB;AACxB,kBAAU,MAAM,SAAU,MAAM;AAC9B,cAAI,QAAQ,YAAY,YAAY,OAAO;AACzC,8BAAkB,KAAK;AAAA;AAAA;AAG3B,aAAK,yBAAyB;AAC9B,aAAK;AAAA;AAAA,OAMN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,UAAU;AAEd,YAAI,OAAO,KAAK,YAAY;AAC5B,YAAI,kBAAkB;AACtB,kBAAU,MAAM,SAAU,MAAM;AAC9B,cAAI,QAAQ,YAAY,YAAY,OAAO;AACzC,4BAAgB,KAAK;AAAA;AAAA;AAGzB,aAAK,uBAAuB;AAC5B,aAAK;AAAA;AAAA,OAQN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,MAAM;AAC7B,YAAI,UAAU;AAEd,aAAK,IAAI,eAAe,WAAY;AAClC,oBAAU,MAAM,SAAU,aAAa;AACrC,oBAAQ,OAAO,iBAAiB,gBAAgB,aAAa;AAAA;AAAA,WAE9D;AAAA;AAAA,OAQJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,MAAM;AAC/B,YAAI,UAAU;AAEd,aAAK,IAAI,eAAe,WAAY;AAClC,oBAAU,MAAM,SAAU,aAAa;AACrC,oBAAQ,OAAO,iBAAiB,gBAAgB,aAAa;AAAA;AAAA,WAE9D;AAAA;AAAA,OAUJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,KAAK;AACxC,YAAI,UAAU;AAEd,YAAI,SAAS,MAAM,OAAO,MAAM,KAAK,YAAY,cAAc;AAC/D,YAAI,eAAe;AAEnB,YAAI,WAAW,MAAM;AACnB,mBAAS;AAAA,YACP,YAAY,KAAK,YAAY;AAAA;AAAA;AAIjC,YAAI,KAAK,YAAY,YAAY,SAAS;AACxC,oBAAU,OAAO,YAAY,SAAU,MAAM;AAC3C,gBAAI,WAAW,QAAQ,YAAY,YAAY;AAE/C,gBAAI,CAAC,QAAQ,OAAO,iBAAiB,gBAAgB,WAAW;AAC9D,6BAAe;AACf,qBAAO;AAAA;AAAA;AAAA;AAKb,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,QAAQ;AAC3C,YAAI,SAAS;AAEb,eAAO,WAAW,MAAM;AACtB,mBAAS,KAAK,YAAY,aAAa;AACvC,cAAI,cAAc,KAAK,YAAY,YAAY;AAE/C,cAAI,KAAK,cAAc,QAAQ,eAAe,IAAI;AAChD,mBAAO;AAAA;AAAA;AAIX,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,QAAO,QAAQ;AACzC,YAAI,OAAO,OAAO,GAAG;AACnB;AAAA;AAGF,YAAI,MAAM,KAAK,oBAAoB,OAAO;AAE1C,YAAI,SAAS,OAAM,QAAQ,gBAAU,YAAY,SAAS;AACxD,cAAI,KAAK,qBAAqB,MAAM;AAClC,iBAAK,eAAe;AAAA,iBACf;AACL,iBAAK,iBAAiB;AAAA;AAGxB,mCAAyB;AAAA;AAAA;AAAA,OAW5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,KAAK;AACvC,eAAO,KAAK,IAAI,cAAc;AAAA;AAAA,OAU/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B,KAAK;AACzC,eAAO,KAAK,IAAI,YAAY;AAAA;AAAA,OAQ7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B;AAChC,aAAK,IAAI;AAET,aAAK,IAAI,KAAK;AAAA;AAAA;AAIlB,WAAO;AAAA,IACP;AAEF,MAAO,qBAAQ;;;AGxmBf,oCAAO;AAtBP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAkBxM,MAAI,gBAAc,oBAAI;AAStB,MAAI,gBAA6B,yBAAU,SAAS;AAClD,gBAAU,gBAAe;AAEzB,QAAI,SAAS,eAAa;AAE1B,4BAAuB,kBAAkB,aAAa;AACpD,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM,kBAAkB;AAC5C,oBAAY,IAAI,yBAAuB,QAAQ;AAAA,QAC7C,WAAW,mBAAmB,KAAK,WAAW;AAC5C,cAAI,gBAAgB,UAAU,UAAU,SAAS;AAEjD,gBAAM,YAAY,WAAW,cAAc,MAAM,KAAK;AAAA;AAAA,QAExD,WAAW,mBAAmB,KAAK,WAAW;AAC5C,cAAI,gBAAgB,UAAU,UAAU,SAAS;AAEjD,gBAAM,YAAY,WAAW,cAAc,MAAM,KAAK;AAAA;AAAA;AAS1D,YAAM,cAAc,MAAM,OAAO;AACjC,aAAO;AAAA;AAYT,oBAAa,gBAAe,CAAC;AAAA,MAC3B,KAAK;AAAA,MACL,OAAO,uBAAuB,iBAAgB;AAC5C,YAAI,SAAS;AAEb,YAAI,aAAa,CAAC;AAAA,UAChB,KAAK;AAAA,UACL,MAAM,gBAAgB;AACpB,mBAAO,KAAK,oBAAsB;AAAA;AAAA,UAEpC,UAAU,oBAAoB;AAC5B,gBAAI,qBAAqB,OAAO,YAAY,oBAAoB,OAAO,IAAI,kBAAkB;AAE7F,gBAAI,SAAS,OAAO,YAAY,cAAc;AAE9C,mBAAO,YAAY,SAAS;AAAA;AAAA,UAE9B,UAAU,oBAAoB;AAC5B,gBAAI,WAAW,OAAO,IAAI;AAE1B,mBAAO,CAAC,YAAY,SAAS,KAAK,KAAK,OAAO,IAAI,UAAU,8BAA8B,OAAO,IAAI,eAAe,OAAO,IAAI,cAAc;AAAA;AAAA,WAE9I;AAAA,UACD,KAAK;AAAA,UACL,MAAM,gBAAgB;AACpB,mBAAO,KAAK,oBAAsB;AAAA;AAAA,UAEpC,UAAU,oBAAoB;AAC5B,mBAAO,YAAY,iBAAiB,OAAO,IAAI;AAAA;AAAA,UAEjD,UAAU,oBAAoB;AAC5B,gBAAI,WAAW,OAAO,IAAI;AAE1B,gBAAI,qBAAqB,OAAO,YAAY,oBAAoB,SAAS;AAEzE,gBAAI,SAAS,OAAO,YAAY,aAAa;AAE7C,mBAAO,CAAC,UAAU,CAAC,YAAY,SAAS,KAAK,KAAK,OAAO,IAAI,UAAU,8BAA8B,OAAO,IAAI,eAAe,OAAO,IAAI,cAAc;AAAA;AAAA,WAEzJ;AAAA,UACD,MAAM;AAAA;AAER,kBAAU,GAAG,gBAAe,MAAM,SAAS,GAAG,SAAU,GAAG;AACzD,cAAI,MAAM,GAAG;AACX,sBAAU,YAAY,SAAU,KAAK,GAAG;AACtC,8BAAe,MAAM,OAAO,IAAI,GAAG,GAAG;AAAA;AAExC,mBAAO;AAAA;AAAA;AAGX,eAAO,KAAK,0BAA0B;AAAA;AAAA,OAUvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC,iBAAgB;AACxD,YAAI,OAAO,cAAY,IAAI;AAC3B,kBAAU,GAAG,gBAAe,MAAM,SAAS,GAAG,SAAU,GAAG;AACzD,cAAI,SAAS,KAAK,gBAAe,MAAM,GAAG;AAE1C,cAAI,WAAW,QAAQ,WAAW,QAAQ;AACxC,4BAAe,MAAM,GAAG,WAAW;AAAA;AAAA;AAGvC,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;AAEF,MAAO,sBAAQ;;;AClKf,oCAAO;AAKP,gCAAO;AAEP,MAAI;AAEJ,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,oCAAgC,SAAS,KAAK;AAAE,QAAI,CAAC,KAAK;AAAE,YAAM,QAAQ,MAAM;AAAA;AAAM,WAAO,OAAO,OAAO,OAAO,iBAAiB,SAAS,EAAE,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA;AAQ1K,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAa/Q,MAAI,oBAAiC,2BAAY;AAC/C,gCAA2B,QAAQ;AACjC,yBAAgB,MAAM;AAOtB,WAAK,SAAS;AAOd,WAAK,MAAM,OAAO;AAOlB,WAAK,cAAc,OAAO;AAO1B,WAAK,eAAe,OAAO;AAAA;AAkB7B,oBAAa,oBAAmB,CAAC;AAAA,MAC/B,KAAK;AAAA,MACL,OAAO,yBAAyB,MAAM,YAAY,WAAW,cAAc;AACzE,YAAI,QAAQ;AAEZ,YAAI,gBAAgB,KAAK,+BAA+B;AAAA,UACtD;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAGF,YAAI,eAAe;AACjB,iBAAO;AAAA;AAGT,aAAK,mBAAmB;AACxB,YAAI,gBAAgB,cAAc,KAAK,IAAI;AAC3C,YAAI,oBAAoB,gBAAgB,KAAK,IAAI,oBAAoB,KAAK,YAAY,oBAAoB;AAC1G,YAAI,YAAY;AAChB,YAAI,uBAAuB,KAAK,IAAI,SAAU,UAAU;AAEtD,cAAI,CAAC,WAAW;AACd,mBAAO;AAAA;AAGT,cAAI,mBAAmB,MAAM,YAAY,oBAAoB;AAE7D,sBAAY,MAAM,kBAAkB,kBAAkB;AACtD,iBAAO;AAAA;AAET,YAAI,iBAAiB,qBAAqB,QAAQ,uBAAuB;AAEzE,YAAI,CAAC,aAAa,CAAC,gBAAgB;AACjC,iBAAO;AAAA;AAGT,YAAI,aAAa,KAAK,cAAc;AACpC,YAAI,eAAe,KAAK,gBAAgB,eAAe;AACvD,YAAI,aAAa,eAAe;AAChC,aAAK,mBAAmB,KAAK,aAAa,qBAAqB;AAE/D,aAAK,aAAa,mBAAmB;AACrC,aAAK,iCAAiC,sBAAsB,mBAAmB;AAC/E,aAAK,SAAS,sBAAsB,mBAAmB;AACvD,aAAK,YAAY;AACjB,aAAK,cAAc,sBAAsB;AACzC,aAAK,aAAa,mBAAmB,WAAW;AAEhD,aAAK,IAAI,SAAS,gBAAgB,MAAM,YAAY,WAAW,cAAc,gBAAgB,KAAK,kBAAkB,MAAM;AAE1H,aAAK,IAAI;AACT,aAAK,YAAY,MAAM;AACvB,eAAO;AAAA;AAAA,OASR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wCAAwC,uBAAuB;AACpE,YAAI,OAAO,sBAAsB,MAC7B,aAAa,sBAAsB,YACnC,YAAY,sBAAsB,WAClC,eAAe,sBAAsB;AACzC,YAAI,kBAAkB;AAEtB,YAAI,YAAY,YAAY;AAC1B,eAAK,aAAa,qBAAoB,qBAAkB,yBAAuB,CAAC,sLAAsL,CAAC;AAEvQ,eAAK,IAAI,SAAS,gBAAgB,MAAM,YAAY,WAAW,cAAc;AAC7E,4BAAkB;AAAA;AAGpB,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,kBAAkB,mBAAmB;AAQrE,eAAO,CAAE,MAAK,YAAY,SAAS,qBAAqB,KAAK,YAAY,kBAAkB,qBAAqB,qBAAqB,qBAAqB,sBAAsB;AAAA;AAAA,OASjL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,sBAAsB;AAClD,eAAO,KAAK,YAAY,aAAa,qBAAqB;AAAA;AAAA,OAU3D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,eAAe,mBAAmB;AAChE,YAAI,eAAe,KAAK,YAAY,aAAa,gBAAgB,oBAAoB,IAAI;AAGzF,YAAI,iBAAiB,QAAQ,iBAAiB,QAAQ;AACpD,yBAAe,KAAK,YAAY,aAAa,oBAAoB;AAAA;AAGnE,eAAO;AAAA;AAAA,OAUR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0CAA0C,sBAAsB,mBAAmB,YAAY;AACpG,YAAI,CAAC,YAAY;AACf,cAAI,KAAK,IAAI,MAAM,MAAM,qBAAmB,0BAA0B,mBAAmB;AACvF,iBAAK,aAAa,mBAAmB,WAAW,qBAAqB,IAAI,mBAAmB,KAAK,qBAAqB;AAAA,iBACjH;AACL,iBAAK,aAAa,mBAAmB,WAAW,mBAAmB,qBAAqB,IAAI,qBAAqB;AAAA;AAAA;AAAA;AAAA,OAYtH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,sBAAsB,mBAAmB,cAAc;AAC9E,YAAI,SAAS;AAEb,YAAI,kBAAkB,sBAAsB,KAAK,YAAY,YAAY,gBAAgB,KAAK,YAAY,cAAc,gBAAgB;AACxI,aAAK,IAAI,YAAY,WAAY;AAC/B,+BAAqB,QAAQ,SAAU,oBAAoB;AACzD,mBAAO,YAAY,QAAQ,oBAAoB,mBAAmB,OAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA,OAWhG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,aAAa,aAAa;AACtD,YAAI,SAAS,MACT;AAEJ,YAAI,aAAa;AACjB,YAAI,aAAa,KAAK,IAAI,MAAM,MAAM,qBAAmB,gBAAgB;AACzE,oBAAY,QAAQ,SAAU,WAAW;AACvC,qBAAW,KAAK,OAAO,IAAI,iBAAiB;AAAA;AAE9C,aAAK,IAAI,gBAAgB,YAAY,IAAI,YAAY;AAErD,QAAC,aAAY,KAAK,KAAK,gBAAgB,MAAM,WAAW,CAAC,cAAe,cAAa,WAAW,SAAS,IAAI,GAAG,OAAO;AAAA;AAAA,OAWxH;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,MAAM,WAAW;AAC3C,YAAI,UAAU,KAAK;AACnB,YAAI,WAAW;AACf,YAAI,SAAS;AACb,YAAI,YAAY;AAChB,YAAI,eAAe;AAEnB,YAAI,KAAK,kBAAkB;AACzB,cAAI,oBAAoB;AAExB,cAAI,KAAK,UAAU,KAAK,WAAW;AACjC,gCAAoB,KAAK,YAAY,oBAAoB,YAAY;AAAA,iBAChE;AACL,gCAAoB,KAAK,YAAY,oBAAoB;AAAA;AAG3D,cAAI,eAAe,KAAK,YAAY,aAAa,sBAAsB,OAAO,KAAK,IAAI,oBAAoB,IAAI,oBAAoB;AACnI,cAAI,cAAc,KAAK,YAAY,YAAY;AAC/C,qBAAW,KAAK,YAAY,sBAAsB;AAClD,mBAAS;AAAA,mBACA,KAAK,UAAU,KAAK,WAAW;AACxC,mBAAS,YAAY;AACrB,qBAAW,SAAS,UAAU;AAAA,eACzB;AACL,qBAAW;AACX,mBAAS,WAAW,UAAU;AAAA;AAGhC,oBAAY,KAAK,IAAI;AACrB,uBAAe,KAAK,IAAI,cAAc;AACtC,kBAAU,cAAc,IAAI,eAAW,UAAU;AACjD,kBAAU,YAAY,IAAI,eAAW,QAAQ,eAAe;AAAA;AAAA,OAa7D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,WAAW,YAAY;AACvD,eAAO,UAAU,KAAK,SAAU,KAAK,kBAAkB;AACrD,iBAAO,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAKxC,WAAO;AAAA;;;ANpWT,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAgCjM,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAC7B,MAAI,gBAAc,oBAAI;AAKtB,MAAI,wBAAwB;AASrB,MAAI,aAA0B,yBAAU,aAAa;AAC1D,gBAAU,aAAY;AAEtB,QAAI,SAAS,eAAa;AAE1B,yBAAoB,aAAa;AAC/B,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,cAAc;AAQpB,YAAM,YAAY;AAQlB,YAAM,mBAAmB;AACzB,oBAAY,IAAI,yBAAuB,QAAQ;AAAA,QAC7C,kBAAkB;AAAA,QAClB,YAAY;AAAA,QACZ,sBAAsB;AAAA;AAExB,aAAO;AAAA;AAUT,oBAAa,aAAY,CAAC;AAAA,MACxB,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,mBAAmB,KAAK,IAAI,eAAe,YAAY,cAAc,IAAI;AAC9E,aAAK,cAAc,IAAI,oBAAY,MAAM,KAAK;AAC9C,aAAK,eAAe,IAAI,mBAAa,MAAM,KAAK;AAChD,aAAK,YAAY,IAAI,gBAAU,MAAM,KAAK;AAC1C,aAAK,gBAAgB,IAAI,oBAAc,MAAM,KAAK;AAClD,aAAK,oBAAoB,IAAI,kBAAkB;AAC/C,aAAK,QAAQ,aAAa,WAAY;AACpC,iBAAO,OAAO,YAAY,MAAM,QAAQ;AAAA;AAE1C,aAAK,QAAQ,oBAAoB,WAAY;AAC3C,iBAAO,OAAO,mBAAmB,MAAM,QAAQ;AAAA;AAEjD,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO,gBAAgB,MAAM,QAAQ;AAAA;AAE9C,aAAK,QAAQ,sBAAsB,WAAY;AAC7C,iBAAO,OAAO,qBAAqB,MAAM,QAAQ;AAAA;AAEnD,aAAK,QAAQ,oBAAoB,WAAY;AAC3C,iBAAO,OAAO,mBAAmB,MAAM,QAAQ;AAAA;AAEjD,aAAK,QAAQ,cAAc,WAAY;AACrC,iBAAO,OAAO,aAAa,MAAM,QAAQ;AAAA;AAE3C,aAAK,QAAQ,kCAAkC,WAAY;AACzD,iBAAO,OAAO,iCAAiC,MAAM,QAAQ;AAAA;AAE/D,aAAK,QAAQ,qBAAqB,WAAY;AAC5C,iBAAO,OAAO,oBAAoB,MAAM,QAAQ;AAAA;AAElD,aAAK,QAAQ,yBAAyB,WAAY;AAChD,iBAAO,OAAO,wBAAwB,MAAM,QAAQ;AAAA;AAEtD,aAAK,QAAQ,mBAAmB,WAAY;AAC1C,iBAAO,OAAO,kBAAkB,MAAM,QAAQ;AAAA;AAEhD,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO,gBAAgB,MAAM,QAAQ;AAAA;AAE9C,aAAK,QAAQ,qBAAqB,WAAY;AAC5C,iBAAO,OAAO,oBAAoB,MAAM,QAAQ;AAAA;AAElD,aAAK,QAAQ,oBAAoB,WAAY;AAC3C,iBAAO,OAAO,mBAAmB,MAAM,QAAQ;AAAA;AAEjD,aAAK,QAAQ,wBAAwB,WAAY;AAC/C,iBAAO,OAAO,uBAAuB,MAAM,QAAQ;AAAA;AAErD,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAE/C,aAAK,QAAQ,iBAAiB,WAAY;AACxC,iBAAO,OAAO,gBAAgB,MAAM,QAAQ;AAAA;AAE9C,aAAK,QAAQ,kBAAkB,SAAU,MAAM;AAC7C,iBAAO,OAAO,iBAAiB;AAAA;AAGjC,eAAK,kBAAgB,YAAW,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMxE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK,IAAI,eAAe,cAAc;AAEtC,eAAK,kBAAgB,YAAW,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAMzE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AAEL,YAAI,oBAAoB,KAAK,YAAY;AACzC,aAAK;AAEL,aAAK,YAAY,eAAe;AAEhC,eAAK,kBAAgB,YAAW,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAkBxE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,MAAM,YAAY,WAAW,cAAc;AACzE,eAAO,KAAK,kBAAkB,gBAAgB,MAAM,YAAY,WAAW;AAAA;AAAA,OAO5E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mCAAmC;AACxC,YAAI,OAAO,cAAY,IAAI;AAC3B,aAAK,uBAAuB;AAAA;AAAA,OAM7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kCAAkC;AACvC,YAAI,OAAO,cAAY,IAAI;AAC3B,aAAK,uBAAuB;AAAA;AAAA,OAW7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC,QAAO,QAAQ,IAAI;AACzD,aAAK,aAAa,YAAY,QAAO,QAAQ;AAAA;AAAA,OAU9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,KAAK;AACnC,YAAI,OAAO,cAAY,IAAI;AAE3B,YAAI,KAAK,sBAAsB;AAC7B;AAAA;AAGF,eAAO,KAAK,YAAY,cAAc;AAAA;AAAA,OASvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,YAAI,OAAO,cAAY,IAAI;AAE3B,YAAI,KAAK,sBAAsB;AAC7B;AAAA;AAGF,eAAO,KAAK,YAAY;AAAA;AAAA,OAUzB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,QAAO,QAAQ,SAAS;AACzD,YAAI,OAAO,cAAY,IAAI;AAE3B,YAAI,KAAK,wBAAwB,KAAK,YAAY,kBAAkB,SAAQ;AAC1E,iBAAO;AAAA;AAGT,aAAK,YAAY,WAAW,QAAO,QAAQ;AAC3C,eAAO;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,sBAAsB,QAAO,QAAQ,cAAc;AACxD,YAAI,OAAO,cAAY,IAAI;AAC3B,aAAK,aAAa,mBAAmB;AACrC,aAAK,aAAa,mBAAmB,UAAU,aAAa,IAAI;AAChE,aAAK,aAAa,mBAAmB,WAAW,aAAa,IAAI,MAAM,KAAK;AAC5E,aAAK,YAAY,WAAW,QAAO,QAAQ;AAC3C,aAAK,aAAa;AAClB,eAAO,KAAK,YAAY,UAAU;AAAA;AAAA,OAUnC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0CAA0C,iBAAgB;AAC/D,eAAO,KAAK,cAAc,cAAc;AAAA;AAAA,OAUzC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B,KAAK,IAAI;AAC3C,aAAK,UAAU,sBAAsB,KAAK;AAAA;AAAA,OAU3C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC,gBAAgB;AACrD,eAAO,KAAK,UAAU,uBAAuB;AAAA;AAAA,OAY9C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,QAAO,QAAQ,WAAW,QAAQ;AACjE,YAAI,SAAS;AAEb,YAAI,WAAW,KAAK,YAAY;AAC9B;AAAA;AAGF,YAAI,OAAO,cAAY,IAAI;AAC3B,mBAAW,WAAY;AACrB,eAAK,aAAa;AAElB,iBAAO,UAAU;AAEjB,iBAAO,aAAa,mBAAmB;AAAA,WACtC;AAAA;AAAA,OAYJ;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA2B,QAAO,QAAQ,cAAc;AAC7D,YAAI,SAAS;AAEb,YAAI,uBAAuB,MAAM,KAAK,aAAa,OAAO,SAAU,aAAa,eAAe;AAC9F,cAAI,OAAO,YAAY,SAAS,gBAAgB;AAC9C,gBAAI,WAAW,OAAO,YAAY,cAAc,eAAe;AAG/D,wBAAY,IAAI;AAEhB,gBAAI,MAAM,QAAQ,WAAW;AAE3B,uBAAS,QAAQ,SAAU,OAAO;AAChC,uBAAO,YAAY,IAAI,OAAO,YAAY,YAAY;AAAA;AAAA;AAI1D,mBAAO;AAAA;AAIT,iBAAO,YAAY,IAAI;AAAA,WACtB,oBAAI;AAEP,qBAAa,SAAS;AACtB,qBAAa,KAAK,MAAM,cAAc,qBAAmB;AAAA;AAAA,OAQ1D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,aAAK,aAAa,mBAAmB;AAAA;AAAA,OAUtC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB,QAAQ,SAAS;AAC/C,aAAK,aAAa,mBAAmB,WAAW,KAAK,YAAY,YAAY;AAC7E,aAAK,aAAa,mBAAmB;AACrC,aAAK,UAAU;AAAA;AAAA,OAQhB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,aAAK,aAAa,mBAAmB;AAAA;AAAA,OAWtC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,QAAQ,SAAS,sBAAsB;AACxE,aAAK,aAAa,mBAAmB,WAAW,sBAAsB,MAAM;AAC5E,aAAK,aAAa,mBAAmB;AACrC,aAAK,UAAU;AAAA;AAAA,OAQhB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B;AACjC,aAAK,YAAY;AAAA;AAAA,OAQlB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,YAAI,eAAe,KAAK,IAAI,MAAM,MAAM,qBAAmB,KAAK,YAAY,MAAM;AAElF,YAAI,eAAe,GAAG;AACpB,eAAK,UAAU,qBAAqB;AAAA;AAAA;AAAA,OAWvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,4BAA4B,OAAO,YAAY;AACpD,YAAI,OAAO,cAAY,IAAI;AAE3B,YAAI,KAAK,YAAY;AACnB,qBAAW,aAAa;AAAA;AAAA;AAAA,OAO3B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAK,kBAAgB,YAAW,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,OASnE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,MAAM;AACrC,YAAI,CAAC,iBAAiB,OAAO;AAC3B,iBAAM;AACN,eAAK,IAAI,cAAc,gBAAc;AACrC,eAAK;AACL;AAAA;AAGF,aAAK,YAAY,QAAQ;AACzB,aAAK,YAAY;AAAA;AAAA,QAEjB,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AOpmBF,oCAAO;;;ACRP,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAQ/Q,MAAI,UAAuB,2BAAY;AAErC,sBAAiB,QAAQ;AACvB,UAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAErF,yBAAgB,MAAM;AAOtB,WAAK,aAAa;AAOlB,WAAK,SAAS;AAOd,WAAK,YAAY;AACjB,WAAK;AAAA;AAUP,oBAAa,UAAS,CAAC;AAAA,MACrB,KAAK;AAAA,MACL,OAAO,mBAAmB,KAAK,OAAO;AACpC,aAAK,WAAW,aAAa,QAAQ,GAAG,OAAO,KAAK,QAAQ,KAAK,OAAO,MAAM,KAAK,UAAU;AAE7F,YAAI,KAAK,UAAU,QAAQ,SAAS,IAAI;AACtC,eAAK,UAAU,KAAK;AACpB,eAAK;AAAA;AAAA;AAAA,OAYR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,KAAK,cAAc;AAC3C,YAAI,UAAU,OAAO,QAAQ,cAAc,eAAe;AAC1D,YAAI,QAAQ,KAAK,WAAW,aAAa,QAAQ,GAAG,OAAO,KAAK,QAAQ,KAAK,OAAO;AACpF,eAAO,UAAU,OAAO,SAAS,KAAK,MAAM;AAAA;AAAA,OAQ7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,eAAe,KAAK;AACzB,aAAK,WAAW,aAAa,WAAW,GAAG,OAAO,KAAK,QAAQ,KAAK,OAAO;AAAA;AAAA,OAO5E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB;AACzB,YAAI,QAAQ;AAEZ,kBAAU,KAAK,WAAW,SAAU,OAAO,QAAO;AAChD,gBAAM,WAAW,aAAa,WAAW,GAAG,OAAO,MAAM,QAAQ,KAAK,OAAO,MAAM,UAAU;AAAA;AAE/F,aAAK;AAAA;AAAA,OAQN;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,WAAW,KAAK,WAAW,aAAa,QAAQ,GAAG,OAAO,KAAK,QAAQ;AAC3E,YAAI,QAAO,OAAO,aAAa,WAAW,KAAK,MAAM,YAAY;AACjE,aAAK,YAAY,SAAQ;AAAA;AAAA,OAQ1B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK,WAAW,aAAa,QAAQ,GAAG,OAAO,KAAK,QAAQ,0BAA0B,KAAK,UAAU,KAAK;AAAA;AAAA,OAQ3G;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,aAAK,UAAU,SAAS;AACxB,aAAK;AAAA;AAAA;AAIT,WAAO;AAAA;AAGT,MAAO,kBAAQ;;;ADjJf,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAKxM,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AAC9B,sBAAM,eAAe,SAAS;AACvB,MAAI,eAAa;AACjB,MAAI,oBAAkB;AA2BtB,MAAI,kBAA+B,yBAAU,aAAa;AAC/D,gBAAU,kBAAiB;AAE3B,QAAI,SAAS,eAAa;AAE1B,8BAAyB,aAAa;AACpC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,UAAU;AAChB,aAAO;AAAA;AAUT,oBAAa,kBAAiB,CAAC;AAAA,MAC7B,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,YAAI,CAAC,KAAK,SAAS;AACjB,eAAK,UAAU,IAAI,gBAAQ,KAAK,IAAI,YAAY,IAAI,KAAK,IAAI;AAAA;AAG/D,aAAK,QAAQ,uBAAuB,SAAU,KAAK,OAAO;AACxD,iBAAO,OAAO,UAAU,KAAK;AAAA;AAE/B,aAAK,QAAQ,uBAAuB,SAAU,KAAK,QAAQ;AACzD,iBAAO,OAAO,UAAU,KAAK;AAAA;AAE/B,aAAK,QAAQ,wBAAwB,WAAY;AAC/C,iBAAO,OAAO;AAAA;AAGhB,eAAK,kBAAgB,iBAAgB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAM7E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK,UAAU;AAEf,eAAK,kBAAgB,iBAAgB,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAM9E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,iBAAgB,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAS7E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,KAAK,QAAQ;AACrC,eAAO,QAAQ,KAAK,QAAQ,UAAU;AAAA;AAAA,OASvC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,KAAK,OAAO;AACpC,aAAK,QAAQ,UAAU,KAAK;AAAA;AAAA,OAQ7B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,KAAK;AAC9B,YAAI,OAAO,QAAQ,aAAa;AAC9B,eAAK,QAAQ;AAAA,eACR;AACL,eAAK,QAAQ,MAAM;AAAA;AAAA;AAAA,OAOtB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAK,kBAAgB,iBAAgB,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAEvE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;AEnLF,gCAAO;AAeP,oCAAO;AAxDP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAEzU,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AA8BjM,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAC7B,MAAI,8BAA8B;AAElC,MAAI,mBAAmB,2BAA0B,UAAU,KAAK,KAAK,MAAM,YAAY;AACrF,aAAS,YAAY,KAAK,KAAK,iBAAiB;AAAA;AAGlD,MAAI,uBAAuB,+BAA8B,OAAO,OAAO,gBAAgB;AACrF,QAAI,YAAY,UAAU,UAAU,QAAQ,CAAC,MAAM,qBAAqB,MAAM,WAAW,GAAG;AAC1F,aAAO;AAAA;AAGT,QAAI,YAAY,UAAU,UAAU,MAAM;AACxC,aAAO;AAAA;AAGT,WAAO,MAAM,WAAW,kBAAkB,eAAe,QAAQ,QAAQ,MAAM,kBAAkB,eAAe,aAAa;AAAA;AAmCxH,MAAI,SAAsB,yBAAU,aAAa;AACtD,gBAAU,SAAQ;AAElB,QAAI,SAAS,eAAa;AAE1B,qBAAgB,aAAa;AAC3B,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,WAAW;AAQjB,YAAM,cAAc;AAQpB,YAAM,oBAAoB;AAC1B,aAAO;AAAA;AAUT,oBAAa,SAAQ,CAAC;AAAA,MACpB,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,KAAK,IAAI,cAAc;AAAA;AAAA,OAM/B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,YAAI,iBAAiB,KAAK,IAAI,cAAc;AAC5C,aAAK,qBAAqB;AAC1B,aAAK,QAAQ,kBAAkB,WAAY;AACzC,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAG/C,eAAK,kBAAgB,QAAO,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMpE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,YAAI,SAAS;AAEb,YAAI,yBAAyB,mCAAkC;AAC7D,iBAAO,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAG/C,aAAK,IAAI,QAAQ,kBAAkB;AACnC,aAAK,IAAI,YAAY,mBAAmB,WAAY;AAClD,iBAAO,IAAI,WAAW,kBAAkB;AAAA;AAG1C,eAAK,kBAAgB,QAAO,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAMrE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK;AACL,aAAK;AAEL,eAAK,kBAAgB,QAAO,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAWpE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,eAAe,UAAU;AAC9B,YAAI,SAAS;AAEb,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK;AACxF,YAAI,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,KAAK;AAC3F,YAAI,WAAW,KAAK,IAAI;AACxB,YAAI,WAAW,KAAK,IAAI;AACxB,YAAI,cAAc;AAClB,YAAI,WAAW,KAAK;AACpB,kBAAU,GAAG,WAAW,GAAG,SAAU,UAAU;AAC7C,oBAAU,GAAG,WAAW,GAAG,SAAU,UAAU;AAC7C,gBAAI,WAAW,OAAO,IAAI,cAAc,UAAU;AAElD,gBAAI,iBAAiB,OAAO,IAAI,YAAY,UAAU;AAEtD,gBAAI,eAAe,eAAe,OAAO,YAAY;AACrD,gBAAI,kBAAkB,eAAe,OAAO,eAAe;AAC3D,gBAAI,aAAa,gBAAgB,UAAU,UAAU;AAErD,gBAAI,YAAY;AACd,kBAAI,eAAe;AAAA,gBACjB,KAAK;AAAA,gBACL,KAAK;AAAA,gBACL,MAAM;AAAA;AAER,0BAAY,KAAK;AAAA;AAGnB,gBAAI,cAAc;AAChB,2BAAa,UAAU,UAAU,UAAU,UAAU;AAAA;AAAA;AAAA;AAI3D,eAAO;AAAA;AAAA,OAQR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB;AAC5B,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB,aAAa;AACvC,aAAK,WAAW;AAAA;AAAA,OAQjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB,gBAAgB;AAC7C,aAAK,cAAc;AAAA;AAAA,OAQpB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,gCAAgC;AACrC,eAAO,KAAK;AAAA;AAAA,OAQb;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,iBAAiB;AACpD,aAAK,oBAAoB;AAAA;AAAA,OAS1B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,8BAA8B,gBAAgB;AACnD,YAAI,UAAS,iBAAiB;AAC5B,cAAI,eAAe,mBAAmB;AACpC,iBAAK,qBAAqB,eAAe;AAAA;AAG3C,cAAI,eAAe,aAAa;AAC9B,iBAAK,eAAe,eAAe;AAAA;AAGrC,cAAI,eAAe,UAAU;AAC3B,iBAAK,YAAY,eAAe;AAAA;AAAA;AAAA;AAAA,OAgBrC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AAE1E,YAAI,YAAY,eAAe,aAAa;AAC5C,YAAI,aAAa;AAEjB,YAAI,OAAO,cAAc,UAAU;AACjC,uBAAa,UAAU,MAAM;AAAA,eACxB;AACL,cAAI;AAEJ,UAAC,eAAc,YAAY,KAAK,MAAM,aAAa,qBAAmB;AAAA;AAGxE,YAAI,KAAK,eAAe,eAAe,gBAAgB;AACrD,cAAI,CAAC,WAAW,SAAS,KAAK,oBAAoB;AAChD,uBAAW,KAAK,GAAG,OAAO,KAAK;AAAA;AAAA,mBAExB,WAAW,SAAS,KAAK,oBAAoB;AACtD,qBAAW,OAAO,WAAW,QAAQ,KAAK,oBAAoB;AAAA;AAGhE,uBAAe,YAAY,WAAW,KAAK;AAAA;AAAA,OAM5C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAK,kBAAgB,QAAO,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAE9D,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;ACrZF,oCAAO;AAXP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAezU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAMjM,MAAI,eAAa;AACjB,MAAI,oBAAkB;AAOtB,MAAI,cAA2B,yBAAU,aAAa;AAC3D,gBAAU,cAAa;AAEvB,QAAI,SAAS,eAAa;AAE1B,0BAAqB,aAAa;AAChC,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAO1B,YAAM,aAAa;AAOnB,YAAM,SAAS;AAQf,YAAM,mBAAmB;AAQzB,YAAM,iBAAiB;AACvB,aAAO;AAAA;AAST,oBAAa,cAAa,CAAC;AAAA,MACzB,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO;AAAA;AAAA,OAMR;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,QAAQ,mBAAmB,WAAY;AAC1C,iBAAO,OAAO;AAAA;AAEhB,aAAK;AAEL,eAAK,kBAAgB,aAAY,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMzE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,aAAK,mBAAmB;AAExB,eAAK,kBAAgB,aAAY,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMzE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,eAAK,kBAAgB,aAAY,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAQ1E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,2BAA0B;AAC/B,YAAI,SAAS;AAEb,aAAK,QAAQ,qBAAqB,WAAY;AAC5C,iBAAO,OAAO;AAAA;AAEhB,aAAK,QAAQ,uBAAuB,WAAY;AAC9C,iBAAO,OAAO;AAAA;AAAA;AAAA,OASjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,6BAA6B;AAClC,YAAI,KAAK,kBAAkB;AACzB;AAAA;AAGF,YAAI,wBAAwB,KAAK,IAAI,KAAK,GAAG,YACzC,aAAa,sBAAsB,YACnC,gBAAgB,sBAAsB,eACtC,cAAc,sBAAsB,aACpC,uBAAuB,sBAAsB,sBAC7C,0BAA0B,sBAAsB;AACpD,aAAK,mBAAmB;AACxB,aAAK,WAAW,SAAS;AACzB,aAAK,WAAW,KAAK;AAErB,YAAI,cAAc,OAAO;AACvB,eAAK,WAAW,KAAK;AAAA;AAGvB,aAAK,WAAW,KAAK;AAErB,YAAI,sBAAsB;AACxB,eAAK,WAAW,KAAK;AAAA;AAGvB,YAAI,2BAA2B,wBAAwB,OAAO;AAC5D,eAAK,WAAW,KAAK;AAAA;AAGvB,aAAK,SAAS;AAEd,YAAI,WAAW,gBAAgB;AAC7B,eAAK,OAAO,KAAK,WAAW,MAAM,QAAQ,OAAO;AAAA;AAGnD,YAAI,cAAc,gBAAgB;AAChC,eAAK,OAAO,KAAK,cAAc,MAAM,QAAQ,OAAO;AAAA;AAGtD,YAAI,YAAY,gBAAgB;AAC9B,eAAK,OAAO,KAAK,YAAY,MAAM,QAAQ,OAAO;AAAA;AAGpD,YAAI,sBAAsB;AACxB,eAAK,OAAO,KAAK,qBAAqB,MAAM,QAAQ,OAAO;AAAA;AAG7D,YAAI,2BAA2B,wBAAwB,OAAO;AAC5D,eAAK,OAAO,KAAK,wBAAwB,MAAM,QAAQ,OAAO;AAAA;AAAA;AAAA,OASjE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,+BAA+B;AACpC,aAAK,iBAAiB;AACtB,kBAAU,KAAK,QAAQ,SAAU,QAAO;AACtC,mBAAS,QAAO;AAAA;AAAA;AAAA,OASnB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,iCAAiC;AACtC,YAAI,SAAS;AAEb,aAAK,iBAAiB;AACtB,kBAAU,KAAK,QAAQ,SAAU,QAAO;AACtC,sBAAY,QAAO;AACnB,mBAAS,QAAO;AAAA;AAGlB,aAAK,IAAI,iBAAiB,WAAY;AACpC,oBAAU,OAAO,QAAQ,SAAU,QAAO;AACxC,wBAAY,QAAO;AAAA;AAAA,WAEpB;AAEH,kBAAU,KAAK,YAAY,SAAU,WAAW;AAC9C,oBAAU;AACV,oBAAU;AAAA;AAEZ,aAAK,IAAI,KAAK,GAAG,WAAW;AAAA;AAAA,QAE5B,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;ACnRF,oCAAO;AAJP,qBAAiB,KAAK;AAAE;AAA2B,WAAO,YAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,UAAQ;AAAA;AAqBzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,oBAAgB;AAAE,QAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAE,eAAO,QAAQ;AAAA,WAAY;AAAE,eAAO,gBAAc,QAAQ,UAAU,UAAU;AAAE,YAAI,OAAO,iBAAe,QAAQ;AAAW,YAAI,CAAC;AAAM;AAAQ,YAAI,OAAO,OAAO,yBAAyB,MAAM;AAAW,YAAI,KAAK,KAAK;AAAE,iBAAO,KAAK,IAAI,KAAK,UAAU,SAAS,IAAI,SAAS;AAAA;AAAa,eAAO,KAAK;AAAA;AAAA;AAAY,WAAO,OAAK,MAAM,MAAM;AAAA;AAErZ,4BAAwB,QAAQ,UAAU;AAAE,WAAO,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,WAAW;AAAE,eAAS,kBAAgB;AAAS,UAAI,WAAW;AAAM;AAAA;AAAS,WAAO;AAAA;AAErL,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,WAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAKjM,MAAI,eAAa;AACjB,MAAI,oBAAkB;AA6CtB,MAAI,WAAwB,yBAAU,aAAa;AACxD,gBAAU,WAAU;AAEpB,QAAI,SAAS,eAAa;AAE1B,uBAAkB,aAAa;AAC7B,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,cAAQ,OAAO,KAAK,MAAM;AAQ1B,YAAM,iBAAiB;AACvB,aAAO;AAAA;AAUT,oBAAa,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,eAAO,CAAC,CAAC,KAAK,IAAI,cAAc;AAAA;AAAA,OAMjC;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,KAAK,SAAS;AAChB;AAAA;AAGF,aAAK,iBAAiB,KAAK,IAAI,eAAe,YAAY,YAAY,IAAI;AAC1E,aAAK,eAAe,aAAa,QAAQ,WAAY;AACnD,iBAAO,OAAO;AAAA;AAGhB,eAAK,kBAAgB,UAAS,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMtE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,wBAAwB;AAC7B,YAAI,SAAS;AAEb,YAAI,cAAc,KAAK,IAAI,cAAc;AAEzC,YAAI,MAAM,QAAQ,cAAc;AAC9B,eAAK,IAAI,eAAe,WAAY;AAClC,mBAAO,eAAe;AAEtB,sBAAU,aAAa,SAAU,aAAa;AAC5C,qBAAO,eAAe,gBAAgB,aAAa;AAAA;AAAA,aAEpD;AAAA;AAGL,eAAK,kBAAgB,UAAS,YAAY,gBAAgB,MAAM,KAAK;AAAA;AAAA,OAMtE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,yBAAyB;AAC9B,aAAK,IAAI,eAAe,cAAc;AAEtC,eAAK,kBAAgB,UAAS,YAAY,iBAAiB,MAAM,KAAK;AAAA;AAAA,OAQvE;AAAA,MACD,KAAK;AAAA,MACL,OAAO,0BAA0B;AAC/B,eAAO,KAAK,eAAe;AAAA;AAAA,OAU5B;AAAA,MACD,KAAK;AAAA,MACL,OAAO,kBAAkB,MAAM;AAC7B,YAAI,SAAS;AAEb,YAAI,oBAAoB,KAAK;AAC7B,YAAI,gBAAgB,KAAK,cAAc;AACvC,YAAI,wBAAwB;AAE5B,YAAI,eAAe;AACjB,kCAAwB,MAAM,KAAK,IAAI,IAAI,kBAAkB,OAAO;AAAA;AAGtE,YAAI,eAAe,KAAK,IAAI,SAAS,iBAAiB,mBAAmB,uBAAuB;AAEhG,YAAI,iBAAiB,OAAO;AAC1B;AAAA;AAGF,YAAI,eAAe;AACjB,eAAK,IAAI,eAAe,WAAY;AAClC,sBAAU,MAAM,SAAU,aAAa;AACrC,qBAAO,eAAe,gBAAgB,aAAa;AAAA;AAAA,aAEpD;AAAA;AAGL,aAAK,IAAI,SAAS,gBAAgB,mBAAmB,uBAAuB,eAAe,iBAAiB,sBAAsB,SAAS,kBAAkB;AAAA;AAAA,OAQ9J;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,iBAAS,OAAO,UAAU,QAAQ,MAAM,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACtF,cAAI,QAAQ,UAAU;AAAA;AAGxB,aAAK,SAAS;AAAA;AAAA,OAUf;AAAA,MACD,KAAK;AAAA,MACL,OAAO,oBAAoB,MAAM;AAC/B,YAAI,oBAAoB,KAAK;AAC7B,YAAI,gBAAgB,KAAK,cAAc;AACvC,YAAI,wBAAwB;AAC5B,YAAI,oBAAoB,KAAK,eAAe,YAAY;AACxD,YAAI,oBAAoB,KAAK,SAAS;AAEtC,YAAI,iBAAiB,mBAAmB;AAEtC,oBAAU,MAAM,SAAU,aAAa;AACrC,8BAAkB,eAAe;AAAA;AAGnC,kCAAwB,YAAY,mBAAmB,SAAU,gBAAgB,WAAW,eAAe;AACzG,gBAAI,WAAW;AACb,6BAAe,KAAK;AAAA;AAGtB,mBAAO;AAAA,aACN;AAAA;AAGL,YAAI,iBAAiB,KAAK,IAAI,SAAS,mBAAmB,mBAAmB,uBAAuB,iBAAiB;AAErH,YAAI,mBAAmB,OAAO;AAC5B;AAAA;AAGF,YAAI,iBAAiB,mBAAmB;AACtC,eAAK,eAAe,UAAU;AAAA;AAGhC,aAAK,IAAI,SAAS,kBAAkB,mBAAmB,uBAAuB,iBAAiB,mBAAmB,iBAAiB,sBAAsB,SAAS,kBAAkB;AAAA;AAAA,OAQrL;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,iBAAS,QAAQ,UAAU,QAAQ,MAAM,IAAI,MAAM,QAAQ,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC5F,cAAI,SAAS,UAAU;AAAA;AAGzB,aAAK,WAAW;AAAA;AAAA,OASjB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB,aAAa;AACrC,eAAO,KAAK,eAAe,gBAAgB,gBAAgB;AAAA;AAAA,OAM5D;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,aAAK,WAAW,KAAK;AAAA;AAAA,OAStB;AAAA,MACD,KAAK;AAAA,MACL,OAAO,uBAAuB,aAAa;AACzC,YAAI,aAAa,KAAK,IAAI;AAC1B,eAAO,YAAY,MAAM,SAAU,YAAY;AAC7C,iBAAO,OAAO,UAAU,eAAe,cAAc,KAAK,aAAa;AAAA;AAAA;AAAA,OAS1E;AAAA,MACD,KAAK;AAAA,MACL,OAAO,qBAAqB;AAC1B,YAAI,SAAS;AAEb,YAAI,cAAc,KAAK,IAAI,cAAc;AAEzC,YAAI,MAAM,QAAQ,cAAc;AAC9B,eAAK,IAAI,eAAe,WAAY;AAClC,sBAAU,aAAa,SAAU,aAAa;AAC5C,qBAAO,eAAe,gBAAgB,aAAa;AAAA;AAAA,aAEpD;AAAA;AAAA;AAAA,OAON;AAAA,MACD,KAAK;AAAA,MACL,OAAO,mBAAmB;AACxB,eAAK,kBAAgB,UAAS,YAAY,WAAW,MAAM,KAAK;AAAA;AAAA,QAEhE,CAAC;AAAA,MACH,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA,OAER;AAAA,MACD,KAAK;AAAA,MACL,KAAK,gBAAe;AAClB,eAAO;AAAA;AAAA;AAIX,WAAO;AAAA,IACP;;;ACzUF,oCAAO;AAKP,gCAAO;AA3DP,sBAAiB,KAAK;AAAE;AAA2B,WAAO,aAAU,AAAc,OAAO,UAArB,cAA+B,AAAY,OAAO,OAAO,YAA1B,WAAqC,SAAU,MAAK;AAAE,aAAO,OAAO;AAAA,QAAS,SAAU,MAAK;AAAE,aAAO,QAAO,AAAc,OAAO,UAArB,cAA+B,KAAI,gBAAgB,UAAU,SAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,OAAQ,WAAQ;AAAA;AAEzU,8BAAyB,UAAU,aAAa;AAAE,QAAI,CAAE,qBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU;AAAA;AAAA;AAEhH,gCAA2B,QAAQ,OAAO;AAAE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,UAAI,aAAa,MAAM;AAAI,iBAAW,aAAa,WAAW,cAAc;AAAO,iBAAW,eAAe;AAAM,UAAI,WAAW;AAAY,mBAAW,WAAW;AAAM,aAAO,eAAe,QAAQ,WAAW,KAAK;AAAA;AAAA;AAE7S,2BAAsB,aAAa,YAAY,aAAa;AAAE,QAAI;AAAY,2BAAkB,YAAY,WAAW;AAAa,QAAI;AAAa,2BAAkB,aAAa;AAAc,WAAO,eAAe,aAAa,aAAa,EAAE,UAAU;AAAU,WAAO;AAAA;AAE/Q,uBAAmB,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU;AAAA;AAAyD,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc;AAAW,WAAO,eAAe,UAAU,aAAa,EAAE,UAAU;AAAU,QAAI;AAAY,wBAAgB,UAAU;AAAA;AAEtb,6BAAyB,GAAG,GAAG;AAAE,wBAAkB,OAAO,kBAAkB,2BAAyB,IAAG,IAAG;AAAE,SAAE,YAAY;AAAG,aAAO;AAAA;AAAM,WAAO,kBAAgB,GAAG;AAAA;AAErK,0BAAsB,SAAS;AAAE,QAAI,4BAA4B;AAA6B,WAAO,gCAAgC;AAAE,UAAI,QAAQ,kBAAgB,UAAU;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAY,kBAAgB,MAAM;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW;AAAA,aAAmB;AAAE,iBAAS,MAAM,MAAM,MAAM;AAAA;AAAc,aAAO,6BAA2B,MAAM;AAAA;AAAA;AAE5Z,wCAAoC,OAAM,OAAM;AAAE,QAAI,SAAS,YAAQ,WAAU,YAAY,OAAO,UAAS,aAAa;AAAE,aAAO;AAAA,eAAiB,UAAS,QAAQ;AAAE,YAAM,IAAI,UAAU;AAAA;AAA+D,WAAO,yBAAuB;AAAA;AAExR,oCAAgC,OAAM;AAAE,QAAI,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe;AAAA;AAAgE,WAAO;AAAA;AAE/J,yCAAqC;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,cAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,SAAS,IAAI,WAAY;AAAA;AAAM,aAAO;AAAA,aAAe,GAAP;AAAY,aAAO;AAAA;AAAA;AAE/T,6BAAyB,GAAG;AAAE,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,2BAAyB,IAAG;AAAE,aAAO,GAAE,aAAa,OAAO,eAAe;AAAA;AAAO,WAAO,kBAAgB;AAAA;AAExM,gCAA4B,KAAK;AAAE,WAAO,qBAAmB,QAAQ,mBAAiB,QAAQ,8BAA4B,QAAQ;AAAA;AAElI,kCAA8B;AAAE,UAAM,IAAI,UAAU;AAAA;AAEpD,8BAA0B,MAAM;AAAE,QAAI,OAAO,WAAW,eAAe,KAAK,OAAO,aAAa,QAAQ,KAAK,iBAAiB;AAAM,aAAO,MAAM,KAAK;AAAA;AAEtJ,gCAA4B,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO,oBAAkB;AAAA;AAEpF,4BAAwB,KAAK,GAAG;AAAE,WAAO,kBAAgB,QAAQ,wBAAsB,KAAK,MAAM,8BAA4B,KAAK,MAAM;AAAA;AAEzI,gCAA4B;AAAE,UAAM,IAAI,UAAU;AAAA;AAElD,yCAAqC,GAAG,QAAQ;AAAE,QAAI,CAAC;AAAG;AAAQ,QAAI,OAAO,MAAM;AAAU,aAAO,oBAAkB,GAAG;AAAS,QAAI,IAAI,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,GAAG;AAAK,QAAI,MAAM,YAAY,EAAE;AAAa,UAAI,EAAE,YAAY;AAAM,QAAI,MAAM,SAAS,MAAM;AAAO,aAAO,MAAM,KAAK;AAAI,QAAI,MAAM,eAAe,2CAA2C,KAAK;AAAI,aAAO,oBAAkB,GAAG;AAAA;AAEtZ,+BAA2B,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAAS,IAAI,GAAG,OAAO,IAAI,MAAM,MAAM,IAAI,KAAK,KAAK;AAAE,WAAK,KAAK,IAAI;AAAA;AAAM,WAAO;AAAA;AAEhL,mCAA+B,KAAK,GAAG;AAAE,QAAI,KAAK,OAAO,OAAO,OAAO,OAAO,WAAW,eAAe,IAAI,OAAO,aAAa,IAAI;AAAe,QAAI,MAAM;AAAM;AAAQ,QAAI,OAAO;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,IAAI;AAAI,QAAI;AAAE,WAAK,KAAK,GAAG,KAAK,MAAM,CAAE,MAAM,MAAK,GAAG,QAAQ,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG;AAAQ,YAAI,KAAK,KAAK,WAAW;AAAG;AAAA;AAAA,aAAkB,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAO;AAAU,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;AAAA,gBAAe;AAAU,YAAI;AAAI,gBAAM;AAAA;AAAA;AAAQ,WAAO;AAAA;AAE1f,6BAAyB,KAAK;AAAE,QAAI,MAAM,QAAQ;AAAM,aAAO;AAAA;AA6BxD,MAAI,eAAa;AAexB,oBAAkB,UAAU;AAC1B,QAAI,SAAS;AACb,SAAK,WAAW;AAChB,SAAK,cAAc;AACnB,SAAK,gBAAgB;AACrB,SAAK,mBAAmB;AACxB,SAAK,UAAU;AACf,aAAS,QAAQ,eAAe,SAAU,SAAS,QAAQ;AACzD,UAAI,QAAQ;AAEZ,UAAI,aAAa,WAAW,QAAQ;AAEpC,UAAI,CAAC,YAAY;AACf;AAAA;AAGF,UAAI,iBAAiB,QAAQ,KAAK,SAAU,QAAQ;AAClD,YAAI,UAAU,iBAAe,QAAQ,IACjC,WAAW,QAAQ,IACnB,WAAW,QAAQ;AAEvB,eAAO,aAAa;AAAA;AAGtB,UAAI,CAAC,gBAAgB;AACnB;AAAA;AAGF,UAAI,gBAAgB,0BAAyB;AAC3C,YAAI,gBAAgB,QAAQ,OAAO,SAAU,KAAK,QAAQ;AACxD,cAAI,KAAK,qBAAmB;AAC5B,iBAAO;AAAA,WACN;AACH,kBAAU,eAAe,SAAU,QAAQ;AACzC,iBAAO,KAAK,SAAS,UAAU,OAAO;AAAA;AAExC,YAAI,WAAW,aAAa,IAAI,MAAM,gBAAgB,CAAC,CAAC,cAAc,GAAG,IAAI,cAAc,GAAG;AAC9F,eAAO,IAAI,SAAS,aAAa,eAAe;AAAA;AAGlD,aAAO,KAAK,eAAe;AAAA;AAE7B,aAAS,QAAQ,kBAAkB,SAAU,QAAO,QAAQ,QAAQ;AAClE,aAAO,KAAK,WAAY;AACtB,eAAO,IAAI,SAAS,gBAAgB,QAAO;AAAA,SAC1C;AAAA;AAEL,aAAS,QAAQ,mBAAmB,SAAU,QAAO,QAAQ,WAAW,QAAQ;AAC9E,UAAI,gBAAgB,0BAAyB;AAC3C,YAAI,eAAe,OAAO,SAAS;AACnC,YAAI,WAAY,cAAa,SAAS,UAAS,aAAa;AAC5D,YAAI,mBAAmB,SAAS,cAAc;AAC9C,YAAI,cAAc,UAAU,aAAa,MAAM,kBAAkB,mBAAmB;AACpF,eAAO,IAAI,SAAS,gBAAgB,UAAU,aAAa,SAAS,cAAc,iBAAiB,SAAS,cAAc;AAAA;AAG5H,aAAO,KAAK,eAAe;AAAA;AAE7B,aAAS,QAAQ,kBAAkB,SAAU,QAAO,QAAQ,QAAQ;AAClE,aAAO,KAAK,WAAY;AACtB,eAAO,IAAI,SAAS,mBAAmB,QAAO;AAAA,SAC7C;AAAA;AAEL,aAAS,QAAQ,mBAAmB,SAAU,QAAO,QAAQ,cAAc,QAAQ;AACjF,UAAI,gBAAgB,0BAAyB;AAC3C,YAAI,eAAe,OAAO,SAAS;AACnC,YAAI,cAAe,QAAO,SAAS,cAAc,UAAS,OAAO,SAAS;AAC1E,YAAI,cAAc;AAClB,YAAI,UAAU;AACd,YAAI,UAAU;AACd,kBAAU,aAAa,SAAS,GAAG,SAAU,GAAG;AAC9C,cAAI,SAAS;AACb,cAAI,UAAU,aAAa;AAC3B,oBAAU,aAAa,cAAe,UAAS,IAAI,SAAU,GAAG;AAC9D,mBAAO,KAAK,QAAQ,SAAS,iBAAiB;AAAA;AAEhD,sBAAY,KAAK;AAAA;AAEnB,kBAAU,SAAS,GAAG,SAAU,GAAG;AACjC,kBAAQ,KAAK,SAAS,iBAAiB,cAAc;AAAA;AAGvD,YAAI,MAAM,QAAQ,SAAS,cAAc,aAAa;AACpD,oBAAU,SAAS,GAAG,SAAU,GAAG;AACjC,oBAAQ,KAAK,SAAS,cAAc,WAAW,SAAS,iBAAiB,cAAc,OAAO;AAAA;AAAA;AAIlG,YAAI,aAAa,SAAS,kBAAkB;AAC5C,YAAI,UAAU,SAAS,eAAe;AACtC,eAAO,IAAI,SAAS,mBAAmB,aAAa,SAAS,aAAa,SAAS,YAAY,SAAS,SAAS,cAAc;AAAA;AAGjI,aAAO,KAAK,eAAe;AAAA;AAE7B,aAAS,QAAQ,uBAAuB,SAAU,aAAa,OAAO,MAAM,WAAW;AACrF,aAAO,KAAK,WAAY;AACtB,eAAO,IAAI,SAAS,oBAAoB,aAAa,OAAO,MAAM;AAAA;AAAA;AAGtE,aAAS,QAAQ,gBAAgB,SAAU,iBAAiB;AAC1D,aAAO,KAAK,WAAY;AACtB,eAAO,IAAI,SAAS,cAAc;AAAA;AAAA;AAGtC,aAAS,QAAQ,iBAAiB,SAAU,MAAM,YAAY;AAC5D,UAAI,SAAS,OAAO;AAClB;AAAA;AAGF,aAAO,KAAK,WAAY;AACtB,eAAO,IAAI,SAAS,cAAc,MAAM;AAAA;AAAA;AAG5C,aAAS,QAAQ,oBAAoB,SAAU,WAAW,OAAM;AAC9D,UAAI,OAAM;AACR;AAAA;AAGF,aAAO,KAAK,WAAY;AACtB,eAAO,IAAI,SAAS,iBAAiB,UAAU;AAAA;AAAA;AAGnD,aAAS,QAAQ,qBAAqB,SAAU,WAAW,OAAM;AAC/D,UAAI,OAAM;AACR;AAAA;AAGF,aAAO,KAAK,WAAY;AACtB,eAAO,IAAI,SAAS,mBAAmB,UAAU;AAAA;AAAA;AAIrD,aAAS,QAAQ,aAAa,WAAY;AACxC,aAAO;AAAA;AAAA;AAiBX,WAAS,UAAU,OAAO,SAAU,eAAe,QAAQ;AACzD,QAAI,KAAK,kBAAkB;AACzB;AAAA;AAGF,QAAI,qBAAqB,WAAW,mBAAmB,WAAW,mBAAmB,WAAW;AAEhG,QAAI,oBAAoB;AACtB;AAAA;AAGF,QAAI,kBAAkB,KAAK,YAAY;AACvC,QAAI,iBAAiB,KAAK,SAAS,SAAS,yBAAyB,iBAAiB;AAEtF,QAAI,mBAAmB,OAAO;AAC5B;AAAA;AAGF,QAAI,YAAY;AAChB,QAAI,oBAAoB,KAAK,cAAc;AAC3C,SAAK,YAAY,KAAK;AACtB,SAAK,SAAS,SAAS,wBAAwB,iBAAiB,KAAK,YAAY;AACjF,SAAK,SAAS,SAAS,yBAAyB;AAChD,SAAK,cAAc,SAAS;AAC5B,SAAK,SAAS,SAAS,wBAAwB,mBAAmB,KAAK,cAAc;AAAA;AAgBvF,WAAS,UAAU,OAAO,WAAY;AACpC,QAAI,KAAK,mBAAmB;AAC1B,UAAI,kBAAkB,KAAK,YAAY;AACvC,WAAK,SAAS,SAAS,yBAAyB;AAChD,UAAI,SAAS,KAAK,YAAY;AAC9B,WAAK,SAAS,SAAS,wBAAwB,iBAAiB,KAAK,YAAY;AACjF,UAAI,cAAc,UAAU;AAC5B,UAAI,iBAAiB,KAAK,SAAS,SAAS,cAAc;AAE1D,UAAI,mBAAmB,OAAO;AAC5B;AAAA;AAGF,WAAK,mBAAmB;AACxB,UAAI,OAAO;AACX,UAAI,oBAAoB,KAAK,cAAc;AAC3C,WAAK,SAAS,SAAS,yBAAyB;AAChD,aAAO,KAAK,KAAK,UAAU,WAAY;AACrC,aAAK,mBAAmB;AACxB,aAAK,cAAc,KAAK;AAAA;AAE1B,WAAK,SAAS,SAAS,wBAAwB,mBAAmB,KAAK,cAAc;AACrF,WAAK,SAAS,SAAS,aAAa;AAAA;AAAA;AAiBxC,WAAS,UAAU,OAAO,WAAY;AACpC,QAAI,KAAK,mBAAmB;AAC1B,UAAI,oBAAoB,KAAK,cAAc;AAC3C,WAAK,SAAS,SAAS,yBAAyB;AAChD,UAAI,SAAS,KAAK,cAAc;AAChC,WAAK,SAAS,SAAS,wBAAwB,mBAAmB,KAAK,cAAc;AACrF,UAAI,cAAc,UAAU;AAC5B,UAAI,iBAAiB,KAAK,SAAS,SAAS,cAAc;AAE1D,UAAI,mBAAmB,OAAO;AAC5B;AAAA;AAGF,WAAK,mBAAmB;AACxB,UAAI,OAAO;AACX,UAAI,kBAAkB,KAAK,YAAY;AACvC,WAAK,SAAS,SAAS,yBAAyB;AAChD,aAAO,KAAK,KAAK,UAAU,WAAY;AACrC,aAAK,mBAAmB;AACxB,aAAK,YAAY,KAAK;AAAA;AAExB,WAAK,SAAS,SAAS,wBAAwB,iBAAiB,KAAK,YAAY;AACjF,WAAK,SAAS,SAAS,aAAa;AAAA;AAAA;AAYxC,WAAS,UAAU,kBAAkB,WAAY;AAC/C,WAAO,KAAK,YAAY,SAAS;AAAA;AAWnC,WAAS,UAAU,kBAAkB,WAAY;AAC/C,WAAO,KAAK,cAAc,SAAS;AAAA;AAUrC,WAAS,UAAU,QAAQ,WAAY;AACrC,SAAK,YAAY,SAAS;AAC1B,SAAK,cAAc,SAAS;AAAA;AAW9B,WAAS,UAAU,YAAY,WAAY;AACzC,WAAO,KAAK;AAAA;AAUd,WAAS,UAAU,SAAS,WAAY;AACtC,QAAI,KAAK,aAAa;AACpB;AAAA;AAGF,QAAI,MAAM,KAAK;AACf,SAAK,UAAU;AACf,0BAAsB;AACtB,QAAI,QAAQ,iBAAiB;AAC7B,QAAI,QAAQ,eAAe;AAAA;AAU7B,WAAS,UAAU,UAAU,WAAY;AACvC,QAAI,CAAC,KAAK,aAAa;AACrB;AAAA;AAGF,QAAI,MAAM,KAAK;AACf,SAAK,UAAU;AACf,iCAA6B;AAC7B,QAAI,WAAW,iBAAiB;AAChC,QAAI,WAAW,eAAe;AAAA;AAUhC,WAAS,UAAU,UAAU,WAAY;AACvC,SAAK;AACL,SAAK,WAAW;AAChB,SAAK,cAAc;AACnB,SAAK,gBAAgB;AAAA;AAGvB,WAAS,SAAS,WAAY;AAAA;AAE9B,WAAS,OAAO,UAAU,OAAO,WAAY;AAAA;AAE7C,WAAS,OAAO,UAAU,OAAO,WAAY;AAAA;AAU7C,WAAS,eAAe,SAAU,SAAS,UAAU;AACnD,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,aAAa;AAAA;AAGpB,UAAQ,SAAS,cAAc,SAAS;AAExC,WAAS,aAAa,UAAU,OAAO,SAAU,UAAU,gBAAgB;AACzE,QAAI,OAAO,UAAU,KAAK;AAC1B,QAAI,oBAAoB,SAAS,eAAe;AAChD,QAAI,oBAAoB,SAAS,eAAe;AAEhD,aAAS,IAAI,GAAG,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,WAAK,GAAG,OAAO,GAAG;AAAA;AAGpB,aAAS,YAAY,eAAe;AACpC,aAAS,cAAc,MAAM,MAAM,MAAM;AAEzC,aAAS,MAAM,GAAG,OAAO,KAAK,QAAQ,MAAM,MAAM,OAAO;AACvD,UAAI,WAAW,iBAAe,KAAK,MAAM,IACrC,MAAM,SAAS,IACf,SAAS,SAAS;AAEtB,UAAI,SAAS,cAAc,gBAAgB,MAAM,IAAI,SAAS,cAAc,iBAAiB,SAAS,eAAe,sBAAsB,SAAS,cAAc,cAAc;AAC9K,iBAAS,MAAM,cAAc,SAAS,MAAM,GAAG,KAAK,SAAS,cAAc;AAC3E,iBAAS,SAAS,YAAY;AAAA;AAGhC,UAAI,SAAS,cAAc,gBAAgB,SAAS,IAAI,SAAS,cAAc,iBAAiB,SAAS,eAAe,sBAAsB,SAAS,cAAc,cAAc;AACjL,iBAAS,MAAM,cAAc,SAAS,SAAS,GAAG,KAAK,SAAS,cAAc;AAC9E,iBAAS,SAAS,YAAY;AAAA;AAAA;AAIlC,aAAS,YAAY,KAAK,UAAU,OAAO;AAAA;AAG7C,WAAS,aAAa,UAAU,OAAO,SAAU,UAAU,kBAAkB;AAC3E,QAAI,OAAO,UAAU,KAAK;AAE1B,aAAS,IAAI,GAAG,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,WAAK,GAAG,OAAO,GAAG;AAAA;AAGpB,aAAS,YAAY,eAAe;AACpC,aAAS,cAAc,MAAM,MAAM,MAAM;AAEzC,QAAI,KAAK,UAAU;AACjB,eAAS,YAAY,KAAK,UAAU,OAAO;AAAA;AAAA;AAY/C,WAAS,kBAAkB,SAAU,QAAO,QAAQ;AAClD,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,aAAa;AAAA;AAGpB,UAAQ,SAAS,iBAAiB,SAAS;AAE3C,WAAS,gBAAgB,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAC5E,QAAI,WAAW,SAAS;AACxB,QAAI,eAAe,SAAS,cAAc;AAE1C,QAAI,KAAK,SAAS,YAAY,KAAK,QAAQ,eAAe,UAAU;AAClE,WAAK,SAAS;AAAA;AAGhB,aAAS,YAAY,kBAAkB;AACvC,aAAS,MAAM,cAAc,KAAK,OAAO,KAAK,QAAQ;AAAA;AAGxD,WAAS,gBAAgB,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAC5E,aAAS,YAAY,kBAAkB;AACvC,aAAS,MAAM,cAAc,KAAK,OAAO,KAAK,QAAQ;AAAA;AAaxD,WAAS,kBAAkB,SAAU,QAAO,MAAM,iBAAiB,cAAc;AAC/E,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,kBAAkB;AACvB,SAAK,eAAe;AAAA;AAGtB,UAAQ,SAAS,iBAAiB,SAAS;AAE3C,WAAS,gBAAgB,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAC5E,QAAI,WAAW,SAAS;AAExB,aAAS,kBAAkB,KAAK;AAChC,aAAS,eAAe,KAAK;AAC7B,aAAS,MAAM,cAAc,KAAK,OAAO,KAAK,KAAK,QAAQ;AAC3D,aAAS,YAAY,mBAAmB;AACxC,aAAS,kBAAkB,KAAK,OAAO,GAAG,KAAK,MAAM,QAAQ,QAAQ;AAAA;AAGvE,WAAS,gBAAgB,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAC5E,aAAS,YAAY,kBAAkB;AACvC,aAAS,MAAM,cAAc,KAAK,OAAO,KAAK,KAAK,QAAQ;AAAA;AAW7D,WAAS,qBAAqB,SAAU,QAAO,QAAQ;AACrD,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,aAAa;AAAA;AAGpB,UAAQ,SAAS,oBAAoB,SAAS;AAE9C,WAAS,mBAAmB,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAC/E,aAAS,YAAY,kBAAkB;AACvC,aAAS,MAAM,cAAc,KAAK,OAAO,KAAK,QAAQ;AAAA;AAGxD,WAAS,mBAAmB,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAC/E,aAAS,YAAY,kBAAkB;AACvC,aAAS,MAAM,cAAc,KAAK,OAAO,KAAK,QAAQ;AAAA;AAgBxD,WAAS,qBAAqB,SAAU,QAAO,SAAS,MAAM,SAAS,iBAAiB,cAAc,kBAAkB;AACtH,SAAK,QAAQ;AACb,SAAK,UAAU;AACf,SAAK,OAAO;AACZ,SAAK,SAAS,KAAK,KAAK,GAAG;AAC3B,SAAK,UAAU;AACf,SAAK,kBAAkB,gBAAgB,MAAM;AAC7C,SAAK,eAAe,aAAa,MAAM;AACvC,SAAK,aAAa;AAClB,SAAK,mBAAmB;AAAA;AAG1B,UAAQ,SAAS,oBAAoB,SAAS;AAE9C,WAAS,mBAAmB,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAC/E,QAAI,SAAS;AAEb,QAAI,WAAW,SAAS;AAExB,aAAS,mBAAmB,KAAK;AACjC,QAAI,mBAAmB,KAAK,QAAQ,MAAM,GAAG;AAE7C,QAAI,gBAAgB,wBAAuB,MAAM,GAAG,KAAK;AACvD,aAAO,IAAI,OAAO,QAAQ,QAAQ,iBAAiB;AAAA;AAGrD,QAAI,oBAAoB,KAAK,KAAK;AAClC,QAAI,aAAa;AAEjB,aAAS,WAAW,GAAG,WAAW,mBAAmB,YAAY;AAC/D,iBAAW,KAAK,SAAS,KAAK,KAAK,WAAW;AAAA;AAGhD,QAAI,gBAAgB,SAAS,KAAK,SAAS;AAC3C,QAAI,UAAU;AACd,aAAS,MAAM,cAAc,KAAK,QAAQ,IAAI,KAAK,QAAQ,QAAQ;AACnE,cAAU,SAAS,sBAAsB,SAAU,SAAS,WAAU;AACpE,gBAAU,kBAAkB,SAAU,cAAc,gBAAgB;AAClE,gBAAQ,gBAAgB,WAAW,WAAU;AAC7C,gBAAQ,KAAK,CAAC,WAAU,cAAc,QAAQ;AAAA;AAAA;AAGlD,aAAS,oBAAoB,SAAS,QAAQ,QAAQ;AACtD,aAAS,kBAAkB,cAAc,iBAAiB,IAAI,iBAAiB;AAE/E,QAAI,OAAO,KAAK,YAAY,aAAa;AACvC,gBAAU,eAAe,SAAU,YAAY,aAAa;AAC1D,iBAAS,cAAc,WAAW,iBAAiB,gBAAgB;AAAA;AAAA;AAIvE,aAAS,eAAe,WAAY;AAGlC,eAAS,eAAe,mBAAmB,OAAO;AAClD,eAAS,kBAAkB,mBAAmB,OAAO;AAAA,OACpD;AACH,aAAS,YAAY,mBAAmB;AACxC,aAAS;AAAA;AAGX,WAAS,mBAAmB,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAC/E,aAAS,YAAY,kBAAkB;AACvC,aAAS,MAAM,cAAc,KAAK,OAAO,KAAK,QAAQ;AAAA;AAaxD,WAAS,sBAAsB,SAAU,aAAa,OAAO,MAAM,WAAW;AAC5E,SAAK,cAAc;AACnB,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,YAAY;AAAA;AAGnB,WAAS,oBAAoB,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAChF,QAAI,SAAS;AAEb,cAAU,KAAK,OAAO,SAAU,OAAO;AACrC,YAAM,OAAO,SAAU,KAAK,KAAK;AAE/B,YAAI,OAAO,KAAK,OAAO,GAAG;AACxB,mBAAS,YAAY,KAAK,KAAK,aAAa,OAAO,YAAY,KAAK,QAAQ;AAAA;AAAA;AAAA;AAIlF,aAAS,YAAY,mBAAmB;AACxC,aAAS;AAAA;AAGX,WAAS,oBAAoB,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAChF,UAAM,KAAK,OAAO,KAAK,MAAM,KAAK,WAAW,SAAU,KAAK,KAAK;AAC/D,aAAO,SAAS,YAAY,KAAK;AAAA,OAChC,SAAU,KAAK,KAAK,KAAK,OAAO;AACjC,aAAO,SAAS,YAAY,KAAK,KAAK,KAAK;AAAA;AAE7C,aAAS,YAAY,mBAAmB;AACxC,aAAS;AAAA;AAUX,WAAS,gBAAgB,SAAU,iBAAiB;AAClD,SAAK,kBAAkB;AACvB,SAAK,aAAa;AAAA;AAGpB,UAAQ,SAAS,eAAe,SAAS;AAEzC,WAAS,cAAc,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAC1E,QAAI,UAAU,SAAS,UAAU;AACjC,aAAS,YAAY,mBAAmB;AACxC,YAAQ,oBAAoB,oBAAoB,KAAK,gBAAgB,MAAM,GAAG,KAAK,gBAAgB,SAAS;AAC5G,YAAQ;AAAA;AAGV,WAAS,cAAc,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAC1E,QAAI,UAAU,SAAS,UAAU;AACjC,aAAS,YAAY,mBAAmB;AACxC,YAAQ,oBAAoB,oBAAoB,KAAK;AACrD,YAAQ;AAAA;AASV,MAAI,mBAAgC,yBAAU,kBAAkB;AAC9D,gBAAU,mBAAkB;AAE5B,QAAI,SAAS,eAAa;AAE1B,+BAA0B,UAAU,WAAW;AAC7C,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,eAAS,OAAO,KAAK;AACrB,aAAO,YAAY;AAEnB,UAAI,gBAAgB,OAAO,UAAU;AAErC,UAAI,oBAAoB,OAAO,UAAU;AAEzC,aAAO,YAAY,SAAS,QAAQ,cAAc,KAAK,cAAc,KAAK,kBAAkB,KAAK,kBAAkB;AACnH,aAAO;AAAA;AAGT,oBAAa,mBAAkB,CAAC;AAAA,MAC9B,KAAK;AAAA,MACL,OAAO,cAAc,UAAU,gBAAgB;AAC7C,YAAI,mBAAmB,SAAS,UAAU;AAC1C,iBAAS,YAAY,mBAAmB;AACxC,yBAAiB,aAAa,KAAK,WAAW;AAC9C,YAAI,gBAAgB,KAAK,UAAU;AACnC,iBAAS,kBAAkB,cAAc,KAAK,cAAc,KAAK,KAAK,WAAW,QAAQ,QAAQ;AAAA;AAAA,OAElG;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAc,UAAU,gBAAgB;AAC7C,YAAI,mBAAmB,SAAS,UAAU;AAC1C,iBAAS,YAAY,mBAAmB;AACxC,yBAAiB,WAAW,KAAK;AAAA;AAAA;AAIrC,WAAO;AAAA,IACP,SAAS;AAEX,WAAS,mBAAmB;AAO5B,MAAI,qBAAkC,yBAAU,mBAAmB;AACjE,gBAAU,qBAAoB;AAE9B,QAAI,UAAU,eAAa;AAE3B,iCAA4B,UAAU,WAAW;AAC/C,UAAI;AAEJ,yBAAgB,MAAM;AAEtB,eAAS,QAAQ,KAAK;AACtB,aAAO,YAAY;AACnB,aAAO;AAAA;AAGT,oBAAa,qBAAoB,CAAC;AAAA,MAChC,KAAK;AAAA,MACL,OAAO,cAAc,UAAU,gBAAgB;AAC7C,YAAI,mBAAmB,SAAS,UAAU;AAC1C,iBAAS,YAAY,mBAAmB;AACxC,yBAAiB,WAAW,KAAK,WAAW;AAAA;AAAA,OAE7C;AAAA,MACD,KAAK;AAAA,MACL,OAAO,cAAc,UAAU,gBAAgB;AAC7C,YAAI,mBAAmB,SAAS,UAAU;AAC1C,iBAAS,YAAY,mBAAmB;AACxC,yBAAiB,aAAa,KAAK,WAAW;AAC9C,iBAAS;AAAA;AAAA;AAIb,WAAO;AAAA,IACP,SAAS;AAEX,WAAS,qBAAqB;AAU9B,WAAS,gBAAgB,SAAU,MAAM,YAAY;AACnD,SAAK,OAAO,KAAK;AACjB,SAAK,aAAa;AAClB,SAAK,aAAa;AAAA;AAGpB,UAAQ,SAAS,eAAe,SAAS;AAEzC,WAAS,cAAc,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAC1E,QAAI,SAAS;AAEb,QAAI,gBAAgB,SAAS,UAAU;AACvC,QAAI,aAAa,GAAG,OAAO,KAAK;AAChC,QAAI,cAAc,WAAW,OAAO,SAAU,GAAG;AAC/C,aAAO,IAAI,OAAO;AAAA;AAEpB,QAAI,gBAAgB,WAAW,OAAO,SAAU,GAAG;AACjD,aAAO,KAAK,OAAO;AAAA;AAErB,QAAI,eAAe,YAAY,KAAK,SAAU,GAAG,GAAG;AAClD,aAAO,IAAI;AAAA,OACV,OAAO,cAAc,KAAK,SAAU,GAAG,GAAG;AAC3C,aAAO,IAAI;AAAA;AAEb,aAAS,YAAY,mBAAmB;AAGxC,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,GAAG;AAC/C,UAAI,iBAAiB,SAAS,YAAY,aAAa;AACvD,oBAAc,QAAQ,gBAAgB,aAAa;AAAA;AAGrD,aAAS;AACT,aAAS;AACT,aAAS,WAAW,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,SAAS;AAAA;AAGtE,WAAS,cAAc,UAAU,OAAO,SAAU,UAAU,gBAAgB;AAC1E,QAAI,gBAAgB,SAAS,UAAU;AACvC,aAAS,YAAY,mBAAmB;AACxC,kBAAc,SAAS,KAAK,KAAK,SAAS,KAAK;AAC/C,aAAS;AACT,aAAS;AACT,aAAS,WAAW,KAAK,YAAY,KAAK,aAAa,KAAK,KAAK,SAAS;AAAA;AAS5E,WAAS,UAAU,OAAO,WAAY;AACpC,QAAI,WAAW,KAAK,SAAS,cAAc;AAC3C,QAAI,gBAAgB,OAAO,aAAa,eAAe;AAEvD,QAAI,CAAC,KAAK,SAAS,UAAU;AAC3B,WAAK,SAAS,WAAW;AAAA;AAG3B,QAAI,eAAe;AACjB,WAAK,SAAS,SAAS;AAAA,WAClB;AACL,WAAK,SAAS,SAAS;AAAA;AAAA;AAQ3B,2BAAyB,QAAO;AAC9B,QAAI,8BAA8B,SAAQ;AACxC;AAAA;AAGF,QAAI,WAAW;AACf,QAAI,SAAS,SAAS;AAEtB,QAAI,UAAU,OAAO,YAAY;AAC/B;AAAA;AAGF,QAAI,SAAS,OAAM,QACf,UAAU,OAAM,SAChB,UAAU,OAAM,SAChB,UAAU,OAAM,SAChB,WAAW,OAAM;AACrB,QAAI,aAAc,YAAW,YAAY,CAAC;AAE1C,QAAI,CAAC,YAAY;AACf;AAAA;AAGF,QAAI,eAAe,YAAY,MAAM,YAAY,YAAY;AAE7D,QAAI,cAAc;AAEhB,eAAS,SAAS;AAClB,+BAAyB;AAAA,eAChB,YAAY,IAAI;AAEzB,eAAS,SAAS;AAClB,+BAAyB;AAAA;AAAA;AAU7B,yBAAuB,SAAS,QAAQ;AACtC,QAAI,WAAW;AAEf,QAAI,WAAW,YAAY;AACzB,aAAO,SAAS,SAAS;AAAA;AAAA;AAQ7B,iCAA+B,UAAU;AAQvC,aAAS,OAAO,WAAY;AAC1B,aAAO,SAAS,SAAS;AAAA;AAW3B,aAAS,OAAO,WAAY;AAC1B,aAAO,SAAS,SAAS;AAAA;AAW3B,aAAS,kBAAkB,WAAY;AACrC,aAAO,SAAS,SAAS;AAAA;AAW3B,aAAS,kBAAkB,WAAY;AACrC,aAAO,SAAS,SAAS;AAAA;AAW3B,aAAS,YAAY,WAAY;AAC/B,aAAO,SAAS,SAAS;AAAA;AAAA;AAQ7B,wCAAsC,UAAU;AAC9C,WAAO,SAAS;AAChB,WAAO,SAAS;AAChB,WAAO,SAAS;AAChB,WAAO,SAAS;AAChB,WAAO,SAAS;AAAA;AAGlB,MAAI,OAAO,oBAAM;AACjB,OAAK,IAAI,uBAAuB,WAAY;AAC1C,QAAI;AAEJ,IAAC,mBAAkB,KAAK,UAAU,iBAAiB,QAAQ,oBAAoB,SAAS,SAAS,gBAAgB;AAAA;AAEnH,OAAK,SAAS;AACd,OAAK,SAAS;AACd,OAAK,SAAS;AACd,OAAK,SAAS;AACd,WAAS,aAAa;AACtB,MAAO,mBAAQ;;;AC7/BR,gCAA8B;AACnC,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AACf,mBAAe;AAAA;;;ACpDV,gCAA8B;AACnC;AACA;AACA;AACA;AACA;AAAA;;;ACpBa,yBAAuB,eAAc;AAElD,QAAI,SAAS,OAAO,WAAW,cAAc,QAAQ,OAAO;AAE5D,QAAI,CAAC,QAAQ;AACX;AAAA;AAGF,WAAO,GAAG,eAAe,SAAU,QAAQ;AACzC,UAAI,QAAQ,KAAK;AAEjB,UAAI,WAAW,MAAM,KAAK;AAE1B,UAAI,OAAO,WAAW,UAAU;AAC9B,YAAI,eAAe,UAAU;AAE7B,YAAI,UAAU;AACZ,mBAAS,eAAe;AAAA,eACnB;AACL,qBAAW,IAAI,cAAa,KAAK,MAAM,IAAI;AAC3C,gBAAM,KAAK,gBAAgB;AAC3B,mBAAS;AAAA;AAGX,eAAO;AAAA;AAGT,UAAI;AAEJ,UAAI,UAAU;AACZ,YAAI,OAAO,SAAS,YAAY,aAAa;AAC3C,cAAI;AAEJ,mBAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,IAAI,OAAO,GAAG,OAAO,MAAM,QAAQ;AAC1G,iBAAK,OAAO,KAAK,UAAU;AAAA;AAG7B,mBAAU,oBAAmB,SAAS,SAAS,KAAK,MAAM,kBAAkB,CAAC,UAAU,OAAO;AAE9F,cAAI,WAAW,WAAW;AACxB,kBAAM;AAAA;AAAA,eAEH;AACL,gBAAM,IAAI,MAAM,uCAAuC,OAAO;AAAA;AAAA;AAIlE,aAAO;AAAA;AAAA;;;ACpDX,MAAI;AAAJ,MAA2B;AAA3B,MAAkD;AAAlD,MAAyE;AAAzE,MAAgG;AA6BhG;AACA,gBAAc;AAEd,eAAa,eAAe;AAC5B,eAAa,uBAAuB;AAEpC,eAAa,4BAA4B;AAEzC,eAAa,eAAe;AAE5B,MAAI,UAAU,CAAC,eAAc,iBAAgB,cAAa,cAAa,iBAAgB,kBAAiB,eAAc,gBAAe,gBAAe,gBAAe,iBAAgB;AACnL,MAAI,MAAM,CAAC,iBAAY;AACvB,eAAa,SAAS;AACtB,eAAa,MAAM;AAEnB,EAAa,UAAU,SAAS,SAAU,QAAQ;AAChD,IAAa,UAAU,OAAO,oBAAoB,SAAS,SAAU,KAAK;AACxE,UAAI,IAAI,OAAO,OAAO,KAAK;AACzB,qBAAa,OAAO,OAAO,OAAO;AAAA;AAAA;AAAA;AAKxC,EAAa,UAAU,KAAK,SAAU,QAAQ;AAC5C,IAAa,UAAU,OAAO,oBAAoB,SAAS,SAAU,KAAK;AACxE,UAAI,IAAI,OAAO,OAAO,KAAK;AACzB,qBAAa,IAAI,OAAO,OAAO;AAAA;AAAA;AAAA;AAKrC,eAAa,YAAa,yBAAwB,aAAa,eAAe,QAAQ,0BAA0B,SAAS,wBAAwB;AACjJ,EAAa,UAAU,aAA8B,SAAU,cAAc;AAC3E,iBAAa,UAAU,gBAAgB,UAAY;AAAA;AAErD,eAAa,UAAU,mBAAmB;AAC1C,eAAa,UAAU,cAAc;AAErC,eAAa,UAAW,yBAAwB,aAAa,aAAa,QAAQ,0BAA0B,SAAS,wBAAwB;AAC7I,EAAa,UAAU,YAA4B,SAAU,YAAY;AACvE,iBAAa,QAAQ,GAAG,OAAO,AAAc,iBAAiB,aAAa,aAAa,SAAU;AAAA;AAEpG,eAAa,QAAQ,iBAAiB;AACtC,eAAa,QAAQ,YAAY;AAEjC,eAAa,YAAa,yBAAwB,aAAa,eAAe,QAAQ,0BAA0B,SAAS,wBAAwB;AACjJ,EAAa,UAAU,aAA8B,SAAU,cAAc;AAC3E,QAAI,WAAW,UAAY;AAE3B,QAAI,iBAAiB,QAAQ;AAC3B,mBAAa,UAAU,gBAAgB;AAAA;AAGzC,iBAAa,UAAU,GAAG,OAAO,AAAc,iBAAiB,eAAe,eAAe;AAAA;AAEhG,eAAa,UAAU,mBAAmB;AAC1C,eAAa,UAAU,cAAc;AAErC,eAAa,aAAc,yBAAwB,aAAa,gBAAgB,QAAQ,0BAA0B,SAAS,wBAAwB;AACnJ,EAAa,UAAU,aAA+B,SAAU,eAAe;AAC7E,iBAAa,WAAW,GAAG,OAAO,AAAc,iBAAiB,gBAAgB,gBAAgB,UAAa;AAAA;AAEhH,eAAa,WAAW,oBAAoB;AAC5C,eAAa,WAAW,eAAe;AAQvC,eAAa,UAAW,yBAAwB,aAAa,aAAa,QAAQ,0BAA0B,SAAS,wBAAwB;AAC7I,EAAa,UAAU,mBAAmB,SAAU,YAAY;AAC9D,iBAAa,QAAQ,cAAc,UAAU;AAAA;AAE/C,eAAa,QAAQ,GAAG,OAAO,AAAc,iBAAiB,WAAW,aAAa,aAAa;AACnG,eAAa,QAAQ,iBAAiB;AACtC,eAAa,QAAQ,YAAY;AACjC,MAAO,uBAAQ;;;ACzGf,SAAO,eAAe;AAEtB,gEAA6B,WAAW;AAAA,IAMtC,UAAU;AACR,WAAK;AAAA;AAAA,IAGP,kBAAkB;AAChB,YAAM,gBAAgB,SAAS,eAAe;AAC9C,UAAI,eAAe;AACjB,sBAAc,YAAY;AAE1B,eAAO,MAAM,IAAI,qBAAa,eAAe;AAE7C,eAAO,IAAI,QAAQ,eAAe,CAAC,QAAQ,WAAW;AACpD,cAAI,UAAU;AACd,cAAG,UAAU,MAAM;AACjB,mBAAO,QAAQ,SAAS,CAAC,KAAK,MAAM,UAAU,WAAW;AACvD,kBAAI,EAAC,CAAC,YAAY,CAAC,CAAC,aAAa,YAAY,UAAU;AACrD,0BAAU;AAAA;AAAA;AAAA;AAIhB,cAAG,CAAC;AAAS;AAEb,cAAI,eAAe;AACnB,iBAAO,QAAQ,SAAU,MAAM;AAC7B,kBAAM,YAAY,OAAO,IAAI,YAAY,KAAK,IAAI,GAAG;AACrD,yBAAa,KAAK;AAAA,cAChB,QAAQ,KAAK;AAAA,cACb,OAAO,KAAK;AAAA,cACZ,YAAY;AAAA;AAAA;AAIhB,eAAK,gBAAgB;AAAA;AAGvB,UAAE,KAAK,KAAK,cAAc,SAAU,GAAG,GAAG;AACxC,iBAAO,IAAI,YAAY,GAAG,GAAG,cAAc,EAAE;AAAA;AAAA;AAAA;AAAA,IAKnD,gBAAgB,QAAQ;AACtB,QAAE,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,MAAM;AAAA,UACJ,MAAM;AAAA;AAAA,QAER,UAAU;AAAA,QACV,YAAY,SAAU,KAAK;AACzB,cAAI,iBACF,gBACA,EAAE,2BAA2B,KAAK;AAAA;AAAA,QAGtC,SAAS,SAAU,GAAG;AACpB,YAAE,kBAAkB,KAAK;AACzB,qBAAY,WAAW;AAAC,cAAE,kBAAkB,KAAK;AAAA,aAAQ;AACzD,YAAE,iBAAiB,KAAK;AAAA;AAAA,QAE1B,OAAO,SAAU,UAAU;AACzB,oBAAU,GAAG,SAAS,aAAa;AAAA;AAAA;AAAA;AAAA;AAlElC,gBADT,2CACS,UAAS;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA;;;ACLjB,2DAA6B,WAAW;AAAA,IAKtC,UAAU;AACR,QAAE,kDAAkD,GAClD,UACA,WAAY;AACV,YAAI,EAAE,MAAM,UAAU,UAAU;AAC9B,YAAE,oBAAoB,SAAS;AAC/B,YAAE,qBAAqB,YAAY;AAAA,eAC9B;AACL,YAAE,qBAAqB,SAAS;AAChC,YAAE,oBAAoB,YAAY;AAAA;AAAA;AAAA;AAAA,IAM1C,cAAc,GAAG;AACf,YAAM,QAAQ,OAAO,EAAE,EAAE,cAAc,wBAAwB;AAE/D,UAAI,YAAY,QAAQ,EAAE,EAAE,eAAe,KAAK;AAChD,UAAI,YAAY,MAAM;AACpB,oBAAY;AAAA;AAEd,QAAE,EAAE,cAAc,wBAAwB,IAAI;AAAA;AAAA,IAGhD,cAAc,GAAG;AACf,YAAM,QAAQ,OAAO,EAAE,EAAE,cAAc,oBAAoB;AAC3D,UAAI,YAAY,QAAQ,EAAE,EAAE,eAAe,KAAK;AAChD,UAAI,YAAY,GAAG;AACjB,oBAAY;AAAA;AAEd,QAAE,EAAE,cAAc,oBAAoB,IAAI;AAAA;AAAA,IAG5C,eAAe,GAAG;AAChB,YAAM,gBAAgB,OACpB,EAAE,EAAE,cAAc,QAAQ,cAAc,wBAAwB,KAAK,wBAAwB;AAE/F,QAAE,EAAE,cAAc,QAAQ,eAAe,KAAK,wBAAwB,IAAI;AAAA;AAAA,IAG5E,iBAAiB,GAAG;AAClB,QAAE;AACF,QAAE,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,KAAK,uBAAuB,KAAK,sCAAsC,EACrE,EAAE,eACF,KAAK;AAAA,QACP,UAAU;AAAA,QACV,YAAY,SAAU,KAAK;AACzB,cAAI,iBACF,gBACA,EAAE,2BAA2B,KAAK;AAAA;AAAA;AAAA;AAAA;AAxDnC,gBADT,sCACS,UAAS;AAAA,IACd,WAAW;AAAA;;;ACJR,yBAAuB,KAAK;AACjC,WAAO,QAAQ,QAAQ,QAAQ,UAAa,QAAQ;AAAA;AAG/C,qBAAmB,QAAQ,OAAO;AACvC,QAAI,cAAc;AAAS,eAAS;AACpC,QAAI,cAAc;AAAQ,cAAQ;AAClC,WAAO,WAAW;AAAA;AAMb,2BAAwB,YAAY;AACzC,WAAO,WAAW,OAAO,CAAC,KAAK,KAAK,QAAQ;AAC1C,UAAI,IAAI,QAAQ;AAChB,aAAO;AAAA,OACN;AAAA;AAQE,oBAAkB,YAAY;AACnC,UAAM,QAAQ;AACd,QAAI,CAAC,MAAM,KAAK,aAAa;AAAE,aAAO;AAAA;AAEtC,UAAM,oBAAoB,WAAW,MAAM;AAC3C,UAAM,OAAO,kBAAkB;AAC/B,UAAM,QAAQ,SAAS,kBAAkB;AACzC,UAAM,MAAM,SAAS,kBAAkB;AACvC,WAAO,GAAG,SAAS;AAAA;;;AC7BrB,4DAA6B,WAAW;AAAA,IAUtC,MAAM;AAAA,IACN,WAAW,KAAK;AAAA,IAEhB,UAAU;AACR,WAAK;AAAA;AAAA,IAGP,gBAAgB;AACd,YAAM,aAAa,SAAS,cAAc;AAC1C,YAAM,eAAc,KAAK;AACzB,WAAK,MAAM,IAAI,qBAAa,YAAY;AACxC,WAAK;AAAA;AAAA,IAIP,cAAc;AAEZ,WAAK;AACL,WAAK;AACL,WAAK,IAAI,SAAS,KAAK;AAAA;AAAA,IAIzB,uBAAuB;AACrB,YAAM,aAAa,KAAK;AACxB,YAAM,cAAc,KAAK;AAGzB,WAAK,IAAI,eAAe;AAAA,QACtB,SAAS;AAAA,QACT,kBAAkB,YAAY;AAAA;AAAA;AAAA,IAKlC,iBAAiB;AAEf,WAAK;AAAA;AAAA,IAIP,uBAAuB;AACrB,YAAM,gBAAgB,SAAS,iBAAiB;AAChD,YAAM,0BAA0B,oBAAI;AAGpC,oBAAc,QAAQ,cAAY;AAChC,cAAM,cAAc,SAAS,aAAa;AAC1C,YAAI,CAAC,wBAAwB,IAAI,cAAc;AAC7C,kCAAwB,IAAI,aAAa;AAAA;AAE3C,gCAAwB,IAAI,aAAa,KAAK;AAAA;AAIhD,8BAAwB,QAAQ,CAAC,YAAY,gBAAgB;AAC3D,YAAI,WAAW,SAAS,GAAG;AAEzB,qBAAW,QAAQ,cAAY;AAC7B,kBAAM,WAAW,SAAS,QAAQ;AAClC,gBAAI,YAAY,CAAC,SAAS,MAAM,QAAQ;AACtC,uBAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOnB,wBAAwB,GAAG;AACzB,UAAI,EAAE,OAAO,UAAU,SAAS,WAAW;AACzC,aAAK;AACL,UAAE,OAAO,UAAU,OAAO;AAAA,aACrB;AACL,aAAK;AACL,UAAE,OAAO,UAAU,IAAI;AAAA;AAEzB,WAAK;AAAA;AAAA,IAIP,YAAY;AACV,YAAM,aAAa,SAAS,iBAAiB;AAC7C,iBAAW,QAAQ,cAAY;AAC7B,iBAAS,UAAU;AAAA;AAErB,WAAK;AAAA;AAAA,IAIP,cAAc;AACZ,YAAM,aAAa,SAAS,iBAAiB;AAC7C,iBAAW,QAAQ,cAAY;AAC7B,iBAAS,UAAU;AAAA;AAErB,WAAK;AAAA;AAAA,IAIP,cAAc,QAAO;AACnB,YAAM,WAAW,OAAM;AACvB,YAAM,YAAY,SAAS;AAE3B,UAAI,SAAS,OAAO,6BAA6B;AAE/C,cAAM,oBAAoB,SAAS,iBAAiB;AACpD,0BAAkB,QAAQ,aAAW;AACnC,kBAAQ,MAAM,UAAU,YAAY,WAAW;AAAA;AAAA,iBAExC,SAAS,OAAO,4BAA4B;AAErD,cAAM,mBAAmB,SAAS,iBAAiB;AACnD,yBAAiB,QAAQ,aAAW;AAClC,kBAAQ,MAAM,UAAU,YAAY,WAAW;AAAA;AAAA;AAAA;AAAA,IAOrD,aAAa;AAEX,YAAM,qBAAqB,SAAS,iBAAiB;AAErD,UAAI,mBAAmB,WAAW,GAAG;AACnC,kBAAU;AACV;AAAA;AAIF,YAAM,qBAAqB;AAC3B,YAAM,mBAAmB;AAEzB,yBAAmB,QAAQ,cAAY;AACrC,cAAM,cAAc,SAAS,aAAa;AAC1C,cAAM,UAAU,KAAK,SAAS,KAAK,OAAK,EAAE,iBAAiB;AAE3D,YAAI,WAAW,QAAQ,6BAA6B,gBAAgB,CAAC,QAAQ,kBAAkB;AAC7F,6BAAmB,KAAK;AACxB,2BAAiB,KAAK,QAAQ;AAAA;AAAA;AAIlC,UAAI,mBAAmB,WAAW,GAAG;AACnC,kBAAU;AACV;AAAA;AAGF,YAAM,iBAAiB;AAAA;AAAA,EAA0B,iBAAiB,KAAK;AAEvE,UAAI,CAAC,QAAQ,iBAAiB;AAC5B;AAAA;AAGF,YAAM,wCAAwC;AAAA,QAC5C,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,gBAAgB,SAAS,cAAc,2BAA2B,aAAa;AAAA;AAAA,QAEjF,MAAM,KAAK,UAAU;AAAA,UACnB,iBAAiB,KAAK;AAAA,UACtB,eAAe;AAAA;AAAA,SAGhB,KAAK,CAAC,aAAa;AAClB,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,IAAI,MAAM;AAAA;AAElB,eAAO,SAAS;AAAA,SAEjB,KAAK,CAAC,SAAS;AACd,YAAI,KAAK,WAAW,WAAW;AAE7B,gBAAM,QAAQ,IAAI,UAAU,MAAM,SAAS,eAAe;AAC1D,gBAAM;AAGN,mBAAS,eAAe,yBAAyB,iBAAiB,mBAAmB,WAAY;AAC/F,qBAAS;AAAA,aACR,EAAE,MAAM;AAAA,eACN;AACL,oBAAU;AAAA;AAAA,SAGb,MAAM,CAAC,WAAU;AAChB,kBAAU;AAAA;AAAA;AAAA,IAKhB,SAAS;AACP,YAAM,4BAA4B;AAAA,QAEhC,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,gBAAgB,SAAS,cAAc,2BAA2B,aAAa;AAAA;AAAA,QAEjF,MAAM,KAAK,UAAU;AAAA,UACnB,iBAAiB,KAAK;AAAA;AAAA,SAGvB,KAAK,CAAC,aAAa;AAClB,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,IAAI,MAAM;AAAA;AAElB,eAAO,SAAS;AAAA,SAEjB,KAAK,CAAC,SAAS;AACd,cAAM,MAAK,KAAK,KAAK;AACrB,aAAK,SAAS,KAAK,EAAE,IAAI,KAAI,sBAAsB,IAAI,0BAA0B,IAAI,kBAAkB;AACvG,aAAK;AACL,aAAK,IAAI,WAAW,KAAK,SAAS,SAAS,GAAG;AAAA,SAE/C,MAAM,CAAC,WAAU;AAChB,gBAAQ,MAAM;AACd,kBAAU;AAAA;AAAA;AAAA,IAKhB,UAAU,QAAO;AACf,UAAI,CAAC,QAAQ;AAAY;AACzB,YAAM,MAAM,SAAS,OAAM,cAAc,QAAQ;AACjD,YAAM,MAAK,KAAK,SAAS,KAAK;AAC9B,YAAM,wBAAwB,OAAM;AAAA,QAElC,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,gBAAgB,SAAS,cAAc,2BAA2B,aAAa;AAAA;AAAA,SAGhF,KAAK,CAAC,aAAa;AAClB,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,IAAI,MAAM;AAAA;AAElB,aAAK,SAAS,OAAO,KAAK;AAC1B,aAAK;AAAA,SAEN,MAAM,CAAC,WAAU;AAChB,gBAAQ,MAAM;AACd,kBAAU;AAAA;AAAA;AAAA,IAKhB,iCAAiC,QAAO;AACtC,UAAI,CAAC,QAAQ;AAAyB;AACtC,YAAM,MAAM,SAAS,OAAM,cAAc,QAAQ;AACjD,UAAI,YAAY,KAAK,sCAAsC;AAC3D,WAAK,IAAI,cAAc;AAAA;AAAA,IAEzB,sCAAsC,KAAK;AACzC,UAAI,WAAW,gBAAe,KAAK;AAEnC,UAAI,SAAS,OAAO,QAAQ,KAAK,SAAS,KAAK,+BAC5C,OAAO,CAAC,CAAC,YAAY,OAAO,cAAc,KAAK,SAAS,KAAK,yBAAyB,cACtF,IAAI,CAAC,CAAC,YAAY,cAAc;AAC/B,YAAI,MAAM,SAAS,4BAA4B;AAC/C,YAAI,QAAQ;AAAW,iBAAO;AAC9B,eAAO,CAAC,KAAK,KAAK;AAAA,SAEnB,OAAO,CAAC,SAAS,SAAS;AAE7B,aAAO;AAAA;AAAA,IAIT,YAAY,QAAQ;AAClB,UAAI,OAAO,KAAK,QAAQ,WAAW;AAAG;AACtC,YAAM,wBAAwB;AAAA,QAE5B,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,gBAAgB,SAAS,cAAc,2BAA2B,aAAa;AAAA;AAAA,QAEjF,MAAM,KAAK,UAAU;AAAA,UACnB,MAAM;AAAA;AAAA,SAGP,KAAK,CAAC,aAAa;AAClB,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,IAAI,MAAM;AAAA;AAElB,eAAO,SAAS;AAAA,SAEjB,KAAK,CAAC,SAAS;AACd,YAAI,KAAK,WAAW,WAAW;AAC7B,gBAAM,IAAI,MAAM;AAAA;AAElB,aAAK,oBAAoB,cAAc;AACvC,mBAAW,MAAO,KAAK,oBAAoB,cAAc,UAAM;AAAA,SAEhE,MAAM,CAAC,WAAU;AAChB,gBAAQ,MAAM;AACd,kBAAU;AAAA;AAAA;AAAA,IAGhB,cAAc,SAAS;AACrB,UAAI,YAAY;AAAM;AACtB,UAAI,SAAS;AACb,cAAQ,QAAQ,CAAC,WAAW;AAC1B,YAAI,CAAC,UAAU,OAAO,IAAI,OAAO;AAAK;AACtC,cAAM,MAAM,KAAK,IAAI,cAAc,OAAO;AAC1C,cAAM,UAAU,KAAK,SAAS;AAC9B,eAAO,QAAQ,MAAM;AAAA,aAChB,OAAO,QAAQ;AAAA,WACjB,OAAO,KAAK,OAAO;AAAA;AAAA;AAGxB,aAAO;AAAA;AAAA,IAGT,cAAc;AAEZ,YAAM,wBAAwB,KAAK,SAAS,KAAK,aAC/C,QAAQ,6BAA6B,gBAAgB,CAAC,QAAQ;AAGhE,aAAO;AAAA,QACL,SAAS,KAAK;AAAA,QACd,MAAM;AAAA,QACN,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,kBAAkB,wBAAwB,IAAI;AAAA,QAC9C,+BAA+B;AAAA,QAC/B,eAAe;AAAA,QACf,qBAAqB;AAAA,QACrB,qBAAqB;AAAA,QACrB,aAAa,KAAK,eAAe,KAAK;AAAA,QACtC,aAAa,KAAK,eAAe,KAAK;AAAA,QACtC,YAAY;AAAA;AAAA;AAAA,IAIhB,aAAa;AAEX,YAAM,wBAAwB,KAAK;AAEnC,YAAM,wBAAwB;AAAA,QAC5B,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU,KAAK,yBAAyB,KAAK;AAAA;AAG/C,YAAM,cAAc;AAAA,QAClB,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU,KAAK,kBAAkB,KAAK;AAAA;AAGxC,YAAM,8BAA8B,KAAK,WAAW,IAAI,CAAC,eAAe;AACtE,eAAO,KAAK,4BAA4B;AAAA;AAI1C,UAAI,uBAAuB;AACzB,cAAM,iBAAiB;AAAA,UACrB,OAAO;AAAA,UACP,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,UAAU;AAAA,UACV,UAAU,KAAK,eAAe,KAAK;AAAA;AAErC,eAAO,CAAC,gBAAgB,uBAAuB,aAAa,6BAA6B;AAAA,aACpF;AAEL,eAAO,CAAC,uBAAuB,aAAa,6BAA6B;AAAA;AAAA;AAAA,IAI7E,4BAA4B,YAAY;AACtC,UAAI,cAAc;AAClB,UAAI,YAAY;AAEhB,UAAI,cAAc,KAAK,kBAAkB;AACvC,sBAAc;AACd,qBAAa;AAAA;AAGf,aAAO;AAAA,QACL,OAAO,GAAG,kBAAkB,SAAS;AAAA,QACrC,MAAM,4BAA4B;AAAA,QAClC;AAAA,QACA,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU,KAAK,2BAA2B,KAAK;AAAA,QAC/C,WAAW,KAAK,8BAA8B,KAAK;AAAA;AAAA;AAAA,IAMvD,eAAe,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AAClE,2BAAa,UAAU,aAAa,MAAM,MAAM;AAEhD,YAAM,UAAU,KAAK,SAAS,eAAe;AAC7C,YAAM,eAAe,QAAQ,6BAA6B;AAE1D,UAAI,gBAAgB;AACpB,UAAI,gBAAgB,CAAC,QAAQ,kBAAkB;AAC7C,wBAAgB,6HAA6H,QAAQ,2BAA2B;AAAA,iBACvK,CAAC,QAAQ,kBAAkB;AACpC,wBAAgB;AAAA;AAGlB,SAAG,YAAY;AACf,aAAO;AAAA;AAAA,IAGT,yBAAyB,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AAC5E,2BAAa,UAAU,aAAa,MAAM,MAAM;AAEhD,UAAI,gBAAgB;AACpB,UAAI,kBAAkB,MAAM;AAC1B,wBAAgB;AAAA;AAIlB,UAAI,KAAK,SAAS,eAAe,KAAK,oBAAoB,cAAc,QAAQ;AAC9E,wBAAgB;AAAA,aACX;AACL,wBAAgB,MAAM;AAAA;AAIxB,UAAI,KAAK,SAAS,eAAe,KAAK,kBAAkB;AACtD,WAAG,aAAa;AAChB,uBAAe,WAAW;AAAA;AAI5B,UAAI,CAAC,KAAK,SAAS,eAAe,KAAK,kBAAkB;AACvD,cAAM,SAAS;AAAA,UACb,MAAM,KAAK,SAAS,eAAe,KAAK;AAAA;AAE1C,cAAM,MAAM,qBAAqB,EAAE,MAAM;AACzC,yBAAiB,YAAY;AAAA;AAG/B,SAAG,YAAY;AAAA;AAAA,IAGjB,kBAAkB,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AACrE,2BAAa,UAAU,aAAa,MAAM,MAAM;AAEhD,UAAI,gBAAgB;AAGpB,UAAI,CAAC,KAAK,SAAS,eAAe,KAAK,kBAAkB;AACvD,wBAAgB,iIAAiI,eAAe;AAAA;AAIlK,UAAI,KAAK,SAAS,eAAe,KAAK,kBAAkB;AACtD,wBAAgB,kGAAkG,eAAe;AAAA;AAGnI,SAAG,YAAY;AAAA;AAAA,IAGjB,2BAA2B,UAAU,IAAI,KAAK,KAAK,MAAM,OAAO,gBAAgB;AAC9E,2BAAa,UAAU,gBAAgB,MAAM,MAAM;AAEnD,UAAI,gBAAgB;AACpB,UAAI,kBAAkB,MAAM;AAC1B,wBAAgB;AAAA;AAGlB,YAAM,WAAW,KAAK,MAAM;AAC5B,YAAM,qBAAqB,KAAK,SAAS,eAAe,KAAK,uBAAuB;AAEpF,YAAM,2BAA2B,KAAK,SAAS,eAAe,KAAK,6BAA6B;AAChG,YAAM,8BAA8B,KAAK,SAAS,eAAe,KAAK,gCAAgC;AACtG,YAAM,2BAA2B,KAAK,SAAS,eAAe,KAAK;AAInE,YAAM,iBAAiB,CAAC,4BAA4B,CAAC,CAAC,sBAAsB,6BAA6B;AACzG,YAAM,qBAAqB,4BACD,6BAA6B,sBAC7B,6BAA6B;AACvD,YAAM,kBAAkB,kBAAkB;AAG1C,UAAI,CAAC,CAAC,oBAAoB;AACxB,YAAI,cAAc;AAElB,yBAAiB,2EAA2E;AAAA;AAE9F,UAAI,CAAC,CAAC,6BAA6B;AACjC,yBAAiB,8EAA8E;AAAA;AAIjG,UAAI,6BAA6B,gBAAgB,iBAAiB;AAChE,WAAG,aAAa;AAAA;AAGlB,SAAG,YAAY;AAAA;AAAA,IAIjB,8BAA8B,OAAO,UAAU;AAC7C,UAAI,OAAO,UAAU,KAAK,OAAO,UAAU,OAAO;AAEhD,iBAAS;AAAA,aACJ;AACL,iBAAS;AAAA;AAAA;AAAA,IAKb,eAAe,SAAS;AACtB,UAAI,YAAY;AAAM;AACtB,WAAK,YAAY,KAAK,cAAc;AAAA;AAAA,IAItC,mBAAmB;AAEjB,YAAM,kBAAkB,KAAK;AAC7B,UAAI,KAAK,0BAA0B;AACjC,aAAK,sBAAsB,cAAc;AAAA;AAI3C,WAAK;AAGL,WAAK;AAAA;AAAA,IAIP,6BAA6B;AAC3B,aAAO,KAAK,SAAS,OAAO,UAAQ,KAAK,6BAA6B,cAAc;AAAA;AAAA,IAItF,yBAAyB;AAEvB,eAAS,oBAAoB,UAAU,KAAK;AAG5C,WAAK,wBAAwB,CAAC,MAAM;AAClC,YAAI,EAAE,OAAO,UAAU,SAAS,8BAA8B;AAC5D,eAAK;AAAA;AAAA;AAGT,eAAS,iBAAiB,UAAU,KAAK;AAAA;AAAA,IAI3C,2BAA2B;AACzB,UAAI,CAAC,KAAK;AAAwB;AAElC,YAAM,qBAAqB,SAAS,iBAAiB;AACrD,YAAM,eAAe,mBAAmB,SAAS;AAEjD,WAAK,oBAAoB,WAAW,CAAC;AAErC,UAAI,cAAc;AAChB,aAAK,oBAAoB,UAAU,OAAO;AAC1C,aAAK,oBAAoB,UAAU,IAAI;AAAA,aAClC;AACL,aAAK,oBAAoB,UAAU,OAAO;AAC1C,aAAK,oBAAoB,UAAU,IAAI;AAAA;AAAA;AAAA;AAxkBpC,gBADT,uCACS,UAAS;AAAA,IACd,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU;AAAA,IACV,yBAAyB;AAAA;AAEpB,gBART,uCAQS,WAAU,CAAC,iBAAiB,mBAAmB;;;ACVxD,sDAA6B,WAAW;AAAA,IAKtC,uBAAuB;AACrB,aAAO,SAAS,OAAO,KAAK;AAAA;AAAA;AALvB,gBADT,iCACS,UAAS;AAAA,IACd,KAAK;AAAA;;;ACFT,+CAA6B,WAAW;AAAA;;;ACAxC,iDAA6B,WAAW;AAAA,IAKtC,YAAY;AACV,aAAO,SAAS,OAAO,KAAK;AAAA;AAAA;AALvB,gBADT,4BACS,UAAS;AAAA,IACd,KAAK;AAAA;;;ACFT,sDAA6B,WAAW;AAAA,IACtC,UAAU;AACR,QAAE,UAAU,GAAG,SAAS,SAAU,GAAG;AACnC,YAAI,EAAE,QAAQ,UAAU;AACtB,YAAE,0BAA0B,SAAS;AAAA;AAAA;AAAA;AAAA,IAK3C,iBAAiB,GAAG;AAClB,YAAM,MAAK,EAAE,EAAE,eAAe,KAAK;AACnC,QAAE,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,KAAK,kBAAkB;AAAA,QACvB,UAAU;AAAA;AAAA;AAAA,IAId,WAAW,IAAI;AACb,QAAE,0BAA0B,SAAS;AAAA;AAAA;;;ACnBzC,0DAA6B,WAAW;AAAA,IAiBtC,UAAU;AAAA;AAAA,IAIV,4BAA4B;AAC1B,UAAI,KAAK,oBAAoB;AAE3B,aAAK,yBAAyB,MAAM,UAAU;AAC9C,aAAK,wBAAwB,cAAc,KAAK;AAEhD,aAAK,yBAAyB,QAAQ,CAAC,YAAY;AAAE,kBAAQ,UAAU,OAAO;AAAA;AAC9E,YAAI,kBAAkB,KAAK,yBAAyB,KAAK,aAAW,QAAQ,QAAQ,kBAAkB,KAAK;AAC3G,YAAI,iBAAiB;AAAE,0BAAgB,UAAU,IAAI;AAAA;AAAA,aAChD;AAEL,aAAK,yBAAyB,MAAM,UAAU;AAC9C,aAAK,wBAAwB,cAAc;AAE3C,aAAK,yBAAyB,QAAQ,CAAC,YAAY;AAAE,kBAAQ,UAAU,OAAO;AAAA;AAAA;AAGhF,WAAK;AAAA;AAAA,IAGP,6BAA6B;AAC3B,UAAI,KAAK,qBAAqB;AAE5B,aAAK,0BAA0B,MAAM,UAAU;AAC/C,aAAK,yBAAyB,cAAc,KAAK;AAEjD,aAAK,0BAA0B,QAAQ,CAAC,YAAY;AAAE,kBAAQ,UAAU,OAAO;AAAA;AAC/E,YAAI,kBAAkB,KAAK,0BAA0B,KAAK,aAAW,QAAQ,QAAQ,mBAAmB,KAAK;AAC7G,YAAI,iBAAiB;AAAE,0BAAgB,UAAU,IAAI;AAAA;AAAA,aAChD;AAEL,aAAK,0BAA0B,MAAM,UAAU;AAC/C,aAAK,yBAAyB,cAAc;AAE5C,aAAK,0BAA0B,QAAQ,CAAC,YAAY;AAAE,kBAAQ,UAAU,OAAO;AAAA;AAAA;AAGjF,WAAK;AAAA;AAAA,IAGP,4BAA4B;AAC1B,UAAI,KAAK,oBAAoB;AAE3B,aAAK,yBAAyB,MAAM,UAAU;AAC9C,aAAK,wBAAwB,cAAc,KAAK;AAEhD,aAAK,yBAAyB,QAAQ,CAAC,YAAY;AAAE,kBAAQ,UAAU,OAAO;AAAA;AAC9E,YAAI,kBAAkB,KAAK,yBAAyB,KAAK,aAAW,QAAQ,QAAQ,kBAAkB,KAAK;AAC3G,YAAI,iBAAiB;AAAE,0BAAgB,UAAU,IAAI;AAAA;AAAA,aAChD;AAEL,aAAK,yBAAyB,MAAM,UAAU;AAC9C,aAAK,wBAAwB,cAAc;AAE3C,aAAK,yBAAyB,QAAQ,CAAC,YAAY;AAAE,kBAAQ,UAAU,OAAO;AAAA;AAAA;AAGhF,WAAK;AAAA;AAAA,IAGP,mBAAmB;AACjB,UAAI,KAAK,WAAW;AAElB,aAAK,uBAAuB,MAAM,UAAU;AAC5C,aAAK,sBAAsB,cAAc,KAAK;AAE9C,aAAK,uBAAuB,QAAQ,CAAC,YAAY;AAAE,kBAAQ,UAAU,OAAO;AAAA;AAC5E,YAAI,kBAAkB,KAAK,uBAAuB,KAAK,aAAW,QAAQ,QAAQ,gBAAgB,KAAK;AACvG,YAAI,iBAAiB;AAAE,0BAAgB,UAAU,IAAI;AAAA;AAErD,aAAK,2BAA2B,MAAM,UAAU;AAAA,aAC3C;AAEL,aAAK,uBAAuB,MAAM,UAAU;AAC5C,aAAK,sBAAsB,cAAc;AAEzC,aAAK,uBAAuB,QAAQ,CAAC,YAAY;AAAE,kBAAQ,UAAU,OAAO;AAAA;AAE5E,aAAK,2BAA2B,MAAM,UAAU;AAAA;AAGlD,WAAK;AAAA;AAAA,IAGP,oCAAoC;AAClC,UAAI,KAAK,4BAA4B;AAAA,aAC9B;AACL,aAAK,4BAA4B,QAAQ;AAAA;AAG3C,WAAK;AAAA;AAAA,IAIP,cAAc;AACZ,WAAK;AACL,WAAK;AACL,WAAK;AAAA;AAAA,IAGP,4BAA4B;AAE1B,WAAK,0BAA0B,QAAQ,CAAC,YAAY;AAAE,gBAAQ,MAAM,UAAU;AAAA;AAE9E,WAAK,0BAA0B,QAAQ,CAAC,YAAY;AAClD,YAAI,CAAC,CAAC,KAAK,sBAAsB,QAAQ,QAAQ,kBAAkB,KAAK,oBAAoB;AAC1F,kBAAQ,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA,IAK9B,2BAA2B;AAEzB,WAAK,yBAAyB,QAAQ,CAAC,YAAY;AAAE,gBAAQ,MAAM,UAAU;AAAA;AAE7E,WAAK,yBAAyB,QAAQ,CAAC,YAAY;AACjD,YAAI,CAAC,CAAC,KAAK,uBAAuB,QAAQ,QAAQ,mBAAmB,KAAK,uBACtE,CAAC,CAAC,KAAK,sBAAsB,QAAQ,QAAQ,kBAAkB,KAAK,oBAAoB;AAC1F,kBAAQ,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA,IAK9B,yBAAyB;AAEvB,WAAK,uBAAuB,QAAQ,CAAC,YAAY;AAAE,gBAAQ,MAAM,UAAU;AAAA;AAE3E,WAAK,uBAAuB,QAAQ,CAAC,YAAY;AAC/C,YAAI,CAAC,CAAC,KAAK,sBAAsB,QAAQ,QAAQ,kBAAkB,KAAK,sBACpE,CAAC,CAAC,KAAK,uBAAuB,QAAQ,QAAQ,mBAAmB,KAAK,uBACtE,CAAC,CAAC,KAAK,sBAAsB,QAAQ,QAAQ,kBAAkB,KAAK,sBACpE,CAAC,CAAC,KAAK,8BAA8B,CAAC,QAAQ,QAAQ,YAAY,SAAS,KAAK,6BAA6B;AAC/G,kBAAQ,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA,IAM9B,mBAAmB,QAAO;AACxB,WAAK,oBAAoB,OAAM,OAAO,QAAQ;AAAA;AAAA,IAEhD,oBAAoB,QAAO;AACzB,WAAK,qBAAqB,OAAM,OAAO,QAAQ;AAAA;AAAA,IAEjD,mBAAmB,QAAO;AACxB,WAAK,oBAAoB,OAAM,OAAO,QAAQ;AAAA;AAAA,IAEhD,iBAAiB,QAAO;AACtB,WAAK,kBAAkB,OAAM,OAAO,QAAQ;AAAA;AAAA,IAI9C,kBAAkB,QAAO;AACvB,WAAK,6BAA6B,OAAM,OAAO;AAAA;AAAA,UAI3C,oBAAoB,eAAe;AACvC,WAAK,qBAAqB;AAC1B,WAAK,sBAAsB;AAC3B,WAAK,qBAAqB;AAC1B,WAAK,YAAY;AACjB,WAAK,6BAA6B;AAClC,YAAM,KAAK;AAAA;AAAA,UAGP,qBAAqB,gBAAgB;AACzC,WAAK,qBAAqB,KAAK,4BAA4B,gBAAgB;AAC3E,WAAK,sBAAsB;AAC3B,WAAK,qBAAqB;AAC1B,WAAK,YAAY;AACjB,WAAK,6BAA6B;AAClC,YAAM,KAAK;AAAA;AAAA,UAGP,oBAAoB,eAAe;AACvC,WAAK,qBAAqB,KAAK,2BAA2B,eAAe;AACzE,WAAK,sBAAsB,KAAK,2BAA2B,eAAe;AAC1E,WAAK,qBAAqB;AAC1B,WAAK,YAAY;AACjB,WAAK,6BAA6B;AAClC,YAAM,KAAK;AAAA;AAAA,UAGP,kBAAkB,aAAa;AACnC,WAAK,qBAAqB,KAAK,yBAAyB,aAAa;AACrE,WAAK,sBAAsB,KAAK,yBAAyB,aAAa;AACtE,WAAK,qBAAqB,KAAK,yBAAyB,aAAa;AACrE,WAAK,YAAY;AACjB,WAAK,6BAA6B;AAClC,YAAM,KAAK;AAAA;AAAA,UAIP,qBAAqB;AACzB,WAAK,qBAAqB;AAC1B,WAAK,sBAAsB;AAC3B,WAAK,qBAAqB;AAC1B,WAAK,YAAY;AACjB,WAAK,6BAA6B;AAClC,YAAM,KAAK;AAAA;AAAA,UAGP,sBAAsB;AAC1B,WAAK,sBAAsB;AAC3B,WAAK,qBAAqB;AAC1B,WAAK,YAAY;AACjB,WAAK,6BAA6B;AAClC,YAAM,KAAK;AAAA;AAAA,UAGP,qBAAqB;AACzB,WAAK,qBAAqB;AAC1B,WAAK,YAAY;AACjB,WAAK,6BAA6B;AAClC,YAAM,KAAK;AAAA;AAAA,UAGP,mBAAmB;AACvB,WAAK,YAAY;AACjB,WAAK,6BAA6B;AAClC,YAAM,KAAK;AAAA;AAAA,IAIb,4BAA4B,gBAAgB;AAC1C,aAAO,KAAK,qBAAqB,KAAK,SAAO,IAAI,oBAAoB;AAAA;AAAA,IAEvE,2BAA2B,eAAe;AACxC,aAAO,KAAK,qBAAqB,KAAK,SAAO,IAAI,mBAAmB;AAAA;AAAA,IAEtE,yBAAyB,aAAa;AACpC,aAAO,KAAK,qBAAqB,KAAK,SAAO,IAAI,SAAS;AAAA;AAAA,UAItD,eAAe;AACnB,YAAM,MAAM,KAAK;AACjB,WAAK,qBAAqB;AAC1B,YAAM,eAAe;AACrB,YAAM,KAAK,YAAY,KAAK;AAAA;AAAA,IAE9B,aAAa;AACX,YAAM,MAAM,IAAI,IAAI,qBAAqB,OAAO,SAAS;AACzD,UAAI,aAAa,OAAO,kBAAkB,KAAK;AAC/C,UAAI,aAAa,OAAO,mBAAmB,KAAK;AAChD,UAAI,aAAa,OAAO,kBAAkB,KAAK;AAC/C,UAAI,aAAa,OAAO,QAAQ,KAAK;AACrC,aAAO;AAAA;AAAA,IAET,qBAAqB,KAAK;AACxB,cAAQ,aAAa,UAAU,MAAM,IAAI,WAAW,IAAI;AAAA;AAAA,UAEpD,YAAY,KAAK,KAAI;AACzB,YAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QAChC,SAAS,EAAE,eAAe;AAAA;AAE5B,UAAI,CAAC,SAAS,IAAI;AAChB,kBAAU;AAAA;AAGZ,YAAM,eAAe,MAAM,SAAS;AACpC,YAAM,YAAY,IAAI;AACtB,YAAM,eAAe,UAAU,gBAAgB,cAAc;AAC7D,YAAM,WAAW,aAAa,eAAe;AAE7C,YAAM,QAAQ,SAAS,eAAe;AACtC,YAAM,YAAY,SAAS;AAAA;AAAA,IAI7B,WAAW,QAAO;AAChB,YAAM,WAAW,OAAM,cAAc,cAAc;AACnD,YAAM,WAAW,OAAM,cAAc,cAAc;AAEnD,eAAS,MAAM,UAAU,SAAS,MAAM,YAAY,SAAS,WAAW;AACxE,eAAS,MAAM,UAAU,SAAS,MAAM,YAAY,SAAS,WAAW;AAAA;AAAA;AAxSnE,gBADT,qCACS,WAAU;AAAA,IACf;AAAA,IAAqB;AAAA,IAAsB;AAAA,IAC3C;AAAA,IAAsB;AAAA,IAAuB;AAAA,IAC7C;AAAA,IAAqB;AAAA,IAAsB;AAAA,IAC3C;AAAA,IAAmB;AAAA,IAAoB;AAAA,IACvC;AAAA,IAAyB;AAAA;AAEpB,gBART,qCAQS,UAAS;AAAA,IACd,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,MAAM;AAAA,IACN,uBAAuB;AAAA,IACvB,iBAAiB;AAAA;;;ACdrB,uDAA6B,WAAW;AAAA,IAItC,UAAU;AACR,QAAE,mBAAmB,MAAM,KAAM,QAAQ,KAAK,WAAY;AACxD,UAAE,MAAM,IAAI,WAAW;AAAA;AAGzB,QAAE,mBAAmB,GAAG,SAAS,WAAY;AAC3C,UAAE,mBAAmB,IAAI,WAAW;AAAA;AAGtC,QAAE,UAAU,GAAG,SAAS,SAAU,GAAG;AACnC,YAAI,EAAE,QAAQ,UAAU;AACtB,YAAE,mBAAmB,IAAI,WAAW;AAAA;AAAA;AAAA;AAAA;AAbnC,gBAFT,kCAES,WAAU,CAAC,UAAU;;;ACI9B,cAAY,SAAS,UAAU;AAG/B,cAAY,SAAS,iBAAiB;AAItC,cAAY,SAAS,0BAA0B;AAG/C,cAAY,SAAS,qBAAqB;AAG1C,cAAY,SAAS,sBAAsB;AAG3C,cAAY,SAAS,kCAAkC;AAGvD,cAAY,SAAS,SAAS;AAG9B,cAAY,SAAS,iBAAiB;AAGtC,cAAY,SAAS,gBAAgB;AAGrC,cAAY,SAAS,oBAAoB;AAGzC,cAAY,SAAS,iBAAiB;;;ACvCtC,uBAAmB;AACnB,SAAO,SAAS;AAChB,SAAO,IAAI;;;;;;;;;;;;;;;;;;;;ACFX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,MAAI,OAAM;AACV,MAAI,UAAS;AACb,MAAI,SAAQ;AACZ,MAAI,QAAO;AACX,MAAI,OAAO;AACX,MAAI,iBAAiB,CAAC,MAAK,SAAQ,QAAO;AAC1C,MAAI,SAAQ;AACZ,MAAI,MAAM;AACV,MAAI,kBAAkB;AACtB,MAAI,WAAW;AACf,MAAI,SAAS;AACb,MAAI,YAAY;AAChB,MAAI,sBAAmC,+BAAe,OAAO,SAAU,KAAK,WAAW;AAC5F,WAAO,IAAI,OAAO,CAAC,YAAY,MAAM,QAAO,YAAY,MAAM;AAAA,KAC7D;AACI,MAAI,aAA0B,mBAAG,OAAO,gBAAgB,CAAC,OAAO,OAAO,SAAU,KAAK,WAAW;AACtG,WAAO,IAAI,OAAO,CAAC,WAAW,YAAY,MAAM,QAAO,YAAY,MAAM;AAAA,KACxE;AAEI,MAAI,aAAa;AACjB,MAAI,OAAO;AACX,MAAI,YAAY;AAEhB,MAAI,aAAa;AACjB,MAAI,OAAO;AACX,MAAI,YAAY;AAEhB,MAAI,cAAc;AAClB,MAAI,QAAQ;AACZ,MAAI,aAAa;AACjB,MAAI,iBAAiB,CAAC,YAAY,MAAM,WAAW,YAAY,MAAM,WAAW,aAAa,OAAO;;;AC9B5F,uBAAqB,SAAS;AAC3C,WAAO,UAAW,SAAQ,YAAY,IAAI,gBAAgB;AAAA;;;ACD7C,qBAAmB,MAAM;AACtC,QAAI,QAAQ,MAAM;AAChB,aAAO;AAAA;AAGT,QAAI,KAAK,eAAe,mBAAmB;AACzC,UAAI,gBAAgB,KAAK;AACzB,aAAO,gBAAgB,cAAc,eAAe,SAAS;AAAA;AAG/D,WAAO;AAAA;;;ACRT,qBAAmB,MAAM;AACvB,QAAI,aAAa,UAAU,MAAM;AACjC,WAAO,gBAAgB,cAAc,gBAAgB;AAAA;AAGvD,yBAAuB,MAAM;AAC3B,QAAI,aAAa,UAAU,MAAM;AACjC,WAAO,gBAAgB,cAAc,gBAAgB;AAAA;AAGvD,wBAAsB,MAAM;AAE1B,QAAI,OAAO,eAAe,aAAa;AACrC,aAAO;AAAA;AAGT,QAAI,aAAa,UAAU,MAAM;AACjC,WAAO,gBAAgB,cAAc,gBAAgB;AAAA;;;ACfvD,uBAAqB,MAAM;AACzB,QAAI,QAAQ,KAAK;AACjB,WAAO,KAAK,MAAM,UAAU,QAAQ,SAAU,MAAM;AAClD,UAAI,QAAQ,MAAM,OAAO,SAAS;AAClC,UAAI,aAAa,MAAM,WAAW,SAAS;AAC3C,UAAI,UAAU,MAAM,SAAS;AAE7B,UAAI,CAAC,cAAc,YAAY,CAAC,YAAY,UAAU;AACpD;AAAA;AAMF,aAAO,OAAO,QAAQ,OAAO;AAC7B,aAAO,KAAK,YAAY,QAAQ,SAAU,OAAM;AAC9C,YAAI,QAAQ,WAAW;AAEvB,YAAI,UAAU,OAAO;AACnB,kBAAQ,gBAAgB;AAAA,eACnB;AACL,kBAAQ,aAAa,OAAM,UAAU,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAMzD,kBAAgB,OAAO;AACrB,QAAI,QAAQ,MAAM;AAClB,QAAI,gBAAgB;AAAA,MAClB,QAAQ;AAAA,QACN,UAAU,MAAM,QAAQ;AAAA,QACxB,MAAM;AAAA,QACN,KAAK;AAAA,QACL,QAAQ;AAAA;AAAA,MAEV,OAAO;AAAA,QACL,UAAU;AAAA;AAAA,MAEZ,WAAW;AAAA;AAEb,WAAO,OAAO,MAAM,SAAS,OAAO,OAAO,cAAc;AACzD,UAAM,SAAS;AAEf,QAAI,MAAM,SAAS,OAAO;AACxB,aAAO,OAAO,MAAM,SAAS,MAAM,OAAO,cAAc;AAAA;AAG1D,WAAO,WAAY;AACjB,aAAO,KAAK,MAAM,UAAU,QAAQ,SAAU,MAAM;AAClD,YAAI,UAAU,MAAM,SAAS;AAC7B,YAAI,aAAa,MAAM,WAAW,SAAS;AAC3C,YAAI,kBAAkB,OAAO,KAAK,MAAM,OAAO,eAAe,QAAQ,MAAM,OAAO,QAAQ,cAAc;AAEzG,YAAI,QAAQ,gBAAgB,OAAO,SAAU,QAAO,UAAU;AAC5D,iBAAM,YAAY;AAClB,iBAAO;AAAA,WACN;AAEH,YAAI,CAAC,cAAc,YAAY,CAAC,YAAY,UAAU;AACpD;AAAA;AAGF,eAAO,OAAO,QAAQ,OAAO;AAC7B,eAAO,KAAK,YAAY,QAAQ,SAAU,WAAW;AACnD,kBAAQ,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAOhC,MAAO,sBAAQ;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,IAAI;AAAA,IACJ;AAAA,IACA,UAAU,CAAC;AAAA;;;ACjFE,4BAA0B,WAAW;AAClD,WAAO,UAAU,MAAM,KAAK;AAAA;;;ACFvB,MAAI,OAAM,KAAK;AACf,MAAI,OAAM,KAAK;AACf,MAAI,QAAQ,KAAK;;;ACAT,iCAA+B,SAAS,cAAc;AACnE,QAAI,iBAAiB,QAAQ;AAC3B,qBAAe;AAAA;AAGjB,QAAI,OAAO,QAAQ;AACnB,QAAI,SAAS;AACb,QAAI,SAAS;AAEb,QAAI,cAAc,YAAY,cAAc;AAC1C,UAAI,eAAe,QAAQ;AAC3B,UAAI,cAAc,QAAQ;AAG1B,UAAI,cAAc,GAAG;AACnB,iBAAS,MAAM,KAAK,SAAS,eAAe;AAAA;AAG9C,UAAI,eAAe,GAAG;AACpB,iBAAS,MAAM,KAAK,UAAU,gBAAgB;AAAA;AAAA;AAIlD,WAAO;AAAA,MACL,OAAO,KAAK,QAAQ;AAAA,MACpB,QAAQ,KAAK,SAAS;AAAA,MACtB,KAAK,KAAK,MAAM;AAAA,MAChB,OAAO,KAAK,QAAQ;AAAA,MACpB,QAAQ,KAAK,SAAS;AAAA,MACtB,MAAM,KAAK,OAAO;AAAA,MAClB,GAAG,KAAK,OAAO;AAAA,MACf,GAAG,KAAK,MAAM;AAAA;AAAA;;;AC9BH,yBAAuB,SAAS;AAC7C,QAAI,aAAa,sBAAsB;AAGvC,QAAI,QAAQ,QAAQ;AACpB,QAAI,SAAS,QAAQ;AAErB,QAAI,KAAK,IAAI,WAAW,QAAQ,UAAU,GAAG;AAC3C,cAAQ,WAAW;AAAA;AAGrB,QAAI,KAAK,IAAI,WAAW,SAAS,WAAW,GAAG;AAC7C,eAAS,WAAW;AAAA;AAGtB,WAAO;AAAA,MACL,GAAG,QAAQ;AAAA,MACX,GAAG,QAAQ;AAAA,MACX;AAAA,MACA;AAAA;AAAA;;;ACrBW,oBAAkB,QAAQ,OAAO;AAC9C,QAAI,WAAW,MAAM,eAAe,MAAM;AAE1C,QAAI,OAAO,SAAS,QAAQ;AAC1B,aAAO;AAAA,eAEA,YAAY,aAAa,WAAW;AACzC,UAAI,QAAO;AAEX,SAAG;AACD,YAAI,SAAQ,OAAO,WAAW,QAAO;AACnC,iBAAO;AAAA;AAIT,gBAAO,MAAK,cAAc,MAAK;AAAA,eACxB;AAAA;AAIb,WAAO;AAAA;;;ACpBM,6BAA0B,SAAS;AAChD,WAAO,UAAU,SAAS,iBAAiB;AAAA;;;ACD9B,0BAAwB,SAAS;AAC9C,WAAO,CAAC,SAAS,MAAM,MAAM,QAAQ,YAAY,aAAa;AAAA;;;ACDjD,8BAA4B,SAAS;AAElD,WAAS,YAAU,WAAW,QAAQ,gBACtC,QAAQ,aAAa,OAAO,UAAU;AAAA;;;ACDzB,yBAAuB,SAAS;AAC7C,QAAI,YAAY,aAAa,QAAQ;AACnC,aAAO;AAAA;AAGT,WAGE,QAAQ,gBACR,QAAQ,cACR,cAAa,WAAW,QAAQ,OAAO,SAEvC,mBAAmB;AAAA;;;ACRvB,+BAA6B,SAAS;AACpC,QAAI,CAAC,cAAc,YACnB,kBAAiB,SAAS,aAAa,SAAS;AAC9C,aAAO;AAAA;AAGT,WAAO,QAAQ;AAAA;AAKjB,8BAA4B,SAAS;AACnC,QAAI,aAAY,UAAU,UAAU,cAAc,QAAQ,eAAe;AACzE,QAAI,QAAO,UAAU,UAAU,QAAQ,eAAe;AAEtD,QAAI,SAAQ,cAAc,UAAU;AAElC,UAAI,aAAa,kBAAiB;AAElC,UAAI,WAAW,aAAa,SAAS;AACnC,eAAO;AAAA;AAAA;AAIX,QAAI,cAAc,cAAc;AAEhC,WAAO,cAAc,gBAAgB,CAAC,QAAQ,QAAQ,QAAQ,YAAY,gBAAgB,GAAG;AAC3F,UAAI,MAAM,kBAAiB;AAI3B,UAAI,IAAI,cAAc,UAAU,IAAI,gBAAgB,UAAU,IAAI,YAAY,WAAW,CAAC,aAAa,eAAe,QAAQ,IAAI,gBAAgB,MAAM,cAAa,IAAI,eAAe,YAAY,cAAa,IAAI,UAAU,IAAI,WAAW,QAAQ;AACpP,eAAO;AAAA,aACF;AACL,sBAAc,YAAY;AAAA;AAAA;AAI9B,WAAO;AAAA;AAKM,2BAAyB,SAAS;AAC/C,QAAI,UAAS,UAAU;AACvB,QAAI,eAAe,oBAAoB;AAEvC,WAAO,gBAAgB,eAAe,iBAAiB,kBAAiB,cAAc,aAAa,UAAU;AAC3G,qBAAe,oBAAoB;AAAA;AAGrC,QAAI,gBAAiB,aAAY,kBAAkB,UAAU,YAAY,kBAAkB,UAAU,kBAAiB,cAAc,aAAa,WAAW;AAC1J,aAAO;AAAA;AAGT,WAAO,gBAAgB,mBAAmB,YAAY;AAAA;;;AC9DzC,oCAAkC,WAAW;AAC1D,WAAO,CAAC,OAAO,UAAU,QAAQ,cAAc,IAAI,MAAM;AAAA;;;ACApD,kBAAgB,MAAK,OAAO,MAAK;AACtC,WAAO,KAAQ,MAAK,KAAQ,OAAO;AAAA;AAE9B,0BAAwB,MAAK,OAAO,MAAK;AAC9C,QAAI,IAAI,OAAO,MAAK,OAAO;AAC3B,WAAO,IAAI,OAAM,OAAM;AAAA;;;ACNV,gCAA8B;AAC3C,WAAO;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA;AAAA;;;ACJK,8BAA4B,eAAe;AACxD,WAAO,OAAO,OAAO,IAAI,sBAAsB;AAAA;;;ACFlC,2BAAyB,OAAO,OAAM;AACnD,WAAO,MAAK,OAAO,SAAU,SAAS,KAAK;AACzC,cAAQ,OAAO;AACf,aAAO;AAAA,OACN;AAAA;;;ACOL,MAAI,kBAAkB,0BAAyB,SAAS,OAAO;AAC7D,cAAU,OAAO,YAAY,aAAa,QAAQ,OAAO,OAAO,IAAI,MAAM,OAAO;AAAA,MAC/E,WAAW,MAAM;AAAA,UACb;AACN,WAAO,mBAAmB,OAAO,YAAY,WAAW,UAAU,gBAAgB,SAAS;AAAA;AAG7F,iBAAe,MAAM;AACnB,QAAI;AAEJ,QAAI,QAAQ,KAAK,OACb,OAAO,KAAK,MACZ,UAAU,KAAK;AACnB,QAAI,eAAe,MAAM,SAAS;AAClC,QAAI,iBAAgB,MAAM,cAAc;AACxC,QAAI,gBAAgB,iBAAiB,MAAM;AAC3C,QAAI,OAAO,yBAAyB;AACpC,QAAI,aAAa,CAAC,OAAM,QAAO,QAAQ,kBAAkB;AACzD,QAAI,MAAM,aAAa,WAAW;AAElC,QAAI,CAAC,gBAAgB,CAAC,gBAAe;AACnC;AAAA;AAGF,QAAI,gBAAgB,gBAAgB,QAAQ,SAAS;AACrD,QAAI,YAAY,cAAc;AAC9B,QAAI,UAAU,SAAS,MAAM,OAAM;AACnC,QAAI,UAAU,SAAS,MAAM,UAAS;AACtC,QAAI,UAAU,MAAM,MAAM,UAAU,OAAO,MAAM,MAAM,UAAU,QAAQ,eAAc,QAAQ,MAAM,MAAM,OAAO;AAClH,QAAI,YAAY,eAAc,QAAQ,MAAM,MAAM,UAAU;AAC5D,QAAI,oBAAoB,gBAAgB;AACxC,QAAI,aAAa,oBAAoB,SAAS,MAAM,kBAAkB,gBAAgB,IAAI,kBAAkB,eAAe,IAAI;AAC/H,QAAI,oBAAoB,UAAU,IAAI,YAAY;AAGlD,QAAI,OAAM,cAAc;AACxB,QAAI,OAAM,aAAa,UAAU,OAAO,cAAc;AACtD,QAAI,SAAS,aAAa,IAAI,UAAU,OAAO,IAAI;AACnD,QAAI,UAAS,OAAO,MAAK,QAAQ;AAEjC,QAAI,WAAW;AACf,UAAM,cAAc,QAAS,yBAAwB,IAAI,sBAAsB,YAAY,SAAQ,sBAAsB,eAAe,UAAS,QAAQ;AAAA;AAG3J,mBAAgB,OAAO;AACrB,QAAI,QAAQ,MAAM,OACd,UAAU,MAAM;AACpB,QAAI,mBAAmB,QAAQ,SAC3B,eAAe,qBAAqB,SAAS,wBAAwB;AAEzE,QAAI,gBAAgB,MAAM;AACxB;AAAA;AAIF,QAAI,OAAO,iBAAiB,UAAU;AACpC,qBAAe,MAAM,SAAS,OAAO,cAAc;AAEnD,UAAI,CAAC,cAAc;AACjB;AAAA;AAAA;AAIJ,QAAI,MAAuC;AACzC,UAAI,CAAC,cAAc,eAAe;AAChC,gBAAQ,MAAM,CAAC,uEAAuE,uEAAuE,cAAc,KAAK;AAAA;AAAA;AAIpL,QAAI,CAAC,SAAS,MAAM,SAAS,QAAQ,eAAe;AAClD,UAAI,MAAuC;AACzC,gBAAQ,MAAM,CAAC,uEAAuE,YAAY,KAAK;AAAA;AAGzG;AAAA;AAGF,UAAM,SAAS,QAAQ;AAAA;AAIzB,MAAO,gBAAQ;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,UAAU,CAAC;AAAA,IACX,kBAAkB,CAAC;AAAA;;;ACnGN,wBAAsB,WAAW;AAC9C,WAAO,UAAU,MAAM,KAAK;AAAA;;;ACQ9B,MAAI,aAAa;AAAA,IACf,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA;AAKR,6BAA2B,MAAM;AAC/B,QAAI,IAAI,KAAK,GACT,IAAI,KAAK;AACb,QAAI,MAAM;AACV,QAAI,MAAM,IAAI,oBAAoB;AAClC,WAAO;AAAA,MACL,GAAG,MAAM,IAAI,OAAO,OAAO;AAAA,MAC3B,GAAG,MAAM,IAAI,OAAO,OAAO;AAAA;AAAA;AAIxB,uBAAqB,OAAO;AACjC,QAAI;AAEJ,QAAI,UAAS,MAAM,QACf,aAAa,MAAM,YACnB,YAAY,MAAM,WAClB,YAAY,MAAM,WAClB,UAAU,MAAM,SAChB,WAAW,MAAM,UACjB,kBAAkB,MAAM,iBACxB,WAAW,MAAM,UACjB,eAAe,MAAM,cACrB,UAAU,MAAM;AAEpB,QAAI,QAAQ,iBAAiB,OAAO,kBAAkB,WAAW,OAAO,iBAAiB,aAAa,aAAa,WAAW,SAC1H,UAAU,MAAM,GAChB,IAAI,YAAY,SAAS,IAAI,SAC7B,UAAU,MAAM,GAChB,IAAI,YAAY,SAAS,IAAI;AAEjC,QAAI,OAAO,QAAQ,eAAe;AAClC,QAAI,OAAO,QAAQ,eAAe;AAClC,QAAI,QAAQ;AACZ,QAAI,QAAQ;AACZ,QAAI,MAAM;AAEV,QAAI,UAAU;AACZ,UAAI,eAAe,gBAAgB;AACnC,UAAI,aAAa;AACjB,UAAI,YAAY;AAEhB,UAAI,iBAAiB,UAAU,UAAS;AACtC,uBAAe,mBAAmB;AAElC,YAAI,kBAAiB,cAAc,aAAa,YAAY,aAAa,YAAY;AACnF,uBAAa;AACb,sBAAY;AAAA;AAAA;AAKhB,qBAAe;AAEf,UAAI,cAAc,QAAQ,eAAc,SAAQ,cAAc,WAAU,cAAc,KAAK;AACzF,gBAAQ;AACR,YAAI,UAAU,WAAW,IAAI,iBAAiB,IAAI,eAAe,SACjE,aAAa;AACb,aAAK,UAAU,WAAW;AAC1B,aAAK,kBAAkB,IAAI;AAAA;AAG7B,UAAI,cAAc,SAAS,eAAc,QAAO,cAAc,YAAW,cAAc,KAAK;AAC1F,gBAAQ;AACR,YAAI,UAAU,WAAW,IAAI,iBAAiB,IAAI,eAAe,QACjE,aAAa;AACb,aAAK,UAAU,WAAW;AAC1B,aAAK,kBAAkB,IAAI;AAAA;AAAA;AAI/B,QAAI,eAAe,OAAO,OAAO;AAAA,MAC/B;AAAA,OACC,YAAY;AAEf,QAAI,iBAAiB;AACnB,UAAI;AAEJ,aAAO,OAAO,OAAO,IAAI,cAAe,kBAAiB,IAAI,eAAe,SAAS,OAAO,MAAM,IAAI,eAAe,SAAS,OAAO,MAAM,IAAI,eAAe,YAAa,KAAI,oBAAoB,MAAM,IAAI,eAAe,IAAI,SAAS,IAAI,QAAQ,iBAAiB,IAAI,SAAS,IAAI,UAAU;AAAA;AAGnS,WAAO,OAAO,OAAO,IAAI,cAAe,mBAAkB,IAAI,gBAAgB,SAAS,OAAO,IAAI,OAAO,IAAI,gBAAgB,SAAS,OAAO,IAAI,OAAO,IAAI,gBAAgB,YAAY,IAAI;AAAA;AAG9L,yBAAuB,OAAO;AAC5B,QAAI,QAAQ,MAAM,OACd,UAAU,MAAM;AACpB,QAAI,wBAAwB,QAAQ,iBAChC,kBAAkB,0BAA0B,SAAS,OAAO,uBAC5D,oBAAoB,QAAQ,UAC5B,WAAW,sBAAsB,SAAS,OAAO,mBACjD,wBAAwB,QAAQ,cAChC,eAAe,0BAA0B,SAAS,OAAO;AAE7D,QAAI,MAAuC;AACzC,UAAI,qBAAqB,kBAAiB,MAAM,SAAS,QAAQ,sBAAsB;AAEvF,UAAI,YAAY,CAAC,aAAa,OAAO,SAAS,UAAU,QAAQ,KAAK,SAAU,UAAU;AACvF,eAAO,mBAAmB,QAAQ,aAAa;AAAA,UAC7C;AACF,gBAAQ,KAAK,CAAC,qEAAqE,kEAAkE,QAAQ,sEAAsE,mEAAmE,sEAAsE,4CAA4C,QAAQ,sEAAsE,uEAAuE,KAAK;AAAA;AAAA;AAItjB,QAAI,eAAe;AAAA,MACjB,WAAW,iBAAiB,MAAM;AAAA,MAClC,WAAW,aAAa,MAAM;AAAA,MAC9B,QAAQ,MAAM,SAAS;AAAA,MACvB,YAAY,MAAM,MAAM;AAAA,MACxB;AAAA,MACA,SAAS,MAAM,QAAQ,aAAa;AAAA;AAGtC,QAAI,MAAM,cAAc,iBAAiB,MAAM;AAC7C,YAAM,OAAO,SAAS,OAAO,OAAO,IAAI,MAAM,OAAO,QAAQ,YAAY,OAAO,OAAO,IAAI,cAAc;AAAA,QACvG,SAAS,MAAM,cAAc;AAAA,QAC7B,UAAU,MAAM,QAAQ;AAAA,QACxB;AAAA,QACA;AAAA;AAAA;AAIJ,QAAI,MAAM,cAAc,SAAS,MAAM;AACrC,YAAM,OAAO,QAAQ,OAAO,OAAO,IAAI,MAAM,OAAO,OAAO,YAAY,OAAO,OAAO,IAAI,cAAc;AAAA,QACrG,SAAS,MAAM,cAAc;AAAA,QAC7B,UAAU;AAAA,QACV,UAAU;AAAA,QACV;AAAA;AAAA;AAIJ,UAAM,WAAW,SAAS,OAAO,OAAO,IAAI,MAAM,WAAW,QAAQ;AAAA,MACnE,yBAAyB,MAAM;AAAA;AAAA;AAKnC,MAAO,wBAAQ;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA;;;AC9JR,MAAI,UAAU;AAAA,IACZ,SAAS;AAAA;AAGX,mBAAgB,MAAM;AACpB,QAAI,QAAQ,KAAK,OACb,WAAW,KAAK,UAChB,UAAU,KAAK;AACnB,QAAI,kBAAkB,QAAQ,QAC1B,SAAS,oBAAoB,SAAS,OAAO,iBAC7C,kBAAkB,QAAQ,QAC1B,SAAS,oBAAoB,SAAS,OAAO;AACjD,QAAI,UAAS,UAAU,MAAM,SAAS;AACtC,QAAI,gBAAgB,GAAG,OAAO,MAAM,cAAc,WAAW,MAAM,cAAc;AAEjF,QAAI,QAAQ;AACV,oBAAc,QAAQ,SAAU,cAAc;AAC5C,qBAAa,iBAAiB,UAAU,SAAS,QAAQ;AAAA;AAAA;AAI7D,QAAI,QAAQ;AACV,cAAO,iBAAiB,UAAU,SAAS,QAAQ;AAAA;AAGrD,WAAO,WAAY;AACjB,UAAI,QAAQ;AACV,sBAAc,QAAQ,SAAU,cAAc;AAC5C,uBAAa,oBAAoB,UAAU,SAAS,QAAQ;AAAA;AAAA;AAIhE,UAAI,QAAQ;AACV,gBAAO,oBAAoB,UAAU,SAAS,QAAQ;AAAA;AAAA;AAAA;AAM5D,MAAO,yBAAQ;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,IAAI,cAAc;AAAA;AAAA,IAClB,QAAQ;AAAA,IACR,MAAM;AAAA;;;AC/CR,MAAI,OAAO;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA;AAEQ,gCAA8B,WAAW;AACtD,WAAO,UAAU,QAAQ,0BAA0B,SAAU,SAAS;AACpE,aAAO,KAAK;AAAA;AAAA;;;ACRhB,MAAI,QAAO;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA;AAEQ,yCAAuC,WAAW;AAC/D,WAAO,UAAU,QAAQ,cAAc,SAAU,SAAS;AACxD,aAAO,MAAK;AAAA;AAAA;;;ACLD,2BAAyB,MAAM;AAC5C,QAAI,MAAM,UAAU;AACpB,QAAI,aAAa,IAAI;AACrB,QAAI,YAAY,IAAI;AACpB,WAAO;AAAA,MACL;AAAA,MACA;AAAA;AAAA;;;ACJW,+BAA6B,SAAS;AAQnD,WAAO,sBAAsB,mBAAmB,UAAU,OAAO,gBAAgB,SAAS;AAAA;;;ACR7E,2BAAyB,SAAS;AAC/C,QAAI,MAAM,UAAU;AACpB,QAAI,OAAO,mBAAmB;AAC9B,QAAI,iBAAiB,IAAI;AACzB,QAAI,QAAQ,KAAK;AACjB,QAAI,SAAS,KAAK;AAClB,QAAI,IAAI;AACR,QAAI,IAAI;AAMR,QAAI,gBAAgB;AAClB,cAAQ,eAAe;AACvB,eAAS,eAAe;AASxB,UAAI,CAAC,iCAAiC,KAAK,UAAU,YAAY;AAC/D,YAAI,eAAe;AACnB,YAAI,eAAe;AAAA;AAAA;AAIvB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,GAAG,IAAI,oBAAoB;AAAA,MAC3B;AAAA;AAAA;;;AC9BW,2BAAyB,SAAS;AAC/C,QAAI;AAEJ,QAAI,OAAO,mBAAmB;AAC9B,QAAI,YAAY,gBAAgB;AAChC,QAAI,OAAQ,yBAAwB,QAAQ,kBAAkB,OAAO,SAAS,sBAAsB;AACpG,QAAI,QAAQ,KAAI,KAAK,aAAa,KAAK,aAAa,OAAO,KAAK,cAAc,GAAG,OAAO,KAAK,cAAc;AAC3G,QAAI,SAAS,KAAI,KAAK,cAAc,KAAK,cAAc,OAAO,KAAK,eAAe,GAAG,OAAO,KAAK,eAAe;AAChH,QAAI,IAAI,CAAC,UAAU,aAAa,oBAAoB;AACpD,QAAI,IAAI,CAAC,UAAU;AAEnB,QAAI,kBAAiB,QAAQ,MAAM,cAAc,OAAO;AACtD,WAAK,KAAI,KAAK,aAAa,OAAO,KAAK,cAAc,KAAK;AAAA;AAG5D,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;;;ACzBW,0BAAwB,SAAS;AAE9C,QAAI,oBAAoB,kBAAiB,UACrC,WAAW,kBAAkB,UAC7B,YAAY,kBAAkB,WAC9B,YAAY,kBAAkB;AAElC,WAAO,6BAA6B,KAAK,WAAW,YAAY;AAAA;;;ACJnD,2BAAyB,MAAM;AAC5C,QAAI,CAAC,QAAQ,QAAQ,aAAa,QAAQ,YAAY,UAAU,GAAG;AAEjE,aAAO,KAAK,cAAc;AAAA;AAG5B,QAAI,cAAc,SAAS,eAAe,OAAO;AAC/C,aAAO;AAAA;AAGT,WAAO,gBAAgB,cAAc;AAAA;;;ACHxB,6BAA2B,SAAS,MAAM;AACvD,QAAI;AAEJ,QAAI,SAAS,QAAQ;AACnB,aAAO;AAAA;AAGT,QAAI,eAAe,gBAAgB;AACnC,QAAI,SAAS,iBAAmB,0BAAwB,QAAQ,kBAAkB,OAAO,SAAS,sBAAsB;AACxH,QAAI,MAAM,UAAU;AACpB,QAAI,SAAS,SAAS,CAAC,KAAK,OAAO,IAAI,kBAAkB,IAAI,eAAe,gBAAgB,eAAe,MAAM;AACjH,QAAI,cAAc,KAAK,OAAO;AAC9B,WAAO,SAAS,cAChB,YAAY,OAAO,kBAAkB,cAAc;AAAA;;;ACxBtC,4BAA0B,MAAM;AAC7C,WAAO,OAAO,OAAO,IAAI,MAAM;AAAA,MAC7B,MAAM,KAAK;AAAA,MACX,KAAK,KAAK;AAAA,MACV,OAAO,KAAK,IAAI,KAAK;AAAA,MACrB,QAAQ,KAAK,IAAI,KAAK;AAAA;AAAA;;;ACU1B,sCAAoC,SAAS;AAC3C,QAAI,OAAO,sBAAsB;AACjC,SAAK,MAAM,KAAK,MAAM,QAAQ;AAC9B,SAAK,OAAO,KAAK,OAAO,QAAQ;AAChC,SAAK,SAAS,KAAK,MAAM,QAAQ;AACjC,SAAK,QAAQ,KAAK,OAAO,QAAQ;AACjC,SAAK,QAAQ,QAAQ;AACrB,SAAK,SAAS,QAAQ;AACtB,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,KAAK;AACd,WAAO;AAAA;AAGT,sCAAoC,SAAS,gBAAgB;AAC3D,WAAO,mBAAmB,WAAW,iBAAiB,gBAAgB,YAAY,UAAU,kBAAkB,2BAA2B,kBAAkB,iBAAiB,gBAAgB,mBAAmB;AAAA;AAMjN,8BAA4B,SAAS;AACnC,QAAI,mBAAkB,kBAAkB,cAAc;AACtD,QAAI,oBAAoB,CAAC,YAAY,SAAS,QAAQ,kBAAiB,SAAS,aAAa;AAC7F,QAAI,iBAAiB,qBAAqB,cAAc,WAAW,gBAAgB,WAAW;AAE9F,QAAI,CAAC,UAAU,iBAAiB;AAC9B,aAAO;AAAA;AAIT,WAAO,iBAAgB,OAAO,SAAU,gBAAgB;AACtD,aAAO,UAAU,mBAAmB,SAAS,gBAAgB,mBAAmB,YAAY,oBAAoB,UAAW,qBAAoB,kBAAiB,gBAAgB,aAAa,WAAW;AAAA;AAAA;AAM7L,2BAAyB,SAAS,UAAU,cAAc;AACvE,QAAI,sBAAsB,aAAa,oBAAoB,mBAAmB,WAAW,GAAG,OAAO;AACnG,QAAI,mBAAkB,GAAG,OAAO,qBAAqB,CAAC;AACtD,QAAI,sBAAsB,iBAAgB;AAC1C,QAAI,eAAe,iBAAgB,OAAO,SAAU,SAAS,gBAAgB;AAC3E,UAAI,OAAO,2BAA2B,SAAS;AAC/C,cAAQ,MAAM,KAAI,KAAK,KAAK,QAAQ;AACpC,cAAQ,QAAQ,KAAI,KAAK,OAAO,QAAQ;AACxC,cAAQ,SAAS,KAAI,KAAK,QAAQ,QAAQ;AAC1C,cAAQ,OAAO,KAAI,KAAK,MAAM,QAAQ;AACtC,aAAO;AAAA,OACN,2BAA2B,SAAS;AACvC,iBAAa,QAAQ,aAAa,QAAQ,aAAa;AACvD,iBAAa,SAAS,aAAa,SAAS,aAAa;AACzD,iBAAa,IAAI,aAAa;AAC9B,iBAAa,IAAI,aAAa;AAC9B,WAAO;AAAA;;;AChEM,0BAAwB,MAAM;AAC3C,QAAI,aAAY,KAAK,WACjB,UAAU,KAAK,SACf,YAAY,KAAK;AACrB,QAAI,gBAAgB,YAAY,iBAAiB,aAAa;AAC9D,QAAI,YAAY,YAAY,aAAa,aAAa;AACtD,QAAI,UAAU,WAAU,IAAI,WAAU,QAAQ,IAAI,QAAQ,QAAQ;AAClE,QAAI,UAAU,WAAU,IAAI,WAAU,SAAS,IAAI,QAAQ,SAAS;AACpE,QAAI;AAEJ,YAAQ;AAAA,WACD;AACH,kBAAU;AAAA,UACR,GAAG;AAAA,UACH,GAAG,WAAU,IAAI,QAAQ;AAAA;AAE3B;AAAA,WAEG;AACH,kBAAU;AAAA,UACR,GAAG;AAAA,UACH,GAAG,WAAU,IAAI,WAAU;AAAA;AAE7B;AAAA,WAEG;AACH,kBAAU;AAAA,UACR,GAAG,WAAU,IAAI,WAAU;AAAA,UAC3B,GAAG;AAAA;AAEL;AAAA,WAEG;AACH,kBAAU;AAAA,UACR,GAAG,WAAU,IAAI,QAAQ;AAAA,UACzB,GAAG;AAAA;AAEL;AAAA;AAGA,kBAAU;AAAA,UACR,GAAG,WAAU;AAAA,UACb,GAAG,WAAU;AAAA;AAAA;AAInB,QAAI,WAAW,gBAAgB,yBAAyB,iBAAiB;AAEzE,QAAI,YAAY,MAAM;AACpB,UAAI,MAAM,aAAa,MAAM,WAAW;AAExC,cAAQ;AAAA,aACD;AACH,kBAAQ,YAAY,QAAQ,YAAa,YAAU,OAAO,IAAI,QAAQ,OAAO;AAC7E;AAAA,aAEG;AACH,kBAAQ,YAAY,QAAQ,YAAa,YAAU,OAAO,IAAI,QAAQ,OAAO;AAC7E;AAAA;AAAA;AAAA;AAMN,WAAO;AAAA;;;AC1DM,0BAAwB,OAAO,SAAS;AACrD,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA;AAGZ,QAAI,WAAW,SACX,qBAAqB,SAAS,WAC9B,YAAY,uBAAuB,SAAS,MAAM,YAAY,oBAC9D,oBAAoB,SAAS,UAC7B,WAAW,sBAAsB,SAAS,kBAAkB,mBAC5D,wBAAwB,SAAS,cACjC,eAAe,0BAA0B,SAAS,WAAW,uBAC7D,wBAAwB,SAAS,gBACjC,iBAAiB,0BAA0B,SAAS,SAAS,uBAC7D,uBAAuB,SAAS,aAChC,cAAc,yBAAyB,SAAS,QAAQ,sBACxD,mBAAmB,SAAS,SAC5B,UAAU,qBAAqB,SAAS,IAAI;AAChD,QAAI,gBAAgB,mBAAmB,OAAO,YAAY,WAAW,UAAU,gBAAgB,SAAS;AACxG,QAAI,aAAa,mBAAmB,SAAS,YAAY;AACzD,QAAI,aAAa,MAAM,MAAM;AAC7B,QAAI,UAAU,MAAM,SAAS,cAAc,aAAa;AACxD,QAAI,qBAAqB,gBAAgB,UAAU,WAAW,UAAU,QAAQ,kBAAkB,mBAAmB,MAAM,SAAS,SAAS,UAAU;AACvJ,QAAI,sBAAsB,sBAAsB,MAAM,SAAS;AAC/D,QAAI,iBAAgB,eAAe;AAAA,MACjC,WAAW;AAAA,MACX,SAAS;AAAA,MACT,UAAU;AAAA,MACV;AAAA;AAEF,QAAI,mBAAmB,iBAAiB,OAAO,OAAO,IAAI,YAAY;AACtE,QAAI,oBAAoB,mBAAmB,SAAS,mBAAmB;AAGvE,QAAI,kBAAkB;AAAA,MACpB,KAAK,mBAAmB,MAAM,kBAAkB,MAAM,cAAc;AAAA,MACpE,QAAQ,kBAAkB,SAAS,mBAAmB,SAAS,cAAc;AAAA,MAC7E,MAAM,mBAAmB,OAAO,kBAAkB,OAAO,cAAc;AAAA,MACvE,OAAO,kBAAkB,QAAQ,mBAAmB,QAAQ,cAAc;AAAA;AAE5E,QAAI,aAAa,MAAM,cAAc;AAErC,QAAI,mBAAmB,UAAU,YAAY;AAC3C,UAAI,UAAS,WAAW;AACxB,aAAO,KAAK,iBAAiB,QAAQ,SAAU,KAAK;AAClD,YAAI,YAAW,CAAC,QAAO,SAAQ,QAAQ,QAAQ,IAAI,IAAI;AACvD,YAAI,OAAO,CAAC,MAAK,SAAQ,QAAQ,QAAQ,IAAI,MAAM;AACnD,wBAAgB,QAAQ,QAAO,QAAQ;AAAA;AAAA;AAI3C,WAAO;AAAA;;;ACzDM,gCAA8B,OAAO,SAAS;AAC3D,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA;AAGZ,QAAI,WAAW,SACX,YAAY,SAAS,WACrB,WAAW,SAAS,UACpB,eAAe,SAAS,cACxB,UAAU,SAAS,SACnB,iBAAiB,SAAS,gBAC1B,wBAAwB,SAAS,uBACjC,wBAAwB,0BAA0B,SAAS,aAAgB;AAC/E,QAAI,YAAY,aAAa;AAC7B,QAAI,cAAa,YAAY,iBAAiB,sBAAsB,oBAAoB,OAAO,SAAU,YAAW;AAClH,aAAO,aAAa,gBAAe;AAAA,SAChC;AACL,QAAI,oBAAoB,YAAW,OAAO,SAAU,YAAW;AAC7D,aAAO,sBAAsB,QAAQ,eAAc;AAAA;AAGrD,QAAI,kBAAkB,WAAW,GAAG;AAClC,0BAAoB;AAEpB,UAAI,MAAuC;AACzC,gBAAQ,MAAM,CAAC,gEAAgE,mEAAmE,8BAA8B,+DAA+D,6BAA6B,KAAK;AAAA;AAAA;AAKrR,QAAI,YAAY,kBAAkB,OAAO,SAAU,KAAK,YAAW;AACjE,UAAI,cAAa,eAAe,OAAO;AAAA,QACrC,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,SACC,iBAAiB;AACpB,aAAO;AAAA,OACN;AACH,WAAO,OAAO,KAAK,WAAW,KAAK,SAAU,GAAG,GAAG;AACjD,aAAO,UAAU,KAAK,UAAU;AAAA;AAAA;;;ACpCpC,yCAAuC,WAAW;AAChD,QAAI,iBAAiB,eAAe,MAAM;AACxC,aAAO;AAAA;AAGT,QAAI,oBAAoB,qBAAqB;AAC7C,WAAO,CAAC,8BAA8B,YAAY,mBAAmB,8BAA8B;AAAA;AAGrG,gBAAc,MAAM;AAClB,QAAI,QAAQ,KAAK,OACb,UAAU,KAAK,SACf,OAAO,KAAK;AAEhB,QAAI,MAAM,cAAc,MAAM,OAAO;AACnC;AAAA;AAGF,QAAI,oBAAoB,QAAQ,UAC5B,gBAAgB,sBAAsB,SAAS,OAAO,mBACtD,mBAAmB,QAAQ,SAC3B,eAAe,qBAAqB,SAAS,OAAO,kBACpD,8BAA8B,QAAQ,oBACtC,UAAU,QAAQ,SAClB,WAAW,QAAQ,UACnB,eAAe,QAAQ,cACvB,cAAc,QAAQ,aACtB,wBAAwB,QAAQ,gBAChC,iBAAiB,0BAA0B,SAAS,OAAO,uBAC3D,wBAAwB,QAAQ;AACpC,QAAI,qBAAqB,MAAM,QAAQ;AACvC,QAAI,gBAAgB,iBAAiB;AACrC,QAAI,kBAAkB,kBAAkB;AACxC,QAAI,qBAAqB,+BAAgC,oBAAmB,CAAC,iBAAiB,CAAC,qBAAqB,uBAAuB,8BAA8B;AACzK,QAAI,cAAa,CAAC,oBAAoB,OAAO,oBAAoB,OAAO,SAAU,KAAK,YAAW;AAChG,aAAO,IAAI,OAAO,iBAAiB,gBAAe,OAAO,qBAAqB,OAAO;AAAA,QACnF,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,WACG;AAAA,OACJ;AACH,QAAI,gBAAgB,MAAM,MAAM;AAChC,QAAI,aAAa,MAAM,MAAM;AAC7B,QAAI,YAAY,oBAAI;AACpB,QAAI,qBAAqB;AACzB,QAAI,wBAAwB,YAAW;AAEvC,aAAS,IAAI,GAAG,IAAI,YAAW,QAAQ,KAAK;AAC1C,UAAI,YAAY,YAAW;AAE3B,UAAI,iBAAiB,iBAAiB;AAEtC,UAAI,mBAAmB,aAAa,eAAe;AACnD,UAAI,aAAa,CAAC,MAAK,SAAQ,QAAQ,mBAAmB;AAC1D,UAAI,MAAM,aAAa,UAAU;AACjC,UAAI,WAAW,eAAe,OAAO;AAAA,QACnC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAEF,UAAI,oBAAoB,aAAa,mBAAmB,SAAQ,QAAO,mBAAmB,UAAS;AAEnG,UAAI,cAAc,OAAO,WAAW,MAAM;AACxC,4BAAoB,qBAAqB;AAAA;AAG3C,UAAI,mBAAmB,qBAAqB;AAC5C,UAAI,SAAS;AAEb,UAAI,eAAe;AACjB,eAAO,KAAK,SAAS,mBAAmB;AAAA;AAG1C,UAAI,cAAc;AAChB,eAAO,KAAK,SAAS,sBAAsB,GAAG,SAAS,qBAAqB;AAAA;AAG9E,UAAI,OAAO,MAAM,SAAU,OAAO;AAChC,eAAO;AAAA,UACL;AACF,gCAAwB;AACxB,6BAAqB;AACrB;AAAA;AAGF,gBAAU,IAAI,WAAW;AAAA;AAG3B,QAAI,oBAAoB;AAEtB,UAAI,iBAAiB,iBAAiB,IAAI;AAE1C,UAAI,QAAQ,gBAAe,KAAI;AAC7B,YAAI,mBAAmB,YAAW,KAAK,SAAU,YAAW;AAC1D,cAAI,UAAS,UAAU,IAAI;AAE3B,cAAI,SAAQ;AACV,mBAAO,QAAO,MAAM,GAAG,KAAI,MAAM,SAAU,OAAO;AAChD,qBAAO;AAAA;AAAA;AAAA;AAKb,YAAI,kBAAkB;AACpB,kCAAwB;AACxB,iBAAO;AAAA;AAAA;AAIX,eAAS,KAAK,gBAAgB,KAAK,GAAG,MAAM;AAC1C,YAAI,OAAO,MAAM;AAEjB,YAAI,SAAS;AAAS;AAAA;AAAA;AAI1B,QAAI,MAAM,cAAc,uBAAuB;AAC7C,YAAM,cAAc,MAAM,QAAQ;AAClC,YAAM,YAAY;AAClB,YAAM,QAAQ;AAAA;AAAA;AAKlB,MAAO,eAAQ;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,kBAAkB,CAAC;AAAA,IACnB,MAAM;AAAA,MACJ,OAAO;AAAA;AAAA;;;AC7IX,0BAAwB,UAAU,MAAM,kBAAkB;AACxD,QAAI,qBAAqB,QAAQ;AAC/B,yBAAmB;AAAA,QACjB,GAAG;AAAA,QACH,GAAG;AAAA;AAAA;AAIP,WAAO;AAAA,MACL,KAAK,SAAS,MAAM,KAAK,SAAS,iBAAiB;AAAA,MACnD,OAAO,SAAS,QAAQ,KAAK,QAAQ,iBAAiB;AAAA,MACtD,QAAQ,SAAS,SAAS,KAAK,SAAS,iBAAiB;AAAA,MACzD,MAAM,SAAS,OAAO,KAAK,QAAQ,iBAAiB;AAAA;AAAA;AAIxD,iCAA+B,UAAU;AACvC,WAAO,CAAC,MAAK,QAAO,SAAQ,OAAM,KAAK,SAAU,MAAM;AACrD,aAAO,SAAS,SAAS;AAAA;AAAA;AAI7B,gBAAc,MAAM;AAClB,QAAI,QAAQ,KAAK,OACb,OAAO,KAAK;AAChB,QAAI,gBAAgB,MAAM,MAAM;AAChC,QAAI,aAAa,MAAM,MAAM;AAC7B,QAAI,mBAAmB,MAAM,cAAc;AAC3C,QAAI,oBAAoB,eAAe,OAAO;AAAA,MAC5C,gBAAgB;AAAA;AAElB,QAAI,oBAAoB,eAAe,OAAO;AAAA,MAC5C,aAAa;AAAA;AAEf,QAAI,2BAA2B,eAAe,mBAAmB;AACjE,QAAI,sBAAsB,eAAe,mBAAmB,YAAY;AACxE,QAAI,oBAAoB,sBAAsB;AAC9C,QAAI,mBAAmB,sBAAsB;AAC7C,UAAM,cAAc,QAAQ;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAEF,UAAM,WAAW,SAAS,OAAO,OAAO,IAAI,MAAM,WAAW,QAAQ;AAAA,MACnE,gCAAgC;AAAA,MAChC,uBAAuB;AAAA;AAAA;AAK3B,MAAO,eAAQ;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,kBAAkB,CAAC;AAAA,IACnB,IAAI;AAAA;;;ACxDC,mCAAiC,WAAW,OAAO,SAAQ;AAChE,QAAI,gBAAgB,iBAAiB;AACrC,QAAI,iBAAiB,CAAC,OAAM,MAAK,QAAQ,kBAAkB,IAAI,KAAK;AAEpE,QAAI,OAAO,OAAO,YAAW,aAAa,QAAO,OAAO,OAAO,IAAI,OAAO;AAAA,MACxE;AAAA,UACI,SACF,WAAW,KAAK,IAChB,WAAW,KAAK;AAEpB,eAAW,YAAY;AACvB,eAAY,aAAY,KAAK;AAC7B,WAAO,CAAC,OAAM,QAAO,QAAQ,kBAAkB,IAAI;AAAA,MACjD,GAAG;AAAA,MACH,GAAG;AAAA,QACD;AAAA,MACF,GAAG;AAAA,MACH,GAAG;AAAA;AAAA;AAIP,mBAAgB,OAAO;AACrB,QAAI,QAAQ,MAAM,OACd,UAAU,MAAM,SAChB,OAAO,MAAM;AACjB,QAAI,kBAAkB,QAAQ,QAC1B,UAAS,oBAAoB,SAAS,CAAC,GAAG,KAAK;AACnD,QAAI,OAAO,WAAW,OAAO,SAAU,KAAK,WAAW;AACrD,UAAI,aAAa,wBAAwB,WAAW,MAAM,OAAO;AACjE,aAAO;AAAA,OACN;AACH,QAAI,wBAAwB,KAAK,MAAM,YACnC,IAAI,sBAAsB,GAC1B,IAAI,sBAAsB;AAE9B,QAAI,MAAM,cAAc,iBAAiB,MAAM;AAC7C,YAAM,cAAc,cAAc,KAAK;AACvC,YAAM,cAAc,cAAc,KAAK;AAAA;AAGzC,UAAM,cAAc,QAAQ;AAAA;AAI9B,MAAO,iBAAQ;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU,CAAC;AAAA,IACX,IAAI;AAAA;;;AClDN,yBAAuB,MAAM;AAC3B,QAAI,QAAQ,KAAK,OACb,OAAO,KAAK;AAKhB,UAAM,cAAc,QAAQ,eAAe;AAAA,MACzC,WAAW,MAAM,MAAM;AAAA,MACvB,SAAS,MAAM,MAAM;AAAA,MACrB,UAAU;AAAA,MACV,WAAW,MAAM;AAAA;AAAA;AAKrB,MAAO,wBAAQ;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA;;;ACvBO,sBAAoB,MAAM;AACvC,WAAO,SAAS,MAAM,MAAM;AAAA;;;ACW9B,2BAAyB,MAAM;AAC7B,QAAI,QAAQ,KAAK,OACb,UAAU,KAAK,SACf,OAAO,KAAK;AAChB,QAAI,oBAAoB,QAAQ,UAC5B,gBAAgB,sBAAsB,SAAS,OAAO,mBACtD,mBAAmB,QAAQ,SAC3B,eAAe,qBAAqB,SAAS,QAAQ,kBACrD,WAAW,QAAQ,UACnB,eAAe,QAAQ,cACvB,cAAc,QAAQ,aACtB,UAAU,QAAQ,SAClB,kBAAkB,QAAQ,QAC1B,SAAS,oBAAoB,SAAS,OAAO,iBAC7C,wBAAwB,QAAQ,cAChC,eAAe,0BAA0B,SAAS,IAAI;AAC1D,QAAI,WAAW,eAAe,OAAO;AAAA,MACnC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAEF,QAAI,gBAAgB,iBAAiB,MAAM;AAC3C,QAAI,YAAY,aAAa,MAAM;AACnC,QAAI,kBAAkB,CAAC;AACvB,QAAI,WAAW,yBAAyB;AACxC,QAAI,UAAU,WAAW;AACzB,QAAI,iBAAgB,MAAM,cAAc;AACxC,QAAI,gBAAgB,MAAM,MAAM;AAChC,QAAI,aAAa,MAAM,MAAM;AAC7B,QAAI,oBAAoB,OAAO,iBAAiB,aAAa,aAAa,OAAO,OAAO,IAAI,MAAM,OAAO;AAAA,MACvG,WAAW,MAAM;AAAA,UACb;AACN,QAAI,8BAA8B,OAAO,sBAAsB,WAAW;AAAA,MACxE,UAAU;AAAA,MACV,SAAS;AAAA,QACP,OAAO,OAAO;AAAA,MAChB,UAAU;AAAA,MACV,SAAS;AAAA,OACR;AACH,QAAI,sBAAsB,MAAM,cAAc,SAAS,MAAM,cAAc,OAAO,MAAM,aAAa;AACrG,QAAI,OAAO;AAAA,MACT,GAAG;AAAA,MACH,GAAG;AAAA;AAGL,QAAI,CAAC,gBAAe;AAClB;AAAA;AAGF,QAAI,eAAe;AACjB,UAAI;AAEJ,UAAI,WAAW,aAAa,MAAM,OAAM;AACxC,UAAI,UAAU,aAAa,MAAM,UAAS;AAC1C,UAAI,MAAM,aAAa,MAAM,WAAW;AACxC,UAAI,UAAS,eAAc;AAC3B,UAAI,OAAM,UAAS,SAAS;AAC5B,UAAI,OAAM,UAAS,SAAS;AAC5B,UAAI,WAAW,SAAS,CAAC,WAAW,OAAO,IAAI;AAC/C,UAAI,SAAS,cAAc,SAAQ,cAAc,OAAO,WAAW;AACnE,UAAI,SAAS,cAAc,SAAQ,CAAC,WAAW,OAAO,CAAC,cAAc;AAGrE,UAAI,eAAe,MAAM,SAAS;AAClC,UAAI,YAAY,UAAU,eAAe,cAAc,gBAAgB;AAAA,QACrE,OAAO;AAAA,QACP,QAAQ;AAAA;AAEV,UAAI,qBAAqB,MAAM,cAAc,sBAAsB,MAAM,cAAc,oBAAoB,UAAU;AACrH,UAAI,kBAAkB,mBAAmB;AACzC,UAAI,kBAAkB,mBAAmB;AAMzC,UAAI,WAAW,OAAO,GAAG,cAAc,MAAM,UAAU;AACvD,UAAI,YAAY,kBAAkB,cAAc,OAAO,IAAI,WAAW,WAAW,kBAAkB,4BAA4B,WAAW,SAAS,WAAW,kBAAkB,4BAA4B;AAC5M,UAAI,YAAY,kBAAkB,CAAC,cAAc,OAAO,IAAI,WAAW,WAAW,kBAAkB,4BAA4B,WAAW,SAAS,WAAW,kBAAkB,4BAA4B;AAC7M,UAAI,oBAAoB,MAAM,SAAS,SAAS,gBAAgB,MAAM,SAAS;AAC/E,UAAI,eAAe,oBAAoB,aAAa,MAAM,kBAAkB,aAAa,IAAI,kBAAkB,cAAc,IAAI;AACjI,UAAI,sBAAuB,yBAAwB,uBAAuB,OAAO,SAAS,oBAAoB,cAAc,OAAO,wBAAwB;AAC3J,UAAI,YAAY,UAAS,YAAY,sBAAsB;AAC3D,UAAI,YAAY,UAAS,YAAY;AACrC,UAAI,kBAAkB,OAAO,SAAS,KAAQ,MAAK,aAAa,MAAK,SAAQ,SAAS,KAAQ,MAAK,aAAa;AAChH,qBAAc,YAAY;AAC1B,WAAK,YAAY,kBAAkB;AAAA;AAGrC,QAAI,cAAc;AAChB,UAAI;AAEJ,UAAI,YAAY,aAAa,MAAM,OAAM;AAEzC,UAAI,WAAW,aAAa,MAAM,UAAS;AAE3C,UAAI,UAAU,eAAc;AAE5B,UAAI,OAAO,YAAY,MAAM,WAAW;AAExC,UAAI,OAAO,UAAU,SAAS;AAE9B,UAAI,OAAO,UAAU,SAAS;AAE9B,UAAI,eAAe,CAAC,MAAK,OAAM,QAAQ,mBAAmB;AAE1D,UAAI,uBAAwB,0BAAyB,uBAAuB,OAAO,SAAS,oBAAoB,aAAa,OAAO,yBAAyB;AAE7J,UAAI,aAAa,eAAe,OAAO,UAAU,cAAc,QAAQ,WAAW,QAAQ,uBAAuB,4BAA4B;AAE7I,UAAI,aAAa,eAAe,UAAU,cAAc,QAAQ,WAAW,QAAQ,uBAAuB,4BAA4B,UAAU;AAEhJ,UAAI,mBAAmB,UAAU,eAAe,eAAe,YAAY,SAAS,cAAc,OAAO,SAAS,aAAa,MAAM,SAAS,SAAS,aAAa;AAEpK,qBAAc,WAAW;AACzB,WAAK,WAAW,mBAAmB;AAAA;AAGrC,UAAM,cAAc,QAAQ;AAAA;AAI9B,MAAO,0BAAQ;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,kBAAkB,CAAC;AAAA;;;AC5IN,gCAA8B,SAAS;AACpD,WAAO;AAAA,MACL,YAAY,QAAQ;AAAA,MACpB,WAAW,QAAQ;AAAA;AAAA;;;ACCR,yBAAuB,MAAM;AAC1C,QAAI,SAAS,UAAU,SAAS,CAAC,cAAc,OAAO;AACpD,aAAO,gBAAgB;AAAA,WAClB;AACL,aAAO,qBAAqB;AAAA;AAAA;;;ACChC,2BAAyB,SAAS;AAChC,QAAI,OAAO,QAAQ;AACnB,QAAI,SAAS,MAAM,KAAK,SAAS,QAAQ,eAAe;AACxD,QAAI,SAAS,MAAM,KAAK,UAAU,QAAQ,gBAAgB;AAC1D,WAAO,WAAW,KAAK,WAAW;AAAA;AAKrB,4BAA0B,yBAAyB,cAAc,SAAS;AACvF,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA;AAGZ,QAAI,0BAA0B,cAAc;AAC5C,QAAI,uBAAuB,cAAc,iBAAiB,gBAAgB;AAC1E,QAAI,kBAAkB,mBAAmB;AACzC,QAAI,OAAO,sBAAsB,yBAAyB;AAC1D,QAAI,SAAS;AAAA,MACX,YAAY;AAAA,MACZ,WAAW;AAAA;AAEb,QAAI,UAAU;AAAA,MACZ,GAAG;AAAA,MACH,GAAG;AAAA;AAGL,QAAI,2BAA2B,CAAC,2BAA2B,CAAC,SAAS;AACnE,UAAI,YAAY,kBAAkB,UAClC,eAAe,kBAAkB;AAC/B,iBAAS,cAAc;AAAA;AAGzB,UAAI,cAAc,eAAe;AAC/B,kBAAU,sBAAsB,cAAc;AAC9C,gBAAQ,KAAK,aAAa;AAC1B,gBAAQ,KAAK,aAAa;AAAA,iBACjB,iBAAiB;AAC1B,gBAAQ,IAAI,oBAAoB;AAAA;AAAA;AAIpC,WAAO;AAAA,MACL,GAAG,KAAK,OAAO,OAAO,aAAa,QAAQ;AAAA,MAC3C,GAAG,KAAK,MAAM,OAAO,YAAY,QAAQ;AAAA,MACzC,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA;AAAA;;;ACrDjB,iBAAe,WAAW;AACxB,QAAI,OAAM,oBAAI;AACd,QAAI,UAAU,oBAAI;AAClB,QAAI,SAAS;AACb,cAAU,QAAQ,SAAU,UAAU;AACpC,WAAI,IAAI,SAAS,MAAM;AAAA;AAGzB,mBAAc,UAAU;AACtB,cAAQ,IAAI,SAAS;AACrB,UAAI,WAAW,GAAG,OAAO,SAAS,YAAY,IAAI,SAAS,oBAAoB;AAC/E,eAAS,QAAQ,SAAU,KAAK;AAC9B,YAAI,CAAC,QAAQ,IAAI,MAAM;AACrB,cAAI,cAAc,KAAI,IAAI;AAE1B,cAAI,aAAa;AACf,kBAAK;AAAA;AAAA;AAAA;AAIX,aAAO,KAAK;AAAA;AAGd,cAAU,QAAQ,SAAU,UAAU;AACpC,UAAI,CAAC,QAAQ,IAAI,SAAS,OAAO;AAE/B,cAAK;AAAA;AAAA;AAGT,WAAO;AAAA;AAGM,0BAAwB,WAAW;AAEhD,QAAI,mBAAmB,MAAM;AAE7B,WAAO,eAAe,OAAO,SAAU,KAAK,OAAO;AACjD,aAAO,IAAI,OAAO,iBAAiB,OAAO,SAAU,UAAU;AAC5D,eAAO,SAAS,UAAU;AAAA;AAAA,OAE3B;AAAA;;;AC1CU,qBAAkB,KAAI;AACnC,QAAI;AACJ,WAAO,WAAY;AACjB,UAAI,CAAC,SAAS;AACZ,kBAAU,IAAI,QAAQ,SAAU,SAAS;AACvC,kBAAQ,UAAU,KAAK,WAAY;AACjC,sBAAU;AACV,oBAAQ;AAAA;AAAA;AAAA;AAKd,aAAO;AAAA;AAAA;;;ACZI,kBAAgB,KAAK;AAClC,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,IAAI,OAAO,GAAG,OAAO,MAAM,QAAQ;AAC1G,WAAK,OAAO,KAAK,UAAU;AAAA;AAG7B,WAAO,GAAG,OAAO,MAAM,OAAO,SAAU,GAAG,GAAG;AAC5C,aAAO,EAAE,QAAQ,MAAM;AAAA,OACtB;AAAA;;;ACLL,MAAI,yBAAyB;AAC7B,MAAI,2BAA2B;AAC/B,MAAI,mBAAmB,CAAC,QAAQ,WAAW,SAAS,MAAM,UAAU,YAAY;AACjE,6BAA2B,WAAW;AACnD,cAAU,QAAQ,SAAU,UAAU;AACpC,SAAG,OAAO,OAAO,KAAK,WAAW,kBAChC,OAAO,SAAU,OAAO,QAAO,OAAM;AACpC,eAAO,MAAK,QAAQ,WAAW;AAAA,SAC9B,QAAQ,SAAU,KAAK;AACxB,gBAAQ;AAAA,eACD;AACH,gBAAI,OAAO,SAAS,SAAS,UAAU;AACrC,sBAAQ,MAAM,OAAO,wBAAwB,OAAO,SAAS,OAAO,UAAU,YAAY,MAAO,OAAO,SAAS,QAAQ;AAAA;AAG3H;AAAA,eAEG;AACH,gBAAI,OAAO,SAAS,YAAY,WAAW;AACzC,sBAAQ,MAAM,OAAO,wBAAwB,SAAS,MAAM,aAAa,aAAa,MAAO,OAAO,SAAS,WAAW;AAAA;AAG1H;AAAA,eAEG;AACH,gBAAI,eAAe,QAAQ,SAAS,SAAS,GAAG;AAC9C,sBAAQ,MAAM,OAAO,wBAAwB,SAAS,MAAM,WAAW,YAAY,eAAe,KAAK,OAAO,MAAO,OAAO,SAAS,SAAS;AAAA;AAGhJ;AAAA,eAEG;AACH,gBAAI,OAAO,SAAS,OAAO,YAAY;AACrC,sBAAQ,MAAM,OAAO,wBAAwB,SAAS,MAAM,QAAQ,cAAc,MAAO,OAAO,SAAS,MAAM;AAAA;AAGjH;AAAA,eAEG;AACH,gBAAI,SAAS,UAAU,QAAQ,OAAO,SAAS,WAAW,YAAY;AACpE,sBAAQ,MAAM,OAAO,wBAAwB,SAAS,MAAM,YAAY,cAAc,MAAO,OAAO,SAAS,MAAM;AAAA;AAGrH;AAAA,eAEG;AACH,gBAAI,SAAS,YAAY,QAAQ,CAAC,MAAM,QAAQ,SAAS,WAAW;AAClE,sBAAQ,MAAM,OAAO,wBAAwB,SAAS,MAAM,cAAc,WAAW,MAAO,OAAO,SAAS,YAAY;AAAA;AAG1H;AAAA,eAEG;AACH,gBAAI,CAAC,MAAM,QAAQ,SAAS,mBAAmB;AAC7C,sBAAQ,MAAM,OAAO,wBAAwB,SAAS,MAAM,sBAAsB,WAAW,MAAO,OAAO,SAAS,oBAAoB;AAAA;AAG1I;AAAA,eAEG;AAAA,eACA;AACH;AAAA;AAGA,oBAAQ,MAAM,6DAA8D,SAAS,OAAO,sCAAuC,iBAAiB,IAAI,SAAU,GAAG;AACnK,qBAAO,MAAO,IAAI;AAAA,eACjB,KAAK,QAAQ,YAAa,MAAM;AAAA;AAGvC,iBAAS,YAAY,SAAS,SAAS,QAAQ,SAAU,aAAa;AACpE,cAAI,UAAU,KAAK,SAAU,KAAK;AAChC,mBAAO,IAAI,SAAS;AAAA,gBAChB,MAAM;AACV,oBAAQ,MAAM,OAAO,0BAA0B,OAAO,SAAS,OAAO,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC3E9E,oBAAkB,KAAK,KAAI;AACxC,QAAI,cAAc,oBAAI;AACtB,WAAO,IAAI,OAAO,SAAU,MAAM;AAChC,UAAI,aAAa,IAAG;AAEpB,UAAI,CAAC,YAAY,IAAI,aAAa;AAChC,oBAAY,IAAI;AAChB,eAAO;AAAA;AAAA;AAAA;;;ACPE,uBAAqB,WAAW;AAC7C,QAAI,SAAS,UAAU,OAAO,SAAU,SAAQ,SAAS;AACvD,UAAI,WAAW,QAAO,QAAQ;AAC9B,cAAO,QAAQ,QAAQ,WAAW,OAAO,OAAO,IAAI,UAAU,SAAS;AAAA,QACrE,SAAS,OAAO,OAAO,IAAI,SAAS,SAAS,QAAQ;AAAA,QACrD,MAAM,OAAO,OAAO,IAAI,SAAS,MAAM,QAAQ;AAAA,WAC5C;AACL,aAAO;AAAA,OACN;AAEH,WAAO,OAAO,KAAK,QAAQ,IAAI,SAAU,KAAK;AAC5C,aAAO,OAAO;AAAA;AAAA;;;ACGlB,MAAI,wBAAwB;AAC5B,MAAI,sBAAsB;AAC1B,MAAI,kBAAkB;AAAA,IACpB,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA;AAGZ,8BAA4B;AAC1B,aAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,OAAO,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,WAAK,QAAQ,UAAU;AAAA;AAGzB,WAAO,CAAC,KAAK,KAAK,SAAU,SAAS;AACnC,aAAO,CAAE,YAAW,OAAO,QAAQ,0BAA0B;AAAA;AAAA;AAI1D,2BAAyB,kBAAkB;AAChD,QAAI,qBAAqB,QAAQ;AAC/B,yBAAmB;AAAA;AAGrB,QAAI,oBAAoB,kBACpB,wBAAwB,kBAAkB,kBAC1C,oBAAmB,0BAA0B,SAAS,KAAK,uBAC3D,yBAAyB,kBAAkB,gBAC3C,kBAAiB,2BAA2B,SAAS,kBAAkB;AAC3E,WAAO,uBAAsB,YAAW,SAAQ,SAAS;AACvD,UAAI,YAAY,QAAQ;AACtB,kBAAU;AAAA;AAGZ,UAAI,QAAQ;AAAA,QACV,WAAW;AAAA,QACX,kBAAkB;AAAA,QAClB,SAAS,OAAO,OAAO,IAAI,iBAAiB;AAAA,QAC5C,eAAe;AAAA,QACf,UAAU;AAAA,UACR,WAAW;AAAA,UACX,QAAQ;AAAA;AAAA,QAEV,YAAY;AAAA,QACZ,QAAQ;AAAA;AAEV,UAAI,mBAAmB;AACvB,UAAI,cAAc;AAClB,UAAI,WAAW;AAAA,QACb;AAAA,QACA,YAAY,oBAAoB,kBAAkB;AAChD,cAAI,WAAU,OAAO,qBAAqB,aAAa,iBAAiB,MAAM,WAAW;AACzF;AACA,gBAAM,UAAU,OAAO,OAAO,IAAI,iBAAgB,MAAM,SAAS;AACjE,gBAAM,gBAAgB;AAAA,YACpB,WAAW,UAAU,cAAa,kBAAkB,cAAa,WAAU,iBAAiB,kBAAkB,WAAU,kBAAkB;AAAA,YAC1I,QAAQ,kBAAkB;AAAA;AAI5B,cAAI,mBAAmB,eAAe,YAAY,GAAG,OAAO,mBAAkB,MAAM,QAAQ;AAE5F,gBAAM,mBAAmB,iBAAiB,OAAO,SAAU,GAAG;AAC5D,mBAAO,EAAE;AAAA;AAIX,cAAI,MAAuC;AACzC,gBAAI,YAAY,SAAS,GAAG,OAAO,kBAAkB,MAAM,QAAQ,YAAY,SAAU,MAAM;AAC7F,kBAAI,OAAO,KAAK;AAChB,qBAAO;AAAA;AAET,8BAAkB;AAElB,gBAAI,iBAAiB,MAAM,QAAQ,eAAe,MAAM;AACtD,kBAAI,eAAe,MAAM,iBAAiB,KAAK,SAAU,OAAO;AAC9D,oBAAI,OAAO,MAAM;AACjB,uBAAO,SAAS;AAAA;AAGlB,kBAAI,CAAC,cAAc;AACjB,wBAAQ,MAAM,CAAC,4DAA4D,gCAAgC,KAAK;AAAA;AAAA;AAIpH,gBAAI,oBAAoB,kBAAiB,UACrC,YAAY,kBAAkB,WAC9B,cAAc,kBAAkB,aAChC,eAAe,kBAAkB,cACjC,aAAa,kBAAkB;AAInC,gBAAI,CAAC,WAAW,aAAa,cAAc,YAAY,KAAK,SAAU,QAAQ;AAC5E,qBAAO,WAAW;AAAA,gBAChB;AACF,sBAAQ,KAAK,CAAC,+DAA+D,6DAA6D,8DAA8D,4DAA4D,cAAc,KAAK;AAAA;AAAA;AAI3R;AACA,iBAAO,SAAS;AAAA;AAAA,QAOlB,aAAa,uBAAuB;AAClC,cAAI,aAAa;AACf;AAAA;AAGF,cAAI,kBAAkB,MAAM,UACxB,aAAY,gBAAgB,WAC5B,UAAS,gBAAgB;AAG7B,cAAI,CAAC,iBAAiB,YAAW,UAAS;AACxC,gBAAI,MAAuC;AACzC,sBAAQ,MAAM;AAAA;AAGhB;AAAA;AAIF,gBAAM,QAAQ;AAAA,YACZ,WAAW,iBAAiB,YAAW,gBAAgB,UAAS,MAAM,QAAQ,aAAa;AAAA,YAC3F,QAAQ,cAAc;AAAA;AAOxB,gBAAM,QAAQ;AACd,gBAAM,YAAY,MAAM,QAAQ;AAKhC,gBAAM,iBAAiB,QAAQ,SAAU,UAAU;AACjD,mBAAO,MAAM,cAAc,SAAS,QAAQ,OAAO,OAAO,IAAI,SAAS;AAAA;AAEzE,cAAI,kBAAkB;AAEtB,mBAAS,SAAQ,GAAG,SAAQ,MAAM,iBAAiB,QAAQ,UAAS;AAClE,gBAAI,MAAuC;AACzC,iCAAmB;AAEnB,kBAAI,kBAAkB,KAAK;AACzB,wBAAQ,MAAM;AACd;AAAA;AAAA;AAIJ,gBAAI,MAAM,UAAU,MAAM;AACxB,oBAAM,QAAQ;AACd,uBAAQ;AACR;AAAA;AAGF,gBAAI,wBAAwB,MAAM,iBAAiB,SAC/C,MAAK,sBAAsB,IAC3B,yBAAyB,sBAAsB,SAC/C,WAAW,2BAA2B,SAAS,KAAK,wBACpD,OAAO,sBAAsB;AAEjC,gBAAI,OAAO,QAAO,YAAY;AAC5B,sBAAQ,IAAG;AAAA,gBACT;AAAA,gBACA,SAAS;AAAA,gBACT;AAAA,gBACA;AAAA,oBACI;AAAA;AAAA;AAAA;AAAA,QAMZ,QAAQ,UAAS,WAAY;AAC3B,iBAAO,IAAI,QAAQ,SAAU,SAAS;AACpC,qBAAS;AACT,oBAAQ;AAAA;AAAA;AAAA,QAGZ,SAAS,mBAAmB;AAC1B;AACA,wBAAc;AAAA;AAAA;AAIlB,UAAI,CAAC,iBAAiB,YAAW,UAAS;AACxC,YAAI,MAAuC;AACzC,kBAAQ,MAAM;AAAA;AAGhB,eAAO;AAAA;AAGT,eAAS,WAAW,SAAS,KAAK,SAAU,QAAO;AACjD,YAAI,CAAC,eAAe,QAAQ,eAAe;AACzC,kBAAQ,cAAc;AAAA;AAAA;AAQ1B,oCAA8B;AAC5B,cAAM,iBAAiB,QAAQ,SAAU,OAAO;AAC9C,cAAI,OAAO,MAAM,MACb,gBAAgB,MAAM,SACtB,WAAU,kBAAkB,SAAS,KAAK,eAC1C,UAAS,MAAM;AAEnB,cAAI,OAAO,YAAW,YAAY;AAChC,gBAAI,YAAY,QAAO;AAAA,cACrB;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS;AAAA;AAGX,gBAAI,SAAS,mBAAkB;AAAA;AAE/B,6BAAiB,KAAK,aAAa;AAAA;AAAA;AAAA;AAKzC,wCAAkC;AAChC,yBAAiB,QAAQ,SAAU,KAAI;AACrC,iBAAO;AAAA;AAET,2BAAmB;AAAA;AAGrB,aAAO;AAAA;AAAA;AAGJ,MAAI,eAA4B;;;AC3PvC,MAAI,mBAAmB,CAAC,wBAAgB,uBAAe,uBAAe;AACtE,MAAI,gBAA4B,gCAAgB;AAAA,IAC9C;AAAA;;;ACGF,MAAI,oBAAmB,CAAC,wBAAgB,uBAAe,uBAAe,qBAAa,gBAAQ,cAAM,yBAAiB,eAAO;AACzH,MAAI,gBAA4B,gCAAgB;AAAA,IAC9C,kBAAkB;AAAA;;;ACLpB,MAAM,UAAU;AAChB,MAAM,0BAA0B;AAChC,MAAM,iBAAiB;AAGvB,MAAM,SAAS,SAAO;AACpB,QAAI,QAAQ,QAAQ,QAAQ,QAAW;AACrC,aAAQ,GAAE;;AAGZ,WAAO,GAAG,SAAS,KAAK,KAAK,MAAM,eAAe,GAAG;;AASvD,MAAM,SAAS,YAAU;AACvB,OAAG;AACD,gBAAU,KAAK,MAAM,KAAK,WAAW;aAC9B,SAAS,eAAe;AAEjC,WAAO;;AAGT,MAAM,cAAc,aAAW;AAC7B,QAAI,WAAW,QAAQ,aAAa;AAEpC,QAAI,CAAC,YAAY,aAAa,KAAK;AACjC,UAAI,WAAW,QAAQ,aAAa;AAMpC,UAAI,CAAC,YAAa,CAAC,SAAS,SAAS,QAAQ,CAAC,SAAS,WAAW,MAAO;AACvE,eAAO;;AAIT,UAAI,SAAS,SAAS,QAAQ,CAAC,SAAS,WAAW,MAAM;AACvD,mBAAY,IAAG,SAAS,MAAM,KAAK;;AAGrC,iBAAW,YAAY,aAAa,MAAM,SAAS,SAAS;;AAG9D,WAAO;;AAGT,MAAM,yBAAyB,aAAW;AACxC,UAAM,WAAW,YAAY;AAE7B,QAAI,UAAU;AACZ,aAAO,SAAS,cAAc,YAAY,WAAW;;AAGvD,WAAO;;AAGT,MAAM,yBAAyB,aAAW;AACxC,UAAM,WAAW,YAAY;AAE7B,WAAO,WAAW,SAAS,cAAc,YAAY;;AAGvD,MAAM,mCAAmC,aAAW;AAClD,QAAI,CAAC,SAAS;AACZ,aAAO;;AAIT,QAAI;MAAE;MAAoB;QAAoB,OAAO,iBAAiB;AAEtE,UAAM,0BAA0B,OAAO,WAAW;AAClD,UAAM,uBAAuB,OAAO,WAAW;AAG/C,QAAI,CAAC,2BAA2B,CAAC,sBAAsB;AACrD,aAAO;;AAIT,yBAAqB,mBAAmB,MAAM,KAAK;AACnD,sBAAkB,gBAAgB,MAAM,KAAK;AAE7C,WAAQ,QAAO,WAAW,sBAAsB,OAAO,WAAW,oBAAoB;;AAGxF,MAAM,uBAAuB,aAAW;AACtC,YAAQ,cAAc,IAAI,MAAM;;AAGlC,MAAM,aAAY,SAAO;AACvB,QAAI,CAAC,OAAO,OAAO,QAAQ,UAAU;AACnC,aAAO;;AAGT,QAAI,OAAO,IAAI,WAAW,aAAa;AACrC,YAAM,IAAI;;AAGZ,WAAO,OAAO,IAAI,aAAa;;AAGjC,MAAM,aAAa,SAAO;AACxB,QAAI,WAAU,MAAM;AAClB,aAAO,IAAI,SAAS,IAAI,KAAK;;AAG/B,QAAI,OAAO,QAAQ,YAAY,IAAI,SAAS,GAAG;AAC7C,aAAO,SAAS,cAAc;;AAGhC,WAAO;;AAGT,MAAM,kBAAkB,CAAC,eAAe,QAAQ,gBAAgB;AAC9D,WAAO,KAAK,aAAa,QAAQ,cAAY;AAC3C,YAAM,gBAAgB,YAAY;AAClC,YAAM,QAAQ,OAAO;AACrB,YAAM,YAAY,SAAS,WAAU,SAAS,YAAY,OAAO;AAEjE,UAAI,CAAC,IAAI,OAAO,eAAe,KAAK,YAAY;AAC9C,cAAM,IAAI,UACP,GAAE,cAAc,0BAA0B,4BAA4B,iCAAiC;;;;AAMhH,MAAM,aAAY,aAAW;AAC3B,QAAI,CAAC,WAAU,YAAY,QAAQ,iBAAiB,WAAW,GAAG;AAChE,aAAO;;AAGT,WAAO,iBAAiB,SAAS,iBAAiB,kBAAkB;;AAGtE,MAAM,cAAa,aAAW;AAC5B,QAAI,CAAC,WAAW,QAAQ,aAAa,KAAK,cAAc;AACtD,aAAO;;AAGT,QAAI,QAAQ,UAAU,SAAS,aAAa;AAC1C,aAAO;;AAGT,QAAI,OAAO,QAAQ,aAAa,aAAa;AAC3C,aAAO,QAAQ;;AAGjB,WAAO,QAAQ,aAAa,eAAe,QAAQ,aAAa,gBAAgB;;AAGlF,MAAM,iBAAiB,aAAW;AAChC,QAAI,CAAC,SAAS,gBAAgB,cAAc;AAC1C,aAAO;;AAIT,QAAI,OAAO,QAAQ,gBAAgB,YAAY;AAC7C,YAAM,OAAO,QAAQ;AACrB,aAAO,gBAAgB,aAAa,OAAO;;AAG7C,QAAI,mBAAmB,YAAY;AACjC,aAAO;;AAIT,QAAI,CAAC,QAAQ,YAAY;AACvB,aAAO;;AAGT,WAAO,eAAe,QAAQ;;AAGhC,MAAM,OAAO,MAAM;;AAUnB,MAAM,SAAS,aAAW;AAExB,YAAQ;;AAGV,MAAM,YAAY,MAAM;AACtB,UAAM;MAAE;QAAW;AAEnB,QAAI,UAAU,CAAC,SAAS,KAAK,aAAa,sBAAsB;AAC9D,aAAO;;AAGT,WAAO;;AAGT,MAAM,4BAA4B;AAElC,MAAM,qBAAqB,cAAY;AACrC,QAAI,SAAS,eAAe,WAAW;AAErC,UAAI,CAAC,0BAA0B,QAAQ;AACrC,iBAAS,iBAAiB,oBAAoB,MAAM;AAClD,oCAA0B,QAAQ,eAAY;;;AAIlD,gCAA0B,KAAK;WAC1B;AACL;;;AAIJ,MAAM,QAAQ,MAAM,SAAS,gBAAgB,QAAQ;AAErD,MAAM,qBAAqB,YAAU;AACnC,uBAAmB,MAAM;AACvB,YAAM,MAAI;AAEV,UAAI,KAAG;AACL,cAAM,OAAO,OAAO;AACpB,cAAM,qBAAqB,IAAE,GAAG;AAChC,YAAE,GAAG,QAAQ,OAAO;AACpB,YAAE,GAAG,MAAM,cAAc;AACzB,YAAE,GAAG,MAAM,aAAa,MAAM;AAC5B,cAAE,GAAG,QAAQ;AACb,iBAAO,OAAO;;;;;AAMtB,MAAM,UAAU,cAAY;AAC1B,QAAI,OAAO,aAAa,YAAY;AAClC;;;AAIJ,MAAM,yBAAyB,CAAC,UAAU,mBAAmB,oBAAoB,SAAS;AACxF,QAAI,CAAC,mBAAmB;AACtB,cAAQ;AACR;;AAGF,UAAM,kBAAkB;AACxB,UAAM,mBAAmB,iCAAiC,qBAAqB;AAE/E,QAAI,SAAS;AAEb,UAAM,UAAU,CAAC;MAAE;UAAa;AAC9B,UAAI,WAAW,mBAAmB;AAChC;;AAGF,eAAS;AACT,wBAAkB,oBAAoB,gBAAgB;AACtD,cAAQ;;AAGV,sBAAkB,iBAAiB,gBAAgB;AACnD,eAAW,MAAM;AACf,UAAI,CAAC,QAAQ;AACX,6BAAqB;;OAEtB;;AAYL,MAAM,uBAAuB,CAAC,MAAM,eAAe,eAAe,mBAAmB;AACnF,QAAI,SAAQ,KAAK,QAAQ;AAGzB,QAAI,WAAU,IAAI;AAChB,aAAO,KAAK,CAAC,iBAAiB,iBAAiB,KAAK,SAAS,IAAI;;AAGnE,UAAM,aAAa,KAAK;AAExB,cAAS,gBAAgB,IAAI;AAE7B,QAAI,gBAAgB;AAClB,eAAS,UAAQ,cAAc;;AAGjC,WAAO,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,QAAO,aAAa;;ACrSvD,MAAM,iBAAiB;AACvB,MAAM,iBAAiB;AACvB,MAAM,gBAAgB;AACtB,MAAM,gBAAgB;AACtB,MAAI,WAAW;AACf,MAAM,eAAe;IACnB,YAAY;IACZ,YAAY;;AAEd,MAAM,oBAAoB;AAC1B,MAAM,eAAe,oBAAI,IAAI,CAC3B,SACA,YACA,WACA,aACA,eACA,cACA,kBACA,aACA,YACA,aACA,eACA,aACA,WACA,YACA,SACA,qBACA,cACA,aACA,YACA,eACA,eACA,eACA,aACA,gBACA,iBACA,gBACA,iBACA,cACA,SACA,QACA,UACA,SACA,UACA,UACA,WACA,YACA,QACA,UACA,gBACA,UACA,QACA,oBACA,oBACA,SACA,SACA;AASF,uBAAqB,SAAS,MAAK;AACjC,WAAQ,QAAQ,GAAE,SAAQ,gBAAiB,QAAQ,YAAY;;AAGjE,oBAAkB,SAAS;AACzB,UAAM,OAAM,YAAY;AAExB,YAAQ,WAAW;AACnB,kBAAc,QAAO,cAAc,SAAQ;AAE3C,WAAO,cAAc;;AAGvB,4BAA0B,SAAS,KAAI;AACrC,WAAO,iBAAiB,QAAO;AAC7B,aAAM,iBAAiB;AAEvB,UAAI,QAAQ,QAAQ;AAClB,qBAAa,IAAI,SAAS,OAAM,MAAM;;AAGxC,aAAO,IAAG,MAAM,SAAS,CAAC;;;AAI9B,sCAAoC,SAAS,UAAU,KAAI;AACzD,WAAO,iBAAiB,QAAO;AAC7B,YAAM,cAAc,QAAQ,iBAAiB;AAE7C,eAAS;QAAE;UAAW,QAAO,UAAU,WAAW,MAAM,SAAS,OAAO,YAAY;AAClF,iBAAS,IAAI,YAAY,QAAQ,OAAM;AACrC,cAAI,YAAY,OAAO,QAAQ;AAC7B,mBAAM,iBAAiB;AAEvB,gBAAI,QAAQ,QAAQ;AAClB,2BAAa,IAAI,SAAS,OAAM,MAAM,UAAU;;AAGlD,mBAAO,IAAG,MAAM,QAAQ,CAAC;;;;AAM/B,aAAO;;;AAIX,uBAAqB,QAAQ,SAAS,qBAAqB,MAAM;AAC/D,UAAM,eAAe,OAAO,KAAK;AAEjC,aAAS,IAAI,GAAG,MAAM,aAAa,QAAQ,IAAI,KAAK,KAAK;AACvD,YAAM,SAAQ,OAAO,aAAa;AAElC,UAAI,OAAM,oBAAoB,WAAW,OAAM,uBAAuB,oBAAoB;AACxF,eAAO;;;AAIX,WAAO;;AAGT,2BAAyB,mBAAmB,SAAS,cAAc;AACjE,UAAM,aAAa,OAAO,YAAY;AACtC,UAAM,kBAAkB,aAAa,eAAe;AAEpD,QAAI,YAAY,aAAa;AAC7B,UAAM,WAAW,aAAa,IAAI;AAElC,QAAI,CAAC,UAAU;AACb,kBAAY;;AAGd,WAAO,CAAC,YAAY,iBAAiB;;AAGvC,sBAAoB,SAAS,mBAAmB,SAAS,cAAc,QAAQ;AAC7E,QAAI,OAAO,sBAAsB,YAAY,CAAC,SAAS;AACrD;;AAGF,QAAI,CAAC,SAAS;AACZ,gBAAU;AACV,qBAAe;;AAKjB,QAAI,kBAAkB,KAAK,oBAAoB;AAC7C,YAAM,SAAS,SAAM;AACnB,eAAO,SAAU,QAAO;AACtB,cAAI,CAAC,OAAM,iBAAkB,OAAM,kBAAkB,OAAM,kBAAkB,CAAC,OAAM,eAAe,SAAS,OAAM,gBAAiB;AACjI,mBAAO,IAAG,KAAK,MAAM;;;;AAK3B,UAAI,cAAc;AAChB,uBAAe,OAAO;aACjB;AACL,kBAAU,OAAO;;;AAIrB,UAAM,CAAC,YAAY,iBAAiB,aAAa,gBAAgB,mBAAmB,SAAS;AAC7F,UAAM,SAAS,SAAS;AACxB,UAAM,YAAW,OAAO,cAAe,QAAO,aAAa;AAC3D,UAAM,aAAa,YAAY,WAAU,iBAAiB,aAAa,UAAU;AAEjF,QAAI,YAAY;AACd,iBAAW,SAAS,WAAW,UAAU;AAEzC;;AAGF,UAAM,OAAM,YAAY,iBAAiB,kBAAkB,QAAQ,gBAAgB;AACnF,UAAM,MAAK,aACT,2BAA2B,SAAS,SAAS,gBAC7C,iBAAiB,SAAS;AAE5B,QAAG,qBAAqB,aAAa,UAAU;AAC/C,QAAG,kBAAkB;AACrB,QAAG,SAAS;AACZ,QAAG,WAAW;AACd,cAAS,QAAO;AAEhB,YAAQ,iBAAiB,WAAW,KAAI;;AAG1C,yBAAuB,SAAS,QAAQ,WAAW,SAAS,oBAAoB;AAC9E,UAAM,MAAK,YAAY,OAAO,YAAY,SAAS;AAEnD,QAAI,CAAC,KAAI;AACP;;AAGF,YAAQ,oBAAoB,WAAW,KAAI,QAAQ;AACnD,WAAO,OAAO,WAAW,IAAG;;AAG9B,oCAAkC,SAAS,QAAQ,WAAW,WAAW;AACvE,UAAM,oBAAoB,OAAO,cAAc;AAE/C,WAAO,KAAK,mBAAmB,QAAQ,gBAAc;AACnD,UAAI,WAAW,SAAS,YAAY;AAClC,cAAM,SAAQ,kBAAkB;AAEhC,sBAAc,SAAS,QAAQ,WAAW,OAAM,iBAAiB,OAAM;;;;AAK7E,wBAAsB,QAAO;AAE3B,aAAQ,OAAM,QAAQ,gBAAgB;AACtC,WAAO,aAAa,WAAU;;AAGhC,MAAM,eAAe;IACnB,GAAG,SAAS,QAAO,SAAS,cAAc;AACxC,iBAAW,SAAS,QAAO,SAAS,cAAc;;IAGpD,IAAI,SAAS,QAAO,SAAS,cAAc;AACzC,iBAAW,SAAS,QAAO,SAAS,cAAc;;IAGpD,IAAI,SAAS,mBAAmB,SAAS,cAAc;AACrD,UAAI,OAAO,sBAAsB,YAAY,CAAC,SAAS;AACrD;;AAGF,YAAM,CAAC,YAAY,iBAAiB,aAAa,gBAAgB,mBAAmB,SAAS;AAC7F,YAAM,cAAc,cAAc;AAClC,YAAM,SAAS,SAAS;AACxB,YAAM,cAAc,kBAAkB,WAAW;AAEjD,UAAI,OAAO,oBAAoB,aAAa;AAE1C,YAAI,CAAC,UAAU,CAAC,OAAO,YAAY;AACjC;;AAGF,sBAAc,SAAS,QAAQ,WAAW,iBAAiB,aAAa,UAAU;AAClF;;AAGF,UAAI,aAAa;AACf,eAAO,KAAK,QAAQ,QAAQ,kBAAgB;AAC1C,mCAAyB,SAAS,QAAQ,cAAc,kBAAkB,MAAM;;;AAIpF,YAAM,oBAAoB,OAAO,cAAc;AAC/C,aAAO,KAAK,mBAAmB,QAAQ,iBAAe;AACpD,cAAM,aAAa,YAAY,QAAQ,eAAe;AAEtD,YAAI,CAAC,eAAe,kBAAkB,SAAS,aAAa;AAC1D,gBAAM,SAAQ,kBAAkB;AAEhC,wBAAc,SAAS,QAAQ,WAAW,OAAM,iBAAiB,OAAM;;;;IAK7E,QAAQ,SAAS,QAAO,MAAM;AAC5B,UAAI,OAAO,WAAU,YAAY,CAAC,SAAS;AACzC,eAAO;;AAGT,YAAM,MAAI;AACV,YAAM,YAAY,aAAa;AAC/B,YAAM,cAAc,WAAU;AAC9B,YAAM,WAAW,aAAa,IAAI;AAElC,UAAI;AACJ,UAAI,UAAU;AACd,UAAI,iBAAiB;AACrB,UAAI,mBAAmB;AACvB,UAAI,MAAM;AAEV,UAAI,eAAe,KAAG;AACpB,sBAAc,IAAE,MAAM,QAAO;AAE7B,YAAE,SAAS,QAAQ;AACnB,kBAAU,CAAC,YAAY;AACvB,yBAAiB,CAAC,YAAY;AAC9B,2BAAmB,YAAY;;AAGjC,UAAI,UAAU;AACZ,cAAM,SAAS,YAAY;AAC3B,YAAI,UAAU,WAAW,SAAS;aAC7B;AACL,cAAM,IAAI,YAAY,QAAO;UAC3B;UACA,YAAY;;;AAKhB,UAAI,OAAO,SAAS,aAAa;AAC/B,eAAO,KAAK,MAAM,QAAQ,SAAO;AAC/B,iBAAO,eAAe,KAAK,KAAK;YAC9B,MAAM;AACJ,qBAAO,KAAK;;;;;AAMpB,UAAI,kBAAkB;AACpB,YAAI;;AAGN,UAAI,gBAAgB;AAClB,gBAAQ,cAAc;;AAGxB,UAAI,IAAI,oBAAoB,OAAO,gBAAgB,aAAa;AAC9D,oBAAY;;AAGd,aAAO;;;AC1UX,MAAM,aAAa,oBAAI;AAEvB,MAAA,OAAe;IACb,IAAI,SAAS,KAAK,UAAU;AAC1B,UAAI,CAAC,WAAW,IAAI,UAAU;AAC5B,mBAAW,IAAI,SAAS,oBAAI;;AAG9B,YAAM,cAAc,WAAW,IAAI;AAInC,UAAI,CAAC,YAAY,IAAI,QAAQ,YAAY,SAAS,GAAG;AAEnD,gBAAQ,MAAO,+EAA8E,MAAM,KAAK,YAAY,QAAQ;AAC5H;;AAGF,kBAAY,IAAI,KAAK;;IAGvB,IAAI,SAAS,KAAK;AAChB,UAAI,WAAW,IAAI,UAAU;AAC3B,eAAO,WAAW,IAAI,SAAS,IAAI,QAAQ;;AAG7C,aAAO;;IAGT,OAAO,SAAS,KAAK;AACnB,UAAI,CAAC,WAAW,IAAI,UAAU;AAC5B;;AAGF,YAAM,cAAc,WAAW,IAAI;AAEnC,kBAAY,OAAO;AAGnB,UAAI,YAAY,SAAS,GAAG;AAC1B,mBAAW,OAAO;;;;ACjCxB,MAAM,UAAU;AAEhB,6BAAoB;IAClB,YAAY,SAAS;AACnB,gBAAU,WAAW;AAErB,UAAI,CAAC,SAAS;AACZ;;AAGF,WAAK,WAAW;AAChB,WAAK,IAAI,KAAK,UAAU,KAAK,YAAY,UAAU;;IAGrD,UAAU;AACR,WAAK,OAAO,KAAK,UAAU,KAAK,YAAY;AAC5C,mBAAa,IAAI,KAAK,UAAU,KAAK,YAAY;AAEjD,aAAO,oBAAoB,MAAM,QAAQ,kBAAgB;AACvD,aAAK,gBAAgB;;;IAIzB,eAAe,UAAU,SAAS,aAAa,MAAM;AACnD,6BAAuB,UAAU,SAAS;;WAKrC,YAAY,SAAS;AAC1B,aAAO,KAAK,IAAI,WAAW,UAAU,KAAK;;WAGrC,oBAAoB,SAAS,SAAS,IAAI;AAC/C,aAAO,KAAK,YAAY,YAAY,IAAI,KAAK,SAAS,OAAO,WAAW,WAAW,SAAS;;eAGnF,UAAU;AACnB,aAAO;;eAGE,OAAO;AAChB,YAAM,IAAI,MAAM;;eAGP,WAAW;AACpB,aAAQ,MAAK,KAAK;;eAGT,YAAY;AACrB,aAAQ,IAAG,KAAK;;;AC5DpB,MAAM,uBAAuB,CAAC,WAAW,SAAS,WAAW;AAC3D,UAAM,aAAc,gBAAe,UAAU;AAC7C,UAAM,OAAO,UAAU;AAEvB,iBAAa,GAAG,UAAU,YAAa,qBAAoB,UAAU,SAAU,QAAO;AACpF,UAAI,CAAC,KAAK,QAAQ,SAAS,KAAK,UAAU;AACxC,eAAM;;AAGR,UAAI,YAAW,OAAO;AACpB;;AAGF,YAAM,SAAS,uBAAuB,SAAS,KAAK,QAAS,IAAG;AAChE,YAAM,WAAW,UAAU,oBAAoB;AAG/C,eAAS;;;ACTb,MAAM,SAAO;AACb,MAAM,aAAW;AACjB,MAAM,cAAa,IAAG;AAEtB,MAAM,cAAe,QAAO;AAC5B,MAAM,eAAgB,SAAQ;AAC9B,MAAM,oBAAkB;AACxB,MAAM,oBAAkB;AAQxB,4BAAoB,eAAc;eAGrB,OAAO;AAChB,aAAO;;IAKT,QAAQ;AACN,YAAM,aAAa,aAAa,QAAQ,KAAK,UAAU;AAEvD,UAAI,WAAW,kBAAkB;AAC/B;;AAGF,WAAK,SAAS,UAAU,OAAO;AAE/B,YAAM,aAAa,KAAK,SAAS,UAAU,SAAS;AACpD,WAAK,eAAe,MAAM,KAAK,mBAAmB,KAAK,UAAU;;IAInE,kBAAkB;AAChB,WAAK,SAAS;AACd,mBAAa,QAAQ,KAAK,UAAU;AACpC,WAAK;;WAKA,gBAAgB,QAAQ;AAC7B,aAAO,KAAK,KAAK,WAAY;AAC3B,cAAM,OAAO,MAAM,oBAAoB;AAEvC,YAAI,OAAO,WAAW,UAAU;AAC9B;;AAGF,YAAI,KAAK,YAAY,UAAa,OAAO,WAAW,QAAQ,WAAW,eAAe;AACpF,gBAAM,IAAI,UAAW,oBAAmB;;AAG1C,aAAK,QAAQ;;;;AAWnB,uBAAqB,OAAO;AAS5B,qBAAmB;AC/EnB,MAAM,SAAO;AACb,MAAM,aAAW;AACjB,MAAM,cAAa,IAAG;AACtB,MAAM,iBAAe;AAErB,MAAM,sBAAoB;AAE1B,MAAM,yBAAuB;AAE7B,MAAM,yBAAwB,QAAO,cAAY;AAQjD,6BAAqB,eAAc;eAGtB,OAAO;AAChB,aAAO;;IAKT,SAAS;AAEP,WAAK,SAAS,aAAa,gBAAgB,KAAK,SAAS,UAAU,OAAO;;WAKrE,gBAAgB,QAAQ;AAC7B,aAAO,KAAK,KAAK,WAAY;AAC3B,cAAM,OAAO,OAAO,oBAAoB;AAExC,YAAI,WAAW,UAAU;AACvB,eAAK;;;;;AAYb,eAAa,GAAG,UAAU,wBAAsB,wBAAsB,YAAS;AAC7E,WAAM;AAEN,UAAM,SAAS,OAAM,OAAO,QAAQ;AACpC,UAAM,OAAO,OAAO,oBAAoB;AAExC,SAAK;;AAUP,qBAAmB;AC5EnB,yBAAuB,KAAK;AAC1B,QAAI,QAAQ,QAAQ;AAClB,aAAO;;AAGT,QAAI,QAAQ,SAAS;AACnB,aAAO;;AAGT,QAAI,QAAQ,OAAO,KAAK,YAAY;AAClC,aAAO,OAAO;;AAGhB,QAAI,QAAQ,MAAM,QAAQ,QAAQ;AAChC,aAAO;;AAGT,WAAO;;AAGT,4BAA0B,KAAK;AAC7B,WAAO,IAAI,QAAQ,UAAU,SAAQ,IAAG,IAAI;;AAG9C,MAAM,cAAc;IAClB,iBAAiB,SAAS,KAAK,OAAO;AACpC,cAAQ,aAAc,WAAU,iBAAiB,QAAQ;;IAG3D,oBAAoB,SAAS,KAAK;AAChC,cAAQ,gBAAiB,WAAU,iBAAiB;;IAGtD,kBAAkB,SAAS;AACzB,UAAI,CAAC,SAAS;AACZ,eAAO;;AAGT,YAAM,aAAa;AAEnB,aAAO,KAAK,QAAQ,SACjB,OAAO,SAAO,IAAI,WAAW,OAC7B,QAAQ,SAAO;AACd,YAAI,UAAU,IAAI,QAAQ,OAAO;AACjC,kBAAU,QAAQ,OAAO,GAAG,gBAAgB,QAAQ,MAAM,GAAG,QAAQ;AACrE,mBAAW,WAAW,cAAc,QAAQ,QAAQ;;AAGxD,aAAO;;IAGT,iBAAiB,SAAS,KAAK;AAC7B,aAAO,cAAc,QAAQ,aAAc,WAAU,iBAAiB;;IAGxE,OAAO,SAAS;AACd,YAAM,OAAO,QAAQ;AAErB,aAAO;QACL,KAAK,KAAK,MAAM,OAAO;QACvB,MAAM,KAAK,OAAO,OAAO;;;IAI7B,SAAS,SAAS;AAChB,aAAO;QACL,KAAK,QAAQ;QACb,MAAM,QAAQ;;;;AC3DpB,MAAM,YAAY;AAElB,MAAM,iBAAiB;IACrB,KAAK,UAAU,UAAU,SAAS,iBAAiB;AACjD,aAAO,GAAG,OAAO,GAAG,QAAQ,UAAU,iBAAiB,KAAK,SAAS;;IAGvE,QAAQ,UAAU,UAAU,SAAS,iBAAiB;AACpD,aAAO,QAAQ,UAAU,cAAc,KAAK,SAAS;;IAGvD,SAAS,SAAS,UAAU;AAC1B,aAAO,GAAG,OAAO,GAAG,QAAQ,UACzB,OAAO,WAAS,MAAM,QAAQ;;IAGnC,QAAQ,SAAS,UAAU;AACzB,YAAM,UAAU;AAEhB,UAAI,WAAW,QAAQ;AAEvB,aAAO,YAAY,SAAS,aAAa,KAAK,gBAAgB,SAAS,aAAa,WAAW;AAC7F,YAAI,SAAS,QAAQ,WAAW;AAC9B,kBAAQ,KAAK;;AAGf,mBAAW,SAAS;;AAGtB,aAAO;;IAGT,KAAK,SAAS,UAAU;AACtB,UAAI,WAAW,QAAQ;AAEvB,aAAO,UAAU;AACf,YAAI,SAAS,QAAQ,WAAW;AAC9B,iBAAO,CAAC;;AAGV,mBAAW,SAAS;;AAGtB,aAAO;;IAGT,KAAK,SAAS,UAAU;AACtB,UAAI,QAAO,QAAQ;AAEnB,aAAO,OAAM;AACX,YAAI,MAAK,QAAQ,WAAW;AAC1B,iBAAO,CAAC;;AAGV,gBAAO,MAAK;;AAGd,aAAO;;IAGT,kBAAkB,SAAS;AACzB,YAAM,aAAa,CACjB,KACA,UACA,SACA,YACA,UACA,WACA,cACA,4BACA,IAAI,cAAa,GAAE,iCAAiC,KAAK;AAE3D,aAAO,KAAK,KAAK,YAAY,SAAS,OAAO,QAAM,CAAC,YAAW,OAAO,WAAU;;;AC3DpF,MAAM,SAAO;AACb,MAAM,aAAW;AACjB,MAAM,cAAa,IAAG;AACtB,MAAM,iBAAe;AAErB,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AACxB,MAAM,yBAAyB;AAC/B,MAAM,kBAAkB;AAExB,MAAM,YAAU;IACd,UAAU;IACV,UAAU;IACV,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;;AAGT,MAAM,gBAAc;IAClB,UAAU;IACV,UAAU;IACV,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;;AAGT,MAAM,aAAa;AACnB,MAAM,aAAa;AACnB,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AAExB,MAAM,mBAAmB;KACtB,iBAAiB;KACjB,kBAAkB;;AAGrB,MAAM,cAAe,QAAO;AAC5B,MAAM,aAAc,OAAM;AAC1B,MAAM,gBAAiB,UAAS;AAChC,MAAM,mBAAoB,aAAY;AACtC,MAAM,mBAAoB,aAAY;AACtC,MAAM,mBAAoB,aAAY;AACtC,MAAM,kBAAmB,YAAW;AACpC,MAAM,iBAAkB,WAAU;AAClC,MAAM,oBAAqB,cAAa;AACxC,MAAM,kBAAmB,YAAW;AACpC,MAAM,mBAAoB,YAAW;AACrC,MAAM,wBAAuB,OAAM,cAAY;AAC/C,MAAM,yBAAwB,QAAO,cAAY;AAEjD,MAAM,sBAAsB;AAC5B,MAAM,sBAAoB;AAC1B,MAAM,mBAAmB;AACzB,MAAM,iBAAiB;AACvB,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AACxB,MAAM,kBAAkB;AACxB,MAAM,2BAA2B;AAEjC,MAAM,oBAAkB;AACxB,MAAM,uBAAuB;AAC7B,MAAM,gBAAgB;AACtB,MAAM,oBAAoB;AAC1B,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAE3B,MAAM,qBAAqB;AAC3B,MAAM,mBAAmB;AAOzB,+BAAuB,eAAc;IACnC,YAAY,SAAS,QAAQ;AAC3B,YAAM;AAEN,WAAK,SAAS;AACd,WAAK,YAAY;AACjB,WAAK,iBAAiB;AACtB,WAAK,YAAY;AACjB,WAAK,aAAa;AAClB,WAAK,eAAe;AACpB,WAAK,cAAc;AACnB,WAAK,cAAc;AAEnB,WAAK,UAAU,KAAK,WAAW;AAC/B,WAAK,qBAAqB,eAAe,QAAQ,qBAAqB,KAAK;AAC3E,WAAK,kBAAkB,kBAAkB,SAAS,mBAAmB,UAAU,iBAAiB;AAChG,WAAK,gBAAgB,QAAQ,OAAO;AAEpC,WAAK;;eAKI,UAAU;AACnB,aAAO;;eAGE,OAAO;AAChB,aAAO;;IAKT,OAAO;AACL,WAAK,OAAO;;IAGd,kBAAkB;AAGhB,UAAI,CAAC,SAAS,UAAU,WAAU,KAAK,WAAW;AAChD,aAAK;;;IAIT,OAAO;AACL,WAAK,OAAO;;IAGd,MAAM,QAAO;AACX,UAAI,CAAC,QAAO;AACV,aAAK,YAAY;;AAGnB,UAAI,eAAe,QAAQ,oBAAoB,KAAK,WAAW;AAC7D,6BAAqB,KAAK;AAC1B,aAAK,MAAM;;AAGb,oBAAc,KAAK;AACnB,WAAK,YAAY;;IAGnB,MAAM,QAAO;AACX,UAAI,CAAC,QAAO;AACV,aAAK,YAAY;;AAGnB,UAAI,KAAK,WAAW;AAClB,sBAAc,KAAK;AACnB,aAAK,YAAY;;AAGnB,UAAI,KAAK,WAAW,KAAK,QAAQ,YAAY,CAAC,KAAK,WAAW;AAC5D,aAAK;AAEL,aAAK,YAAY,YACd,UAAS,kBAAkB,KAAK,kBAAkB,KAAK,MAAM,KAAK,OACnE,KAAK,QAAQ;;;IAKnB,GAAG,QAAO;AACR,WAAK,iBAAiB,eAAe,QAAQ,sBAAsB,KAAK;AACxE,YAAM,cAAc,KAAK,cAAc,KAAK;AAE5C,UAAI,SAAQ,KAAK,OAAO,SAAS,KAAK,SAAQ,GAAG;AAC/C;;AAGF,UAAI,KAAK,YAAY;AACnB,qBAAa,IAAI,KAAK,UAAU,YAAY,MAAM,KAAK,GAAG;AAC1D;;AAGF,UAAI,gBAAgB,QAAO;AACzB,aAAK;AACL,aAAK;AACL;;AAGF,YAAM,SAAQ,SAAQ,cACpB,aACA;AAEF,WAAK,OAAO,QAAO,KAAK,OAAO;;IAKjC,WAAW,QAAQ;AACjB,eAAS;WACJ;WACA,YAAY,kBAAkB,KAAK;WAClC,OAAO,WAAW,WAAW,SAAS;;AAE5C,sBAAgB,QAAM,QAAQ;AAC9B,aAAO;;IAGT,eAAe;AACb,YAAM,YAAY,KAAK,IAAI,KAAK;AAEhC,UAAI,aAAa,iBAAiB;AAChC;;AAGF,YAAM,YAAY,YAAY,KAAK;AAEnC,WAAK,cAAc;AAEnB,UAAI,CAAC,WAAW;AACd;;AAGF,WAAK,OAAO,YAAY,IAAI,kBAAkB;;IAGhD,qBAAqB;AACnB,UAAI,KAAK,QAAQ,UAAU;AACzB,qBAAa,GAAG,KAAK,UAAU,eAAe,YAAS,KAAK,SAAS;;AAGvE,UAAI,KAAK,QAAQ,UAAU,SAAS;AAClC,qBAAa,GAAG,KAAK,UAAU,kBAAkB,YAAS,KAAK,MAAM;AACrE,qBAAa,GAAG,KAAK,UAAU,kBAAkB,YAAS,KAAK,MAAM;;AAGvE,UAAI,KAAK,QAAQ,SAAS,KAAK,iBAAiB;AAC9C,aAAK;;;IAIT,0BAA0B;AACxB,YAAM,qBAAqB,YAAS;AAClC,eAAO,KAAK,iBACT,QAAM,gBAAgB,oBAAoB,OAAM,gBAAgB;;AAGrE,YAAM,SAAQ,YAAS;AACrB,YAAI,mBAAmB,SAAQ;AAC7B,eAAK,cAAc,OAAM;mBAChB,CAAC,KAAK,eAAe;AAC9B,eAAK,cAAc,OAAM,QAAQ,GAAG;;;AAIxC,YAAM,OAAO,YAAS;AAEpB,aAAK,cAAc,OAAM,WAAW,OAAM,QAAQ,SAAS,IACzD,IACA,OAAM,QAAQ,GAAG,UAAU,KAAK;;AAGpC,YAAM,OAAM,YAAS;AACnB,YAAI,mBAAmB,SAAQ;AAC7B,eAAK,cAAc,OAAM,UAAU,KAAK;;AAG1C,aAAK;AACL,YAAI,KAAK,QAAQ,UAAU,SAAS;AASlC,eAAK;AACL,cAAI,KAAK,cAAc;AACrB,yBAAa,KAAK;;AAGpB,eAAK,eAAe,WAAW,YAAS,KAAK,MAAM,SAAQ,yBAAyB,KAAK,QAAQ;;;AAIrG,qBAAe,KAAK,mBAAmB,KAAK,UAAU,QAAQ,aAAW;AACvE,qBAAa,GAAG,SAAS,kBAAkB,YAAS,OAAM;;AAG5D,UAAI,KAAK,eAAe;AACtB,qBAAa,GAAG,KAAK,UAAU,mBAAmB,YAAS,OAAM;AACjE,qBAAa,GAAG,KAAK,UAAU,iBAAiB,YAAS,KAAI;AAE7D,aAAK,SAAS,UAAU,IAAI;aACvB;AACL,qBAAa,GAAG,KAAK,UAAU,kBAAkB,YAAS,OAAM;AAChE,qBAAa,GAAG,KAAK,UAAU,iBAAiB,YAAS,KAAK;AAC9D,qBAAa,GAAG,KAAK,UAAU,gBAAgB,YAAS,KAAI;;;IAIhE,SAAS,QAAO;AACd,UAAI,kBAAkB,KAAK,OAAM,OAAO,UAAU;AAChD;;AAGF,YAAM,YAAY,iBAAiB,OAAM;AACzC,UAAI,WAAW;AACb,eAAM;AACN,aAAK,OAAO;;;IAIhB,cAAc,SAAS;AACrB,WAAK,SAAS,WAAW,QAAQ,aAC/B,eAAe,KAAK,eAAe,QAAQ,cAC3C;AAEF,aAAO,KAAK,OAAO,QAAQ;;IAG7B,gBAAgB,QAAO,eAAe;AACpC,YAAM,SAAS,WAAU;AACzB,aAAO,qBAAqB,KAAK,QAAQ,eAAe,QAAQ,KAAK,QAAQ;;IAG/E,mBAAmB,eAAe,oBAAoB;AACpD,YAAM,cAAc,KAAK,cAAc;AACvC,YAAM,YAAY,KAAK,cAAc,eAAe,QAAQ,sBAAsB,KAAK;AAEvF,aAAO,aAAa,QAAQ,KAAK,UAAU,aAAa;QACtD;QACA,WAAW;QACX,MAAM;QACN,IAAI;;;IAIR,2BAA2B,SAAS;AAClC,UAAI,KAAK,oBAAoB;AAC3B,cAAM,kBAAkB,eAAe,QAAQ,mBAAiB,KAAK;AAErE,wBAAgB,UAAU,OAAO;AACjC,wBAAgB,gBAAgB;AAEhC,cAAM,aAAa,eAAe,KAAK,oBAAoB,KAAK;AAEhE,iBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,cAAI,OAAO,SAAS,WAAW,GAAG,aAAa,qBAAqB,QAAQ,KAAK,cAAc,UAAU;AACvG,uBAAW,GAAG,UAAU,IAAI;AAC5B,uBAAW,GAAG,aAAa,gBAAgB;AAC3C;;;;;IAMR,kBAAkB;AAChB,YAAM,UAAU,KAAK,kBAAkB,eAAe,QAAQ,sBAAsB,KAAK;AAEzF,UAAI,CAAC,SAAS;AACZ;;AAGF,YAAM,kBAAkB,OAAO,SAAS,QAAQ,aAAa,qBAAqB;AAElF,UAAI,iBAAiB;AACnB,aAAK,QAAQ,kBAAkB,KAAK,QAAQ,mBAAmB,KAAK,QAAQ;AAC5E,aAAK,QAAQ,WAAW;aACnB;AACL,aAAK,QAAQ,WAAW,KAAK,QAAQ,mBAAmB,KAAK,QAAQ;;;IAIzE,OAAO,kBAAkB,SAAS;AAChC,YAAM,SAAQ,KAAK,kBAAkB;AACrC,YAAM,gBAAgB,eAAe,QAAQ,sBAAsB,KAAK;AACxE,YAAM,qBAAqB,KAAK,cAAc;AAC9C,YAAM,cAAc,WAAW,KAAK,gBAAgB,QAAO;AAE3D,YAAM,mBAAmB,KAAK,cAAc;AAC5C,YAAM,YAAY,QAAQ,KAAK;AAE/B,YAAM,SAAS,WAAU;AACzB,YAAM,uBAAuB,SAAS,mBAAmB;AACzD,YAAM,iBAAiB,SAAS,kBAAkB;AAClD,YAAM,qBAAqB,KAAK,kBAAkB;AAElD,UAAI,eAAe,YAAY,UAAU,SAAS,sBAAoB;AACpE,aAAK,aAAa;AAClB;;AAGF,UAAI,KAAK,YAAY;AACnB;;AAGF,YAAM,aAAa,KAAK,mBAAmB,aAAa;AACxD,UAAI,WAAW,kBAAkB;AAC/B;;AAGF,UAAI,CAAC,iBAAiB,CAAC,aAAa;AAElC;;AAGF,WAAK,aAAa;AAElB,UAAI,WAAW;AACb,aAAK;;AAGP,WAAK,2BAA2B;AAChC,WAAK,iBAAiB;AAEtB,YAAM,mBAAmB,MAAM;AAC7B,qBAAa,QAAQ,KAAK,UAAU,YAAY;UAC9C,eAAe;UACf,WAAW;UACX,MAAM;UACN,IAAI;;;AAIR,UAAI,KAAK,SAAS,UAAU,SAAS,mBAAmB;AACtD,oBAAY,UAAU,IAAI;AAE1B,eAAO;AAEP,sBAAc,UAAU,IAAI;AAC5B,oBAAY,UAAU,IAAI;AAE1B,cAAM,mBAAmB,MAAM;AAC7B,sBAAY,UAAU,OAAO,sBAAsB;AACnD,sBAAY,UAAU,IAAI;AAE1B,wBAAc,UAAU,OAAO,qBAAmB,gBAAgB;AAElE,eAAK,aAAa;AAElB,qBAAW,kBAAkB;;AAG/B,aAAK,eAAe,kBAAkB,eAAe;aAChD;AACL,sBAAc,UAAU,OAAO;AAC/B,oBAAY,UAAU,IAAI;AAE1B,aAAK,aAAa;AAClB;;AAGF,UAAI,WAAW;AACb,aAAK;;;IAIT,kBAAkB,WAAW;AAC3B,UAAI,CAAC,CAAC,iBAAiB,gBAAgB,SAAS,YAAY;AAC1D,eAAO;;AAGT,UAAI,SAAS;AACX,eAAO,cAAc,iBAAiB,aAAa;;AAGrD,aAAO,cAAc,iBAAiB,aAAa;;IAGrD,kBAAkB,QAAO;AACvB,UAAI,CAAC,CAAC,YAAY,YAAY,SAAS,SAAQ;AAC7C,eAAO;;AAGT,UAAI,SAAS;AACX,eAAO,WAAU,aAAa,iBAAiB;;AAGjD,aAAO,WAAU,aAAa,kBAAkB;;WAK3C,kBAAkB,SAAS,QAAQ;AACxC,YAAM,OAAO,SAAS,oBAAoB,SAAS;AAEnD,UAAI;QAAE;UAAY;AAClB,UAAI,OAAO,WAAW,UAAU;AAC9B,kBAAU;aACL;aACA;;;AAIP,YAAM,SAAS,OAAO,WAAW,WAAW,SAAS,QAAQ;AAE7D,UAAI,OAAO,WAAW,UAAU;AAC9B,aAAK,GAAG;iBACC,OAAO,WAAW,UAAU;AACrC,YAAI,OAAO,KAAK,YAAY,aAAa;AACvC,gBAAM,IAAI,UAAW,oBAAmB;;AAG1C,aAAK;iBACI,QAAQ,YAAY,QAAQ,MAAM;AAC3C,aAAK;AACL,aAAK;;;WAIF,gBAAgB,QAAQ;AAC7B,aAAO,KAAK,KAAK,WAAY;AAC3B,iBAAS,kBAAkB,MAAM;;;WAI9B,oBAAoB,QAAO;AAChC,YAAM,SAAS,uBAAuB;AAEtC,UAAI,CAAC,UAAU,CAAC,OAAO,UAAU,SAAS,sBAAsB;AAC9D;;AAGF,YAAM,SAAS;WACV,YAAY,kBAAkB;WAC9B,YAAY,kBAAkB;;AAEnC,YAAM,aAAa,KAAK,aAAa;AAErC,UAAI,YAAY;AACd,eAAO,WAAW;;AAGpB,eAAS,kBAAkB,QAAQ;AAEnC,UAAI,YAAY;AACd,iBAAS,YAAY,QAAQ,GAAG;;AAGlC,aAAM;;;AAUV,eAAa,GAAG,UAAU,wBAAsB,qBAAqB,SAAS;AAE9E,eAAa,GAAG,QAAQ,uBAAqB,MAAM;AACjD,UAAM,YAAY,eAAe,KAAK;AAEtC,aAAS,IAAI,GAAG,MAAM,UAAU,QAAQ,IAAI,KAAK,KAAK;AACpD,eAAS,kBAAkB,UAAU,IAAI,SAAS,YAAY,UAAU;;;AAW5E,qBAAmB;ACjjBnB,MAAM,SAAO;AACb,MAAM,aAAW;AACjB,MAAM,cAAa,IAAG;AACtB,MAAM,iBAAe;AAErB,MAAM,YAAU;IACd,QAAQ;IACR,QAAQ;;AAGV,MAAM,gBAAc;IAClB,QAAQ;IACR,QAAQ;;AAGV,MAAM,eAAc,OAAM;AAC1B,MAAM,gBAAe,QAAO;AAC5B,MAAM,eAAc,OAAM;AAC1B,MAAM,iBAAgB,SAAQ;AAC9B,MAAM,yBAAwB,QAAO,cAAY;AAEjD,MAAM,oBAAkB;AACxB,MAAM,sBAAsB;AAC5B,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAC7B,MAAM,6BAA8B,WAAU,wBAAwB;AACtE,MAAM,wBAAwB;AAE9B,MAAM,QAAQ;AACd,MAAM,SAAS;AAEf,MAAM,mBAAmB;AACzB,MAAM,yBAAuB;AAQ7B,+BAAuB,eAAc;IACnC,YAAY,SAAS,QAAQ;AAC3B,YAAM;AAEN,WAAK,mBAAmB;AACxB,WAAK,UAAU,KAAK,WAAW;AAC/B,WAAK,gBAAgB;AAErB,YAAM,aAAa,eAAe,KAAK;AAEvC,eAAS,IAAI,GAAG,MAAM,WAAW,QAAQ,IAAI,KAAK,KAAK;AACrD,cAAM,OAAO,WAAW;AACxB,cAAM,WAAW,uBAAuB;AACxC,cAAM,gBAAgB,eAAe,KAAK,UACvC,OAAO,eAAa,cAAc,KAAK;AAE1C,YAAI,aAAa,QAAQ,cAAc,QAAQ;AAC7C,eAAK,YAAY;AACjB,eAAK,cAAc,KAAK;;;AAI5B,WAAK;AAEL,UAAI,CAAC,KAAK,QAAQ,QAAQ;AACxB,aAAK,0BAA0B,KAAK,eAAe,KAAK;;AAG1D,UAAI,KAAK,QAAQ,QAAQ;AACvB,aAAK;;;eAME,UAAU;AACnB,aAAO;;eAGE,OAAO;AAChB,aAAO;;IAKT,SAAS;AACP,UAAI,KAAK,YAAY;AACnB,aAAK;aACA;AACL,aAAK;;;IAIT,OAAO;AACL,UAAI,KAAK,oBAAoB,KAAK,YAAY;AAC5C;;AAGF,UAAI,UAAU;AACd,UAAI;AAEJ,UAAI,KAAK,QAAQ,QAAQ;AACvB,cAAM,WAAW,eAAe,KAAK,4BAA4B,KAAK,QAAQ;AAC9E,kBAAU,eAAe,KAAK,kBAAkB,KAAK,QAAQ,QAAQ,OAAO,UAAQ,CAAC,SAAS,SAAS;;AAGzG,YAAM,YAAY,eAAe,QAAQ,KAAK;AAC9C,UAAI,QAAQ,QAAQ;AAClB,cAAM,iBAAiB,QAAQ,KAAK,UAAQ,cAAc;AAC1D,sBAAc,iBAAiB,SAAS,YAAY,kBAAkB;AAEtE,YAAI,eAAe,YAAY,kBAAkB;AAC/C;;;AAIJ,YAAM,aAAa,aAAa,QAAQ,KAAK,UAAU;AACvD,UAAI,WAAW,kBAAkB;AAC/B;;AAGF,cAAQ,QAAQ,gBAAc;AAC5B,YAAI,cAAc,YAAY;AAC5B,mBAAS,oBAAoB,YAAY;YAAE,QAAQ;aAAS;;AAG9D,YAAI,CAAC,aAAa;AAChB,eAAK,IAAI,YAAY,YAAU;;;AAInC,YAAM,YAAY,KAAK;AAEvB,WAAK,SAAS,UAAU,OAAO;AAC/B,WAAK,SAAS,UAAU,IAAI;AAE5B,WAAK,SAAS,MAAM,aAAa;AAEjC,WAAK,0BAA0B,KAAK,eAAe;AACnD,WAAK,mBAAmB;AAExB,YAAM,WAAW,MAAM;AACrB,aAAK,mBAAmB;AAExB,aAAK,SAAS,UAAU,OAAO;AAC/B,aAAK,SAAS,UAAU,IAAI,qBAAqB;AAEjD,aAAK,SAAS,MAAM,aAAa;AAEjC,qBAAa,QAAQ,KAAK,UAAU;;AAGtC,YAAM,uBAAuB,UAAU,GAAG,gBAAgB,UAAU,MAAM;AAC1E,YAAM,aAAc,SAAQ;AAE5B,WAAK,eAAe,UAAU,KAAK,UAAU;AAC7C,WAAK,SAAS,MAAM,aAAc,GAAE,KAAK,SAAS;;IAGpD,OAAO;AACL,UAAI,KAAK,oBAAoB,CAAC,KAAK,YAAY;AAC7C;;AAGF,YAAM,aAAa,aAAa,QAAQ,KAAK,UAAU;AACvD,UAAI,WAAW,kBAAkB;AAC/B;;AAGF,YAAM,YAAY,KAAK;AAEvB,WAAK,SAAS,MAAM,aAAc,GAAE,KAAK,SAAS,wBAAwB;AAE1E,aAAO,KAAK;AAEZ,WAAK,SAAS,UAAU,IAAI;AAC5B,WAAK,SAAS,UAAU,OAAO,qBAAqB;AAEpD,YAAM,qBAAqB,KAAK,cAAc;AAC9C,eAAS,IAAI,GAAG,IAAI,oBAAoB,KAAK;AAC3C,cAAM,UAAU,KAAK,cAAc;AACnC,cAAM,OAAO,uBAAuB;AAEpC,YAAI,QAAQ,CAAC,KAAK,SAAS,OAAO;AAChC,eAAK,0BAA0B,CAAC,UAAU;;;AAI9C,WAAK,mBAAmB;AAExB,YAAM,WAAW,MAAM;AACrB,aAAK,mBAAmB;AACxB,aAAK,SAAS,UAAU,OAAO;AAC/B,aAAK,SAAS,UAAU,IAAI;AAC5B,qBAAa,QAAQ,KAAK,UAAU;;AAGtC,WAAK,SAAS,MAAM,aAAa;AAEjC,WAAK,eAAe,UAAU,KAAK,UAAU;;IAG/C,SAAS,UAAU,KAAK,UAAU;AAChC,aAAO,QAAQ,UAAU,SAAS;;IAKpC,WAAW,QAAQ;AACjB,eAAS;WACJ;WACA,YAAY,kBAAkB,KAAK;WACnC;;AAEL,aAAO,SAAS,QAAQ,OAAO;AAC/B,aAAO,SAAS,WAAW,OAAO;AAClC,sBAAgB,QAAM,QAAQ;AAC9B,aAAO;;IAGT,gBAAgB;AACd,aAAO,KAAK,SAAS,UAAU,SAAS,yBAAyB,QAAQ;;IAG3E,sBAAsB;AACpB,UAAI,CAAC,KAAK,QAAQ,QAAQ;AACxB;;AAGF,YAAM,WAAW,eAAe,KAAK,4BAA4B,KAAK,QAAQ;AAC9E,qBAAe,KAAK,wBAAsB,KAAK,QAAQ,QAAQ,OAAO,UAAQ,CAAC,SAAS,SAAS,OAC9F,QAAQ,aAAW;AAClB,cAAM,WAAW,uBAAuB;AAExC,YAAI,UAAU;AACZ,eAAK,0BAA0B,CAAC,UAAU,KAAK,SAAS;;;;IAKhE,0BAA0B,cAAc,QAAQ;AAC9C,UAAI,CAAC,aAAa,QAAQ;AACxB;;AAGF,mBAAa,QAAQ,UAAQ;AAC3B,YAAI,QAAQ;AACV,eAAK,UAAU,OAAO;eACjB;AACL,eAAK,UAAU,IAAI;;AAGrB,aAAK,aAAa,iBAAiB;;;WAMhC,gBAAgB,QAAQ;AAC7B,aAAO,KAAK,KAAK,WAAY;AAC3B,cAAM,UAAU;AAChB,YAAI,OAAO,WAAW,YAAY,YAAY,KAAK,SAAS;AAC1D,kBAAQ,SAAS;;AAGnB,cAAM,OAAO,SAAS,oBAAoB,MAAM;AAEhD,YAAI,OAAO,WAAW,UAAU;AAC9B,cAAI,OAAO,KAAK,YAAY,aAAa;AACvC,kBAAM,IAAI,UAAW,oBAAmB;;AAG1C,eAAK;;;;;AAYb,eAAa,GAAG,UAAU,wBAAsB,wBAAsB,SAAU,QAAO;AAErF,QAAI,OAAM,OAAO,YAAY,OAAQ,OAAM,kBAAkB,OAAM,eAAe,YAAY,KAAM;AAClG,aAAM;;AAGR,UAAM,WAAW,uBAAuB;AACxC,UAAM,mBAAmB,eAAe,KAAK;AAE7C,qBAAiB,QAAQ,aAAW;AAClC,eAAS,oBAAoB,SAAS;QAAE,QAAQ;SAAS;;;AAW7D,qBAAmB;AC5SnB,MAAM,SAAO;AACb,MAAM,aAAW;AACjB,MAAM,cAAa,IAAG;AACtB,MAAM,iBAAe;AAErB,MAAM,eAAa;AACnB,MAAM,YAAY;AAClB,MAAM,YAAU;AAChB,MAAM,eAAe;AACrB,MAAM,iBAAiB;AACvB,MAAM,qBAAqB;AAE3B,MAAM,iBAAiB,IAAI,OAAQ,GAAE,gBAAgB,kBAAkB;AAEvE,MAAM,eAAc,OAAM;AAC1B,MAAM,iBAAgB,SAAQ;AAC9B,MAAM,eAAc,OAAM;AAC1B,MAAM,gBAAe,QAAO;AAC5B,MAAM,yBAAwB,QAAO,cAAY;AACjD,MAAM,yBAA0B,UAAS,cAAY;AACrD,MAAM,uBAAwB,QAAO,cAAY;AAEjD,MAAM,oBAAkB;AACxB,MAAM,oBAAoB;AAC1B,MAAM,qBAAqB;AAC3B,MAAM,uBAAuB;AAC7B,MAAM,oBAAoB;AAE1B,MAAM,yBAAuB;AAC7B,MAAM,gBAAgB;AACtB,MAAM,sBAAsB;AAC5B,MAAM,yBAAyB;AAE/B,MAAM,gBAAgB,UAAU,YAAY;AAC5C,MAAM,mBAAmB,UAAU,cAAc;AACjD,MAAM,mBAAmB,UAAU,eAAe;AAClD,MAAM,sBAAsB,UAAU,iBAAiB;AACvD,MAAM,kBAAkB,UAAU,eAAe;AACjD,MAAM,iBAAiB,UAAU,gBAAgB;AAEjD,MAAM,YAAU;IACd,QAAQ,CAAC,GAAG;IACZ,UAAU;IACV,WAAW;IACX,SAAS;IACT,cAAc;IACd,WAAW;;AAGb,MAAM,gBAAc;IAClB,QAAQ;IACR,UAAU;IACV,WAAW;IACX,SAAS;IACT,cAAc;IACd,WAAW;;AASb,+BAAuB,eAAc;IACnC,YAAY,SAAS,QAAQ;AAC3B,YAAM;AAEN,WAAK,UAAU;AACf,WAAK,UAAU,KAAK,WAAW;AAC/B,WAAK,QAAQ,KAAK;AAClB,WAAK,YAAY,KAAK;;eAKb,UAAU;AACnB,aAAO;;eAGE,cAAc;AACvB,aAAO;;eAGE,OAAO;AAChB,aAAO;;IAKT,SAAS;AACP,aAAO,KAAK,aAAa,KAAK,SAAS,KAAK;;IAG9C,OAAO;AACL,UAAI,YAAW,KAAK,aAAa,KAAK,SAAS,KAAK,QAAQ;AAC1D;;AAGF,YAAM,gBAAgB;QACpB,eAAe,KAAK;;AAGtB,YAAM,YAAY,aAAa,QAAQ,KAAK,UAAU,cAAY;AAElE,UAAI,UAAU,kBAAkB;AAC9B;;AAGF,YAAM,SAAS,SAAS,qBAAqB,KAAK;AAElD,UAAI,KAAK,WAAW;AAClB,oBAAY,iBAAiB,KAAK,OAAO,UAAU;aAC9C;AACL,aAAK,cAAc;;AAOrB,UAAI,kBAAkB,SAAS,mBAC7B,CAAC,OAAO,QAAQ,sBAAsB;AACtC,WAAG,OAAO,GAAG,SAAS,KAAK,UACxB,QAAQ,UAAQ,aAAa,GAAG,MAAM,aAAa;;AAGxD,WAAK,SAAS;AACd,WAAK,SAAS,aAAa,iBAAiB;AAE5C,WAAK,MAAM,UAAU,IAAI;AACzB,WAAK,SAAS,UAAU,IAAI;AAC5B,mBAAa,QAAQ,KAAK,UAAU,eAAa;;IAGnD,OAAO;AACL,UAAI,YAAW,KAAK,aAAa,CAAC,KAAK,SAAS,KAAK,QAAQ;AAC3D;;AAGF,YAAM,gBAAgB;QACpB,eAAe,KAAK;;AAGtB,WAAK,cAAc;;IAGrB,UAAU;AACR,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ;;AAGf,YAAM;;IAGR,SAAS;AACP,WAAK,YAAY,KAAK;AACtB,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ;;;IAMjB,cAAc,eAAe;AAC3B,YAAM,YAAY,aAAa,QAAQ,KAAK,UAAU,cAAY;AAClE,UAAI,UAAU,kBAAkB;AAC9B;;AAKF,UAAI,kBAAkB,SAAS,iBAAiB;AAC9C,WAAG,OAAO,GAAG,SAAS,KAAK,UACxB,QAAQ,UAAQ,aAAa,IAAI,MAAM,aAAa;;AAGzD,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ;;AAGf,WAAK,MAAM,UAAU,OAAO;AAC5B,WAAK,SAAS,UAAU,OAAO;AAC/B,WAAK,SAAS,aAAa,iBAAiB;AAC5C,kBAAY,oBAAoB,KAAK,OAAO;AAC5C,mBAAa,QAAQ,KAAK,UAAU,gBAAc;;IAGpD,WAAW,QAAQ;AACjB,eAAS;WACJ,KAAK,YAAY;WACjB,YAAY,kBAAkB,KAAK;WACnC;;AAGL,sBAAgB,QAAM,QAAQ,KAAK,YAAY;AAE/C,UAAI,OAAO,OAAO,cAAc,YAAY,CAAC,WAAU,OAAO,cAC5D,OAAO,OAAO,UAAU,0BAA0B,YAClD;AAEA,cAAM,IAAI,UAAW,GAAE,OAAK;;AAG9B,aAAO;;IAGT,cAAc,QAAQ;AACpB,UAAI,OAAO,gBAAW,aAAa;AACjC,cAAM,IAAI,UAAU;;AAGtB,UAAI,mBAAmB,KAAK;AAE5B,UAAI,KAAK,QAAQ,cAAc,UAAU;AACvC,2BAAmB;iBACV,WAAU,KAAK,QAAQ,YAAY;AAC5C,2BAAmB,WAAW,KAAK,QAAQ;iBAClC,OAAO,KAAK,QAAQ,cAAc,UAAU;AACrD,2BAAmB,KAAK,QAAQ;;AAGlC,YAAM,eAAe,KAAK;AAC1B,YAAM,kBAAkB,aAAa,UAAU,KAAK,cAAY,SAAS,SAAS,iBAAiB,SAAS,YAAY;AAExH,WAAK,UAAU,AAAO,cAAa,kBAAkB,KAAK,OAAO;AAEjE,UAAI,iBAAiB;AACnB,oBAAY,iBAAiB,KAAK,OAAO,UAAU;;;IAIvD,SAAS,UAAU,KAAK,UAAU;AAChC,aAAO,QAAQ,UAAU,SAAS;;IAGpC,kBAAkB;AAChB,aAAO,eAAe,KAAK,KAAK,UAAU,eAAe;;IAG3D,gBAAgB;AACd,YAAM,iBAAiB,KAAK,SAAS;AAErC,UAAI,eAAe,UAAU,SAAS,qBAAqB;AACzD,eAAO;;AAGT,UAAI,eAAe,UAAU,SAAS,uBAAuB;AAC3D,eAAO;;AAIT,YAAM,QAAQ,iBAAiB,KAAK,OAAO,iBAAiB,iBAAiB,WAAW;AAExF,UAAI,eAAe,UAAU,SAAS,oBAAoB;AACxD,eAAO,QAAQ,mBAAmB;;AAGpC,aAAO,QAAQ,sBAAsB;;IAGvC,gBAAgB;AACd,aAAO,KAAK,SAAS,QAAS,IAAG,yBAAyB;;IAG5D,aAAa;AACX,YAAM;QAAE;UAAW,KAAK;AAExB,UAAI,OAAO,YAAW,UAAU;AAC9B,eAAO,QAAO,MAAM,KAAK,IAAI,SAAO,OAAO,SAAS,KAAK;;AAG3D,UAAI,OAAO,YAAW,YAAY;AAChC,eAAO,gBAAc,QAAO,YAAY,KAAK;;AAG/C,aAAO;;IAGT,mBAAmB;AACjB,YAAM,wBAAwB;QAC5B,WAAW,KAAK;QAChB,WAAW,CAAC;UACV,MAAM;UACN,SAAS;YACP,UAAU,KAAK,QAAQ;;WAG3B;UACE,MAAM;UACN,SAAS;YACP,QAAQ,KAAK;;;;AAMnB,UAAI,KAAK,QAAQ,YAAY,UAAU;AACrC,8BAAsB,YAAY,CAAC;UACjC,MAAM;UACN,SAAS;;;AAIb,aAAO;WACF;WACC,OAAO,KAAK,QAAQ,iBAAiB,aAAa,KAAK,QAAQ,aAAa,yBAAyB,KAAK,QAAQ;;;IAI1H,gBAAgB;MAAE;MAAK;OAAU;AAC/B,YAAM,QAAQ,eAAe,KAAK,wBAAwB,KAAK,OAAO,OAAO;AAE7E,UAAI,CAAC,MAAM,QAAQ;AACjB;;AAKF,2BAAqB,OAAO,QAAQ,QAAQ,gBAAgB,CAAC,MAAM,SAAS,SAAS;;WAKhF,gBAAgB,QAAQ;AAC7B,aAAO,KAAK,KAAK,WAAY;AAC3B,cAAM,OAAO,SAAS,oBAAoB,MAAM;AAEhD,YAAI,OAAO,WAAW,UAAU;AAC9B;;AAGF,YAAI,OAAO,KAAK,YAAY,aAAa;AACvC,gBAAM,IAAI,UAAW,oBAAmB;;AAG1C,aAAK;;;WAIF,WAAW,QAAO;AACvB,UAAI,UAAU,QAAM,WAAW,sBAAuB,OAAM,SAAS,WAAW,OAAM,QAAQ,YAAW;AACvG;;AAGF,YAAM,UAAU,eAAe,KAAK;AAEpC,eAAS,IAAI,GAAG,MAAM,QAAQ,QAAQ,IAAI,KAAK,KAAK;AAClD,cAAM,UAAU,SAAS,YAAY,QAAQ;AAC7C,YAAI,CAAC,WAAW,QAAQ,QAAQ,cAAc,OAAO;AACnD;;AAGF,YAAI,CAAC,QAAQ,YAAY;AACvB;;AAGF,cAAM,gBAAgB;UACpB,eAAe,QAAQ;;AAGzB,YAAI,QAAO;AACT,gBAAM,eAAe,OAAM;AAC3B,gBAAM,eAAe,aAAa,SAAS,QAAQ;AACnD,cACE,aAAa,SAAS,QAAQ,aAC7B,QAAQ,QAAQ,cAAc,YAAY,CAAC,gBAC3C,QAAQ,QAAQ,cAAc,aAAa,cAC5C;AACA;;AAIF,cAAI,QAAQ,MAAM,SAAS,OAAM,WAAa,QAAM,SAAS,WAAW,OAAM,QAAQ,aAAY,qCAAqC,KAAK,OAAM,OAAO,WAAW;AAClK;;AAGF,cAAI,OAAM,SAAS,SAAS;AAC1B,0BAAc,aAAa;;;AAI/B,gBAAQ,cAAc;;;WAInB,qBAAqB,SAAS;AACnC,aAAO,uBAAuB,YAAY,QAAQ;;WAG7C,sBAAsB,QAAO;AAQlC,UAAI,kBAAkB,KAAK,OAAM,OAAO,WACtC,OAAM,QAAQ,aAAc,OAAM,QAAQ,gBACxC,QAAM,QAAQ,kBAAkB,OAAM,QAAQ,gBAC9C,OAAM,OAAO,QAAQ,kBACvB,CAAC,eAAe,KAAK,OAAM,MAAM;AACjC;;AAGF,YAAM,WAAW,KAAK,UAAU,SAAS;AAEzC,UAAI,CAAC,YAAY,OAAM,QAAQ,cAAY;AACzC;;AAGF,aAAM;AACN,aAAM;AAEN,UAAI,YAAW,OAAO;AACpB;;AAGF,YAAM,kBAAkB,KAAK,QAAQ,0BAAwB,OAAO,eAAe,KAAK,MAAM,wBAAsB;AACpH,YAAM,WAAW,SAAS,oBAAoB;AAE9C,UAAI,OAAM,QAAQ,cAAY;AAC5B,iBAAS;AACT;;AAGF,UAAI,OAAM,QAAQ,gBAAgB,OAAM,QAAQ,gBAAgB;AAC9D,YAAI,CAAC,UAAU;AACb,mBAAS;;AAGX,iBAAS,gBAAgB;AACzB;;AAGF,UAAI,CAAC,YAAY,OAAM,QAAQ,WAAW;AACxC,iBAAS;;;;AAWf,eAAa,GAAG,UAAU,wBAAwB,wBAAsB,SAAS;AACjF,eAAa,GAAG,UAAU,wBAAwB,eAAe,SAAS;AAC1E,eAAa,GAAG,UAAU,wBAAsB,SAAS;AACzD,eAAa,GAAG,UAAU,sBAAsB,SAAS;AACzD,eAAa,GAAG,UAAU,wBAAsB,wBAAsB,SAAU,QAAO;AACrF,WAAM;AACN,aAAS,oBAAoB,MAAM;;AAUrC,qBAAmB;ACrenB,MAAM,yBAAyB;AAC/B,MAAM,0BAA0B;AAEhC,8BAAsB;IACpB,cAAc;AACZ,WAAK,WAAW,SAAS;;IAG3B,WAAW;AAET,YAAM,gBAAgB,SAAS,gBAAgB;AAC/C,aAAO,KAAK,IAAI,OAAO,aAAa;;IAGtC,OAAO;AACL,YAAM,QAAQ,KAAK;AACnB,WAAK;AAEL,WAAK,sBAAsB,KAAK,UAAU,gBAAgB,qBAAmB,kBAAkB;AAE/F,WAAK,sBAAsB,wBAAwB,gBAAgB,qBAAmB,kBAAkB;AACxG,WAAK,sBAAsB,yBAAyB,eAAe,qBAAmB,kBAAkB;;IAG1G,mBAAmB;AACjB,WAAK,sBAAsB,KAAK,UAAU;AAC1C,WAAK,SAAS,MAAM,WAAW;;IAGjC,sBAAsB,UAAU,WAAW,UAAU;AACnD,YAAM,iBAAiB,KAAK;AAC5B,YAAM,uBAAuB,aAAW;AACtC,YAAI,YAAY,KAAK,YAAY,OAAO,aAAa,QAAQ,cAAc,gBAAgB;AACzF;;AAGF,aAAK,sBAAsB,SAAS;AACpC,cAAM,kBAAkB,OAAO,iBAAiB,SAAS;AACzD,gBAAQ,MAAM,aAAc,GAAE,SAAS,OAAO,WAAW;;AAG3D,WAAK,2BAA2B,UAAU;;IAG5C,QAAQ;AACN,WAAK,wBAAwB,KAAK,UAAU;AAC5C,WAAK,wBAAwB,KAAK,UAAU;AAC5C,WAAK,wBAAwB,wBAAwB;AACrD,WAAK,wBAAwB,yBAAyB;;IAGxD,sBAAsB,SAAS,WAAW;AACxC,YAAM,cAAc,QAAQ,MAAM;AAClC,UAAI,aAAa;AACf,oBAAY,iBAAiB,SAAS,WAAW;;;IAIrD,wBAAwB,UAAU,WAAW;AAC3C,YAAM,uBAAuB,aAAW;AACtC,cAAM,QAAQ,YAAY,iBAAiB,SAAS;AACpD,YAAI,OAAO,UAAU,aAAa;AAChC,kBAAQ,MAAM,eAAe;eACxB;AACL,sBAAY,oBAAoB,SAAS;AACzC,kBAAQ,MAAM,aAAa;;;AAI/B,WAAK,2BAA2B,UAAU;;IAG5C,2BAA2B,UAAU,UAAU;AAC7C,UAAI,WAAU,WAAW;AACvB,iBAAS;aACJ;AACL,uBAAe,KAAK,UAAU,KAAK,UAAU,QAAQ;;;IAIzD,gBAAgB;AACd,aAAO,KAAK,aAAa;;;AClF7B,MAAM,YAAU;IACd,WAAW;IACX,WAAW;IACX,YAAY;IACZ,aAAa;IACb,eAAe;;AAGjB,MAAM,gBAAc;IAClB,WAAW;IACX,WAAW;IACX,YAAY;IACZ,aAAa;IACb,eAAe;;AAEjB,MAAM,SAAO;AACb,MAAM,oBAAkB;AACxB,MAAM,oBAAkB;AAExB,MAAM,kBAAmB,gBAAe;AAExC,uBAAe;IACb,YAAY,QAAQ;AAClB,WAAK,UAAU,KAAK,WAAW;AAC/B,WAAK,cAAc;AACnB,WAAK,WAAW;;IAGlB,KAAK,UAAU;AACb,UAAI,CAAC,KAAK,QAAQ,WAAW;AAC3B,gBAAQ;AACR;;AAGF,WAAK;AAEL,UAAI,KAAK,QAAQ,YAAY;AAC3B,eAAO,KAAK;;AAGd,WAAK,cAAc,UAAU,IAAI;AAEjC,WAAK,kBAAkB,MAAM;AAC3B,gBAAQ;;;IAIZ,KAAK,UAAU;AACb,UAAI,CAAC,KAAK,QAAQ,WAAW;AAC3B,gBAAQ;AACR;;AAGF,WAAK,cAAc,UAAU,OAAO;AAEpC,WAAK,kBAAkB,MAAM;AAC3B,aAAK;AACL,gBAAQ;;;IAMZ,cAAc;AACZ,UAAI,CAAC,KAAK,UAAU;AAClB,cAAM,WAAW,SAAS,cAAc;AACxC,iBAAS,YAAY,KAAK,QAAQ;AAClC,YAAI,KAAK,QAAQ,YAAY;AAC3B,mBAAS,UAAU,IAAI;;AAGzB,aAAK,WAAW;;AAGlB,aAAO,KAAK;;IAGd,WAAW,QAAQ;AACjB,eAAS;WACJ;WACC,OAAO,WAAW,WAAW,SAAS;;AAI5C,aAAO,cAAc,WAAW,OAAO;AACvC,sBAAgB,QAAM,QAAQ;AAC9B,aAAO;;IAGT,UAAU;AACR,UAAI,KAAK,aAAa;AACpB;;AAGF,WAAK,QAAQ,YAAY,OAAO,KAAK;AAErC,mBAAa,GAAG,KAAK,eAAe,iBAAiB,MAAM;AACzD,gBAAQ,KAAK,QAAQ;;AAGvB,WAAK,cAAc;;IAGrB,UAAU;AACR,UAAI,CAAC,KAAK,aAAa;AACrB;;AAGF,mBAAa,IAAI,KAAK,UAAU;AAEhC,WAAK,SAAS;AACd,WAAK,cAAc;;IAGrB,kBAAkB,UAAU;AAC1B,6BAAuB,UAAU,KAAK,eAAe,KAAK,QAAQ;;;AClHtE,MAAM,YAAU;IACd,aAAa;IACb,WAAW;;AAGb,MAAM,gBAAc;IAClB,aAAa;IACb,WAAW;;AAGb,MAAM,SAAO;AACb,MAAM,aAAW;AACjB,MAAM,cAAa,IAAG;AACtB,MAAM,kBAAiB,UAAS;AAChC,MAAM,oBAAqB,cAAa;AAExC,MAAM,UAAU;AAChB,MAAM,kBAAkB;AACxB,MAAM,mBAAmB;AAEzB,wBAAgB;IACd,YAAY,QAAQ;AAClB,WAAK,UAAU,KAAK,WAAW;AAC/B,WAAK,YAAY;AACjB,WAAK,uBAAuB;;IAG9B,WAAW;AACT,YAAM;QAAE;QAAa;UAAc,KAAK;AAExC,UAAI,KAAK,WAAW;AAClB;;AAGF,UAAI,WAAW;AACb,oBAAY;;AAGd,mBAAa,IAAI,UAAU;AAC3B,mBAAa,GAAG,UAAU,iBAAe,YAAS,KAAK,eAAe;AACtE,mBAAa,GAAG,UAAU,mBAAmB,YAAS,KAAK,eAAe;AAE1E,WAAK,YAAY;;IAGnB,aAAa;AACX,UAAI,CAAC,KAAK,WAAW;AACnB;;AAGF,WAAK,YAAY;AACjB,mBAAa,IAAI,UAAU;;IAK7B,eAAe,QAAO;AACpB,YAAM;QAAE;UAAW;AACnB,YAAM;QAAE;UAAgB,KAAK;AAE7B,UAAI,WAAW,YAAY,WAAW,eAAe,YAAY,SAAS,SAAS;AACjF;;AAGF,YAAM,WAAW,eAAe,kBAAkB;AAElD,UAAI,SAAS,WAAW,GAAG;AACzB,oBAAY;iBACH,KAAK,yBAAyB,kBAAkB;AACzD,iBAAS,SAAS,SAAS,GAAG;aACzB;AACL,iBAAS,GAAG;;;IAIhB,eAAe,QAAO;AACpB,UAAI,OAAM,QAAQ,SAAS;AACzB;;AAGF,WAAK,uBAAuB,OAAM,WAAW,mBAAmB;;IAGlE,WAAW,QAAQ;AACjB,eAAS;WACJ;WACC,OAAO,WAAW,WAAW,SAAS;;AAE5C,sBAAgB,QAAM,QAAQ;AAC9B,aAAO;;;ACtEX,MAAM,SAAO;AACb,MAAM,aAAW;AACjB,MAAM,cAAa,IAAG;AACtB,MAAM,iBAAe;AACrB,MAAM,eAAa;AAEnB,MAAM,YAAU;IACd,UAAU;IACV,UAAU;IACV,OAAO;;AAGT,MAAM,gBAAc;IAClB,UAAU;IACV,UAAU;IACV,OAAO;;AAGT,MAAM,eAAc,OAAM;AAC1B,MAAM,uBAAwB,gBAAe;AAC7C,MAAM,iBAAgB,SAAQ;AAC9B,MAAM,eAAc,OAAM;AAC1B,MAAM,gBAAe,QAAO;AAC5B,MAAM,eAAgB,SAAQ;AAC9B,MAAM,sBAAuB,gBAAe;AAC5C,MAAM,0BAAyB,kBAAiB;AAChD,MAAM,wBAAyB,kBAAiB;AAChD,MAAM,0BAA2B,oBAAmB;AACpD,MAAM,yBAAwB,QAAO,cAAY;AAEjD,MAAM,kBAAkB;AACxB,MAAM,oBAAkB;AACxB,MAAM,oBAAkB;AACxB,MAAM,oBAAoB;AAE1B,MAAM,kBAAgB;AACtB,MAAM,kBAAkB;AACxB,MAAM,sBAAsB;AAC5B,MAAM,yBAAuB;AAQ7B,4BAAoB,eAAc;IAChC,YAAY,SAAS,QAAQ;AAC3B,YAAM;AAEN,WAAK,UAAU,KAAK,WAAW;AAC/B,WAAK,UAAU,eAAe,QAAQ,iBAAiB,KAAK;AAC5D,WAAK,YAAY,KAAK;AACtB,WAAK,aAAa,KAAK;AACvB,WAAK,WAAW;AAChB,WAAK,uBAAuB;AAC5B,WAAK,mBAAmB;AACxB,WAAK,aAAa,IAAI;;eAKb,UAAU;AACnB,aAAO;;eAGE,OAAO;AAChB,aAAO;;IAKT,OAAO,eAAe;AACpB,aAAO,KAAK,WAAW,KAAK,SAAS,KAAK,KAAK;;IAGjD,KAAK,eAAe;AAClB,UAAI,KAAK,YAAY,KAAK,kBAAkB;AAC1C;;AAGF,YAAM,YAAY,aAAa,QAAQ,KAAK,UAAU,cAAY;QAChE;;AAGF,UAAI,UAAU,kBAAkB;AAC9B;;AAGF,WAAK,WAAW;AAEhB,UAAI,KAAK,eAAe;AACtB,aAAK,mBAAmB;;AAG1B,WAAK,WAAW;AAEhB,eAAS,KAAK,UAAU,IAAI;AAE5B,WAAK;AAEL,WAAK;AACL,WAAK;AAEL,mBAAa,GAAG,KAAK,SAAS,yBAAyB,MAAM;AAC3D,qBAAa,IAAI,KAAK,UAAU,uBAAuB,YAAS;AAC9D,cAAI,OAAM,WAAW,KAAK,UAAU;AAClC,iBAAK,uBAAuB;;;;AAKlC,WAAK,cAAc,MAAM,KAAK,aAAa;;IAG7C,OAAO;AACL,UAAI,CAAC,KAAK,YAAY,KAAK,kBAAkB;AAC3C;;AAGF,YAAM,YAAY,aAAa,QAAQ,KAAK,UAAU;AAEtD,UAAI,UAAU,kBAAkB;AAC9B;;AAGF,WAAK,WAAW;AAChB,YAAM,aAAa,KAAK;AAExB,UAAI,YAAY;AACd,aAAK,mBAAmB;;AAG1B,WAAK;AACL,WAAK;AAEL,WAAK,WAAW;AAEhB,WAAK,SAAS,UAAU,OAAO;AAE/B,mBAAa,IAAI,KAAK,UAAU;AAChC,mBAAa,IAAI,KAAK,SAAS;AAE/B,WAAK,eAAe,MAAM,KAAK,cAAc,KAAK,UAAU;;IAG9D,UAAU;AACR,OAAC,QAAQ,KAAK,SACX,QAAQ,iBAAe,aAAa,IAAI,aAAa;AAExD,WAAK,UAAU;AACf,WAAK,WAAW;AAChB,YAAM;;IAGR,eAAe;AACb,WAAK;;IAKP,sBAAsB;AACpB,aAAO,IAAI,SAAS;QAClB,WAAW,QAAQ,KAAK,QAAQ;QAChC,YAAY,KAAK;;;IAIrB,uBAAuB;AACrB,aAAO,IAAI,UAAU;QACnB,aAAa,KAAK;;;IAItB,WAAW,QAAQ;AACjB,eAAS;WACJ;WACA,YAAY,kBAAkB,KAAK;WAClC,OAAO,WAAW,WAAW,SAAS;;AAE5C,sBAAgB,QAAM,QAAQ;AAC9B,aAAO;;IAGT,aAAa,eAAe;AAC1B,YAAM,aAAa,KAAK;AACxB,YAAM,YAAY,eAAe,QAAQ,qBAAqB,KAAK;AAEnE,UAAI,CAAC,KAAK,SAAS,cAAc,KAAK,SAAS,WAAW,aAAa,KAAK,cAAc;AAExF,iBAAS,KAAK,OAAO,KAAK;;AAG5B,WAAK,SAAS,MAAM,UAAU;AAC9B,WAAK,SAAS,gBAAgB;AAC9B,WAAK,SAAS,aAAa,cAAc;AACzC,WAAK,SAAS,aAAa,QAAQ;AACnC,WAAK,SAAS,YAAY;AAE1B,UAAI,WAAW;AACb,kBAAU,YAAY;;AAGxB,UAAI,YAAY;AACd,eAAO,KAAK;;AAGd,WAAK,SAAS,UAAU,IAAI;AAE5B,YAAM,qBAAqB,MAAM;AAC/B,YAAI,KAAK,QAAQ,OAAO;AACtB,eAAK,WAAW;;AAGlB,aAAK,mBAAmB;AACxB,qBAAa,QAAQ,KAAK,UAAU,eAAa;UAC/C;;;AAIJ,WAAK,eAAe,oBAAoB,KAAK,SAAS;;IAGxD,kBAAkB;AAChB,UAAI,KAAK,UAAU;AACjB,qBAAa,GAAG,KAAK,UAAU,yBAAuB,YAAS;AAC7D,cAAI,KAAK,QAAQ,YAAY,OAAM,QAAQ,cAAY;AACrD,mBAAM;AACN,iBAAK;qBACI,CAAC,KAAK,QAAQ,YAAY,OAAM,QAAQ,cAAY;AAC7D,iBAAK;;;aAGJ;AACL,qBAAa,IAAI,KAAK,UAAU;;;IAIpC,kBAAkB;AAChB,UAAI,KAAK,UAAU;AACjB,qBAAa,GAAG,QAAQ,cAAc,MAAM,KAAK;aAC5C;AACL,qBAAa,IAAI,QAAQ;;;IAI7B,aAAa;AACX,WAAK,SAAS,MAAM,UAAU;AAC9B,WAAK,SAAS,aAAa,eAAe;AAC1C,WAAK,SAAS,gBAAgB;AAC9B,WAAK,SAAS,gBAAgB;AAC9B,WAAK,mBAAmB;AACxB,WAAK,UAAU,KAAK,MAAM;AACxB,iBAAS,KAAK,UAAU,OAAO;AAC/B,aAAK;AACL,aAAK,WAAW;AAChB,qBAAa,QAAQ,KAAK,UAAU;;;IAIxC,cAAc,UAAU;AACtB,mBAAa,GAAG,KAAK,UAAU,qBAAqB,YAAS;AAC3D,YAAI,KAAK,sBAAsB;AAC7B,eAAK,uBAAuB;AAC5B;;AAGF,YAAI,OAAM,WAAW,OAAM,eAAe;AACxC;;AAGF,YAAI,KAAK,QAAQ,aAAa,MAAM;AAClC,eAAK;mBACI,KAAK,QAAQ,aAAa,UAAU;AAC7C,eAAK;;;AAIT,WAAK,UAAU,KAAK;;IAGtB,cAAc;AACZ,aAAO,KAAK,SAAS,UAAU,SAAS;;IAG1C,6BAA6B;AAC3B,YAAM,YAAY,aAAa,QAAQ,KAAK,UAAU;AACtD,UAAI,UAAU,kBAAkB;AAC9B;;AAGF,YAAM;QAAE;QAAW;QAAc;UAAU,KAAK;AAChD,YAAM,qBAAqB,eAAe,SAAS,gBAAgB;AAGnE,UAAK,CAAC,sBAAsB,MAAM,cAAc,YAAa,UAAU,SAAS,oBAAoB;AAClG;;AAGF,UAAI,CAAC,oBAAoB;AACvB,cAAM,YAAY;;AAGpB,gBAAU,IAAI;AACd,WAAK,eAAe,MAAM;AACxB,kBAAU,OAAO;AACjB,YAAI,CAAC,oBAAoB;AACvB,eAAK,eAAe,MAAM;AACxB,kBAAM,YAAY;aACjB,KAAK;;SAET,KAAK;AAER,WAAK,SAAS;;IAOhB,gBAAgB;AACd,YAAM,qBAAqB,KAAK,SAAS,eAAe,SAAS,gBAAgB;AACjF,YAAM,iBAAiB,KAAK,WAAW;AACvC,YAAM,oBAAoB,iBAAiB;AAE3C,UAAK,CAAC,qBAAqB,sBAAsB,CAAC,WAAa,qBAAqB,CAAC,sBAAsB,SAAU;AACnH,aAAK,SAAS,MAAM,cAAe,GAAE;;AAGvC,UAAK,qBAAqB,CAAC,sBAAsB,CAAC,WAAa,CAAC,qBAAqB,sBAAsB,SAAU;AACnH,aAAK,SAAS,MAAM,eAAgB,GAAE;;;IAI1C,oBAAoB;AAClB,WAAK,SAAS,MAAM,cAAc;AAClC,WAAK,SAAS,MAAM,eAAe;;WAK9B,gBAAgB,QAAQ,eAAe;AAC5C,aAAO,KAAK,KAAK,WAAY;AAC3B,cAAM,OAAO,MAAM,oBAAoB,MAAM;AAE7C,YAAI,OAAO,WAAW,UAAU;AAC9B;;AAGF,YAAI,OAAO,KAAK,YAAY,aAAa;AACvC,gBAAM,IAAI,UAAW,oBAAmB;;AAG1C,aAAK,QAAQ;;;;AAWnB,eAAa,GAAG,UAAU,wBAAsB,wBAAsB,SAAU,QAAO;AACrF,UAAM,SAAS,uBAAuB;AAEtC,QAAI,CAAC,KAAK,QAAQ,SAAS,KAAK,UAAU;AACxC,aAAM;;AAGR,iBAAa,IAAI,QAAQ,cAAY,eAAa;AAChD,UAAI,UAAU,kBAAkB;AAE9B;;AAGF,mBAAa,IAAI,QAAQ,gBAAc,MAAM;AAC3C,YAAI,WAAU,OAAO;AACnB,eAAK;;;;AAMX,UAAM,eAAe,eAAe,QAAQ;AAC5C,QAAI,cAAc;AAChB,YAAM,YAAY,cAAc;;AAGlC,UAAM,OAAO,MAAM,oBAAoB;AAEvC,SAAK,OAAO;;AAGd,uBAAqB;AASrB,qBAAmB;ACrZnB,MAAM,SAAO;AACb,MAAM,aAAW;AACjB,MAAM,cAAa,IAAG;AACtB,MAAM,iBAAe;AACrB,MAAM,wBAAuB,OAAM,cAAY;AAC/C,MAAM,aAAa;AAEnB,MAAM,YAAU;IACd,UAAU;IACV,UAAU;IACV,QAAQ;;AAGV,MAAM,gBAAc;IAClB,UAAU;IACV,UAAU;IACV,QAAQ;;AAGV,MAAM,oBAAkB;AACxB,MAAM,sBAAsB;AAC5B,MAAM,gBAAgB;AAEtB,MAAM,eAAc,OAAM;AAC1B,MAAM,gBAAe,QAAO;AAC5B,MAAM,eAAc,OAAM;AAC1B,MAAM,iBAAgB,SAAQ;AAC9B,MAAM,yBAAwB,QAAO,cAAY;AACjD,MAAM,wBAAyB,kBAAiB;AAEhD,MAAM,yBAAuB;AAQ7B,gCAAwB,eAAc;IACpC,YAAY,SAAS,QAAQ;AAC3B,YAAM;AAEN,WAAK,UAAU,KAAK,WAAW;AAC/B,WAAK,WAAW;AAChB,WAAK,YAAY,KAAK;AACtB,WAAK,aAAa,KAAK;AACvB,WAAK;;eAKI,OAAO;AAChB,aAAO;;eAGE,UAAU;AACnB,aAAO;;IAKT,OAAO,eAAe;AACpB,aAAO,KAAK,WAAW,KAAK,SAAS,KAAK,KAAK;;IAGjD,KAAK,eAAe;AAClB,UAAI,KAAK,UAAU;AACjB;;AAGF,YAAM,YAAY,aAAa,QAAQ,KAAK,UAAU,cAAY;QAAE;;AAEpE,UAAI,UAAU,kBAAkB;AAC9B;;AAGF,WAAK,WAAW;AAChB,WAAK,SAAS,MAAM,aAAa;AAEjC,WAAK,UAAU;AAEf,UAAI,CAAC,KAAK,QAAQ,QAAQ;AACxB,YAAI,kBAAkB;;AAGxB,WAAK,SAAS,gBAAgB;AAC9B,WAAK,SAAS,aAAa,cAAc;AACzC,WAAK,SAAS,aAAa,QAAQ;AACnC,WAAK,SAAS,UAAU,IAAI;AAE5B,YAAM,mBAAmB,MAAM;AAC7B,YAAI,CAAC,KAAK,QAAQ,QAAQ;AACxB,eAAK,WAAW;;AAGlB,qBAAa,QAAQ,KAAK,UAAU,eAAa;UAAE;;;AAGrD,WAAK,eAAe,kBAAkB,KAAK,UAAU;;IAGvD,OAAO;AACL,UAAI,CAAC,KAAK,UAAU;AAClB;;AAGF,YAAM,YAAY,aAAa,QAAQ,KAAK,UAAU;AAEtD,UAAI,UAAU,kBAAkB;AAC9B;;AAGF,WAAK,WAAW;AAChB,WAAK,SAAS;AACd,WAAK,WAAW;AAChB,WAAK,SAAS,UAAU,OAAO;AAC/B,WAAK,UAAU;AAEf,YAAM,mBAAmB,MAAM;AAC7B,aAAK,SAAS,aAAa,eAAe;AAC1C,aAAK,SAAS,gBAAgB;AAC9B,aAAK,SAAS,gBAAgB;AAC9B,aAAK,SAAS,MAAM,aAAa;AAEjC,YAAI,CAAC,KAAK,QAAQ,QAAQ;AACxB,cAAI,kBAAkB;;AAGxB,qBAAa,QAAQ,KAAK,UAAU;;AAGtC,WAAK,eAAe,kBAAkB,KAAK,UAAU;;IAGvD,UAAU;AACR,WAAK,UAAU;AACf,WAAK,WAAW;AAChB,YAAM;;IAKR,WAAW,QAAQ;AACjB,eAAS;WACJ;WACA,YAAY,kBAAkB,KAAK;WAClC,OAAO,WAAW,WAAW,SAAS;;AAE5C,sBAAgB,QAAM,QAAQ;AAC9B,aAAO;;IAGT,sBAAsB;AACpB,aAAO,IAAI,SAAS;QAClB,WAAW;QACX,WAAW,KAAK,QAAQ;QACxB,YAAY;QACZ,aAAa,KAAK,SAAS;QAC3B,eAAe,MAAM,KAAK;;;IAI9B,uBAAuB;AACrB,aAAO,IAAI,UAAU;QACnB,aAAa,KAAK;;;IAItB,qBAAqB;AACnB,mBAAa,GAAG,KAAK,UAAU,uBAAuB,YAAS;AAC7D,YAAI,KAAK,QAAQ,YAAY,OAAM,QAAQ,YAAY;AACrD,eAAK;;;;WAOJ,gBAAgB,QAAQ;AAC7B,aAAO,KAAK,KAAK,WAAY;AAC3B,cAAM,OAAO,UAAU,oBAAoB,MAAM;AAEjD,YAAI,OAAO,WAAW,UAAU;AAC9B;;AAGF,YAAI,KAAK,YAAY,UAAa,OAAO,WAAW,QAAQ,WAAW,eAAe;AACpF,gBAAM,IAAI,UAAW,oBAAmB;;AAG1C,aAAK,QAAQ;;;;AAWnB,eAAa,GAAG,UAAU,wBAAsB,wBAAsB,SAAU,QAAO;AACrF,UAAM,SAAS,uBAAuB;AAEtC,QAAI,CAAC,KAAK,QAAQ,SAAS,KAAK,UAAU;AACxC,aAAM;;AAGR,QAAI,YAAW,OAAO;AACpB;;AAGF,iBAAa,IAAI,QAAQ,gBAAc,MAAM;AAE3C,UAAI,WAAU,OAAO;AACnB,aAAK;;;AAKT,UAAM,eAAe,eAAe,QAAQ;AAC5C,QAAI,gBAAgB,iBAAiB,QAAQ;AAC3C,gBAAU,YAAY,cAAc;;AAGtC,UAAM,OAAO,UAAU,oBAAoB;AAC3C,SAAK,OAAO;;AAGd,eAAa,GAAG,QAAQ,uBAAqB,MAC3C,eAAe,KAAK,eAAe,QAAQ,QAAM,UAAU,oBAAoB,IAAI;AAGrF,uBAAqB;AAOrB,qBAAmB;ACtQnB,MAAM,gBAAgB,oBAAI,IAAI,CAC5B,cACA,QACA,QACA,YACA,YACA,UACA,OACA;AAGF,MAAM,yBAAyB;AAO/B,MAAM,mBAAmB;AAOzB,MAAM,mBAAmB;AAEzB,MAAM,mBAAmB,CAAC,WAAW,yBAAyB;AAC5D,UAAM,gBAAgB,UAAU,SAAS;AAEzC,QAAI,qBAAqB,SAAS,gBAAgB;AAChD,UAAI,cAAc,IAAI,gBAAgB;AACpC,eAAO,QAAQ,iBAAiB,KAAK,UAAU,cAAc,iBAAiB,KAAK,UAAU;;AAG/F,aAAO;;AAGT,UAAM,SAAS,qBAAqB,OAAO,oBAAkB,0BAA0B;AAGvF,aAAS,IAAI,GAAG,MAAM,OAAO,QAAQ,IAAI,KAAK,KAAK;AACjD,UAAI,OAAO,GAAG,KAAK,gBAAgB;AACjC,eAAO;;;AAIX,WAAO;;AAGF,MAAM,mBAAmB;IAE9B,KAAK,CAAC,SAAS,OAAO,MAAM,QAAQ,QAAQ;IAC5C,GAAG,CAAC,UAAU,QAAQ,SAAS;IAC/B,MAAM;IACN,GAAG;IACH,IAAI;IACJ,KAAK;IACL,MAAM;IACN,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,KAAK,CAAC,OAAO,UAAU,OAAO,SAAS,SAAS;IAChD,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,KAAK;IACL,GAAG;IACH,OAAO;IACP,MAAM;IACN,KAAK;IACL,KAAK;IACL,QAAQ;IACR,GAAG;IACH,IAAI;;AAGC,wBAAsB,YAAY,WAAW,YAAY;AAC9D,QAAI,CAAC,WAAW,QAAQ;AACtB,aAAO;;AAGT,QAAI,cAAc,OAAO,eAAe,YAAY;AAClD,aAAO,WAAW;;AAGpB,UAAM,YAAY,IAAI,OAAO;AAC7B,UAAM,kBAAkB,UAAU,gBAAgB,YAAY;AAC9D,UAAM,WAAW,GAAG,OAAO,GAAG,gBAAgB,KAAK,iBAAiB;AAEpE,aAAS,IAAI,GAAG,MAAM,SAAS,QAAQ,IAAI,KAAK,KAAK;AACnD,YAAM,UAAU,SAAS;AACzB,YAAM,cAAc,QAAQ,SAAS;AAErC,UAAI,CAAC,OAAO,KAAK,WAAW,SAAS,cAAc;AACjD,gBAAQ;AAER;;AAGF,YAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ;AAC3C,YAAM,oBAAoB,GAAG,OAAO,UAAU,QAAQ,IAAI,UAAU,gBAAgB;AAEpF,oBAAc,QAAQ,eAAa;AACjC,YAAI,CAAC,iBAAiB,WAAW,oBAAoB;AACnD,kBAAQ,gBAAgB,UAAU;;;;AAKxC,WAAO,gBAAgB,KAAK;;AC5F9B,MAAM,SAAO;AACb,MAAM,aAAW;AACjB,MAAM,cAAa,IAAG;AACtB,MAAM,iBAAe;AACrB,MAAM,wBAAwB,oBAAI,IAAI,CAAC,YAAY,aAAa;AAEhE,MAAM,gBAAc;IAClB,WAAW;IACX,UAAU;IACV,OAAO;IACP,SAAS;IACT,OAAO;IACP,MAAM;IACN,UAAU;IACV,WAAW;IACX,QAAQ;IACR,WAAW;IACX,oBAAoB;IACpB,UAAU;IACV,aAAa;IACb,UAAU;IACV,YAAY;IACZ,WAAW;IACX,cAAc;;AAGhB,MAAM,gBAAgB;IACpB,MAAM;IACN,KAAK;IACL,OAAO,UAAU,SAAS;IAC1B,QAAQ;IACR,MAAM,UAAU,UAAU;;AAG5B,MAAM,YAAU;IACd,WAAW;IACX,UAAU;IAIV,SAAS;IACT,OAAO;IACP,OAAO;IACP,MAAM;IACN,UAAU;IACV,WAAW;IACX,QAAQ,CAAC,GAAG;IACZ,WAAW;IACX,oBAAoB,CAAC,OAAO,SAAS,UAAU;IAC/C,UAAU;IACV,aAAa;IACb,UAAU;IACV,YAAY;IACZ,WAAW;IACX,cAAc;;AAGhB,MAAM,UAAQ;IACZ,MAAO,OAAM;IACb,QAAS,SAAQ;IACjB,MAAO,OAAM;IACb,OAAQ,QAAO;IACf,UAAW,WAAU;IACrB,OAAQ,QAAO;IACf,SAAU,UAAS;IACnB,UAAW,WAAU;IACrB,YAAa,aAAY;IACzB,YAAa,aAAY;;AAG3B,MAAM,oBAAkB;AACxB,MAAM,mBAAmB;AACzB,MAAM,oBAAkB;AAExB,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AAExB,MAAM,yBAAyB;AAC/B,MAAM,iBAAkB,IAAG;AAE3B,MAAM,mBAAmB;AAEzB,MAAM,gBAAgB;AACtB,MAAM,gBAAgB;AACtB,MAAM,gBAAgB;AACtB,MAAM,iBAAiB;AAQvB,8BAAsB,eAAc;IAClC,YAAY,SAAS,QAAQ;AAC3B,UAAI,OAAO,gBAAW,aAAa;AACjC,cAAM,IAAI,UAAU;;AAGtB,YAAM;AAGN,WAAK,aAAa;AAClB,WAAK,WAAW;AAChB,WAAK,cAAc;AACnB,WAAK,iBAAiB;AACtB,WAAK,UAAU;AAGf,WAAK,UAAU,KAAK,WAAW;AAC/B,WAAK,MAAM;AAEX,WAAK;;eAKI,UAAU;AACnB,aAAO;;eAGE,OAAO;AAChB,aAAO;;eAGE,QAAQ;AACjB,aAAO;;eAGE,cAAc;AACvB,aAAO;;IAKT,SAAS;AACP,WAAK,aAAa;;IAGpB,UAAU;AACR,WAAK,aAAa;;IAGpB,gBAAgB;AACd,WAAK,aAAa,CAAC,KAAK;;IAG1B,OAAO,QAAO;AACZ,UAAI,CAAC,KAAK,YAAY;AACpB;;AAGF,UAAI,QAAO;AACT,cAAM,UAAU,KAAK,6BAA6B;AAElD,gBAAQ,eAAe,QAAQ,CAAC,QAAQ,eAAe;AAEvD,YAAI,QAAQ,wBAAwB;AAClC,kBAAQ,OAAO,MAAM;eAChB;AACL,kBAAQ,OAAO,MAAM;;aAElB;AACL,YAAI,KAAK,gBAAgB,UAAU,SAAS,oBAAkB;AAC5D,eAAK,OAAO,MAAM;AAClB;;AAGF,aAAK,OAAO,MAAM;;;IAItB,UAAU;AACR,mBAAa,KAAK;AAElB,mBAAa,IAAI,KAAK,SAAS,QAAQ,iBAAiB,kBAAkB,KAAK;AAE/E,UAAI,KAAK,KAAK;AACZ,aAAK,IAAI;;AAGX,WAAK;AACL,YAAM;;IAGR,OAAO;AACL,UAAI,KAAK,SAAS,MAAM,YAAY,QAAQ;AAC1C,cAAM,IAAI,MAAM;;AAGlB,UAAI,CAAE,MAAK,mBAAmB,KAAK,aAAa;AAC9C;;AAGF,YAAM,YAAY,aAAa,QAAQ,KAAK,UAAU,KAAK,YAAY,MAAM;AAC7E,YAAM,aAAa,eAAe,KAAK;AACvC,YAAM,aAAa,eAAe,OAChC,KAAK,SAAS,cAAc,gBAAgB,SAAS,KAAK,YAC1D,WAAW,SAAS,KAAK;AAE3B,UAAI,UAAU,oBAAoB,CAAC,YAAY;AAC7C;;AAKF,UAAI,KAAK,YAAY,SAAS,aAAa,KAAK,OAAO,KAAK,eAAe,KAAK,IAAI,cAAc,wBAAwB,WAAW;AACnI,aAAK;AACL,aAAK,IAAI;AACT,aAAK,MAAM;;AAGb,YAAM,MAAM,KAAK;AACjB,YAAM,QAAQ,OAAO,KAAK,YAAY;AAEtC,UAAI,aAAa,MAAM;AACvB,WAAK,SAAS,aAAa,oBAAoB;AAE/C,UAAI,KAAK,QAAQ,WAAW;AAC1B,YAAI,UAAU,IAAI;;AAGpB,YAAM,YAAY,OAAO,KAAK,QAAQ,cAAc,aAClD,KAAK,QAAQ,UAAU,KAAK,MAAM,KAAK,KAAK,YAC5C,KAAK,QAAQ;AAEf,YAAM,aAAa,KAAK,eAAe;AACvC,WAAK,oBAAoB;AAEzB,YAAM;QAAE;UAAc,KAAK;AAC3B,WAAK,IAAI,KAAK,KAAK,YAAY,UAAU;AAEzC,UAAI,CAAC,KAAK,SAAS,cAAc,gBAAgB,SAAS,KAAK,MAAM;AACnE,kBAAU,OAAO;AACjB,qBAAa,QAAQ,KAAK,UAAU,KAAK,YAAY,MAAM;;AAG7D,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ;aACR;AACL,aAAK,UAAU,AAAO,cAAa,KAAK,UAAU,KAAK,KAAK,iBAAiB;;AAG/E,UAAI,UAAU,IAAI;AAElB,YAAM,cAAc,KAAK,yBAAyB,KAAK,QAAQ;AAC/D,UAAI,aAAa;AACf,YAAI,UAAU,IAAI,GAAG,YAAY,MAAM;;AAOzC,UAAI,kBAAkB,SAAS,iBAAiB;AAC9C,WAAG,OAAO,GAAG,SAAS,KAAK,UAAU,QAAQ,aAAW;AACtD,uBAAa,GAAG,SAAS,aAAa;;;AAI1C,YAAM,WAAW,MAAM;AACrB,cAAM,iBAAiB,KAAK;AAE5B,aAAK,cAAc;AACnB,qBAAa,QAAQ,KAAK,UAAU,KAAK,YAAY,MAAM;AAE3D,YAAI,mBAAmB,iBAAiB;AACtC,eAAK,OAAO,MAAM;;;AAItB,YAAM,aAAa,KAAK,IAAI,UAAU,SAAS;AAC/C,WAAK,eAAe,UAAU,KAAK,KAAK;;IAG1C,OAAO;AACL,UAAI,CAAC,KAAK,SAAS;AACjB;;AAGF,YAAM,MAAM,KAAK;AACjB,YAAM,WAAW,MAAM;AACrB,YAAI,KAAK,wBAAwB;AAC/B;;AAGF,YAAI,KAAK,gBAAgB,kBAAkB;AACzC,cAAI;;AAGN,aAAK;AACL,aAAK,SAAS,gBAAgB;AAC9B,qBAAa,QAAQ,KAAK,UAAU,KAAK,YAAY,MAAM;AAE3D,aAAK;;AAGP,YAAM,YAAY,aAAa,QAAQ,KAAK,UAAU,KAAK,YAAY,MAAM;AAC7E,UAAI,UAAU,kBAAkB;AAC9B;;AAGF,UAAI,UAAU,OAAO;AAIrB,UAAI,kBAAkB,SAAS,iBAAiB;AAC9C,WAAG,OAAO,GAAG,SAAS,KAAK,UACxB,QAAQ,aAAW,aAAa,IAAI,SAAS,aAAa;;AAG/D,WAAK,eAAe,iBAAiB;AACrC,WAAK,eAAe,iBAAiB;AACrC,WAAK,eAAe,iBAAiB;AAErC,YAAM,aAAa,KAAK,IAAI,UAAU,SAAS;AAC/C,WAAK,eAAe,UAAU,KAAK,KAAK;AACxC,WAAK,cAAc;;IAGrB,SAAS;AACP,UAAI,KAAK,YAAY,MAAM;AACzB,aAAK,QAAQ;;;IAMjB,gBAAgB;AACd,aAAO,QAAQ,KAAK;;IAGtB,gBAAgB;AACd,UAAI,KAAK,KAAK;AACZ,eAAO,KAAK;;AAGd,YAAM,UAAU,SAAS,cAAc;AACvC,cAAQ,YAAY,KAAK,QAAQ;AAEjC,YAAM,MAAM,QAAQ,SAAS;AAC7B,WAAK,WAAW;AAChB,UAAI,UAAU,OAAO,mBAAiB;AAEtC,WAAK,MAAM;AACX,aAAO,KAAK;;IAGd,WAAW,KAAK;AACd,WAAK,uBAAuB,KAAK,KAAK,YAAY;;IAGpD,uBAAuB,UAAU,SAAS,UAAU;AAClD,YAAM,kBAAkB,eAAe,QAAQ,UAAU;AAEzD,UAAI,CAAC,WAAW,iBAAiB;AAC/B,wBAAgB;AAChB;;AAIF,WAAK,kBAAkB,iBAAiB;;IAG1C,kBAAkB,SAAS,SAAS;AAClC,UAAI,YAAY,MAAM;AACpB;;AAGF,UAAI,WAAU,UAAU;AACtB,kBAAU,WAAW;AAGrB,YAAI,KAAK,QAAQ,MAAM;AACrB,cAAI,QAAQ,eAAe,SAAS;AAClC,oBAAQ,YAAY;AACpB,oBAAQ,OAAO;;eAEZ;AACL,kBAAQ,cAAc,QAAQ;;AAGhC;;AAGF,UAAI,KAAK,QAAQ,MAAM;AACrB,YAAI,KAAK,QAAQ,UAAU;AACzB,oBAAU,aAAa,SAAS,KAAK,QAAQ,WAAW,KAAK,QAAQ;;AAGvE,gBAAQ,YAAY;aACf;AACL,gBAAQ,cAAc;;;IAI1B,WAAW;AACT,YAAM,QAAQ,KAAK,SAAS,aAAa,6BAA6B,KAAK,QAAQ;AAEnF,aAAO,KAAK,yBAAyB;;IAGvC,iBAAiB,YAAY;AAC3B,UAAI,eAAe,SAAS;AAC1B,eAAO;;AAGT,UAAI,eAAe,QAAQ;AACzB,eAAO;;AAGT,aAAO;;IAKT,6BAA6B,QAAO,SAAS;AAC3C,aAAO,WAAW,KAAK,YAAY,oBAAoB,OAAM,gBAAgB,KAAK;;IAGpF,aAAa;AACX,YAAM;QAAE;UAAW,KAAK;AAExB,UAAI,OAAO,YAAW,UAAU;AAC9B,eAAO,QAAO,MAAM,KAAK,IAAI,SAAO,OAAO,SAAS,KAAK;;AAG3D,UAAI,OAAO,YAAW,YAAY;AAChC,eAAO,gBAAc,QAAO,YAAY,KAAK;;AAG/C,aAAO;;IAGT,yBAAyB,SAAS;AAChC,aAAO,OAAO,YAAY,aAAa,QAAQ,KAAK,KAAK,YAAY;;IAGvE,iBAAiB,YAAY;AAC3B,YAAM,wBAAwB;QAC5B,WAAW;QACX,WAAW,CACT;UACE,MAAM;UACN,SAAS;YACP,oBAAoB,KAAK,QAAQ;;WAGrC;UACE,MAAM;UACN,SAAS;YACP,QAAQ,KAAK;;WAGjB;UACE,MAAM;UACN,SAAS;YACP,UAAU,KAAK,QAAQ;;WAG3B;UACE,MAAM;UACN,SAAS;YACP,SAAU,IAAG,KAAK,YAAY;;WAGlC;UACE,MAAM;UACN,SAAS;UACT,OAAO;UACP,IAAI,UAAQ,KAAK,6BAA6B;;QAGlD,eAAe,UAAQ;AACrB,cAAI,KAAK,QAAQ,cAAc,KAAK,WAAW;AAC7C,iBAAK,6BAA6B;;;;AAKxC,aAAO;WACF;WACC,OAAO,KAAK,QAAQ,iBAAiB,aAAa,KAAK,QAAQ,aAAa,yBAAyB,KAAK,QAAQ;;;IAI1H,oBAAoB,YAAY;AAC9B,WAAK,gBAAgB,UAAU,IAAK,GAAE,KAAK,0BAA0B,KAAK,iBAAiB;;IAG7F,eAAe,WAAW;AACxB,aAAO,cAAc,UAAU;;IAGjC,gBAAgB;AACd,YAAM,WAAW,KAAK,QAAQ,QAAQ,MAAM;AAE5C,eAAS,QAAQ,aAAW;AAC1B,YAAI,YAAY,SAAS;AACvB,uBAAa,GAAG,KAAK,UAAU,KAAK,YAAY,MAAM,OAAO,KAAK,QAAQ,UAAU,YAAS,KAAK,OAAO;mBAChG,YAAY,gBAAgB;AACrC,gBAAM,UAAU,YAAY,gBAC1B,KAAK,YAAY,MAAM,aACvB,KAAK,YAAY,MAAM;AACzB,gBAAM,WAAW,YAAY,gBAC3B,KAAK,YAAY,MAAM,aACvB,KAAK,YAAY,MAAM;AAEzB,uBAAa,GAAG,KAAK,UAAU,SAAS,KAAK,QAAQ,UAAU,YAAS,KAAK,OAAO;AACpF,uBAAa,GAAG,KAAK,UAAU,UAAU,KAAK,QAAQ,UAAU,YAAS,KAAK,OAAO;;;AAIzF,WAAK,oBAAoB,MAAM;AAC7B,YAAI,KAAK,UAAU;AACjB,eAAK;;;AAIT,mBAAa,GAAG,KAAK,SAAS,QAAQ,iBAAiB,kBAAkB,KAAK;AAE9E,UAAI,KAAK,QAAQ,UAAU;AACzB,aAAK,UAAU;aACV,KAAK;UACR,SAAS;UACT,UAAU;;aAEP;AACL,aAAK;;;IAIT,YAAY;AACV,YAAM,QAAQ,KAAK,SAAS,aAAa;AACzC,YAAM,oBAAoB,OAAO,KAAK,SAAS,aAAa;AAE5D,UAAI,SAAS,sBAAsB,UAAU;AAC3C,aAAK,SAAS,aAAa,0BAA0B,SAAS;AAC9D,YAAI,SAAS,CAAC,KAAK,SAAS,aAAa,iBAAiB,CAAC,KAAK,SAAS,aAAa;AACpF,eAAK,SAAS,aAAa,cAAc;;AAG3C,aAAK,SAAS,aAAa,SAAS;;;IAIxC,OAAO,QAAO,SAAS;AACrB,gBAAU,KAAK,6BAA6B,QAAO;AAEnD,UAAI,QAAO;AACT,gBAAQ,eACN,OAAM,SAAS,YAAY,gBAAgB,iBACzC;;AAGN,UAAI,QAAQ,gBAAgB,UAAU,SAAS,sBAAoB,QAAQ,gBAAgB,kBAAkB;AAC3G,gBAAQ,cAAc;AACtB;;AAGF,mBAAa,QAAQ;AAErB,cAAQ,cAAc;AAEtB,UAAI,CAAC,QAAQ,QAAQ,SAAS,CAAC,QAAQ,QAAQ,MAAM,MAAM;AACzD,gBAAQ;AACR;;AAGF,cAAQ,WAAW,WAAW,MAAM;AAClC,YAAI,QAAQ,gBAAgB,kBAAkB;AAC5C,kBAAQ;;SAET,QAAQ,QAAQ,MAAM;;IAG3B,OAAO,QAAO,SAAS;AACrB,gBAAU,KAAK,6BAA6B,QAAO;AAEnD,UAAI,QAAO;AACT,gBAAQ,eACN,OAAM,SAAS,aAAa,gBAAgB,iBAC1C,QAAQ,SAAS,SAAS,OAAM;;AAGtC,UAAI,QAAQ,wBAAwB;AAClC;;AAGF,mBAAa,QAAQ;AAErB,cAAQ,cAAc;AAEtB,UAAI,CAAC,QAAQ,QAAQ,SAAS,CAAC,QAAQ,QAAQ,MAAM,MAAM;AACzD,gBAAQ;AACR;;AAGF,cAAQ,WAAW,WAAW,MAAM;AAClC,YAAI,QAAQ,gBAAgB,iBAAiB;AAC3C,kBAAQ;;SAET,QAAQ,QAAQ,MAAM;;IAG3B,uBAAuB;AACrB,iBAAW,WAAW,KAAK,gBAAgB;AACzC,YAAI,KAAK,eAAe,UAAU;AAChC,iBAAO;;;AAIX,aAAO;;IAGT,WAAW,QAAQ;AACjB,YAAM,iBAAiB,YAAY,kBAAkB,KAAK;AAE1D,aAAO,KAAK,gBAAgB,QAAQ,cAAY;AAC9C,YAAI,sBAAsB,IAAI,WAAW;AACvC,iBAAO,eAAe;;;AAI1B,eAAS;WACJ,KAAK,YAAY;WACjB;WACC,OAAO,WAAW,YAAY,SAAS,SAAS;;AAGtD,aAAO,YAAY,OAAO,cAAc,QAAQ,SAAS,OAAO,WAAW,OAAO;AAElF,UAAI,OAAO,OAAO,UAAU,UAAU;AACpC,eAAO,QAAQ;UACb,MAAM,OAAO;UACb,MAAM,OAAO;;;AAIjB,UAAI,OAAO,OAAO,UAAU,UAAU;AACpC,eAAO,QAAQ,OAAO,MAAM;;AAG9B,UAAI,OAAO,OAAO,YAAY,UAAU;AACtC,eAAO,UAAU,OAAO,QAAQ;;AAGlC,sBAAgB,QAAM,QAAQ,KAAK,YAAY;AAE/C,UAAI,OAAO,UAAU;AACnB,eAAO,WAAW,aAAa,OAAO,UAAU,OAAO,WAAW,OAAO;;AAG3E,aAAO;;IAGT,qBAAqB;AACnB,YAAM,SAAS;AAEf,iBAAW,OAAO,KAAK,SAAS;AAC9B,YAAI,KAAK,YAAY,QAAQ,SAAS,KAAK,QAAQ,MAAM;AACvD,iBAAO,OAAO,KAAK,QAAQ;;;AAO/B,aAAO;;IAGT,iBAAiB;AACf,YAAM,MAAM,KAAK;AACjB,YAAM,wBAAwB,IAAI,OAAQ,UAAS,KAAK,8BAA8B;AACtF,YAAM,WAAW,IAAI,aAAa,SAAS,MAAM;AACjD,UAAI,aAAa,QAAQ,SAAS,SAAS,GAAG;AAC5C,iBAAS,IAAI,WAAS,MAAM,QACzB,QAAQ,YAAU,IAAI,UAAU,OAAO;;;IAI9C,uBAAuB;AACrB,aAAO;;IAGT,6BAA6B,YAAY;AACvC,YAAM;QAAE;UAAU;AAElB,UAAI,CAAC,OAAO;AACV;;AAGF,WAAK,MAAM,MAAM,SAAS;AAC1B,WAAK;AACL,WAAK,oBAAoB,KAAK,eAAe,MAAM;;IAGrD,iBAAiB;AACf,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ;AACb,aAAK,UAAU;;;WAMZ,gBAAgB,QAAQ;AAC7B,aAAO,KAAK,KAAK,WAAY;AAC3B,cAAM,OAAO,QAAQ,oBAAoB,MAAM;AAE/C,YAAI,OAAO,WAAW,UAAU;AAC9B,cAAI,OAAO,KAAK,YAAY,aAAa;AACvC,kBAAM,IAAI,UAAW,oBAAmB;;AAG1C,eAAK;;;;;AAab,qBAAmB;ACxuBnB,MAAM,SAAO;AACb,MAAM,aAAW;AACjB,MAAM,cAAa,IAAG;AACtB,MAAM,eAAe;AAErB,MAAM,YAAU;OACX,QAAQ;IACX,WAAW;IACX,QAAQ,CAAC,GAAG;IACZ,SAAS;IACT,SAAS;IACT,UAAU;;AAOZ,MAAM,gBAAc;OACf,QAAQ;IACX,SAAS;;AAGX,MAAM,UAAQ;IACZ,MAAO,OAAM;IACb,QAAS,SAAQ;IACjB,MAAO,OAAM;IACb,OAAQ,QAAO;IACf,UAAW,WAAU;IACrB,OAAQ,QAAO;IACf,SAAU,UAAS;IACnB,UAAW,WAAU;IACrB,YAAa,aAAY;IACzB,YAAa,aAAY;;AAG3B,MAAM,iBAAiB;AACvB,MAAM,mBAAmB;AAQzB,8BAAsB,QAAQ;eAGjB,UAAU;AACnB,aAAO;;eAGE,OAAO;AAChB,aAAO;;eAGE,QAAQ;AACjB,aAAO;;eAGE,cAAc;AACvB,aAAO;;IAKT,gBAAgB;AACd,aAAO,KAAK,cAAc,KAAK;;IAGjC,WAAW,KAAK;AACd,WAAK,uBAAuB,KAAK,KAAK,YAAY;AAClD,WAAK,uBAAuB,KAAK,KAAK,eAAe;;IAKvD,cAAc;AACZ,aAAO,KAAK,yBAAyB,KAAK,QAAQ;;IAGpD,uBAAuB;AACrB,aAAO;;WAKF,gBAAgB,QAAQ;AAC7B,aAAO,KAAK,KAAK,WAAY;AAC3B,cAAM,OAAO,QAAQ,oBAAoB,MAAM;AAE/C,YAAI,OAAO,WAAW,UAAU;AAC9B,cAAI,OAAO,KAAK,YAAY,aAAa;AACvC,kBAAM,IAAI,UAAW,oBAAmB;;AAG1C,eAAK;;;;;AAab,qBAAmB;ACrGnB,MAAM,SAAO;AACb,MAAM,aAAW;AACjB,MAAM,cAAa,IAAG;AACtB,MAAM,iBAAe;AAErB,MAAM,YAAU;IACd,QAAQ;IACR,QAAQ;IACR,QAAQ;;AAGV,MAAM,gBAAc;IAClB,QAAQ;IACR,QAAQ;IACR,QAAQ;;AAGV,MAAM,iBAAkB,WAAU;AAClC,MAAM,eAAgB,SAAQ;AAC9B,MAAM,sBAAuB,OAAM,cAAY;AAE/C,MAAM,2BAA2B;AACjC,MAAM,sBAAoB;AAE1B,MAAM,oBAAoB;AAC1B,MAAM,4BAA0B;AAChC,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAC5B,MAAM,sBAAuB,GAAE,uBAAuB,yBAAyB;AAC/E,MAAM,sBAAoB;AAC1B,MAAM,6BAA2B;AAEjC,MAAM,gBAAgB;AACtB,MAAM,kBAAkB;AAQxB,gCAAwB,eAAc;IACpC,YAAY,SAAS,QAAQ;AAC3B,YAAM;AACN,WAAK,iBAAiB,KAAK,SAAS,YAAY,SAAS,SAAS,KAAK;AACvE,WAAK,UAAU,KAAK,WAAW;AAC/B,WAAK,WAAW;AAChB,WAAK,WAAW;AAChB,WAAK,gBAAgB;AACrB,WAAK,gBAAgB;AAErB,mBAAa,GAAG,KAAK,gBAAgB,cAAc,MAAM,KAAK;AAE9D,WAAK;AACL,WAAK;;eAKI,UAAU;AACnB,aAAO;;eAGE,OAAO;AAChB,aAAO;;IAKT,UAAU;AACR,YAAM,aAAa,KAAK,mBAAmB,KAAK,eAAe,SAC7D,gBACA;AAEF,YAAM,eAAe,KAAK,QAAQ,WAAW,SAC3C,aACA,KAAK,QAAQ;AAEf,YAAM,aAAa,iBAAiB,kBAClC,KAAK,kBACL;AAEF,WAAK,WAAW;AAChB,WAAK,WAAW;AAChB,WAAK,gBAAgB,KAAK;AAE1B,YAAM,UAAU,eAAe,KAAK,qBAAqB,KAAK,QAAQ;AAEtE,cAAQ,IAAI,aAAW;AACrB,cAAM,iBAAiB,uBAAuB;AAC9C,cAAM,SAAS,iBAAiB,eAAe,QAAQ,kBAAkB;AAEzE,YAAI,QAAQ;AACV,gBAAM,YAAY,OAAO;AACzB,cAAI,UAAU,SAAS,UAAU,QAAQ;AACvC,mBAAO,CACL,YAAY,cAAc,QAAQ,MAAM,YACxC;;;AAKN,eAAO;SAEN,OAAO,UAAQ,MACf,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,IACxB,QAAQ,UAAQ;AACf,aAAK,SAAS,KAAK,KAAK;AACxB,aAAK,SAAS,KAAK,KAAK;;;IAI9B,UAAU;AACR,mBAAa,IAAI,KAAK,gBAAgB;AACtC,YAAM;;IAKR,WAAW,QAAQ;AACjB,eAAS;WACJ;WACA,YAAY,kBAAkB,KAAK;WAClC,OAAO,WAAW,YAAY,SAAS,SAAS;;AAGtD,aAAO,SAAS,WAAW,OAAO,WAAW,SAAS;AAEtD,sBAAgB,QAAM,QAAQ;AAE9B,aAAO;;IAGT,gBAAgB;AACd,aAAO,KAAK,mBAAmB,SAC7B,KAAK,eAAe,cACpB,KAAK,eAAe;;IAGxB,mBAAmB;AACjB,aAAO,KAAK,eAAe,gBAAgB,KAAK,IAC9C,SAAS,KAAK,cACd,SAAS,gBAAgB;;IAI7B,mBAAmB;AACjB,aAAO,KAAK,mBAAmB,SAC7B,OAAO,cACP,KAAK,eAAe,wBAAwB;;IAGhD,WAAW;AACT,YAAM,YAAY,KAAK,kBAAkB,KAAK,QAAQ;AACtD,YAAM,eAAe,KAAK;AAC1B,YAAM,YAAY,KAAK,QAAQ,SAAS,eAAe,KAAK;AAE5D,UAAI,KAAK,kBAAkB,cAAc;AACvC,aAAK;;AAGP,UAAI,aAAa,WAAW;AAC1B,cAAM,SAAS,KAAK,SAAS,KAAK,SAAS,SAAS;AAEpD,YAAI,KAAK,kBAAkB,QAAQ;AACjC,eAAK,UAAU;;AAGjB;;AAGF,UAAI,KAAK,iBAAiB,YAAY,KAAK,SAAS,MAAM,KAAK,SAAS,KAAK,GAAG;AAC9E,aAAK,gBAAgB;AACrB,aAAK;AACL;;AAGF,eAAS,IAAI,KAAK,SAAS,QAAQ,OAAM;AACvC,cAAM,iBAAiB,KAAK,kBAAkB,KAAK,SAAS,MACxD,aAAa,KAAK,SAAS,MAC1B,QAAO,KAAK,SAAS,IAAI,OAAO,eAAe,YAAY,KAAK,SAAS,IAAI;AAElF,YAAI,gBAAgB;AAClB,eAAK,UAAU,KAAK,SAAS;;;;IAKnC,UAAU,QAAQ;AAChB,WAAK,gBAAgB;AAErB,WAAK;AAEL,YAAM,UAAU,oBAAoB,MAAM,KACvC,IAAI,cAAa,GAAE,4BAA4B,YAAY,kBAAkB;AAEhF,YAAM,QAAO,eAAe,QAAQ,QAAQ,KAAK,MAAM,KAAK,QAAQ;AAEpE,YAAK,UAAU,IAAI;AACnB,UAAI,MAAK,UAAU,SAAS,2BAA2B;AACrD,uBAAe,QAAQ,4BAA0B,MAAK,QAAQ,sBAC3D,UAAU,IAAI;aACZ;AACL,uBAAe,QAAQ,OAAM,2BAC1B,QAAQ,eAAa;AAGpB,yBAAe,KAAK,WAAY,GAAE,uBAAuB,uBACtD,QAAQ,UAAQ,KAAK,UAAU,IAAI;AAGtC,yBAAe,KAAK,WAAW,oBAC5B,QAAQ,aAAW;AAClB,2BAAe,SAAS,SAAS,oBAC9B,QAAQ,UAAQ,KAAK,UAAU,IAAI;;;;AAKhD,mBAAa,QAAQ,KAAK,gBAAgB,gBAAgB;QACxD,eAAe;;;IAInB,SAAS;AACP,qBAAe,KAAK,qBAAqB,KAAK,QAAQ,QACnD,OAAO,UAAQ,KAAK,UAAU,SAAS,sBACvC,QAAQ,UAAQ,KAAK,UAAU,OAAO;;WAKpC,gBAAgB,QAAQ;AAC7B,aAAO,KAAK,KAAK,WAAY;AAC3B,cAAM,OAAO,UAAU,oBAAoB,MAAM;AAEjD,YAAI,OAAO,WAAW,UAAU;AAC9B;;AAGF,YAAI,OAAO,KAAK,YAAY,aAAa;AACvC,gBAAM,IAAI,UAAW,oBAAmB;;AAG1C,aAAK;;;;AAWX,eAAa,GAAG,QAAQ,qBAAqB,MAAM;AACjD,mBAAe,KAAK,mBACjB,QAAQ,SAAO,IAAI,UAAU;;AAUlC,qBAAmB;AC7QnB,MAAM,SAAO;AACb,MAAM,aAAW;AACjB,MAAM,cAAa,IAAG;AACtB,MAAM,eAAe;AAErB,MAAM,eAAc,OAAM;AAC1B,MAAM,iBAAgB,SAAQ;AAC9B,MAAM,eAAc,OAAM;AAC1B,MAAM,gBAAe,QAAO;AAC5B,MAAM,uBAAwB,QAAO,cAAY;AAEjD,MAAM,2BAA2B;AACjC,MAAM,oBAAoB;AAC1B,MAAM,oBAAkB;AACxB,MAAM,oBAAkB;AAExB,MAAM,oBAAoB;AAC1B,MAAM,0BAA0B;AAChC,MAAM,kBAAkB;AACxB,MAAM,qBAAqB;AAC3B,MAAM,uBAAuB;AAC7B,MAAM,2BAA2B;AACjC,MAAM,iCAAiC;AAQvC,0BAAkB,eAAc;eAGnB,OAAO;AAChB,aAAO;;IAKT,OAAO;AACL,UAAK,KAAK,SAAS,cACjB,KAAK,SAAS,WAAW,aAAa,KAAK,gBAC3C,KAAK,SAAS,UAAU,SAAS,oBAAqB;AACtD;;AAGF,UAAI;AACJ,YAAM,SAAS,uBAAuB,KAAK;AAC3C,YAAM,cAAc,KAAK,SAAS,QAAQ;AAE1C,UAAI,aAAa;AACf,cAAM,eAAe,YAAY,aAAa,QAAQ,YAAY,aAAa,OAAO,qBAAqB;AAC3G,mBAAW,eAAe,KAAK,cAAc;AAC7C,mBAAW,SAAS,SAAS,SAAS;;AAGxC,YAAM,YAAY,WAChB,aAAa,QAAQ,UAAU,cAAY;QACzC,eAAe,KAAK;WAEtB;AAEF,YAAM,YAAY,aAAa,QAAQ,KAAK,UAAU,cAAY;QAChE,eAAe;;AAGjB,UAAI,UAAU,oBAAqB,cAAc,QAAQ,UAAU,kBAAmB;AACpF;;AAGF,WAAK,UAAU,KAAK,UAAU;AAE9B,YAAM,WAAW,MAAM;AACrB,qBAAa,QAAQ,UAAU,gBAAc;UAC3C,eAAe,KAAK;;AAEtB,qBAAa,QAAQ,KAAK,UAAU,eAAa;UAC/C,eAAe;;;AAInB,UAAI,QAAQ;AACV,aAAK,UAAU,QAAQ,OAAO,YAAY;aACrC;AACL;;;IAMJ,UAAU,SAAS,WAAW,UAAU;AACtC,YAAM,iBAAiB,aAAc,WAAU,aAAa,QAAQ,UAAU,aAAa,QACzF,eAAe,KAAK,oBAAoB,aACxC,eAAe,SAAS,WAAW;AAErC,YAAM,SAAS,eAAe;AAC9B,YAAM,kBAAkB,YAAa,UAAU,OAAO,UAAU,SAAS;AAEzE,YAAM,WAAW,MAAM,KAAK,oBAAoB,SAAS,QAAQ;AAEjE,UAAI,UAAU,iBAAiB;AAC7B,eAAO,UAAU,OAAO;AACxB,aAAK,eAAe,UAAU,SAAS;aAClC;AACL;;;IAIJ,oBAAoB,SAAS,QAAQ,UAAU;AAC7C,UAAI,QAAQ;AACV,eAAO,UAAU,OAAO;AAExB,cAAM,gBAAgB,eAAe,QAAQ,gCAAgC,OAAO;AAEpF,YAAI,eAAe;AACjB,wBAAc,UAAU,OAAO;;AAGjC,YAAI,OAAO,aAAa,YAAY,OAAO;AACzC,iBAAO,aAAa,iBAAiB;;;AAIzC,cAAQ,UAAU,IAAI;AACtB,UAAI,QAAQ,aAAa,YAAY,OAAO;AAC1C,gBAAQ,aAAa,iBAAiB;;AAGxC,aAAO;AAEP,UAAI,QAAQ,UAAU,SAAS,oBAAkB;AAC/C,gBAAQ,UAAU,IAAI;;AAGxB,UAAI,SAAS,QAAQ;AACrB,UAAI,UAAU,OAAO,aAAa,MAAM;AACtC,iBAAS,OAAO;;AAGlB,UAAI,UAAU,OAAO,UAAU,SAAS,2BAA2B;AACjE,cAAM,kBAAkB,QAAQ,QAAQ;AAExC,YAAI,iBAAiB;AACnB,yBAAe,KAAK,0BAA0B,iBAC3C,QAAQ,cAAY,SAAS,UAAU,IAAI;;AAGhD,gBAAQ,aAAa,iBAAiB;;AAGxC,UAAI,UAAU;AACZ;;;WAMG,gBAAgB,QAAQ;AAC7B,aAAO,KAAK,KAAK,WAAY;AAC3B,cAAM,OAAO,IAAI,oBAAoB;AAErC,YAAI,OAAO,WAAW,UAAU;AAC9B,cAAI,OAAO,KAAK,YAAY,aAAa;AACvC,kBAAM,IAAI,UAAW,oBAAmB;;AAG1C,eAAK;;;;;AAYb,eAAa,GAAG,UAAU,sBAAsB,sBAAsB,SAAU,QAAO;AACrF,QAAI,CAAC,KAAK,QAAQ,SAAS,KAAK,UAAU;AACxC,aAAM;;AAGR,QAAI,YAAW,OAAO;AACpB;;AAGF,UAAM,OAAO,IAAI,oBAAoB;AACrC,SAAK;;AAUP,qBAAmB;ACtMnB,MAAM,QAAO;AACb,MAAM,WAAW;AACjB,MAAM,YAAa,IAAG;AAEtB,MAAM,kBAAmB,YAAW;AACpC,MAAM,iBAAkB,WAAU;AAClC,MAAM,gBAAiB,UAAS;AAChC,MAAM,iBAAkB,WAAU;AAClC,MAAM,aAAc,OAAM;AAC1B,MAAM,eAAgB,SAAQ;AAC9B,MAAM,aAAc,OAAM;AAC1B,MAAM,cAAe,QAAO;AAE5B,MAAM,kBAAkB;AACxB,MAAM,kBAAkB;AACxB,MAAM,kBAAkB;AACxB,MAAM,qBAAqB;AAE3B,MAAM,cAAc;IAClB,WAAW;IACX,UAAU;IACV,OAAO;;AAGT,MAAM,UAAU;IACd,WAAW;IACX,UAAU;IACV,OAAO;;AAST,4BAAoB,eAAc;IAChC,YAAY,SAAS,QAAQ;AAC3B,YAAM;AAEN,WAAK,UAAU,KAAK,WAAW;AAC/B,WAAK,WAAW;AAChB,WAAK,uBAAuB;AAC5B,WAAK,0BAA0B;AAC/B,WAAK;;eAKI,cAAc;AACvB,aAAO;;eAGE,UAAU;AACnB,aAAO;;eAGE,OAAO;AAChB,aAAO;;IAKT,OAAO;AACL,YAAM,YAAY,aAAa,QAAQ,KAAK,UAAU;AAEtD,UAAI,UAAU,kBAAkB;AAC9B;;AAGF,WAAK;AAEL,UAAI,KAAK,QAAQ,WAAW;AAC1B,aAAK,SAAS,UAAU,IAAI;;AAG9B,YAAM,WAAW,MAAM;AACrB,aAAK,SAAS,UAAU,OAAO;AAC/B,qBAAa,QAAQ,KAAK,UAAU;AAEpC,aAAK;;AAGP,WAAK,SAAS,UAAU,OAAO;AAC/B,aAAO,KAAK;AACZ,WAAK,SAAS,UAAU,IAAI;AAC5B,WAAK,SAAS,UAAU,IAAI;AAE5B,WAAK,eAAe,UAAU,KAAK,UAAU,KAAK,QAAQ;;IAG5D,OAAO;AACL,UAAI,CAAC,KAAK,SAAS,UAAU,SAAS,kBAAkB;AACtD;;AAGF,YAAM,YAAY,aAAa,QAAQ,KAAK,UAAU;AAEtD,UAAI,UAAU,kBAAkB;AAC9B;;AAGF,YAAM,WAAW,MAAM;AACrB,aAAK,SAAS,UAAU,IAAI;AAC5B,aAAK,SAAS,UAAU,OAAO;AAC/B,aAAK,SAAS,UAAU,OAAO;AAC/B,qBAAa,QAAQ,KAAK,UAAU;;AAGtC,WAAK,SAAS,UAAU,IAAI;AAC5B,WAAK,eAAe,UAAU,KAAK,UAAU,KAAK,QAAQ;;IAG5D,UAAU;AACR,WAAK;AAEL,UAAI,KAAK,SAAS,UAAU,SAAS,kBAAkB;AACrD,aAAK,SAAS,UAAU,OAAO;;AAGjC,YAAM;;IAKR,WAAW,QAAQ;AACjB,eAAS;WACJ;WACA,YAAY,kBAAkB,KAAK;WAClC,OAAO,WAAW,YAAY,SAAS,SAAS;;AAGtD,sBAAgB,OAAM,QAAQ,KAAK,YAAY;AAE/C,aAAO;;IAGT,qBAAqB;AACnB,UAAI,CAAC,KAAK,QAAQ,UAAU;AAC1B;;AAGF,UAAI,KAAK,wBAAwB,KAAK,yBAAyB;AAC7D;;AAGF,WAAK,WAAW,WAAW,MAAM;AAC/B,aAAK;SACJ,KAAK,QAAQ;;IAGlB,eAAe,QAAO,eAAe;AACnC,cAAQ,OAAM;aACP;aACA;AACH,eAAK,uBAAuB;AAC5B;aACG;aACA;AACH,eAAK,0BAA0B;AAC/B;;AAKJ,UAAI,eAAe;AACjB,aAAK;AACL;;AAGF,YAAM,cAAc,OAAM;AAC1B,UAAI,KAAK,aAAa,eAAe,KAAK,SAAS,SAAS,cAAc;AACxE;;AAGF,WAAK;;IAGP,gBAAgB;AACd,mBAAa,GAAG,KAAK,UAAU,iBAAiB,YAAS,KAAK,eAAe,QAAO;AACpF,mBAAa,GAAG,KAAK,UAAU,gBAAgB,YAAS,KAAK,eAAe,QAAO;AACnF,mBAAa,GAAG,KAAK,UAAU,eAAe,YAAS,KAAK,eAAe,QAAO;AAClF,mBAAa,GAAG,KAAK,UAAU,gBAAgB,YAAS,KAAK,eAAe,QAAO;;IAGrF,gBAAgB;AACd,mBAAa,KAAK;AAClB,WAAK,WAAW;;WAKX,gBAAgB,QAAQ;AAC7B,aAAO,KAAK,KAAK,WAAY;AAC3B,cAAM,OAAO,MAAM,oBAAoB,MAAM;AAE7C,YAAI,OAAO,WAAW,UAAU;AAC9B,cAAI,OAAO,KAAK,YAAY,aAAa;AACvC,kBAAM,IAAI,UAAW,oBAAmB;;AAG1C,eAAK,QAAQ;;;;;AAMrB,uBAAqB;AASrB,qBAAmB;;;ACzOnB,yBAAsB;;;ACNtB,eAAa,aAAW;AACtB,MAAE,8BAA8B,IAAI,WAAW;AAC/C,MAAE,mBAAmB,KAAK;AAAA;AAE5B,eAAa,MAAM;AACjB,MAAE,8BAA8B,IAAI,WAAW;AAAA;AAGjD,cAAY,CAAC,YAAY;AACvB,MAAE,6BAA6B,IAAI,WAAW;AAC9C,MAAE,kBAAkB,KAAK;AAAA;AAE3B,cAAY,MAAM;AAChB,MAAE,6BAA6B,IAAI,WAAW;AAAA;;;ADRhD,SAAO,YAAY;AAEnB,SAAO,YAAY;",
  "names": []
}
